Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Arduino UNO mini-weerstation

Componenten en benodigdheden

Arduino UNO
× 1
Espressief ESP8266 ESP-01
× 1
Arduino Proto Shield
of een gewoon breadboard
× 1
DHT22-temperatuursensor
× 1
Seeed Grove - Lichtsensor
× 1
Seeed Grove - UV-sensor
× 1
Seeed Grove - Barometersensor
× 1
Seeed Grove - Stofsensor
× 1
Weerstand 1k ohm
× 2
Weerstand 10k ohm
× 1
Weerstand 4.75k ohm
× 1
Jumperdraden (algemeen)
× 1

Apps en online services

Arduino IDE
ThingSpeak-API

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-library
Github
https://github.com/adafruit/Adafruit-BMP085-Libraryhttps://github.com/adafruit/Adafruit-BMP085-Library

Productieproces

  1. Raspberry Pi-weerstation
  2. Human Detection Robotics System met Arduino Uno
  3. CO2-monitoring met K30-sensor
  4. Hoe lang ben je?
  5. WebServerBlink met Arduino Uno WiFi
  6. Eenvoudige UNO-rekenmachine
  7. Arduino Cloud Sensor Tower
  8. Persistentie van visie
  9. Lokaal weerstation
  10. Bewaking van het gezondheidsstation
  11. Temperatuurbewaking op smartphone