Acuario Norte

 
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Autor Tema: Terrario exterior para Pogona, todo el año?  (Leído 50525 veces)

0 Usuarios y 1 Visitante están viendo este tema.

16-Abril-2020, 11:22
Respuesta #30

por partes

El problema del Mega es que como bien dices la parte wifi ha de conectarse a un 8266 ( por eso uso el ESP32 que ya va todo en uno y tiene mas salidas que el mega   :talk: ).

Los RTC es lo que tienen... que funcionan a pilas por eso uso protocolo NTP pero en tu caso sin internet es mas complicado aunque podrias hacer un contador a modo de reloj si no hay internet.

Si, digamos que la mayoria de gente que usa arduino va a lo barato, es decir Aliexpress

Personalmente mi acuario esta comprado casi al 80 % en aliexpress, sondas , esp32, leds, tip120, calentador sun sun, manoreductor y dosificador co2, modulos reles etc etc etc nunca ningun problema el unico pero es que tarda 30 dias mas o menos


16-Abril-2020, 20:53
Respuesta #31
  • Moderador General
  • Veterano
  • *****
  • Mensajes: 2.757


Me estoy mirando el ESP32. Su instalación. Cómo instalar el IDE Arduino. Como programar ESP32 mediante el uso de GIT HUB, sustitución de repositorio, activación compilador...  :und:  Esto es más complicado que crackear la última versión del videojuego de moda y eso que es totalmente legal  :ght:

Tan solo me preocupa que algunas instrucciones del IDE cambien para ser interpretadas por el ESP32 pero todo eso ya lo iré viendo cuando me llegue el cacharro y algún accesorio para ir empezando de cero, seguro que encuentro algún "traductor".

PD: He visto tutoriales para niños. Sospecho que llegado el momento me hundiré en la miseria pero será divertido, nadie se va a enterar y tiempo me va a sobrar  :whi:

Muchas gracias otra vez Korneto! 



17-Abril-2020, 08:46
Respuesta #32

Nada Hombre, ya te dije que para lo que necesites aquí estamos. El  ESP32 en el Arduino IDE es fácil instalarlo solo hay que ponerle la dirección del GITHUB en preferencias para que se actualice solo. Todo lo demás tiene librerías propias en el 80% de los casos y el 20% restante son las mismas del ESP8266.

La Única instrucción que cambia del esp32 al esp8266 es el digitalWrite(GPIO,VALOR) que se convierte el LEdC(GPIO,VALOR) y solo se usa para dimmear las luces, motores o lo que sea. Los teles funcionan igual que en MEGA o ESP8266 con digitalWrite(GPIO,VALOR).

Como ya te comente cualquier duda que tengas pregúntame sin compromiso que yo encantado de ayudarte. En el 90% de los casos yo copio el código de los ejemplos y lo pego , así no tengo que escribirlo y luego lo modifico al gusto


17-Abril-2020, 11:17
Respuesta #33
  • Moderador General
  • Veterano
  • *****
  • Mensajes: 2.757

Así que me ponga, te iré contando por aquí.  :dedit:



26-Abril-2020, 13:15
Respuesta #34
  • Moderador General
  • Veterano
  • *****
  • Mensajes: 2.757

A 26-04-20. Seguimos confinados (COVID) y el proyecto parado… A pleno sol y sin tapar, unos 21ºC fuera y 27ºC dentro registrados por sonda en el suelo y a la sombra. Ya ventila pero no se esconde…:



Seguiremos actualizando. Cuando a los que no tenemos curro nos dejen salir...



Korneto: Me tiré al vacío hace una semana. Llevo ocho días de cursillo intensivo de programación con IDE. Se me fue la olla y estoy esperando un Arduino UNO, un MEGA y un ESP32. Empezaré con el UNO encendiendo leds  :ppy: y ya iremos gradualmente a los otros... Sondas DHT22, LDR, dos relojes RTC3231, sonda UVa-UVb, dos cajas de 8 relés, LCD 4x20 I2c, 3 protoboards y yo que sé más... Aquí el kit que me he pedido a medida:





