Siguiendo con los proyectos de la Arduino Nano, esta vez emprendemos un trabajo simple, pero divertido. Además que no es tan costosa de realizar. Se trata de una Mini Estación Meteorológica, que tiene como placa principal a la Arduino Nano.
Indice
Proyecto Arduino Nano: Componentes que utilizaremos
COMPONENTES | CANTIDAD |
Arduino Nano R3 | x1 |
SENSOR DE PRESIÓN BMP-280 S | x1 |
Sensor de temperatura y humedad DHT11 (4 pines) | x1 |
Cable de USB-A a Mini-USB | x1 |
RECINTO IMPRESO 3D | x1 |
Proyecto Arduino Nano: Herramientas adicionales
- Soldador (genérico)
- Alambre para soldar, sin plomo
- Cinta adhesiva de doble cara
- Impresora 3D (genérica)
Proyecto Arduino Nano: Software
Para realizar la programación necesitamos el IDE de Arduino.
Además, de algún software para empezar con la edición de nuestra mini estación meteorológica. Podemos utilizar AutoCad de Autodesk o cualquier programa similar, que nos sirva para editar los componentes en 3D.
Arduino IDEInstalación y descarga del IDe de Arduino Autodesk FusionDescarga el programa de Edición 3DIntroducción
La captura de datos físicos como el del ambiente en tiempo real, es simplemente emocionante. En este proyecto, no sólo podrás capturar tres parámetros físicos fundamentales para la predicción del tiempo, a saber, la temperatura, la humedad y la presión atmosférica, sino que también podrás visualizar los datos en tiempo real en una pantalla LCD.
Proyecto Arduino Nano: Descripción
Los dos sensores utilizados en este proyecto son el BMP-280 y DHT-11. El primero detecta la temperatura y la presión atmosférica, mientras que el segundo detecta la humedad relativa.
El DHT-11 se podría haber hecho con el BME-280 (también puede medir la humedad) en lugar del BMP-280, pero si se tiene en cuenta el costo, entonces la combinación de sensores utilizados aquí es mucho más económica para los proyectos impresión sencilla.
También debemos tener en cuenta que, aunque la DHT-11 es capaz de detectar tanto la temperatura como la humedad, es utilizada para detectar la humedad sólo porque su resolución de detección de la temperatura es de +/-2° en comparación con +/-5° para el BMP-280.
El corazón de este proyecto es la placa de desarrollo Arduino Nano. En este proyecto, se eligió a la placa Arduino Nano sobre la Arduino Nano, debido a su precio asequible.
Una pantalla LCD TFT de 1.44″ de la serie ST7735 es usada como pantalla para nuestro proyecto. Evitamos emplear alguna otra pantalla más grande, para evitar que la placa Arduino NANO se sobrecargue.
Proyecto Arduino Nano: Programación
Hemos proporcionado una combinación de diagrama de circuitos y diagrama de bloques, de la forma más conveniente y posible para ayudar a los emprendedores de este proyecto a comprender la configuración física y la conexión de los componentes.
También nos dimos la tarea de proporcionar tablas para la ubicación de los componentes para facilitar más las cosas.
Al revisar el diagrama y las tablas uno notará que los pines de 5V y GND del cabezal ICSP en la Arduino Nano, han sido utilizados para suministrar energía a los componentes, junto con los pines de energía y de tierra. Esto se ha hecho para eliminar cualquier fuente de energía adicional que haga que el sistema sea voluminoso.
En cuanto a la programación, en la primera parte hemos incluido una serie de bibliotecas para mantener la programación corta y simple. Además de las obvias, las librerías Wire.h y SPI.h son dignas de mención porque Wire.h es la que permite al Arduino comunicarse con los dispositivos I2C/TWI como el BMP-280 y la pantalla LCD ST7735 y SPI.h proporciona la interfaz periférica en serie con la pantalla LCD ST7735.
En la segunda parte, se inicializan los sensores y se configura la disposición, el color de fuente, etc. Todo esto, parte del LCD, para así mostrar los datos según nuestras preferencias.
En la parte final de nuestra programación, obtenemos la salida de los sensores, el cual se muestra con un leve retraso, conveniente entre cada lectura para mantener los procesos estables.
Proyecto Arduino Nano: Construcción
En nuestro prototipo, los componentes se han mantenido modulares y conectados empleando cables de puente en lugar de soldaduras. Esto no sólo permite una fácil localización de problemas y reparación, sino que también hace que el proceso de ensamblaje no tenga problemas.
La caja del dispositivo ha sido impresa en 3D para un ajuste perfecto de los componentes. La caja está provista de una ventilación adecuada para exponer los sensores a los medidores y disipar el calor generado por el sistema, que de otro modo interferiría con los elementos de detección.
El dispositivo se alimenta a través del mismo tipo de USB a tipo USB Mini-B utilizado para programar el Arduino. El prototipo ha sido colocado en el interior en el estiramiento durante unas pocas horas usando tanto el puerto USB del PC como el cargador de 5V del smartphone como fuente de alimentación.
Los resultados son bastante precisos comparados con los datos meteorológicos oficiales, considerando el costo de producción y el tiempo que hemos invertido en el desarrollo.
En conclusión, podemos decir que este proyecto es bastante económico, útil por decirlo menos, y lo más importante, es divertido tener una pequeña y práctica estación meteorológica disponible siempre que lo necesitemos.
Procesos
Diagramas de Circuito: Proyecto Arduino Mini Estación Meteorológica
El diagrama de circuitos de nuestra estación meteorológica tendrá el siguiente este esquema. Podemos seguir este mismo, o quizás modificarlo según nuestros requerimientos. Podemos ver el cableado desde nuestra placa Arduino Nano hacia los demás componentes, como el LCD y los sensores.
Proyecto Arduino Nano: Códigos que necesitamos
CÓDIGO C/C++
Estos son los códigos necesarios para el proyecto. Para guiarte, solo sigue las declaraciones en los comentarios.
#include <SPI.h> //include Serial Peripheral Interface library #include <Wire.h> //include Two Wire Interface library #include <Adafruit_GFX.h> // include Adafruit graphics library #include <Adafruit_ST7735.h> // include Adafruit ST7735 TFT library #include <Adafruit_BMP280.h> // include Adafruit BMP280 sensor library #include "DHT.h" //include DHTXX sensor library #define DHTPIN 2 //DHT11 data pin connected to arduino pin D2 #define DHTTYPE DHT11 //specifying the type of DHT sensor used #define TFT_RST 8 // TFT RST pin is connected to arduino pin D8 #define TFT_CS 10 // TFT CS pin is connected to arduino pin D9 #define TFT_DC 9 // TFT DC pin is connected to arduino pin D10 // initialize ST7735 SERIES TFT library Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); // define device I2C address: 0x76 or 0x77 (0x77 is the library default address) #define BMP280_I2C_ADDRESS 0x76 Adafruit_BMP280 bmp280; // initialize Adafruit BMP280 library DHT dht(DHTPIN, DHTTYPE); // initialize DHT sensor void setup(void) { dht.begin(); // synchronizing DHT sensor tft.initR(INITR_144GREENTAB); // initialize a ST7735S chip, black tab tft.fillScreen(ST77XX_BLACK); // setting black background tft.drawFastHLine(0, 15 , tft.width(), ST77XX_CYAN);// draw horizontal seperation line at position (0, 15) tft.setTextColor(ST77XX_CYAN, ST77XX_BLACK); // set text color to white and black background tft.setTextSize(1); // setting text size to 1 //tft.setCursor(4, 0); // move cursor to position (4, 0) pixel //tft.print("ARDUINO + ST7735 TFT"); tft.setCursor(25, 5); // move cursor to position (25, 5) pixel tft.print("WEATHER BUDDY"); // initialize the BMP280 sensor if( bmp280.begin(BMP280_I2C_ADDRESS) == 0 ) { // connection error or device address wrong! tft.setTextColor(ST77XX_RED, ST77XX_CYAN); // set text color to red and black background tft.setTextSize(2); // setting text size to 2 tft.setCursor(5, 76); // move cursor to position (5, 76) pixel tft.print("Connection"); tft.setCursor(35, 100); // move cursor to position (35, 100) pixel tft.print("Error"); while(1); // stay here } tft.drawFastHLine(0, 55, tft.width(), ST77XX_CYAN); // draw horizontal seperation line at position (0, 55)pixel tft.drawFastHLine(0, 95, tft.width(), ST77XX_CYAN); // draw horizontal seperation line at position (0, 195)pixel tft.setTextColor(ST77XX_RED, ST77XX_BLACK); // set text color to red and black background tft.setCursor(30, 20); // move cursor to position (30, 20) pixel tft.print("TEMPERATURE "); // setting heading for first section tft.setTextColor(ST77XX_CYAN, ST77XX_BLACK); // set text color to cyan and black background tft.setCursor(40, 60); // move cursor to position (40, 60) pixel tft.print("HUMIDITY "); // setting heading for second section tft.setTextColor(ST77XX_GREEN, ST7735_BLACK); // set text color to green and black background tft.setCursor(40, 100); // move cursor to position (40, 100) pixel tft.print("PRESSURE "); // setting heading for third section tft.setTextSize(2); // setting text size to 2 } // main loop void loop() { char _buffer[8]; // read temperature, humidity and pressure from the BMP280 sensor float temp = bmp280.readTemperature(); // get temperature in °C float hum = dht.readHumidity(); // get humidity in rH% float pres = bmp280.readPressure(); // get pressure in hPa // print temperature (in °C) if(temp < 0) // if temperature < 0 sprintf( _buffer, "-%02u.%02u", (int)abs(temp), (int)(abs(temp) * 100) % 100 ); else // if temperature >= 0 sprintf( _buffer, " %02u.%02u", (int)temp, (int)(temp * 100) % 100 );// setting the value approximation tft.setTextColor(ST77XX_YELLOW, ST77XX_BLACK); // set text color to yellow and black background tft.setCursor(11, 34); // move cursor to position (11,34) pixel tft.print(_buffer); // print temperature from BMP-280 sensor tft.drawCircle(89, 34, 2, ST77XX_YELLOW); // print the degree symbol ( ° )(can be omitted if * is used instead) tft.setCursor(95, 34); // move cursor to position (95,34) pixel tft.print("C"); // print the Celcius symbol // 2: print humidity (in %) sprintf( _buffer, "%02u ", (int)(hum)); // setting the value approximation tft.setTextColor(ST77XX_MAGENTA, ST77XX_BLACK); // set text color to magenta and black background tft.setCursor(45, 74); // move cursor to position (45,74) pixel tft.print(_buffer); // print humidity from DHT-11 sensor tft.setCursor(75, 74); // move cursor to position (75,74) pixel tft.print("%"); // print the percentage symbol // 3: print pressure (in hPa) sprintf( _buffer, "%04u.%02u", (int)(pres/100), (int)((uint32_t)pres % 100) ); // setting the value approximation tft.setTextColor(ST77XX_ORANGE, ST77XX_BLACK); // set text color to orange and black background tft.setCursor(3, 112); // move cursor to position (3,112)pixel tft.print(_buffer); // print atmospheric pressure from BMP-280 tft.setCursor(91, 112); // move cursor to position (91,112)pixel tft.print("hPa"); // print unit of atmospheric pressure as hecto pascal delay(1000); // wait 1 second before taking next sensor reading }
Créditos: Arduino NANO
Gracias a: Dnbakshi07