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

MyRiver

Componenten en benodigdheden

Arduino MKR1000
× 1
Waterniveausensor
× 1
Ph-sensor
× 1
LED (generiek)
Wit indien mogelijk
× 1
Weerstand 221 ohm
× 2
Fotoweerstand
× 1
Jumperdraden (algemeen)
× 1

Benodigde gereedschappen en machines

Soldeerbout (algemeen)
Hacksaw

Apps en online services

Arduino Web Editor
Sigfox
Wia

Over dit project

Overzicht

Een rivier of meer kan een grote bron van plezier en ontspanning zijn. Maar als de rivier vies en vervuild wordt, is al het plezier weg. Veel mensen zijn afhankelijk van rivierwater om hun vee te voeden en kunnen het zich niet veroorloven hun dieren vuil water te geven.

Stel je voor dat je vlak naast een rivier woont (als je dat niet bent), je zou niet midden in de nacht wakker willen worden met je huis onder water door de rivier. Of wat als je buurman besluit wat benzine in de rivier te dumpen, je wilt niet dat je dieren ziek worden.

MyRiver lost al die problemen op, het kan dankzij Sigfox in geïsoleerde gebieden werken, zodat iedereen toegang heeft tot het apparaat. Het apparaat leest de pH van het water, het vervuilingsniveau met behulp van een innovatieve methode en het waterniveau. Dankzij Wia kunt u de rivier overal live volgen op uw telefoon of computer. Op deze manier weet je of er een probleem is met de stream en kun je ingrijpen voordat het te laat is. Het zal je onmiddellijk op de hoogte stellen als er een probleem is met de rivier.

Video

Afbeelding

Functionaliteit

Het apparaat is gebaseerd op de Arduino MKR FOX, het is ontworpen voor gebruik op afstand, de gebruiker kan het apparaat in een rivier of meer plaatsen en het overal bewaken. Dankzij de energiebesparende modus van de SAM D kan het apparaat langere tijd werken op 2AA-batterijen.

Het apparaat meet elke 30 minuten, gaat daarna slapen, de slaapperiode kan worden gereset, hoewel de minimale slaaptijd 20 minuten moet zijn.

De MKR FOX leest de pH van de rivier met behulp van een pH-sensor, hij krijgt ook het waterniveau met behulp van een waterniveausensor, en hij voelt of deze is vervuild door onoplosbare stoffen door een LED op een fotoresistor te laten schijnen, als de fotoresistor-uitlezing is laag, betekent dit dat er een vaste stof (olie, benzine, kwik, etc.) in de rivier aanwezig is. Het apparaat stuurt vervolgens alle gegevens naar Sigfox, waar het wordt doorgestuurd naar Wia, verwerkt en gevisualiseerd. De gebruiker wordt geïnformeerd over de toestand van de rivier. Hieronder ziet u een afbeelding van het functionaliteitsoverzicht.

De buffer wordt gecodeerd als HEX naar Sigfox gestuurd, Sigfox stuurt de gegevens door naar Wia, de gegevens gaan dan door een stroom, de gegevens worden terug geconverteerd naar string en vervolgens naar de sensorwaarden. Ze worden dan verwerkt en de gebruiker wordt op de hoogte gebracht als de waarden buiten de grenzen vallen.

Hieronder is nog een afbeelding die het code-overzicht van het project illustreert, zoals hieronder beschreven.

  • Sensoren lezen leest de pH-, waterniveau- en fotoresistorsensorwaarden en slaat ze op in variabelen.
  • Buffer opmaken zal alle waarden samenvoegen tot een 12 Byte buffer die naar Sigfox kan worden gestuurd.
  • Gegevens ontleden zal de buffer ontleden naar Sigfox.

De MKR FOX kan slechts 12 bytes door Sigfox sturen, dit betekent dat alle sensorwaarden moeten worden samengevoegd tot de 12 bytes, de maximale ruwe waarde van elke sensor is 1024 (omdat ze allemaal analoog zijn), dus elke sensor vertegenwoordigt een derde van de buffer (4 bytes). De Arduino moet de waarden samenvoegen en nullen toevoegen aan het begin van elke waarde totdat de waarde 4 bytes heeft. De afbeelding hieronder illustreert dit proces.