No hay plazo de entrega y si a finales de año lo tengo medio en marcha, me doy con un canto en los dientes. El proyecto consiste en:

-Dos termostatos horarios (Cronotermostatos) de doble relé con sondas independientes.

-Interruptor crepuscular temporizado que actúe durante los días nublados (Y conmute foco infrarrojo paralelo al HID UVb en función Temp.).

-Lector porcentaje emisión UVa-UVb con alarma de cambio de lámpara.

-Control de actuador lineal para abrir-cerrar puertas superiores dependiente de: A- Temperatura. B- Lluvia. El actuador trabaja con finales de carrera, bastarán dos relés, uno con inversión de polaridad (Relay obligado entre maniobras) comandados mediante los sketchs de termostato y sensor de lluvia simultáneamente. Ya veremos como lo gestiono.

-Sensor de lluvia que active sistema de puertas superiores.

Iré montando cada componente y probando sus respectivos sketch individualmente. Llegará el día de integrarlos en un solo microcontrolador. La programación se tornará en un infierno pero ya tendré un poco de rodaje, espero.


Y ya para cuando sea mayor y me jubile, empezaré con el tema conectividad en el que tal vez incluya sensores inalámbricos (5 periféricos basados en ESP32) alimentados por minicélulas fotovoltaicas independientes, reguladores de carga, estabilizador de tensión para ESP32 y pilas de litio... Soñar no es gratis pero en este caso es barato.

Ya iré actualizando.
« Última modificación: 26-Abril-2020, 13:22 por Ramon »



26-Abril-2020, 22:16
Respuesta #35
  • Colaborador
  • Veterano
  • ***
  • Mensajes: 8.114

Es que me encanta!
Qué cosa más bonita!
El bicho, el proyecto a mi se me escapa y me parece un trabajazo tremendo.


27-Abril-2020, 07:04
Respuesta #36
  • Moderador General
  • Veterano
  • *****
  • Mensajes: 2.757

Gracias de su parte Neli!  :ght:

Oye, pues yo creo que conociéndote, el poco espacio que ocupa y tu experiencia en informática, esto de Arduino te iba a enganchar. Además de lo sorprendentemente barato que es hoy en día. Te puedes hacer un controlador muy completo que te facilita bastante el trabajo y te aporta tranquilidad, sobretodo cuando tienes que estar fuera de casa unos días. Por tan solo unos 30 euros. Otra cosa es montarlo y conseguir que funcione, pero va a ser divertido  :alas:



27-Abril-2020, 20:37
Respuesta #37
  • Colaborador
  • Veterano
  • ***
  • Mensajes: 8.114

Ya tengo un kit básico de arduino pero no me puse con ello y para acuario ya no creo. Estoy pensando desmontar lo poco que me queda o montar un africano que pueda mantener.


28-Abril-2020, 06:55
Respuesta #38
  • Moderador General
  • Veterano
  • *****
  • Mensajes: 2.757

Los africanos piden bastante piedra en general (Salvo sardinas y poco más), tendrás que pedirle una mano al chaval pero son muy divertidos, sobretodo los pequeños de Tanganyca. Tengo pendiente desde hace años un buen tanque con conchícolas y pequeños Lamprologus de roca así en plan "dos ambientes" en un gran acuario en el que se les vea pequeñitos. Supongo que cuando me jubile y tenga clara mi residencia definitiva.

Tienes ese juguete en casa y no te has puesto a trastear? Nos hacemos mayores...  :whi:



29-Abril-2020, 13:23
Respuesta #39
  • Colaborador
  • Veterano
  • ***
  • Mensajes: 8.114

El montaje sería con calma, lo importante es el mantenimiento, que debe ser mínimo.


30-Abril-2020, 14:24
Respuesta #40

