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

UnifiedWater v1

Komponenten und Verbrauchsmaterialien

Arduino MKR GSM 1400
× 1
Adafruit NeoPixel Ring:WS2812 5050 RGB LED
× 1
GY21 Temperatur und Luftfeuchtigkeit
× 1
Trübungssensor, Fototransistorausgang
× 1
Adafruit Waterproof DS18B20 Digitaler Temperatursensor
× 1
DFRobot Gravity:Analoger pH-Sensor/Messgerät-Kit mit Speerspitze
× 1
SparkFun Drucktastenschalter 12 mm
× 1
Jumper (generisch)
× 1
Widerstand 220 Ohm
× 1

Notwendige Werkzeuge und Maschinen

Lötkolben (generisch)

Apps und Onlinedienste

Arduino Web Editor
SORACOM Air IoT-Konnektivitätsplattform
SORACOM Harvest
SORACOM Lagoon

Ü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 in sensors.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-v1

Schaltpläne

schematics_e7TRP6KJKI.fzz

Herstellungsprozess

  1. Was ist ein O2-Sensor?
  2. Bewegungssensor mit Raspberry Pi
  3. Raspberry Pi Bodenfeuchtigkeitssensor
  4. DS18B20-Sensor testen
  5. Raspberry Pi-Temperatursensor
  6. Sensortelemetrie 2.0.1
  7. Emotionssensor / EEG
  8. Windows 10 IoT Core auf Raspberry Pi 2 – Adafruit-Sensordaten
  9. MyRiver
  10. Arduino Cloud Sensor Tower