De Arduino ontvangt de sensorwaarden als gehele getallen, zet de gehele getallen vervolgens om in strings en voegt nullen toe aan het begin van elke waarde totdat deze 4 bytes heeft, bijvoorbeeld als de fotoresistorwaarde 620 is, wordt er één nul toegevoegd, 0 620. Maar als de waterniveausensor gelijk is aan 24, worden twee nullen toegevoegd, 00 24. Het apparaat voegt de waarden vervolgens samen in een buffer van 12 bytes en stuurt de gegevens naar SigFox.

Het apparaat in actie

Hieronder staan ​​een aantal foto's die de functionaliteit van het project weergeven, voor een beter beeld, zie de video hierboven.

Voordelen

De gebruiker in bedrijf dit project zal voordeel in:

  • Het waterpeil, de ph en het vervuilingsniveau van een rivier gemakkelijk overal en altijd in de gaten houden
  • Een melding ontvangen als de rivier vervuild is door oplosbare of onoplosbare stoffen of overstroomt
  • Gebruiksgemak en montage
  • Werkt in elk door Sigfox gedekt land

Het project bouwen

Stap 1:Vereiste apparatuur

Dit project vereist dat alle componenten aan elkaar worden gesoldeerd, er zijn niet veel dingen behalve de sensoren. De lijst met materialen staat hieronder.

  • 1, Arduino MKR FOX 1200
  • 1, pH-sensor
  • 1, Waterniveausensor
  • 1, fotoweerstand
  • 1, witte led
  • 2, Weerstanden (220Ω)
  • Jumperdraden

Stap 2:het circuit aansluiten

Het schakelschema van het project kan een beetje verwarrend zijn omdat de componenten niet op een breadboard zijn geplaatst. Als je er problemen mee hebt, probeer dan het Fritzing-bestand hieronder te downloaden en de draden op je computer te verplaatsen.

  • Circuitoverzicht

De onderstaande afbeeldingen laten zien hoe het circuit eruit moet zien als het voltooid is.

  • Voorbereiden de MKR FOX

De onderstaande afbeeldingen zullen u begeleiden bij het aansluiten van de accubak en antenne op de MKR FOX. Merk op dat de accubak moet worden aangesloten nadat de sensoren zijn aangesloten. Andere bedrading en instellingen zijn te vinden onder het project bouwen / Finale.

Stap 3:De code erkennen

De code bestaat uit 3 hoofdonderdelen:

  • Sensoren uitlezen
  • Buffer opmaken
  • Gegevens ontleden

Deze secties worden hieronder uitgelegd.

  • Sensoren uitlezen
struct GetValue // creëerde structuren om lussen te vergemakkelijken {int riverLevel() // get level of the river { const int val =analogRead(A2); if(proDebug) { Serial.print(" Rivierniveau "); Serial.println(val); } retourwaarde; } int riverPh () // haal ph van de rivier op { const int val =(analogRead (A1) / 5 * 3.3); if (proDebug) { Serial.print ("River Ph "); Serial.println(val); } retourwaarde; } int riverPol () // haal het vervuilingsniveau van de rivier op { const int val =analogRead (A3); if(proDebug) { Serial.print(" Riviervervuiling "); Serial.println(val); } retourwaarde; }}; 

De structuur hierboven bevat lussen die elke sensorwaarde lezen, er is een aparte lus voor elke waarde.

  • Buffer opmaken
String data (int level, int ph, int pol) // sensorwaarden samenvoegen in buffer {int values[3] ={level, ph, pol}; Tekenreeks nieuweWaarden; for(int i =0; i <3; i++) // doorloopt alle waarden, waarbij 0s aan het begin wordt toegevoegd { if(values[i] <10) { newValues ​​+="000"; Serial.println ("Optie 1"); } else if(values[i] <100) { newValues ​​+="00"; Serial.println("Optie 2"); } else if(values[i] <1000) { newValues ​​+="0"; Serial.println("Optie 3"); } anders {}; newValues ​​+=waarden[i]; Serial.print(" Uitvoeren "); Serial.print(i); Serieel.print("/3 "); Serial.println(newValues); } retourneer nieuweWaarden; }  

De lus erboven neemt de 3 sensorwaarden op en plaatst ze vervolgens in een array. Het doorloopt vervolgens elke waarde, voegt nullen toe aan het begin van elke waarde totdat de waarde 4 bytes groot is, en voegt vervolgens elke waarde toe aan een tekenreeks die vervolgens wordt geretourneerd.

  • Gegevens ontleden
void parseData(String data) // stuur buffer naar SigFox { SigFox.beginPacket(); SigFox.print(gegevens); int ret =SigFox.endPacket(); } 

