Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

UnifiedWater v1

Componenten en benodigdheden

Arduino MKR GSM 1400
× 1
Adafruit NeoPixel Ring:WS2812 5050 RGB LED
× 1
GY21 Temperatuur en vochtigheid
× 1
troebelheidssensor, fototransistoruitgang
× 1
Adafruit Waterproof DS18B20 Digitale temperatuursensor
× 1
DFRobot Gravity:analoge speerpunt pH-sensor / meterkit
× 1
SparkFun Drukknopschakelaar 12 mm
× 1
Jumperdraden (algemeen)
× 1
Weerstand 220 ohm
× 1

Benodigde gereedschappen en machines

Soldeerbout (algemeen)

Apps en online services

Arduino Web Editor
SORACOM Air IoT-connectiviteitsplatform
SORACOM Oogst
SORACOM Lagoon

Over dit project

Overzicht

Rivieren. Essentieel voor onze overleving, handel enzovoort. De afgelopen tien jaar zijn er grote inspanningen geleverd om onze vervuiling van de wateren van de wereld te verminderen. De rivieren zijn de bron van de vervuiling, omdat mensen niet naar de zee gaan om hun afval te dumpen. Ze dumpen het in de rivieren.

Deze rivieren monden vervolgens uit in de zee, de oceaan en zo baant de tandenborstel die ooit in een rivier werd gegooid zijn weg over de wereld en landt aan de andere kant ervan.

In een wereld die vervuiling probeert te bestrijden, zijn gegevens cruciaal. Het moet voor bedrijven en bedrijven gemakkelijk zijn om samen te werken aan een wereldwijd project om de watervervuiling te verminderen. Dit is waar UnifiedWater om de hoek komt kijken.

Een apparaat dat goedkoop genoeg en schaalbaar is en dat gemakkelijk deze gegevens kan verzamelen en analyseren, zo noodzakelijk om te weten hoe vervuild een rivier is. WaterAid wordt geleverd in 2 modi, een die geschikt is voor bedrijven en een andere voor individuen.

Meerdere apparaten kunnen samen functioneren, geplaatst op verschillende punten over een beek of in verschillende watermassa's. Deze apparaten verzamelen gegevens met een interval van tijd en sturen deze naar dezelfde database. Hierdoor kan het bedrijf de status van de rivier of het meer dat wordt bewaakt met een klik op de knop controleren.

Er is ook een draagbare versie van het apparaat beschikbaar. In deze versie kan het individu het apparaat bij zich dragen en wanneer hij een watermonster wil nemen, drukt hij op een knop op het apparaat en plaatst het 30 seconden in water. De gegevens zijn dan beschikbaar op een online dashboard.

Door watertemperatuur, pH en vochtigheid te verzamelen, evenals atmosferische temperatuur en vochtigheid, zit WaterAid vol met alle sensoren die je nodig hebt om de vervuiling van de rivier te monitoren.

Video

Afbeeldingen

Functionaliteit

WaterAid stelt de gebruiker, een bedrijf of een individu in staat om veilig en nauwkeurig gegevens te verzamelen en al deze gegevens op één plek te visualiseren dankzij de cloud van Soracom. Het project bestaat uit een front-end en een backend.

Voor Einde

De voorkant van het project is het fysieke apparaat dat wordt gebruikt om de gegevens te verzamelen en naar de cloud te sturen. Het apparaat kan in modus 1 of 2 worden gezet. In modus 1 registreert het apparaat met een druk op de knop een set gegevens, handig voor incidentele monitoring van een waterlichaam. Modus 2 stelt het apparaat in om met een bepaald tijdsinterval metingen te doen en deze gegevens naar de cloud te pushen.

Voor de front-end wordt een MKR-gsm gebruikt, omdat deze gebruiksvriendelijk en betrouwbaar is. Het heeft ook toegang tot Soracom via GSM. Hieronder staan ​​de stappen die het apparaat neemt bij het verzamelen van gegevens.

Batterij

Het apparaat kan op meerdere manieren van stroom worden voorzien. Het kan worden gevoed door een LiPo-batterij via de meegeleverde poort op het apparaat, door een powerbank of door een batterij aan te sluiten via de VIN-poort op het apparaat.

De levensduur van het apparaat is sterk afhankelijk van de kracht van de batterij. Het apparaat gaat tussen het lezen in de slaapstand om zoveel mogelijk energie te besparen.

LED Bel