Todo depende como lo monetes, en mi caso ahora estoy por la parte de los test (que me parece un autentico coñazo) y estoy investigando con un modulo de colorimetro conectado al esp32 y que me lo guarde en una base de datos.... por ahora el proyecto va al 50% y las pruebas iniciales van de perlas, solo hay que echar los liquidos y ya. Tambien hay sondas de ph kh gh etc etc pero algunas valen sobre los 300 pavos y va a ser que no, la version rata me vale. Al final lo bueno de Arduino es que cualquier cosa que te imagines la puedes hacer con un coste minimo


04-Mayo-2020, 10:08
Respuesta #41
  • Moderador General
  • Veterano
  • *****
  • Mensajes: 2.757

Korneto: Pues eso de los análisis suena tan bien como complicado. Ha de ser la pera tener monitorizados los parámetros del agua en tiempo real a un precio aceptable. Ya leí que algunas sondas como las de pH no bajan de precio ni por esas...


Bueno, primer avance en el tema Arduino. Me llegaron parte de los componentes el miércoles. Empecé el jueves con más miedo que otra cosa. Al rato ya pinchaba aquí y allá asumiendo que tenía placa de recambio y creo que es la mejor manera de meterse en esto, trasteando sin miedo (Conseguí colgar el IDE, el Arduino se volvió loco y un relé se puso a ratear como una ametralladora  :alas:)





En este momento ya tengo dos termostatos "básicos" de doble relé con histéresis (calefacción, ventilación) a la espera de asignar las variables editables para poder modificar en el futuro los parámetros mediante un pequeño teclado matricial. Esto va a tener miga, supongo...

Ya tengo trabajando el interruptor crepuscular regulado analógicamente mediante un pequeño potenciómetro de ajuste. Ahora le falta programar un contador y un temporizador para el encendido y apagado del foco HID pues necesita de cierto tiempo de arranque y nos lo cargaríamos con cuatro nubes que pasaran...

También tengo ya monitorizadas las temperaturas y HR en monitor serie así como el estado de la iluminación (On/Off)





He conseguido integrar todo en un solo sketch y quizás sea lo que más me ha costado por ahora. Tengo que conseguir un soldador de precisión porque la cagué comprando la pantala LCD 4x20 y esta requiere soldar un módulo i2C de muuuchos pines...

Sospecho que el mayor reto va a ser todo lo relacionado con el tiempo: Instalar RTC, integrar valores horarios a los distintos sketch y sustituir los "delay" por otras funciones como "millis". El factor tiempo se me antoja muy complejo para un ñapas en materia de programación. Superado esto, no quiero pensar en lo que será la conectividad!

Todos los componentes han llegado bien menos los famosos por "precisos" DHT22 (sondas de temperatura y humedad relativa) que marcan un diferencial en HR de hasta el 10%! Y no son baratos precisamente. Llevo un cabreo del carajo porque los higrómetros precisos siempre habían sido un sueño y veo que lo siguen siendo...

El mayor puteo ha sido la lógica inversa de los relés chinos. Esto me ha supuesto cargarme cinco pines tan solo para los indicadores LED que integraré en el panel de control de la caja. Total, que el Arduino UNO se me ha quedado ya sin pines en tres días de montaje y así que me lleguen las sondas restantes tendré que pasar al Mega  :hap:. En cuanto a memoria interna, todavía ando razonablemente bien pese  (18%).

Estoy bastante contento porque me temía una toma de contacto aún más bestia... Queda todo y lo más difícil por hacer pero no hay plazo.

Por si se pasara por aquí alguien interesado o mejor aún, con una mínima experiencia para corregir cualquier cosa, añado el código:


Código: [Seleccionar]
/////////////////////////////////////////////////////////////////////
//                                                                 //
//       CONTROLADOR BIZONAL INVERNADERO PARA REPTILES   V.1       //
//                                                                 //
//     -Control clima general:Termostato 2 relé (alta/baja)        //
//     -Control hibernáculo(nido):Termostato 2 relé ( " )          //
//     -Medición humedad relativa (HR) invernadero y nido          //
//     -Interruptor crepuscular alumbrado general (diurno)         //
//     -Control continuo rendimiento lámpara/tubo UVa/UVb          //
//     -Control horario/estacional de parámetros (Temps./luz)      //
//     -Apertura/cierre progresivo techo invernadero               //
//     -Sensor lluvia cierre total techo invernadero               //
//     -Sensor presencia en hibernáculo (eficiencia energética)    //
//                                                                 //
//     RCG Zootecnia Doméstica  04/05/2020  V.1                    //
//                                                                 //
/////////////////////////////////////////////////////////////////////