Deze sectie neemt de string op die moet worden geparseerd en stuurt vervolgens de waarde naar Sigfox.

Stap 4:Wia Sigfox-integratie instellen

Deze stap illustreert hoe Wia kan worden ingesteld om berichten van Sigfox te ontvangen. Wia is een professioneel IoT-platform waarmee de gebruiker gegevens kan visualiseren met behulp van widgets op het web of in de mobiele app. een stroom, waarmee de gebruiker de gegevens kan verwerken. Gegevens worden vertegenwoordigd door een gebeurtenis.

Zorg om te beginnen dat je een Sigfox-account en een Wia-account hebt. Download ook de Wia app op iOS of Android om notificaties te kunnen ontvangen. De onderstaande afbeeldingen illustreren het verbinden van Sigfox en Wia.

  • Stel het Type in naar Data-uplink
  • Stel het Kanaal in naar URL
  • Het is niet nodig om de Aangepaste Payload-configuratie in te vullen
  • Stel de URL in Patroon naar "https://api.wia.io/v1/events"
  • Stel de HTTPMethode in naar POST
  • Maak een koptekst met de naam Autorisatie met de waarde Bearer (deze waarde wordt later aangepast)
  • Stel ContentType in naar application/json
  • Kopieer de code van deze link naar de hoofdtekst van de webhook.
  • Klik ten slotte op OK en je bent klaar.

Stap 5:de Wia Flow instellen

Dit gedeelte duurt iets langer om te voltooien, de stroom converteert de gegevens die van HEX zijn ontvangen naar String, het zal dan de string ontleden in de 3 sensorwaarden en deze vervolgens converteren naar gehele getallen, het zal dan de waarde van riviervervuiling en rivierniveau naar een Hoge of Ok-descriptor en de ruwe ph-waarde naar de werkelijke ph-waarde, dan zal het de gebruiker op de hoogte stellen als de waarde buiten de grenzen ligt.

De onderstaande gids zal dit proces stap voor stap illustreren. U krijgt de instructie om bepaalde stukjes code in Wia Functions in te voegen, deze stukjes code worden hieronder ingevoegd, kopieer en plak de code in de functie. De gegevens die in de e-mails moeten worden opgenomen, worden ook hieronder ingevoegd, werk ermee zoals met de functies.

Wia-functies

  • procesPayload
if(input.body){ output.body.name ="waarde"; output.body.data =toByteArrayStr(input.body.data.sigfoxData);}functie toByteArrayStr(sigfoxData){ let result =Buffer(sigfoxData, 'hex'); retourneer resultaat.toString('utf8');} 
  • procesVervuiling
if(input.body.data){ let data =input.body.data; if(data =="VERVUILD") { output.body.name ="waterLevel"; output.body.data =gegevens; } anders { while(1); }} 
  • procesPh
