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

MyRiver

Komponenten und Verbrauchsmaterialien

Arduino MKR1000
× 1
Wasserstandssensor
× 1
Ph Sensor
× 1
LED (generisch)
Weiß wenn möglich
× 1
Widerstand 221 Ohm
× 2
Fotowiderstand
× 1
Jumper (generisch)
× 1

Notwendige Werkzeuge und Maschinen

Lötkolben (generisch)
Bügelsäge

Apps und Onlinedienste

Arduino Web Editor
Sigfox
Wia

Über dieses Projekt

Übersicht

Ein Fluss oder See kann eine großartige Quelle für Spaß und Entspannung sein. Aber wenn der Fluss schmutzig und kontaminiert wird, ist der ganze Spaß vorbei. Viele Menschen sind auf Flusswasser angewiesen, um ihr Vieh zu ernähren, und können es sich nicht leisten, ihren Tieren schmutziges Wasser zu geben.

Stellen Sie sich vor, Sie wohnen direkt an einem Fluss (wenn Sie es nicht sind), Sie möchten nicht mitten in der Nacht mit Ihrem vom Fluss überfluteten Haus aufwachen. Oder was, wenn Ihr Nachbar beschließt, etwas Benzin in den Fluss zu kippen, möchten Sie nicht, dass Ihre Tiere krank werden.

MyRiver löst all diese Probleme, es kann dank Sigfox in abgelegenen Gebieten betrieben werden, sodass jeder Zugriff auf das Gerät hat. Das Gerät liest den pH-Wert des Wassers, seinen Verschmutzungsgrad mit einer innovativen Methode und seinen Wasserstand. Dank Wia können Sie den Fluss überall live auf Ihrem Telefon oder Computer überwachen. Auf diese Weise wissen Sie, ob ein Problem mit dem Stream vorliegt und können handeln, bevor es zu spät ist. Es benachrichtigt Sie sofort, wenn es ein Problem mit dem Fluss gibt.

Video

Bild

Funktionalität

Das Gerät basiert auf dem Arduino MKR FOX, es ist für den Remote-Einsatz konzipiert, der Benutzer kann das Gerät in einem Fluss oder See platzieren und von überall aus überwachen. Dank des Energiesparmodus des SAM D kann das Gerät über einen längeren Zeitraum mit 2AA-Batterien betrieben werden.

Das Gerät misst alle 30 Minuten und geht danach schlafen, die Schlafzeit kann zurückgesetzt werden, obwohl die Mindestschlafzeit 20 Minuten betragen muss.

Der MKR FOX liest den pH-Wert des Flusses mit einem pH-Sensor, er ermittelt auch den Wasserstand mit einem Wasserstandssensor und erkennt, ob er durch unlösliche Substanzen verschmutzt ist, indem er eine LED auf einen Fotowiderstand aufleuchtet, wenn der Fotowiderstandswert ist niedrig bedeutet, dass im Fluss ein fester Stoff (Öl, Benzin, Quecksilber usw.) vorhanden ist. Anschließend sendet das Gerät alle Daten an Sigfox, wo sie an Wia weitergeleitet, verarbeitet und visualisiert werden. Der Benutzer wird über den Zustand des Flusses informiert. Unten ist ein Bild der Funktionsübersicht.

Der Puffer wird als HEX kodiert an Sigfox gesendet, Sigfox leitet die Daten an Wia weiter, die Daten durchlaufen dann einen Fluss, die Daten werden zurück in Strings und dann in Sensorwerte umgewandelt. Sie werden dann verarbeitet und der Benutzer wird benachrichtigt, wenn die Werte außerhalb der Grenzen liegen.

Unten ist ein weiteres Bild, das die Codeübersicht des Projekts veranschaulicht, die unten beschrieben wird.

  • Sensoren lesen liest die pH-, Wasserstands- und Fotowiderstandssensorwerte und speichert sie in Variablen.
  • Puffer formatieren wird alle Werte in einen 12 Byte großen Puffer zusammenführen, der an Sigfox gesendet werden kann.
  • Daten analysieren parst den Puffer zu Sigfox.

