|     Inicio    |   |         |  |   FOROS      |  |      |      
   Elastix - VoIP B4A (Basic4Android) App inventor 2 PHP - MySQL
  Estación meteorológica B4J (Basic4Java) ADB Shell - Android Arduino
  AutoIt (Programación) Visual Basic Script (VBS) FireBase (BD autoactualizable) NodeMCU como Arduino
  Teleco - Emisora de A.M. Visual Basic Cosas de Windows Webs interesantes
T Búsqueda en este sitio:


.

Arduino en español
Circuitos con Arduino - Juan Antonio Villalpando

-- Tutorial de iniciación a Arduino --

Volver al índice del tutorial

____________________________

49BD.- Teclado 4x4, bus I2C. Pantalla LCD. Sensor de humedad y temperatura. Infrarojo.

- En una pantalla LCD visualizamos la Humedad y Temperatura con el sensor DHT11. Mediante el teclado podemos observar la Humedad o la Temperatura.

- Además podemos controlar un LED (o relé) mediante infrarojo.
- Al pulsar el "1" de mando infrarojo se encenderá el LED7.
- Al pulsar el "2" del mando infrarojo se apagará el LED7.

- En el tutorial 26.- Transmisión y recepción por infrarojo. vimos la transmisión por infrarojo.

- Ahora se trata de insertar ese código dentro del que estamos utilizando.

Otros tutoriales relacionados:

- En el tutorial: 31.- Pantalla LCD. Bus I2C, vimos cómo utilizar una pantalla LCD con módulo I2C.
- En el tutorial: 49.- Teclado táctil matrix 4x4, vimos cómo utilizar un teclado 4x4.-
- En el tutorial: 49B.- Teclado táctil adaptado a I2C. Adaptador de 8 conexiones a Bus I2C con PCF8574, vimos cómo utilizar un teclado 4x4 con módulo I2C.
- En el tutorial: 49BB.- Teclado táctil, I2C. LCD. Añadimos una pantalla LCD.
- En el tutorial: 49BC.- Teclado táctil, I2C. LCD. Sensor humedad . Añadimos una pantalla LCD y un sensor de humedad.
- En el tutorial: 44.- Sensor de humedad y temperatura DHT 11.
- En el tutorial: 26.- Transmisión y recepción por infrarojo.

_______________________
- Teclados y LED.

'A' Modifica la temperatura máxima para encender el LED13 LED13
'B' Visualiza la Humedad. LED13
'C' Visualiza la Temperatura. LED13
'#' Fin de entrada de datos para la opción 'A'  
Mando de infrarojo Teclas '1' y '2' del mando de infrarojo. LED7

______________________________________________________
- Conexionado.

- Observamos la conexión del sensor receptor de infrarojo.
- Si alimentamos a este sensor desde la misma placa de Arduino, resulta que el código que estamos utilizando (teclado, LCD, sensor humedad,...) provoca pequeñas variaciones de tensión en la placa que Arduino que las "sufre" este sensor, de tal manera que obtenemos contínuamente datos erroneso. Pruébalo, alimenta este sensor con los 5 V y GND de la placa de Arduino y consulta el Monitor Serie.

- Para solventarlo estudia poner un diodo zener, un condensador,... en paralelo con la alimentación del sensor de infrarojo.

- En mi caso he optado por poner una alimentación aparte para el sensor de infrarojo, como indico en la imagen inferior.

- Es muy IMPORTANTE que el GND del Arduino y el GND de este fuente de alimentación estén conectados. En la mayoría de las ocasiones, en los circuitos que tienen dos alimentaciones se ha de conectar las dos GND.

______________________________________________________
- Código para el Arduino.

- Además de las librerías vistas anteriormente, para el módulo IR debemos cargar esta librería: IRremote.zip de Ken Shirriff.

jTeclado_LCD_humedad_ir.ino

// Juan A. Villalpando.
// Abril 2018. KIO4.COM
#include <Wire.h>
// Teclado.
#include <Keypad_I2C.h>
#include <Keypad.h>
// Pantalla LCD
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
#define LED13 13
#define LED7 7

// Sensor humedad-temperatura.
#include <DHT.h>
#define DHTPIN 2 
#define DHTTYPE DHT11 
DHT dht(DHTPIN, DHTTYPE);
// Infrarojo.
#include <IRremote.h>