laat minVal =6.5;laat maxVal =8.5;if(input.body.data){ laat data =input.body.data; if (data> maxVal || data  
  • procesniveau
if(input.body.data){ let data =input.body.data; if(data =="HIGH") { output.body.name ="waterLevel"; output.body.data =gegevens; } anders { while(1); }} 
  • riviervervuiling
laat minVal =200;laat maxVal =0;if(input.body.data.sigfoxData){ laat data =input.body.data.sigfoxData; laat verwerkteData =toByteArrayStr(data); laat newData =cutString(processedData); output.body.name ="watervervuiling"; output.body.data =processData(newData);}function toByteArrayStr(sigfoxData){ let result =Buffer(sigfoxData, 'hex'); return result.toString('utf8');}functie cutString(data){ let newVal =data[8]; nieuweVal +=gegevens[9]; nieuweVal +=gegevens[10]; nieuweVal +=gegevens[11]; laat finalVal =parseInt(newVal); return finalVal;}function processData(data){ if(data  
  • riverPh
laat minVal =300;laat maxVal =600;if(input.body.data.sigfoxData){ laat data =input.body.data.sigfoxData; laat verwerkteData =toByteArrayStr(data); laat newData =cutString(processedData); laat finalVal =(newData / 73.1428571); laat valueToSend =finalVal.toFixed(2); output.body.name ="waterPh"; output.body.data =valueToSend;}functie toByteArrayStr(sigfoxData){ let result =Buffer(sigfoxData, 'hex'); return result.toString('utf8');}function cutString(data){ let newVal =data[4]; nieuweVal +=gegevens[5]; nieuweVal +=gegevens[6]; nieuweVal +=gegevens[7]; laat finalVal =parseInt(newVal); retourneer newVal;} 
  • riverLevel
laat minVal =0;laat maxVal =200;if(input.body.data.sigfoxData){ laat data =input.body.data.sigfoxData; laat verwerkteData =toByteArrayStr(data); laat newData =cutString(processedData); output.body.name ="waterLevel"; output.body.data =processData(newData);}function cutString(data){ let newVal =data[0]; nieuweVal +=gegevens[1]; nieuweVal +=gegevens[2]; nieuweVal +=gegevens[3]; laat finalVal =parseInt(newVal); return finalVal;}function toByteArrayStr(sigfoxData){ let result =Buffer(sigfoxData, 'hex'); return result.toString('utf8');}function processData(data){ if(data> maxVal) { return "HIGH"; } else { geef "OK" terug; }} 

Wia-e-mails

  • riverPollutionEmail
Automatic Messaging SystemDataWarning - myWater device ${trigger.source.device.id} heeft een probleem gedetecteerd in de stream.Waarschuwing - water is vervuild door onoplosbare stoffen.InformationDevice ${trigger.source.device.id}Raw Gegevens ${input.body.data} 
  • riverPhEmail
Automatic Messaging SystemDataWarning - myWater device ${trigger.source.device.id} heeft een probleem gedetecteerd in de stream.Waarschuwing - Water Ph is niet geschikt. Water is vervuild.InformationDevice ${trigger.source.device.id}Ruwe gegevens ${input.body.data} 
  • riverLevelEmail
Automatic Messaging SystemDataWarning - myWater device ${trigger.source.device.id} heeft een probleem gedetecteerd in de stream.Waarschuwing:het waterpeil is te hoog, de rivier kan overstromen.InformationDevice ${trigger.source.device .id}Onbewerkte gegevens ${input.body.data} 

De variabelen instellen

Wanneer de gegevens door Wia worden ontvangen, moeten deze worden verwerkt, als de gegevens tussen een minimum- en maximumwaarde liggen, is de waarde veilig, zijn de limieten van de pH- en waterniveausensor ingesteld, maar de gebruiker moet de fotoresistor handmatig instellen limiet, moet er een test worden gedaan om deze waarde te bepalen, de onderstaande stappen zullen u uitleggen hoe u dit moet doen.

void setup(){ pinMode(1, OUTPUT); Serieel.begin(9600); while(!Serial) {}; digitalWrite (1, HIGH);} void loop () { const int val =analogRead (A3); Serial.println(val); vertraging (5000);} 

Er is nog een variabele die de gebruiker moet instellen, proDebug , als het is ingeschakeld, vereist de Arduino een verbinding via USB met een computer en moet de seriële monitor open zijn, de Arduino drukt in deze modus af naar de seriële monitor, het is ideaal voor het oplossen van problemen. proDebug is standaard false voor het werken op het veld.

Bibliotheken

  • Sigfox - copyright (c) 2016 Arduino LLC GNU Lesser General Public License deze bibliotheek is in het publieke domein
  • ArduinoLowPower (c) 2016 Arduino LLC GNU Lesser General Public License deze bibliotheek is in het publieke domein

Finale

De laatste stap is om je Arduino op een pc/Mac aan te sluiten en de schets te uploaden, zorg ervoor dat de accubak is aangesloten op de Arduino en dat het circuit in orde is. De volgende stappen zullen u begeleiden bij het maken van een behuizing voor het project.

Ik heb besloten om mijn behuizing te maken van een fles water, ik denk dat het een geweldige en ecologische manier is om het project te omarmen. Het apparaat ziet eruit als de onderstaande afbeelding.

Als je het idee van de behuizing leuk vindt, kun je door de onderstaande afbeeldingen bladeren om te illustreren hoe de behuizing is gemaakt. Voel je vrij om er zelf een te maken.

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

Schema's

schematics_lXO5SiusZO.fzz

Productieproces

  1. Wat is een O2-sensor?
  2. Raspberry Pi-temperatuursensor
  3. Emotiesensor / EEG
  4. Drukluchtstroommeetapparaat met analoge sensor
  5. DHT11-sensor met LED's en een piëzo-luidspreker
  6. UnifiedWater v1
  7. 3D RGB Arduclock
  8. Eenvoudige obstakelsensor met Arduino
  9. Joystick-spel
  10. Vind mij
  11. Little Rover