Het apparaat is ook uitgerust met een LED-ring. Dit geeft de gebruiker feedback over wat het apparaat op dit moment doet. Er zijn 3 standen waarin de ring zich kan bevinden.

  • Veelkleurig geeft aan dat het apparaat bezig is met het instellen of verwerken van gegevens
  • Knipperend rood een waarschuwing, wat meestal betekent dat het apparaat in het water moet worden geplaatst, hoewel dit ook op een fout kan duiden
  • Blauw of groen vordert geeft aan dat het apparaat momenteel een monster neemt en in water moet worden geplaatst.

Een monster nemen

De sensoren van het apparaat moeten allemaal in het water worden geplaatst wanneer het apparaat een monster neemt. Er wordt een vertraging van 6 seconden geplaatst voordat het monster wordt genomen om de sensoren op te warmen. Voor de beste resultaten moeten de sensoren worden ondergedompeld tijdens het opwarmen.

Gegevens ontleden

De gegevens moeten naar Soracom worden verzonden in de vorm van een JSON-string. Dit geeft alle gebruikte sleutels een waarde. De gegevens zijn dan gemakkelijk te interpreteren door de backend. Hieronder ziet u een voorbeeld van een lading die zou worden verzonden.

{ 
"Latitude":53.3474617,
"Longitude":-6.2514529,
"waterpH":7.30,
"waterTurbidity":94,
"waterTemp":12.10,
"atmoTemp":14.50,
"atmoHum":82,
"deviceID":1,
"deviceName":"device1",
"epoch":1559392636,
"mode":2
}

De Back-end

De backend van het project verwijst naar Soracom. Data wordt verzameld en gevisualiseerd in de backend op dashboards. Deze dashboards zijn gemaakt met Soracom Lagoon.

Het dashboard

Het dashboard vat alle gegevens samen die van het apparaat zijn verzameld. Het geeft de plaatsen weer waar de gegevens zijn verzameld op een kaart, de kleur varieert afhankelijk van hoe vervuild het water is. De gegevens worden vervolgens weergegeven in lijngrafieken daaronder en worden vervolgens volledig samengevat in een tabel.

De gebruiker krijgt ook waarschuwingen via e-mail als de waarde van de pH of troebelheid van het water abnormaal is. Hieronder staan ​​enkele screenshots van het dashboard.

Schaalbaarheid

Het apparaat kan eenvoudig schaalbaar zijn en alle gegevens kunnen op hetzelfde dashboard worden verzameld en geïllustreerd. Meerdere apparaten kunnen gegevens naar de Soracom streamen en de gegevens op het dashboard laten visualiseren.

De prijs van het apparaat en het extreme gemak om het te bouwen en te programmeren, maakt het gemakkelijk om een ​​hele reeks apparaten te gebruiken. Deze apparaten kunnen ook eenvoudig bij Soracom worden geregistreerd met tools zoals Soracom Krypton.

Elke onderneming of individu heeft zijn gepersonaliseerde dashboard waar de gegevens die door hun apparaten worden verzameld, worden gevisualiseerd. Hopelijk kunnen mensen in de nabije toekomst samenwerken op hetzelfde dashboard en hun gegevens met elkaar delen.

Voordelen

De persoon of het bedrijf dat dit product gebruikt, profiteert van:

  • Lagere bedrijfskosten omdat het apparaat zeer zelfvoorzienend is.
  • Gemakkelijk schaalbaar, het apparaat kan gemakkelijk solo of in een vloot van tientallen anderen werken.
  • Snelle gegevensverzameling waardoor de gegevens naar de cloud kunnen worden gepusht en in realtime kunnen worden gevisualiseerd.
  • Eenvoudige visualisatie, gegevens kunnen overal en op elk moment worden gevisualiseerd met behulp van het online dashboard.

Het project bouwen

Stap 1:Vereiste apparatuur

Dit project vereist veel sensoren die veel parameters met betrekking tot het water en de atmosfeer zullen bewaken. Hieronder vindt u een lijst met alle benodigde materialen.

  • 1, Arduino MKR GSM
  • 1, 16 LED's RGB LED-ring
  • 1, GY-21 temperatuur- en vochtigheidsmodule
  • 1, troebelheidssensor
  • 1, waterdichte temperatuursensor
  • 1, pH-sensor en module
  • 1, drukknop
  • 1, Weerstand (220Ω)
  • Jumperdraden

Stap 2:het circuit aansluiten

De componenten moeten aan elkaar worden gesoldeerd. Om het begrip van de schema's te vergemakkelijken, is een breadboard gebruikt. de schema's staan ​​hieronder.

De MKR GSM voorbereiden

Nadat de sensoren op het apparaat zijn gesoldeerd, moeten de simkaart, GSM-antenne en batterij op het apparaat worden bevestigd. Ik voed het bord met 2 AA-batterijen via de VIN-poort. De stappen staan ​​hieronder.

