lunes, 7 de noviembre de 2022

Canal de Youtube del profe Noé

Canal de Youtube del profe Noé donde podrás consultar algunos videos relacionados con el semillero Tecnonaranjal y muchos sobre programación, electrónica, robótica y matemáticas.

 https://www.youtube.com/channel/UCSJo-c_HHXmMT0yzLadJTVA



jueves, 27 de octubre de 2022

Esp8266 y Thingspeak para monitorear la temperatura y la humedad relativa

 En la entrada anterior aprendimos a conectar el NodeMCU Esp8266 al ide de Arduino, ahora veremos como hacer que los datos que nos entrega el sensor DHT11 los podamos ver en una página web que promueve el IoT esta es thingspeak.com

La primera parte del siguiente video nos muestra como usar ThingSpeak





Funcionó!!!




Primeros pasos con el Nodemcu ESP8266 instalación del driver

 En el año 2013 configuramos nuestro Arduino con un Shield de Ethernet el W510, en esta ocasión queriamos usar de nuevo este módulo pero no funcionó, fue algo frustrante pero fue el punto de partida para conocer el NodeMcu ESP8266 que por $32500 alrededor de 6 dolares viene con un procesador de 32 bits y con un módulo interno de WIFI, mucho más económico y potente que nuestro fiel amigo el arduino uno, por eso nos pudo más la curiosidad y queremos comenzar a trabajar IoT (internet de las cosas) con este, esperamos crear nuestra estación meteorológica con dos variables usando el DHT11: temperatura y humedad relativa del ambiente.

Cuando iniciamos el trabajo con el NodeMCU nos encontramos que hay que instalar primero un driver, para ello seguimos el siguiente video, también están los enlaces a las librerías necesarias.





Enlaces importantes:

  • https://github.com/esp8266/Arduino
  • https://arduino.esp8266.com/stable/package_esp8266com_index.json 
Luego de indicar "Gestor de tarjetas" agregar la primera url se agrega la ESP8266, para probarla se utiliza uno de los ejemplos, el más sencillo es BLINK y otro que se puede usar el WebServer, recuerde cambiar la SSID y la contraseña por la de la red wifi a la cual se conectará.

Que alegría cuando muestra esto

Tener en cuenta que la ip se puede ver en el monitor SERIE, y ponerlo a 115200 baudios, sino salen sólo interrogantes.

En la próxima entrada estaremos analizando un pograma que ayuda a crear una estación meteorológica usando el DHT11


 

sábado, 15 de octubre de 2022

Huerta Inteligente, primeros acercamientos con el sistema de control

 


Este es un primer acercamiento al sistema de control de la huerta inteligente, (procedemos primero con la maqueta). Se compone:
  • Dectector de humedad del suelo
  • Sensor DHT11 para medir la temperatura y humedad relativa del ambiente
  • Una fotocelda con un potenciometro de 10K ohmios para sensar día o noche
  • Dos relés, uno para controlar el sistema de riego y otro para controlar la iluminación en la noche si se requiere
  • Un Shield Ethernet para poder controlar y monitorear desde la intranet el sistema
  • Un router para generar la intranet
  • Una placa arduino uno
Por el momento se tienen las conexiones mostradas en la imagen, el sensor de humedad a A0, al fotoresistencia a A1, esta se conecta a tierra, el punto donde va conectado el potenciometro es el que va a A1, en un protoboard se extiende el GND y los 5V para poder alimentar los diferentes elementos del circuito.

Con respecto a los pines digitales, al pin 9 se conecta el DHT11, los pines 6 y 7 se configuraron de salida para poder conectar los reles.

El primer programa para verificar que los sensores funcionen se vislumbra desde el monitor serie y es el siguiente:

#include <DFRobot_DHT11.h>

DFRobot_DHT11 DHT;

#define DHT11_PIN 9
int SensorPin = A0;
int FotoCelda = A1;
int valSonda;//Valor en porcentaje de la sonda
int foto;//Valor en porcentaje de la luz
int iluminacion=7;
int riego=6;


void setup() {
  Serial.begin(9600);
  //configuro los pines 6 y 7 de salida y el 9 como entrada
  pinMode(SensorPin,INPUT);
  pinMode(FotoCelda,INPUT);
  pinMode(9,INPUT);
  pinMode(7,OUTPUT);
  pinMode(6,OUTPUT);
 }

