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

UnifiedWater v1

Composants et fournitures

Arduino MKR GSM 1400
× 1
Anneau Adafruit NeoPixel :WS2812 5050 LED RVB
× 1
Température et humidité GY21
× 1
Capteur de turbidité, sortie phototransistor
× 1
Capteur de température numérique étanche Adafruit DS18B20
× 1
DFRobot Gravity :Kit de capteur/mètre de pH à pointe de lance analogique
× 1
Interrupteur à bouton-poussoir SparkFun 12mm
× 1
Câbles de raccordement (générique)
× 1
Résistance 220 ohm
× 1

Outils et machines nécessaires

Fer à souder (générique)

Applications et services en ligne

Éditeur Web Arduino
Plateforme de connectivité IoT SORACOM Air
SORACOM Harvest
Lagune SORACOM

À propos de ce projet

Présentation

Rivières. Essentiel à notre survie, au commerce et ainsi de suite. De grands efforts ont été faits au cours de la dernière décennie pour réduire notre pollution des plans d'eau du monde. Les rivières sont à l'origine de la pollution, car les gens ne vont pas à la mer pour y déverser leurs déchets. Ils le jettent dans les rivières.

Ces rivières se déversent ensuite dans la mer, l'océan et ainsi la brosse à dents qui était autrefois jetée dans une rivière traverse le monde et atterrit de l'autre côté.

Dans un monde qui essaie de lutter contre la pollution, les données sont cruciales. Il devrait être facile pour les entreprises et les entreprises de collaborer sur un projet mondial visant à réduire la pollution de l'eau. C'est là qu'UnifiedWater entre en jeu.

Un appareil assez bon marché et évolutif qui permet de collecter et d'analyser facilement ces données, si nécessaires pour savoir à quel point une rivière est polluée. WaterAid se décline en 2 modes, l'un adapté aux entreprises et l'autre aux particuliers.

Plusieurs appareils peuvent fonctionner ensemble, placés à différents points d'un cours d'eau ou dans différents plans d'eau. Ces appareils collectent des données à un intervalle de temps en les envoyant à la même base de données. Cela permet à l'entreprise de vérifier l'état de la rivière ou du lac surveillé en un clic.

Une version portable de l'appareil est également disponible. Dans cette version, l'individu peut emporter l'appareil avec lui et lorsqu'il souhaite prélever un échantillon d'eau, il appuie sur un bouton de l'appareil et le place dans l'eau pendant 30 secondes. Les données seront ensuite disponibles sur un tableau de bord en ligne.

En collectant la température, le pH et l'humidité de l'eau ainsi que la température et l'humidité atmosphériques, WaterAid est doté de tous les capteurs dont vous auriez besoin pour surveiller la pollution de la rivière.

Vidéo

Images

Fonctionnalité

WaterAid permet à l'utilisateur, une entreprise ou un particulier de collecter des données de manière sûre et précise et de visualiser toutes ces données en un seul endroit grâce au cloud de Soracom. Le projet est composé d'un front end et d'un backend.

Avant Fin

Le front-end du projet est le périphérique physique utilisé pour collecter les données et les envoyer vers le cloud. L'appareil peut être mis en mode 1 ou 2. En mode 1, l'appareil enregistre un ensemble de données par simple pression sur un bouton, utile pour la surveillance occasionnelle d'un plan d'eau. Le mode 2 configure l'appareil pour qu'il prenne des mesures à un intervalle de temps défini et envoie ces données vers le cloud.

Un GSM MKR est utilisé pour le front-end car il est facile à utiliser et fiable. Il peut également accéder à Soracom via GSM. Vous trouverez ci-dessous les étapes suivies par l'appareil lors de la collecte de données.

Batterie

L'appareil peut être alimenté de plusieurs manières. Il peut être alimenté par une batterie LiPo via le port fourni sur l'appareil, par une banque d'alimentation ou en connectant une batterie via le port VIN de l'appareil.

La durée de vie de l'appareil dépend fortement de la puissance de la batterie. L'appareil passe en mode veille entre les lectures pour économiser autant d'énergie que possible.

LED Anneau