//Glosario, terminaciones en:
//  ...C: Relativas a Clima invernadero (general)       
//  ...N:    "   a clima Nido (hibernáculo)
//  ..FC:    "   a Frío Clima general
//  ..FN:    "   a Frío Nido
//  ..CC:    "   a Calor Clima
//  ..CN:    "   a Calor Nido


#include <DHT.h>                          //librería DHT
#include <DHT_U.h>                        //librería DHT unificada

int SENSORC = 2;                          //sensor DHT22 CLIMA
int SENSORN = 9;                          //sensor DHT22 NIDO
int SENSORLDR = 0;                        //sensor LDR
float TEMPERATURAC;                       //variable temperatura CLIMA
float TEMPERATURAN;                       //variable temperatura NIDO
int HUMEDADC;                             //variable humedad CLIMA
int HUMEDADN;                             //variable humedad NIDO
int LEDFC = 4;                            //LED indicador frío CLIMA
int LEDCC = 3;                            //LED indicador calor CLIMA
int LEDFN = 11;                           //LED indicador frío NIDO
int LEDCN = 10;                           //LED indicador calor NIDO
int LEDLDR = 7;                           //LED indicador LDR iluminación Gral.
int RELECC = 5;                           //Relé alta calor CLIMA
int RELEFC = 6;                           //Relé baja frío CLIMA
int RELELDR = 8;                          //Relé LDR iluminación Gral.
int RELECN = 12;                          //Relé alta calor NIDO
int RELEFN = A1;                          //Relé baja frío NIDO


DHT dht1(SENSORC, DHT22);                 //Asignación sensor CLIMA
DHT dht2(SENSORN, DHT22);                 //Asignación sensor NIDO