Der MKR FOX kann nur 12 Bytes über Sigfox senden, das bedeutet, dass alle Sensorwerte in die 12 Bytes zusammengeführt werden müssen, der maximale Rohwert jedes Sensors beträgt 1024 (da alle analog), jeder Sensor repräsentiert also ein Drittel der Puffer (4 Byte). Der Arduino muss die Werte zusammenführen und am Anfang jedes Wertes Nullen hinzufügen, bis der Wert 4 Byte hat. Das Bild unten veranschaulicht diesen Vorgang.

Der Arduino empfängt die Sensorwerte als Ganzzahlen, wandelt die Ganzzahlen dann in Strings um und fügt am Anfang jedes Wertes Nullen hinzu, bis er 4 Byte hat. Wenn der Fotowiderstandswert beispielsweise 620 beträgt, wird eine Null hinzugefügt, 0 620. Aber wenn der Wasserstandssensor gleich 24 ist, werden zwei Nullen hinzugefügt, 00 24. Das Gerät führt dann die Werte in einem 12-Byte-Puffer zusammen und sendet die Daten an SigFox.

Das Gerät in Aktion

Unten finden Sie eine Reihe von Fotos, die die Funktionalität des Projekts zeigen. Für eine bessere Ansicht sehen Sie sich das Video oben an.

Vorteile

Die Nutzer in Betrieb dieses Projekt wird Vorteil in:

  • Einfache Überwachung von Wasserstand, pH-Wert und Verschmutzungsgrad eines Flusses von überall und zu jeder Zeit
  • Erhalten einer Benachrichtigung, wenn der Fluss durch lösliche oder unlösliche Stoffe verschmutzt ist oder überflutet wird
  • Einfache Bedienung und Montage
  • Funktioniert in allen von Sigfox abgedeckten Ländern

Das Projekt erstellen

Schritt 1:Erforderliches Gerät

Dieses Projekt erfordert, dass alle Komponenten zusammengelötet werden, außer den Sensoren gibt es nicht allzu viele Dinge. Die Liste der Materialien ist unten aufgeführt.

  • 1, Arduino MKR FOX 1200
  • 1, pH-Sensor
  • 1, Wasserstandssensor
  • 1, Fotowiderstand
  • 1, weiße LED
  • 2, Widerstände (220Ω)
  • Überbrückungsdrähte

Schritt 2:Anschließen des Stromkreises

Der Schaltplan des Projekts kann etwas verwirrend sein, da die Komponenten nicht auf einem Steckbrett platziert sind. Wenn Sie Schwierigkeiten damit haben, versuchen Sie, die Fritzing-Datei unten herunterzuladen und die Drähte auf Ihrem Computer zu verschieben.

  • Schaltungsübersicht

Die folgenden Bilder veranschaulichen, wie die Schaltung nach Fertigstellung aussehen sollte.

  • Vorbereitung die MKR FUCHS

Die folgenden Bilder führen Sie durch das Anschließen der Batteriebox und der Antenne an den MKR FOX. Beachten Sie, dass die Batteriebox nach dem Anschließen der Sensoren angeschlossen werden muss. Weitere Verkabelung und Einrichtung finden Sie unter Projekt erstellen / Final.

Schritt 3:Den Code bestätigen

Der Code besteht aus 3 Hauptteilen:

  • Sensoren lesen
  • Puffer formatieren
  • Daten analysieren

Diese Abschnitte werden unten erklärt.

  • Sensoren lesen
struct GetValue // erstellte Strukturen, um Schleifen zu erleichtern{ int riverLevel() // Hole den Pegel des Flusses { const int val =analogRead(A2); if (proDebug) {Serial.print ("Flussebene"); Serial.println (val); } Rückgabewert; aufrechtzuerhalten. Int riverPh () // ph des Flusses abrufen { const int val =(analogRead (A1) / 5 * 3.3); if (proDebug) {Serial.print ("Fluss Ph"); Serial.println (val); } Rückgabewert; } Int riverPol () // Verschmutzungsgrad des Flusses abrufen { const int val =analogRead (A3); if (proDebug) {Serial.print ("Flussverschmutzung"); Serial.println (val); } Rückgabewert; }}; 