L'appareil est également équipé d'un anneau LED. Cela fournit à l'utilisateur un retour d'information sur ce que l'appareil fait en ce moment. Il existe 3 modes dans lesquels la bague peut être.

  • Multicolore indique que l'appareil est en train de configurer ou de traiter des données
  • Rouge clignotant un avertissement, signifiant généralement que l'appareil doit être placé dans l'eau, bien qu'il puisse également indiquer une erreur
  • Bleu ou vert progressif indique que l'appareil est en train de prélever un échantillon et doit être placé dans l'eau.

Prendre un échantillon

Les capteurs de l'appareil doivent tous être placés dans l'eau lorsque l'appareil prélève un échantillon. Un délai de 6 secondes est appliqué avant que l'échantillon ne soit prélevé pour réchauffer les capteurs. Pour de meilleurs résultats, les capteurs doivent être immergés pendant l'échauffement.

Analyse des données

Les Données doivent être envoyées à Soracom sous la forme d'une chaîne JSON. Cela donne une valeur à toutes les clés utilisées. Les données seront alors faciles à interpréter par le backend. Vous trouverez ci-dessous un exemple de charge utile qui serait envoyée.

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

Le Backend

Le backend du projet fait référence à Soracom. Les données sont collectées et visualisées dans le backend sur des tableaux de bord. Ces tableaux de bord sont créés à l'aide de Soracom Lagoon.

Le tableau de bord

Le tableau de bord récapitule toutes les données collectées à partir de l'appareil. Il trace les lieux à partir desquels les données ont été collectées sur une carte, la couleur varie en fonction de la pollution de l'eau. Les données sont ensuite représentées graphiquement sur des graphiques linéaires en dessous et sont ensuite entièrement résumées sur un tableau.

L'utilisateur recevra également des alertes par e-mail si la valeur du pH ou la turbidité de l'eau sont anormales. Vous trouverez ci-dessous quelques captures d'écran du tableau de bord.

Évolutivité

L'appareil peut être facilement évolutif et toutes les données peuvent être collectées et illustrées sur le même tableau de bord. Plusieurs appareils peuvent diffuser des données vers le Soracom et les visualiser sur le tableau de bord.

Le prix de l'appareil et l'extrême facilité à le construire et à le programmer facilitent l'utilisation d'un parc d'appareils. Ces appareils peuvent également être facilement enregistrés dans Soracom à l'aide d'outils tels que Soracom Krypton.

Chaque entreprise ou individu aura son tableau de bord personnalisé où les données collectées par leurs appareils seront visualisées. Espérons que les gens pourront collaborer sur le même tableau de bord et partager leurs données les uns avec les autres dans un avenir proche.

Avantages

L'individu ou l'entreprise utilisant ce produit bénéficiera de :

  • Coûts d'exploitation réduits car l'appareil est très autonome.
  • Facilement évolutif, l'appareil peut facilement fonctionner en solo ou dans une flotte de dizaines d'autres.
  • Collecte de données rapide permettant d'envoyer les données vers le cloud et de les visualiser en temps réel.
  • Visualisation facile, les données peuvent être visualisées n'importe où et à tout moment à l'aide du tableau de bord en ligne.

Construire le projet

Étape 1 : Appareil requis

Ce projet nécessite de nombreux capteurs qui surveilleront de nombreux paramètres liés à l'eau et à l'atmosphère placées. Vous trouverez ci-dessous une liste de tous les matériaux nécessaires.

  • 1, Arduino MKR GSM
  • 1, anneau LED RVB 16 LED
  • 1, module de température et d'humidité GY-21
  • 1, Capteur de turbidité
  • 1, Capteur de température étanche
  • 1, capteur de pH et module
  • 1, bouton poussoir
  • 1, Résistance (220 )
  • Cavaliers

Étape 2 : Connecter le circuit

Les composants doivent être soudés ensemble. Pour faciliter la compréhension des schémas, une maquette a été utilisée. les schémas sont ci-dessous.

Préparation du GSM MKR

Une fois les capteurs soudés à l'appareil, la carte SIM, l'antenne GSM et la batterie doivent être fixées à l'appareil. J'alimente la carte avec 2 piles AA via le port VIN. Les étapes sont ci-dessous.

Étape 3 :Reconnaissance du code

Il y a 4 sections principales dans le code du projet.

  • Collecter les données du capteur
  • Obtenir l'heure et la date
  • Données de processus
  • Envoyer des données

