Arduino UNO mini-weerstation
Componenten en benodigdheden
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
![]() |
| × | 2 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 |
Apps en online services
![]() |
| |||
![]() |
|
Over dit project

Dit is de eerste generatie van mijn op Arduino gebaseerde mini-weerstation met Wi-Fi-verbinding, die in staat is om gegevens openbaar online te posten met behulp van het ThingSpeak-platform.
Het weerstation verzamelt de volgende gegevens met betrekking tot het weer en de omgeving met behulp van verschillende sensoren:
- Temperatuur
- Vochtigheid
- Atmosferische druk
- Lichtintensiteit
- UV-index
- Stofconcentratie
Het doel is om met open hardware een klein en eenvoudig weerstation te maken.
Laten we beginnen en plezier hebben!
Elektronische componenten








U heeft geen specifiek gereedschap nodig voor de montage van dit project. Alle componenten zijn online te vinden in uw favoriete e-commerce winkel.
Het circuit wordt gevoed door de USB-poort (aangesloten op een computer of een gewone telefoonoplader), maar u kunt ook een externe gelijkstroomvoeding of een batterij toevoegen die is aangesloten op de Arduino-voedingsaansluiting.
Een case voor het circuit van het weerstation valt buiten de scope van dit project.
De onderdelen aansluiten


Sluit alle componenten aan volgens het schema. U hebt enkele jumperdraden nodig om elke sensor op het breadboard aan te sluiten. Je kunt een protoshield gebruiken (voor een compacter circuit), een gewoon breadboard of je eigen Arduino-schild ontwerpen.
Sluit de USB-kabel aan op het Arduino Uno-bord en ga verder met de volgende stap.
Code

Ervan uitgaande dat u de nieuwste Arduino IDE al hebt geïnstalleerd, downloadt en installeert u de volgende bibliotheken:
- DHT22-bibliotheek
- Adafruit BMP085-bibliotheek
Raadpleeg de volgende Arduino-handleiding voor instructies over het toevoegen van de bibliotheken aan Arduino IDE.
Arduino-code downloaden (weatherBox.ino
) opgenomen in de codesectie. Vervang XXXXX
door uw WiFi-router SSID, YYYYY
op routerwachtwoord, en ZZZZZ
door uw ThingSpeak-kanaal de API-sleutel te schrijven (zie hoe u deze kunt verkrijgen in de volgende stap).
Sluit het Arduino-bord aan op de USB-poort van uw computer en upload de code.
ThingSpeak-configuratie




