Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Smarte Wetterstation mit Arduino UNO und AWS-Integration bauen

Komponenten und Zubehör

Komponente Beschreibung Anzahl
Arduino UNO Mikrocontroller 1
USB-A auf Micro-USB Kabel Programmierung/Strom 1
Steckbrett (generic) Aufbau 1
Jumper-Kabel (generic) Verbindungen 1
Plexiglas 4 mm Gehäuse 1
Widerstand 221 Ohm Für LCD-Hintergrundbeleuchtung 1
Adafruit Standard LCD - 16x2 Weiß auf Blau Anzeige 1
Maxim DS1307 RTC (I²C) Echtzeituhr 1
Fotowiderstand (LDR) Lichtmessung 1
DHT11 Temp. & Feuchtigkeitssensor (4 Pins) Umgebungssensor 1
Temperatursensor (LM35) Präzise Temperaturmessung 1
IR-Empfänger (generic) Für Fernbedienung 1
Wasserstandssensor Flüssigkeitspegel 1
Sunfounder Starter RFID Kit Zusatzkomponente 1

Notwendige Werkzeuge und Maschinen

Über dieses Projekt

AWS (Arduino Weather Station) liefert präzise Rund-um-die-Uhr-Umweltdaten. Basiert auf Arduino-Mikrocontroller und unterstützt einen vollständigen Sensorsatz für Umgebungsanalyse.

Ziel

Ziel der Steuereinheit ist die Erfassung von Sensordaten und Anzeige über ein LCD-Display. Die kompakte Bauweise ermöglicht den Einbau in ein kleines, per Lasercutter gefertigtes Gehäuse.

Verwendete Sensoren

Bilder der Sensoren sind im Originalprojekt enthalten.

Wasser- und Schneepegel-Sensor

Zeigt Wasserstand in Überkopftanks an, verhindert Überlauf und ermöglicht jederzeitige Standabfrage.

DHT11 Feuchtigkeits- und Temperatursensor

Kalibrierter digitaler Sensor mit hoher Zuverlässigkeit, Langzeitstabilität, schneller Reaktion, Störfestigkeit und niedrigem Kosten.

Fotowiderstand (LDR)

Lichtabhängiger Widerstand zur Erkennung von Lichtpräsenz/-abwesenheit oder Lichtintensitätsmessung. Hoher Widerstand im Dunkeln, starker Abfall bei Lichteinfall.

LCD I2C 1602 Display

Serieller Bus mit nur zwei bidirektionalen Leitungen (SDA, SCL). Blauer Potentiometer zur Hintergrundbeleuchtungsjustierung. Typische Spannungen +5V oder +3.3V.

DS1302 Echtzeituhr-Modul

Basiert auf DS1302-Chip mit Echtzeituhr/Kalender und 31 Bytes statischem RAM. Zeitformat hh/mm/ss, Datumsformat yyyy/mm/dd.

LM35 Temperatursensor

Präzisionssensor. ADC wandelt analog in digital um: ADC-Wert = Sample * 1024 / Referenzspannung (+5V). Bei +5V Referenz: Digitalwert = Eingangsspannung * 205.

Infrarot-Empfänger und Fernbedienung

Arbeiten zusammen: IR-Empfänger empfängt Daten von Fernbedienung. Tastenbelegung:

Bilder der Bildschirminhalte sind im Originalprojekt enthalten.

Die AWS (Arduino Weather Station)

Schritt 1: Gehäusebau

Nach Projektgröße Plexiglasbox konstruiert. Flächen mit Verriegelungen und Sensorauslässen in AutoCAD entworfen, per Lasercutter geschnitten, mit starkem Kleber montiert.

Schritt 2: Schaltplan und Hardware-Verbindungen

Schaltplan mit Fritzing erstellt. Verbindungen sind einfach.

Schritt 3: Arduino-Programmierung

Code in Arduino IDE mit allen nötigen Bibliotheken programmiert.

Schritt 4: Funktionsweise

AWS erfasst Umweltdaten und macht sie per Infrarot-Fernbedienung auf LCD abrufbar. 5 verschiedene Bildschirme:

  1. Startbildschirm: „Arduino Weather Station“ mit Fade-Effekt. Erscheint beim Einschalten und nach jeder Datenabfrage.
  2. Datum/Uhrzeit (Taste 0): 10 Sek. Anzeige, dann Rückkehr zum Startbildschirm.
  3. Feuchtigkeit/Temperatur (Taste 1): Daten von DHT11 und LM35. 10 Sek. Anzeige.
  4. Dunkelheit (Taste 2): LDR-Daten als Dunkelheitsprozentsatz. 10 Sek. Anzeige.
  5. Flüssigkeitspegel (Taste 3): Pegelhöhe in mm. 10 Sek. Anzeige.

Alle vier Datenscreens nacheinander per „Cycle“-Taste im 4-Sekunden-Intervall (ein Durchlauf).

Vorsichtsmaßnahmen

Code

//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, mmwaterValue = 0;
int sensorPin = A3;
int luce = 0, pluce = 0;
float tem = 0;
long lmVal = 0;
const int irReceiverPin = 3;
IRrecv irrecv(irReceiverPin);
decode_results results;
uint8_t RST_PIN = 5, SDA_PIN = 6, SCL_PIN = 7;
char buf[50], 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() {
  // Startbildschirm "Arduino Weather Station" buchstabenweise anzeigen
  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) { // Taste 0: Zeit
      lcd.clear(); print_time(); delay(10000); lcd.clear(); delay(200); irrecv.resume();
    }
    if (results.value == 0xFF30CF) { // Taste 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) { // Taste 2: Dunkelheit
      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) { // Taste 3: Flüssigkeitspegel
      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) { // Cycle-Taste
      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();
    }
  }
}

Fazit

Wetterstation mit Arduino, die Datum/Zeit und Umweltdaten erfasst und per Infrarot-Fernbedienung auf LCD anzeigt.

Zusatzdateien

Herstellungsprozess

  1. Fortgeschrittene Wetterstation v2.0: Echtzeit Temperatur, Druck, Feuchte & Höhe Monitoring
  2. TinyML Spracherkennung mit Edge Impulse auf Arduino Nano 33 BLE Sense
  3. Echtzeit-Gyroskop-Spiel mit Arduino Nano & MPU-6050
  4. Arduino-gesteuerte 6-Shot-Getränkemischstation – Bauen Sie Ihren eigenen Cocktail-Automaten
  5. Arduino Digitaler Würfel: LCD-Würfel mit Zufallszahlen (1–6)
  6. Find Me: Smarter Gegenstands-Finder mit Arduino und Bluetooth
  7. Audio-reaktive Schreibtischlampe mit Arduino Nano bauen
  8. Hochleistungs-Datenlogger für Arduino-Wetterballons
  9. Tragbare Arduino-Wetterstation für 10$ bauen (Nano, DHT22, BMP180 & LCD)
  10. NeoPixel-Matrix Pong auf Arduino Nano: Neon-Pong selbst bauen