Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Estación Meteorológica Inteligente con Arduino UNO e Integración AWS

Componentes y Suministros

Componente Descripción Cantidad
Arduino UNO Microcontrolador principal 1
Cable USB-A a Micro-USB Programación y alimentación 1
Protoboard (genérica) Montaje circuito 1
Cables jumper (genéricos) Conexiones 1
Metacrilato (Plexiglass) 4mm Caja protectora 1
Resistencia 221 ohm Limitación corriente 1
Pantalla LCD Adafruit 16x2 Blanco/Azul Visualización datos 1
RTC DS1307 (I²C) Reloj tiempo real con batería 1
Fotorresistencia (LDR) Sensor nivel de luz/oscuridad 1
DHT11 Temperatura y Humedad (4 pines) Sensor T° y H% digital 1
Sensor Temperatura LM35 Sensor temperatura analógico preciso 1
Receptor IR (genérico) Control remoto infrarrojo 1
Sensor Nivel Agua Detección nivel fluido 1
Kit RFID Sunfounder Starter Módulo RFID (uso opcional) 1

Herramientas Necesarias

Sobre el Proyecto

AWS (Arduino Weather Station) proporciona datos ambientales precisos las 24 horas. Basado en Arduino UNO, soporta un completo conjunto de sensores para análisis ambiental.

Objetivo

Detectar datos mediante los sensores descritos e interfacarlos al usuario mediante pantalla LCD. El tamaño reducido permite encerrarlo en una caja pequeña fabricada con cortadora láser.

Sensores Utilizados

Estación Meteorológica Inteligente con Arduino UNO e Integración AWS
Conjunto de sensores instalados

Sensor Nivel Agua/Nieve

Indica nivel de agua en depósitos elevados, evitando desbordamientos y permitiendo conocer el nivel en cualquier momento.

Sensor DHT11 Humedad y Temperatura

Sensor digital calibrado con salida de señal digital. Combina tecnología de captura específica y sensor digital para alta fiabilidad y estabilidad a largo plazo. Respuesta rápida, anti-interferencias, bajo coste.

Fotorresistencia (LDR)

Resistencias dependientes de la luz. Indican presencia/ausencia de luz o miden intensidad. En oscuridad resistencia muy alta; expuestas a luz, resistencia cae drásticamente (incluso a pocos ohmios).

Pantalla LCD I2C 1602

Bus serie de alto rendimiento con función de sincronización y arbitraje para sistemas multi-master. Potenciómetro azul ajusta retroiluminación. Usa solo dos líneas bidireccionales (SDA, SCL) con pull-up. Tensiones típicas +5V o +3.3V.

Módulo RTC DS1302

Basado en integrado DS1302 con reloj/calendario tiempo real y 31 bytes RAM estática. Formato hora hh/mm/ss, fecha yyyy/mm/dd.

Sensor Temperatura LM35

Sensor de precisión. ADC convierte valores analógicos a digitales: ADC = muestra * 1024 / voltaje referencia (+5V). Con referencia 5V, aproximación digital = voltaje entrada * 205.

Receptor IR y Control Remoto

Trabajan en conjunto: receptor IR recibe datos del mando. Botones asignados:

Estación Meteorológica Inteligente con Arduino UNO e Integración AWS
Pantalla hora y fecha (Botón 0)
Estación Meteorológica Inteligente con Arduino UNO e Integración AWS
Pantalla temperatura y humedad (Botón 1)
Estación Meteorológica Inteligente con Arduino UNO e Integración AWS
Pantalla porcentaje oscuridad (Botón 2)
Estación Meteorológica Inteligente con Arduino UNO e Integración AWS
Pantalla nivel fluido (Botón 3)
Estación Meteorológica Inteligente con Arduino UNO e Integración AWS
Modo ciclo automático (Botón Cycle)

El AWS (Arduino Weather Station)

Paso 1: Construcción de la Caja

Diseñadas caras con AutoCAD (tamaños, encajes, agujeros para sensores), cortadas con láser y ensambladas con pegamento fuerte.

Estación Meteorológica Inteligente con Arduino UNO e Integración AWS
Caja de metacrilato cortada láser

Paso 2: Esquemático y Conexiones

Esquemático realizado con Fritzing. Conexiones sencillas.

Estación Meteorológica Inteligente con Arduino UNO e Integración AWS
Esquemático de la estación meteorológica

Paso 3: Programación Arduino

Código en Arduino IDE con todas las librerías necesarias.

Paso 4: Funcionamiento