- Maak een ThingSpeak-account
- Maak een nieuw kanaal
Geef de naam en beschrijving van uw weerstation op. Wijs de volgende kanalen toe en sla het kanaal op:
- kanaal 1 =licht
- kanaal 2 =vochtigheid
- kanaal 3 =temperatuur (vanaf DHT22)
- kanaal 4 =UV-index
- kanaal 5 =stofconcentratie
- kanaal 6 =druk
- kanaal 7 =temperatuur (vanaf BMP085)
API-schrijfsleutel kopiëren. Het wordt gebruikt in de vorige stap in Arduino-code. Wanneer het station is ingeschakeld, worden de sensorwaarden periodiek naar het kanaal geüpload. U kunt openbare en privé-visualisaties van elke variabele configureren.
Voorbeeld van een openbaar kanaal:https://thingspeak.com/channels/35540
Android-app gebruiken
U kunt de gegevens van het weerstation in elke browser visualiseren. Maar je kunt het ook bekijken op je Android-smartphone en het visualiseren wanneer je maar wilt.
- Download en installeer de ThingsView-app vanuit de Google Play Store op uw Android-apparaat
- Voer in de app je kanaal-ID in en klik op toevoegen. Je vindt de ID op je ThingSpeak-kanaalconfiguratie
- De huidige waarden van elke variabele worden weergegeven in een grafiek
Veel plezier!
Code
- weatherBox.ino
weatherBox.inoArduino
#include#include #include #include #include #include #define SSID "XXXXX " //vervang XXXXX door uw router SSID#define PASS "YYYYY" //vervang YYYYY door uw routerwachtwoord#define IP "184.106.153.149" // thingspeak.com IP#define DHT22_PIN 2String GET ="GET /update?key=ZZZZZ&field1="; // vervang ZZZZZ door uw ThingSpeak-kanaal schrijfsleutelSoftwareSerial monitor (10, 11); //Seriële communicatie naar ESP8266-module (RX, TX)dht DHT;Adafruit_BMP085_Unified bmp =Adafruit_BMP085_Unified(10085);//Variablesint luminancePin =A0;int uvPin =A1;int dustPin =8;unsigned lange duur;unsigned lange starttijd; sampletime_ms =30000;unsigned long delay_time =60000;unsigned long lowpulseoccupancy =0;float ratio =0;float concentratie =0;//setupvoid setup(){ //start seriële communicatie Serial.begin(9600); monitor.begin(9600); Serial.println("Initialiseren..."); // configureer Arduino-pinnen pinMode (dustPin, INPUT); // initialiseer druksensor Serial.println ("Detectie van BMP085-druksensor..."); if(!bmp.begin()) { Serial.println("BMP085-sensor is niet gedetecteerd. Controleer uw verbindingen of I2C ADDR!"); terwijl(1); } Serial.println("BMP085 gedetecteerd!"); //communicatie met wifi-module monitor.flush(); monitor.println("AT"); vertraging (2000); if(monitor.find("OK")){ Serial.println("Communicatie met ESP8266-module:OK"); } else { Serial.println ("ESP8266 module FOUT"); } // verbind wifi-router connectWiFi (); Serial.print("Sampling ("); Serial.print(sampletime_ms/1000); Serial.println("s)..."); // initialiseer de starttijd van de timer =millis ();} ongeldige lus () { // meten van de duur van de stofdeeltjes =pulseIn (dustPin, LOW); lowpulseoccupancy =lagepulseoccupancy + duur; //30 seconden cicle if ((millis() - starttime)>=sampletime_ms) { ratio =lowpulseoccupancy/(sampletime_ms*10.0); // percentage (de 0 a 100%) concentratie =1,1*pow(ratio,3)-3,8*pow(ratio,2)+520*ratio+0,62; // van datasheet lowpulseoccupancy =0; //lees andere sensoren char buffer [10]; // lichtsensor float luminantie =analogRead (luminancePin); // UV-sensor float uv =analogRead (uvPin); uv =uv * 0,0049; // converteer waarden naar volt uv =uv * 307; //omzetten naar mW/m² uv =uv/200; // bereken UV-index // temperatuur en vochtigheid int chk =DHT.read22 (DHT22_PIN); vlottervochtigheid =DHT.vochtigheid; vlottertemperatuur =DHT.temperatuur; //druk en temperatuur1 sensors_event_t gebeurtenis; bmp.getEvent(&event); vlotterdruk =0; vlottertemperatuur1 =0; if (gebeurtenis.druk) { druk =gebeurtenis.druk; bmp.getTemperature(&temperatuur1); } //converteer sensorwaarden naar strings String luminanceStr =dtostrf(luminance, 4, 1, buffer); luminanceStr.replace(" ",""); String uvStr =dtostrf(uv, 4, 1, buffer); uvStr.replace(" ",""); String vochtigheidStr =dtostrf(vochtigheid, 4, 1, buffer); vochtigheidStr.replace(" ",""); String temperatuurStr =dtostrf(temperatuur, 4, 1, buffer); temperatuurStr.replace(" ",""); String dustStr =dtostrf(concentratie, 4, 1, buffer); dustStr.replace(" ",""); String pressureStr =dtostrf(druk, 4, 1, buffer); pressureStr.replace(" ",""); String temperatuur1Str =dtostrf(temperatuur1, 4, 1, buffer); temperatuur1Str.replace(" ",""); // stuur gegevens naar ThingSpeak updateSensors (luminanceStr, vochtigheidStr, temperatureStr, uvStr, dustStr, pressureStr, temperature1Str); // wacht volgende bemonsteringscyclus Serial.print ("Wacht "); Serial.print(delay_time/1000); Serial.println("s voor volgende bemonstering"); Serieel.println(); vertraging (vertragingstijd); //initialiseer nieuwe cyclus Serial.println(); Serial.print("Sampling ("); Serial.print(sampletime_ms/1000); Serial.println("s)..."); starttijd =millis(); }}//Stuur gegevens naar ThingSpeakvoid updateSensors (String luminanceStr, String vochtigheidStr, String temperatuurStr, String uvStr, String dustStr, String drukStr, String temperatuur1Str) { String cmd ="AT+CIPSTART=\"TCP\",\""; cmd +=IP; cmd +="\",80"; monitor.println(cmd); vertraging (2000); cmd =GET; cmd +=luminantieStr; cmd +="&field2="; cmd +=vochtigheidStr; cmd +="&field3="; cmd +=temperatuurStr; cmd +="&field4="; cmd +=uvStr; cmd +="&field5="; cmd +=dustStr; cmd +="&field6="; cmd +=drukStr; cmd +="&field7="; cmd +=temperatuur1Str; cmd +="\r\n"; vertraging (1000); int strsize =cmd.length(); monitor.println("AT+CIPSEND=" + String(strsize)); vertraging (2000); monitor.print(cmd); if(monitor.find("OK")){ Serial.println("Verzending met succes voltooid"); }else{ Serial.println("Verzending mislukt!"); }}void sendDebug(String cmd){ Serial.print("SEND:"); Serieel.println(cmd); monitor.println(cmd);} boolean connectWiFi(){ Serial.println("Verbinden met wifi..."); String cmd ="AT+CWMODE=1"; monitor.println(cmd); vertraging (2000); monitor.flush(); //buffer wissen cmd="AT+CWJAP=\""; cmd+=SSID; cmd+="\",\""; cmd+=PASS; cmd+="\""; monitor.println(cmd); vertraging (5000); if(monitor.find("OK")){ Serial.println("Verbinding geslaagd!"); retourneer waar; }else{ Serial.println("Verbinding mislukt!"); onwaar retourneren; } Serieel.println();}
Github
https://github.com/adafruit/DHT-sensor-libraryhttps://github.com/adafruit/DHT-sensor-libraryGithub
https://github.com/adafruit/Adafruit-BMP085-Libraryhttps://github.com/adafruit/Adafruit-BMP085-LibraryProductieproces
- Raspberry Pi-weerstation
- Human Detection Robotics System met Arduino Uno
- CO2-monitoring met K30-sensor
- Hoe lang ben je?
- WebServerBlink met Arduino Uno WiFi
- Eenvoudige UNO-rekenmachine
- Arduino Cloud Sensor Tower
- Persistentie van visie
- Lokaal weerstation
- Bewaking van het gezondheidsstation
- Temperatuurbewaking op smartphone