Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

MyRiver

Composants et fournitures

Arduino MKR1000
× 1
Capteur de niveau d'eau
× 1
Capteur Ph
× 1
LED (générique)
Blanc si possible
× 1
Résistance 221 ohm
× 2
Résistance photo
× 1
Câbles de raccordement (générique)
× 1

Outils et machines nécessaires

Fer à souder (générique)
Scie à métaux

Applications et services en ligne

Éditeur Web Arduino
Sigfox
Wia

À propos de ce projet

Présentation

Une rivière ou un lac peut être une excellente source de plaisir et de détente. Mais si la rivière devient sale et contaminée, tout le plaisir est parti. De nombreuses personnes dépendent de l'eau de la rivière pour nourrir leur bétail et ne peuvent pas se permettre de donner à leurs animaux de l'eau sale.

Imaginez vivre juste à côté d'une rivière (si vous ne l'êtes pas), vous ne voudriez pas vous réveiller au milieu de la nuit avec votre maison inondée à cause de la rivière. Ou si votre voisin décidait de jeter de l'essence dans la rivière, vous ne voudriez pas que vos animaux tombent malades.

MyRiver résout tous ces problèmes, il peut fonctionner dans des zones isolées grâce à Sigfox afin que tout le monde ait accès à l'appareil. L'appareil va lire le pH de l'eau, son niveau de pollution à l'aide d'une méthode innovante, et son niveau d'eau. Vous pourrez surveiller la rivière en direct sur votre téléphone ou votre ordinateur n'importe où grâce à Wia. De cette façon, vous pouvez savoir s'il y a un problème avec le flux et vous permet d'agir avant qu'il ne soit trop tard. Il vous avertira immédiatement s'il y a un problème avec la rivière.

Vidéo

Image

Fonctionnalité

L'appareil est basé sur l'Arduino MKR FOX, il est conçu pour une utilisation à distance, l'utilisateur peut placer l'appareil dans une rivière ou un lac et le surveiller de n'importe où. Grâce au mode faible consommation du SAM D, l'appareil peut fonctionner pendant une période prolongée avec 2 piles AA.

L'appareil prend des mesures toutes les 30 minutes, s'endormant ensuite, la période de sommeil peut être réinitialisée, bien que le temps de sommeil minimum doive être de 20 minutes.

Le MKR FOX lit le pH de la rivière à l'aide d'un capteur de pH, il obtient également son niveau d'eau à l'aide d'un capteur de niveau d'eau et il détecte s'il est pollué par des substances insolubles en faisant briller une LED sur une photorésistance, si la lecture de la photorésistance est faible, cela signifie qu'une substance solide (pétrole, essence, mercure, etc.) est présente dans la rivière. L'appareil envoie ensuite toutes les données à Sigfox, où elles sont relayées à Wia, traitées et visualisées. L'utilisateur est averti de l'état de la rivière. Vous trouverez ci-dessous une image de l'aperçu des fonctionnalités.

Le tampon sera envoyé à Sigfox encodé en HEX, Sigfox relayera les données à Wia, les données passeront ensuite par un flux, les données seront reconverties en chaîne puis en valeurs de capteur. Elles seront ensuite traitées et l'utilisateur sera averti si les valeurs sont hors limites.

Vous trouverez ci-dessous une autre image illustrant l'aperçu du code du projet, décrit ci-dessous.

  • Lire les capteurs lira les valeurs du capteur de pH, de niveau d'eau et de photorésistance et les stockera dans des variables.
  • Tampon de format fusionnera toutes les valeurs dans un tampon de 12 octets pouvant être envoyé à Sigfox.
  • Analyse des données analysera le tampon vers Sigfox.

Le MKR FOX ne peut envoyer que 12 octets via Sigfox, cela signifie que toutes les valeurs du capteur doivent être fusionnées dans les 12 octets, la valeur brute maximale de chaque capteur est de 1024 (car ils sont tous analogiques), donc chaque capteur représente un tiers de la tampon (4 octets). L'Arduino doit fusionner les valeurs et ajouter des zéros au début de chaque valeur jusqu'à ce que la valeur ait 4 octets. L'image ci-dessous illustre ce processus.