AWS recoge datos ambientales y los muestra en LCD controlado por mando IR. 5 pantallas intercambiables:

  1. Pantalla Inicio: "Arduino Weather Station" con efecto fading. Se muestra al encender y tras cada consulta.
  2. Fecha y Hora (Botón 0): Acceso directo, 10s de visualización, retorno a Inicio.
  3. Humedad y Temperatura (Botón 1): Datos DHT11 y LM35, 10s, retorno a Inicio.
  4. Oscuridad (Botón 2): Porcentaje oscuridad en LDR, 10s, retorno a Inicio.
  5. Nivel Fluido (Botón 3): Altura fluido en mm, 10s, retorno a Inicio.

Modo Cycle: recorre las 4 pantallas cada 4s (una sola vuelta).

Estación Meteorológica Inteligente con Arduino UNO e Integración AWS
Pantalla inicio

Precauciones

Código

//include sketch libraries
#include <IRremote.h>
#include <stdio.h>
#include <string.h>
#include <DS1302.h>
#include <dht.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>

#define lmPin A1
LiquidCrystal_I2C lcd(0x27, 16, 2);
dht DHT;
const int DHT11_PIN = 4;
const int waterSensor = 0;
int waterValue = 0;
int mmwaterValue = 0;
int sensorPin = A3;
int luce = 0;
int pluce = 0;
float tem = 0;
long lmVal = 0;

const int irReceiverPin = 3;
IRrecv irrecv(irReceiverPin);
decode_results results;

uint8_t RST_PIN = 5;
uint8_t SDA_PIN = 6;
uint8_t SCL_PIN = 7;

char buf[50];
char day[10];
DS1302 rtc(RST_PIN, SDA_PIN, SCL_PIN);

void print_time() {
  Time t = rtc.time();
  memset(day, 0, sizeof(day));
  switch (t.day) {
    case 1: strcpy(day, "Sun"); break;
    case 2: strcpy(day, "Mon"); break;
    case 3: strcpy(day, "Tue"); break;
    case 4: strcpy(day, "Wed"); break;
    case 5: strcpy(day, "Thu"); break;
    case 6: strcpy(day, "Fri"); break;
    case 7: strcpy(day, "Sat"); break;
  }
  snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d", day, t.yr, t.mon, t.date, t.hr, t.min, t.sec);
  Serial.println(buf);
  lcd.setCursor(2, 0);
  lcd.print(t.yr); lcd.print("-"); lcd.print(t.mon / 10); lcd.print(t.mon % 10);
  lcd.print("-"); lcd.print(t.date / 10); lcd.print(t.date % 10); lcd.print(" "); lcd.print(day);
  lcd.setCursor(4, 1);
  lcd.print(t.hr); lcd.print(":"); lcd.print(t.min / 10); lcd.print(t.min % 10);
  lcd.print(":"); lcd.print(t.sec / 10); lcd.print(t.sec % 10);
}

void setup() {
  Serial.begin(9600);
  rtc.write_protect(false);
  rtc.halt(false);
  irrecv.enableIRIn();
  lcd.init();
  lcd.backlight();
  pinMode(sensorPin, INPUT);
  Time t(2017, 12, 9, 11, 20, 00, 7);
  rtc.time(t);
}

