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

MKR FOX 1200 Wettermonitor

Komponenten und Verbrauchsmaterialien

Arduino MKR Fox 1200
× 1
SparkFun Atmospheric Sensor Breakout - BME280
× 1
Digitaler Helligkeits-Lichtsensor TSL2561
× 1
HTU 1D
× 1

Apps und Onlinedienste

Arduino Web Editor
ThingSpeak API
Sigfox

Über dieses Projekt

Hinweis:Dieses Tutorial könnte veraltet sein, bitte gehen Sie hier für eine aktuellere Version.

Dieses Projekt zeigt, wie man einen MKR FOX 1200 dreht und eine Reihe von I2C-Sensoren in eine einfache, batteriebetriebene Wetterstation.

Wir verwenden:

  • der integrierte Temperatursensor (niedrige Genauigkeit, ± 1 °C)
  • HTU21D I2C-Sensor zum Abrufen der Luftfeuchtigkeit
  • Bosch BMP280, um den Luftdruck und die genaue Temperatur zu erhalten
  • TSL2561 Lichtsensor um Helligkeit zu erhalten

Hardware-Setup

Die Hardware-Anschlüsse für dieses Projekt sind recht einfach:Alle Sensoren verwenden I2C-Schnittstellen und laufen mit 3,3 V.

Sie benötigen vier Adern vom MKR FOX 1200:GND, 3.3V, SDA an Pin 11 und SCL an Pin 12. Dieselben vier Anschlüsse können parallel mit den drei Sensoren geteilt werden, da jeder von ihnen eine spezifische I2C-Adresse hat und somit die relevante Bibliotheken und Funktionen werden dafür sorgen, dass jede von ihnen unterschieden wird.

Das gesamte Projekt kann mit zwei AA- oder AAA-Alkalibatterien betrieben werden, die in Reihe geschaltet sind, um 3 V zu erzeugen und an die Schraubklemmenleiste auf der Platine angeschlossen sind.

Sigfox-Nachrichten

Da das Sigfox-Netzwerk maximal 140 Nachrichten pro Tag senden kann, optimieren wir die Messwerte und senden die Daten im kompakten Binärformat.

Das Packen von Daten ist wichtig, da die maximale Größe einer Nachricht, die Sie senden können, 12 Byte beträgt. Ein Float belegt 4 Byte, also müssen wir unsere Messwerte in eine kleinere Darstellung packen.

Das Float-Format ist sehr breit (Sie können Zahlen bis zu 3,402823e+38 (!) darstellen) und wir brauchen nicht den gesamten Datenraum; Wir können dann sichere Grenzen festlegen (basierend darauf, wo wir die Station einsetzen werden) und die ursprüngliche Darstellung im Backend wiederherstellen.

Konfiguration der Cloud-Dienste

Wir verwenden zwei Cloud-Dienste:

  • Sigfox-Back-End
  • Dinge sprechen

Registrieren Sie Ihr Board im Sigfox-Backend mit PAC und ID, die vom FirstConfiguration-Beispiel bereitgestellt werden (kann übersprungen werden, wenn Sie dies bereits für ein vorheriges Projekt getan haben).

Beide müssen so konfiguriert werden, dass sie miteinander kommunizieren und die Daten im richtigen Format interpretieren. Registriere dich bei beiden und erstelle ein paar Kanäle auf Thingspeak. Die Konfiguration wird im Bild unten angezeigt.

Der erste von uns konfigurierte Kanal ist derjenige, der die Rohdaten empfängt (readChannelID ), während der zweite die neu skalierten Daten sammelt (writeChannelID ).

Es ist an der Zeit, die Skizze mit dem Arduino Create Editor hochzuladen. Mit der Standardskizze können Sie die gesamte Infrastruktur ausführlich testen, bevor Sie sie im Feld bereitstellen.

Denken Sie daran, Folgendes zu erklären:

oneshot =false 

wenn Sie sicher sind, dass die gesamte Einrichtung der Back-End-Infrastruktur korrekt ist. Die Skizze wartet auf die serielle Schnittstelle, daher werden wir sie jetzt nicht starten. Öffnen Sie stattdessen das SigFox-Backend und konfigurieren Sie einen Rückruf:

Klicken Sie auf GERÄTETYP -> LISTE -> Rechtsklick auf dein Board und dann auf Bearbeiten

Klicken Sie auf RÜCKRUFE im linken Seitenmenü:

Sie werden ein Fenster wie dieses sehen:

Klicken Sie auf Neu Schaltfläche oben rechts im Fenster:

Wählen Sie Benutzerdefinierter Rückruf:

Die relevanten Konfigurationen sind unten aufgeführt. Stellen Sie sicher, dass der Rückruf wie folgt eingerichtet ist:

  • TYP:DATEN/UPLINK
  • Kanal:URL
  • Http-Methode:GET

Stellen Sie als benutzerdefinierte Nutzlast Folgendes ein:

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  

Dies stellt die Struktur dar, die wir in die Skizze gepackt haben. Wir weisen jedem Feld eine Variable zu, damit wir im HTTP-Callback darauf verweisen können.

Legen Sie als URL-Muster fest:

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}  

Nach der Konfiguration sollten Ihre Fenster wie folgt aussehen:

Denken Sie daran, den API-Schlüssel api_key zu ändern mit dem von Thingspeak bereitgestellten als Write API Key für Kanal1 .

Speichern und schließen. Wir können jetzt den seriellen Port öffnen und beobachten, wie die erste Nachricht gesendet wird. Hurra!

Von Raw zu Grafik

Das von uns konfigurierte Setup leitet unsere Daten an das Thingspeak-Backend weiter, sie liegen jedoch noch im Rohformat vor; Um sie wieder zu konvertieren, verwenden wir das Thingspeak-Analysetool mit diesem Snippet

% TODO - Ersetzen Sie [] durch die Kanal-ID, um Daten zu lesen:readChannelID =[]; % TODO - Geben Sie den Read API Key zwischen den '' unten ein:readAPIKey ='T6UK7XO6A4H2AGT7'; % TODO - Ersetzen Sie [] durch die Kanal-ID, um Daten zu schreiben:writeChannelID =[]; % TODO - Geben Sie den Write API Key zwischen den '' unten ein:writeAPIKey ='XU4TGY261P6B5USN'; %% Daten lesen %% Daten =thingSpeakRead(readChannelID, 'ReadKey', readAPIKey,'OutputFormat','table'); analysiertDaten =Daten; %% Daten analysieren %% INT16_t_MAX =32767; UINT16_t_MAX =65536; AnalyzedData.('Temperature1') =data.('Temperature1') / INT16_t_MAX * 120; AnalyzedData.('Temperature2') =data.('Temperature2') / INT16_t_MAX * 120; AnalyzedData.('Pressure') =data.('Pressure') / UINT16_t_MAX * 200000; AnalyzedData.('Light') =data.('Light') / UINT16_t_MAX * 100000; AnalyzedData.('Humidity') =data.('Humidity') / UINT16_t_MAX * 110; %% Daten schreiben %% thingSpeakWrite(writeChannelID, AnalyzedData, 'WriteKey', writeAPIKey); %% Aktion planen:Reagieren -> alle 10 Minuten 

Durch Ersetzen der Kanal-IDs Mit unseren eigenen können wir die Rohdaten endlich wieder in tatsächliche Werte umwandeln. Denken Sie daran, die Analyseaktion alle 10 Minuten mit Reagieren . zu planen oder es wird nie ausgeführt!

Endlich haben wir unsere wunderbaren Grafiken.

Code

Wettermonitor

Herstellungsprozess

  1. Raspberry Pi Wetterstation
  2. Wettermonitor
  3. Erstellen von Monitor-Ambilight mit Arduino
  4. CO2-Überwachung mit K30-Sensor
  5. Herzfrequenzmesser mit IoT
  6. Arduino + ESP Weather Box
  7. Wie groß bist du?
  8. Kapazitiver Fingerabdrucksensor mit einem Arduino oder ESP8266
  9. Arduino Cloud Sensor Tower
  10. DIY-Luftqualitätsmonitor mit Sharp GP2Y1010AU0F-Sensor