L'Arduino reçoit les valeurs du capteur sous forme d'entiers, il convertit ensuite les entiers en chaînes et ajoute des zéros au début de chaque valeur jusqu'à ce qu'il ait 4 octets, par exemple, si la valeur de la photorésistance est 620, un zéro sera ajouté, 0 620. Mais si le capteur de niveau d'eau est égal à 24, deux zéros sont ajoutés, 00 24. L'appareil fusionne ensuite les valeurs dans un tampon de 12 octets et envoie les données à SigFox.

L'appareil en action

Vous trouverez ci-dessous un certain nombre de photos montrant les fonctionnalités du projet. Pour une meilleure vue d'entre elles, reportez-vous à la vidéo ci-dessus.

Avantages

Le utilisateur exploitation ce projet sera avantage dans :

  • Surveillance facile du niveau d'eau, du pH et du niveau de pollution d'une rivière de n'importe où et à tout moment
  • Recevoir une notification si la rivière est polluée par des substances solubles ou insolubles ou est en crue
  • Facilité d'utilisation et de montage
  • Fonctionne dans n'importe quel pays couvert par Sigfox

Construire le projet

Étape 1 : Appareil requis

Ce projet nécessite que tous les composants soient soudés ensemble, il n'y a pas trop de choses à part les capteurs. La liste des matériaux est notée ci-dessous.

  • 1, Arduino MKR FOX 1200
  • 1, capteur de pH
  • 1, capteur de niveau d'eau
  • 1, Photorésistance
  • 1, LED blanche
  • 2, Résistances (220Ω)
  • Cavaliers

Étape 2 : Connecter le circuit

Le schéma de circuit du projet peut être un peu déroutant car les composants ne sont pas placés sur une maquette. Si vous rencontrez des difficultés, essayez de télécharger le fichier Fritzing ci-dessous et de déplacer les fils sur votre ordinateur.

  • Présentation du circuit

Les images ci-dessous illustreront à quoi le circuit devrait ressembler une fois terminé.

  • Préparation le MKR FOX

Les images ci-dessous vous guideront dans la connexion du boîtier de batterie et de l'antenne au MKR FOX. Notez que le boîtier de batterie doit être connecté une fois les capteurs connectés. D'autres câblages et configurations se trouvent sous construire le projet / Final.

Étape 3 :Reconnaissance du code

Il y a 3 parties principales dans le code :

  • Lire les capteurs
  • Tampon de format
  • Analyser les données

Ces sections sont expliquées ci-dessous.

  • Lire les capteurs
struct GetValue // structures créées pour faciliter les boucles{ int riverLevel() // obtenir le niveau de la rivière { const int val =analogRead(A2); if(proDebug) { Serial.print(" River Level "); Serial.println(val); } valeur de retour ; } int riverPh() // récupère le ph de la rivière { const int val =(analogRead(A1) / 5 * 3.3); if(proDebug) { Serial.print(" River Ph "); Serial.println(val); } valeur de retour ; } int riverPol() // obtenir le niveau de pollution de la rivière { const int val =analogRead(A3); if(proDebug) { Serial.print(" River Pollution "); Serial.println(val); } valeur de retour ; }} ; 

La structure ci-dessus contient des boucles qui lisent chaque valeur de capteur, il existe une boucle distincte pour chaque valeur.

  • Tampon de format
String data(int level, int ph, int pol) // fusionne les valeurs du capteur dans le tampon { int values[3] ={level, ph, pol} ; Chaîne newValues ; for(int i =0; i <3; i++) // parcourt toutes les valeurs, en ajoutant des 0 au début { if(values[i] <10) { newValues ​​+="000"; Serial.println("Option 1"); } else if(values[i] <100) { newValues ​​+="00"; Serial.println("Option 2"); } else if(values[i] <1000) { newValues ​​+="0"; Serial.println("Option 3"); } autre {}; newValues ​​+=valeurs[i] ; Serial.print(" Exécuter "); Serial.print(i); Serial.print("/3 "); Serial.println(newValues); } renvoie de nouvelles valeurs ; }  