Stap 3:De code erkennen

Er zijn 4 hoofdsecties in de code van het project.

  • Sensorgegevens verzamelen
  • Tijd en datum ophalen
  • Gegevens verwerken
  • Gegevens verzenden

Al deze secties worden hieronder beschreven en gedetailleerd.

Sensorgegevens verzamelen

Serial.println("Staal nemen");
Serial.println("________________________________________");
Serial.println("Staal nemen");
Serial.println ("OK - Opwarmen");
vertraging(6000); // vertraging voor sensorkalibratie
colourLED(50);
Serial.println(" OK - Monster nemen");
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();
}
// gaat meerdere watermonsters nemen - sensoren niet zo nauwkeurig
waterTurbidity +=getWaterTurbidity();
waterPh +=getWaterPh();
if (i> 14)
{
// neem een ​​enkel monster voor zeer nauwkeurige sensoren
waterTemperature =getWaterTemp();
atmoTemperature =getAtmoTemp ();
atmoHumidity =getAtmoHumidity();
}
Serial.print(".");
delay(500);
}
Serieel .println("");
Serial.println(" Succes - Genomen monsters");
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);

Het gedeelte van de code hierboven begint door 6 seconden te wachten totdat de sensoren in het water zijn gekalibreerd. Het apparaat maakt vervolgens een lus van 16 keer, waarbij elke lus een nieuwe LED op de ring gaat branden.

Gegevens van sensoren met fluctuerende waarden worden 16 keer verzameld en vervolgens wordt het gemiddelde gevonden. De uiterst nauwkeurige sensoren worden in de laatste lus uitgelezen.

Tijd en datum ophalen

void getCredentials()
{
Serial.println(" [1/2] Time");
Serial.println(" OK - Tijd krijgen van RTC");
currentEpoch =processTime();
colourLED(50);
Serial.println(" [2/2] Geolocatie");
Serial.println(" OK - ophalen Geolocatie van GPRS");
while (!getLocation());
Serial.print(" Succes - Geolocatie is "); Serial.print (breedtegraad, 7); Serieel.print(", "); Serial.println(lengtegraad, 7);
colourLED(50);
}

bool getLocation()
{
if (location.available( ))
{
latitude =location.latitude();
longitude =location.longitude();
delay(500);
return true;
}
else
{
delay(500);
return false;
}
}

De eerste lus verwerkt de referenties. De tijd wordt geëxtraheerd uit de RTC aan boord zoals deze tijdens de installatie met het GSM-netwerk werd gesynchroniseerd. De geolocatie wordt geëxtraheerd uit GPRS.

Gegevens verwerken

void processData()
{
Serial.println(" OK - Gemiddelde van water pH en troebelheid verkrijgen");
waterPh =(waterPh / 16);
waterTurbidity =(waterTurbidity / 16);
Serial.println(" OK - Gegevens dumpen naar serieel");
Serial.println("");
Serial.print(" [ Water] pH "); Serial.println(waterPh);
Serial.print(" [Water] Troebelheid "); Serial.println(waterTurbidity);
Serial.print(" [Water] Temperatuur "); Serial.println(waterTemperatuur);
Serial.print(" [Atmo] Temperatuur "); Serial.println(atmoTemperature);
Serial.print(" [Atmo] Vochtigheid "); Serial.println(atmoHumidity);
Serial.println("");
Serial.println("Succes - Gegevens verwerkt");
colourLED(50);
}