void loop() { 
  int humedad = analogRead(SensorPin);
  int luz = analogRead(FotoCelda);
   valSonda=map(humedad,0,1023,100,0);//pasamos a porcentajes
   
   //PARA ESTA PRIMERA PRUEBA ESTAMOS USANDO SÓLO EL 
   //MONITOR SERIE PARA HACER SEGUIMIENTO DE LAS MEDICIONES
   
   Serial.println("");
   Serial.print("Luz: ");
   Serial.println(luz);
//estos shield de rele se activan con 0, igual hay que revisar   
//PRENDO LA ILUMINACIÓN CUANDO SEA DE NOCHE
    //AQUI SE PREGUNTA: ¿HAY SUFICIENTE LUZ?
    //ENTRE MÁS INTENSIDAD DE LUMÉNES O LUZ MÁS 
    //PEQUEÑO SERÁ EL VALOR MOSTRADO
    //POR ESO SEGÚN LO VISTO DE LA FOTOCELDA EMPLEADA
    //CON UN VALOR POR ENCIMA DE 700 SIGNIFICA QUE ESTA OSCURO
    //Y REQUIERE ENCENDER LA ILUMINACIÓN
    if(luz < 700)
      {
        digitalWrite(iluminacion,HIGH);//OFF
      }
      else
      {
        digitalWrite(iluminacion,LOW);//ON
      }
   
   Serial.print("Humedad en el suelo: ");
   Serial.print(valSonda);
   Serial.println("%");

//ACTIVO LA MOTOBOMBA
     if(valSonda < 80)
      {
        digitalWrite(riego,LOW);//ON
      }
      else
      {
        digitalWrite(riego,HIGH);//OFF
      }
   
//leemos la temperatura del DHT11 conectado al pin 9
   DHT.read(DHT11_PIN);
   Serial.print("Temperatura: ");
   Serial.print(DHT.temperature);
   Serial.println("°C");

   Serial.print("Humedad relativa: ");
   Serial.print(DHT.humidity);
   Serial.println("%");
   //esperamos un segundo
   delay(1000);

  
}
  

En la próxima entrada hablaremos del ethernet shield para poder verlo desde la intranet, recordar que el router a sido configurado con un rango de ip de 192.168.1.100 a 192.168.1.199 dentro de ese rango de ip se le asignará al shield, que será el 192,168.1.101 y este sera el servidor al cual ingresar para controlar el sistema, para la wifi se dejó el SSID "HuertaInteligente" con la clave 0123456789 esperamos más adelante poder darle más seguridad a la página para que sólo el administrador pueda hacer el control del sistema.


jueves, 13 de octubre de 2022

Hidrolizas: app inventor y aplicación en arduino para prender y apagar la motobomba desde el celular (maqueta)

Al modulo HC-05 se le puede alimentar con 3.3V al rele con 5V así alcanzan los pines del arduino uno, en caso de requerir contraseña el bluetooth probar con 0000 o 1234



 En este caso sólo vamos a encender o apagar la motobomba a través de un rele conectado al pin 13 del arduino usando un HC05 para la transmisión bluetooth. El programa a emplear es el siguiente:

//defino el pin a utilizar al igual que una variable
//para determinar el estado del bluetooth
int led13=13;
int estado=0;
void setup(){
  Serial.begin(9600);
  pinMode(led13,OUTPUT);
  //pongo la motobomba OFF
  digitalWrite(led13,HIGH);
  //el shield se activa con un 1 para apagar la motobomba
  //es un poco extraño, pero así funciona
 }
//recuerde que conectamos del módulo HC05
//tx al rx (pin D0) del arduino y rx al tx (pin D1) del arduino
//los cables común
void loop(){

 if(Serial.available()>0){
 estado = Serial.read();
 }
 if (estado =='1'){ //prendo la motobomba
   digitalWrite(led13,LOW);
  }
if(estado=='2'){ //apago la motobomba
   digitalWrite(led13,HIGH);
  }
}    

Ahora este es el programa apk para el celular: https://drive.google.com/file/d/1T4GgTI_9DnctKvz1ER-hzQcR8fN7HEjT/view?usp=sharing instalarlo dando confianza a fuentes no conocidas, esta app fue elaborada con app inventor.

Luego de instalar la app, ya con todo listo, abrimos la aplicación, damos clic en "Conectar BT" qu está en color azul buscamos el HC05, cuando se conecta se pone de color verde, en caso de que exista algún problema, cerrar la aplicación, apagar el bluetooth del celular, volverlo a prender, buscar el HC05 y ahora si volver con la aplicación, la aplicación es muy sencilla, la tome de el profe Garcia https://www.youtube.com/watch?v=j-cUDfmtq5g

viernes, 25 de marzo de 2016

Cagei: creación de la app + sensor humedad


