Bouw een op batterijen gevoede MKR FOX 1200 weerstation
Onderdelen en benodigdheden
| Onderdeel | Aantal |
|---|---|
| Arduino MKR Fox 1200 | 1 |
| SparkFun Atmospheric Sensor Breakout - BME280 | 1 |
| TSL2561 digitale luminositeitssensor | 1 |
| HTU21D temperatuur- en vochtigheidssensor | 1 |
Apps en online diensten
- Arduino Web Editor
- ThingSpeak API
- Sigfox
Over dit project
Let op: Deze tutorial kan verouderd zijn. Raadpleeg deze link voor een actueelere versie.
Dit project laat zien hoe je een MKR FOX 1200 en een aantal I2C-sensoren omzet in een eenvoudig, op batterijen gevoed weerstation.
Gebruikte sensoren
- De onboard temperatuursensor (lage precisie, ± 1 °C)
- HTU21D I2C-sensor voor luchtvochtigheid
- Bosch BMP280 (BME280) voor luchtdruk en nauwkeurige temperatuur
- TSL2561 lichtsensor voor luminositeit
Hardware-aansluiting
De hardware-aansluitingen zijn eenvoudig: alle sensoren gebruiken I2C-interfaces en werken op 3,3V. Ze hebben vier draden van de MKR FOX 1200 nodig: GND, 3,3V, SDA op pin 11 en SCL op pin 12. Dezelfde vier verbindingen kunnen parallel gedeeld worden met de drie sensoren, omdat elk een uniek I2C-adres heeft. De bibliotheken en functies zorgen ervoor dat elke sensor correct geadresseerd wordt.
Het hele project kan gevoed worden door twee AA of AAA alkaline batterijen in serie (3V), aangesloten op de schroefklemmen op de printplaat.
Sigfox-berichten
Omdat het Sigfox-netwerk maximaal 140 berichten per dag toestaat, optimaliseren we de metingen en sturen we data in compact binair formaat. Een bericht mag maximaal 12 bytes groot zijn. Een float neemt 4 bytes in beslag, dus we packen de metingen in een kleinere representatie. We kiezen veilige limieten op basis van de locatie van het station en herstellen de oorspronkelijke waarden in de backend.
Configuratie van cloud-diensten
We gebruiken twee cloud-diensten:
- Sigfox backend
- ThingSpeak
Registreer je bord op de Sigfox-backend met de PAC en ID uit het FirstConfiguration-voorbeeld (kan overgeslagen worden als al gedaan). Beide diensten moeten geconfigureerd worden om met elkaar te communiceren en de data correct te interpreteren. Maak twee kanalen aan op ThingSpeak. Het eerste kanaal ontvangt de ruwe data (readChannelID), het tweede verzamelt de hergerekende data (writeChannelID).
Upload de sketch via de Arduino Create Editor. De standaard sketch laat je de infrastructuur testen voordat je het station in het veld plaatst. Zet oneshot = false zodra de backend correct werkt. De sketch wacht op de seriële poort, dus open deze pas nadat je de Sigfox-callback hebt geconfigureerd.
Sigfox-callback instellen
- Ga in de Sigfox-backend naar DEVICE TYPE → LIST → rechtermuisklik op je bord → Edit.
- Klik links op CALLBACKS en dan op New.
- Selecteer Custom callback.
- Configureer als volgt:
- TYPE:
DATA/UPLINK - Channel:
URL - HTTP method:
GET
- TYPE:
- Custom Payload:
status::uint:8 temp1::int:16:little-endian temp2::int:16:little-endian press::uint:16:little-endian hum::uint:16:little-endian light::uint:16:little-endian lastMsg::uint:8 - URL Pattern:
https://api.thingspeak.com/update?api_key=XXXXXXXXXXXX&field1={customData#temp1}&field2={customData#press}&field3={customData#temp2}&field4={customData#hum}&field5={customData#light}&field6={customData#status}&field7={customData#lastMsg} - Vervang
api_keydoor de Write API Key van ThingSpeak Channel 1. - Sla op. Open nu de seriële poort en observeer het eerste bericht.
Van ruwe data naar grafieken
De data komt nu in ruw formaat binnen op ThingSpeak. Gebruik het ThingSpeak Analysis-tool met het volgende script om de waarden om te rekenen:
% TODO - Vervang [] met readChannelID
readChannelID = [];
readAPIKey = 'JOUW_READ_API_KEY';
writeChannelID = [];
writeAPIKey = 'JOUW_WRITE_API_KEY';
data = thingSpeakRead(readChannelID, 'ReadKey', readAPIKey, 'OutputFormat', 'table');
analyzedData = data;
INT16_MAX = 32767;
UINT16_MAX = 65536;
analyzedData.('Temperature1') = data.('Temperature1') / INT16_MAX * 120;
analyzedData.('Temperature2') = data.('Temperature2') / INT16_MAX * 120;
analyzedData.('Pressure') = data.('Pressure') / UINT16_MAX * 200000;
analyzedData.('Light') = data.('Light') / UINT16_MAX * 100000;
analyzedData.('Humidity') = data.('Humidity') / UINT16_MAX * 110;
thingSpeakWrite(writeChannelID, analyzedData, 'WriteKey', writeAPIKey);
% Schedule: React → elke 10 minuten
Vervang de channel IDs door de jouwe. Plan de analyse in via React om elke 10 minuten uit te voeren. Daarna zijn de grafieken zichtbaar in ThingSpeak.
Code
De complete code (WeatherMonitor) is beschikbaar in de Arduino Web Editor of via de projectpagina.
Productieproces
- Een Raspberry Pi-weerstation bouwen dat dagelijkse weergegevens e-mailt
- Weerstation – DIY Raspberry Pi Weerstation met Dropbox-upload
- Bouw een indrukwekkend monitor Ambilight-systeem met Arduino
- K30 CO2-sensor: Real-time binnenluchtkwaliteitmonitoring met Arduino
- Real-time IoT hartslagmonitor met Arduino en MAX30100
- Compact Weerstation: Arduino Nano & ESP8266 Met BMP280 Barometrische Sensor & OLED/Nokia LCD Display
- Bouw een Digitale Lichaamslengtemeter: Je Lengte Meten met Arduino en Lasersensor
- Een DFRobot Capacitieve Vingerafdruksensor integreren met Arduino of ESP8266
- Bouw een Sensor Toren met Arduino Cloud: Temperatuur, Beweging & Gas Monitoring
- Precieze Luchtkwaliteit Monitor met Sharp GP2Y1010AU0F Sensor
- Arduino Nano Weerstation: Sensor Kit & OLED Display