Toutes ces sections sont décrites et détaillées ci-dessous.

Collecter les données du capteur

Serial.println("Prise d'échantillon");
Serial.println("________________________________________");
Serial.println("Prise d'échantillon");
Serial.println (" OK - Échauffement ");
délai (6000); // délai pour l'étalonnage du capteur
colourLED(50);
Serial.println(" OK - Taking Sample");
Serial.print(" ");
pour (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();
}
// va prélever plusieurs échantillons d'eau - capteurs pas si précis
waterTurbidity +=getWaterTurbidity();
waterPh +=getWaterPh();
if (i> 14)
{
// prélève un seul échantillon pour les capteurs de haute précision
waterTemperature =getWaterTemp();
atmoTemperature =getAtmoTemp ();
atmoHumidity =getAtmoHumidity();
}
Serial.print(".");
delay(500);
}
Serial .println("");
Serial.println("Succès - Échantillons pris");
pour (int i =0; i <=16; i++)
{
strip.setPixelColor(i, strip.Color(0, 0, 0));
strip.show();
delay(30);
}
Serial.println("________________________________________");
Serial.println("");
delay(500);

La section de code ci-dessus commence par attendre 6 secondes que les capteurs se calibrent dans l'eau. L'appareil boucle alors 16 fois, une nouvelle LED allume l'anneau à chaque boucle.

Les données des capteurs qui ont des valeurs fluctuantes sont collectées 16 fois, puis la moyenne est trouvée. Les capteurs de haute précision sont lus sur la dernière boucle.

Obtenir l'heure et la date

void getCredentials()
{
Serial.println(" [1/2] Time");
Serial.println(" OK - Obtenir l'heure de RTC");
currentEpoch =processTime();
colourLED(50);
Serial.println(" [2/2] Geolocation");
Serial.println(" OK - Obtenir Geolocation from GPRS");
while (!getLocation());
Serial.print(" Success - Geolocation is "); Serial.print(latitude, 7); Serial.print(", "); Serial.println(longitude, 7);
colourLED(50);
}

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

La première boucle gère les informations d'identification. L'heure est extraite de l'horloge RTC embarquée telle qu'elle a été synchronisée avec le réseau GSM lors de la configuration. La géolocalisation est extraite du GPRS.

Données de processus

void processData()
{
Serial.println(" OK - Obtenir la moyenne du pH et de la turbidité de l'eau");
waterPh =(waterPh / 16);
waterTurbidity =(waterTurbidity / 16);
Serial.println(" OK - Dumping Data to Serial");
Serial.println("");
Serial.print(" [ Eau] pH "); Serial.println(waterPh);
Serial.print(" [Eau] Turbidité "); Serial.println(waterTurbidity);
Serial.print(" [Water] Temperature "); Serial.println(waterTemperature);
Serial.print(" [Atmo] Temperature "); Serial.println(atmoTemperature);
Serial.print(" [Atmo] Humidity "); Serial.println(atmoHumidity);
Serial.println("");
Serial.println(" Success - Data Processed");
colourLED(50);
}