void setup(){
  Serial.begin(9600);                     //inicializando monitor serie
  dht1.begin();                           //inicializando sonda DHT1(CLIMA)
  dht2.begin();                           //inicializando sonda DHT2(NIDO)
  digitalWrite(LEDCC, LOW);               //LED calor CLIMA señal baja
  digitalWrite(LEDFC, LOW);               //LED frío CLIMA señal baja
  digitalWrite(RELECC, HIGH);             //relé calor CLIMA señal baja
  digitalWrite(RELEFC, HIGH);             //relé frío CLIMA señal baja
  digitalWrite(RELELDR, HIGH);            //relé LDR iluminación Gral.señal alta
  digitalWrite(LEDCN, LOW);               //LED calor NIDO señal baja
  digitalWrite(LEDFN, LOW);               //LED frío NIDO señal baja
  digitalWrite(RELECN, HIGH);             //relé calor NIDO señal baja
  digitalWrite(RELEFN, HIGH);             //relé frío NIDO señal baja
  pinMode(LEDCC, OUTPUT);                 //pin LED calor CLIMA es una salida
  pinMode(LEDFC, OUTPUT);                 //pin LED frío CLIMA es una salida
  pinMode(LEDLDR, OUTPUT);                //pin LED LDR Ilumin. Gral. es una salida
  pinMode(RELECC, OUTPUT);                //pin relé calor CLIMA es una salida
  pinMode(RELEFC, OUTPUT);                //pin relé frío CLIMA es una salida
  pinMode(RELELDR, OUTPUT);               //pin relé LDR Ilumin. Gral. es una salida
  pinMode(LEDCN, OUTPUT);                 //pin LED calor NIDO es una salida
  pinMode(LEDFN, OUTPUT);                 //pin LED frío NIDO es una salida
  pinMode(RELECN, OUTPUT);                //pin relé calor NIDO es una salida
  pinMode(RELEFN, OUTPUT);                //pin relé frío NIDO es una salida(OJO!pinA1!)
}                                         //NOTA: Entradas analógicas asignan por defecto
void loop(){                             
                                          //VARIABLES
  TEMPERATURAC = dht1.readTemperature();  //asignación variable lectura Temp. DHTCLIMA
  HUMEDADC = dht1.readHumidity();         //asignación variable lectura Humed. DHTCLIMA
  TEMPERATURAN = dht2.readTemperature();  //asignación variable lectura Temp. DHTNIDO
  HUMEDADN = dht2.readHumidity();         //asignación variable lectura Humed. DHTNIDO
 
                                          //MONITOR SERIE
  Serial.print("CLIMA ");                 //imprimir Monitor serie. Sin valor
  Serial.print("Tª:");                    //imprimir Monitor serie. Con valor TªCLIMA
  Serial.print(TEMPERATURAC, 1);          //asignar a impresión variable TªCLIMA
  Serial.print(" HR:");                   //imprimir Monitor serie. Con valor Hum.CLIMA
  Serial.println(HUMEDADC);               //asignar a impresión variable Hum.CLIMA y ¿(ln)fin línea?
  Serial.print("NIDO  ");                 //imprimir Monitor serie. Sin valor
  Serial.print("Tª:");                    //imprimir Monitor serie. Con valor TªCLIMA
  Serial.print(TEMPERATURAN, 1);          //asignar a impresión variable TªCLIMA
  Serial.print(" HR:");                   //imprimir Monitor serie. Con valor Hum.CLIMA
  Serial.println(HUMEDADN);               //asignar a impresión variable Hum.CLIMA y ¿(ln)fin línea? 
  delay(500);                             //lapso demora 500 miliseg.(1/2 segundo)
 
                                          //INTERRUPTOR CREPUSCULAR
   if(analogRead(SENSORLDR) < 200){       //si... lectura sensor LDR inferior a...
    digitalWrite(LEDLDR, HIGH);           //...entonces LED LDR señal alta
   }else{                                 //sino... 
    digitalWrite(LEDLDR, LOW);            //...LED LDR señal baja 
  }
   if(analogRead(SENSORLDR) < 200){       //si... lectura sensor LDR inferior a...
    digitalWrite(RELELDR, LOW);           //...entonces relé LDR Ilum.Gral. señal baja
    Serial.println("LUZ:On");
   }else{                                 //sino...
    digitalWrite(RELELDR, HIGH);          //relé LDR Ilum.Gral. señal alta
    Serial.println("LUZ:Off");   
  }                                       //ATENCIÓN: Relés chinos: lógica inversa!
 delay(500);                              //lapso demora 500 miliseg.(1/2 segundo)
 
                                          //MÓDULO TERMOSTATO CLIMA GRAL. INVERNADERO
  if(TEMPERATURAC < 23){
    digitalWrite(LEDCC, HIGH);
    digitalWrite(RELECC, LOW);
  }else{
    digitalWrite(LEDCC, LOW);
    digitalWrite(RELECC, HIGH);
  }   
 
  if(TEMPERATURAC > 23){
    digitalWrite(LEDFC, HIGH);
    digitalWrite(RELEFC, LOW);
  }else{
    digitalWrite(LEDFC, LOW);
    digitalWrite(RELEFC, HIGH);
  } 
 
  delay(500);
                                          //MÓDULO TERMOSTATO CLIMA NIDO HIBERNÁCULO
  if(TEMPERATURAN < 22){
    digitalWrite(LEDCN, HIGH);
    digitalWrite(RELECN, LOW);
  }else{
    digitalWrite(LEDCN, LOW);
    digitalWrite(RELECN, HIGH);
  }   
 
  if(TEMPERATURAN > 22){
    digitalWrite(LEDFN, HIGH);
    digitalWrite(RELEFN, LOW);
  }else{
    digitalWrite(LEDFN, LOW);
    digitalWrite(RELEFN, HIGH);
  } 
 
  delay(500);
}