String makeLine()
{
Serial.println("OK - String maken");
String dataReturned; dataReturned +="{"; dataReturned +=" \n";
dataReturned +="\"Latitude\":" + String(latitude, 7); dataReturned +=", \n";
dataReturned +="\"Lengtegraad\":" + String(lengtegraad, 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 (apparaatnaam); dataReturned +=String ("\""); dataReturned +=", \n";
dataReturned +="\"epoch\":" + String(currentEpoch); dataReturned +=", \n";
dataReturned +="\"mode\":" + String(mode); dataReturned +=" \n";
dataReturned +="}";
Serial.println("OK - Gegevens zijn hieronder");
Serial.println("");
Serial.println(dataReturned);
Serial.println("");
Serial.println("Succes - String is gereed");
colourLED(50);
gegevens retournerenReturned;
}

processData() haalt het gemiddelde van de gegevens die zijn verzameld van de sensoren die de neiging hadden te fluctueren en dumpt vervolgens alle gegevens naar de seriële monitor.

makeLine() compileert alle gegevens in de JSON-string die naar Soracom wordt verzonden. Alle waarden worden geparseerd in een JSON-buffer die klaar is om naar de backend te worden verzonden.

Gegevens verzenden

void parseData(String dataToSend)
{
Serial.println("OK - Verbinding instellen");
if(client.connect(url, 80))
{
Serial.println(" OK - Verbinding tot stand gebracht, gegevens parseren");
client.println("POST / HTTP/1.1");
client.println("Host :harvest.soracom.io");
client.println("User-Agent:Arduino/1.0");
client.println("Verbinding:sluiten");
client.print ("Content-Length:");
client.println(dataToSend.length());
client.println("");
client.println(dataToSend);
Serial.println("OK - Gegevens geparseerd");
}
Serial.println("OK - Reactie krijgen");
Serial.println("");
while(1)
{
if(client.available())
{
char c =client.read();
Serial.print(c);
}
if(!client.connected())
{
break;
}
}
Serial.println(" Succes - Gegevens zijn geparseerd");
}

Ten slotte worden de gegevens naar Soracom gestuurd. Het apparaat heeft een verbinding met de server tot stand gebracht en bereidt vervolgens de inloggegevens voor. De gegevens worden vervolgens naar de server verzonden en het antwoord wordt afgedrukt naar de seriële monitor.

Het apparaat gaat dan in slaapstand totdat een trigger het wakker maakt en de stappen opnieuw herhaalt.

Stap 4:De variabelen instellen

Er zijn bepaalde variabelen die moeten worden bewerkt voordat het project kan worden gebruikt. Deze staan ​​hieronder vermeld. Instructies om ze in te stellen staan ​​ook hieronder.

  • modus de modus van het apparaat bepaalt of het periodiek monsters neemt of dat het met een druk op de knop monsters neemt. Als deze variabele is ingesteld op 1, moet het apparaat worden bediend via een knop. Als de modus is ingesteld op 2, zal het apparaat periodiek monsters nemen.
  • deviceID en deviceName dit zijn aangepaste variabelen die worden gebruikt om het apparaat te identificeren als er meerdere apparaten worden gebruikt. Elk gebruikt apparaat moet een unieke ID en naam krijgen, zodat ze gemakkelijk kunnen worden geïdentificeerd.
  • sleepTime slaat de hoeveelheid tijd op die het apparaat slaapt tussen het lezen, het is ingesteld op 5 seconden in de code die geschikt is voor testen, maar moet worden gewijzigd wanneer het in het veld wordt gebruikt. Er kan een monster worden genomen met tussenpozen van 15 minuten.
  • proDebug wordt gebruikt bij het debuggen, is het ingesteld op false in de code, maar als de seriële monitor nodig is bij het debuggen, moet het worden ingesteld op true. Houd er rekening mee dat het apparaat nog steeds naar het serienummer afdrukt, zelfs als de foutopsporing is uitgeschakeld. Als de foutopsporing is ingeschakeld, werkt het apparaat niet tenzij de seriële monitor is ingeschakeld.

Stap 5:de code uploaden

Voordat de backend wordt ingesteld, moeten er gegevens naar worden verzonden.

Sluit hiervoor uw MKR GSM aan op uw computer en upload de code naar het apparaat, zorg ervoor dat de modus van het apparaat voor deze configuratie op 1 staat. Nadat de code is geüpload, plaatst u alle sensoren in het water.

Druk nu op de knop op het apparaat en wacht tot de gegevens zijn verzameld en verzonden. Herhaal dit een paar keer om Soracom Air te vullen.

Stap 6:Soracom instellen

Deze stap is opgesplitst in 2 secties, de eerste omvat het maken van een account bij Soracom en het registreren van uw simkaart, terwijl de andere het opzetten van Soracom Harvest omvat om de gegevens van Air te verzamelen. Als je al een account bij Soracom hebt, sla dan het eerste gedeelte over.

Sectie 1:Een account aanmaken

Sectie 2:Groepen en oogsten

Stap 7:Lagoon opzetten

Het laatste dat u op Soracom moet instellen, is Lagoon, dit is de tool die we zullen gebruiken om onze gegevens te visualiseren en e-mailwaarschuwingen te creëren als de gegevens niet goed zijn. Volg de onderstaande stappen.

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

Schema's

schematics_e7TRP6KJKI.fzz

Productieproces

  1. Wat is een O2-sensor?
  2. Bewegingssensor met Raspberry Pi
  3. Raspberry Pi Bodemvochtsensor
  4. Test DS18B20-sensor
  5. Raspberry Pi-temperatuursensor
  6. Sensortelemetrie 2.0.1
  7. Emotiesensor / EEG
  8. Windows 10 IoT Core op Raspberry Pi 2 – Adafruit-sensorgegevens
  9. MyRiver
  10. Arduino Cloud Sensor Tower
  11. Moderne jukebox