En esta fase de la construcción del prototipo del proyecto Cagei, se busca incluir un sensor de humedad para monitorear el nivel de agua del cultivo, además de poder ubicar dos leds como alarmas, uno para avisar que está activado el modo automático, y otro para avisar que requiere atención el nivel de agua. Ambas situaciones deberán mostrarse desde la aplicación a desarrollar, para ello nos basaremos en el video del profe García, teniendo en cuenta los caracteres del artículo anterior: http://tecnonaranjal.blogspot.com.co/2016/03/cageie-conexion-del-modulo-bluetooth-hc.html


También se puede ver los sucesos y verificar el nivel de agua con el monitor serie:


En App inventor hay que poner un reloj para sincronizar el envio y recibo de datos, en este caso, se envía una letra al arduino, y dependiendo de esta envia una variable, ya sea temperatura, humedad o nivel de agua, para una sola se hace lo siguiente en AppInventor:


Programa en AppInventor:
 

Descargar Cagei.apk

Nota: para poder programar la recepción de datos en el Android desde el Arduinio, se envía primero una letra desde android, y luego con un swtich case el arduino decide que enviar, el android lo lee y lo muestra, pero en este caso son tres variables, por ello toco dentro del reloj 1 del appinventor, incrementar una variable en un ciclo, de tal manera que primero envía la letra, espera al menos 1 segundo y lee lo que llegó, así para cada una de ellas.
Sistema funcionando, aún hace falta montarlo en la maqueta para completar el prototipo:



A continuación el programa en Arduino: Cagei_2016.ino


//--- 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
int agua=4;


// --------------- 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 blue 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__));
  
  pinMode(agua,INPUT); // determino el pin 4 como entrada del sensor de humedad,para verificar nivel de agua
  //----  DETERMINO LOS PINES COMO SALIDA -------
  pinMode(luz,OUTPUT);
  pinMode(aire,OUTPUT);
  digitalWrite(luz,1); // los reles se activan con 0, por eso de una vez los dejo activos en 1
  digitalWrite(aire,1);// para que solo se accionen cuando se pongan en 0
  pinMode(9,1); //monitor del nivel de agua
  pinMode(10,1); //configuro el pin 10 como salida, por eso el 1. monitor del modo 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  MOODO  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,LOW);
  Serial.println("led on");
  estado_luz=true; //la bandera luz queda en true.
  }
  else 
  {
  digitalWrite(luz,HIGH);
  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,LOW);
      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,LOW);
      Serial.println("aireador on");
      estado_aire=true; //se pone la bandera estado aire en true para informar que está ON
    }
      else if (now.hour()>= 13 && now.hour()<14)
        {
        digitalWrite(aire,LOW);
        Serial.println("aireador on");
        estado_aire=true; //se pone la bandera estado aire en true para informar que está ON
        }
        else if (now.hour()>= 18 && now.hour()<20)
          {
            digitalWrite(aire,LOW);
            Serial.println("aireador on");
            estado_aire=true; //se pone la bandera estado aire en true para informar que está ON
          }
  else
  {
  digitalWrite(aire,HIGH);
  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 el led pin 10 para mostrar modo automático desactivado: MODO MANUAL ACTIVADO
  }// fin del else de estado manual o automático



//delay(1000);   

//------------SENSAR NIVEL DE AGUA

estado_agua=digitalRead(agua);
if(estado_agua==false) //Se activa por flancos de bajada, o nivel 0
  {
    Serial.println("NIVEL CORRECTO DE AGUA");
    digitalWrite(9,0); //no activa la alarma de agua
  }
else
  {
  Serial.println("EL NIVEL DE AGUA REQUIERE ATENCIÓN");  
  digitalWrite(9,1); //activa alarma de agua
  }


 //----- BLUETOOTH ----------

 if (blue.available()>0) 
    {        
      btdato= blue.read();  
 
      switch(btdato)  
     {  
        case 't': //envia la temperatura al bluetooth
        {
         blue.print(t);
         //blue.println("°C");
         break; 
        }
       case 'h': //envia la humedad al bluetooth
        {
         blue.print(h);
         //blue.println("%");
         break; 
        }
        case 'q': //nivel de agua, envia mensaje al bluetooth
        {
         if(estado_agua==false)
         {
         blue.println("BIEN"); 
         }
         else
         {
         blue.println("FALTA");
         }
         break; 
        }
        case 'o': //activar o desactivar pin11
        {
           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
          { 
            estado_manual = true;
            break;  
          }  
      case 'p':  //estado 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,LOW);
            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,HIGH);
            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,LOW);
            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,HIGH);
            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------------------------------------------- 
 



 

Cageie: conexión del módulo bluetooth HC-05 y android

Continuación del artículo http://tecnonaranjal.blogspot.com.co/2016/03/cagei-conexion-del-sensor-dth11-al.html

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-------------------------------------------