Die obige Struktur enthält Schleifen, die jeden Sensorwert lesen, es gibt eine separate Schleife für jeden Wert.

  • Puffer formatieren
String-Daten (int level, int ph, int pol) // Sensorwerte in Puffer zusammenführen {int values[3] ={level, ph, pol}; String newValues; for(int i =0; i <3; i++) // wird alle Werte durchlaufen und 0s am Anfang hinzufügen { if(values[i] <10) { newValues ​​+="000"; Serial.println ("Option 1"); aufrechtzuerhalten. Sonst if(values[i] <100) { newValues ​​+="00"; Serial.println("Option 2"); aufrechtzuerhalten. Sonst if(values[i] <1000) { newValues ​​+="0"; Serial.println ("Option 3"); } anders {}; neueWerte +=Werte[i]; Serial.print ("Ausführen"); Serial.print (i); Serial.print("/3"); Serial.println (neue Werte); } return newValues; }  

Die obige Schleife nimmt die 3 Sensorwerte auf und platziert sie dann in einem Array. Es durchläuft dann jeden Wert, fügt Nullen am Anfang jedes Wertes hinzu, bis der Wert 4 Byte groß ist, fügt dann jeden Wert zu einer Zeichenfolge hinzu, die dann zurückgegeben wird.

  • Daten analysieren
void parseData(String data) // Sende Puffer an SigFox { SigFox.beginPacket(); SigFox.print (Daten); int ret =SigFox.endPacket(); } 

Dieser Abschnitt nimmt den zu analysierenden String auf und sendet den Wert dann an Sigfox.

Schritt 4:Einrichten der Wia-Sigfox-Integration

Dieser Schritt zeigt, wie Sie Wia für den Empfang von Nachrichten von Sigfox einrichten. Wia ist eine professionelle IoT-Plattform, die es dem Benutzer ermöglicht, Daten mithilfe von Widgets im Web oder in der mobilen App zu visualisieren. Außerdem kann der Benutzer einen Blockcode namens . erstellen ein Fluss, der es dem Benutzer ermöglicht, die Daten zu verarbeiten. Daten werden durch ein Ereignis dargestellt.

Stellen Sie zunächst sicher, dass Sie über ein Sigfox-Konto und ein Wia-Konto verfügen. Laden Sie auch die Wia-App auf iOS oder Android herunter, damit Sie Benachrichtigungen erhalten. Die folgenden Bilder veranschaulichen die Verbindung von Sigfox und Wia.

  • Legen Sie den Typ fest zum Daten-Uplink
  • Setze den Kanal zu URL
  • Sie müssen die Benutzerdefinierte Nutzlastkonfiguration nicht ausfüllen
  • Legen Sie die URL fest Muster zu "https://api.wia.io/v1/events"
  • Setzen Sie die HTTP-Methode zum POSTEN
  • Erstelle einen Header namens Autorisierung mit dem Wert Bearer (dieser Wert wird später bearbeitet)
  • Setzen Sie ContentType zu application/json
  • Kopieren Sie den Code aus diesem Link in den Textkörper des Webhooks.
  • Klicken Sie zum Schluss auf OK und Sie sind fertig.

Schritt 5:Einrichten des Wia-Flows

Dieser Abschnitt dauert etwas länger, der Flow wandelt die von HEX empfangenen Daten in String um, analysiert dann den String in die 3 Sensorwerte und konvertiert sie dann in ganze Zahlen, dann konvertiert er den Wert der Flussverschmutzung und Flusspegel auf einen High- oder Ok-Deskriptor und den rohen pH-Wert auf den tatsächlichen pH-Wert, dann benachrichtigt es den Benutzer, wenn der Wert außerhalb der Grenzen liegt.

Die folgende Anleitung veranschaulicht diesen Vorgang Schritt für Schritt. Sie werden angewiesen, bestimmte Codeteile in Wia Functions einzufügen. Diese Codeteile werden unten eingefügt. Kopieren Sie einfach den Code und fügen Sie ihn in die Funktion ein. Die in die E-Mails aufzunehmenden Daten werden auch unten eingefügt, arbeiten Sie mit ihnen wie mit den Funktionen.

Wia-Funktionen

  • processPayload