Hala, un saludo!
« Última modificación: 04-Mayo-2020, 10:14 por Ramon »



09-Mayo-2020, 10:05
Respuesta #42
  • Moderador General
  • Veterano
  • *****
  • Mensajes: 2.757

Actualizo...

De atasco en atasco, ya he tenido que pasar al Arduino Mega al quedarme sin pines  :alas:. Tengo bastante claro que alguien que sepa, se habría ahorrado dos o tres de los 22 pines que ya tengo ocupados pero a falta de conocimiento, recursos. El UNO me ha durado una semana  :und:

Me encuentro en pleno frenazo. Un día entero dedicado a entender y aplicar la función millis para temporizar sin interrumpir el trabajo del controlador. Esto lo necesitaré tanto para el interruptor crepuscular (No puede encender o apagar el foco HID hasta haber pasado al menos media hora) y para el controlador del actuador lineal, un motor que abrirá y cerrará las tapas automáticamente: Sin resultado todavía.

Otro día entero para intentar aplicar la función for como contador sumatorio del registro de temperatura para realizar después la media. Esto le daría mucha estabilidad al termostato a la hora de realizar las maniobras sin encender y apagar repetidas veces el relé en cada cambio de maniobra: Sin resultado todavía.

A la espera de que llegue el módulo de reloj a tiempo real RTC DS3231 para instalarlo, configurar la hora y fecha y poder aprender a activar alarmas que en este caso, sustituirían parámetros de temperatura para diferenciar el día y la noche, por ejemplo. Ya veremos cuando me ponga si esto es viable por esta vía.




En la foto: Los dos leds rojos indican que los termostatos están calentando tanto invernadero como nido. El led amarillo del centro indica que la luz está apagada. Si apago la luz del escritorio, se enciende. El led verde de la izquierda indica que las puertas están cerradas para ahorrar tiempo de calefacción.


Es todo tan canijo que he usado dos tableros de conexión ("Protoboard") para que me quepan los dedos al hacer las conexiones  :ght:.

Ya solo me sobra un relé en la placa de ocho. El ventilador sustituye de cara a las pruebas al actuador lineal. En vez de abrir y cerrar, sopla hacia un lado u otro (Inversión de fase). Este es uno de los casos en los que tengo que temporizar pues para abrir o cerrar las puertas necesito 1 segundo para que el pistón avance o retroceda 10mm. De este modo, la apertura se haría por fases hasta ajustarse automáticamente siguiendo las órdenes del termostato y ahorrando muuuucha energía.

Uno de los objetivos de este proyecto recuerdo que es mantener una instalación de 1300l. en exterior con el consumo de un terrario de unos 500l. en interior... A estas alturas ya puedo decir que serán dos los proyectos. Uno es por control analógico (Cuadro eléctrico ya montado pendiente de instalar) y el otro es este, ya digital.

He recibido el contador de consumo que se encargará algún día de contrastar ambos sistemas de control. En el futuro, podremos ver el ahorro energético de un sistema frente al otro y sacar conclusiones respecto a los costes y amortización.

Para el que acabe de llegar, recuerdo que estoy publicando el montaje aquí: http://www.zootecniadomestica.com/terrario-exterior-para-pogona/


Seguiré actualizando...
« Última modificación: 09-Mayo-2020, 10:14 por Ramon »



14-Mayo-2020, 09:51
Respuesta #43

jajajaj como me alegra ver que te diviertes y te desesperas..... es lo bonito del arduino que a veces crees que eres Bill Gates y a los 5 segundos piensas que eres un crio de 4 años, eso es normal.

Vamos por partes

EL DHT22:  En el Datasheet del cacharro pone que los rangos de humedad son de 0.1 % asi que algo anda mal por ahi a ver si te lo encuentro que yo nunca use ese modulo