La boucle ci-dessus prend les 3 valeurs du capteur et les place ensuite dans un tableau. Il parcourt ensuite chaque valeur, en ajoutant des zéros au début de chaque valeur jusqu'à ce que la valeur ait une taille de 4 octets, puis ajoute chaque valeur à une chaîne qui est ensuite renvoyée.

  • Analyse des données
void parseData(String data) // envoie le tampon à SigFox { SigFox.beginPacket(); SigFox.print(données); int ret =SigFox.endPacket(); } 

Cette section prend la chaîne à analyser, puis envoie la valeur à Sigfox.

Étape 4 :Configurer l'intégration Wia Sigfox

Cette étape illustrera comment configurer Wia pour recevoir des messages de Sigfox, Wia est une plate-forme IoT professionnelle qui permet à l'utilisateur de visualiser des données à l'aide de widgets sur le Web ou sur l'application mobile, elle permet également à l'utilisateur de créer un code de bloc appelé un flux, qui permet à l'utilisateur de traiter les données. Les données sont représentées par un événement.

Pour commencer, assurez-vous d'avoir un compte Sigfox et un compte Wia. Téléchargez également l'application Wia sur iOS ou Android pour vous permettre de recevoir des notifications. Les images ci-dessous illustrent la connexion de Sigfox et Wia.

  • Définissez le Type vers Liaison montante des données
  • Définir le Canal vers URL
  • Il n'est pas nécessaire de remplir la Configuration de la charge utile personnalisée
  • Définissez l'URL Modèle vers "https://api.wia.io/v1/events"
  • Définissez la Méthode HTTP à POSTER
  • Créez un en-tête nommé Autorisation avec la valeur Porteur (cette valeur sera modifiée ultérieurement)
  • Définir ContentType vers application/json
  • Copiez le code de ce lien dans le corps du webhook.
  • Enfin, cliquez sur OK et vous avez terminé.

Étape 5 :Configurer le Wia Flow

Cette section prendra un peu plus de temps à terminer, le flux convertira les données reçues de HEX en chaîne, il analysera ensuite la chaîne en 3 valeurs de capteur puis les convertira en entiers, il convertira ensuite la valeur de la pollution de la rivière et le niveau de la rivière à un descripteur High ou Ok et la valeur de ph brute à la valeur de ph réelle, il informera alors l'utilisateur si la valeur est hors limites.

Le guide ci-dessous illustrera ce processus étape par étape. Vous serez invité à insérer certains morceaux de code dans Wia Functions, ces morceaux de code sont insérés ci-dessous, copiez et collez simplement le code dans la fonction. Les données à inclure dans les e-mails sont également insérées ci-dessous, travaillez avec elles comme avec les fonctions.

Fonctions Wia

  • processPayload
if(input.body){ output.body.name ="value" ; output.body.data =toByteArrayStr(input.body.data.sigfoxData);}function toByteArrayStr(sigfoxData){ let result =Buffer(sigfoxData, 'hex'); return result.toString('utf8');} 
  • processPollution
if(input.body.data){ let data =input.body.data; if(data =="POLLUED") { output.body.name ="waterLevel"; output.body.data =données ; } else { while(1); }} 
  • processPh
