WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

Station météorologique sur arduino


par Raphaël BOURGEAY
Université d'Aix-Marseille - DUT Réseaux et Télécommunications 2020
  

précédent sommaire

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

8.1.1 Carte Arduino

Le choix de la carte Arduino MKR1000 a été un choix, car elle possède tout ce dont on a besoin pour réaliser ce que l'on souhaite ici. Le module Wi-Fi intégré est ce qu'il y a de plus important, car une station météorologique est rarement connectée par câble, et que cela prend beaucoup de place.

Figure 9 : carte Arduino MKR1000 (source : reichelt elektronik)

8.1.2 Capteur de lumière

Nous utiliserons un LDR (Light Dependent Resistor) qui est une photorésistance, la résistance du capteur dépend de la quantité de lumière reçue. La variation de la lumière provoque une variation de la résistance.

Nous savons que le capteur de soleil est une résistance variable, donc nous pouvons convertir cette résistance en une tension.

DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 18

Figure 10 : capture d'écran réalisée sur Tinkercad

Caractéristiques techniques :

· Resistance de 50ohm à 2Mohm

· I[lux] = 10000 / (R[kÙ]*10) A (1.2)

· Tension maximale 320V

· Courant maximal 75mA

Figure 11 : photorésistance (source : alibaba)

8.1.3 Potentiomètre

Le potentiomètre sera ici utilisé car il est un capteur, qui peut varier comme on le désire. Il est composé d'une entrée, d'une sortie et d'une masse

Figure 12 : branchement d'un potentiomètre réalisé sur Tinkercad

DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 19

8.2 Arduino IDE

Dans ce projet, nous allons utiliser le logiciel Arduino IDE pour développer le programme qui contrôle le circuit électronique de la station météorologique. Ce programme est exécuté sur le microcontrôleur.

L'IDE Arduino permet :

· d'éditer du code.

· de compiler ce code dans le langage de l'Arduino.

· de communiquer avec la carte Arduino grâce au terminal.

Figure 13 : capture d'écran du logiciel

8.3 Configuration routeur internet

Cette configuration est très importante car elle permet aux périphériques externes (ordinateurs, modules GPRS... ) d'accéder au serveur web et au serveur TCP/IP.

Pour cela, nous allons ouvrir trois ports :

· Un pour le protocole FTP (File Transfert Protocol), pour contrôler le serveur à distance

· Un pour ouvrir la page web du port 1880

· Un pour le broker, qui réceptionne les données sur le port 1883

Pour ouvrir un port, il faut aller dans les paramètres de la Box internet, puis aller dans les paramètres NAT(Network Address Translation) où nous créons des nouvelles règles.

L'image suivante montre les ports ouverts dans le routeur.

DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 20

Figure 14 : capture d'écran de l'ouverture des ports du routeur

Remarque :

Il est préférable de choisir un autre port que celui de base pour le port externe, cela complique l'accès rapide aux ports internes pour les personnes mal intentionnées.

9 Problèmes rencontrés

Durant cette période exceptionnelle, il n'aura pas été très aisé de réaliser ce projet, cela est dû à certains problèmes comme :

· La livraison tardive du pack

· L'IUT ayant été fermé, la communication directe avec les professeurs était restreinte

Dans la réalisation du circuit, il y a aussi eu un problème comme suit :

· Le thermomètre ne fonctionne pas (semble être brûlé)

Pour résoudre ce problème, il a donc fallu utiliser un potentiomètre pour combler ce défaut.

DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 21

10 Conclusion générale

Un travail soutenu donne toujours de bons résultats. Cela nous satisfait car nous avons acquis une richesse de connaissances et de compétences en programmation logicielle et en conception matérielle.

Ce projet nous a permis de toucher plusieurs outils de développement, tels que

· Tinkercad pour la simulation de notre circuit

· Arduino IDE pour la programmation de notre microcontrôleur

Le côté pratique de ce projet nous a aidé à améliorer notre niveau en appliquant nos connaissances théoriques dans sa réalisation.

