Offline
Newbie
Karma: 0
Posts: 31
|
 |
« on: November 15, 2012, 11:07:50 am » |
Hola chicos. Soy nuevo con Arduino y recien llegado al foro. Estoy haciendo un controlador que gestione la temperatura, la humedad y el volteo de los huevos de una incubadora. Aun estoi esperando a que me lleguen varias cosillas para el proyecto pero me he puesto ya con el sketch y hasta ahora he conseguido esto: //////////////////////////////////////////////////// //CONTROLADOR INCUBADORA PARA HUEVOS // //AUTOR: MARTIN ROMERO VIEITES // ////////////////////////////////////////////////////
#include <DHT.h> #include <LiquidCrystal.h>
#define CALEFACCION 10 #define HUMIDIFICADOR 11 #define MOTOR 12 #define DHTPIN 15 //Analogico 1 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); LiquidCrystal lcd(8,9,4,5,6,7);
void setup() { Serial.begin (9600); lcd.begin (16,2); dht.begin(); pinMode (CALEFACCION, OUTPUT); pinMode (HUMIDIFICADOR, OUTPUT); pinMode (MOTOR, OUTPUT); }
void loop() { float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan (t) || isnan (h)) {Serial.println("Fallo sensor DHT"); } else { lcd.setCursor(0,0); lcd.print("Temperatura "); lcd.print(t,0); lcd.print("C"); lcd.setCursor(0,1); lcd.print("Humedad "); lcd.print(h,0); lcd.print("%"); delay(1200); } if (t <= 36) { digitalWrite (CALEFACCION, HIGH); } if (t >= 38) { digitalWrite (CALEFACCION, LOW); } if (h <= 55) { digitalWrite (HUMIDIFICADOR, HIGH); } if (h >= 65) { digitalWrite (HUMIDIFICADOR, LOW); } } Aun no se si funcionara algo o no pero espero que vosotros me podais decir si va bien o no. Aun me falta el volteo de los huevos que como no tengo ni idea de servos decidi hacerlo con un motor que tendria que funcionar durante 3 segundos para hacer un volteo y lo deberia hacer con una frecuencia de 15 o 30 minutos. Me podeis hechar una manita?
|
|
|
|
|
Logged
|
|
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 31
|
 |
« Reply #2 on: November 15, 2012, 12:23:43 pm » |
El caso es que llegue a Arduino recientemente y no llego a entender las funciones que usaban en el hilo al que haces referencia. Yo habia pensado detener el motor y hacerlo funcionar usando delay pero tambien afectaria al resto del programa lo que supone un gran problema.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 31
|
 |
« Reply #3 on: November 15, 2012, 04:28:54 pm » |
Una cosilla. Con un RTC se podrian hacer periodos de 15 o 30 minutos para hacer funcionar el motor? El coste es bajo y si alguien me dice que es posible intentare informarme para intentar programarlo para mi proyecto.
PD: Podria usar el RTC para comprobar los minutos y cuando estubiera en 00 o en 30 hacer que el motor funcionase durante 3 segundos verdad? A ver si alguien me puede hechar un cable con este tema que es el unico "problemilla" que me queda.
|
|
|
|
« Last Edit: November 15, 2012, 05:47:02 pm by martinrv84 »
|
Logged
|
|
|
|
|
Euskadi
Offline
God Member
Karma: 10
Posts: 613
Arduinotarrak
|
 |
« Reply #4 on: November 15, 2012, 10:58:45 pm » |
Hola, en realidad no te hace falta un RTC para controlar eso, lo puedes hacer con el millis() del mismo Arduino. No es tan crítico el período, que sea cada 30 minutos, o 40 o 50 minutos; y tampoco tendría importancia que hubiera alguna vez dos o tres volteos más o menos seguidos porque Arduino se haya reinicializado.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 31
|
 |