if(input.body){ output.body.name ="Wert"; output.body.data =toByteArrayStr(input.body.data.sigfoxData);}Funktion toByteArrayStr(sigfoxData){ let result =Buffer(sigfoxData, 'hex'); return result.toString('utf8');} 
  • Prozessverschmutzung
if(input.body.data){ let data =input.body.data; if(data =="VERSCHMUTZT") { output.body.name ="waterLevel"; output.body.data =Daten; } sonst { while(1); }} 
  • ProzessPh
let minVal =6.5;let maxVal =8.5;if(input.body.data){ let data =input.body.data; if(data> maxVal || data  
  • Prozessebene
if(input.body.data){ let data =input.body.data; if(data =="HIGH") { output.body.name ="waterLevel"; output.body.data =Daten; } sonst { while(1); }} 
  • Flussverschmutzung
let minVal =200;let ​​maxVal =0;if(input.body.data.sigfoxData){ let data =input.body.data.sigfoxData; let verarbeitetDaten =toByteArrayStr(Daten); let newData =cutString(processedData); output.body.name ="waterPollution"; output.body.data =processData(newData);}function toByteArrayStr(sigfoxData){ let result =Buffer(sigfoxData, 'hex'); return result.toString('utf8');}Funktion cutString(data){ let newVal =data[8]; newVal +=Daten[9]; newVal +=data[10]; newVal +=Daten[11]; let finalVal =parseInt(newVal); return finalVal;}Funktion processData(data){ if(data  
  • FlussPh
let minVal =300;let ​​maxVal =600;if(input.body.data.sigfoxData){ let data =input.body.data.sigfoxData; let verarbeitetDaten =toByteArrayStr(Daten); let newData =cutString(processedData); let finalVal =(newData / 73.1428571); let valueToSend =finalVal.toFixed(2); output.body.name ="waterPh"; output.body.data =valueToSend;}Funktion toByteArrayStr(sigfoxData){ let result =Buffer(sigfoxData, 'hex'); return result.toString('utf8');}Funktion cutString(data){ let newVal =data[4]; newVal +=Daten[5]; newVal +=Daten[6]; newVal +=Daten[7]; let finalVal =parseInt(newVal); return newVal;} 
  • RiverLevel
let minVal =0;let ​​maxVal =200;if(input.body.data.sigfoxData){ let data =input.body.data.sigfoxData; let verarbeitetDaten =toByteArrayStr(Daten); let newData =cutString(processedData); output.body.name ="waterLevel"; output.body.data =processData(newData);}Funktion cutString(data){ let newVal =data[0]; newVal +=Daten[1]; newVal +=Daten[2]; newVal +=Daten[3]; let finalVal =parseInt(newVal); return finalVal;}Funktion toByteArrayStr(sigfoxData){ let result =Buffer(sigfoxData, 'hex'); return result.toString('utf8');}Funktion processData(data){ if(data> maxVal) { return "HIGH"; } else { return "OK"; }} 

Wia-E-Mails

  • FlussverschmutzungE-Mail
Automatisches Messaging-SystemDataWarning - myWater-Gerät ${trigger.source.device.id} hat ein Problem im Stream festgestellt.Warnung - Wasser wird durch unlösliche Substanzen verunreinigt.InformationDevice ${trigger.source.device.id}Raw Daten ${input.body.data} 
  • RiverPhEmail
Automatisches Messaging-SystemDataWarning - myWater-Gerät ${trigger.source.device.id} hat ein Problem im Stream festgestellt.Warnung - Wasser-Ph ist nicht angemessen. Wasser ist kontaminiert.InformationDevice ${trigger.source.device.id}Rohdaten ${input.body.data} 
  • RiverLevelEmail
Automatisches Messaging-SystemDataWarning - myWater-Gerät ${trigger.source.device.id} hat ein Problem im Bach festgestellt.Warnung - Wasserstand ist zu hoch, Fluss kann überflutet werden.InformationDevice ${trigger.source.device .id}Rohdaten ${input.body.data} 

Einrichten der Variablen

Wenn die Daten von Wia empfangen werden, müssen sie verarbeitet werden, wenn die Daten zwischen einem minimalen und maximalen Wert liegen, ist der Wert sicher, die Grenzen des pH- und Wasserstandssensors wurden eingestellt, aber der Benutzer muss den Fotowiderstand manuell einstellen Grenze, muss ein Test durchgeführt werden, um diesen Wert zu ermitteln, die folgenden Schritte zeigen Ihnen, wie dies zu tun ist.

void setup () { pinMode (1, OUTPUT); Serial.begin (9600); while(!Seriell) {}; digitalWrite (1, HIGH);} Void Schleife () { const int val =analogRead (A3); Serial.println (val); Verzögerung(5000);} 

Es gibt eine weitere Variable, die der Benutzer setzen muss, proDebug , wenn es aktiviert ist, erfordert das Arduino eine Verbindung über USB zu einem Computer und der Serial Monitor muss geöffnet sein. Der Arduino druckt in diesem Modus auf dem Serial Monitor, es ist ideal für die Fehlerbehebung. proDebug ist standardmäßig false zum Arbeiten auf dem Feld.

Bibliotheken

  • Sigfox - Copyright (c) 2016 Arduino LLC GNU Lesser General Public License Diese Bibliothek ist gemeinfrei
  • ArduinoLowPower (c) 2016 Arduino LLC GNU Lesser General Public License Diese Bibliothek ist gemeinfrei

Finale

Der letzte Schritt besteht darin, Ihr Arduino an einen PC / Mac anzuschließen und die Skizze hochzuladen. Stellen Sie sicher, dass die Batteriebox mit dem Arduino verbunden ist und die Schaltung in Ordnung ist. Die nächsten Schritte führen Sie durch die Erstellung eines Gehäuses für das Projekt.

Ich habe beschlossen, mein Gehäuse aus einer Wasserflasche zu bauen, ich denke, es ist eine großartige und ökologische Möglichkeit, das Projekt zu umarmen. Das Gerät sieht aus wie auf dem Bild unten.

Wenn Ihnen die Idee des Gehäuses gefällt, können Sie durch die folgenden Bilder scrollen, die veranschaulichen, wie das Gehäuse hergestellt wurde. Sie können gerne selbst eines erstellen.

The last thing to do is place the device in the river. To do this, go to the river you wish to implement MyRiver on during High Tide , this is essential to ensure that the device is not alerting that the river is flooding when it is actually just the tide.

Place some tape on the top of the water bottle to prevent water from seeping into the bottle and destroying everything.

We went to a local, dirty river to test the project out, all the alarms went off correctly.

When placing the probe in the water, ensure that the water is at the bottom of the water level sensor but is covering the photoresistor entirely. Secure the project to the shore using tape or a hammer and screws, and it should look like this (or better).

Background

Relaxing in your house, looking out the window at the once beautiful and delightful river rushing in front of you. But instead of the beautiful fresh river, you see a green slimy one, you might want to move house in that case.

And if the river decides to flood into your house in the middle of the night while you are sleeping, you will certainly decide to move.

I thought of these problems and how to solve them all in one device, and I came up with MyRiver.

If you are in the city and living beside a river, it will warn you in time if the river decides to ruin your day in any way or if your neighbour is dumping oil in the river. Or if you are on a farm, MyRiver will warn you that the river is dirty before you give the water to your animals, and will give you time to bring the animals in before the river floods.

But just reading the pH of the river was not enough, as insoluble substances like mercury or other metals do not effect the Ph of the water. So we came up with a new method to detect those substances, unique to this project, a photoresistor reading the amount of light from an LED penetrating the water. This way any water impurity can be detected.

Code

MyRiver
The Full Code

Schaltpläne

schematics_lXO5SiusZO.fzz

Herstellungsprozess

  1. Was ist ein O2-Sensor?
  2. Raspberry Pi-Temperatursensor
  3. Emotionssensor / EEG
  4. Druckluftstrom-Messgerät mit analogem Sensor
  5. DHT11-Sensor mit LEDs und einem Piezo-Lautsprecher
  6. UnifiedWater v1
  7. 3D RGB Arduclock
  8. Einfacher Hindernissensor mit Arduino
  9. Joystick-Spiel
  10. Finde mich