Estimados amigos me he embarcado en este proyecto a parte de de ser aficionado al mundo de los reptiles, anfibios y demas, también me llama el mundillo arduino, y con mis 40 tacos me pongo a la labor de intentar aprender, leo por aquí, allá y me decido a empezar.
El tema parece sencillo:
1 lcd 20x40 I2C
1 RTC I2C DS3231
1 sensor DHT22
1modulo 4 relays(luz, calor, sistema lluvia, ventilador(no incluido por ahora)
1 arduino nano
dado que enchufando todo esto no se entienden, me decido por empezar código y con el comienzan los problemas
1º- según enciendo el arduino se encienden los relays de lluvia y luz, aunque no sea la hora
2º- ¿como le digo al Sr arduino que cada 2 horas(o las que le indique) encienda el relé de lluvia durante
30 segundos?
y esta ya seria la caña : smiley-confuse: aunque me conformo con las anteriores
como podria modificar los datos sin tener que poner el arduino en el pc
Ante todo disculparme por el código, quizás no esté lo bien ordenado que debería pero yo lo que sé es lo que ustedes me enseñais, leyendo y leyendo...
Gracias a todos.
#include <Time.h>
#include <TimeLib.h>
#include <RTClib.h>
#include <Wire.h> // libreria para comunicación I2c /
#include <LiquidCrystal_I2C.h> // libreria para LCD por protocolo I2c /
#include <DHT.h> // libreria para sensor temp/hum
//////////////////////////////////////////////////////////////////////////////////////////
// definir variables
int sensor = 8; //pin desde el sensor dht22
int calor = 11; //define pin relé manta termica
int luz = 12; //define pin luz
int temp; //indica que el término temp se asociará a la temperatura
int humedad; //indica que el término humedad se asociará a la humedad
int lluvia = 13; // define rele bomba lluvia
int fun= 10; //pin ventilador
int minutos;
int segundos;
String minut();
int minuto;
String segund();
int segundo;
DHT dht22(sensor, DHT22); // asociamos la libreria con el sensor (nº de pin y tipo de sensor) y nombre al que se asocia dht22
LiquidCrystal_I2C lcd(0x27,20,4); // asociamos libreria del display y la llamamos lcd indicamos puerto de conexion y las filas y columnas del display /
RTC_DS3231 RTC;
void setup() {
Wire.begin(); // inicia comunicación I2C
RTC.begin(); //inicia reloj rtc
lcd.begin(20,4); // inicia LCD
dht22.begin(); // inicia el sensor tem/hume
lcd.clear(); // borra la pantalla
lcd.backlight();
pinMode(calor, INPUT);
pinMode(luz, OUTPUT);
pinMode(lluvia, OUTPUT);
pinMode(fun, OUTPUT);
//////// barra de progreso inicializar da tiempo para que el sensor se estabilice//////
lcd.setCursor(0,0);
lcd.print("Inicializando...");
for (int i = 0; i <= 20; i++) {
lcd.setCursor(i, 1);
lcd.write((byte)4);
delay(250);
}
delay(250);
lcd.clear();
delay(500);
if (RTC.lostPower()) {RTC.adjust(DateTime(F(__DATE__), F(__TIME__)));} //ajuste reloj
}
void loop() {
////////////////reloj//////////////////
DateTime now = RTC.now(); //obtiene datos del modulo RTCif (RTC.lostPower()) {
minutos=now.minute();
segundos=now.second();
String minut= String(minutos, DEC); // convertimos a string los minutos en decimal
minuto=minut.toInt(); // asignamos a un entero (minuto) el valor de un string(minut)
String segund= String(segundos, DEC); // Idem
segundo=segund.toInt(); // Idem
lcd.setCursor(12,3); // colocamos el cursor para escribir la hora
lcd.print(now.hour(), DEC); // escribimos la hora
lcd.print(':');
if(minuto<10){ // comprobamos que sea un digito para añadir un 0
lcd.print('0');
}
lcd.print(minutos, DEC); // escribimos los minutos
lcd.print(':');
if(segundo<10){ // comprobamos que sea un digito para añadir un 0
lcd.print('0');
}
lcd.print(segundos, DEC); // escribimos los segundos
//////////sensor dht22 ///////////////
humedad = dht22.readHumidity();
temp = dht22.readTemperature();
///////////////////////////////función temperatura/////////////////////////////////////////////////
lcd.setCursor(0,0);
lcd.print("Temperatura: ");
lcd.print(temp);
lcd.print((char)223);
//símbolo de gradosº
if (temp<=20){ //enciende resistencia
digitalWrite(calor, LOW);
lcd.print(" ON ");
}
else{
digitalWrite(calor, HIGH);
lcd.print(" OFF ");
}
if (temp>=20){ //enciende ventilador
digitalWrite(fun, LOW);
}
else{
digitalWrite(fun, HIGH);
}
lcd.setCursor(0,1);
lcd.print("Humedad: ");
lcd.print(humedad);
lcd.print("%");
///////////////////////////////función iluminación/////////////////////////////////////////////////
lcd.setCursor (0,2);
lcd.print("luz: ");
if(now.hour() == 12 && now.minute() == 00){ // hora de encendido de luces
digitalWrite(luz,LOW);
lcd.print("ON");
}
else if(now.hour() == 12 && now.minute() == 30){ // hora de apagado luces
digitalWrite(luz,HIGH);
lcd.print("OFF");
}
///////////////////////////////función de lluvia///////////////////////////////////////////////////
lcd.setCursor (0,3);
lcd.print("Lluvia: ");
if(now.hour() == 13 && now.minute ()== 54&& now.second ()> 31){
digitalWrite(lluvia, LOW);
lcd.print("ON");
delay(30000); // 30 segundos
digitalWrite(lluvia, HIGH);
}
}
Por cierto subiré el código cuando ya esté funcionando al 100% para que el que lo quiera haga uso de él
ya se que somos muchos los que lo queremos, no contaba con esto jejejeje
el que adjunto aquí falta pulirlo
terrario.ino (3.7 KB)