Surveillance en temps réel de piscine avec Arduino MKR1000 et Samsung ARTIK Cloud
Composants et fournitures
| Arduino MKR1000 | × | 1 |
| Fils de connexion (genériques) | × | 1 |
| pH-mètre DFRobot | × | 1 |
| Résistance 4,75 kΩ | × | 1 |
| Sonde de température | × | 1 |
Applications et services en ligne
- Samsung ARTIK Cloud pour IoT
- Arduino IDE
À propos du projet
I. Objectif
L'objectif principal est d'utiliser Samsung ARTIK Cloud pour surveiller les niveaux de pH et de température des piscines.
II. Configuration d'ARTIK Cloud
Étape 1 : Créer votre nouveau type de dispositif
Inscrivez-vous sur ARTIK Cloud. Allez sur le site développeur et créez un nouveau « device type ». Saisissez le nom d'affichage et le nom unique souhaités. Créez un nouveau manifeste : entrez le nom du champ et sa description. Cliquez sur Enregistrer, puis allez dans l'onglet « Activate Manifest » et cliquez sur le bouton « ACTIVE MANIFEST ». Votre type de dispositif est créé ! Créez maintenant l'application qui l'utilisera.
Étape 2 : Créer votre application
Naviguez vers « ARTIK Cloud Applications ». Cliquez sur « New Application ». Saisissez le nom souhaité et l'URL de redirection d'authentification (requise pour l'authentification des utilisateurs). Nous avons utilisé https://localhost/index/ comme exemple. Définissez les permissions de l'application en lecture/écriture, accédez à votre dispositif et sauvegardez. Félicitations, votre application est créée !
Étape 3 : Connecter votre dispositif
Allez dans « My Devices » et cliquez sur « Connect Another Device ». Sélectionnez votre type de dispositif créé précédemment et cliquez sur « Connect Device ». Accédez aux paramètres du dispositif connecté et notez les informations (Device ID, Device Token) nécessaires pour le programme. Une fois le matériel opérationnel, les graphiques afficheront les données.
III. Configuration matérielle des capteurs
Étape 1 : Connecter les capteurs de température et pH au MKR1000
Schéma de câblage :
- Temp GND → MKR1000 GND
- Temp OUT → MKR1000 Broche numérique 1
- Temp VCC → MKR1000 5V
- Résistance 4,7 kΩ entre Temp VCC et Temp OUT
- pH GND → MKR1000 GND
- pH OUT → MKR1000 Broche analogique 1
- pH VCC → MKR1000 5V
J'ai ajouté une prise jack audio pour faciliter le détachement du capteur de température (optionnel).
Étape 2 : Configurer les logiciels requis
Dans l'IDE Arduino, ajoutez la carte MKR1000 (Gestionnaire de cartes > recherchez « mkr1000 » > Installer). Installez les bibliothèques suivantes via le Gestionnaire de bibliothèques :
- ArduinoJson : pour envoyer des données JSON à ARTIK Cloud
- ArduinoHttpClient : pour la connexion à l'API
- OneWire : nécessaire pour lire l'entrée numérique du capteur de température
- DallasTemperature : bibliothèque requise pour le capteur de température Dallas
Étape 3 : Téléverser le programme
Branchez le MKR1000 sur votre PC. Téléchargez le code sur GitHub et modifiez les informations suivantes : vos identifiants WiFi (SSID/mot de passe), votre Device ID et Device Token ARTIK Cloud. Téléversez le code sur le MKR1000 et commencez la surveillance. Votre WiFi doit avoir une connexion Internet.
IV. Test sur le terrain
Nous avons testé le matériel sur des piscines privées, publiques et scolaires. La collecte de données auprès de ces piscines nous a permis d'analyser les capacités du matériel. Placez le MKR1000 et les capteurs dans une boîte étanche, loin de l'eau, pour surveiller la qualité de l'eau et l'ajuster en ajoutant les produits chimiques appropriés.
V. Résultats
J'espère que ce tutoriel aidera à construire votre propre dispositif DIY de surveillance de la qualité de l'eau de piscine. Puisse-t-il sensibiliser à la dégradation continue de la qualité de l'eau, souvent négligée au profit des équipements. Il vise aussi à rendre les tests de qualité d'eau plus efficaces sans gaspillage de ressources.
Bon bricolage ! :)
Code
Code Arduino MKR1000 (C/C++)
Téléversez ce code sur votre Arduino MKR1000. Disponible sur GitHub : https://github.com/imjeffparedes/iot-water-quality-artik
/******************** Code pour Water Quality Device Monitoring ********************/
#include <WiFi101.h>
#include <WiFiClient.h>
#include <ArduinoJson.h>
#include <ArduinoHttpClient.h>
#include <SPI.h>
#include <OneWire.h>
#include <DallasTemperature.h>
/** Initialisation capteur température **/
#define ONE_WIRE_BUS 1
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
/** Initialisation ARTIK Cloud REST **/
char server[] = "api.artik.cloud";
int port = 443;
char buf[200];
String deviceID = "votre_device_id_artik";
String deviceToken = "votre_device_token_artik";
/** Initialisation pH-mètre **/
#define SensorPin A1
#define Offset 0.00
#define samplingInterval 20
#define ArrayLength 40
int pHArray[ArrayLength];
int pHArrayIndex = 0;
int status = -1;
unsigned long millis_start;
/** Configuration WiFi **/
#define WIFI_AP "votre_ssid_wifi"
#define WIFI_PWD "votre_mot_de_passe_wifi"
WiFiSSLClient wifi;
HttpClient client = HttpClient(wifi, server, port);
void setup(void) {
millis_start = millis();
Serial.begin(9600);
startWifi();
}
void loop(void) {
// Acquisition température
float celsius = 0;
sensors.requestTemperatures();
celsius = sensors.getTempCByIndex(0);
sensors.requestTemperatures();
celsius = sensors.getTempCByIndex(0);
// Acquisition pH
static unsigned long samplingTime = millis();
static unsigned long printTime = millis();
static float pHValue, voltage;
if (millis() - samplingTime > samplingInterval) {
pHArray[pHArrayIndex++] = analogRead(SensorPin);
if (pHArrayIndex == ArrayLength) pHArrayIndex = 0;
voltage = avergearray(pHArray, ArrayLength) * 5.0 / 1024;
pHValue = 3.5 * voltage + Offset;
samplingTime = millis();
}
// Affichage série
Serial.println("===========================================");
Serial.println("Envoi de ces données JSON :");
Serial.println("data: { ");
Serial.print("ph: "); Serial.print(pHValue);
Serial.print(" , temp: "); Serial.print(celsius);
Serial.println("} ");
// Envoi vers ARTIK Cloud
String contentType = "application/json";
String AuthorizationData = "Bearer " + deviceToken;
int len = loadBuffer(celsius, pHValue);
Serial.println("Envoi temp: " + String(celsius) + " et ph: " + String(pHValue));
Serial.println("Envoi POST vers ARTIK Cloud API");
client.beginRequest();
client.post("/v1.1/messages");
client.sendHeader("Authorization", AuthorizationData);
client.sendHeader("Content-Type", "application/json");
client.sendHeader("Content-Length", len);
client.endRequest();
client.print(buf);
// Réponse
int statusCode = client.responseStatusCode();
String response = client.responseBody();
Serial.println("");
Serial.print("Status code: "); Serial.println(statusCode);
Serial.print("Response: "); Serial.println(response);
delay(1000);
}
void startWifi() {
Serial.println("Connexion MKR1000 au réseau...");
while (status != WL_CONNECTED) {
Serial.print("Tentative de connexion au SSID WPA: ");
Serial.println(WIFI_AP);
WiFi.begin(WIFI_AP, WIFI_PWD);
delay(10000);
status = WiFi.status();
}
}
double avergearray(int* arr, int number) {
int i, max, min;
double avg;
long amount = 0;
if (number <= 0) {
Serial.println("Erreur nombre pour moyennage !");
return 0;
}
if (number < 5) {
for (i = 0; i < number; i++) amount += arr[i];
avg = amount / number;
return avg;
} else {
if (arr[0] < arr[1]) { min = arr[0]; max = arr[1]; }
else { min = arr[1]; max = arr[0]; }
for (i = 2; i < number; i++) {
if (arr[i] < min) { amount += min; min = arr[i]; }
else if (arr[i] > max) { amount += max; max = arr[i]; }
else amount += arr[i];
}
avg = (double)amount / (number - 2);
}
return avg;
}
int loadBuffer(float temp, float ph) {
StaticJsonBuffer<200> jsonBuffer;
JsonObject& root = jsonBuffer.createObject();
root["sdid"] = deviceID;
root["type"] = "message";
JsonObject& dataPair = root.createNestedObject("data");
dataPair["temp"] = temp;
dataPair["ph"] = ph;
root.printTo(buf, sizeof(buf));
return root.measureLength();
}
Schémas
Connexion sur plaque d'essai du MKR1000 et des capteurs.
Processus de fabrication
- Naviguer dans le SaaS et le cloud : pourquoi une gestion méticuleuse des données est cruciale
- Élargir les horizons cloud : nouvelles zones, conteneurs, et stratégies multicloud
- Maîtriser la surveillance des applications cloud : insights pour les dirigeants IT
- Pourquoi Cloud Linux Boost la Sécurité, Stabilité et Performance en Hébergement Partagé
- Construire un capteur de température distant avec Raspberry Pi et Python – Guide étape par étape
- Centre Énergie Domestique : Surveillance panneaux solaires PV, thermiques et températures pièces avec Raspberry Pi et Moteino
- Contrôle de température brassage maison DIY : Surveiller et réguler avec Arduino
- Surveillance météo à distance avec Raspberry Pi 3 et PubNub
- Comment les solutions de surveillance de gaz améliorent la sécurité dans les environnements industriels et automobiles