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

Arduino UNO Mini-Wetterstation

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
Espressif ESP8266 ESP-01
× 1
Arduino Proto Shield
oder ein gewöhnliches Steckbrett
× 1
DHT22-Temperatursensor
× 1
Seeed Grove - Lichtsensor
× 1
Seeed Grove - UV-Sensor
× 1
Seeed Grove - Barometersensor
× 1
Seeed Grove - Staubsensor
× 1
Widerstand 1k Ohm
× 2
Widerstand 10k Ohm
× 1
Widerstand 4,75 kOhm
× 1
Jumper (generisch)
× 1

Apps und Onlinedienste

Arduino-IDE
ThingSpeak API

Über dieses Projekt

Dies ist die erste Generation meiner Arduino-basierten Mini-Wetterstation mit Wi-Fi-Verbindung, die Daten über die ThingSpeak-Plattform öffentlich online veröffentlichen kann.

Die Wetterstation sammelt mit verschiedenen Sensoren die folgenden wetter- und umgebungsbezogenen Daten:

  • Temperatur
  • Luftfeuchtigkeit
  • Atmosphärischer Druck
  • Lichtintensität
  • UV-Index
  • Staubkonzentration

Das Ziel ist eine kleine und einfache Wetterstation mit offener Hardware zu bauen.

Lass uns loslegen und viel Spaß haben!

Elektronische Komponenten

Sie benötigen keine speziellen Werkzeuge für die Montage dieses Projekts. Alle Komponenten finden Sie online in Ihrem bevorzugten E-Commerce-Shop.

Die Schaltung wird über den USB-Port (verbunden mit einem Computer oder einem normalen Telefonladegerät) mit Strom versorgt, Sie können jedoch auch ein externes DC-Netzteil oder eine Batterie hinzufügen, die an die Arduino-Strombuchse angeschlossen ist.

Ein Fall für die Schaltung der Wetterstation ist nicht Gegenstand dieses Projekts.

Anschließen der Teile

Verbinden Sie alle Komponenten gemäß dem Schaltplan. Sie benötigen einige Überbrückungsdrähte, um jeden Sensor mit dem Steckbrett zu verbinden. Sie können ein Protoshield (für eine kompaktere Schaltung), ein gewöhnliches Steckbrett verwenden oder Ihr eigenes Arduino-Shield entwerfen.

Schließen Sie das USB-Kabel an das Arduino Uno-Board an und fahren Sie mit dem nächsten Schritt fort.

Code

Angenommen, Sie haben bereits die neueste Arduino IDE installiert, laden Sie die folgenden Bibliotheken herunter und installieren Sie sie:

  • DHT22-Bibliothek
  • Adafruit BMP085-Bibliothek

Anweisungen zum Hinzufügen der Bibliotheken zur Arduino-IDE finden Sie in der folgenden Arduino-Anleitung.

Arduino-Code herunterladen (weatherBox.ino ) im Codeabschnitt enthalten. XXXXX ersetzen durch die SSID Ihres WLAN-Routers, YYYYY nach Router-Passwort und ZZZZZ Schreiben Sie von Ihrem ThingSpeak-Kanal einen API-Schlüssel (siehe im nächsten Schritt, wie Sie ihn erhalten).

Verbinden Sie das Arduino-Board mit dem USB-Port Ihres Computers und laden Sie den Code hoch.

ThingSpeak-Konfiguration

  • Erstellen Sie ein ThingSpeak-Konto
  • Neuen Kanal erstellen

Geben Sie den Namen und die Beschreibung Ihrer Wetterstation an. Weisen Sie die folgenden Kanäle zu und speichern Sie den Kanal:

  • Kanal 1 =Licht
  • Kanal 2 =Feuchtigkeit
  • Kanal 3 =Temperatur (von DHT22)
  • Kanal 4 =UV-Index
  • Kanal 5 =Staubkonzentration
  • Kanal 6 =Druck
  • Kanal 7 =Temperatur (von BMP085)

API-Schreibschlüssel kopieren. Es wird im vorherigen Schritt im Arduino-Code verwendet. Wenn die Station eingeschaltet wird, werden die Sensorwerte regelmäßig auf den Kanal hochgeladen. Sie können öffentliche und private Visualisierungen jeder Variablen konfigurieren.

