LA LIAISON ENTRE UN
MODEM RTU ET UNE CARTE
ARDUINO
Réaliser par : ERRIDANI FATIMA-ZAHRA
AIT HADDOU FATIMA EZZAHRA
FATNA CHARAFI
HAYAT CHARAFI
ABDELKARIM IDAABELLA
MICHAEL NGOR ATEM AKOY
Détails sur
les Spécifications
Fonctionnalités Schéma deProtocoles
Techniques
Principales Matériel Câblage
Utilisé Schéma
Objectif
Général du
Projet Code de
programme
Définition
01 Arduino protocole Modbus
RTU
02
L’Arduino est une plateforme Modbus RTU (Remote Terminal Unit)
électronique open-source composée
est un protocole de communication
de deux éléments principaux :
série Modbus conçu pour les systèmes
Une carte électronique équipée d’un
d'automatisation industrielle.
microcontrôleur programmable.
Il facilite notamment l'échange de
Un environnement de
données entre divers dispositifs, tels
développement intégré (IDE)
que des capteurs, des actionneurs et
permettant de créer, charger et
des contrôleurs, connectés à un canal
exécuter du code sur cette carte.
de communication partagé.
les modes de communication Modbus
Modbus RTU fonctionneRTU :
principalement en mode
maître/esclave. Dans ce mode, un appareil maître initie
toutes les communications avec les esclaves, qui
répondent uniquement aux requêtes. Ce mécanisme
unidirectionnel garantit des temps de réponse
déterministes et convient aux systèmes centralisés
nécessitant une gestion simple et fiable des dispositifs.
Bien que Modbus RTU soit conçu pour le mode
maître/esclave, le mode client/serveur est davantage
utilisé avec Modbus TCP/IP. Ce mode permet une
communication bidirectionnelle, axée sur les événements
et offre une évolutivité pour des systèmes plus
complexes nécessitant des échanges dynamiques entre
les appareils.
Module de conversion d’interface UART TTL – RS-485 basé
sur la puce MAX485 est un outil essentiel pour établir des
communications série fiables entre des dispositifs Arduino et
d’autres équipements industriels utilisant le protocole RS-
485. Ce projet vise à expliquer en détail comment utiliser ce
module avec Arduino, en fournissant des instructions étape
par étape pour la mise en place d’une communication
bidirectionnelle .
1. Objectif Général du Projet:
Concevoir un système à base d'Arduino
Uno permettant de contrôler l'éclairage de
LEDs via un module GSM (SIM900D). Les
commandes sont envoyées par l'utilisateur
sous forme de messages texte (à l'aide de
commandes AT), et le système exécute
différents modèles d'allumage ou éteint
toutes les LEDs selon la commande reçue.
2. Fonctionnalités Principales:
Modes d'éclairage des LEDs :
Mode 1 (‘a’) : Animation lumineuse où les LEDs s'allument
une par une en séquence.
Mode 2 (‘b’) : Animation lumineuse inverse (de la dernière
LED à la première).
Mode 3 (‘c’) : Animation alternée avec des paires de LEDs.
Extinction totale (‘d’) : Toutes les LEDs sont éteintes.
Envoi de messages SMS : Le système confirme chaque
action en envoyant un SMS via le module SIM900D.
Réception de commandes via GSM : Les commandes sont
transmises à l'Arduino via un terminal série ou par SMS.
3. Matériel Utilisé:
Arduino Uno :
Alimentation externe recommandée :
01 Microcontrôleur ATmega328P pour gérer la 02
4,2V à 5V.
logique du système et les connexions série.
LEDs : 6 LEDs (D1 à D6) pour l'affichage
lumineux.
03 Tension de fonctionnement : 5V. 04
Couleurs variées (bleue, jaune, rouge).
Connectées aux broches 4 à 9 de l’Arduino
Module GSM SIM900D : Communication
GSM/GPRS pour envoyer et recevoir des Résistances : Valeur : 220 ohms.
05 SMS. 06
Utilisées pour limiter le courant à
Connecté à l’Arduino via les broches 12 travers chaque LED.
(RX) et 13 (TX) (SoftwareSerial).
Câblage : Fils de connexion pour relier
07 les [Link] externe
pour le module SIM900D.
4. Schéma de Câblage (Basé sur Proteus)
Connexion du Module GSM (SIM900D) :
TX (SIM900D) → Broche 12 (RX Arduino).
RX (SIM900D) → Broche 13 (TX
Arduino).
Alimentation : Une source externe (4,2V à 5V).
Connexion des LEDs :
LED1 → Broche 4 (via une résistance de 220 Ω).
LED2 → Broche 5 (via une résistance de 220 Ω).
LED3 → Broche 6 (via une résistance de 220 Ω).
LED4 → Broche 7 (via une résistance de 220 Ω).
LED5 → Broche 8 (via une résistance de 220 Ω).
LED6 → Broche 9 (via une résistance de 220 Ω).
Connexion Série :
Moniteur série Arduino (USB) pour le débogage.
Communication SoftwareSerial pour le module GSM.
5. Détails sur les Protocoles Utilisés:
Communication Série avec SoftwareSerial :
Vitesse de transmission : 9600 bauds.
Utilisée pour communiquer entre l’Arduino et le module
SIM900D.
Commandes AT (Module SIM900D) :
AT+CMGF=1 : Configuration du module en mode texte pour
les SMS.
AT+CMGS="xxxxxxxxxxx" : Envoi d’un SMS au numéro
spécifié.
ATD+xxxxxxxxxx: : Commande pour effectuer un appel
(option non activée dans ce projet).
[Link]écifications Techniques:
Tension de fonctionnement :
Arduino Uno : 5V (via USB ou source externe).
SIM900D : 4,2V à 5V (source externe).
Consommation de courant :
LEDs : Courant limité à 20 mA par LED grâce aux
résistances.
Module GSM : Consommation maximale pendant l’émission
(jusqu’à 2A).
Sécurité :
Ajouter des condensateurs découplants pour stabiliser
l’alimentation du module GSM.
7. Schéma du câblage:
8. Code de programme:
#include <SoftwareSerial.h>
int ledPin = 4; // Définition des broches des LEDs.
int led1Pin = 5;
int led2Pin = 6;
int led3Pin = 7;
int led4Pin = 8;
int led5Pin = 9;
SoftwareSerial mySerial(12,13);// Création d'un port série logiciel sur les
broches 12 (RX) et 13 (TX)
void setup()
{
[Link](9600);// le module GSM à 9600 bauds
[Link](9600);// le moniteur série pour le débogage
pinMode(4, OUTPUT);// Définition des broches des LEDs comme sorties.
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
delay(100);// Pause
}
void loop()
{
if ([Link]()>0)// Vérifie si une commande est reçue via le moniteur série
switch([Link]())
{
case 'a':
SendMessage();// Envoie le message pour le premier modèle de LED.
break;
case 'b':
SendMessage1();// Envoie le message pour le deuxième modèle de LED.
break;
case 'c' :
SendMessage2();
break;
case 'd':
EndMessage();// Arrête les LEDs et effectue une action finale.
break;
}
if ([Link]()>0)// Vérifie si une réponse est reçue du module GSM
[Link]([Link]());// Transmet la réponse au moniteur série.
}
void SendMessage()
{ [Link]("AT+CMGF=1");// Configure le module GSM en mode texte.
delay(100);
[Link]("AT+CMGS=\"xxxxxxxxxxx\"\r"); //l'envoi d'un SMS au numéro
spécifié.
delay(100);
[Link]("Control LED with GSM ");
[Link]("The First Pattern");// Contenu du SMS.
delay(100);
[Link]((char)26);// Caractère spécial pour envoyer le SMS.
delay(100);
digitalWrite(4, HIGH);// Allume les LEDs dans un premier motif.
digitalWrite(5, LOW);
digitalWrite(6,LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9,LOW);
delay(100);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9,LOW);
delay(100);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
digitalWrite(9,LOW);
delay(100);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9,LOW);
delay(100);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9,HIGH);
delay(100);}
void SendMessage1()
{[Link]("AT+CMGF=1");// Mode texte.
delay(100);
[Link]("AT+CMGS=\"xxxxxxxxxxx\"\r"); // Envoi au numéro spécifié.
delay(100);
[Link]("Control LED with GSM ");
[Link]("The Second Pattern");// Contenu différent pour indiquer un autre
motif.
delay(100);
[Link]((char)26);
delay(100);
digitalWrite(4, LOW);// Nouveau motif d'allumage des LEDs.
digitalWrite(5, LOW);
digitalWrite(6,LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
delay(100);
}
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9,LOW);
delay(100);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
digitalWrite(9,LOW);
delay(100);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9,LOW);
delay(100);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9,LOW);
delay(100);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9,LOW);
delay(100);
}
void SendMessage2()
{
[Link]("AT+CMGF=1");
delay(100);
[Link]("AT+CMGS=\"xxxxxxxxxxx\"\r");
delay(100);
[Link]("Control LED with GSM ");
[Link]("The Third Pattern");
delay(100);
[Link]((char)26);
delay(100);
digitalWrite(4, HIGH);// Motif mixte d'allumage des LEDs.
digitalWrite(5, LOW);
digitalWrite(6,LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9,HIGH);
delay(100);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9,LOW);
delay(100);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
digitalWrite(9,LOW);
delay(100);
}
void EndMessage()
{
[Link]("ATD+xxxxxxxxxx:"); // Commande (non activée dans le projet)
pour effectuer un appel
[Link]("Lights Off");// Message pour indiquer la fin.
delay(100);
digitalWrite(4, LOW);// Éteint toutes les LEDs
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9,LOW);
delay(100);}
Conclusion:
Ce programme permet à un Arduino de contrôler un module
GSM SIM900 pour envoyer des SMS, tout en pilotant des
LEDs dans différents motifs. Les commandes reçues via le
moniteur série déclenchent des actions spécifiques. Points
forts : Utilisation claire du SoftwareSerial, gestion des LEDs
par motifs, et compatibilité GSM.
Merci à votre
attention