La plate-forme développée pour ce projet ressemble tous les unités techniques nécessaires pour mettre en place un système autonome, elles peuvent aussi être appliquées sur tout autre projet qui doit être contrôlé à distance comme les exploitations agricoles, les entreprises de pétrole et de gaz....

La technologie Wi-Fi permet d'envoyer et recevoir des données sans fil via un routeur à travers le réseau internet, nous avons bénéficié de cette technologie pour accéder à notre système à partir de n'importe quel endroit au monde et cette technologie peut être facilement intégrée dans le domaine industriel.

En outre, la technologie décrite ci-dessus nous amène à apprendre d'autres technologies comme les serveurs TCP/IP, les serveurs Web qui permettent d'accéder, d'afficher et de contrôler les systèmes à partir de n'importe quel endroit.

La combinaison des informations discutées nous a aidés à développer la plate-forme météorologique, mais nous n'arrêterons pas notre projet à ce point et pour la poursuite des travaux, nous proposons les améliorations suivantes:

· Optimiser la consommation d'énergie dans le circuit.

· Modifier le circuit électronique pour accepter des nouveaux capteurs sans modifier le système.

· Remplacez l'alimentation USB par une alimentation sur pile.

· Remplacez le serveur TCP/IP par des requêtes HTTP Post.

· Améliorer les rapports générés par l'application Web.

· Mise en place d'un système de caméra

DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 22

DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 23

11 Bibliographie / sources

Ouvrage

BENGHOZI, Pierre-Jean et al. L'internet des objets : quels enjeux pour l'Europe ? Les Editions de la MSH, 2009. 170p.

Codes

https://github.com/256dpi/arduino-mqtt

Article

GUILLEMIN, Patrick État de l'art sur l'Internet des Objets en Europe - L'IdO (IoT) en Europe. Innovation | Innovations technologiques. Aout 2018, Réf : TE8001V1. 20p

Document de thèse

GAILLARD, Guillaume. Opérer les réseaux de l'Internet des Objets à l'aide de contrats de qualité de service (Service Level Agreements), Thèse de doctorat : Lyon : INSA : 2016. 161p

Site web

https://www.hivemq.com/ https://www.github.com

Page web

https://hackernoon.com/a-detailed-guide-to-the-world-of-mqtt-bo1d63cay http://www.steves-internet-guide.com/mosquitto_pub-sub-clients/ https://blog.groupe-sii.com/le-protocole-mqtt-dans-liot/

Fichier en ligne

GUBBI, et al. Internet of Things (IoT): A vision, architectural elements, and future directions [en ligne], IoT Group. [Consulté le 22/06/2020] http://www.parkjonghyuk.net/lecture/2014-2nd-lecture/ubiquitous/salahe.pdf

Lily Trible, Internet of Things [consulté le 29/06/2020]

https://www.mindmeister.com/fr/1199107014/internet-of-things?fullscreen=1

Documentation

http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html

DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 24

12 Tutoriel

Ce premier tutoriel utilise le IoT cloud d'Arduino, tout d'abord, il vous faudra vous rendre à ce lien : https://create.arduino.cc/iot/ vous devrez créer un compte et vous n'aurez plus qu'à suivre les étapes pour l'enregistrement de la carte

Figure T1 : Montage sur la Breadboard / Figure T2 : Montage général

Par la suite vous arriverez sur une page comme celle-ci, où il ne restera plus qu'à ajouter les objets, pour les permissions, vous utiliserez RO pour un capteur et R&W pour un actionneur :

Figure T3 : Propriétés

Une fois les propriétés renseignées, une bonne partie du code se génère.

Code.ino

#define LED_PIN A2 #define LED_PIN2 A3

#define POTENTIOMETER_PIN A4

#define THERMOMETRE A5

#define PHOTOR A6

#include "thingProperties.h"

void setup() {

// Initialize serial and wait for port to open:

pinMode (LED_PIN, OUTPUT);

pinMode (LED_PIN2, OUTPUT);

Serial.begin(9600);

delay(1500);

initProperties();

ArduinoCloud.begin(ArduinoIoTPreferredConnection);

setDebugMessageLevel(2);

ArduinoCloud.printDebugInfo();

}

