Arduino

Une carte Arduino Uno

Une carte Arduino Uno

Les cartes Arduino fonctionnent comme de petits ordinateurs, elles intègrent :

  • un processeur (le grand rectangle noir en bas à droite de l’image) pour faire des calculs simples ;
  • des broches (numérotées A0 à A5 et 0 à 13 sur l’image) pour connecter des capteurs (de température, luminosité..) ou des actuateurs (moteurs, LEDs…).

L’utilité de ces cartes est de contrôler toute l’électronique d’un projet : lecture de capteurs, allumage de LEDs, gestion d’écrans, envoi d’infos sur Internet…

L’environnement de développement ainsi que la documentation complète se trouvent sur le site officiel d’Arduino (en anglais) mais pour débuter simplement, vous pouvez faire l’atelier qui suit ou chercher d’autres tutoriels ici.

 

Ateliers de découverte

 

Pré-requis

 

Pour toute la suite de l’atelier, vous avez besoin d’une carte Arduino Uno connectée à un ordinateur par un câble USB. Ce câble servira à contrôler l’Arduino et à lui fournir de l’énergie. Une fois que votre Arduino fait ce qu’il veut, vous pouvez le débrancher de l’ordinateur et le brancher à une pile. Il continuera à fonctionner comme avant.

espace_arduino

Le logiciel utilisé pour contrôler l’Arduino s’appelle l’IDE Arduino. Il est installé sur toutes les machines du Téléfab. On le lance en cliquant sur le symbole d’arduino.

lancer_arduino

 

 

Première étape : faisons clignoter une LED

 

Objectif

 

Faire clignoter une LED

 

Matériel

 

  • une LED de la couleur que vous voulez

 

Montage

 

Réalisez ce montage :

Montage à réaliser

Petite précision : sur la pin 13 de l’arduino, il y a déjà une résistance c’est pourquoi on peut se permettre d’y connecter directement la led!

 

Programmation

 

Copiez-collez ce code dans l’IDE Arduino :

(vous trouvez aussi le code d’un exemple similaire  par le menu Fichier->Exemples->Basics->Blink)

/*
  Clignotement.
  Allume la LED pendant 1 seconde,
  puis l'éteint pendant 0,5 seconde.
*/

// Numéro de la broche à laquelle est
// connectée la LED
int led = 13;

// le code dans cette fonction est exécuté une fois au début
void setup() {
  // indique que la broche de la LED une sortie sortie :
  // on va modifier sa tension
  pinMode(led, OUTPUT);
}

// le code dans cette fonction est exécuté en boucle
void loop() {
  digitalWrite(led, HIGH);   // allumer la LED
                             // (tension 5V sur la broche)
  delay(1000);               // attendre 1000 ms=1s
  digitalWrite(led, LOW);    // éteindre la LED
                             // (tension 0V sur la broche)
  delay(500);               // attendre 0,5 seconde
}

Lisez un peu le code pour comprendre ce qu’il fait. Ensuite, appuyez sur le bouton rond avec une flèche à l’intérieur (téléverser) : le code est envoyé sur la carte.
La LED devrait clignoter.

 

Astuces

 

  • Une LED a un sens ! La grande patte (anode, branchée sur le +) est pliée sur le schéma.

Pour aller plus loin

 

  • La fonction « delay » donne le rythme du clignotement en millisecondes, que se passe-t-il si vous mettez un delay(20) au lieu de delay(500)?
  • Le code morse du SOS est « … — … » où le point est un clignotement court et le trait un clignotement long, modifiez le programme précédent pour envoyer un SOS.
  • Si vous n’utilisez pas la pin 13, il vaut mieux mettre une résistance pour éviter le claquage de la LED

ledblink8

 

 

Deuxième étape : Et si on donnait du mouvement?

Objectif

 

Faire bouger un servomoteur

 

Matériel

 

  • une servomoteur 0-180°
  • une breadboard (plaque à trous pour connecter des composants)
  • des fils
  • une arduino

Montage

 

Réalisez ce montage :

  • le fil le plus foncé (brun) = masse =GND
  • le fil rouge = VCC=5V
  • le fil clair (ici orange) = fil de commande connecté à une sortie numérique

Programmation

 

Pour faire fonctionner le servomoteur, on peut utiliser une librairie, à savoir un ensemble de fonctions
qui facilitent l’utilisation d’un actionneur ou d’un capteur.