ME FALTAN PINES:  Esto es tambien normal jajaja y mas en uno o mega que tienen menos que el esp32, pero tienen algo de solucion. Veo en elsketch que cada vez que el Clima va a Frio o calor se enciende un led para indicarlo... yo lo haria de una de estas dos maneras.... conectando el led al mismo pin que el rele asi cuando deje pasar corriente a uno tambien al led y se enciende o apaga, otra opcion seria conectar un led RGB para que cambie de color dependiendo de lo que tengas enchufado, asi ahorras 5 pines

SETUP: No entiendo muy bien pq haces el digitalwrite aqui, en principio , el rele estara en estado LOW nada mas arrancar ( cuidado hay pines que arrancan en HIGH), lo de los reles chinos tiene su tema... yo cogi un traductor con la camara del movil para ver el estado Normalmente Abierto o Cerrado

LOOP: Aqui veo el mayor problema y comun en muchos casos. Intentas meter toda la logica en el loop y eso lo que hace es relentizar el sistema. Tendrias que meter cada "apartado" en un void e invocarlo desde el loop asi podrias usar los millis. te dejo un ejemplo a ver si se entiende.

Código: [Seleccionar]
///.................................................. VARIABLES DESPUES DE LOS INCLUDES..........................................................
#define SENSORES 300000 // 5 Minutes
uint64_t tiempodelectura = 0;
int TempNID = 22;  /// Temperatura que querremos en el Nido
int TempINV = 23;  /// Temperatura que querremos en el Invernadero

///.................................................. ANTES QUE EL SETUP...........................................................

void LEER_SENSORES{
                                            //VARIABLES
  TEMPERATURAC = dht1.readTemperature();  //asignación variable lectura Temp. DHTCLIMA
  HUMEDADC = dht1.readHumidity();         //asignación variable lectura Humed. DHTCLIMA
  TEMPERATURAN = dht2.readTemperature();  //asignación variable lectura Temp. DHTNIDO
  HUMEDADN = dht2.readHumidity();         //asignación variable lectura Humed. DHTNIDO

////////////////// ESCRIBIMOS EN EL SERIAL //////////////////////////

                                          //MONITOR SERIE
  Serial.print("CLIMA ");                 //imprimir Monitor serie. Sin valor
  Serial.print("Tª:");                    //imprimir Monitor serie. Con valor TªCLIMA
  Serial.print(TEMPERATURAC, 1);          //asignar a impresión variable TªCLIMA
  Serial.print(" HR:");                   //imprimir Monitor serie. Con valor Hum.CLIMA
  Serial.println(HUMEDADC);               //asignar a impresión variable Hum.CLIMA y ¿(ln)fin línea?
  Serial.print("NIDO  ");                 //imprimir Monitor serie. Sin valor
  Serial.print("Tª:");                    //imprimir Monitor serie. Con valor TªCLIMA
  Serial.print(TEMPERATURAN, 1);          //asignar a impresión variable TªCLIMA
  Serial.print(" HR:");                   //imprimir Monitor serie. Con valor Hum.CLIMA
  Serial.println(HUMEDADN);               //asignar a impresión variable Hum.CLIMA y ¿(ln)fin línea? 
 
}

void CREPUSCULO{
                                          //INTERRUPTOR CREPUSCULAR
   if(analogRead(SENSORLDR) < 200){       //si... lectura sensor LDR inferior a...
    digitalWrite(LEDLDR, HIGH);           //...entonces LED LDR señal alta
    digitalWrite(RELELDR, LOW);           //...entonces relé LDR Ilum.Gral. señal baja
       Serial.println("LUZ:On");
   }else{                                 //sino... 
    digitalWrite(LEDLDR, LOW);            //...LED LDR señal baja 
    digitalWrite(RELELDR, HIGH);          //relé LDR Ilum.Gral. señal alta
    Serial.println("LUZ:Off");   
  }
 
}