// Teclado
const byte ROWS = 4; 
const byte COLS = 4;
String maximo = "40";
char key = ' ';
// Humedad Temperatura.
float humedad = 0.0;
float temperatura = 0.0;
float temperatura_old = 0.1;
// Infrarojo.
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
int tecla;
 
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
 
byte rowPins[ROWS] = {0,1,2,3}; 
byte colPins[COLS] = {4,5,6,7};
 
int i2caddress = 0x38; // Direccion I2C teclado.
 
Keypad_I2C kpd = Keypad_I2C( makeKeymap(keys), rowPins, colPins, ROWS, COLS, i2caddress );
 
void setup(){
  Serial.begin(9600);
  kpd.begin();
  lcd.begin(16,2);// Columnas y filas de LCD
  pinMode(LED13, OUTPUT);
  // Humedad Temperatura.
  dht.begin();
  // Infrarojo.
  pinMode(LED7, OUTPUT);
  irrecv.enableIRIn();
 
}
 
void loop(){
 infrarojo();
  temperatura = dht.readTemperature();
  if (temperatura != temperatura_old) { // Disminuir parpadeo.
      temperatura_old = temperatura;
      ver_temperatura();
    }

  key = kpd.getKey();
  if (key){
      if (key == 'A'){ // Cambiar maximo.
       introduce_maximo();
      }      
      if (key == 'B'){ // Ver humedad.
       ver_humedad();
      }
      if (key == 'C'){ // Ver temperatura.
       ver_temperatura();
      }
  }
    
     if (String(temperatura) >= maximo) {
          digitalWrite(LED13, HIGH);
       } else {
          digitalWrite(LED13, LOW);
      }
}
////////////////////////////////////////
  // Introduccion de datos de maximo.
void introduce_maximo() {
     // maximo = "";
      lcd.clear(); // Borra pantalla
      lcd.setCursor(0,0); // Inicio del cursor
      lcd.print("Valor maximo");
      lcd.setCursor(0,1); // Siguiente renglón.
      lcd.print(maximo);
      maximo = "";
     while (key != '#' )
        {
           key = kpd.getKey(); 
           if (key){
            maximo = maximo + key;
            lcd.clear(); // Borra pantalla
            lcd.setCursor(0,0); // Inicio del cursor
            lcd.print("Valor maximo");
            lcd.setCursor(0,1); // Siguiente renglón.
            lcd.print(maximo);
            delay(100);
            }
        }
  }
////////////////////////////////////////////////////
  // Ver informacion.
void ver_humedad() {
  humedad = dht.readHumidity();
  lcd.clear(); // Borra pantalla
  lcd.setCursor(0,0); // Inicio del cursor
  lcd.print("Humedad");
  lcd.setCursor(0,1); // Siguiente renglón.
  lcd.print(humedad);
  delay(50);
  }

  void ver_temperatura() {
  temperatura = dht.readTemperature();
  lcd.clear(); // Borra pantalla
  lcd.setCursor(0,0); // Inicio del cursor
  lcd.print("Temperatura");
  lcd.setCursor(0,1); // Siguiente renglón.
  lcd.print(temperatura);
  delay(50);
  }
  
  // Leer infrarojo
  void infrarojo() {
if (irrecv.decode(&results)) {
Serial.println(results.value, DEC);
tecla=results.value; // Obtenemos el valor decimal de la tecla pulsada
//Serial.println(tecla);
if (tecla==12495){ // Código de la tecla 1 
digitalWrite(LED7, HIGH);
}
if (tecla==6375){ // Código de la tecla 2 
digitalWrite(LED7, LOW);
}
irrecv.resume(); // Receive the next value
}
delay(100);
}

______________________________________________________
- Comentarios.

- El código de IR visto en 26.- Transmisión y recepción por infrarojo. lo debemos cargar dentro del loop de nuestro proyecto.

- En esta ocasión he cargado el código del IR como una función, observa: void infrarojo ()

- Luego dentro del loop, llamo a esa función mediante: infrarojo ();

- De esta manera facilito la lectura del código.

- Fíjate que en vez de poner la funcion void infrarojo () en este mismo archivo, la podría haber puesto en otro archivo.

- Consulta 39.- Dos archivos. , para ver cómo se puede poner trozos de un código en varios archivos para facilitar sus lecturas.

______________________________________________________
______________________________________________________

________________________________

 

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información