$ 10 Estación meteorológica portátil Arduino (AWS)
Componentes y suministros
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Herramientas y máquinas necesarias
|
Aplicaciones y servicios en línea
|
Acerca de este proyecto
Recientemente, mi universidad tuvo una pequeña exhibición de ciencias, así que mi maestro me pidió que presentara un proyecto en la universidad para enseñar a los jóvenes estudiantes sobre electrónica, así que básicamente tuve dos días para hacer algo.
Como las condiciones climáticas aquí varían mucho y recientemente la temperatura ronda los 34-40 grados centígrados. Así que decidí hacer una estación meteorológica.
Entonces, ¿qué hace una estación meteorológica?
Una estación meteorológica es un dispositivo que recopila datos relacionados con el clima y el medio ambiente utilizando muchos sensores diferentes
Sensores como
- Viento
- Humedad
- Lluvia
- Temperatura
- Presión
- Altitud
El objetivo es hacer una estación meteorológica portátil
Características que debería tener
- Temperatura
- Humedad
- Presión
- Altitud
Paso 1:Ingredientes:es hora de comprar cosas
Así que aquí está lo que necesitaremos para el proyecto
De hecho, comencé el proyecto en My UNO, pero luego decido cambiar a una solución compacta.
Tenía el nano conmigo en ese momento, así que tuve que ir con él, me encantaría usar micro, porque es el más pequeño.
De todos modos, dejando esas cosas, hablando de presupuesto y piezas, aquí está la lista.
- Sensor de temperatura y humedad DHT22 -> $ 3.00
- Sensor de presión BMP180 (BMP280 es más barato pero caro en mi localidad)> $ 2.00
- Arduino Nano> $ 1.89
- Soldadura
- Pantalla LCD con controlador I2C> $ 3.0
- Veroboard
- Encabezado femenino
Para el extremo de la herramienta necesitará
- Soldador
- Pinza de punta
- Cables
Y también algo de tiempo
Paso 2:temperatura y humedad:DHT22
La medición de la temperatura se puede realizar utilizando diferentes sensores.
Los más populares son DHT22, DHT11, SHT1x
Básicamente, entendamos en qué se diferencian estos sensores y por qué he usado DHT22 en primer lugar.
Salida AM2302 señal digital calibrada. Aplica una exclusiva técnica de recolección de señales digitales y tecnología de detección de humedad, asegurando su confiabilidad y estabilidad. Sus elementos de detección están conectados con una computadora de un solo chip de 8 bits.
Cada sensor de este modelo está compensado por temperatura y calibrado en una cámara de calibración precisa y el coeficiente de calibración se guarda en el tipo de programa en la memoria OTP, cuando el sensor está detectando, citará el coeficiente de la memoria. El tamaño pequeño, el bajo consumo y la larga distancia de transmisión (100 m) permiten que AM2302 se adapte a todos los tipos de ocasiones de aplicación difíciles.
Veamos algunos pros y contras de los tres.
DHT11
Ventajas:No se necesita soldadura. El más barato entre tres. Obtenga una salida estable rápidamente. Transmisión a más de 20 m. Fuerte interferencia.
Contras:¡Biblioteca! Sin opción de resolución. Errores:Temp +/- 2 ° C; Humedad +/- 5% RH. Rango de medición inadecuado (0-50 ° C). Aplicaciones:jardinería, agricultura.
DHT22
Ventajas:No se necesita soldadura. Agregando algunos dólares a DHT11 y obtenga una actualización. Curva suave. El error más pequeño. Rango grande. Transmisión a más de 20 m. Fuerte interferencia.
Contras:puede ser más sensible. Seguimiento lento de la temperatura. Se necesita biblioteca. Aplicaciones:Monitoreo ambiental. SHT1x
Ventajas:Sin soldaduras. Curva suave. Pequeño error. Respuesta rápida. Bajo consumo de energía. Sueño automático. Estabilidad y consistencia extraordinarias a largo plazo.
Contras:dos interfaces digitales. Error de humedad. Mismo rango de medición con DHT11. Se necesita biblioteca. Aplicaciones:instalaciones para trabajos pesados y de larga duración. A continuación se muestran tres opciones relativamente económicas.
Conexión
Vcc a 5V o 3.3V
Gnd a Gnd
Datos al pin 2 de arduino
Paso 3:Barómetro y sensor de presión:BMP180
El bmp180 es un sensor de presión barométrica con una interfaz I2C ("Cable").
Los sensores de presión barométrica miden la presión absoluta del aire que los rodea. Esta presión varía tanto con el clima como con la altitud.
este módulo bmp180 venía con un regulador de 3.3 v 662k que exploté hasta convertirse en una estupidez, así que conecté un cable para desviar todo el vcc directamente al chip.
Nota:al hacerlo, me limito a usar solo 3.3 v, usar voltajes superiores arruinará el dispositivo.
Es posible que otro modelo no tenga el regulador de voltaje 662k. así que compruébalo a fondo.
Ok, volviendo, conectemos el sensor al arduino.
El sensor se conecta al bus i2c del arduino, cuál de nano y Uno son
SDA ==> A4
SCL ==> A5
VCC ==> 3,3 V
GND ==> GND
Hablemos un poco sobre la presión y cómo la presión mide la altitud y la temperatura.
La presión atmosférica en cualquier posición no es constante. La compleja interacción entre el giro de la tierra, la inclinación del eje y muchos otros factores dan como resultado áreas en movimiento de mayor y menor presión, que a su vez causan las variaciones en el clima que vemos todos los días. Al observar los cambios en la presión, puede predecir cambios a corto plazo en el clima.
Por ejemplo, una caída de presión generalmente significa que se avecina un clima húmedo o una tormenta (se está moviendo un sistema de baja presión). El aumento de la presión generalmente significa que se acerca un clima despejado (se está moviendo un sistema de alta presión).
La presión atmosférica también varía con la altitud. La presión absoluta en el campo base del monte Everest (5400) es más baja que en Delhi (216)
Dado que la presión abosoluta es difícil de comparar directamente las mediciones de presión de un lugar a otro, utilizamos la presión relativa, que es la presión al nivel del mar.
Medir la altitud
La presión media de la atmósfera al nivel del mar es 1013,25 hPa (o mbar). Esto desciende a cero a medida que asciende hacia el vacío del espacio. Debido a que se comprende bien la curva de esta caída, puede calcular la diferencia de altitud entre dos mediciones de presión (p y p0) utilizando esta ecuación:
alti =44330 * [1- (p / p0) ^ (1 / 5.255)]
Si usa la presión a nivel del mar (1013.25 hPa) como presión de referencia (p0), la salida de la ecuación será su altitud actual sobre el nivel del mar.
Precauciones
Dale aire: Recuerde que el BMP180 necesita acceso al aire ambiente para medir su presión, así que no lo guarde en una caja sellada. Debe ser adecuado proporcionar un pequeño orificio de ventilación. Pero no demasiado aire :Por otro lado, la exposición al aire o al viento en movimiento rápido puede causar variaciones momentáneas de presión que afectarán sus lecturas. Proteja el dispositivo de las fuertes corrientes de aire.
Mantenlo fresco: Debido a que se necesita una lectura de temperatura precisa para medir la presión, trate de no exponer el dispositivo a cambios rápidos de temperatura y manténgalo alejado de las partes calientes cercanas y otras fuentes de calor.
Manténgalo seco :El BMP180 es sensible a la humedad. No lo sumerja ni permita que entre en contacto con agua líquida.
No lo ciegue: Sorprendentemente, el silicio dentro del BMP180 es sensible a la luz, que puede ingresar al dispositivo a través del orificio en la parte superior del chip. Para una máxima precisión, proteja el chip de la luz ambiental.
Paso 4:Hacer el circuito
Entonces comenzamos haciendo el encabezado para el nano. de hecho, cortamos los encabezados femeninos y luego los archivamos para que se vean como si fueran originalmente de ese tamaño. Luego, los soldamos. luego hicimos los encabezados para el sensor DHT22
. necesitaba una resistencia de 10k para conectarse desde los datos a tierra. Luego soldamos todo. Luego llegó el momento del bmp180, agregamos el encabezado de manera similar. Usamos 3.3 V como energía. Conectamos todo el bus i2c.
Por último, agregamos la pantalla que estamos usando i2c lcd, por lo que usamos el mismo bus que usamos para el módulo bmp180.
( Hay una cuarta ranura en la que quería agregar el módulo rtc más adelante para también incoperate clock en la máquina)
Paso 5:tiempo para el código
Espera ....................
Descarga las bibliotecas
bmp180
https://github.com/sparkfun/BMP180_Breakout_Arduin ...
BMP180_Breakout_Arduino_Library-master.zipBiblioteca dht22
https://github.com/adafruit/DHT-sensor-library
Para instalar una biblioteca en arduino, consulte este enlace
https://www.arduino.cc/en/Guide/Libraries
He usado arduino 1.6.5, por lo que el código funcionará para esta versión con seguridad, también puede ser superior si en algún caso no funciona, use 1.6.5 como versión base.
#include #include #include #include "DHT.h" #include
Presión SFE_BMP180;
#define ALTITUDE 20.56 #define I2C_ADDR 0x27 // <<- Agrega tu # definir Rs_pin 0 # definir Rw_pin 1 # definir En_pin 2 # definir BACKLIGHT_PIN 3 # definir D4_pin 4 # definir D5_pin 5 # definir D6_pin 6 # definir D7_pin 7
#definir DHTPIN 2 // qué digital pin al que estamos conectados
// ¡Descomenta el tipo que estés usando! // # define DHTTYPE DHT11 // DHT 11 # define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321DHT dht (DHTPIN, DHTTYPE); LiquidCrystal_I2C lcd (I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin); flotador t1, t2;
void setup () {Serial.begin (9600); lcd. comienzo (16,2); // <<- nuestro LCD es un 20x4, cámbielo por su LCD si es necesario // LCD Backlight ONlcd.setBacklightPin (BACKLIGHT_PIN, POSITIVE); lcd.setBacklight (HIGH); casa lcd (); // ir a casa en LCDlcd.print ("Estación meteorológica"); delay (5000); dht.begin (); presión.comienzo (); } bucle vacío () {estado de carácter; doble T, P, p0, a; status =pressure.startTemperature (); if (status! =0) {delay (status);
status =pressure.getTemperature (T); if (estado! =0) {Serial.print ("1"); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Temperatura Baro:"); lcd.setCursor (0,1); impresión lcd (T, 2); lcd.print ("grado C"); t1 =T; delay (3000);
status =pressure.startPressure (3); if (status! =0) {// Espere a que se complete la medición:delay (status);
status =pressure.getPressure (P, T); si (estado! =0) {lcd.clear (); lcd.setCursor (0,0); lcd.print ("presión abslt:"); lcd.setCursor (0,1); impresión lcd (P, 2); lcd.print ("mb"); retraso (3000);
p0 =presión.nivel de sellado (P, ALTITUD); // estamos a 1655 metros (Boulder, CO)
a =presión.altitud (P, p0); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Altitud:"); lcd.setCursor (0,1); lcd.print (a, 0); lcd.print ("metros"); retraso (3000); }}}} float h =dht.readHumidity (); // Lee la temperatura como Celsius (por defecto) float t =dht.readTemperature (); t2 =t; lcd.clear (); lcd.setCursor (0,0); // ir al inicio de la 2ª línea lcd.print ("Humedad:"); lcd.setCursor (0,1); lcd.print (h); lcd.print ("%"); retraso (3000); lcd.clear (); lcd.setCursor (0,0); // ir al inicio de la 2ª línea lcd.print ("Tempuratura DHT:"); lcd.setCursor (0,1); lcd.print (t); lcd.print ("grado C"); retraso (3000); lcd.clear (); lcd.setCursor (0,0); // ir al inicio de la 2ª línea lcd.print ("Temperatura media:"); lcd.setCursor (0,1); impresión lcd ((t1 + t2) / 2); lcd.print ("grado C"); retraso (3000);}
FSIULGKING9D7SD.ino
Código
- Fragmento de código n. ° 1
Fragmento de código n. ° 1 Texto sin formato
#include
#include #include #include "DHT.h" #include SFE_BMP180 presión;
#define ALTITUDE 20.56 #define I2C_ADDR 0x27 // <<- Agrega tu dirección aquí. #define Rs_pin 0 # define Rw_pin 1 # define En_pin 2 # define BACKLIGHT_PIN 3 # define D4_pin 4 # define D5_pin 5 # define D6_pin 6 # define D7_pin 7
#define DHTPIN 2 // qué pin digital tenemos ' estás conectado a
// ¡Descomenta el tipo que estés usando! // # define DHTTYPE DHT11 // DHT 11 # define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321DHT dht (DHTPIN, DHTTYPE); LiquidCrystal_I2C lcd (I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin); flotador t1, t2;
void setup () {Serial.begin (9600); lcd. comienzo (16,2); // <<- nuestro LCD es un 20x4, cámbielo por su LCD si es necesario // LCD Backlight ONlcd.setBacklightPin (BACKLIGHT_PIN, POSITIVE); lcd.setBacklight (HIGH); casa lcd (); // ir a casa en LCDlcd.print ("Estación meteorológica"); delay (5000); dht.begin (); presión.comienzo (); } bucle vacío () {estado de carácter; doble T, P, p0, a; status =pressure.startTemperature (); if (status! =0) {delay (status);
status =pressure.getTemperature (T); if (estado! =0) {Serial.print ("1"); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Temperatura Baro:"); lcd.setCursor (0,1); impresión lcd (T, 2); lcd.print ("grado C"); t1 =T; delay (3000);
status =pressure.startPressure (3); if (status! =0) {// Espere a que se complete la medición:delay (status);
status =pressure.getPressure (P, T); si (estado! =0) {lcd.clear (); lcd.setCursor (0,0); lcd.print ("presión abslt:"); lcd.setCursor (0,1); impresión lcd (P, 2); lcd.print ("mb"); retraso (3000);
p0 =presión.nivel de sellado (P, ALTITUD); // estamos a 1655 metros (Boulder, CO)
a =presión.altitud (P, p0); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Altitud:"); lcd.setCursor (0,1); lcd.print (a, 0); lcd.print ("metros"); retraso (3000); }}}} float h =dht.readHumidity (); // Lee la temperatura como Celsius (por defecto) float t =dht.readTemperature (); t2 =t; lcd.clear (); lcd.setCursor (0,0); // ir al inicio de la 2ª línea lcd.print ("Humedad:"); lcd.setCursor (0,1); lcd.print (h); lcd.print ("%"); retraso (3000); lcd.clear (); lcd.setCursor (0,0); // ir al inicio de la 2ª línea lcd.print ("Tempuratura DHT:"); lcd.setCursor (0,1); lcd.print (t); lcd.print ("grado C"); retraso (3000); lcd.clear (); lcd.setCursor (0,0); // ir al inicio de la 2ª línea lcd.print ("Temperatura media:"); lcd.setCursor (0,1); impresión lcd ((t1 + t2) / 2); lcd.print ("grado C"); retraso (3000);}
Github
https://github.com/sparkfun/BMP180_Breakout_Arduino_Library/archive/master.ziphttps://github.com/sparkfun/BMP180_Breakout_Arduino_Library/archive/master.zipGithub
https://github.com/adafruit/DHT-sensor-libraryhttps://github.com/adafruit/DHT-sensor-libraryEsquemas
Proceso de manufactura
- Estación meteorológica Raspberry Pi 2
- Estación meteorológica Raspberry Pi
- Weather Station V 2.0
- Model Rail Digital DCC Command Station Arduino y aplicación gratuita
- 6-Shooter:Arduino Drink Mixing Station
- Dados digitales Arduino
- Piano táctil capacitivo portátil
- Controlador de juego Arduino
- Detector de alcance portátil
- Pixel Chaser Game
- Registrador de datos de globos meteorológicos con tecnología Arduino