UnifiedWater v1
Komponenten und Verbrauchsmaterialien
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Notwendige Werkzeuge und Maschinen
|
Apps und Onlinedienste
| ||||
| ||||
| ||||
|
Über dieses Projekt
Übersicht
Flüsse. Wesentlich für unser Überleben, Handel und so weiter. In den letzten zehn Jahren wurden große Anstrengungen unternommen, um unsere Verschmutzung der Weltgewässer zu reduzieren. Die Flüsse sind die Quelle der Verschmutzung, da die Menschen nicht ins Meer gehen, um ihren Müll zu entsorgen. Sie werfen es in die Flüsse.
Diese Flüsse ergießen sich dann ins Meer, ins Meer und so wandert die Zahnbürste, die einst in einen Fluss geworfen wurde, um die Welt und landet auf der anderen Seite.
In einer Welt, die versucht, die Umweltverschmutzung zu bekämpfen, sind Daten von entscheidender Bedeutung. Es sollte für Unternehmen und Unternehmen einfach sein, an einem globalen Projekt zur Reduzierung der Wasserverschmutzung zusammenzuarbeiten. Hier kommt UnifiedWater ins Spiel.
Ein Gerät, das billig genug und skalierbar ist, das diese Daten leicht sammeln und analysieren kann, die so notwendig sind, um zu wissen, wie verschmutzt ein Fluss ist. WaterAid gibt es in zwei Modi, einer für Unternehmen und einer für Einzelpersonen.
Mehrere Geräte können zusammen funktionieren, an verschiedenen Stellen in einem Bach oder in verschiedenen Gewässern platziert werden. Diese Geräte sammeln Daten in bestimmten Zeitintervallen und senden sie an dieselbe Datenbank. Auf diese Weise kann das Unternehmen mit einem Klick den Status des überwachten Flusses oder Sees überprüfen.
Eine tragbare Version des Geräts ist ebenfalls erhältlich. In dieser Version kann die Person das Gerät bei sich tragen und wenn sie eine Wasserprobe entnehmen möchte, drückt sie auf einen Knopf am Gerät und legt es für 30 Sekunden in Wasser. Die Daten stehen dann in einem Online-Dashboard zur Verfügung.
Durch die Erfassung der Wassertemperatur, des pH-Werts und der Luftfeuchtigkeit sowie der atmosphärischen Temperatur und Luftfeuchtigkeit ist WaterAid mit allen Sensoren ausgestattet, die Sie benötigen, um die Verschmutzung des Flusses zu überwachen.
Video
Bilder
Funktionalität
WaterAid ermöglicht es dem Benutzer, einem Unternehmen oder einer Einzelperson, Daten sicher und genau zu sammeln und all diese Daten dank der Cloud von Soracom an einem Ort zu visualisieren. Das Projekt besteht aus einem Frontend und einem Backend.
Vorne Ende
Das Frontend des Projekts ist das physische Gerät, mit dem die Daten gesammelt und an die Cloud gesendet werden. Das Gerät kann auf Modus 1 oder 2 eingestellt werden. Im Modus 1 zeichnet das Gerät auf Knopfdruck einen Datensatz auf, der für die gelegentliche Überwachung eines Gewässers nützlich ist. Modus 2 stellt das Gerät so ein, dass es in einem definierten Zeitintervall Messwerte aufnimmt und diese Daten in die Cloud überträgt.
Als Frontend kommt ein MKR GSM zum Einsatz, da es einfach zu bedienen und zuverlässig ist. Es kann auch über GSM auf Soracom zugreifen. Im Folgenden sind die Schritte aufgeführt, die das Gerät beim Erfassen von Daten durchführt.
Batterie
Das Gerät kann auf mehrere Arten mit Strom versorgt werden. Es kann mit einem LiPo-Akku über den bereitgestellten Anschluss am Gerät, mit einer Powerbank oder durch Anschließen eines Akkus über den VIN-Anschluss am Gerät betrieben werden.
Die Lebensdauer des Geräts hängt stark von der Leistung des Akkus ab. Das Gerät wechselt zwischen den Lesevorgängen in den Ruhemodus, um so viel Energie wie möglich zu sparen.
LED Klingeln
Das Gerät ist außerdem mit einem LED-Ring ausgestattet. Dadurch erhält der Benutzer eine Rückmeldung darüber, was das Gerät gerade tut. Es gibt 3 Modi, in denen sich der Ring befinden kann.
- Mehrfarbig zeigt an, dass das Gerät einrichtet oder Daten verarbeitet
- Rot blinkend eine Warnung, die normalerweise bedeutet, dass das Gerät ins Wasser gelegt werden muss, obwohl dies auch auf einen Fehler hinweisen kann
- Fortschreitendes Blau oder Grün zeigt an, dass das Gerät gerade eine Probe entnimmt und in Wasser gelegt werden sollte.
Probe nehmen
Die Sensoren des Geräts sollten sich alle im Wasser befinden, wenn das Gerät eine Probe nimmt. Bevor die Probe entnommen wird, wird eine Verzögerung von 6 Sekunden gesetzt, um die Sensoren aufzuwärmen. Für beste Ergebnisse sollten die Sensoren während des Aufwärmens untergetaucht werden.
Daten analysieren
Die Daten müssen in Form eines JSON-Strings an Soracom gesendet werden. Dadurch erhalten alle verwendeten Schlüssel einen Wert. Die Daten sind dann vom Backend leicht zu interpretieren. Unten ist ein Beispiel für eine Nutzlast, die gesendet würde.
{
"Latitude":53.3474617,
"Longitude":-6.2514529,
"waterpH":7.30,
"waterTurbidity":94,
"waterTemp":12.10,
"atmoTemp":14.50,
"atmoHum":82,
"deviceID":1,
"deviceName":"device1",
"Epoche":1559392636,
"Modus":2
}
Die Back-End
Das Backend des Projekts bezieht sich auf Soracom. Daten werden im Backend auf Dashboards gesammelt und visualisiert. Diese Dashboards werden mit Soracom Lagoon erstellt.
Das Dashboard
Das Dashboard fasst alle vom Gerät gesammelten Daten zusammen. Es stellt die Orte, an denen die Daten gesammelt wurden, auf einer Karte dar. Die Farbe variiert je nach Verschmutzung des Wassers. Die Daten werden dann in Liniendiagrammen darunter grafisch dargestellt und dann vollständig in einer Tabelle zusammengefasst.
Der Benutzer wird auch per E-Mail benachrichtigt, wenn der pH-Wert oder die Trübung des Wassers abnormal sind. Unten sind einige Screenshots des Dashboards.
Skalierbarkeit
Das Gerät lässt sich leicht skalieren und alle Daten können auf demselben Dashboard gesammelt und dargestellt werden. Mehrere Geräte können Daten zum Soracom streamen und die Daten auf dem Dashboard visualisieren lassen.
Der Preis des Geräts und die extreme Einfachheit des Aufbaus und der Programmierung machen die Verwendung einer ganzen Geräteflotte einfach. Diese Geräte können auch einfach mit Tools wie Soracom Krypton bei Soracom registriert werden.
Jedes Unternehmen oder jede Einzelperson hat ein personalisiertes Dashboard, in dem die von ihren Geräten gesammelten Daten visualisiert werden. Hoffentlich können die Leute in naher Zukunft auf demselben Dashboard zusammenarbeiten und ihre Daten miteinander teilen.
Vorteile
Die Person oder das Unternehmen, die dieses Produkt verwenden, profitiert von:
- Reduzierte Betriebskosten, da das Gerät sehr autark ist.
- Das Gerät ist leicht skalierbar und kann problemlos alleine oder in einer Flotte von Dutzenden anderen verwendet werden.
- Schnelle Datenerfassung, die es ermöglicht, die Daten in die Cloud zu übertragen und in Echtzeit zu visualisieren.
- Einfache Visualisierung, Daten können überall und jederzeit über das Online-Dashboard visualisiert werden.
Das Projekt erstellen
Schritt 1:Erforderliches Gerät
Dieses Projekt erfordert viele Sensoren, die viele Parameter in Bezug auf das Wasser und die Atmosphäre überwachen. Nachfolgend finden Sie eine Liste aller benötigten Materialien.
- 1, Arduino MKR GSM
- 1, 16 LEDs RGB-LED-Ring
- 1, GY-21 Temperatur- und Feuchtigkeitsmodul
- 1, Trübungssensor
- 1, wasserdichter Temperatursensor
- 1, pH-Sensor und Modul
- 1, Drucktaste
- 1, Widerstand (220Ω)
- Überbrückungsdrähte
Schritt 2:Anschließen des Stromkreises
Die Komponenten sollten zusammengelötet werden. Um das Verständnis der Schaltpläne zu erleichtern, wurde ein Steckbrett verwendet. die Schaltpläne sind unten.
Vorbereitung des MKR GSM
Nachdem die Sensoren mit dem Gerät verlötet wurden, müssen SIM-Karte, GSM-Antenne und Akku am Gerät befestigt werden. Ich versorge das Board mit 2 AA-Batterien über den VIN-Anschluss. Die Schritte sind unten.
Schritt 3:Den Code bestätigen
Der Code des Projekts besteht aus 4 Hauptabschnitten.
- Sensordaten sammeln
- Uhrzeit und Datum abrufen
- Prozessdaten
- Daten senden
Alle diese Abschnitte werden im Folgenden beschrieben und detailliert beschrieben.
Sensordaten sammeln
Serial.println("Beispiel nehmen");
Serial.println("_________________________________________");
Serial.println("Beispiel nehmen");
Serial.println (" OK - Aufwärmen");
delay(6000); // Verzögerung für Sensorkalibrierung
colourLED(50);
Serial.println(" OK - Probenahme");
Serial.print(" ");
for (int .) i =0; i <16; i++)
{
if (mode ==1)
{
strip.setPixelColor(i, strip.Color(0, 255, 0 ));
strip.show();
}
else
{
strip.setPixelColor(i, strip.Color(0, 0, 255));
strip.show();
}
// werde mehrere Wasserproben nehmen - Sensoren nicht so genau
waterTurbidity +=getWaterTurbidity();
waterPh +=getWaterPh();
if (i> 14)
{
// Nehmen Sie eine einzelne Probe für hochpräzise Sensoren
waterTemperature =getWaterTemp();
atmoTemperature =getAtmoTemp ();
atmoHumidity =getAtmoHumidity();
}
Serial.print(".");
delay(500);
}
Serial .println("");
Serial.println(" Success - Samples Taken");
for (int i =0; i <=16; i++)
{
strip.setPixelColor(i, strip.Color(0, 0, 0));
strip.show();
delay(30);
}
Serial.println("_________________________");
Serial.println("");
delay(500);
Der obige Codeabschnitt beginnt damit, dass Sie 6 Sekunden warten, bis sich die Sensoren im Wasser kalibrieren. Das Gerät durchläuft dann 16 Mal eine Schleife, wobei bei jeder Schleife eine neue LED den Ring einschaltet.
Daten von Sensoren mit schwankenden Werten werden 16-mal gesammelt und dann der Mittelwert gebildet. Die hochpräzisen Sensoren werden in der letzten Schleife gelesen.
Uhrzeit und Datum abrufen
void getCredentials()
{
Serial.println(" [1/2] Time");
Serial.println(" OK - Abrufen der Zeit von RTC");
currentEpoch =processTime();
colourLED(50);
Serial.println(" [2/2] Geolocation");
Serial.println(" OK - Getting Geolokalisierung von GPRS");
while (!getLocation());
Serial.print("Erfolg - Geolocation is"); Serial.print (Breite, 7); Serial.print (", "); Serial.println(Länge, 7);
colourLED(50);
}
bool getLocation()
{
if (location.available( ))
{
latitude =location.latitude();
longitude =location.longitude();
delay(500);
true zurückgeben;
}
else
{
delay(500);
return false;
}
}
Die erste Schleife verarbeitet die Anmeldeinformationen. Die Uhrzeit wird aus der Onboard-RTC extrahiert, da sie beim Setup mit dem GSM-Netz synchronisiert wurde. Die Geolokalisierung wird aus GPRS extrahiert.
Prozessdaten
void processData()
{
Serial.println(" OK - Mittelwert von Wasser-pH und Trübung ermitteln");
waterPh =(waterPh / 16);
waterTurbidity =(waterTurbidity / 16);
Serial.println(" OK - Dumping Data to Serial");
Serial.println("");
Serial.print(" [ Wasser] pH"); Serial.println(waterPh);
Serial.print("[Wasser] Trübung"); Serial.println (Wassertrübung);
Serial.print(" [Wasser] Temperatur"); Serial.println (Wassertemperatur);
Serial.print(" [Atmo] Temperatur"); Serial.println(atmoTemperature);
Serial.print("[Atmo]Feuchtigkeit"); Serial.println(atmoHumidity);
Serial.println("");
Serial.println("Erfolg - Daten verarbeitet");
colourLED(50);
}
String makeLine()
{
Serial.println(" OK - String erstellen");
String dataReturned; dataReturned +="{"; dataReturned +=" \n";
dataReturned +="\"Latitude\":" + String(latitude, 7); dataReturned +=", \n";
dataReturned +="\"Länge\":" + String(Längengrad, 7); dataReturned +=", \n";
dataReturned +="\"waterpH\":" + String(waterPh); dataReturned +=", \n";
dataReturned +="\"waterTurbidity\":" + String(waterTurbidity); dataReturned +=", \n";
dataReturned +="\"waterTemp\":" + String(waterTemperature); dataReturned +=", \n";
dataReturned +="\"atmoTemp\":" + String(atmoTemperature); dataReturned +=", \n";
dataReturned +="\"atmoHum\":" + String(atmoHumidity); dataReturned +=", \n";
dataReturned +="\"deviceID\":" + String(deviceID); dataReturned +=", \n";
dataReturned +="\"deviceName\":"; dataReturned +=String("\""); dataReturned +=String(Gerätename); dataReturned +=String("\""); dataReturned +=", \n";
dataReturned +="\"epoch\":" + String(currentEpoch); dataReturned +=", \n";
dataReturned +="\"mode\":" + String(mode); dataReturned +=" \n";
dataReturned +="}";
Serial.println(" OK - Daten sind unten");
Serial.println("");
Serial.println(dataReturned);
Serial.println("");
Serial.println("Erfolg - String ist bereit");
colourLED(50);
dataReturned zurückgeben;
}
processData()
Ruft den Mittelwert der von den Sensoren gesammelten Daten ab, die zu Schwankungen neigten, und übergibt dann alle Daten an den Serial Monitor.
makeLine()
kompiliert alle Daten in den JSON-String, der an Soracom gesendet wird. Alle Werte werden in einen JSON-Puffer geparst, der bereit ist, an das Backend gesendet zu werden.
Daten senden
void parseData(String dataToSend)
{
Serial.println(" OK - Verbindung einrichten");
if(client.connect(url, 80))
{
Serial.println(" OK - Verbindung hergestellt, Daten parsen");
client.println("POST / HTTP/1.1");
client.println("Host :Harvest.soracom.io");
client.println("User-Agent:Arduino/1.0");
client.println("Connection:close");
client.print ("Inhaltslänge:");
client.println(dataToSend.length());
client.println("");
client.println(dataToSend);
Serial.println("OK - Daten analysiert");
}
Serial.println("OK - Antwort erhalten");
Serial.println("");
while(1)
{
if(client.available())
{
char c =client.read();
Serial.print(c);
}
if(!client.connected())
{
break;
}
}
Serial.println(" Success - Daten werden geparst");
}
Schließlich werden die Daten an Soracom gesendet. Das Gerät stellt eine Verbindung mit dem Server her und bereitet dann die Zugangsdaten vor. Die Daten werden dann an den Server gesendet und die Antwort wird auf dem Serial Monitor gedruckt.
Das Gerät geht dann in den Ruhezustand, bis es durch einen Auslöser geweckt wird und die Schritte erneut wiederholt werden.
Schritt 4:Einrichten der Variablen
Es gibt bestimmte Variablen, die bearbeitet werden müssen, bevor das Projekt verwendet werden kann. Diese sind unten aufgeführt. Anweisungen zum Einrichten finden Sie ebenfalls unten.
Modus
Der Modus des Geräts bestimmt, ob es periodisch Proben nimmt oder ob es Proben auf Knopfdruck nimmt. Wenn diese Variable auf 1 gesetzt ist, muss das Gerät über eine Schaltfläche bedient werden. Wenn der Modus auf 2 eingestellt ist, nimmt das Gerät regelmäßig Proben.Geräte-ID und Gerätename
Dies sind benutzerdefinierte Variablen, die verwendet werden, um das Gerät zu identifizieren, wenn eine Geräteflotte verwendet wird. Jedes verwendete Gerät sollte eine eindeutige ID und einen eindeutigen Namen erhalten, damit es leicht identifiziert werden kann.sleepTime
speichert die Zeit, die das Gerät zwischen den Lesevorgängen schläft, sie wird im Code auf 5 Sekunden gesetzt, was zum Testen geeignet ist, aber bei der Verwendung im Feld geändert werden muss. Eine Probe könnte in Abständen von 15 Minuten genommen werden.proDebug
beim Debuggen verwendet wird, wird es im Code auf false gesetzt, aber wenn der serielle Monitor beim Debuggen benötigt wird, sollte er auf true gesetzt werden. Beachten Sie, dass das Gerät auch dann auf die Seriennummer druckt, wenn das Debug deaktiviert ist. Wenn die Fehlersuche aktiviert ist, wird das Gerät nicht ausgeführt, es sei denn, der serielle Monitor ist eingeschaltet.
Schritt 5:Hochladen des Codes
Vor dem Einrichten des Backends müssen Daten an dieses gesendet werden.
Verbinden Sie dazu Ihr MKR GSM mit Ihrem Computer und laden Sie den Code auf das Gerät hoch, stellen Sie sicher, dass der Modus des Geräts für diese Einrichtung auf 1 eingestellt ist. Nachdem der Code hochgeladen wurde, legen Sie alle Sensoren in Wasser.
Drücken Sie nun die Taste am Gerät und warten Sie, bis die Daten gesammelt und gesendet wurden. Wiederholen Sie dies ein paar Mal, um Soracom Air zu befüllen.
Schritt 6:Soracom einrichten
Dieser Schritt ist in 2 Abschnitte unterteilt. Der erste umfasst die Erstellung eines Kontos bei Soracom und die Registrierung Ihrer SIM-Karte, während der andere die Einrichtung von Soracom Harvest zum Sammeln der Daten von Air behandelt. Wenn Sie bereits ein Konto bei Soracom haben, überspringen Sie den ersten Abschnitt.
Abschnitt 1:Erstellen eines Kontos
Abschnitt 2:Gruppen und Ernte
Schritt 7:Lagune einrichten
Das letzte, was Sie auf Soracom einrichten müssen, ist Lagoon. Dies ist das Tool, mit dem wir unsere Daten visualisieren und E-Mail-Benachrichtigungen erstellen, wenn die Daten nicht gut sind. Folgen Sie den Schritten unten.
Calibration Problems
The turbidity and pH sensors have to be calibrated to be used precisely, you might find that when running the code, the turbidity might by 105% or the pH of water 3. In this case, the sensors have to be calibrated. A quick guide into calibrating them is below.
- pH Sensor The pH sensor can be calibrated using the potentiometers on the module, place the probe in still bottled water of pH 7 and wait for 5 minutes, now develop a code that prints the pH from the sensor to the serial monitor. Twist the potentiometer until the pH is 7.
- Turbidity Sensor The turbidity sensor is not very precise and so a relative percentage, compared to pure water is taken. To refine the value of pure water, if your readings exceed 100% turbidity, you will need to place the turbidity sensor in pure water and develop a code that prints the voltage on the analog pin of the pH sensor to the serial monitor. A variable named
calibration
is found insensors.h
, change the value of that variable to the voltage received when the probe was placed in pure water.
Libraries
- ArduinoLowPower (c) 2016 Arduino LLC GNU Lesser General Public Licence this library is in the public domain
- Adafruit_Neopixel (c) Phil Burges Lesser General Public Licence this library is in the public domain
- MKRGSM (c) 2016 Arduino AG GNU Lesser General Public Licence this library is in the public domain
- Wire (c) 2006 Nicholas Zambetti GNU Lesser General Public Licence this library is in the public domain
- OneWire (c) 2007 Jim Studt GNU General Public Licence this library is in the public domain
- DallasTemperature GNU General Public Licence this library is in the public domain
- RTCZero (c) 2015 Arduino LLC GNU Lesser General Public Licence this library is in the public domain
Final
Finally, I got an enclosure done for the project that could be easily portable but be fixed to collect samples both in mode 1 and 2. Steps are below.
Finally, ensure that the mode is set accordingly and start using the device on the field. Check out your local river or lake and see how clean it is. Play around with the dashboard and see what other widgets it has.
Background
Today, data is the new currency and collecting it easily and efficiently is key to a better environment. By measuring the pollution of rivers and lakes collectively, we can raise awareness that the waters are getting dirtier and something has to be done.
I was thinking of an idea for the Soracom contest and I felt like I had to make something beneficial for the environment, the idea of people and companies working together on collective dashboards to visualise the status of rivers and lakes globally inspired me to take this project on.
What will you do to stop water pollution? Because action has to be taken today, and tomorrow is a day too late.
Code
Code
The repo for the projecthttps://github.com/Andrei-Florian/UnifiedWater-v1Schaltpläne
schematics_e7TRP6KJKI.fzzHerstellungsprozess