let minVal =6.5;let maxVal =8.5;if(input.body.data){ let data =input.body.data; if(data> maxVal || data  
  • processLevel
if(input.body.data){ let data =input.body.data; if(data =="HIGH") { output.body.name ="waterLevel"; output.body.data =données ; } else { while(1); }} 
  • rivièrePollution
let minVal =200;let ​​maxVal =0;if(input.body.data.sigfoxData){ let data =input.body.data.sigfoxData; laissez traiterDonnées =toByteArrayStr(données); 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');}function cutString(data){ let newVal =data[8]; newVal +=data[9] ; newVal +=data[10] ; newVal +=data[11] ; let finalVal =parseInt(newVal); return finalVal;}function processData(data){ if(data  
  • fleuve Ph
let minVal =300;let ​​maxVal =600;if(input.body.data.sigfoxData){ let data =input.body.data.sigfoxData; laissez traiterDonnées =toByteArrayStr(données); let newData =cutString(processedData); let finalVal =(newData / 73.1428571); let valueToSend =finalVal.toFixed(2) ; output.body.name ="waterPh"; output.body.data =valueToSend;}function toByteArrayStr(sigfoxData){ let result =Buffer(sigfoxData, 'hex'); return result.toString('utf8');}function cutString(data){ let newVal =data[4]; newVal +=data[5] ; newVal +=données[6] ; newVal +=data[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; laissez traiterDonnées =toByteArrayStr(données); let newData =cutString(processedData); output.body.name ="waterLevel"; output.body.data =processData(newData);}function cutString(data){ let newVal =data[0]; newVal +=data[1] ; newVal +=data[2]; newVal +=data[3] ; let 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 { return "OK" ; }} 

E-mails Wia

  • riverPollutionEmail
Automatic Messaging SystemDataWarning - myWater device ${trigger.source.device.id} a détecté un problème dans le flux.Warning - Water Is Polluted by Insoluble Substances.InformationDevice ${trigger.source.device.id}Raw Données ${input.body.data} 
  • riverPhEmail
Automatic Messaging SystemDataWarning - myWater device ${trigger.source.device.id} a détecté un problème dans le flux.Avertissement - Water Ph n'est pas approprié. L'eau est contaminée.InformationDevice ${trigger.source.device.id}Données brutes ${input.body.data} 
  • riverLevelEmail
Automatic Messaging SystemDataWarning - L'appareil myWater ${trigger.source.device.id} a détecté un problème dans le flux.Avertissement - Le niveau d'eau est trop élevé, la rivière est peut-être en crue.InformationDevice ${trigger.source.device .id}Données brutes ${input.body.data} 

Configuration des variables

Lorsque les données sont reçues par Wia, elles doivent être traitées, si les données sont entre une valeur minimale et maximale, la valeur est sûre, les limites du capteur de pH et de niveau d'eau ont été définies, mais l'utilisateur doit régler manuellement la photorésistance. limite, un test doit être effectué pour déterminer cette valeur, les étapes ci-dessous vous indiqueront comment procéder.

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

Il y a une autre variable que l'utilisateur doit définir, proDebug , s'il est activé, l'Arduino nécessite une connexion via USB à un ordinateur et le moniteur série doit être ouvert, l'Arduino imprime sur le moniteur série dans ce mode, il est idéal pour le dépannage. proDebug est par défaut false pour opérer sur le terrain.

Bibliothèques

  • Sigfox - copyright (c) 2016 Arduino LLC GNU Lesser General Public License cette bibliothèque est dans le domaine public
  • ArduinoLowPower (c) 2016 Arduino LLC GNU Lesser General Public License cette bibliothèque est dans le domaine public

Finale

La dernière étape consiste à connecter votre Arduino à un PC/Mac et à télécharger le croquis, assurez-vous que le boîtier de la batterie est connecté à l'Arduino et que le circuit est ok. Les prochaines étapes vous guideront dans la création d'un boîtier pour le projet.

J'ai décidé de créer mon enclos à partir d'une bouteille d'eau, je pense que c'est un moyen formidable et écologique d'embrasser le projet. L'appareil ressemble à l'image ci-dessous.

Si vous aimez l'idée de l'enceinte, vous pouvez faire défiler les images ci-dessous, illustrant comment l'enceinte a été fabriquée, n'hésitez pas à en créer une vous-même.

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

Schémas

schematics_lXO5SiusZO.fzz

Processus de fabrication

  1. Qu'est-ce qu'un capteur d'O2 ?
  2. Capteur de température Raspberry Pi
  3. Capteur d'émotion/EEG
  4. Appareil de mesure du débit d'air sous pression avec capteur analogique
  5. Capteur DHT11 avec LED et haut-parleur piézo
  6. UnifiedWater v1
  7. Ardulock 3D RVB
  8. Capteur d'obstacles simple avec Arduino
  9. Jeu de manette