Il faut utiliser la librairie SERVO (référence : https://www.arduino.cc/en/Reference/Servo).


/* Sweep
by BARRAGAN http://barraganstudio.com;
This example code is in the public domain.

modified 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Sweep
*/

#include "Servo.h" // appel a la librairie servo

Servo myservo; // creation d'un objet servo
// il est possible de creer 12 objets servo

int pos = 0; // variable pour memoriser l'angle du servo (elle est comprise en 0 et 180)

void setup() {
myservo.attach(11); // c'est la pin 11 qui pilotera le servomoteur
}

void loop() {
for (pos = 0; pos <= 180; pos += 1) { // on fait varier la position de 0 à 180° par pas de 1° myservo.write(pos); // on envoie la valeur de l'angle "pos" au servo, il se positionnera à cet angle delay(15); // attente de 15ms puis on recommence la boucle for en rajoutant 1° } for (pos = 180; pos >= 0; pos -= 1) { // cette fois-ci on va de 180° à 0°
myservo.write(pos); // envoie de la position "pos" au servo
delay(15); // attente de 15ms
}
}

Pour aller plus loin

 

  • rajouter une led :
    • la led est allumée pendant tout le temps de passage de 0 à 180° et elle est éteinte quand le servo passe de 180° à 0.
    • la led clignote quand le servo passe de 0 à 180° et elle reste allumée sinon

 

 

 

Troisième étape: allumons une LED avec un bouton

Objectif

 

Détecter quand un bouton est appuyé pour faire clignoter une LED.

Matériel

 

  • une LED
  • un bouton poussoir (pour bien comprendre le bouton, n’hésitez pas à regarder la page du blog d’Eksimon http://eskimon.fr/96-arduino-204-un-simple-bouton)
  • une breadboard (plaque à trous pour connecter des composants)
  • des fils
  • une résistance de 10 kΩ

Montage

 

Réalisez ce montage :

uneled

Programmation

 

Copiez-collez ce code dans l’IDE Arduino :

/*
  Allumage de LED par bouton.
  Allume la LED quand on appuie sur le bouton.
 */

// Numéro de la broche à laquelle est connecté le bouton
int buttonPin = 2;
// Numéro de la broche à laquelle est connectée la LED
int ledPin =  13;

void setup() {
  // indique que la broche de la LED est utilisée en sortie :
  // on va modifier sa tension
  pinMode(ledPin, OUTPUT);
  // indique que la broche du bouton est utilisée en entrée :
  // on va lire sa tension
  pinMode(buttonPin, INPUT);
}

void loop() {
  // lit l'état du bouton : appuyé si on lit 5V
  // éteint si on lit 0 V
  int buttonState = digitalRead(buttonPin);

  // Condition sur l'état du bouton
  if (buttonState == HIGH) {
    // s'il est à 5V (HIGH)
    // on fait clignoter la LED
    digitalWrite(ledPin, HIGH);
    delay(500);
    digitalWrite(ledPin, LOW);
    delay(500);
  } else {
    // sinon
    // on éteint la LED
    digitalWrite(ledPin, LOW);
  }
}

Lisez un peu le code pour comprendre ce qu’il fait. Ensuite appuyez sur « Téléverser« .

Essayez d’appuyer sur le bouton : la LED devrait clignoter tant que vous appuyez sur le bouton.

Astuces

 

  • La breadboard est pratique pour faire les branchements : les trous proches sont connectés électriquement en colonnes (traces vertes sur le schéma), ce qui permet de brancher des composants ensemble.
  • Toutes les broches de l’Arduino peuvent être utilisées soit en sortie (on modifie la tension), soit en entrée (on lit la tension).

Pour aller plus loin

 

  • On veut réaliser un feu tricolore, le bouton représentera la voiture qui arrive au feu : par défaut le feu est rouge, quand la voiture arrive (bouton appuyé) le feu passe au vert pendant 3s puis à l’orange pendant 1s puis au rouge pendant 3s et après s’il y a encore une voiture, le cycle recommence sinon le feu reste rouge.

 

 

 

Quatrième étape : captons la lumière

Objectif

 

Faire clignoter une LED plus ou moins vite selon la luminosité ambiante.

Matériel

 

  • une breadboard
  • des fils
  • une résistance de 10 kΩ
  • une photo-résistance
  • une LED

Montage

 

Réalisez ce montage :

Montage photo-résistance

Programmation

 

Copiez-collez ce code dans l’IDE Arduino :

/*
  Lit la luminosité et
  fait clignoter une LED à vitesse variable.
 */

// Numéro de la broche du capteur de luminosité
const int luminosityPin = A0;
// Numéro de la broche de la LED
const int ledPin = 9;

void setup() {
  // Initialise la communication avec l'ordinateur
  Serial.begin(9600);
  // Indique que la broche de la LED est une sortie
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // Lit la valeur du capteur de luminosité
  int sensorValue = analogRead(luminosityPin);
// affiche la valeur du capteur dans le "moniteur" sur l'ordinateur
  Serial.print(" Valeur du Capteur = " );
  Serial.print(sensorValue);

 // Convertit la valeur en durée d'attente pour la LED
// il sera nécessaire d'adapter les valeurs du "mapping" en
// fonction de la luminosité ambiante
 int waitTime = map(sensorValue, 0, 1023, 20, 1000);

 // Envoie le résultat vers l'ordinateur
 Serial.print("\t Delai de clignotement (millisecondes) = ");
 Serial.println(waitTime);

 // Fait clignoter la LED au rythme de la luminosité
 digitalWrite(ledPin, HIGH); // allume la LED
 delay(waitTime); // attends la durée choisie
 digitalWrite(ledPin, LOW); // éteinds la LED
 delay(waitTime); // attends la durée choisie
}

Lisez un peu le code pour comprendre ce qu’il fait. Ensuite appuyez sur « Téléverser« .

Essayez de cacher le capteur avec vos doigts : la LED devrait clignoter plus ou moins vite.

Astuces

 

  • Les broches A0 à A5 sont spéciales : elles permettent de lire une valeur analogique : non pas 0 ou 1 mais une valeur de 0 à 1023.
  • La photo-résistance est une résistance dont la valeur change en fonction de la luminosité reçue.
  • Pour voir les données envoyées à l’ordinateur, appuyez sur la petite loupe en haut à droite de l’IDE Arduino. Les valeurs affichées vous permettront de calibrer votre fonction :

serie

http://arduino.cc/fr/Main/DebuterPresentationLogiciel

 

 

 

Cinquième étape : générons toutes les couleurs de l’arc en ciel

Objectif

 

Allumer une LED RGB de toutes les couleurs.

Matériel

 

  • une breadboard
  • des fils
  • trois résistances environ 300 Ω
  • une LED RGB

Montage

 

Réalisez ce montage :

rgbled

Programmation

 

Copiez-collez ce code dans l’IDE Arduino :

// Déclaration des broches de la LED, 1 par couleur
int rpin = 9;
int gpin = 11;
int bpin = 10;

void setup()  {
  //rien
}

void loop()  {
  // Séquence de clignotement (répétée continuellement)

  // Garde la LED en rouge pendant 1000 ms
  solid(255, 0, 0, 1000);
  // Va du rouge au vert en 3000 ms
  fade(255, 0, 0, 0, 255, 0, 3000);
  // Garde la LED en vert pendant 1000 ms
  solid(0, 255, 0, 1000);
  // Va du vert au bleu en 3000 ms
  fade(0, 255, 0, 0, 0, 255, 3000);
  // Garde la LED en bleu pendant 1000 ms
  solid(0, 0, 255, 1000);
  // Va du bleu au rouge en 3000 ms
  fade(0, 0, 255, 255, 0, 0, 3000);
}

// Fonction qui garde une couleur
// (valeur du rouge, valeur du vert, valeur du bleu, durée)
void solid(int r, int g, int b, int t)
{

 // Inverse les valeurs car 5V = couleur éteinte
 r = map(r, 0, 255, 255, 0);
 g = map(g, 0, 255, 255, 0);
 b = map(b, 0, 255, 255, 0);

 // Envoie les valeurs
 analogWrite(rpin,r);
 analogWrite(gpin,g);
 analogWrite(bpin,b);

 // Attends la durée demandée
 delay(t);
}

// Fonction qui passe d'une couleur à une autre petit à petit
// (rouge début, vert début, bleu début,
//   rouge fin, vert fin, bleu fin, durée)
void fade(int r1, int g1, int b1,
  int r2, int g2, int b2, int t)
{
 float r_float1, g_float1, b_float1;
 float r_float2, g_float2, b_float2;
 float grad_r, grad_g, grad_b;
 float output_r, output_g, output_b;

 // Transforme les valeurs en flottants
 r_float1 = (float) r1;
 g_float1 = (float) g1;
 b_float1 = (float) b1;
 r_float2 = (float) r2;
 g_float2 = (float) g2;
 b_float2 = (float) b2;

 // Calcule la vitesse de changement de chaque couleur
 grad_r = (r_float2-r_float1)/t;
 grad_g = (g_float2-g_float1)/t;
 grad_b = (b_float2-b_float1)/t;
 // Incrémente les couleurs petit à petit
 // jusqu'au temps demandé
 for ( float i=0; i<=t; i++ )
 {
   output_r = r_float1 + grad_r*i;
   output_g = g_float1 + grad_g*i;
   output_b = b_float1 + grad_b*i;
   // Inverse les valeurs (5V = éteint)
   output_r = map (output_r,0,255,255,0);
   output_g = map (output_g,0,255,255,0);
   output_b = map (output_b,0,255,255,0);
   // Envoie les valeurs
   analogWrite(rpin, (int)output_r);
   analogWrite(gpin, (int)output_g);
   analogWrite(bpin, (int)output_b);
   // Attends 1 ms
   delay(1);
 }
}

Lisez un peu le code pour comprendre ce qu’il fait. Ensuite appuyez sur « Téléverser« .

La LED devrait changer de couleur continuellement.

Astuces

 

  • Les LEDs RGB sont faites de 3 LEDs collées : une rouge, une verte et une bleue. Elles ont une anode commune : la plus grande patte, à brancher au 5V sur ce montage.
  • Dans le programme, les couleurs sont codées en RGB avec 3 chiffres de 0 à 255 : un pour le rouge, puis le vert, puis le bleu. Utilisez cet utilitaire pour trouver de nouvelles couleurs.

 

 

 

Sixième étape : faisons de la musique

Objectif

 

Jouer une mélodie avec un buzzer.

Matériel

 

  • un buzzer
  • une breadboard
  • des fils
  • une résistance de 100 Ω

Montage

 

Réalisez ce montage :

Montage avec buzzer

Programmation

 

Copiez-collez ce code dans l’IDE Arduino :

// Joue une mélodie une fois

// Liste des notes jouables par le buzzer
#define NOTE_B0  31
#define NOTE_C1  33
#define NOTE_CS1 35
#define NOTE_D1  37
#define NOTE_DS1 39
#define NOTE_E1  41
#define NOTE_F1  44
#define NOTE_FS1 46
#define NOTE_G1  49
#define NOTE_GS1 52
#define NOTE_A1  55
#define NOTE_AS1 58
#define NOTE_B1  62
#define NOTE_C2  65
#define NOTE_CS2 69
#define NOTE_D2  73
#define NOTE_DS2 78
#define NOTE_E2  82
#define NOTE_F2  87
#define NOTE_FS2 93
#define NOTE_G2  98
#define NOTE_GS2 104
#define NOTE_A2  110
#define NOTE_AS2 117
#define NOTE_B2  123
#define NOTE_C3  131
#define NOTE_CS3 139
#define NOTE_D3  147
#define NOTE_DS3 156
#define NOTE_E3  165
#define NOTE_F3  175
#define NOTE_FS3 185
#define NOTE_G3  196
#define NOTE_GS3 208
#define NOTE_A3  220
#define NOTE_AS3 233
#define NOTE_B3  247
#define NOTE_C4  262
#define NOTE_CS4 277
#define NOTE_D4  294
#define NOTE_DS4 311
#define NOTE_E4  330
#define NOTE_F4  349
#define NOTE_FS4 370
#define NOTE_G4  392
#define NOTE_GS4 415
#define NOTE_A4  440
#define NOTE_AS4 466
#define NOTE_B4  494
#define NOTE_C5  523
#define NOTE_CS5 554
#define NOTE_D5  587
#define NOTE_DS5 622
#define NOTE_E5  659
#define NOTE_F5  698
#define NOTE_FS5 740
#define NOTE_G5  784
#define NOTE_GS5 831
#define NOTE_A5  880
#define NOTE_AS5 932
#define NOTE_B5  988
#define NOTE_C6  1047
#define NOTE_CS6 1109
#define NOTE_D6  1175
#define NOTE_DS6 1245
#define NOTE_E6  1319
#define NOTE_F6  1397
#define NOTE_FS6 1480
#define NOTE_G6  1568
#define NOTE_GS6 1661
#define NOTE_A6  1760
#define NOTE_AS6 1865
#define NOTE_B6  1976
#define NOTE_C7  2093
#define NOTE_CS7 2217
#define NOTE_D7  2349
#define NOTE_DS7 2489
#define NOTE_E7  2637
#define NOTE_F7  2794
#define NOTE_FS7 2960
#define NOTE_G7  3136
#define NOTE_GS7 3322
#define NOTE_A7  3520
#define NOTE_AS7 3729
#define NOTE_B7  3951
#define NOTE_C8  4186
#define NOTE_CS8 4435
#define NOTE_D8  4699
#define NOTE_DS8 4978

// Broche du buzzer
const int buzzerPin = 8;

// Mélodie : chaque note est jouée l'une après l'autre
int melody[] = {NOTE_C4, NOTE_G3, NOTE_G3,
  NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4};

// Durée de chaque note : 4 = 1/4 de ton
// 8 = 1/8 de ton...
int noteDurations[] = {4, 8, 8, 4, 4, 4, 4, 4};

void setup() {
  // joue chaque note
  for (int thisNote = 0; thisNote <= 8; thisNote++) {
    // Durée d'une note : 1000 ms divisé par la durée
    int noteDuration = 1000/noteDurations[thisNote];
    // On joue la note
    tone(buzzerPin, melody[thisNote],noteDuration);
    // On fait une pause de 30% du temps de la note en plus
    // pour pouvoir distinguer les notes à l'oreille
    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
    // arrête le buzzer
    noTone(buzzerPin);
  }
}

void loop() {
  // rien à faire en boucle
}

Lisez un peu le code pour comprendre ce qu’il fait. Ensuite appuyez sur « Téléverser« .

Vous devriez entendre de la musique.

Astuces

 

  • Le buzzer a un sens ! 
  • La résistance sert à diminuer le volume.
  • La fonction tone permet de régler la fréquence d’un signal carré généré en sortie.

 


Septième étape : Utiliser un écran LCD

 

Objectif

Programmer un écran LCD

Matériel

 

écran LCD I2C

 

Montage

 

Programmation

 

Copier-coller le code suivant sur Arduino IDE.


#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 column and 2 rows

void setup()
{
lcd.init(); // initialize the lcd
lcd.backlight();
}

void loop()
{
lcd.clear(); // clear display
lcd.setCursor(0, 0); // move cursor to (0, 0)
lcd.print("Arduino"); // print message at (0, 0)
delay(2000); // display the above for two seconds

}
Regardez un peu le code pour comprendre ce qu’il fait. Ensuite appuyez sur « Téléverser« .
Essayez de modifier le message sur l’écran LCD puis de faire apparaitre plusieurs messages successifs.

 

Astuce

Pour gérer les librairies sur Arduino IDE : aller dans « outils », « gérer les librairies ». Chercher « LiquidCrystal I2C ». Sélectionner celle de Frank de Brabander. Cliquer sur « installer ».

********************************************************************************************


Remerciements

 

Cet atelier de découverte est très largement tiré de celui mis à disposition par Baptiste Gaultier.

L’étape avec un buzzer est tirée d’un tutoriel Arduino, celle sur l’écran LCD est tirée d’un autre tutoriel Arduino.

 

Aller plus loin

 

Pour aller plus loin, de nombreux exemples de code sont disponibles dans « Fichier > Exemples » dans l’IDE Arduino. Beaucoup de ressources sont aussi disponibles sur Internet, en commençant par le site officiel d’Arduino.

Un atelier avancé pour faire des capteurs sans fils est aussi proposé par Baptiste Gaultier.

 

Installer ardublock

 

mkdir -p ~/sketchbook/tools/ArduBlockTool/tool/
cd ~/sketchbook/tools/ArduBlockTool/tool/
wget http://duinoedu.com/dl/logiciels/ardublock/ardublock_augmente/VERSION_BETA_0.49.2/ardublock-all.jar

In Arduino IDE, open menu Arduino -> Preferences
Find Sketchbook location:

            • In Mac, it’s by default Documents/Arduino under users home directory
            • In Linux, it’s by default sketchbook/ under user’s home directory