Explicamos en este proyecto hardware cómo conectar un sensor de temperatura y humedad a Arduino UNO.
Indicamos cómo visualizar los valores en el propio IDE de desarrollo de
Arduino (usando la ventana de Serial Monitor). Mostramos también cómo
guardar los valores obtenidos en la memoria EEPROM de Arduino.
- Requisitos para proyecto hardware con Arduino y sensor de temperatura y humedad.
- Conexión de sensor de temperatura y humedad con Arduino UNO.
- Enviar programa para obtener temperatura y humedad a Arduino y testear resultado.
- Guardar resultados de temperatura y humedad en EPROM de Arduino.
- Artículos relacionados.
- Créditos.
Requisitos para proyecto hardware con Arduino y sensor de temperatura y humedad
Para realizar un proyecto hardware para obtener la
temperatura y humedad usando Arduino UNO necesitaremos los siguientes
componentes:
- Arduino UNO:
- Sensor de temperatura y humedad, en nuestro caso usaremos un Twig Temp&Humi Sensor SEN11301P.
- Cable para conectar sensor con Arduino, en nuestro caso, este cable lo hemos obtenido de un clabe del audio de un lector de CD. El sensor de temperatura y humedad requiere de un cable de cuatro hilos: GND, VCC, NC y SIG. Aunque el hilo del NC no se usa:
En el siguiente artículo explicamos cómo conectar
Arduino a un PC, cómo compilar un programa y cómo enviarlo al Arduino.
Explicamos también cómo instalar el IDE de desarrollo de Arduino:
Conexión de sensor de temperatura y humedad con Arduino UNO
Para realizar la conexión del sensor de temperatura y
humedad con el Arduino UNO, en primer lugar insertaremos el conector
hembra del cable al zócalo a tal efecto del sensor, como mostramos en la
siguiente imagen:
En la parte del sensor de temperatura, para
conectarlo al Arduino, en nuestro caso hemos usado un cable que contiene
tres hilos: uno rojo que va al SIG (datos), otro blanco que va al VCC
(alimentación) y otro negro que va al GND (masa). El conector NC no se
usa por lo que no necesita cable. Es importante tener bien identificado
cada hilo para conectarlo en su pin correspondiente del Arduino:
En la parte del Arduino UNO conectaremos el cable rojo (SIG) al pin A0 analógico, como se muestra en la imagen:
El cable blanco (VCC) lo conectaremos al ping 5V, el de alimentación, como se muestra en la imagen:
Y el cable negro (GND) lo conectaremos a cualquier de
los pines GND del Arduino (en la imagen el cable del medio, que en su
origen era negro y en este extremo está "pelado"):
El sensor de temperatura y humedad conectado al Arduino UNO quedará como mostramos en la imagen:
Por supuesto, podríamos haber usado un cable
específico y una placa prototipo para realizar la conexión del sensor
con Arduino, aunque para el ejemplo que nos ocupa no es necesario.
Enviar programa para obtener temperatura y humedad a Arduino y testear resultado
Una vez conectado el sensor de temperatura y humedad a
Arduino UNO, el siguiente paso será realizar un programa que obtenga
los valores de temperatura y humedad y los muestre por el puerto serie,
de esta forma podremos testear y verificar que el hardware (sensor y
Arduino) funcionan correctamente.
Instalaremos los drivers necesarios, instalaremos el
IDE de desarrollo de Arduino y conectaremos Arduino al PC por el puerto
USB, como indicamos aquí:
Instalación software IDE de desarrollo y controladores para conectar Arduino con un PC con Windows 7
A continuación escribiremos el siguiente programa:
#define DHT11_PIN 0 // ADC0 byte read_dht11_dat() { byte i = 0; byte result=0; for(i=0; i< 8; i++) { while(!(PINC & _BV(DHT11_PIN))); // wait for 50us delayMicroseconds(30); if(PINC & _BV(DHT11_PIN)) result |=(1<<(7-i)); while((PINC & _BV(DHT11_PIN))); // wait '1' finish } return result; } void setup() { DDRC |= _BV(DHT11_PIN); PORTC |= _BV(DHT11_PIN); Serial.begin(9600); Serial.println("Ready"); } void loop() { byte dht11_dat[5]; byte dht11_in; byte i; // start condition // 1. pull-down i/o pin from 18ms PORTC &= ~_BV(DHT11_PIN); delay(18); PORTC |= _BV(DHT11_PIN); delayMicroseconds(40); DDRC &= ~_BV(DHT11_PIN); delayMicroseconds(40); dht11_in = PINC & _BV(DHT11_PIN); if(dht11_in) { Serial.println("dht11 start condition 1 not met"); return; } delayMicroseconds(80); dht11_in = PINC & _BV(DHT11_PIN); if(!dht11_in) { Serial.println("dht11 start condition 2 not met"); return; } delayMicroseconds(80); // now ready for data reception for (i=0; i<5; i++) dht11_dat[i] = read_dht11_dat(); DDRC |= _BV(DHT11_PIN); PORTC |= _BV(DHT11_PIN); byte dht11_check_sum = dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3]; // check check_sum if(dht11_dat[4]!= dht11_check_sum) { Serial.println("DHT11 checksum error"); } Serial.print("Humedad = "); Serial.print(dht11_dat[0], DEC); Serial.print("."); Serial.print(dht11_dat[1], DEC); Serial.print("% "); Serial.print("Temperatura = "); Serial.print(dht11_dat[2], DEC); Serial.print("."); Serial.print(dht11_dat[3], DEC); Serial.println("C "); delay(2000); }
Lo compilaremos para verificar que la sintaxis del código C++
es correcta, para ello pulsaremos el botón "Verify". Si el código es
correcto devolverá "Done compiling", si hay algún error en el código lo
indicará:
Una vez verificado el código pulsaremos en el botón
"Upload" para enviar el programa a Arduino UNO. Si Arduino está
correctamente conectado al PC por el puerto USB, el programa será subido y el IDE de Arduino mostrará "Done uploading"
Para testear el programa que hemos enviado a Arduino,
abriremos la ventana de Serial Monitor del IDE de Arduino, pulsando en
el botón "Serial Monitor":
Si tenemos correctamente conectado el sensor de
temperatura y humedad a Arduino y si el programa enviado es correcto,
nos devolverá la humedad y temperatura actuales a la ventana de puerto
serie:
Guardar resultados de temperatura y humedad en EPROM de Arduino
En Arduino el EEPROM es un espacio de memoria que
puede ser utilizada por los programadores para almacenar información a
largo plazo. Esta memoria es no volátil, por lo tanto aunque dejemos de
alimentar eléctricamente Arduino los valores de esta memoria seguirán
estando almacenados. En el siguiente artículo mostramos más información
sobre el tipo de memorias del chip de Arduino y sobre para qué sirven y
cómo usarlas:
Modificaremos el programa anterior que obtiene la temperatura y humedad usando el sensor Twig Temp&Humi Sensor SEN11301P para guardar los valores obtenidos en la memoria EEPROM interna de Arduino UNO (con capacidad para 1024 valores):
#define DHT11_PIN 0 // ADC0 //Para EEPROM #include int addr = 0; int repeticiones = 0; byte read_dht11_dat() { byte i = 0; byte result=0; for(i=0; i< 8; i++) { while(!(PINC & _BV(DHT11_PIN))); // wait for 50us delayMicroseconds(30); if(PINC & _BV(DHT11_PIN)) result |=(1<<(7-i)); while((PINC & _BV(DHT11_PIN))); // wait '1' finish } return result; } void setup() { //para encender el LED de Arduino pinMode(13, OUTPUT); //para el sensor de temperatura y humedad DDRC |= _BV(DHT11_PIN); PORTC |= _BV(DHT11_PIN); //para iniciar el puerto serie, para las comunicaciones Serial.begin(9600); Serial.println("Iniciando lectura de datos..."); } void loop() { byte dht11_dat[5]; byte dht11_in; byte i; int val = analogRead(0) / 4; //para EEPROM // start condition // 1. pull-down i/o pin from 18ms PORTC &= ~_BV(DHT11_PIN); delay(18); PORTC |= _BV(DHT11_PIN); delayMicroseconds(40); DDRC &= ~_BV(DHT11_PIN); delayMicroseconds(40); dht11_in = PINC & _BV(DHT11_PIN); if(dht11_in) { Serial.println("dht11 start condition 1 not met"); return; } delayMicroseconds(80); dht11_in = PINC & _BV(DHT11_PIN); if(!dht11_in) { Serial.println("dht11 start condition 2 not met"); return; } delayMicroseconds(80); // now ready for data reception for (i=0; i<5; i++) dht11_dat[i] = read_dht11_dat(); DDRC |= _BV(DHT11_PIN); PORTC |= _BV(DHT11_PIN); byte dht11_check_sum = dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3]; // check check_sum if(dht11_dat[4]!= dht11_check_sum) { Serial.println("DHT11 checksum error"); } //guardaremos los valores de humedad y temperatura //cada 10 minutos aproximadamente //Si tenemos 1024 valores y usamos dos por cada captura //uno para la humedad y otro para la temperatura //tendremos espacio en memoria EEPROM para dos días aproximadamente repeticiones = repeticiones + 1; if (repeticiones == 10) { //guardar valores en EEPROM Serial.print("Guardando valores en EEPROM"); Serial.println(" "); EEPROM.write(addr, dht11_dat[0]); //humedad addr = addr + 1; EEPROM.write(addr, dht11_dat[2]); //temperatura addr = addr + 1; repeticiones = 0; if (addr == 1024) { addr = 0; Serial.print("EEPROM llena, se reescribirá..."); Serial.println(" "); digitalWrite(13, HIGH); // encendemos el LED para avisar delay(3000); // esperamos tres segundos digitalWrite(13, LOW); // apagamos el LED } } //enviar valores a puerto serie para depuración Serial.print("Humedad = "); Serial.print(dht11_dat[0], DEC); Serial.print("."); Serial.print(dht11_dat[1], DEC); Serial.print("% "); Serial.print("Temperatura = "); Serial.print(dht11_dat[2], DEC); Serial.print("."); Serial.print(dht11_dat[3], DEC); Serial.println(" "); //esperamos un minuto delay(60000); }
Artículos relacionados
- Primer proyecto hardware con Arduino, encender un LED.
- Tipos de memoria en el microcontrolador de Arduino, Flash, SRAM y EEPROM.
- Sensor de temperatura con Visual Studio y Delphi.
- AjpdSoft Sensor de Movimiento con WebCam - Código fuente Delphi.
- Realizar un alimentador eléctrico para un Asus EEE PC.
- Acceso a aplicaciones y al equipo con huella dactilar.
- Cómo enviar SMS desde un PC usando un módem GSM con Visual Basic .Net.
- Uno de nuestros miembros arreglando un portátil.
- AjpdSoft Puerto Paralelo Código Fuente Delphi.
- AjpdSoft Cálculo parámetros módulos fotovoltaicos.
- AjpdSoft Cálculo de los parámetros de radiación.
- Enviar y recibir faxes desde un equipo con Windows XP y un módem.
- Cómo conectar dos equipos en red por el puerto paralelo con Windows 98 y XP.
- Los pitidos (beep codes) del PC, su significado en caso de error de hardware.
- Cómo actualizar el firmware del teléfono móvil Nokia N96.
- Cómo actualizar el firmware de algunos dispositivos: routers, BIOS, etc.
- AjpdSoft Sensor de Movimiento con WebCam.
- Reparar equipo portátil averiado: al mover el monitor se apaga.
- Instalar impresoras en Active Directory, auditar impresoras.
- Mi primera aplicación Android con Eclipse en Linux, instalar Eclipse Ubuntu.
- Instalar Microsoft Windows 7 Ultimate virtualizado en VMware Server 2.0.1.
- Trucos, código C++.
- Definición USB Enciclopedia AjpdSoft.
Créditos
Artículo realizado íntegramente por Alonsojpd miembro fundador del Proyecto AjpdSoft.
No hay comentarios:
Publicar un comentario