« Reply #5 on: November 16, 2012, 11:39:23 am » |
He estado investigando el comando "millis()" y he añadido algo al codigo. A ver si alguien me puede decir si esta aceptablemente bien asi o si he hecho algo mal. En principio el IDE me da el aprovado  //////////////////////////////////////////////////// //CONTROLADOR INCUBADORA PARA HUEVOS // //AUTOR: MARTIN ROMERO VIEITES // ////////////////////////////////////////////////////
#include <DHT.h> #include <LiquidCrystal.h>
#define CALEFACCION 10 #define HUMIDIFICADOR 11 #define MOTOR 12 #define DHTPIN 15 //Analogico 1 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); LiquidCrystal lcd(8,9,4,5,6,7);
void setup() { Serial.begin (9600); lcd.begin (16,2); dht.begin(); pinMode (CALEFACCION, OUTPUT); pinMode (HUMIDIFICADOR, OUTPUT); pinMode (MOTOR, OUTPUT); }
void loop() { float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan (t) || isnan (h)) {Serial.println("Fallo sensor DHT"); } else { lcd.setCursor(0,0); lcd.print("Temperatura "); lcd.print(t,0); lcd.print("C"); lcd.setCursor(0,1); lcd.print("Humedad "); lcd.print(h,0); lcd.print("%"); delay(1200); } if (t <= 36) { digitalWrite (CALEFACCION, HIGH); } if (t >= 38) { digitalWrite (CALEFACCION, LOW); } if (h <= 55) { digitalWrite (HUMIDIFICADOR, HIGH); } if (h >= 65) { digitalWrite (HUMIDIFICADOR, LOW); } if (millis() >= 1800000) { digitalWrite (MOTOR, HIGH); delay (3000); digitalWrite (MOTOR, LOW); } }
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 31
|
 |
« Reply #6 on: November 19, 2012, 09:30:28 am » |
Nadie me puede hechar una manita? Aunque solo sea para darm alguna pista como cuando me sugerieron usar millis(). Un saludo a todos y gracias.
|
|
|
|
|
Logged
|
|
|
|
|
Euskadi
Offline
God Member
Karma: 10
Posts: 613
Arduinotarrak
|
 |
« Reply #7 on: November 19, 2012, 09:59:23 am » |
Hola, busca en Google Arduino sin delay, hay muchos sitios donde explican cómo hacer temporización con millis(), por ejemplo http://www.ardumania.es/ejercicio-2-blink-without-delay/
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 31
|
 |
« Reply #8 on: November 19, 2012, 04:44:13 pm » |
Muchisimas gracias por tu ayuda. He modificado el codigo dejandolo tal que asi: //////////////////////////////////////////////////// //CONTROLADOR INCUBADORA PARA HUEVOS // //AUTOR: MARTIN ROMERO VIEITES // ////////////////////////////////////////////////////
#include <DHT.h> #include <LiquidCrystal.h>
long previousMillis = 0
#define CALEFACCION 10 //Digital 10 #define HUMIDIFICADOR 11 //Digital 11 #define MOTOR 12 //Digital 12 #define DHTPIN 15 //Analogico 1 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); LiquidCrystal lcd(8,9,4,5,6,7);
void setup() { Serial.begin (9600); lcd.begin (16,2); dht.begin(); pinMode (CALEFACCION, OUTPUT); pinMode (HUMIDIFICADOR, OUTPUT); pinMode (MOTOR, OUTPUT); }
void loop() { float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan (t) || isnan (h)) {Serial.println("Fallo sensor DHT"); } else { lcd.setCursor(0,0); lcd.print("Temperatura "); lcd.print(t,0); lcd.print("C"); lcd.setCursor(0,1); lcd.print("Humedad "); lcd.print(h,0); lcd.print("%"); delay(1200); } if (t <= 36) { digitalWrite (CALEFACCION, HIGH); } if (t >= 38) { digitalWrite (CALEFACCION, LOW); } if (h <= 55) { digitalWrite (HUMIDIFICADOR, HIGH); } if (h >= 65) { digitalWrite (HUMIDIFICADOR, LOW); } unsigned long currentMillis = millis(); if (currentMillis - previousMillis > 1800000) { previousMillis = currentMillis; digitalWrite (MOTOR, HIGH); delay (3000); digitalWrite (MOTOR, LOW); } }
Pero no se por que me da errores con la libreria del DHT y si lo dejo como estaba me compila sin problemas. Tienes idea de por que puede ser?? Muchisimas gracias. Los errores son los siguientes: Controlador_incubadora_2:17: error: expected ',' or ';' before 'DHT' Controlador_incubadora_2.cpp: In function 'void setup()': Controlador_incubadora_2:25: error: 'dht' was not declared in this scope Controlador_incubadora_2.cpp: In function 'void loop()': Controlador_incubadora_2:36: error: 'dht' was not declared in this scope
|
|
|
|
|
Logged
|
|
|
|
|
Euskadi
Offline
God Member
Karma: 10
Posts: 613
Arduinotarrak
|
 |
« Reply #9 on: November 19, 2012, 11:30:31 pm » |
Hola,
Te dice error: expected ',' or ';' before 'DHT'
porque has puesto
long previousMillis = 0 sin acabar con punto y coma ;
|
|
|
|
« Last Edit: November 19, 2012, 11:32:25 pm by curro92 »
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 31
|
 |
