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 Arduino Nano: Sensores BMP280, DHT11, UV y RTC en OLED 0,96"

Componentes y materiales

Herramientas necesarias

Aplicaciones y servicios

Descripción del proyecto

Estación meteorológica local (sin internet) que muestra en OLED: presión, temperatura, humedad, índice UV y reloj con fecha/día semana. Ideal junto a ventana para UV.

Paso 1: Carcasa impresa 3D

Diseñada en Fusion 360, impresa en PLA verde (Ender 3, 20 % relleno, 70 mm/s, con soportes). Archivos STL incluidos.

Paso 2: BMP280 (SPI)

Paso 3: DS3231 RTC (I2C)

Paso 4: DHT11

Paso 5: Sensor UV GUVA-S12SD

Paso 6: Display OLED 128×64 I2C (SSD1306)

Vídeo

Demostración en vídeo (sección correspondiente).

Código completo

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET 4
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

#define BMP_SCK 13
#define BMP_MISO 12
#define BMP_MOSI 11
#define BMP_CS 10
DS3231 clock;
bool century=false, h12Flag, pmFlag;
Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);

#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

// Bitmaps (frame0, frame1, frame2) omitidos por brevedad

void setup() {
  Serial.begin(57600);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { /* error */ }
  Wire.begin(); dht.begin();
  if(!bmp.begin()) { /* error */ }
  // Pantalla inicial
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setCursor(0,9); display.setFont(&FreeSans9pt7b); display.println("**** LOCAL ****");
  display.setCursor(0,38); display.setFont(&FreeMonoBoldOblique12pt7b); display.println("wather");
  display.setCursor(27,58); display.println("Station");
  display.display(); delay(2000);
  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, Adafruit_BMP280::SAMPLING_X2,
                  Adafruit_BMP280::SAMPLING_X16, Adafruit_BMP280::FILTER_X16,
                  Adafruit_BMP280::STANDBY_MS_500);
}

void loop() {
  // 1. Pantalla HORA
  display.clearDisplay();
  display.setFont(&FreeMonoBoldOblique12pt7b);
  display.setCursor(13,15); display.print(clock.getHour(h12Flag,pmFlag));
  display.setCursor(38,15); display.println(":");
  display.setCursor(50,15); display.println(clock.getMinute());
  display.setCursor(70,15); display.println(pmFlag?" PM":" AM");
  display.setFont(&FreeSans9pt7b);
  display.setCursor(20,60); display.println(clock.getDate());
  display.setCursor(40,60); display.println("/");
  display.setCursor(46,60); display.println(clock.getMonth(century));
  display.setCursor(65,60); display.println("/");
  display.setCursor(70,60); display.println("20");
  display.setCursor(90,60); display.println(clock.getYear());
  display.setCursor(30,30);
  switch(clock.getDoW()){
    case 1: display.println("Saturday"); break;
    case 2: display.println("Sunday"); break;
    case 3: display.println("Monday"); break;
    case 4: display.println("Tuesday"); break;
    case 5: display.println("Wednesday"); break;
    case 6: display.println("Thursday"); break;
    case 7: display.println("Friday"); break;
  }
  display.display(); delay(5000);

  // 2. Pantalla PRESIÓN
  display.clearDisplay();
  display.drawBitmap(0,0,frame0,40,40,1);
  display.setFont(&FreeSans9pt7b);
  display.setCursor(41,28); display.println(bmp.readPressure()/100);
  display.setCursor(110,28); display.setFont(); display.println("hPa");
  display.setCursor(0,55); display.setFont(&FreeSans9pt7b); display.println("Altitude:");
  display.setCursor(65,62); display.println(bmp.readAltitude(1005.47));
  display.setCursor(113,62); display.println("m");
  display.display(); delay(5000);

  // 3. Pantalla TEMP + RH
  display.clearDisplay();
  display.setFont(&FreeMonoBoldOblique12pt7b);
  display.drawBitmap(0,5,frame1,40,51,1);
  display.setCursor(35,30); display.print(bmp.readTemperature());
  display.setFont(&FreeSans9pt7b);
  display.setCursor(102,28); display.println(" *");
  display.setCursor(110,31); display.println(" C");
  display.setFont();
  display.setCursor(66,45); display.println("RH :");
  byte RH = dht.readHumidity();
  display.setCursor(95,45); display.println(RH);
  display.setCursor(110,45); display.println("%");
  display.drawBitmap(0,56,frame2,135,15,1);
  display.display(); delay(5000);

  // 4. Pantalla UV
  display.clearDisplay();
  float sensorValue = analogRead(A0);
  float sensorVoltage = sensorValue / 1024.0 * 5.0;
  int UV_index = sensorVoltage / 0.1;
  display.setFont(&FreeSans9pt7b);
  display.setCursor(0,15); display.print(" UV INDEX ");
  display.setCursor(58,45); display.println(UV_index);
  display.display(); delay(5000);
}

Partes personalizadas y esquemático

Archivo ZIP carcasa 3D. Esquemático de conexiones (imagen).

Proceso de manufactura

  1. Estación meteorológica solar DIY con Raspberry Pi
  2. Construcción de una estación meteorológica exterior con Raspberry Pi 2 y ADS‑WS1
  3. Construya una estación meteorológica con Raspberry Pi que envíe datos diarios por email
  4. Estación Meteorológica Avanzada v2.0: Monitorización en Tiempo Real de Temperatura, Presión, Humedad y Altitud
  5. Estación de Mezcla de Cócteles "6-Shooter" con Arduino: Construye tu Propio Barman Automático
  6. Sistema de Sensor de Temperatura Multiposición para Integración en Hogar Inteligente
  7. Registrador de Datos de Alto Rendimiento para Globo Meteorológico con Arduino
  8. Estación Meteorológica Portátil Arduino por $10 – Nano, DHT22, BMP180 y LCD
  9. Monitorización Meteorológica en Tiempo Real con Arduino y ThingSpeak IoT
  10. Estación Meteorológica WiFi con ESP8266 y Sensor DHT22 – Envío a ThingSpeak
  11. Pulsera inteligente con Arduino MKR GSM 1400 y Hologram IoT