Hola a todos,
Primero de todo me presento, soy delineante industrial, mi sector no tiene nada que ver con la electrónica pero de siempre me ha atraído este mundillo, hay que decir que no tengo ni idea de electrónica y lo que aprendo es a base de leer foros como este.
Gracias a un foro dedicado a las mascotas descubrí el mundo de Arduino, para mi fue un gran descubrimiento y me decidí a empezar un proyecto, en concreto automatizar un ternario tropical.
Las funciones que le quiero dar son las siguientes:
-Encender y apagar luces según horario.
-Encender bomba de riego cada 2 horas durante 30seg.
-Encender bombilla de calor según temperatura.
Todo esto visualizado en una pantalla LCD de 128x64
Mi problema es poder visualizar en la pantalla los reles que están encendidos y poder encender la bomba de riego por un tiempo establecido.
Gracias de antemano por vuestra colaboración.
El código que llevo de momento es este:
/////////////////////////////////////////////////////////////////////////////////
// ARCHIVO: Programa_terrario.ino
// AUTOR: Sergio Sanchez
// PROPOSITO: Manejar y controlar un terrario.
// VERSION: 0.01
// FECHA: 12/2013
////////////////////////////////////////////////////////////////////////////////
#include <Wire.h> //libreria Arduino
#include <EEPROM.h> //libreria para poder escribir y leer en la memoria no volatil de Arduino
#include <DHT.h> //libreria de sensor de humedad y temperatura
#include <RTClib.h> //libreria del reloj
#include <U8glib.h> //libreria de la pantalla LCD
//Pines de los reles
#define TEMPIN 2 //pin donde esta conectado el sensor de temperatura y humedad
#define TEMPTIPO DHT21 // DHT 21 (AM2301) define el sensor montado
#define raptorPin 30 // pin digital de salida para Bonbilla Raptor
#define ceramicaPin 31 // pin digital de salida para Bombilla ceramica
#define infrarojosPin 32 // pin digital de salida para Bombilla de infrarojos
#define lluviaPin 33 // pin digital de salida para Bomba de lluvia
#define bombaPin 34 // pin digital de salida para Bomba inferior
#define vacio1Pin 35 // pin digital de salida vacio
#define vacio2Pin 36 // pin digital de salida vacio
#define vacio3Pin 37 // pin digital de salida vacio
RTC_DS1307 Reloj; // Crea el objeto Reloj
U8GLIB_ST7920_128X64_4X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
DHT dht(2, DHT21); //tipo de sensor de temperatura y humedad
float t; //define la vafiable flotante temperatura
float h; //define la vafiable flotante humedad
void draw(void) {
u8g.setFont(u8g_font_5x8);
u8g.drawStr( 2, 9, "TEMP");
u8g.drawCircle(46, 4, 1);
u8g.drawStr( 3, 18, "HUM");
u8g.drawCircle(44, 13, 1);
u8g.drawCircle(47, 16, 1);
u8g.drawLine(43,17,48,12);
u8g.drawStr( 101, 9, "RELES");
u8g.drawStr( 100, 20, "lu");
u8g.drawStr( 100, 28, "ce");
u8g.drawStr( 100, 36, "in");
u8g.drawStr( 101, 44, "ag");
u8g.drawStr( 101, 52, "bo");
u8g.drawStr( 100, 60, "va");
u8g.drawFrame(0,0,128,64); //Cuadrado general
u8g.drawLine(0,20,98,20); //Separacion temperatura con diagrama
u8g.drawLine(51,0,51,20); //Separacion temperatura con fecha
u8g.drawLine(98,0,98,63); //Separacion fecha con reles
u8g.drawFrame(74,16,2,2); //Posicion puntos reloj
u8g.drawFrame(74,13,2,2); //Posicion puntos reloj
u8g.drawPixel(64,8); //Posicion puntos fecha
u8g.drawPixel(75,8); //Posicion puntos fecha
}
void setup () {
Serial.begin(57600);
Wire.begin();
dht.begin();
// Reloj.begin(); // Inicia la comunicación con el RTC
// Reloj.adjust(DateTime(DATE, TIME)); // Establece la fecha y hora del PC
pinMode(raptorPin, OUTPUT); //Define el Pin como salida
pinMode(ceramicaPin, OUTPUT); //Define el Pin como salida
pinMode(infrarojosPin, OUTPUT); //Define el Pin como salida
pinMode(lluviaPin, OUTPUT); //Define el Pin como salida
// pinMode(bombaPin, OUTPUT); //Define el Pin como salida
// pinMode(vacio1Pin, OUTPUT); //Define el Pin como salida
// pinMode(vacio2Pin, OUTPUT); //Define el Pin como salida
// pinMode(vacio3Pin, OUTPUT); //Define el Pin como salida
}
void loop() {
Serial.begin(9600);
float h = dht.readHumidity(); //Obtiene la humedad
float t = dht.readTemperature(); //Obtiene la temperatura
DateTime now = Reloj.now(); //Obtiene la fecha y hora del RTC
u8g.firstPage();
do {
draw();
u8g.setPrintPos(24, 9);
u8g.print(t, 1);
u8g.setPrintPos(22, 18);
u8g.print(h, 1);
u8g.setPrintPos(54, 9);
u8g.print(now.day(), DEC);
u8g.setPrintPos(65, 9);
u8g.print(now.month(), DEC);
u8g.setPrintPos(77, 9);
u8g.print(now.year(), DEC);
u8g.setPrintPos(62, 18);
u8g.print(now.hour(), DEC);
u8g.setPrintPos(79, 18);
u8g.print(now.minute(), DEC);
// u8g.drawBox(119,31,7,5); //infrarojos
// u8g.drawFrame(111,31,7,5); //infrarojos
// u8g.drawBox(119,39,7,5); //lluvia
// u8g.drawFrame(111,39,7,5); //lluvia
// u8g.drawBox(119,47,7,5); //bomba
// u8g.drawFrame(111,47,7,5); //bomba
// u8g.drawBox(119,55,7,5); //vacio1
// u8g.drawFrame(111,55,7,5); //vacio1
}
while( u8g.nextPage() );
//La luz se enciende de 9 a 21
if ( 9 >= now.hour() && now.hour() <= 20 ) {
digitalWrite(raptorPin, HIGH); // luces on
} else {
digitalWrite(raptorPin, LOW); // luces off
}
//La ceramica se enciende de 22 a 8
if ( 21 >= now.hour() && now.hour() <= 8 ) {
digitalWrite(ceramicaPin, HIGH); // ceramica on
} else {
digitalWrite(ceramicaPin, LOW); // ceramica off
}
//Activar infrarojos segun la temperatura minima de 25º y maxima de 32º
if (t > 32)
{digitalWrite (infrarojosPin, LOW);}
if (t < 25)
{digitalWrite (infrarojosPin, HIGH);}
delay (3000);
}
Programa_terrario.ino (5.07 KB)