void loop() {
  // Animación "Arduino Weather Station" letra a letra
  lcd.setCursor(0, 0); lcd.print("A"); delay(50);
  lcd.setCursor(1, 0); lcd.print("r"); delay(50);
  lcd.setCursor(2, 0); lcd.print("d"); delay(50);
  lcd.setCursor(3, 0); lcd.print("u"); delay(50);
  lcd.setCursor(4, 0); lcd.print("i"); delay(50);
  lcd.setCursor(5, 0); lcd.print("n"); delay(50);
  lcd.setCursor(6, 0); lcd.print("o"); delay(50);
  lcd.setCursor(8, 0); lcd.print("W"); delay(50);
  lcd.setCursor(9, 0); lcd.print("e"); delay(50);
  lcd.setCursor(10, 0); lcd.print("a"); delay(50);
  lcd.setCursor(11, 0); lcd.print("t"); delay(50);
  lcd.setCursor(12, 0); lcd.print("h"); delay(50);
  lcd.setCursor(13, 0); lcd.print("e"); delay(50);
  lcd.setCursor(14, 0); lcd.print("r"); delay(50);
  lcd.setCursor(4, 1); lcd.print("S"); delay(50);
  lcd.setCursor(5, 1); lcd.print("t"); delay(50);
  lcd.setCursor(6, 1); lcd.print("a"); delay(50);
  lcd.setCursor(7, 1); lcd.print("t"); delay(50);
  lcd.setCursor(8, 1); lcd.print("i"); delay(50);
  lcd.setCursor(9, 1); lcd.print("o"); delay(50);
  lcd.setCursor(10, 1); lcd.print("n"); delay(50);

  if (irrecv.decode(&results)) {
    if (results.value == 0xFF6897) { // Botón 0 - HORA
      lcd.clear(); print_time(); delay(10000); lcd.clear(); delay(200); irrecv.resume();
    }
    if (results.value == 0xFF30CF) { // Botón 1 - TEMP/HUM
      lcd.clear();
      int chk = DHT.read11(DHT11_PIN);
      lcd.setCursor(0, 0); lcd.print("Tem:");
      lmVal = analogRead(lmPin);
      tem = (lmVal * 0.0048828125 * 100);
      lcd.print(tem); lcd.print(char(223)); lcd.print("C ");
      lcd.setCursor(0, 1); lcd.print("Hum:");
      lcd.print(DHT.humidity, 1); lcd.print(" % ");
      delay(10000); lcd.clear(); delay(200); irrecv.resume();
    }
    if (results.value == 0xFF18E7) { // Botón 2 - OSCURIDAD
      lcd.clear();
      lcd.setCursor(4, 0); lcd.print("Darkness:");
      luce = analogRead(sensorPin);
      pluce = map(luce, 0, 1023, 0, 100);
      lcd.setCursor(6, 1); lcd.print(pluce); lcd.print("%");
      delay(10000); lcd.clear(); delay(200); irrecv.resume();
    }
    if (results.value == 0xFF7A85) { // Botón 3 - NIVEL FLUIDO
      lcd.clear();
      lcd.setCursor(0, 0); lcd.print("Fluid level(mm):");
      waterValue = analogRead(waterSensor);
      mmwaterValue = map(waterValue, 0, 1023, 0, 40);
      lcd.setCursor(6, 1); lcd.print(mmwaterValue);
      delay(10000); lcd.clear(); delay(200); irrecv.resume();
    }
    if (results.value == 0xFF9867) { // Botón CYCLE - SECUENCIA COMPLETA
      lcd.clear(); print_time(); delay(4000); lcd.clear(); delay(200);
      int chk = DHT.read11(DHT11_PIN);
      lcd.setCursor(0, 0); lcd.print("Tem:");
      lmVal = analogRead(lmPin);
      tem = (lmVal * 0.0048828125 * 100);
      lcd.print(tem); lcd.print(char(223)); lcd.print("C ");
      lcd.setCursor(0, 1); lcd.print("Hum:");
      lcd.print(DHT.humidity, 1); lcd.print(" % ");
      delay(4000); lcd.clear(); delay(200);
      lcd.setCursor(4, 0); lcd.print("Darkness:");
      luce = analogRead(sensorPin);
      pluce = map(luce, 0, 1023, 0, 100);
      lcd.setCursor(6, 1); lcd.print(pluce); lcd.print("%");
      delay(4000); lcd.clear(); delay(200);
      lcd.setCursor(0, 0); lcd.print("Fluid level(mm):");
      waterValue = analogRead(waterSensor);
      mmwaterValue = map(waterValue, 0, 1023, 0, 40);
      lcd.setCursor(6, 1); lcd.print(mmwaterValue);
      delay(4000); lcd.clear(); delay(200);
      irrecv.resume();
    }
  }
}

Conclusiones

Estación meteorológica con Arduino que muestra fecha/hora actual y datos ambientales en LCD controlado por mando IR.

Partes Personalizadas y Cajas

box_a5et5f4U9F.dwg (Archivo DWG para corte láser)

Esquemáticos

aws_DMDwb4iUZp.fzz (Archivo Fritzing)

Proceso de manufactura

  1. Estación Meteorológica Avanzada v2.0: Monitorización en Tiempo Real de Temperatura, Presión, Humedad y Altitud
  2. Detector de idiomas TinyML con Edge Impulse en Arduino Nano 33 BLE Sense
  3. Construye un Juego Giroscópico en Tiempo Real con Arduino Nano y Sensor MPU-6050
  4. Estación de Mezcla de Cócteles "6-Shooter" con Arduino: Construye tu Propio Barman Automático
  5. Proyecto Dados Digitales Arduino: Construye tu Propio Generador de Números Aleatorios con LCD
  6. Find Me: Localizador Inteligente de Objetos con Arduino y Bluetooth
  7. Construir una lámpara de escritorio reactiva al audio con Arduino Nano
  8. Registrador de Datos de Alto Rendimiento para Globo Meteorológico con Arduino
  9. Estación Meteorológica Portátil Arduino por $10 – Nano, DHT22, BMP180 y LCD
  10. Pong Neón en Matriz NeoPixel con Arduino Nano
  11. Monitorización Meteorológica en Tiempo Real con Arduino y ThingSpeak IoT