String makeLine()
{
Serial.println(" OK - Making String");
String dataReturned; dataReturned +="{" ; dataReturned +=" \n";
dataReturned +="\"Latitude\":" + String(latitude, 7); dataReturned +=", \n";
dataReturned +="\"Longitude\":" + String(longitude, 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(deviceName); dataReturned +=String("\""); dataReturned +=", \n";
dataReturned +="\"epoch\":" + String(currentEpoch); dataReturned +=", \n";
dataReturned +="\"mode\":" + String(mode); dataReturned +=" \n";
dataReturned +="}";
Serial.println(" OK - Les données sont en dessous");
Serial.println("");
Serial.println(dataReturned);
Serial.println("");
Serial.println(" Success - String is Ready");
colourLED(50);
return dataReturned;
}

processData() obtient la moyenne des données collectées par les capteurs qui ont tendance à fluctuer, puis transfère toutes les données vers le moniteur série.

makeLine() compile toutes les données dans la chaîne JSON qui est envoyée à Soracom. Toutes les valeurs sont analysées dans un tampon JSON prêt à être envoyé au backend.

Envoyer des données

void parseData(String dataToSend)
{
Serial.println("OK - Configuration de la connexion");
if(client.connect(url, 80))
{
Serial.println(" OK - Connexion établie, analyse des données");
client.println("POST / HTTP/1.1");
client.println("Host :Harvest.soracom.io");
client.println("User-Agent :Arduino/1.0");
client.println("Connexion :close");
client.print ("Content-Length:");
client.println(dataToSend.length());
client.println("");
client.println(dataToSend);
Serial.println(" OK - Données analysées");
}
Serial.println(" OK - Obtenir une réponse");
Serial.println("");
while(1)
{
if(client.available())
{
char c =client.read();
Serial.print(c);
}
if(!client.connected())
{
break;
}
}
Serial.println(" Succès - Les données sont analysées" );
}

Enfin, les données sont envoyées à Soracom. L'appareil a établi une connexion avec le serveur, puis prépare les informations d'identification. Les données sont ensuite envoyées au serveur et la réponse est imprimée sur le moniteur série.

L'appareil se met alors en veille jusqu'à ce qu'un déclencheur le réveille en répétant à nouveau les étapes.

Étape 4 :Configuration des variables

Certaines variables doivent être modifiées avant de pouvoir utiliser le projet. Ceux-ci sont énumérés ci-dessous. Les instructions sur leur configuration sont également ci-dessous.

  • mode le mode de l'appareil dicte s'il prélève des échantillons périodiquement ou s'il prélève des échantillons à l'action d'un bouton. Si cette variable est définie sur 1, l'appareil devra être actionné via un bouton. Si le mode est défini sur 2, l'appareil prélève périodiquement des échantillons.
  • deviceID et deviceName ce sont des variables personnalisées qui sont utilisées pour identifier l'appareil si une flotte d'appareils est utilisée. Chaque appareil utilisé doit recevoir un identifiant et un nom uniques afin qu'ils puissent être facilement identifiés.
  • temps de sommeil stocke le temps pendant lequel l'appareil dort entre les lectures, il est défini sur 5 secondes dans le code qui est approprié pour les tests mais doit être modifié lors de son utilisation sur le terrain. Un échantillon peut être prélevé à des intervalles de 15 minutes.
  • proDebug est utilisé lors du débogage, il est défini sur false dans le code, mais si le moniteur série est nécessaire lors du débogage, il doit être défini sur true. Notez que l'appareil imprimera toujours sur la série même si le débogage est désactivé. Si le débogage est activé, l'appareil ne fonctionnera que si le moniteur série est activé.

Étape 5 : Télécharger le code

Avant de configurer le backend, les données doivent lui être envoyées.

Pour ce faire, connectez votre GSM MKR à votre ordinateur et téléchargez le code sur l'appareil, assurez-vous que le mode de l'appareil est défini sur 1 pour cette configuration. Une fois le code téléchargé, placez tous les capteurs dans l'eau.

Appuyez maintenant sur le bouton de l'appareil et attendez que les données soient collectées et envoyées. Répétez cette opération plusieurs fois pour remplir Soracom Air.

Étape 6 :Configuration de Soracom

Cette étape est divisée en 2 sections, la première couvrira la création d'un compte avec Soracom et l'enregistrement de votre SIM tandis que l'autre couvrira la configuration de Soracom Harvest pour collecter les données d'Air. Si vous avez déjà un compte chez Soracom, ignorez la première section.

Section 1 : Création d'un compte

Section 2 : Groupes et récolte

Étape 7 :Configurer Lagoon

La dernière chose à mettre en place sur Soracom est Lagoon, c'est l'outil que nous utiliserons pour visualiser nos données et créer des alertes email si les données ne sont pas bonnes. Suivez les étapes ci-dessous.

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

Schematics

schematics_e7TRP6KJKI.fzz

Processus de fabrication

  1. Qu'est-ce qu'un capteur d'O2 ?
  2. Capteur de mouvement utilisant Raspberry Pi
  3. Capteur d'humidité du sol Raspberry Pi
  4. Test du capteur DS18B20
  5. Capteur de température Raspberry Pi
  6. Télémétrie du capteur 2.0.1
  7. Capteur d'émotion/EEG
  8. Windows 10 IoT Core sur Raspberry Pi 2 – Données du capteur Adafruit
  9. MyRiver