« Reply #10 on: November 21, 2012, 05:30:07 pm » |
Muchisimas gracias y perdona por molestarte por un error tan elemental. A continuacion dejo el sketch completo por si a alguien le sirve de algo algun dia. //////////////////////////////////////////////////// //CONTROLADOR INCUBADORA PARA HUEVOS // //AUTOR: MARTIN ROMERO VIEITES // //VERSION: FASE BETA // //FECHA: 20-11-2012 // //USO LIBRE SIN FINES COMERCIALES // ////////////////////////////////////////////////////
#include <DHT.h> #include <LiquidCrystal.h>
long previousMillis = 0;
#define CALEFACCION 10 //Digital 10 #define HUMIDIFICADOR 11 //Digital 11 #define MOTOR 12 //Digital 12 #define DHTPIN 15 //Analogico 1 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); LiquidCrystal lcd(8,9,4,5,6,7);
void setup() { Serial.begin (9600); lcd.begin (16,2); dht.begin(); pinMode (CALEFACCION, OUTPUT); pinMode (HUMIDIFICADOR, OUTPUT); pinMode (MOTOR, OUTPUT); }
void loop() { float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan (t) || isnan (h)) {Serial.println("Fallo sensor DHT"); } else { lcd.setCursor(0,0); lcd.print("Temperatura "); lcd.print(t,0); lcd.print("C"); lcd.setCursor(0,1); lcd.print("Humedad "); lcd.print(h,0); lcd.print("%"); delay(1200); } if (t <= 36) { digitalWrite (CALEFACCION, HIGH); } if (t >= 38) { digitalWrite (CALEFACCION, LOW); } if (h <= 50) { digitalWrite (HUMIDIFICADOR, HIGH); } if (h >= 55) { digitalWrite (HUMIDIFICADOR, LOW); } unsigned long currentMillis = millis(); if (currentMillis - previousMillis > 900000) { previousMillis = currentMillis; digitalWrite (MOTOR, HIGH); delay (3000); digitalWrite (MOTOR, LOW); } }
|
|
|
|
« Last Edit: November 22, 2012, 02:14:15 am by martinrv84 »
|
Logged
|
|
|
|
|
Euskadi
Offline
God Member
Karma: 10
Posts: 613
Arduinotarrak
|
 |
« Reply #11 on: November 21, 2012, 11:10:04 pm » |
Hola, No dices de qué huevos se trata, pero si son de gallina, estás jugando con un margen de temperaturas inaceptable: se recomienda controlar entre 37,2-37,8 para la incubación, y 37,0-37,5 para los últimos días del nacimiento. Y la humedad 50-55 para incubación, y 70-75 para el nacimiento. Además, ten en cuenta que el aire de la incubadora tiene que renovarse con aire del exterior, porque los huevos consumen bastante oxigeno.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 31
|
 |
« Reply #12 on: November 22, 2012, 02:30:51 am » |
Hola de nuevo. Pues en principio seran huevos de gallina. En cuanto a los parametros, ya he modificado los margenes de la humedad y los de la temperatura aunque en este ultimo dato no lo veo tan relevante pues el margen de error del DHT11 es superior a los 0,2ºC que le he recortado en el sketck. Pero de todas formas no los habia cambiado por que aun estoi esperando a que me lleguen los componentes. Ya cuento con el consumo de oxigeno pero no todo va controlado por el arduino, Voi a instalar 2 ventiladores de los de pc en el interior para circulacion del aire y al mismo tiempo del calor (estos ventiladores al ser de funcionamiento ininterrumpido iran directamente alimentador sin pasar por el arduino, y para la humedad pondre otro ventilador que introduzca aire humedo desde el exterior lo que tambien oxigenara el interior. En cuanto a cambiar los parametros sera algo a realizar manualmente modificandolos en el sketch y volviendolo a cargar al alrduino pues ya mis conocimientos no dan para tanto, en el futuro posiblemente lo mire y haga variar los valores segun el dia e incluso podria mirar de configurarlos desde los botones del lcd shield pero de momento me queda bastante fuera de mi alcance. En cuanto me llegue todo y me ponga con el montaje sacare fotos y videos y los subire a ver que os parece. La lista de la compra es la siguiente:
Arduino Uno R3 LCD Keypad Shield for Arduino Duemilanove & LCD 1602 DHT11 High Torque 10RPM 12V DC Geared Motor 2 ventiladores pc 1 ventilador pc (chipset 4cm) para entrada de humedad Bombillas y portalamparas Cable y jumpers y demas ya los tenia en casa.
Muchas gracias.
|
|
|
|
|
Logged
|
|
|
|
|
|