void loop() {

ArduinoCloud.update();

int potence = analogRead(POTENTIOMETER_PIN); potentio = map(potence, 0, 1023, 0, 1000);

int photores = analogRead(PHOTOR); resistancephoto = map(photores, 0, 1023, 0, 1000);

int thermo = analogRead(THERMOMETRE);

float temperature_celcius = thermo * (5.0 / 1023.0 * 100.0); thermometre = map(temperature_celcius, 0, 60, 0, 1); }

void onThingChange() {

digitalWrite(LED_PIN, thing); Serial.print("The thing is ");

if(thing){

Serial.println("ON");

}else {

Serial.println("OFF");

}

}

void onThing2Change() {

digitalWrite(LED_PIN2, thing2);

Serial.print("The thing is ");

if(thing2){

Serial.println("ON");

}

else {

Serial.println("OFF");

}

}

DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 25

thingProperties.h

#include <ArduinoIoTCloud.h>

#include <Arduino_ConnectionHandler.h>

const char THING_ID[] = "52b35df3-e5c1-4e5d-932f-c8f20d9024ce";

const char SSID[] = SECRET_SSID; // Network SSID (name)

const char PASS[] = SECRET_PASS; // Network password (use for WPA, or use as key for WEP)

void onThingChange(); void onThing2Change();

CloudTemperature thermometre;

int potentio;

int resistancephoto;

bool thing;

bool thing2;

void initProperties(){

ArduinoCloud.setThingId(THING_ID);

ArduinoCloud.addProperty(thermometre, READ, ON_CHANGE, NULL); ArduinoCloud.addProperty(potentio, READ, ON_CHANGE, NULL, 10); ArduinoCloud.addProperty(resistancephoto, READ, ON_CHANGE, NULL, 10);

ArduinoCloud.addProperty(thing, READWRITE, ON_CHANGE, onThingChange);

ArduinoCloud.addProperty(thing2, READWRITE, ON_CHANGE, onThing2Change);

}

WiFiConnectionHandler ArduinoIoTPreferredConnection(SSID, PASS);

DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 26

Figure T4 : dashboard illustrant une journée (soleil, lumières éteintes)

