Por ser nuestro primer proyecto con un Arduino, vamos a ser lo mas detallado que podamos, así que empezamos por descargar el IDE de https://www.arduino.cc/en/Main/Software para continuar con los pasos de instalación que no son mas que descomprimir y correr el script ./install.sh . Como último paso debemos agregar nuestro usuario al grupo dialout con «sudo usermod -a -G dialout
Los principales comandos se ejecutan desde la barra de menú principal, Verificar el código (con el ícono de Tilde) y enviar el programa al Arduino (con el ícono de la flecha). Ambos se pueden observar en la siguiente imagen:
En el menú superior, dentro de Herramientas -> Placa definimos el modelo de Arduino que utilizamos, en nuestro caso el Arduino GenuinoUno
También en el menú superior, dentro de Herramientas -> Puerto se define en donde está conectada la placa, en nuestro caso al /dev/ttyACM0
y por último, otro menú a destacar está en el menú superior, Programa -> Incluir Libreria -> Añadir Libreria .ZIP, desde donde importaremos las librerías que se llaman desde los #include desgargados en formato .zip en su mayoría desde github.
La Placa Arduino Uno
Arduino es una plataforma de electrónica open source facil de usar compuesta por un microcontrolador y una serie de puertos de entrada y salida, y es por ser de código abierto que encontraremos varios formatos, precios y colores basados en este proyecto.
Para dar nuestros primeros pasos el Arduino Uno tiene suficiente cantidad de entradas/salidas y muchas referencias en internet como para descargar código de pruebas.
El sensor
Los DHT11 y DHT22 son sensores digitales de temperatura y humedad que utilizan un termistor para medir la temperatura del aire circundante y un sensor capacitivo para obtener la humedad. Estos datos se transmiten sobre un único pin, el segundo de izquierda a derecha visto de frente. Una desventaja que tiene este componente es la velocidad de lectura, donde se recomienda obtener un dato pasado los 2 segundos sobre la lectura anterior. Para solucionar esta restricción tenemos el siguiente fragmento de nuestro código dentro del loop() del Arduino.
if(millis()-prevMillis>2000){ humidity = dht.readHumidity(); temperature = dht.readTemperature(); prevMillis = millis(); } |
El sensor DHT11 trabaja con un rango de medición de temperatura de 0 a 50 grados centígrados con una precisión de +/-2.0 y un rango de humedad de 20% a 90%RH con precisión de 4%. El sensor DHT22 tiene un rango de medición de temperatura de -40 a 80 grados centígrados y un rango de humedad de 0 a 100%RH con precisión de 2%RH.
El conexionado
El valor de la resistencia puede estar entre 4k7 y 10k ohms
Comparativa entre sensores DHT11 y DHT22
http://www.kandrsmith.org/RJS/Misc/Hygrometers/calib_dht22_dht11_sht71.html
Este proyecto involucra manejo del protocolos de red y obviamente procesos de lecturas sobre el sensor de humedad y temperatura. Para ello vamos a necesitar incluir algunas librerías.
Ethernet
La librería Ethernet es la usada para manejar el Ethernet Shield que implementa la pila de protocolos TCP/IP y dentro de Arduino se implementan los protocolos en la capa de aplicación.
Para manejar el Ethernet Shield deberemos conocer todos los métodos que nos ofrece la librería Ethernet y así poder usarla.
Referencias de librería Ethernet:
http://arduino.cc/en/Reference/Ethernet
https://aprendiendoarduino.wordpress.com/2016/07/05/libreria-ethernet/
Ethernet.begin(mac, ip, ip_dns, ip_gateway, subnet) // Inicializa la librería Ethernet (Constructor) |
DHT
Esta librería nos permite realizar de manera sencilla la lectura de los sensores de temepratura y humedad DHT11 y DHT22 sin tener que preocuparnos por el protocolo de comunicación entre el Arduino y los sensores. Las siguientes lineas definen los pasos mas importantes para obtener una lectura del sensor:
#define DHTPIN 2 // Nro. de pin donde se encuentra conectado el sensor #define DHTTYPE DHT22 // Modelo de sensor, puede ser DHT11, DHT21 o DHT22 DHT dht(DHTPIN, DHTTYPE); // Definicion del sensor dht.begin(); // Inicializacion del sensor float humidity = dht.readHumidity(); // Lectura de humedad float temperature = dht.readTemperature(); // Lectura de Temperatura en grados Celsius, con "true" como parametro del metodo readTemperature se obtiene el valor en grados Fahrenheit |
Referencias de la librería DHT
http://www.naylampmechatronics.com/blog/40_Tutorial-sensor-de-temperatura-y-humedad-DHT1.html
https://github.com/adafruit/DHT-sensor-library
El código completo
/************************************************* Como sensar temperatura y humedad con un Arduino Uno y el sensor DHT22 para visualizar los datos por la web. Version: 0.1 Fecha: 08/02/2018 Mas informacion: https://pablo.sarubbi.com.ar **************************************************/ #include <Ethernet.h> // Libreria para manejo de pila de TCP/IP #include <DHT.h> // Libreria que implementa de manera sencilla la lectura del sensor de temperatura/humedad static byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //Mac Address for Arduino Ethernet Shield static byte ip[] = { 192, 168, 1, 100 }; static byte ip_dns[] = { 192, 168, 1, 1 }; static byte ip_gateway[] = { 192, 168, 1, 1}; static byte subnet[] = { 255, 255, 0, 0 }; //Constants #define DHTPIN 2 // Nro. de pin donde se encuentra conectado el sensor #define DHTTYPE DHT22 // Modelo de sensor, puede ser DHT11, DHT21 o DHT22 DHT dht(DHTPIN, DHTTYPE); // Inicializacion del sensor //Variables float humidity=0; float temperature=0; uint32_t prevMillis = millis(); EthernetServer server(80); void setup() { dht.begin(); Ethernet.begin(mac, ip, ip_dns, ip_gateway, subnet); // Se inicializa Ethernet Shield server.begin(); // Se inicializa el WebServer } void loop() { if(millis()-prevMillis>2000){ humidity = dht.readHumidity(); temperature = dht.readTemperature(); prevMillis = millis(); } // Servicio Web para lectura online de Temperatura y Humedad EthernetClient client = server.available(); if (client) { boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); client.println("Refresh: 5"); // refresh the page automatically every 5 sec client.println(); client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.println("<head>"); client.println("\t<title>Arduino Uno + DHT22</title>"); client.println("</head>"); client.println("<body>"); client.print("\t<b>Temperatura:</b> "); client.println(temperature); client.print("\t<br /><b>Humedad:</b> "); client.println(humidity); client.println("</body>"); client.print("</html>"); break; } } } delay(1); client.stop(); } |
Accediendo desde un browser a http://192.168.1.100 podemos ver las lecturas como se muestra en la siguiente captura