|
Arduino: Obtener temperatura y humedad con Arduino
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 humedadPara realizar un proyecto hardware para obtener la temperatura y humedad usando Arduino UNO necesitaremos los siguientes componentes:
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: Primer proyecto hardware con Arduino, encender un LED
Conexión de sensor de temperatura y humedad con Arduino UNOPara 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 resultadoUna 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 ArduinoEn 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: Tipos de memoria en el microcontrolador de Arduino, Flash, SRAM y EEPROM 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 <EEPROM.h>
Artículos relacionados
CréditosArtículo realizado íntegramente por Alonsojpd miembro fundador del Proyecto AjpdSoft. Anuncios
Enviado el Jueves, 13 octubre a las 22:02:12 por ajpdsoft
|
|