El día 23 de junio del 2016 en la institución educativa Johann Heinrich Pestalozzi del municipio de Tepic, Nayarit. El Club de Robótica Estudiantil, Sistemas Embebidos y Programación, participó como ponente tras la invitación por parte de su director, esto, con el fin de conocer la metodología de trabajo y los proyectos más recientes, elaborados por C.R.E.S.E.P..
La presentación se realizó con la muestra de una estación meteorológica autónoma basada en la tarjeta de desarrollo de Arduino Genuino/Uno, haciendo notar la sustentabilidad empleada, al recargar su batería a través de un panel solar, misma que como resultado, proporciona la información a través de Twitter.
Una estación meteorológica es un lugar estratégicamente posicionado para colocar los instrumentos de medición que permitan obtener la información de las variables atmosféricas típicas.
El principal objetivo de éste proyecto, es tener un contacto directo, con los usuarios de distintas redes sociales. Al presentar de manera sencilla, y constante, las condiciones climatológicas de la ciudad.
Empecemos con este tutorial sobre el cómo armar tu propia estación meteorológica:
Materiales:
- Placa Arduino Genuino/Uno
- ProtoBoard
- DHT11
- BMP085
- Placa Arduino Ethernet
Una vez conseguido los materiales los conectaremos como se muestra a continuación:
(La tarjeta Ethernet Shield está montada sobre el Arduino Genuino/Uno)
Cuando terminemos de conectarlo es hora de centrarse en el código.
Librerías necesarias:
- DHT 11:
http://www.prometec.net/wp-content/uploads/2014/10/DHT11.zip
- BMP085:
https://learn.adafruit.com/bmp085/using-the-bmp085
- Twitter:
http://goo.gl/EAdr4I
Para instalar una librería se tiene que copiar la carpeta de la librería y pegarla en Documentos > Arduino > libraries
Llego la hora del código, para mejorar su entendimiento lo dividiremos en partes: la lectura y la publicación en twitter.
Lectura de los sensores:
//Declaramos las librerías necesarias para este proyecto #include <Wire.h> //Librería responsable del DHT11 #include <DHT11.h> //Librería responsable del BMP085 #include <Adafruit_BMP085.h> //Declaramos un PIN digital para el DHT11 int DHT_11 = 2; //Y lo declaramos como DHT11 DHT11 dht11 (DHT_11); //Declaramos el BMP085 Adafruit_BMP085 bmp; void setup() { Serial.begin(9600); //Registramos que el sensor BMP085 se encuentre conectado if(!bmp.begin()) { Serial.println("No se pudo encontrar un sensor BMP085"); while (1) {} } } void loop() { int Error; float Humedad, Temperatura; //Leemos la Humedad y Temperatura, además de si un error ocurriera este se daría a conocer if((Error = dht11.read(Humedad, Temperatura)) == 0) { //Imprimimos la temperatura en grados centígrados Serial.print("La temperatura es de: "); Serial.print(Temperatura); Serial.print(" °c"); //Imprimimos la humedad relativa Serial.println("La humedad relativa es de: "); Serial.print(Humedad); //Imprimimos las lecturas del BMP085 //Imprimimos la presion tomando en cuenta que 1013.25 milibares = 101325 pascales Serial.println("Presión atmosférica: "); Serial.print(bmp.readPressure()); Serial.print(" Pa"); //Imprimimos altitud tomando en cuenta un barómetro estándar Serial.println("Altitud: "); Serial.print(bmp.readAltitude()); Serial.print(" metros"); } else { Serial.println(); Serial.print("Error No:"); Serial.print(Error); Serial.println(); } //Insertamos un delay ya establecido en la librería del DHT11 delay(DHT11_RETRY_DELAY); }
Publicación en Twitter:
#include <SPI.h> #include <Ethernet.h> #include <Twitter.h> //Configuraciones de la Ethernet Shield byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //Si no especificas la dirección IP, entonces usa DHCP byte ip[] = { 192, 168, 2, 250 }; //El token de tu cuenta de Twitter (consíguela en http://arduino-tweet.appspot.com/) Twitter twitter ("Aquí tu token"); //Mensaje que vas a publicar char msg[] = "Hola Mundo desde Arduino"; void setup() { delay(1000); Ethernet.begin(mac, ip); //Si estas usando DHCP con una IP automática entonces: //Ethernet.begin(mac); Serial.begin(9600); //Se inicia la conexión Serial.println("Conectando..."); if (twitter.post(msg)) { int status = twitter.wait(&Serial); if (status == 200) { Serial.println("Publicado."); } else { Serial.print("Fallido: Código "); Serial.println(status); } } else { Serial.println("Conexión fallida"); } } void loop() { }
Juntando estos códigos nosotros podemos crear nuestra estación meteorológica conectada a twitter, al final aquí está el código completo:
// Codigo creado por: Israel Arturo Ozuna Fregoso #include <Twitter.h> #include <Ethernet.h> #include <SPI.h> #include <Wire.h> #include <Adafruit_BMP085.h> #include <DHT11.h> int pin=2; DHT11 dht11(pin); Adafruit_BMP085 bmp; byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //byte ip[] = { 192, 168, 0, 250 }; //El token de tu cuenta de Twitter (consíguela en http://arduino-tweet.appspot.com/) Twitter twitter ("Aquí tu token"); void setup() { } void loop() { delay(60000); float Humedad, Temperaturax2; int i; switch(i) { case 0: { if (!bmp.begin()) { Serial.println("No se registra el BMP085"); while (1) {} } int Temperatura = (bmp.readTemperature()); int Presion = (bmp.readPressure()); String stringOne = "La Temperatura ambiente es de: "; stringOne += Temperatura; stringOne += " °C "; stringOne += "La Presión atmosférica es de: "; stringOne += Presión; stringOne += " pa "; char charBuf[500]; stringOne.toCharArray(charBuf, 500); delay(1000); Ethernet.begin(mac); Serial.println("Estableciendo conexión con Twitter ..."); if (twitter.post(charBuf)) { int status = twitter.wait(&Serial); if (status == 200) { // Conexión exitosa Serial.println("OK."); } else { // Error en la conexión Serial.print("Error : code "); Serial.println(status); } } else { Serial.println("conexión fallida."); } } case 1: { if (!bmp.begin()) { Serial.println("No se registra el BMP085"); while (1) {} } int Altitud = (bmp.readAltitude()); dht11.read(Humedad, Temperaturax2); String stringOne = "Altitud: "; stringOne += Altitud; stringOne += " msnm "; stringOne += "Humedad Relativa: "; stringOne += Humedad; char charBuf[500]; stringOne.toCharArray(charBuf, 500); delay(1000); Ethernet.begin(mac); Serial.println("Estableciendo conexión con Twitter ..."); if (twitter.post(charBuf)) { int status = twitter.wait(&Serial); if (status == 200) { // conexión exitosa Serial.println("OK."); } else { // Error en la conexión Serial.print("Error : code "); Serial.println(status); } } else { Serial.println("Conexion fallida."); } i = 20; } } }
Listo, ahora solo resta subirlo a tu placa Arduino Genuino/Uno y disfrutar de tu propia Estación Climatológica autónoma alimentada por energía solar en Arduino con información publicada cada minuto.