Beispiel für einen öffentlichen Kanal:https://thingspeak.com/channels/35540

Verwendung der Android-App

Sie können Wetterstationsdaten in jedem Browser visualisieren. Sie können es aber auch auf Ihrem Android-basierten Smartphone überprüfen und jederzeit visualisieren.

  • Laden Sie die ThingsView-App aus dem Google Play Store herunter und installieren Sie sie auf Ihrem Android-Gerät
  • Geben Sie in der App Ihre Kanal-ID ein und klicken Sie auf Hinzufügen. Sie finden die ID in Ihrer ThingSpeak-Kanalkonfiguration
  • Die aktuellen Werte jeder Variablen werden in einem Diagramm angezeigt

Viel Spaß!

Code

  • weatherBox.ino
weatherBox.inoArduino
#include #include #include #include #include #include #define SSID "XXXXX " // Ersetzen Sie XXXXX durch Ihre Router-SSID#define PASS "YYYYY" // Ersetzen Sie YYYYY durch Ihr Router-Passwort#define IP "184.106.153.149" // Thingspeak.com IP#define DHT22_PIN 2String GET ="GET /update?key=ZZZZZ&field1="; // Ersetzen Sie ZZZZZ durch Ihren ThingSpeak-Kanal schreiben Sie keySoftwareSerial monitor (10, 11); //Serielle Kommunikation zum ESP8266-Modul (RX, TX)dht DHT;Adafruit_BMP085_Unified bmp =Adafruit_BMP085_Unified(10085);//Variablesint luminancePin =A0;int uvPin =A1;int dustPin =8;unsigned lange Dauer;unsigned long .starttime;unsigned long .starttime; sampletime_ms =30000;unsigned long delay_time =60000;unsigned long lowpulseoccupancy =0;float ratio =0;float Konzentration =0;//setupvoid setup () {//Serielle Kommunikation starten Serial.begin (9600); monitor.begin(9600); Serial.println ( "Initialisierung ..."); // Arduino-Pins konfigurieren PinMode (dustPin, INPUT); // Drucksensor Serial.println initialisieren ("Erkennen des BMP085-Drucksensors ..."); if(!bmp.begin()) {Serial.println("BMP085 Sensor wurde nicht erkannt. Überprüfen Sie Ihre Verbindungen oder I2C ADDR!"); während(1); } Serial.println ("BMP085 erkannt!"); // Kommunikation mit Wifi-Modul monitor.flush (); monitor.println("AT"); Verzögerung (2000); if(monitor.find("OK")){Serial.println("Kommunikation mit ESP8266-Modul:OK"); aufrechtzuerhalten. Sonst {Serial.println ("ESP8266 Modul FEHLER"); } // WLAN-Router verbinden connectWiFi (); Serial.print("Sampling("); Serial.print(sampletime_ms/1000); Serial.println("s)..."); // Timer-Startzeit initialisieren =millis ();} Schleife löschen () { // Staubpartikeldauer messen =pulseIn (dustPin, LOW); niedrige Pulsbelegung =niedrige Pulsbelegung + Dauer; // 30 Sekunden Zyklus if ((millis() - starttime)>=sampletime_ms) { ratio =lowpulseoccupancy/(sampletime_ms*10.0); // prozentuale (de 0 a 100%) Konzentration =1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // aus dem Datenblatt Lowpulseoccupancy =0; // andere Sensoren Zeichenpuffer lesen [10]; // Lichtsensor Float Luminanz =analogRead (luminancePin); // UV-Sensor Float uv =analogRead (uvPin); uv =uv * 0,0049; // Werte in Volt umwandeln uv =uv * 307; // in mW/m² umrechnen uv =uv/200; // UV-Index berechnen // Temperatur und Luftfeuchtigkeit int chk =DHT.read22 (DHT22_PIN); Schwebefeuchtigkeit =DHT.Feuchtigkeit; Schwimmertemperatur =DHT.Temperatur; //Druck- und Temperatur1-Sensoren_event_t-Ereignis; bmp.getEvent(&event); Schwimmerdruck =0; Schwimmertemperatur1 =0; if (Ereignis.Druck) { Druck =Ereignis.Druck; bmp.getTemperature(&temperature1); } // Sensorwerte in Strings umwandeln String luminanceStr =dtostrf (Luminanz, 4, 1, Puffer); luminanceStr.replace(" ",""); String uvStr =dtostrf(uv, 4, 1, Puffer); uvStr.replace(" ",""); String FeuchteStr =dtostrf(Feuchtigkeit, 4, 1, Puffer); feuchtigkeitStr.replace(" ",""); String temperatureStr =dtostrf(temperature, 4, 1, Puffer); temperatureStr.replace(" ",""); String dustStr =dtostrf(Konzentration, 4, 1, Puffer); dustStr.replace(" ",""); String pressureStr =dtostrf(Druck, 4, 1, Puffer); pressureStr.replace(" ",""); String temperature1Str =dtostrf(temperature1, 4, 1, Puffer); temperature1Str.replace(" ",""); // Daten an ThingSpeak senden updateSensors (LuminanzStr, FeuchtigkeitStr, TemperaturStr, UVStr, StaubStr, DruckStr, Temperatur1Str); // nächsten Abtastzyklus warten Serial.print ( "Warten"); Serial.print (delay_time/1000); Serial.println ( "s für die nächste Probenahme"); Serial.println(); Verzögerung (Verzögerungszeit); // neuen Zyklus initialisieren Serial.println (); Serial.print("Sampling("); Serial.print(sampletime_ms/1000); Serial.println("s)..."); Startzeit =Millis(); }} // Daten an ThingSpeakvoid updateSensors senden (String luminanceStr, String feuchtStr, String temperatureStr, String uvStr, String dustStr, String pressureStr, String temperature1Str) { String cmd ="AT+CIPSTART=\"TCP\",\""; cmd +=IP; cmd +="\",80"; monitor.println(cmd); Verzögerung (2000); cmd =GET; cmd +=LuminanzStr; cmd +="&field2="; cmd +=FeuchteStr; cmd +="&field3="; cmd +=TemperaturStr; cmd +="&field4="; cmd +=uvStr; cmd +="&field5="; cmd +=StaubStr; cmd +="&field6="; cmd +=DruckStr; cmd +="&field7="; cmd +=Temperatur1Str; cmd +="\r\n"; Verzögerung (1000); int strsize =cmd.length(); monitor.println("AT+CIPSEND=" + String(strsize)); Verzögerung (2000); monitor.print (cmd); if(monitor.find("OK")){Serial.println("Übertragung erfolgreich abgeschlossen"); } sonst { Serial.println ( "Übertragung fehlgeschlagen!"); }}void sendDebug (String cmd) {Serial.print ("SEND:"); Serial.println (cmd); monitor.println (cmd);} boolean connectWiFi () { Serial.println ( "Wi-Fi verbinden ..."); Zeichenfolge cmd ="AT+CWMODE=1"; monitor.println(cmd); Verzögerung (2000); monitor.flush(); // Puffer löschen cmd="AT+CWJAP=\""; cmd+=SSID; cmd+="\",\""; cmd+=PASS; cmd+="\""; monitor.println(cmd); Verzögerung (5000); if(monitor.find("OK")){Serial.println("Verbindung erfolgreich!"); true zurückgeben; } sonst { Serial.println ( "Verbindung fehlgeschlagen!"); falsch zurückgeben; } Serial.println();}
Github
https://github.com/adafruit/DHT-sensor-libraryhttps://github.com/adafruit/DHT-sensor-library
Github
https://github.com/adafruit/Adafruit-BMP085-Bibliothekhttps://github.com/adafruit/Adafruit-BMP085-Bibliothek

Herstellungsprozess

  1. Raspberry Pi Wetterstation
  2. Robotersystem zur Erkennung von Menschen mit Arduino Uno
  3. CO2-Überwachung mit K30-Sensor
  4. Wie groß bist du?
  5. WebServerBlink mit Arduino Uno WiFi
  6. Einfacher UNO-Rechner
  7. Arduino Cloud Sensor Tower
  8. Beharrlichkeit der Vision
  9. Lokale Wetterstation
  10. Überwachungsstation