DeltaLab est une association ‘loi 1901’ d’intérêt général, dont l’objectif est la création d’un espace dédié à l’innovation, à la production numérique au prototypage et à l’«expression artistique».
Le principe fondateur de l’association est d’apprendre à faire soi-même, pour passer de l’idée à l’objet.
Deltalab se spécialise en Objets Connectés, et est en train de créer un vaste «écosystème numérique» entre Drôme et Vaucluse, pour répondre à des besoins non couverts, mettre à disposition ressources et équipements pour usage professionnels et instaurer des partenariats avec les autres structures et initiatives numériques existantes.
Deltalab est aussi un FabLab (Fabrication Laboratory / Laboratoire de Fabrication ), un tiers-lieu de type makerspace où se trouve un atelier qui dispose de machines de fabrication comme des Imprimantes 3D ou des découpeuses Laser.
Deltalab se veut ouvert à tous publics : étudiants, professionnels, associations, inventeurs, designers, artistes, etc.
Ce projet présente l'utilisation de sonde à pH ( à quel point un liquide est acide ) de liquide.
A DeltaLab, un projet d'Aquaponie est en projet, et ces capteurs seront évidemment utilisés dès le début.
Ce projet a pour but de présenter l'utilisation de sonde de pH et électro-conductivité, dans le but de les intégrer dans un projet plus grand.
Le projet est composé de deux parties distinctes: la sonde et le microcontrôleur Wemos associée, et le serveur Node-RED.
Les fonctionnalités sont les suivantes :
Récupération des données des capteurs avec le logiciel Arduino
Affichage dans Node-RED
Possible stockage dans une base de données
Arduino IDE : téléchargeable à www.arduino.cc/en/main/software
Node-RED : on assume que vous en avez un, sinon installez-le avec ceci.
Wemos D1 mini (vous pouvez l'achetez ici)
Shield OLED pour Wemos D1 mini (SSD1306 64x48 pixels) (vous pouvez l'achetez ici)
Câble USB-micro USB type B (vous pouvez en acheter ici)
3 jumper wires (vous pouvez en acheter ici)
Sonde à pH
pH sensor circuit board
Vous pouvez achetez les deux derniers en un sur le site du fabricant ou sur Amazon ici.
Vous recevrez un kit comme celui-ci si vous commander sur le site ci-dessus.
Il vous suffit de brancher la sonde à la carte en utilisant le connecteur BNC, celui qui s'enroule.
Ensuite vous devez branchez la carte à la Wemos.
Fil du bas --> A0
Fil du milieu --> 3.3V
Fil du haut --> G
Pour installer Arduino IDE, alors Google... Merci d'avoir suivi ce tuto.
Une fois installé, allez dans Fichier > Préférences et ajoutez ce lien dans URL de gestionnaire de cartes supplémentaires en cliquant sur le bouton à droite.
https://arduino.esp8266.com/stable/package_esp8266com_index.json
Ce fichier vous permettra de coder toutes les cartes équipées d'ESP8266.
Ensuite, allez dans Outils > type de carte > Gestionnaire de carte.
Et tapez esp8266 dans la barre de recherche, puis installez cette carte à la dernière version.
Toujours dans Outils, sélectionnez la carte Lolin(WEMOS) D1 R2 & mini en allant dans Type de carte > ESP8266 Boards.
Une fois fait, vous devriez voir cela dans Outils. Veuillez donc mettre les paramètres comme indiqués sur l'image.
Branchez la Wemos au PC avec votre câble USB.
Remarque: pour que la Wemos puisse tourner en boucle il faut qu'elle soit constamment branchée sur le courant.
Si seulement on pouvait juste laisser la sonde dans le liquide et ne rien faire… Préparez-vous.
Pour commencer, vous devrez trouver un moyen d'avoir une solution à pH 7 et d'être dans un environnement entre 20 et 25 °C. Et oui le pH fluctue en fonction de la température.
Je rappelle pour ce début de calibration, il vous faut:
une solution à pH 7 entre 20 et 25 °C
de l'eau distillée ( l'eau déminéralisée fait l'affaire )
du papier absorbant
la sonde
votre PC et Arduino
Ici l'eau distillée sert à nettoyer la sonde après chaque mesure. Trempez-la dans de l'eau distillée juste avant de faire vos mesures de pH. Laissez tremper quelques instants, au moins 2 min.
Une fois votre sonde nettoyée, séchez-la avec du papier absorbant, et plongez-la dans la solution à pH 7.Faites en sorte que la sonde soit suffisamment immergée pour que toutes les électrodes de la sonde soit en contact avec la solution.
Il me semble que votre Wemos est branchée à votre PC. Donc maintenant nous allons faire notre première mesure pH. Dans un fichier arduino, copiez-collez ce code ci dessous:
#include <Arduino.h>
const int adcPin = A0; //pin pour récupérer la donnée
// Initialisation du programme
void setup() {
Serial.begin(115200); //démarrage du moniteur série
}
//Boucle automatique
void loop() {
float value = analogRead(adcPin); //récupère la valeur analogique
float voltage = value * 5.0 / 1024; //calcul de la valeur de voltage
// affichage de la donnée
Serial.println(value);
Serial.print("Voltage = "); Serial.println(voltage, 3);
delay(1000);
}
Allumez le moniteur série en cliquant sur la loupe en haut à droite. Réglez le baud du moniteur; en bas à droite, à gauche de Effacer la sortie; à 115200.Téléversez votre code en cliquant sur la flèche en haut à gauche de Arduino.
Des valeurs s'affichent sur le moniteur série ? Ce n'est pas fini, regardez la valeur de voltage. Cette dernière va nous permettre de calculer le pH. Votre solution est à pH 7, et le voltage correspondant doit être à 2,5 V.
Si cette valeur n'est pas celle qui est affichée, sur la carte entre le Wemos et la sonde se trouve une mollette que vous pouvez tourner avec un tournevis plat. Faites la tournez dans un sens ou dans l'autre quitte à y aller à fond (vous entendrez un tic quand atteindrez la limite).
Laissez la sonde stabilisée. Et si vous n'avez toujours pas une valeur de 2,5... Préparez-vous.
Vous allez avoir besoin d'autres solutions à pH différents de 7 comme 4 et 9. Revenez quand vous aurez ces trois solutions.
Pour cette prochaine étape, vous allez avoir besoin de:
vos trois solutions à pH 4, 7 et 9
de l'eau distillée ( l'eau déminéralisée fait l'affaire )
du papier absorbant
la sonde
votre PC et Arduino
un logiciel de création de graphique (Excel, Google Sheets, MATLAB, etc.)
Voici la procédure à suivre :
Notez la température à laquelle vous allez faire vos mesures
Avec le même code ci-dessus, prenez des mesures de voltage des trois solutions, n'oubliez pas de laisser tremper la sonde avant chaque mesure dans de l'eau distillée et de la séchée avec du papier avant et après
Notez ces mesures de voltage avec leur pH correspondant
Construisez un graphique avec ces mesures. Axe x : voltage, axe y : pH
Tracez une courbe avec les points et déduisez une équation
Nettoyez la sonde à l'eau distillée
Répétez cela sur plusieurs jours jusqu'à avoir une courbe satisfaisante, c'est-à-dire presque linéaire
Une fois que vous avez votre courbe, prenez son équation.
Et enfin, après tant d'attente, nous allons passer au code Arduino.
ESP8266WiFi (intégré lors du téléchargement des cartes esp8266)
PubSubClient by Nick O'Leary (librairie à installer avec le gestionnaire de bibliothèque)
WiFiClient (intégré lors du téléchargement des cartes esp8266)
Copiez-collez le code ci-dessous dans un fichier arduino:
//Bibliothèques pour la communication en WiFi
#include <SPI.h>
#include <Wire.h>
#include "PubSubClient.h"
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
//Constantes pour la prise de données
#define SensorPin A0 //pin de récupération de la donnée
#define Offset 0.00 //compensation avec la déviation
int buf[100],temp;
//Variables pour la communication en WiFi
WiFiClient cli;
PubSubClient mqttClient(cli);
const char* ssid = le votre; // le nom de votre point wifi
const char* password = le votre; // Mot de passe du point Wifi
const char* mqttServer = le votre; // l'adresse IP serveur MQTT
const int mqttPort = 1883;
/*Constantes de temps*/
static const uint32_t DELAI_1_S = 1000;
static const uint32_t DELAI_1_M = 60 * DELAI_1_S;
static const uint32_t DELAI_1_H = 60 * DELAI_1_M;
//Initialisation du programme
void setup(void)
{
Serial.begin(115200); //démarrage du moniteur série
WiFi.hostname("PH_METER_MQTT");
WiFi.begin(ssid,password);//Démarrage de la connection WiFi
while(WiFi.status() != WL_CONNECTED){ //Délai d'attente si la connexion n'est pas bonne
delay(500);
}
mqttClient.setServer(mqttServer,mqttPort);
Serial.println("pH meter experiment!");
}
//Boucle automatique
void loop(void)
{
static float pHValue,voltage;
for(int i=0;i<100;i++) //Prends 100 valeurs analogique pour faire une moyenne
{
buf[i]=analogRead(SensorPin);
//Serial.println(buf[i]);
delay(10);
}
for(int i=0;i<99;i++) //tri des valeurs analogique
{
for(int j=i+1;j<100;j++)
{
if(buf[i]>buf[j]){
temp=buf[i];
buf[i]=buf[j];
buf[j]=temp;
}
}
}
float avgValue=0.0;
for(int i=2;i<98;i++){ // prends 96 valeurs moyennes
avgValue+= buf[i];
}
avgValue = avgValue / 96.0;
voltage = avgValue * 5.0 / 1024.0;
pHValue = votre équation de courbe;
Serial.print("Voltage:");
Serial.print(voltage,2);
Serial.print(" pH value: ");
Serial.println(pHValue,2);
//Donneés pour MQTT
String contenu = "";
contenu += pHValue;
contenu += "-";
contenu += voltage;
char payload[11];
unsigned int len = contenu.length()+1;
contenu.toCharArray(payload,len);
//Envoi sur MQTT
if(mqttClient.connect("PH_METER_MQTT")){
Serial.println(payload);
mqttClient.publish("pH",payload);
mqttClient.loop();
}
delay(5 * DELAI_1_M);
}
Après que le Wemos ait reçu les données de la sonde, on cherche à les mettre sous forme de graphique.
Le Wemos envoie donc les données en WiFi vers un broker MQTT.
On utilise Node-RED pour récupérer les données envoyées au broker et ainsi nous pouvons jouer avec les données de la sonde.
Les données sont récupérées par les nodes de dashboard qui permettent de les afficher : des jauges pour le ph et le voltage en sortie de la sonde, ainsi qu'un graphe pour l'évolution de ces deux dernières.
On peut y associer une node 'file' pour enregistrer les données dans un fichier sur le serveur, ou une node de base de données pour y enregistrer les données choisies.
Chaque fois que vous finissez de configurer un node, cliquez sur Done.
ATTENTION : pour enregistrer vos modifications, cliquez sur Deploy.
MQTT in
MQTT in
Serveur local : add new mqtt-broker, puis cliquez sur le crayon à droite
Server : localhost
QoS : 2
Topic : pH
N'hésitez pas à connectez des nodes de debug, cela permet de savoir si vos données arrive bien et au bon format.
Pour voir les données là où vous avez connecté des debug, cliquez sur le petit insecte en haut à droite de l'écran, puis all nodes puis current flow pour voir le flux du flow sur lequel vous travaillez.
Function
Copiez-collez ceci dans la fonction:
var id = [];
id = msg.payload.split('-')
return{
payload:{
ph:parseFloat(id[0]),
voltage:parseFloat(id[1])
}
}
Gauge
Pour les jauges, prenez deux de ce node et connectez-les au mqtt-in et configurez-les de cette manière :
Group: créez un nouveau groupe
ui_tab : créez une nouvelle table
width(largeur) : à votre guise
name : celui que vous voulez
Type: gauge
Label: pH, voltage
Value format:
ph: {{msg.payload.ph.toFixed(2)}}
voltage: {{msg.payload.voltage.toFixed(2)}}
Echelle:
pH: 0 à 14, unité : pH
voltage: 0 à 10, unité : V
Change
Pour le pH, cliquez sur add en bas à gauche de Rules.
Mettez la première règle sur Set. Entrez topic, puis pH en-dessous.
Ajoutez une deuxième règle et mettez-la sur Move, entrez payload.ph dans le premier champ et payload dans le deuxième.
Faites un autre node change pour voltage et faites comme ci-dessus en mettant voltage à la place de ph.
Group: le même que celui des gauges
Type: line chart
axe Y: min = 0 , max = 14
Cochez la case enlarge points
Réglez le nombre de points max ou la durée représentée comme vous le souhaitez
L'intérêt de tout ceci est pour la visualisation des données. Node-RED permet ceci avec une interface utilisateur.
Pour y accéder, avec le moteur de recherche que vous voulez, tapez l'ip du serveur Node-RED, puis deux points, puis le numéro port puis /ui (XXX.XXX.XXX.XXX:YYYY/ui).
Pour mettre en forme l'interface utilisateur, retournez dans Node-RED
Cliquez sur les trois barres en haut à droite, allez dans View puis cliquez sur Dashboard.
En mettant le curseur sur le nom du groupe des jauges et du graphe, cliquez sur layout.
Sur la droite réglez la largeur de l'interface sur Width. Ensuite cliquez sur Done, puis sur Deploy et revenez dans le layout pour faire la mise en forme.