ISET SILIANA
DEPARTEMENT GE
Formation sur :
ARDUINO
ASKRI Tahar
Avril 2017
1
PLAN
Introduction
Clignotement LED
Afficheurs LCD
Grandeurs analogiques
Communication série RS232
Commande MCC par cales
Commande MCC par Wifi
Commande MCC par GSM 2
INTRODUCTION
Electronique Embarquée : Electronique +Programmation.
unir la puissance de la programmation à
la puissance de l'électronique.
Arduino : outil qui va permettre aux débutants, amateurs ou
professionnels de créer des systèmes électroniques plus ou
moins complexes.
ASKRI Tahar 3
Applications
• Contrôler les appareils domestiques.
• Fabriquer votre propre robot.
• Faire un jeu de lumières.
• Communiquer avec l'ordinateur.
• Télécommander un appareil mobile.
• Les applications de commande.
• etc.
ASKRI Tahar 4
Les bonnes raisons de choisir Arduino
Le prix :
45-50DT
La liberté :
• Logiciel open source : gratuit.
• Le matériel : cartes électroniques dont les schémas
sont en libre circulation sur internet.
La compatibilité :
compatible sous les plateformes les plus courantes
(Windows, Linux et Mac).
Facilité d’utilisation :
• Pas besoin de souder , de programmateur de
microcontrôleur.
ASKRI Tahar 5
Les outils Arduino : Le matériel
carte électronique basée autour d'un microcontrôleur
Atmega du fabricant Atmel
ASKRI Tahar 6
Outils Arduino: Le logiciel
Le logiciel va nous
permettre de programmer
la carte Arduino.
ASKRI Tahar 7
Les différentes cartes
Carte ‘’Uno ’’
carte Arduino "Mega"
ASKRI Tahar 8
Arduino Uno : Constitution
Mémoire programme : 32ko de type Flash : conserve son
continu.
Mémoire de données : 2ko : oublie son contenu pour données.
EEPROM : 1ko.
les entrées/sorties
- 14 E/S numériques de 0 à 13. (tension : 0 à 5v, courant
max=40mA).
(0:RX, 1:TX, 2,3:interruptions, 3,5,6,9,1,11: sorties PWM…)
-6 E/S analogiques A0 à A5.
Convertisseur analogique numérique 10 bits.
Bus I2C avec 2 lignes SDA et SCL.
Alimentation : par USB ou externe.
Horloge : quartz à 16 MHz.
2 tensions générées 5V et 3.3V.
9
Poussoir de reset manuel.
Le logiciel : Installation
pas besoin d’installer le logiciel
Arduino sur votre ordinateur: Portable
-1 : ce sont les options de configuration
du logiciel.
-2 : il contient les boutons qui vont nous
servir lorsque l'on va programmer nos
cartes.
-3: ce bloc va contenir le programme
que nous allons créer.
-4 : celui-ci est important, car il va nous
aider à corriger les fautes dans notre
programme. C'est le débogueur.
ASKRI Tahar 10
Le logiciel : Les boutons
-1 : Ce bouton permet de vérifier le
programme, il actionne un module
qui cherche les erreurs dans votre
Programme.
-2 : Créer un nouveau fichier.
-3 : Sauvegarder le programme en -5 : Stoppe la vérification.
cours.
-6 : Charger un programme
-4 : On n'y touche pas pour existant.
l'instant.
-7 : Compiler et envoyer le
programme vers la carte.
ASKRI Tahar 11
Présentation de la carte
-1: Microcontrôleur
-2: Alimentation par port
USB 5V.
-3: Alimentation externe 7-
12V : un régulateur interne
se charge de la rendre 5V.
-4: Visualisation par 3
LEDs. La haute pour tester
la carte et les deux autres
pour l’activité du port série
E et R.
-5 : La connectique en 5a et
5b.
ASKRI Tahar 12
Tester la carte (1)
1ère étape : ouvrir un
programme
Nous allons choisir un exemple
tout simple qui consiste à faire
clignoter une LED. Son nom est
Blink et vous le trouverez dans la
catégorie Basics.
ASKRI Tahar 13
Tester la carte(2)
2e étape
Avant d'envoyer le programme
Blink vers la carte, il faut dire au
logiciel quel est le nom de la carte
et sur quel port elle est branchée.
Choisir la carte que l'on va
programmer.
Il s'agit de la carte "Uno". Allez
dans le menu "Tools" ("outils" en
français) puis dans "Board "
("carte" en français). Vérifiez que
c'est bien le nom "Arduin Uno" qui
est coché. Si ce n'est pas le cas,
cochez-le.
ASKRI Tahar 14
Tester la carte(3)
Choisissez le port de connexion de
la carte.
Allez dans le menu Tools, puis
Serial port. Là, vous choisissez le
port COMX, X étant le numéro du
port qui est affiché. Ne choisissez
pas COM1 car il n'est quasiment
jamais connecté à la carte. Dans
mon cas, il s'agit de COM5 :
Dernière étape
envoyer le programme dans la carte. Pour ce faire, il suffit de cliquer
sur le bouton Upload (ou"Télécharger" en Français), en jaune-orangé
sur la photo. :
ASKRI Tahar 15
Tester la carte(4)
Le message affiché : "Done uploading " signale que
le programme a bien été chargé dans la carte. Si
votre matériel fonctionne, vous devriez avoir une LED
sur la carte qui clignote :
En bas dans l'image, vous voyez le texte : "Uploading
to I/O Board...", cela signifie que le logiciel est en
train d'envoyer leprogramme dans la carte. Une fois
qu'il a fini, il affiche un autre message.
ASKRI Tahar 16
Ajouter la librairie Arduino à Porteus
Copier les deux fichiers ArduinoTEP.LIB et ArduinoTEP.IDX.
Placer les deux fichiers dans la librairie de Porteus.
Pour PORTEUS 7 : C:\Program Files(x86)\Labcenter Electronics\Proteus 7 Professional\LIBRARY
POUR PORTEUS 8 : C:\ProgramData\LabcenterElectronics\Proteus 8 professional\Data\LIBRARY
ouvrir Isis et dans la section compenent chercher ArduinoTEP.
Faites vos circuits, Ecrire vos programmes, les compiler et ajouter le fichier .hex
à Arduino et enfin simuler vos programmes.
ASKRI Tahar 17
LED : contraintes
C'est un composant électronique qui crée de la
lumière quand il est parcouru par un courant
électrique(A->K).
Pour une LED, l’intensité du courant qui la
traverse est I=20mA
V VD 5 1.2
R 190
I 20 *10 3
On utilise une résistance de 220Ω
ASKRI Tahar 18
Boutons : contraintes
un bouton n'est jamais qu'un fil qui est connecté ou non selon sa position.
-perturbations (des lampes à proximité, un téléphone portable, un doigt sur le circuit, l'électricité
statique, ...).
on place en série avec le bouton une résistance de pull-up.
-Les boutons ne sont pas des systèmes mécaniques parfaits. Du coup, lorsqu'un appui est fait
dessus, le signal ne passe pas immédiatement et proprement de 5V à 0V.
Pour atténuer ce phénomène, nous allons utiliser un
condensateur en parallèle avec le bouton. Ce composant servira
ici"d'amortisseur" qui absorbera les rebonds
ASKRI Tahar 19
Application 1 : Faire clignoter LED
ASKRI Tahar 20
clignoter LED : programme
• pinMode(pin,type): initialisation de la broche. le type est OUTPUT
ou INPUT.
• digitalWrite (pin,valeur) : pin = valeur cad 0 ou 1= HIGH ou LOW.
• delay(t) : créer une temporisation de t ms.
Void setup() //fonction initialisation tourne une seule fois
{
pinMode(2, OUTPUT); //broche 2 sortie
}
Void loop() //boucle tourne à l’infini
{
digitalWrite(2, LOW); //éteindre LED
delay(1000); //pause 1s
digitalWrite(2, HIGH); //allumer LED
delay(1000); //pause 1s
}
ASKRI Tahar 21
allumer LED avec bouton(1)
ASKRI Tahar 22
allumer LED avec bouton(2)
const int bouton = 2; //le bouton est connecté à la broche 2 de la carte Adruino
const int led = 13; //la LED à la broche 13
int etatBouton; //variable qui enregistre l'état du bouton
void setup()
{
pinMode(led, OUTPUT); //la led est une sortie
pinMode(bouton, INPUT); //le bouton est une entrée
etatBouton = HIGH; //on initialise l'état du bouton comme "relaché"
}
void loop()
{
etatBouton = digitalRead(bouton); //Rappel : bouton = 2
if(etatBouton == HIGH) //test si le bouton a un niveau logique HAUT
{
digitalWrite(led,HIGH); //la LED reste éteinte
}
else //test si le bouton a un niveau logique différent de HAUT (donc BAS)
{digitalWrite(led,LOW); //le bouton est appuyé, la LED est allumée}
} 23
Afficheur LCD
Brochage
LCD ARDUINO
4/RS 7
6 /E 8
Mode 4 bits
11/D4 9
12/D5 10
13/D6 11
14/D7 12 24
Afficheur LCD: Le démarrage de l'écran
LiquidCrystal(rs, enable, d4, d5, d6, d7) où rs est le numéro de la broche
où est branché "RS", "enable" est la broche "E" et ainsi de suite pour les données.
#include "LiquidCrystal.h" //ajout de la librairie
//Vérifier les broches !
LiquidCrystal lcd(7,8,9,10,11,12); //liaison 4 bits de données
int mavariable = 42;
void setup()
{
lcd.begin(16,2); //utilisation d'un écran 16 colonnes et 2 lignes
lcd.setCursor(0,0); //place le curseur aux coordonnées (0,0)
lcd.write("ISET Siliana"); //petit test pour vérifier que tout marche
lcd.setCursor(0,1); //place le curseur aux coordonnées (0,0)
lcd.print(mavariable);
}
void loop()
{}
ASKRI Tahar 25
Afficheur LCD: Gérer l'affichage
#include <LiquidCrystal.h> //on inclut la librairie
// initialise l'écran avec les bonnes broches
LiquidCrystal lcd(7,8,9,10,11,12);
void setup()
{
lcd.begin(16, 2); // règle la taille du LCD
lcd.print(‘’ ISET Siliana!");
}
void loop()
{
lcd.noDisplay(); //fait disparaître le texte le texte est bien stocké en mémoire
delay(500);
lcd.display(); //fait apparaître le texte (s'il y en a évidemment)
delay(500);
}
ASKRI Tahar 26
Afficheur LCD: Animer l'affichage
#include <LiquidCrystal.h> //on inclut la librairie
LiquidCrystal lcd(7,8,9,10,11,12);
char message[29]="ISET SILANA ARDUINO";
int i;
void setup()
{
lcd.begin(16, 2);
}
void loop()
{
lcd.setCursor(14,0);
lcd.leftToRight(); //indique que le texte doit être déplacer vers la gauche
lcd. autoscroll() ; //rend automatique ce déplacement
for(i=0; i<19; i++)
{
lcd.print(message[i]);
delay(500);
}
27
}
Horloge avec afficheur LCD(1)
#include <LiquidCrystal.h> //on inclut la librairie
// initialise l'écran avec les bonnes broches
// ATTENTION, REMPLACER LES NOMBRES PAR VOS BRANCHEMENTS À VOUS !
LiquidCrystal lcd(7,8,9,10,11,12);
int heures,minutes,secondes;
char message[16] = "";
void setup()
{
lcd.begin(16, 2); // règle la taille du LCD : 16 colonnes et 2 lignes
//changer les valeurs pour démarrer à l'heure souhaitée !
heures = 0;
minutes = 0;
secondes = 0;
}
ASKRI Tahar 28
Horloge avec afficheur LCD(2)
void loop()
{
if(secondes == 60) //une minutes est atteinte ?
{ secondes = 0; //on recompte à partir de 0
minutes++; }
if(minutes == 60) //une heure est atteinte ?
{ minutes = 0;
heures++; }
if(heures == 24) //une journée est atteinte ?
{ heures = 0; }
//met le message dans la chaine à transmettre
sprintf(message,"Il est %2d:%2d:%2d",heures,minutes,secondes);
lcd.home(); //met le curseur en position (0;0) sur l'écran
lcd.write(message); //envoi le message sur l'écran
delay(1000); //attend une seconde
secondes++;
}
29
Les grandeurs analogiques
Convertisseur analogique numérique 10 bits donc on a 210 valeurs possibles
Pas de calcul :
analogRead(pin): lire la valeur lue sur une entrée analogique de l'Arduino.
•L'argument est le numéro de l'entrée analogique.
•La valeur retournée (un int) sera le résultat de la conversion analogique->
numérique.
la valeur réelle : valeur retournée*pas de conversion
ASKRI Tahar 30
Application : voltmètre
On veut mesurer la tension aux bornes d’un
potentiomètre et envoyer la valeur sur le port série.
ASKRI Tahar 31
Programme : voltmètre
const int potar = 0; // le potentiomètre, branché sur la broche analogique 0
int valeurLue; //variable pour stocker la valeur lue après conversion
float tension; //on convertit cette valeur en une tension
void setup()
{
Serial.begin(9600);
}
void loop()
{
valeurLue = analogRead(potar); //on convertit en nombre la tension lue
tension = valeurLue * 5.0 / 1024; //on traduit la valeur brute en tension
Serial.print("valeurLue = "); //on traduit la valeur brute en tension (produit en croix)
Serial.println(valeurLue); //on affiche la tension calculée
Serial.print("Tension = ");
Serial.print(tension,2);
Serial.println(" V");
Serial.println(); //on saute une ligne entre deux affichages
delay(500); //on attend une demi-seconde pour que l'affichage ne soit pas trop rapide
} ASKRI Tahar 32
Capteur de température numérique
Supposons que le potentiomètre est un capteur
de température de 0 à 100°C.
AFFICHER LA VALEUR DE LA TEMPERATURE SUR L’AFFICHEUR LCD?
ASKRI Tahar 33
Communication série : RS232(1)
Port série:DB9
1. DCD : Détection d'un signal sur la ligne. Utilisée uniquement pour la
connexion de l'ordinateur à un modem ; détecte la porteuse.
2. RXD : Broche de réception des données.
3. TXD : Broche de transmission des données.
4. DTR : Le support qui veut recevoir des données se déclare prêt à "écouter"
l'autre.
5. GND : Le référentiel électrique commun ; la masse.
6. DSR : Le support voulant transmettre déclare avoir des choses à dire.
7. RTS : Le support voulant transmettre des données indique qu'il voudrait
communiquer.
8. CTS : Invitation à émettre. Le support de réception attend des données.
9. RI : Très peu utilisé, indiquait la sonnerie dans le cas des modems RS232.
ASKRI Tahar 34
Communication série : RS232(2)
La gestion des erreurs : Bit de parité
Contrôle de flux
Si les dispositifs communicant entre eux par l'intermédiaire de la liaison série ne traitent pas les
données à la même vitesse.
Contrôle de flux logiciel
ce contrôle de flux utilise des caractères de la table ASCII, le caractère 17 et 19, respectivement
nommés XON et XOFF.
le récepteur envoie le caractère XOFF pour indiquer à l'émetteur qu'il sature.
Lorsqu'il est à nouveau apte à traiter les informations, il envoie le caractère XON pour dire à
l'émetteur qu'il est à nouveau prêt à écouter ce que l'émetteur à a lui dire.
Contrôle de flux matériel
ASKRI Tahar 35
Communication série : RS232(2)
deux cartes Arduino
l'ordinateur et la carte Arduino
La liaison série entre la carte Arduino et
l'ordinateur est établie à travers le port USB. En
fait, ce port USB n'est pas utilisé avec le
protocole USB, mais avec celui de la liaison
série !
l'ordinateur utilise des niveaux de -12V à +12V
Arduino apprécie énormément les tensions de
0V ou 5V (que l'on appelle niveau "TTL").
Adaptation de niveau : un composant est
placé entre les deux supports.
une carte Arduino et un autre Avec Arduino lorsque vous branchez la carte
micro contrôleur sur votre USB d'ordinateur, ce dernier détecte
automatiquement un nouvel appareil avec
Même chose qu’entre lequel il est possible de communiquer par voie
deux cartes Arduino série.
ASKRI Tahar 36
Communication série : émettre des données
Chaine de caractères Variable
void setup() int variable = 512;
{ char lettre = 'a';
Serial.begin(9600); void setup()
Serial.print(‘’ISET Siliana! "); //l'objet exécute {
//une première fonction Serial.begin(9600);
Serial.println(‘’Departement Electrique"); Serial.println(variable);
//puis une deuxième //fonction, Serial.print(lettre);
différente cette fois-ci
Serial.println(3.1415926535);
Serial.println(‘’ Formation Arduino"); //et
Serial.println(3.1415926535, 0);
//exécute à nouveau la même
} Serial.println(3.1415926535, 2);
Serial.println(65, BIN); //envoie la
//valeur 1000001
Lettre = lettre+1;
Serial.print(lettre);
ASKRI Tahar } 37
Communication série : Réception des données
void setup()
{
Serial.begin(9600);
}
void loop()
{int cardispo = 0; //variable contenant le nombre de caractère disponibles dans le
//buffer
cardispo = Serial.available();
while(cardispo > 0) //tant qu'il y a des caractères à lire
{
carlu = Serial.read(); //on lit le caractère
Serial.print(carlu); //puis on le renvoi à l’expéditeur tel quel
cardispo = Serial.available(); //on relit le nombre de caractères dispo
}
}
ASKRI Tahar 38
Communication série : Application1
On veut établir une liaison série entre deux cartes arduino:
- La première carte envoie à la deuxième les alphabets en
majuscule.
- Lorsque la deuxième carte reçoit un caractère, elle le
retransmet à la première en minuscule.
- Lorsque le caractère O est reçu une led branchée à la carte
2 s’allume et lorsque la lettre C est reçu la led s’éteint. 39
Application 1: Solution
carte1 carte2
char i = 0; char carlu = 0; //contient le caractère à lire
char lettre = 'A'; int cardispo = 0; //le nombre de caractère
void setup() disponibles dans le buffer
{ void setup()
Serial.begin(9600); {
} Serial.begin(9600);
void loop() }
{
//petit message d'accueil void loop()
Serial.println("------ L'alphabet Français ------"); {
//on commence les envois cardispo = Serial.available();
for(i=0; i<26; i++) while(cardispo > 0) //tant qu'il y a des
{ // caractères à lire
Serial.print(lettre); //on envoie la lettre {
lettre = lettre + 1; //on passe à la lettre suivante carlu = Serial.read(); //on lit le caractère
delay(250); //on attend 250ms avant de Serial.println(carlu+32); //puis on le renvoi à
//réenvoyer //l’expéditeur tel quel
}
cardispo = Serial.available(); //on relit le
Serial.println(""); //on fait un retour à la ligne
// nombre de caractères dispo
delay(5000); //on attend 5 secondes avant de
}
//renvoyer l'alphabet
} } 40
Commande MCC 24v
Sortie arduino = 5v et moteur 24V
Utiliser un relais
Si la bobine du relais est 5V : c’est bon
Si non
=> utiliser le circuit intégré ULN2803
Courant max ULN: 500mA
Tension max ULN: 50V
ASKRI Tahar 41
Commande MCC 24v:programme
const int bouton = 3;
Void setup() //fonction initialisation tourne une seule fois
{
pinMode(2, OUTPUT); //broche 2 sortie
pinMode(3, INPUT); //broche 3 sortie
Void loop() //boucle tourne à l’infini
{
If (digitalRead(bouton))
digitalWrite(2, HIGH); //Démarrer moteur
Else
digitalWrite(2, LOW); //arrêter moteur
}
ASKRI Tahar 42
Commande MCC par wifi
ESP8266 Arduino
VCC 3,3V
CH_PD 3,3V
TX RX
RX TX
GND GND
ASKRI Tahar 43
Configurer le module wifi: commandes AT(1)
Tester ESP8266 via les commandes AT
Function AT Command Reponse
Fonctionnement AT OK
+CIFSR:APIP,"192.168.4.1"
Obtenir l’adresse IP +CIFSR:APMAC,"62:01:94:18:98:9b"
OK
TCP/UDP connection AT+CIPMUX? Query
AT+CIPMUX=0 Single
AT+CIPMUX=1 Multiple
Configurer comme AT+CIPSEVER=mode Mode 0 to close server mode;
serveur ,ports mode 1 to opent; port=port
Reset AT+RST OK
Remarque: au moment de la configuration RX vers RX et TX vers TX
ASKRI Tahar 44
Configurer le module wifi: commandes AT(2)
ASKRI Tahar 45
Commande MCC par wifi
void loop()
{
#define SEPARATOR ':' // separator
if (Serial.available())
char buffer; // buffer for incoming
{
void setup() buffer = Serial.read();
{ }
pinMode(13,OUTPUT);
if (buffer == SEPARATOR)
// initialize both serial ports: {buffer=Serial.read();}
Serial.begin(115200);
delay(1000); if(buffer=='a')
Serial.println("AT+CIPMUX=1"); {
delay(2000); digitalWrite(13, HIGH);
}
Serial.println("AT+CIPSERVER=1,8080"); if(buffer=='b')
delay(2000); {
digitalWrite(13, LOW); digitalWrite(13, LOW);
}
} }
ASKRI Tahar 46
Application wifi Hercules(1)
ASKRI Tahar 47
Application wifi Hercules(2)
48
sim900 Icomsat v1.1
IComsat is a GSM/GPRS shield for Arduino and based
on the SIM900 Quad-band GSM/GPRS module. It is controlled via AT
commands (GSM 07.07 ,07.05 and SIMCOM enhanced AT
Commands), and fully compatible with Arduino / Iteaduino and
Mega.
ASKRI Tahar 49
SMS : commandes AT(1)
FONCTION Commande Réponse
AT+CPIN="0000’’ OK
Set the pin code (replace 0000 with you PIN
code).
Set SMS mode to text AT+CMGF=1 OK
AT+CMGS="+31638740161’’
Set phone number of Replace the above phone >
number with your own cell
phone number
To find out which +CPMS: (("SM","BM","SR"),("SM"))
storages are supported AT+CPMS=?
by your mobile phone
to read messages from AT+CPMS="SM" OK
the SIM card use
CMGL: 1,"REC
UNREAD","+31625012354",,"07/07/0
50
Listing the messages AT+CMGL="ALL" 5,09:55:16+08" Test message 1
SMS : commandes AT(2)
+CMGR: "REC
Read message AT+CMGR=2 READ","+31625012254",,"07/07/05,0
9:56:03+08" Test message 2 OK
Delete message AT+CMGD=2
AT+CNMI
ASKRI Tahar 51