El siguiente artículo es muy bueno sobre las características del módulo HC05 http://www.prometec.net/bt-hc05/
Seguiré algunas explicaciones del profe García:
Y su programa se puede descargar en
Aprovechando la App del profe García, realice las pruebas para conectar este proyecto de Cagei, al Android, procurando que lo realizado en las pruebas anteriores funcionará, tal como es la lectura del DHT11 con la temperatura y la humedad, la fecha y hora, y sobre todo que la programación del temporizador para encender y apagar la iluminación y la bomba de aire no se modificaran, Con módulo HC05 y el android, que aún nos falta hacer nuestra propia App, estamos considerando dos modos de uso: MANUAL y AUTOMÁTICO, en el primero todo se activa con el celular, y en el segundo vuelve a la programación realizada desde el sketch.
- Enviando m: activa o desactiva el modo manual, con el led brillando se puede evidenciar que está activado el modo automático, también se puede ver en el monitor serie.
- Enviando a: se activa o desactiva el aireador
- Enviando l: se activa o desactiva la iluminación, para ello creamos unas banderas tipo booleanas para identificar sus estados.
A continuación el programa correspondiente a esta fase del proyecto:
//--- PROYECTO CAGEI "CAMARA DE GERMINACION INTERIOR" --- TECNONARANJAL 2016 // ---- programa para controlar automáticamente un cultivo hidroponico interior // Emplea un arduino uno, un DHT11 conectado por el pin 7 // un módulo reloj DS1307 conectado en A4 y A5 // un módulo HC05 conectado en los pines 2 y 3 para no tener que desconectar el USB //--- DEFINICIÓN DE LIBRERIAS Y VARIABLES #include <Wire.h> #include "RTClib.h" #include "DHT.h" #define DHTPIN 7 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); RTC_DS1307 RTC; int hora=0; int minutos=0; int segundos=0; int luz=13; //PIN de salida para activar el reflector led int aire=12; //PIN de salida para activar el aereador // --------------- BLUETOOTH /*Tomado de: Crear nuevo puerto serial en Pin 2 y Pin 3 para conectar el Modulo bluetooth
By: http://elprofegarcia.com CONEXIONES:
ARDUINO BLUETOOTH
5V VCC
GND GND
PIN 2 TX
PIN 3 RX
Tienda donde se compro los componentes: http://dinastiatecnologica.com */
// declaro algunas variables booleanas para poder tener el estado de la luz // y del aireador para manipularlas al momento de tener en modo manual el sistema bool estado_manual = false ; bool estado_luz = false; bool estado_aire= false; bool estado_agua= false; bool estado = false; // false #include <SoftwareSerial.h> SoftwareSerial blue(2, 3); // Crea nueva conexion- Pin2(RX) a TX y Pin3(TX) a RX int btdato; //dato a leer por el bluetooth // ------------------------------------- void setup () { //Inicializamos el puerto serie, wire y el modulo RTC Serial.begin(9600); blue.begin(9600); // Iniciamos el puerto nuevo Serial_2 a 9600 Baudios dht.begin(); // inicializo la libreria del sensor Wire.begin(); // inicializo la conexión I2C RTC.begin(); // inicializo el módulo del reloj //Si quitamos el comentario de la linea siguiente, se ajusta la hora y la fecha con la del ordenador //RTC.adjust(DateTime(__DATE__, __TIME__)); //---- DETERMINO LOS PINES COMO SALIDA ------- pinMode(luz,OUTPUT); pinMode(aire,OUTPUT); pinMode(101,1); //configuro el pin 10 como salida, por eso el 1. monitor automático pinMode(11,1); //configuro el pin 11 como salida, por eso el 1. } void loop () { //lee el tiempo del modulo ds1307, previamente se ha configurado con la hora. DateTime now = RTC.now(); hora=(now.hour(),DEC); //--------------------- LEER SENSOR DHT11 ---------------------------- int h = dht.readHumidity();// Lee la humedad int t = dht.readTemperature();//Lee la temperatura //////////////////////////////////////////////////Humedad Serial.print(" Humedad Relativa: "); Serial.print(h);//Escribe la humedad Serial.println(" %"); ///////////////////////////////////////////////////Temperatura Serial.print(" Temperatura: "); Serial.print(t);//Escribe la temperatura Serial.println(" C"); /////////////////////////////////////////////////// // Se llama a la función fecha() para imprimir la fecha en el monitor serie ----- fecha(); //---INSTRUCCIONES PARA MANUAL O AUTOMÁTICO ------------------ if(estado_manual==false) //si es false es porque está en modo automático //hay que estipular que cuando se desconecté del celular vuelva a modo automático. { Serial.println("MODO MANUAL DESACTIVADO. SE ENCUENTRA EN AUTOMATICO"); digitalWrite(10,1); //un led para mostrar que está en modo automático //-------------------------- TEMPORIZADOR DIGITAL PARA ENCENDER LA ILUMINACION ------------------------ // el foto periodo inicia a las 6am y termina a las 20:00 horas o 8pm. // 14 horas de luz, con un periodo de 10 sin la misma. // hay que buscar la manera de modificar esto desde android, pero que quede grabado en rom. if (now.hour()>= 6 && now.hour()<20) { digitalWrite(luz,HIGH); Serial.println("led on"); estado_luz=true; //la bandera luz queda en true. } else { digitalWrite(luz,LOW); Serial.println("led off"); estado_luz=false; //la bandera estado luz queda en false, para informar que está apagada. } //--------------------TEMPORIZADOR PARA ENCENDER Y APAGAR EL AIREADOR ----------------------------------- // Este se encenderá 4 veces al día, de las 1:00 a las 3:00; 2 horas // de las 9:00 a las 11:00 2 horas // de las 13:00 a las 14:00 1 hora // de las 18:00 a las 20:00 2 horas total 7 horas, potencia del aireador 5W if (now.hour()>= 1 && now.hour()<3) { digitalWrite(aire,HIGH); Serial.println("aireador on"); estado_aire=true; //se pone la bandera estado aire en truee para informar que está ON } else if (now.hour()>= 9 && now.hour()<11) { digitalWrite(aire,HIGH); Serial.println("aireador on"); estado_aire=true; //se pone la bandera estado aire en truee para informar que está ON } else if (now.hour()>= 13 && now.hour()<14) { digitalWrite(aire,HIGH); Serial.println("aireador on"); estado_aire=true; //se pone la bandera estado aire en truee para informar que está ON } else if (now.hour()>= 18 && now.hour()<20) { digitalWrite(aire,HIGH); Serial.println("aireador on"); estado_aire=true; //se pone la bandera estado aire en truee para informar que está ON } else { digitalWrite(aire,LOW); Serial.println("aireador off"); estado_aire=false; //se pone la bandera estado aire en false para informar que está OFF apagada. } }// final if del estado_manual=false, es decir, manual desactivado por ende automático ON else //si el estado_manual es true, es porque está en estado manual, por tanto { Serial.println("MODO MANUAL ACTIVADO. SE ENCUENTRA EN MANUAL"); digitalWrite(10,0); //se apaga led pin 10 para mostrar que está en modo manual }// fin del else de estado manual o automático //delay(1000); //----- BLUETOOTH ---------- if (blue.available()>0) { btdato= blue.read(); switch(btdato) { case 'o': //activar o desactivar pin11, simplemente para hacer pruebas { if (estado == false) { estado = true; digitalWrite(11,estado); Serial.println("pin 11 on"); } else { estado = false; digitalWrite(11,estado); Serial.println("pin 11 off"); } break; } case 'm': //modo manual o automático { if (estado_manual == false)//si está automático { estado_manual = true; } else //pero si estaba manual, es decir, estado_manual = true, activado, se desactiva en false { estado_manual = false; } break; } case 'p': //este caso es para que al momento de desconectar el bluetooth del celular quede otra vez automático { estado_manual = false; break; } case 'l': //activar o desactivar luz { if (estado_luz == false && estado_manual == true) //si la luz está apagada y está en modo manual { estado_luz = true; digitalWrite(luz,estado_luz); Serial.println(" iluminación on ENCENDIDA"); } else if (estado_luz == true && estado_manual == true) //si la luz está encendida y está en modo manual { estado_luz = false; //apague la luz digitalWrite(luz,estado_luz); Serial.println(" iluminación off APAGADA"); } break; } case 'a': //activar o desactivar luz { if (estado_aire == false && estado_manual == true)//si el aire está apagado y está en estado manual { estado_aire = true; // prenda el aire digitalWrite(aire,estado_aire); Serial.println(" aireación on ENCENDIDA"); } else if (estado_aire == true && estado_manual == true)//si el aire está encendido y está en estado manual { estado_aire = false; //apague el aire digitalWrite(aire,estado_aire); Serial.println(" aireación off APAGADA"); } break; } } } btdato=0; //----------- fin bluetooth }//cierre del void loop //-------------- función para leer la fecha del ds1307----- //-------------- también escribe en el monitor serie ------ void fecha(){ //lee el tiempo del modulo ds1307, previamente se ha configurado con la hora. DateTime now = RTC.now(); hora=(now.hour(),DEC); minutos=(now.minute(),DEC); segundos=(now.second(),DEC); //imprimimos por el monitor serial para ver la información en el pc //Imprimimos el dia Serial.print(now.day(), DEC); Serial.print('/'); //Imprimimos el mes Serial.print(now.month(), DEC); Serial.print('/'); //Imprimimos el año Serial.print(now.year(), DEC); Serial.print(' '); //Imprimimos la hora Serial.print(now.hour(), DEC); Serial.print(':'); //Imprimimos los minutos Serial.print(now.minute(), DEC); Serial.print(':'); //Imprimimos los segundos Serial.print(now.second(), DEC); Serial.println(); } //---------------- FIN FUNCION FECHA-------------------------------------------
No hay comentarios:
Publicar un comentario