void TEMPERATURA{
     
                                          //MÓDULO TERMOSTATO CLIMA GRAL. INVERNADERO
  if(TEMPERATURAC < TempINV){
    digitalWrite(LEDCC, HIGH);
    digitalWrite(RELECC, LOW);
  }else{
    digitalWrite(LEDCC, LOW);
    digitalWrite(RELECC, HIGH);
  }   
 
  if(TEMPERATURAC > TempINV){
    digitalWrite(LEDFC, HIGH);
    digitalWrite(RELEFC, LOW);
  }else{
    digitalWrite(LEDFC, LOW);
    digitalWrite(RELEFC, HIGH);
  } 
 

                                          //MÓDULO TERMOSTATO CLIMA NIDO HIBERNÁCULO
  if(TEMPERATURAN < TempNID){
    digitalWrite(LEDCN, HIGH);
    digitalWrite(RELECN, LOW);
  }else{
    digitalWrite(LEDCN, LOW);
    digitalWrite(RELECN, HIGH);
  }   
 
  if(TEMPERATURAN > TempNID){
    digitalWrite(LEDFN, HIGH);
    digitalWrite(RELEFN, LOW);
  }else{
    digitalWrite(LEDFN, LOW);
    digitalWrite(RELEFN, HIGH);
  } 
 
}

///..................................................  DESPUES DEL SETUP...........................................................

void loop(){                             

   uint64_t now = millis();  /// declaramos la variable now con los millis actuales
     
      if((now - tiempodelectura) > SENSORES) {    /// si now menos la variable tiempo de lectura es mayor que los millis que le hemos declarado en sensores
          tiempodelectura = now;                   /// cambiamos la variable tiempo de lectura por now que son los millis actuales
LEER_SENSORES();                                    /// ejecutamos la lectura de sensores
}
CREPUSCULO();
TEMPERATURA();
 

 
}


FOCO: Bueno en el loop ya tienes un ejemplo del uso de millis simplemente  duplicarlo y ponerle 30 minutos en vez de 5 a la variable

ACTUADOR LINEAL: Basicamente es un motor paso a paso, aunque yo lo que haria es cambiar la parte de temperatura que te puse arriba y decirle que lea el termometro y si , por ejemplo, si es menor de 24 grados encienda la calefaccion y si es mayor de 25 abra la tapa, le puedes poner un TIP120 y enchufarlo a una salida PWM para que abra mas o menos en funcion de la temperatura.

FOR: No entiendo muy bien esta parte la verdad, la funcion for es, por asi decirlo, un loop. se suele usar para contar variables o sustituir rutinas repetitivas como asignacion de pines, pero lo que entiendo es que tienes problema es algo comun, es cuestion de los rangos que ponemos a las temperaturas, es decir tu le estas indicando que cuando la temperatura sea mayor a 25 se encienda el rele y cuando sea menor a 25 se apague, pues bien, ese es el error, cuando la sonda tenga 25.01 se activara y cuando tenga 25 se apagara, una diferencia tan sumamente minima como 0.01 grados es acercar la mano al cristal, por ejemplo, yo pondra una desviacion logica de, por ejemplo, 1 grado o medio grado lo cual le permite no volverse loco al rele. seria algo asi como if( Temp < 25 && Temp> 26)

Si no es esto que te comento dimelo y buscamos solucion





14-Mayo-2020, 21:14
Respuesta #44
  • Moderador General
  • Veterano
  • *****
  • Mensajes: 2.757

Joder Korneto, menudo currazo! Gracias, creo que me has ahorrado muchos dolores de cabeza!

Ya tenía sospechas y muchas dudas sobre qué parte del programa corresponde al setup y cual al loop... Creo que me ha quedado claro!  :oba:

Ahora no puedo pero mañana mismo me pongo a probarlo. Ha quedado reducido a la mitad y las variables en un 70%!  :alas:

He visto a un italiano desoldar el LED SMD de la placa de relés para soldar dos cables que alimentan a un DIPLED normal y corriente. Me lo voy a pensar, me sobrará un relé para probarlo...

En cuanto lo pruebe y mire de arreglar lo que falle (Nada sale a la primera en Arduino, menos aún la ortografía), te digo algo. Gracias otra vez.