También es posible agregar un módulo Bluetooth HC06 o HC05 agregando un nuevo canal de comunicación serial (RX - TX), llamado digamos MySerial y enviando por él la cadena String salidaDatos mediante una instrucción MySerial.println(salidaDatos);. Con este dispositivo, se pueden leer los datos temperatura e intensidad lumínica empatando un teléfono inteligente que tenga instalado BTconsole, AruinoDroid o alguna app semejante.
El código está escrito para mantener la temperatura en un rango de 25 a 30 °C. Cuando la temperatura baja de 25 °C se encienden las dos lámparas, una incandescente de 40W para generar calor y una lámpara LED para incrementar la luminosidad sin generar más calor. Si se necesita calentar un mayor volumen hay que usar dos lámparas incandescentes o un sistema de calefacción si se requiere calefaccionar una habitación completa. Cuando la temperatura interior rebasa los 30 °C se enciende un ventilador de 12 V de corriente directa.
Controlador (Arduino Leonardo), ventilador, placa de relevadores y cable de alimentación |
Por la parte interna lámparas (una incandescente de 40W y una LED) para proporcionar iluminación y calor. Sensor de temperatura LM35. |
Listado de materiales:
- Arduino (UNO o Leonardo)
- Módulo con dos relevadores de 5.0V
- Fuente de alimentación de 12V 3A
- Ventilador de 12V CD
- Mini Protoboard
- 2 Socket de cerámica
- 1 foco incandescente de 40W
- 1 foco led
- 2 m de cable duplex con clavija
- 1 hielera de poliuretano o unicel
- 3 LED de 5mm
- 3 resistencias de 330 Ohm
- 1 sensor de temperatura LM35
- 1 m de alambre calibre 22 para proyectos en protoboard (pueden usarse jumpers macho- macho)
- 1 fotoresistencia (LDR) de 2 M_Ohm (opcional)
- 1 resistencia de 10 K_Ohm (opcional, para el circuito sensor de luminosidad)
El código Arduino queda de la siguiente manera:
/*
Indicador heat fan
ledRojo LOW LOW
ledVerde LOW HIGH
ledAmbar HIGH LOW
Arduino-Leonardo:
PWM: 3, 5, 6, 9, 10, 11, and 13. Provide 8-bit PWM output with the analogWrite() function
*/
// Configuracion de pines
#define ledRojo 2
#define ledVerde 3
#define ledAmbar 4
#define ventilador 5
#define iluminacion 6
int flagPrimario,flagSecundario;
void setup() {
/* Inicializacion */
pinMode(ledRojo,OUTPUT);
pinMode(ledVerde,OUTPUT);
pinMode(ledAmbar,OUTPUT);
pinMode(ventilador,OUTPUT);
pinMode(iluminacion,OUTPUT);
Serial.begin(9600);
/* Secuencia de inicio */
cicloActivo();
digitalWrite(ledVerde,HIGH);
ventiladorActivo();
delay(10000);
ventiladorParo();
digitalWrite(ledVerde,LOW);
delay(100);
iluminacionActivo();
digitalWrite(ledAmbar,HIGH);
delay(10000);
iluminacionParo();
digitalWrite(ledAmbar,LOW);
delay(1000);
Serial.println("El sistema se ha inicializado ...");
}
void loop() {
iluminacionParo();
ventiladorParo();
// Comprueba si en el ciclo anterior se ejecutó la
// funcion cicloEstable() como ciclo de espera
if (flagPrimario == 1){
flagSecundario=1;
}
else {
flagSecundario=0;
}
// Activa ventilador o iluminacion en funcion de la temperatura
if (temp()>30.00){
ventiladorActivo();
iluminacionParo();
Serial.println("Temp > 30");
digitalWrite(ledVerde,HIGH);
digitalWrite(ledAmbar,LOW);
digitalWrite(ledRojo,LOW);
flagPrimario=0;
delay(30000);
ventiladorParo();
}
else if ((temp()>25.00) && (temp()<=30.00)){
ventiladorParo();
iluminacionParo();
Serial.println("25 < Temp < 30");
digitalWrite(ledVerde,LOW);
digitalWrite(ledAmbar,LOW);
digitalWrite(ledRojo,HIGH);
flagPrimario=1;
delay(60000);
}
else if (temp()<=25.00){
ventiladorParo();
iluminacionActivo();
Serial.println("Temp < 25");
digitalWrite(ledVerde,LOW);
digitalWrite(ledAmbar,HIGH);
digitalWrite(ledRojo,LOW);
flagPrimario=0;
delay(30000);
iluminacionParo();
}
ventiladorParo();
iluminacionParo();
// Asigna el ciclo de espera con flagSecundario como criterio
if (flagSecundario==1){
cicloEstable();
}
else {
cicloActivo();
}
// Despliega lectura de sensores
String salidaDatos="";
salidaDatos+=temp();
salidaDatos+="\t";
salidaDatos+=luz();
Serial.println(salidaDatos);
}
/***** ##### FUNCIONES ##### *****/
float temp()
{
analogReference(INTERNAL);
delay(10);
int val;
for (int v=0; v<=10; v++){
val=analogRead(A0);
}
val=analogRead(A0);
float t_celsius=val/9.31;
t_celsius=t_celsius+12.44;
analogReference(DEFAULT);
delay(10);
//Serial.println(t_celsius);
return(t_celsius);
}
int luz(){
int val=analogRead(A1);
delay(10);
//Serial.println(val);
return(val);
}
void cicloEstable(){
ventiladorParo();
iluminacionParo();
for (int s=0; s<=100; s++){
// 800 mS por ciclo
digitalWrite(ledRojo,HIGH);
digitalWrite(ledVerde,LOW);
digitalWrite(ledAmbar,LOW);
delay(50);
digitalWrite(ledRojo,LOW);
digitalWrite(ledVerde,HIGH);
digitalWrite(ledAmbar,LOW);
delay(50);
digitalWrite(ledRojo,LOW);
digitalWrite(ledVerde,LOW);
digitalWrite(ledAmbar,HIGH);
delay(50);
digitalWrite(ledRojo,LOW);
digitalWrite(ledVerde,LOW);
digitalWrite(ledAmbar,LOW);
delay(50);
digitalWrite(ledRojo,HIGH);
digitalWrite(ledVerde,HIGH);
digitalWrite(ledAmbar,HIGH);
delay(100);
digitalWrite(ledRojo,LOW);
digitalWrite(ledVerde,LOW);
digitalWrite(ledAmbar,LOW);
delay(200);
digitalWrite(ledRojo,HIGH);
digitalWrite(ledVerde,HIGH);
digitalWrite(ledAmbar,HIGH);
delay(100);
digitalWrite(ledRojo,LOW);
digitalWrite(ledVerde,LOW);
digitalWrite(ledAmbar,LOW);
delay(200);
}
}
void cicloActivo(){
ventiladorParo();
iluminacionParo();
// 800 mS por ciclo
for (int s=0; s<=10; s++){
digitalWrite(ledRojo,HIGH);
digitalWrite(ledVerde,LOW);
digitalWrite(ledAmbar,LOW);
delay(50);
digitalWrite(ledRojo,LOW);
digitalWrite(ledVerde,HIGH);
digitalWrite(ledAmbar,LOW);
delay(50);
digitalWrite(ledRojo,LOW);
digitalWrite(ledVerde,LOW);
digitalWrite(ledAmbar,HIGH);
delay(50);
digitalWrite(ledRojo,LOW);
digitalWrite(ledVerde,LOW);
digitalWrite(ledAmbar,LOW);
delay(50);
digitalWrite(ledRojo,HIGH);
digitalWrite(ledVerde,HIGH);
digitalWrite(ledAmbar,HIGH);
delay(100);
digitalWrite(ledRojo,LOW);
digitalWrite(ledVerde,LOW);
digitalWrite(ledAmbar,LOW);
delay(200);
digitalWrite(ledRojo,HIGH);
digitalWrite(ledVerde,HIGH);
digitalWrite(ledAmbar,HIGH);
delay(100);
digitalWrite(ledRojo,LOW);
digitalWrite(ledVerde,LOW);
digitalWrite(ledAmbar,LOW);
delay(200);
}
}
void ventiladorActivo(){
digitalWrite(ventilador,HIGH);
digitalWrite(iluminacion,LOW);
Serial.println("Ventilador activo");
}
void iluminacionActivo(){
digitalWrite(ventilador,LOW);
digitalWrite(iluminacion,HIGH);
Serial.println("Iluminacion activo");
}
void ventiladorParo(){
digitalWrite(ventilador,HIGH);
digitalWrite(iluminacion,HIGH);
Serial.println("Ventilador en paro");
}
void iluminacionParo(){
digitalWrite(ventilador,HIGH);
digitalWrite(iluminacion,HIGH);
Serial.println("Iluminacion en paro");
}
No hay comentarios:
Publicar un comentario