Figure T4 : dashboard illustrant la nuit (lune, lumières allumées

DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 27

Il suffit ensuite de créer le dashboard avec les elements à selectionner.

Figure T6 : installation de mosquitto

Figure T7 : installation de mosquitto-clients

Figure T8 : installation de paho-mqtt

Figure T5 : mise à jour des paquets

DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 28

Figure T10 : modification du code pour la sécurisation

Figure T9 : test de l'envoi de données

DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 29

Figure T11 : création d'un mot de passe : ici « raph »

Figure T12 : test de l'envoi de données avec sécurité

Figure T13 : installation de Node-Red

Figure T14 : installation du paquet node-red-admin (pour avoir un mot de passe sur l'interface)

Figure T15 : génération d'un mot de passe crypté pour Node-Red (ici « raph »)

DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 30

Figure T16 : sécurisation de Node-Red

Figure T17 : interface d'entrée à Node-Red accessible via AdresseIp/PortNode-Red

DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 31

Figure T18 : interface de création de l'interface graphique

DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 32

Figure T19 : Menu

Figure T20 : installation de la palette dashboard

DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 33

Figure T21 : apparition de la palette dashboard

Dans la palette network, choisir « mqtt in »

Figure T22 : renseignement du serveur (avec port du broker) et du topic

Et brancher en sortie un noeud « debug », dans la catégorie common

Figure T23 propriétés du noeud debug

DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 34

DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 35

Figure T24 : reception des données

Il ne vous reste qu'à utiliser les différents noeuds disponibles pour votre interface graphique

Figure T25 : mise en forme des données

DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 36

Interface graphique accessible via AdresseIp:PortNode-Red/ui (UI : User Interface)

Figure T26 : interface graphique

Code à utiliser :

// Identifiant de connection au point d'acces Wi-Fi local

#define SSID L "Nom de la box" // Nom du réseau Wi-Fi
_

#define MOT_DE_PASSE_L "Mot de passe" // Mot De Passe du réseau Wi-Fi

// Adresse IP et port du serveur MQTT

#define ADRESSE_IP_SERVEUR_MQTT "adresse x.x.x.x" #define PORT_SERVEUR_MQTT 1883

// Identifiants MQTT

#define mqtt_user "nom d'utilisateur" // Si configuré sur le Broker !
#define mqtt_password "mot de passe" // Si configuré sur le Broker !

// Déclaration des bibliothèques utilisées

#include <WiFi101.h> #include <MQTT.h>

#include <PubSubClient.h>

// Définition des constantes globales

int led_Bleu = 7;

#define PORT_LED_INTERNE 6 // Numéro de port auquel est

branchée la LED interne.

// Déclaration globales

WiFiClient ClientWiFi; // Déclaration de notre Client Ethernet pour la connexion au serveur MySQL

MQTTClient ClientMqtt; // Déclaration de notre Client pour la
connexion au serveur Myqtt

PubSubClient client(ClientWiFi);

long lastMsg = 0;

int value = 0;

char message_buff[100];

// Fonction appelée lors de la réception d'un topic + traitement du payload: void callback(char* topic, byte* payload, unsigned int length)

{

int i = 0;

Serial.print("Message reçu [");

Serial.print(topic);

String topic2 = String(topic);

Serial.println("] ");

// Traitement du payload, on le transforme en String.

for (i = 0; i<length; i++)

{

message_buff[i] = payload[i];

}

message_buff[i] = '\0';

String msgString = String(message_buff);

Serial.println("Payload: " + msgString);

if (topic2 == "raph/switchBleu") // LED bleue, il faudra rajouter

{ // cette condition pour chaque LED
if (msgString == "ON") {

digitalWrite(led_Bleu, HIGH);

}

else {

digitalWrite(led_Bleu, LOW); }

}

}

//Connexion to WiFi: void setup_wifi() { delay(10);

Serial.println();

Serial.print("Connexion à "); Serial.println(SSID_L);

WiFi.begin(SSID_L, MOT_DE_PASSE_L);

while (WiFi.status() != WL_CONNECTED) { delay(500);

Serial.print(".");

}

Serial.println("");

Serial.println("Connexion WiFi établie "); Serial.print("=> Adresse IP : "); Serial.println(WiFi.localIP());

}

void reconnect() {

// Boucle de reconnxion tant que l'on est pas connecté

while (!client.connected()) {

Serial.print("En attente de la connexion au serveur MQTT...");

// On attend la connection, mqtt_user et mqtt_password si configuré sur le

Broker !

if (client.connect("raph", mqtt_user, mqtt_password)){ //

DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 37

DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 38

Serial.println("connected");

// Une fois connectée, on souscrit aux différents topics: client.subscribe("raph/switchBleu"); //à répéter pour chaque switch

}

else {

Serial.print("erreur, rc=");

Serial.print(client.state());

Serial.println(" nouvel essai dans 5 secondes");

// On attend 5 secondes pour essayer de se reconnecter au Broker

delay(5000);

}

}

}

void setup()

{

Serial.begin(115200);

setup_wifi(); //Connexion au wifi

client.setServer(ADRESSE_IP_SERVEUR_MQTT, 1883); //Connexion au serveur MQTT, port à changer selon votre cas

client.setCallback(callback);

delay(5000);

pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, LOW);

// Configuration des pins Arduino en sortie: pinMode(led_Bleu, OUTPUT); //pour chacun

}

void loop()

{

if (!client.connected()) {

reconnect();

}

client.loop();

long now = millis();

if (now - lastMsg > 5000) // toute les 5 secondes on envoie les mesures au Broker

{

char t[10];

lastMsg = now;

++value;

// On envoie les mesures au Broker:

float potence;

int potentio = analogRead(A1);

float pontence = potentio;

client.publish("raph/potence", String(potence).c_str());

int photo = analogRead(A6);

float photor = photo;

client.publish("raph/photor", String(photor).c_str());

Serial.println("Publication des messages des capteurs");

}

}

précédent sommaire






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"Le don sans la technique n'est qu'une maladie"