Para este proyecto necesitas:
-Arduino Uno
-16 x 2 LCD con módulo i2c
-DS1307 RTC
-Sensor de temperatura y humedad DHT11
-un tablero de pan
-Algunos cables para las conexiones.
Como se puede ver el RTC es casera porque tenía un chip DS1307 y una batería extraída de un viejo alemán electrónico en efectivo registro de dispositivo.
Por lo que las conexiones son muy sencillas:
La RTC y la LCD i2c están conectado al pin de A4 (SDA) y A5(SCL) y DHT11 sensor está conectado al pin de D2. DHT11 tiene 4 pines, pero actualmente se utilizan sólo 3. Primera es Vcc, el segundo es para los datos y es el cuarto pin de tierra. Como he dicho, conectar datos del sensor a D2 en Arduino.
Ahora, la parte más difícil: el código. !!! Descargue el bosquejo ORIGINAL de aquí!
He probado algunos dibujos que he encontrado en internet, pero había un montón de errores causados por las bibliotecas incompatibles y así sucesivamente. Logré construir un código hecho de partes de otros códigos y funciona como un encanto ahora. Sin embargo hay un solo problema. Usted puede encontrar en el dibujo un poco de código para mostrar las 3 primeras letras del día de la semana, pero por alguna razón no funciona. En lugar de las cartas muestra algunos caracteres desconocidos y es bastante feo. Sospecho que es un problema causado por i2c comunicación porque en la conexión estándar (4bits) funciona sin problemas.
Mi inspiración vino de esta página http://arduino-info.wikispaces.com/PROJECT-Temp-Humidity-Displayy esta página http://www.ucontrolit.tv/184/
Esta es la biblioteca utilizada para este proyecto http://arduino-info.wikispaces.com/file/view/DHT11.zip/390039522/DHT11.zip y no olviden usar la nueva biblioteca de LCD que se puede encontrar aquí mismo https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads (al agregar esta nueva biblioteca en la carpeta, eliminar la antigua carpeta LiquidCrystal)!
Y esta es una vista previa del código:
________________________________________________________________________________________________
/ * Ejemplo de YourDuino.com Software Sketch
Prueba de Sensor de temperatura y humedad DHT11
Aparece en la pantalla de LCD I2C
Créditos: Rob Tillaart
http://Arduino-info.wikispaces.com/Project-Temp-Humidity-display
Terry
Combinado con:
Código de Mark Johnson
http://uControlIt.TV
De diciembre de 2012
Licencia: GNU General Public License
Modificado por Timofte Andrei (http://timofteandreidiy.wordpress.com)
Enero de 2014
*/
/ *---(Importación necesita bibliotecas)---* /
#include
#include
#include
#include
#include
const char * zile [] =
{"Lun", "Mar", "Mie", "Joi", "Vin", "Sam", "Dum"}; días de la semana en rumano (no usado)
const char * luni [] =
{"Dec", "Ian", "Feb", "Mar", "Abr", "Mai", "Uin", "Iul", "Ago", "Sep", "Oct", "Noi"}; meses de la semana también en Rumano
termometru Byte [8] = //icon para termómetro
{
B00100,
B01010,
B01010,
B01110,
B01110,
B11111,
B11111,
B01110
};
picatura de Byte [8] = //icon de gotita de agua
{
B00100,
B00100,
B01010,
B01010,
B10001,
B10001,
B10001,
B01110,
};
/ *---(Declarar objetos)---* /
Configurar los pines en el chip I2C utilizado para las conexiones de la LCD:
addr, at, rw, rs, d4, d5, d6, d7, bl, blpol
Lcd de LiquidCrystal_I2C (0 x 20, 4, 5, 6, 0, 1, 2, 3, 7, negativo); La dirección de I2C del LCD
dht11 DHT11;
/ *---(Declarar constantes, números de pines)---* /
#define DHT11PIN 2 //dht11 señal pin conectado a D2
void setup() / *---(configuración: funciona una vez)---* /
{
Wire.Begin();
LCD.Begin(16,2); inicializar el lcd de 16 caracteres 2 líneas, encender luz de fondo
LCD.Backlight();
LCD.Clear();
lcd.createChar(1,termometru);
lcd.createChar(2,picatura);
código de parte de http://tronixstuff.wordpress.com/
Wire.beginTransmission(0x68);
Wire.Write(0x07); Mueva el puntero a la dirección SQW
Wire.Write(0x10); envía 0 x 10 (hexadecimal) 00010000 (binario) al registro de control - se convierte en onda cuadrada
Wire.endTransmission();
código de pieza final de http://tronixstuff.wordpress.com/
setSyncProvider(RTC.get);
} / *--(configuración final)---* /
void loop() / *---(bucle: funcionamientos constantemente)---* /
{
afisare_temperatura(); visualización de temperatura
data_si_ora(); Mostrar fecha y hora
}
void afisare_temperatura()
{
chk int = DHT11.read(DHT11PIN);
lcd.setCursor (1, 1);
LCD.Write(1);
lcd.setCursor (3, 1);
LCD.Print ((float) DHT11.temperature, 0);
lcd.setCursor (5, 1);
LCD.Print((Char)223); signo de grado
LCD.Print("C");
lcd.setCursor (9, 1);
LCD.Write(2);
lcd.setCursor (11, 1);
LCD.Print ((float) DHT11.humidity, 0);
LCD.Print("%");
Delay(2000);
}
void data_si_ora()
{
tmElements_t tm;
(RTC.read(tm));
lcd.setCursor (0, 0);
afisare2cifre(TM. Hora);
LCD.Print(":");
afisare2cifre(TM. Minuto);
lcd.setCursor(7,0);
afisare2cifre(TM. Día);
LCD.Print("");
LCD.Print (tm. Month[Luni]);
LCD.Print("");
LCD.Print (tmYearToCalendar (tm. Año) -2000);
lcd.setCursor(12,1); Este código se utiliza para mostrar el día de la semana
LCD.Print (tm. Wday[zile-2]); se desactiva porque por alguna razón no funciona en la pantalla de i2c
}
void afisare2cifre(int numar) {//this agrega un 0 antes de números de una cifra
Si (numar > = 0 & & numar < 10) {}
LCD.Write('0');
}
LCD.Print(Numar);
}
/ * (EL FINAL) * /
____________________________________________________________________________________________________