Académique Documents
Professionnel Documents
Culture Documents
Support de Cours
Formateur
Ali Ben Taout
Année Académique
2023/2024
TABLE DE MATIÈRES TABLE DE MATIÈRES
Table de Matières
Résumé 3
Introduction 4
2 Hardware - Matériel 14
2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.1 Breadboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.2 Jumper Wires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.1.3 Résistances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2 Capteurs: Se renseigner sur le monde extérieur . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.1 Capteurs Analogiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2.2 Capteurs Numériques (Codeurs) . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.3 Actionneurs: Agir sur le monde extérieur . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.3.1 LED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.3.2 Moteurs à Courant Continu MCC . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.3.3 Servo-moteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.3.4 Moteurs Pas-à-pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.3.5 Moteur Brushless . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.4 Modules - Protocoles de Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.4.1 UART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.4.2 SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.4.3 I2C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.4.4 Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.5 Do’s and Don’ts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.5.1 Do’s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.5.2 Don’ts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5 Ressources 61
5.1 Théorie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.2 Pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Résumé
Bienvenue au club AIAC AEROLEC CLUB ! Nous sommes ravis de vous
accueillir dans le monde passionnant de la robotique. Dans ce document,
nous explorerons les bases de la robotique en utilisant la plateforme Ar-
duino. Allez, c’est parti !
Abstract
Mots Clés:
Introduction
L’électronique interactive est une discipline en constante évolution qui a
le pouvoir de transformer des idées en réalité, qu’il s’agisse de contrôler
l’éclairage d’une pièce, de créer des dispositifs automatisés ou d’inventer
des gadgets innovants. Arduino, un projet révolutionnaire, s’est imposé
comme le fer de lance de cette révolution, en rendant accessible à tous la
création d’applications électroniques et informatiques.
Arduino est né d’une collaboration entre Massimo Banzi, David Cuar-
tielles, Tom Igoe, Gianluca Martino, David Mellis et Nicholas
Zambetti, qui ont partagé une vision commune : simplifier l’accès à
l’électronique et à la programmation. Pour concrétiser cette vision, ils
ont créé une petite carte électronique programmable, associée à un logi-
ciel multiplateforme convivial. Arduino a rapidement gagné en popu-
larité grâce à son accessibilité et à sa polyvalence..
L’une des forces d’Arduino réside dans sa simplicité. Que vous soyez
un débutant complet en électronique ou un professionnel chevronné, vous
pouvez commencer à créer dès aujourd’hui. Arduino vous offre la liberté
d’explorer et d’innover sans être limité par des barrières techniques. C’est
une plateforme où l’imagination est la seule limite..
Chapitre 1
Arduino.. C’est d’abord
une carte électronique !
1.1 Micro-controleurs
Un micro-controlleur (µC) est principalement composé:
- de mémoire
- de modules d’entrée/sortie
1.3 ATMega328P
C’est le cerveau de notre carte. Il contient:
1.4 Alimentation
Pour fonctionner, une carte Arduino a besoin d’une alimentation. Le mi-
crocontrôleur fonctionnant sous 5V, la carte peut être alimentée directe-
ment en 5V par le port USB ou bien par une alimentation externe
1.5 La connectique
A part une LED sur la broche 13, la carte Arduino ne possède pas de
composants (résistances, diodes, moteurs...) qui peuvent être utilisés
pour un programme. Il est nécessaire de les rajouter. Mais pour cela, il
faut les connecter à la carte. C’est là qu’interviennent les connecteurs,
aussi appelés broches (pins, en anglais).
- 0 à 13 Entrées/sorties numériques
- A0 à A5 Entrées/sorties analogiques
- Alimentation 5V
- Alimentation 3.3V
Chapitre 2
Hardware - Matériel
2.1 Introduction
2.1.1 Breadboard
Tous les connecteurs dans une rangée de 5 sont reliés entre eux. Donc si
on branche deux éléments dans un groupe de cinq connecteurs, ils seront
reliés entre eux. Il en est de même des alignements de connecteurs rouges
(pour l’alimentation) et bleus (pour la terre).
Ainsi, les liens peuvent être schématisés ainsi:
Ces fils flexibles et conducteurs sont utilisés pour établir des connexions
entre les composants facilitant ainsi la création de circuits.
Il existe des fils Female-Female, Male-Female, Male-Male.
2.1.3 Résistances
- Capteur de Température:
Lorsque le sol est sec, la tension de sortie est plus élevée. Cela
fonctionne selon deux modes : Le mode numérique qui détecte
simplement la présence d’eau et un signal numérique haut (1) et un
mode analogique qui est plus précis.
- Capteur Infrarouge:
- Bouton Poussoir:
- Recepteur IR:
Le récepteur IR est composé d’un capteur infrarouge qui détecte les sig-
naux infrarouges émis par la télécommande. Il convertit ensuite ces sig-
naux en signaux électriques que l’Arduino peut comprendre et traiter.
Le récepteur IR envoie les données du signal infrarouge à l’Arduino, qui
les analyse et exécute des actions en fonction des boutons pressés.
2.3.1 LED
Choix Résistance:
Le moteur DC (aussi appelé moteur à courant continu) est l’un des mo-
teurs les plus utilisés pour convertir de l’énergie électrique en énergie
mécanique.
2.3.3 Servo-moteurs
2.4.1 UART
quet de données.
- Exemple: HC05
2.4.2 SPI
- Exemple 1: ESP01
Des modules comme l’ESP01 offrent des fonctionnalités Wi-Fi pour per-
mettre à votre Arduino de se connecter à un réseau Wi-Fi, d’accéder à
Internet ou de communiquer avec d’autres dispositifs sur le réseau.
- Exemple 2: RFID
2.4.3 I2C
- Exemple: Gyroscope
2.4.4 Résumé
2.5.1 Do’s
2.5.2 Don’ts
Chapitre 3
Mais aussi un IDE et un
langage de programma-
tion !
3.1 Introduction
Le langage Arduino est très proche du C et du C++.
3.3 Structure
Une fois que l’on a initialisé le programme, il faut ensuite créer son ’cœur’,
autrement dit le programme en lui même.
- void loop() : C’est donc dans cette fonction loop() que l’on va écrire
le contenu du programme. Il faut savoir que cette fonction est appelée
en permanence, c’est-à-dire qu’elle est exécutée une fois, puis lorsque son
exécution est terminée, on la réexécute, encore et encore. On parle de
boucle infinie.
For your info
Que veut dire void ? Cela veut dire ”vide” et signifie qu’une fonc-
tion de ce type ne renvoie aucune valeur. Elle sont dites muettes.
Remarque
On n’est pas obligé d’écrire quelque chose dans ces deux fonctions.
En revanche, il est obligatoire de les écrire, même si elles ne con-
tiennent aucun code!
En dehors de ces deux blocs on ne doit trouver que ceux des différentes
3.4 Lasse9
- Chaque instruction est terminée par le caractère ;
- Les structures if, else if, else permettent de prendre des décisions
conditionnelles.
3.5 Détails
3.5.1 Instructions
Les instructions sont des lignes de code qui disent au programme : ”fais
ceci, fais cela...” Ce sont donc les ordres qui seront exécutés par l’Arduino.
Il est très important de respecter exactement la syntaxe; faute de quoi,
le code ne pourra pas être exécuté.
3.5.2 Fonctions
Une fonction peut donc retourner une valeur, possède un nom et des
arguments. La valeur retournée a un type. Si la fonction ne retourne
aucune valeur, comme setup() et loop(), le type de retour est void qui
signifie rien ou vide
- if, else if, else : Les structures de contrôle conditionnelles vous perme-
ttent de prendre des décisions dans votre code en fonction de conditions
spécifiques.
3.5.6 Variables
- float, double
- char
- void
Chapitre 4
Pratique : Getting your
hands dirty !
4.1.1 Ingrédients
- Joystick
- Arduino UNO
- Jumper Wires
4.1.2 Circuit
4.1.3 Sketch
void setup () {
Serial . begin (9600);
// pinMode ( X_out , INPUT );
// pinMode ( Y_out , INPUT );
}
void loop () {
x_value = analogRead ( X_out );
y_value = analogRead ( Y_out );
4.2.1 Ingrédients
- Capteur Infra-rouge
- LED
- BreadBoard
- Résistance
- Jumper Wires
4.2.2 Circuit
4.2.3 Sketch
int IR_input = 2 ;
int LED = 3 ;
void setup () {
// put your setup code here , to run once :
Serial . begin (9600);
pinMode ( IR_input , INPUT );
pinMode ( LED , INPUT );
void loop () {
// put your main code here , to run r e p e a t e d l y :
Serial . println ( digitalRead ( IR_input ));
digitalWrite ( LED , digitalRead ( IR_input ));
delay (50);
}
4.3.1 Ingrédients
- Ultra-son
- Servo-Moteur
- Carte Arduino UNO
- Breadboard
- Jumper wires
4.3.2 Circuit
4.3.3 Sketch
void setup () {
pinMode ( trigPin , OUTPUT );
// Sets the trigPin as an Output
pinMode ( echoPin , INPUT );
// Sets the echoPin as an Input
Serial . print ( i ); // Sends the current degree into the Serial Port
Serial . print (" ,"); // Sends a d d i t i o n c h a r a c t e r right next to the p r e v i o u s value needed later in the P r
Serial . print ( distance ); // Sends the d i s t a n c e value into the Serial Port
Serial . print ("."); // Sends a d d i t i o n c h a r a c t e r right next to the p r e v i o u s value needed later in the P r
}
// Repeats the p r e v i o u s lines from 165 to 15 degrees
for ( int i =165; i >15; i - -){
myServo . write ( i );
delay (30);
distance = c a l c u l a t e D i s t a n c e ();
Serial . print ( i );
Serial . print (" ,");
Serial . print ( distance );
Serial . print (".");
}
}
// F u n c t i o n for c a l c u l a t i n g the d i s t a n c e m e a s u r e d by the U l t r a s o n i c sensor
int c a l c u l a t e D i s t a n c e (){
4.4.1 Ingrédients
- Potentiomètre
- Capacité
- Servo-moteur
- Moteur Driver
- Moteur DC
- Carte Arduino UNO
- Breadboard
- Jumper wires
4.4.2 Circuit
4.4.3 Sketch
Servo servo ;
int p o t e n t i o m e t e r P i n = A0 ;
int servoMinAngle = 0;
int servoMaxAngle = 180;
void setup () {
Serial . begin (9600);
servo . attach (6);
pinMode (10 , OUTPUT );
void loop () {
int potValue = analogRead ( p o t e n t i om e t e r P i n );
// Read the p o t e n t i o m e t e r value
delay (20);
}
4.5.1 Ingrédients
- Gyroscope
- Carte Arduino UNO
- Jumper wires
4.5.2 Circuit
4.5.3 Sketch
# define OUTPUT_TEAPOT
// o r i e n t a t i o n / motion vars
Quaternion q ; // [w , x , y , z ] quaternion container
VectorInt16 aa ; // [x , y , z ] accel sensor m e a s u r e m e n t s
VectorInt16 aaReal ; // [x , y , z ] gravity - free accel sensor m e a s u r e m e n t s
VectorInt16 aaWorld ; // [x , y , z ] world - frame accel sensor m e a s u r e m e n t s
VectorFloat gravity ; // [x , y , z ] gravity vector
float euler [3]; // [ psi , theta , phi ] Euler angle c o n t a i n e r
float ypr [3]; // [ yaw , pitch , roll ] yaw / pitch / roll c o n t a i n e r and gravity vector
volatile bool mpuInterrupt = false ; // i n d i c a t e s whether MPU i n t e r r u p t pin has gone high
void dmpDataReady () {
mpuInterrupt = true ;
}
void setup () {
// join I2C bus ( I2Cdev library doesn ’ t do this a u t o m a t i c a l l y )
# if I 2 C D E V _ I M P L E M E N T A T I O N == I 2 C D E V _ A R D U I N O _ W I R E
Wire . begin ();
Wire . setClock (400000); // 400 kHz I2C clock . Comment this line if having c o m p i l a t i o n d i f f i c u l t i e s
# elif I 2 C D E V _ I M P L E M E N T A T I O N == I 2 C D E V _ B U I L T I N _ F A S T W I R E
Fastwire :: setup (400 , true );
# endif
// i n i t i a l i z e serial c o m m u n i c a t i o n
// (115200 chosen because it is r e q u i r e d for Teapot Demo output , but it ’ s
// really up to you d e p e n d i n g on your project )
Serial . begin (115200);
while (! Serial ); // wait for L e o n a r d o enumeration , others c o n t i n u e i m m e d i a t e l y
// i n i t i a l i z e device
Serial . println ( F (" Initializing I2C devices ..."));
mpu . initialize ();
pinMode ( INTERRUPT_PIN , INPUT );
// verify c o n n e c t i o n
Serial . println ( F (" Testing device connections ..."));
if ( mpu . te stConne ction ()) {
Serial . println ( F (" MPU6050 connection successful "));
} else {
Serial . println ( F (" MPU6050 connection failed "));
}
// enable Arduino i n t e r r u p t d e t e c t i o n
Serial . print ( F (" Enabling interrupt detection ( Arduino external interrupt "));
Serial . print ( d i g i t a l P i n T o I n t e r r u p t ( INTERRUPT_PIN ));
Serial . println ( F (")..."));
a tt ac hI n te rr up t ( d i g i t a l P i n T o I n t e r r u p t ( INTERRUPT_PIN ) , dmpDataReady , RISING );
mpuIntStatus = mpu . getIntStatus ();
// set our DMP Ready flag so the main loop () f u n c t i o n knows it ’ s okay to use it
Serial . println ( F (" DMP ready ! Waiting for first interrupt ..."));
dmpReady = true ;
void loop () {
// if p r o g r a m m i n g failed , don ’ t try to do a n y t h i n g
if (! dmpReady ) return ;
// read a packet from FIFO
if ( mpu . d m p G e t C u r r e n t F I F O P a c k e t ( fifoBuffer )) { // Get the Latest packet
# ifdef O U T P U T _ R E A D A B L E _ Q U A T E R N I O N
// display q u a t e r n i o n values in easy matrix form : w x y z
mpu . d m p G e t Q u a t e r n i o n (& q , fifoBuffer );
Serial . print (" quat \ t ");
Serial . print ( q . w );
Serial . print ("\ t ");
Serial . print ( q . x );
Serial . print ("\ t ");
Serial . print ( q . y );
Serial . print ("\ t ");
Serial . println ( q . z );
# endif
# ifdef O U T P U T _ R E A D A B L E _ E U L E R
// display Euler angles in degrees
mpu . d m p G e t Q u a t e r n i o n (& q , fifoBuffer );
mpu . dmpGetEuler ( euler , & q );
Serial . print (" euler \ t ");
Serial . print ( euler [0] * 180/ M_PI );
Serial . print ("\ t ");
Serial . print ( euler [1] * 180/ M_PI );
Serial . print ("\ t ");
Serial . println ( euler [2] * 180/ M_PI );
# endif
# ifdef O U T P U T _ R E A D A B L E _ Y A W P I T C H R O L L
// display Euler angles in degrees
mpu . d m p G e t Q u a t e r n i o n (& q , fifoBuffer );
mpu . dmpGetGravity (& gravity , & q );
mpu . d m p G e t Y a w P i t c h R o l l ( ypr , &q , & gravity );
Serial . print (" ypr \ t ");
Serial . print ( ypr [0] * 180/ M_PI );
# ifdef O U T P U T _ R E A D A B L E _ R E A L A C C E L
// display real acceleration , a d j u s t e d to remove gravity
mpu . d m p G e t Q u a t e r n i o n (& q , fifoBuffer );
mpu . dmpGetAccel (& aa , fifoBuffer );
mpu . dmpGetGravity (& gravity , & q );
mpu . d m p G e t L i n e a r A c c e l (& aaReal , & aa , & gravity );
Serial . print (" areal \ t ");
Serial . print ( aaReal . x );
Serial . print ("\ t ");
Serial . print ( aaReal . y );
Serial . print ("\ t ");
Serial . println ( aaReal . z );
# endif
# ifdef O U T P U T _ R E A D A B L E _ W O R L D A C C E L
// display initial world - frame acceleration , a d j u s t e d to remove gravity
// and rotated based on known o r i e n t a t i o n from q u a t e r n i o n
mpu . d m p G e t Q u a t e r n i o n (& q , fifoBuffer );
mpu . dmpGetAccel (& aa , fifoBuffer );
mpu . dmpGetGravity (& gravity , & q );
mpu . d m p G e t L i n e a r A c c e l (& aaReal , & aa , & gravity );
mpu . d m p G e t L i n e a r A c c e l I n W o r l d (& aaWorld , & aaReal , & q );
Serial . print (" aworld \ t ");
Serial . print ( aaWorld . x );
Serial . print ("\ t ");
Serial . print ( aaWorld . y );
Serial . print ("\ t ");
Serial . println ( aaWorld . z );
# endif
# ifdef OUTPUT_TEAPOT
// display q u a t e r n i o n values in I n v e n S e n s e Teapot demo format :
teapotPacket [2] = fifoBuffer [0];
teapotPacket [3] = fifoBuffer [1];
teapotPacket [4] = fifoBuffer [4];
teapotPacket [5] = fifoBuffer [5];
teapotPacket [6] = fifoBuffer [8];
teapotPacket [7] = fifoBuffer [9];
teapotPacket [8] = fifoBuffer [12];
teapotPacket [9] = fifoBuffer [13];
Serial . write ( teapotPacket , 14);
teapotPacket [11]++; // packetCount , loops at 0 xFF on purpose
# endif
// blink LED to i n d i c a t e a c t i v i t y
blinkState = ! blinkState ;
digitalWrite ( LED_PIN , blinkState );
}
}
Chapitre 5
Ressources
5.1 Théorie
https://www.arduino.cc/
https://zestedesavoir.com/tutoriels/pdf/686/arduino-premiers-pas-en-info
pdf
5.2 Pratique
https://juniorfall.files.wordpress.com/2011/11/arduino-cookbook.
pdf
https://www.uio.no/studier/emner/matnat/ifi/IN1060/v21/arduino/
arduino-projects-book.pdf