Atelier de découverte Arduino

Attention : Si vous avez un problème, merci d'aller jeter un coup d’œil sur la page de Dépannage Arduino avant d'appeler un des intervenants (qui dans tous les cas se fera un plaisir de venir vous dépanner).

Support de l'atelier

Atelier_de_découverte_Arduino_v3.odp
Atelier_de_découverte_Arduino_v3.pdf

Premier prototype : Clignotage de diode

Matériel nécessaire (par groupe)

Montage

Montage 1 : Clignotage de diode

Programmation

  • Lancez le logiciel Arduino, vous devriez voir apparaître l'interface suivante :
  • Ouvrez le fichier Blink.ino en cliquant sur File → Examples → Basics → Blink
  • Une fenêtre vient de s’ouvrir. Fermez la précédente.
  • Allez tout en bas de cette fenêtre, et regardez le morceau de code suivant :
1 void loop() {
2   digitalWrite(13, HIGH);   // set the LED on
3   delay(1000);              // wait for a second
4   digitalWrite(13, LOW);    // set the LED off
5   delay(1000);              // wait for a second
6 }

La première valeur correspond au temps où la LED est allumée, en millisecondes.
La seconde valeur correspond au temps où la LED est éteinte, en millisecondes.
Vous pouvez bien sûr modifier ces valeurs.

  • Cliquez sur Sketch → Verify / Compile
  • Cliquez sur File → Upload to I/O Board
  • Une fois le programme chargé sur l'Arduino, vous devriez voir apparaître Done uploading dans la barre d'état.
  • Vous pouvez maintenant admirer votre LED clignoter :)

Deuxième prototype : Diode contrôlée par bouton poussoir

Matériel nécessaire (par groupe)

  • Un ordinateur avec environnement Arduino ×1
  • Arduino UNO ×1
  • Câble USB ×1
  • Une LED de votre couleur préférée ×1
  • Bouton poussoir ×1
  • BreadBoard ×1
  • Fil ×5
  • Résistance 10kΩ ×1

Montage

Montage 2 : Diode contrôlée par bouton poussoir

Programmation

  • Lancez le logiciel Arduino
  • Ouvrez le fichier Button.ino en cliquant sur File → Examples → Digital → Button
  • Une fenêtre vient de s’ouvrir. Fermez la précédente.
  • Allez tout en bas de cette fenêtre, et regardez le morceau de code suivant :
 1 void loop(){
 2   // read the state of the pushbutton value:
 3   buttonState = digitalRead(buttonPin);
 4 
 5   // check if the pushbutton is pressed.
 6   // if it is, the buttonState is HIGH:
 7   if (buttonState == HIGH) {     
 8     // turn LED on:    
 9     digitalWrite(ledPin, HIGH);  
10   } 
11   else {
12     // turn LED off:
13     digitalWrite(ledPin, LOW); 
14   }
15 }

Le programme ci-dessus explique que dès que le bouton relié au pin 2 de l'Arduino est pressé alors la diode reliée au pin 13 doit être allumée.

  • Cliquez sur Sketch → Verify / Compile
  • Cliquez sur File → Upload to I/O Board
  • Vous pouvez maintenant admirer votre LED clignoter lorsque vous appuyez sur le bouton poussoir :)

Troisième prototype : Communications sans-fils

Attention : Ce troisième prototype nécessite deux groupes pour fonctionner : le groupe 1 enverra des messages tandis que le groupe 2 les recevra.

Matériel nécessaire (groupe 1)

  • Un ordinateur avec environnement Arduino ×1
  • Arduino UNO ×1
  • Câble USB ×1
  • Une LED de votre couleur préférée ×1
  • Bouton poussoir ×1
  • BreadBoard ×1
  • Fil × 5
  • Résistance 10kΩ ×1
  • Shield Xbee ×1
  • Module sans-fils Xbee ×1

Matériel nécessaire (groupe 2)

  • Un ordinateur avec environnement Arduino ×1
  • Arduino UNO ×1
  • Câble USB ×1
  • Une LED de votre couleur préférée ×1
  • Shield Xbee ×1
  • Module sans-fils Xbee ×1

Montage (groupe 1)

Montage 3 : Communications sans-fils

Attention : Pour plus de clarté, le module sans-fils Xbee monté sur son blindage (shield) n'apparaît pas sur le schéma ci-dessus. Veuillez insérer le blindage lorsque l'on vous y invite dans les étapes suivantes.

Montage (groupe 2)

Montage 1 : Clignotage de diode

Attention : Pour plus de clarté, le module sans-fils Xbee monté sur son blindage (shield) n'apparaît pas sur le schéma ci-dessus. Veuillez insérer le blindage lorsque l'on vous y invite dans les étapes suivantes.

Programmation (groupe 1)

  • Lancez le logiciel Arduino
  • Ouvrez le fichier Button.ino en cliquant sur File → Examples → Digital → Button
  • Une fenêtre vient de s’ouvrir. Fermez la précédente.
  • Dans ce programme, il va nous falloir modifier certaines instructions afin de les adapter à notre prototype. Le code source modifié est le suivant :
 1 // constants won't change. They're used here to 
 2 // set pin numbers:
 3 const int buttonPin = 12;    // the number of the pushbutton pin
 4 const int ledPin =  13;      // the number of the LED pin
 5 
 6 // variables will change:
 7 int buttonState = 0;         // variable for reading the pushbutton status
 8 
 9 void setup() {
10   // initialize serial communication (since we are using Xbee):
11   Serial.begin(9600);
12   // initialize the LED pin as an output:
13   pinMode(ledPin, OUTPUT);      
14   // initialize the pushbutton pin as an input:
15   pinMode(buttonPin, INPUT);     
16 }
17 
18 void loop(){
19   // read the state of the pushbutton value:
20   buttonState = digitalRead(buttonPin);
21 
22   // check if the pushbutton is pressed.
23   // if it is, the buttonState is HIGH:
24   if (buttonState == HIGH) {     
25     // turn LED on:    
26     digitalWrite(ledPin, HIGH);
27     //Send H char using Xbee module
28     Serial.print('H');
29   } 
30   else {
31     // turn LED off:
32     digitalWrite(ledPin, LOW);
33     //Send L char using Xbee module
34     Serial.print('L');
35   }
36 }

Le programme ci-dessus explique que dès que le bouton relié au pin 12 de l'Arduino est pressé alors la diode reliée au pin 13 doit être allumée et que le caractère 'H' doit être envoyé en utilisant le module sans-fils Xbee. Dès que le bouton est relâché, la diode doit être éteinte et le caractère 'L' doit être envoyé.

  • Apportez les modifications comme indiqué dans le code ci-dessus
  • Cliquez sur Sketch → Verify / Compile
  • Cliquez sur File → Upload to I/O Board
  • Insérez le blindage Xbee et faites un reset du Arduino
  • Vous pouvez maintenant attendre le groupe 2 est terminé son prototype. Dès lors, vous pourrez faire clignoter la diode du groupe en appuyant sur votre bouton poussoir. Pour les motivés, voici l'alphabet morse, bonne chance :)

Programmation (groupe 2)

  • Lancez le logiciel Arduino
  • Ouvrez le fichier PhysicalPixel.ino en cliquant sur File → Examples → Commununication → PhysicalPixel
  • Une fenêtre vient de s’ouvrir. Fermez la précédente.
  • Allez tout en bas de la fenêtre, et regardez le morceau de code suivant :
 1 void loop() {
 2   // see if there's incoming serial data:
 3   if (Serial.available() > 0) {
 4     // read the oldest byte in the serial buffer:
 5     incomingByte = Serial.read();
 6     // if it's a capital H (ASCII 72), turn on the LED:
 7     if (incomingByte == 'H') {
 8       digitalWrite(ledPin, HIGH);
 9     } 
10     // if it's an L (ASCII 76) turn off the LED:
11     if (incomingByte == 'L') {
12       digitalWrite(ledPin, LOW);
13     }
14   }
15 }

Le programme ci-dessus explique que dès que le caractère 'H' est reçu par le module Xbee alors la diode doit passé à l'état allumée. La diode doit être éteinte dès que le caractère 'L' reçu par le module Xbee.
Afin d'éviter qu'un groupe puisse perturber les autres, il serait préférable que les participants à l'atelier se mettent d'accord sur les lettres qu'ils utilisent (en effet, les modules sans fils sont configurés pour émettre et recevoir en diffusion (broadcast). Choisissez-donc des lettres qui ne sont pas utilisés par un autre groupe.

  • Cliquez sur Sketch → Verify / Compile
  • Cliquez sur File → Upload to I/O Board
  • Insérez le blindage Xbee et faites un reset du Arduino
  • Vous pouvez maintenant attendre le groupe 1 est terminé son prototype. Dès lors, vous pourrez faire tenter de lire les messages en morse envoyés par le groupe 1: pour les motivés, voici l'alphabet morse, bonne chance :)

Quatrième prototype : Thermomètre numérique

Matériel nécessaire (par groupe)

  • Un ordinateur avec environnement Arduino ×1
  • Arduino UNO ×1
  • Câble USB ×1
  • LED ×3 (vert, jaune, rouge)
  • BreadBoard ×1
  • Fil ×9
  • Résistance 1500Ω ×3
  • Capteur de température LM35DZ ×1

Montage

Montage 5 : Thermomètre numérique

Programmation

  • Lancez le logiciel Arduino
  • Copiez le texte suivant dans votre éditeur :
 1 // Déclaration des pins utilisées
 2 const int pin_capteur = 0;
 3 const int pin_led_rouge=2;
 4 const int pin_led_verte=3;
 5 const int pin_led_jaune=4;
 6 
 7 //Variables
 8 float temperature_max = 22.0;
 9 float temperature_min = 19.0;
10 float temperature=0.0;
11 
12 void setup(void)
13 {
14   pinMode(pin_capteur,INPUT);
15   pinMode(pin_led_rouge,OUTPUT);
16   pinMode(pin_led_verte,OUTPUT);
17   pinMode(pin_led_jaune,OUTPUT);
18   Serial.begin(9600);
19 }
20 
21 void loop (void)
22 {
23   // On récupère la valeur de la tension en sortie du capteur puis à l'aide de l'équation, on trouve la température qui y correspond
24   temperature = analogRead(pin_capteur) * 5000L / 1024L  / 10;
25 
26   //On remet à zéro les leds de 10mm
27   digitalWrite(2, LOW);
28   digitalWrite(3, LOW);
29   digitalWrite(4, LOW);
30 
31   //On compare la température reçue aux seuils que l'on a défini lors des déclarations du programme
32   if (temperature<temperature_min)digitalWrite(pin_led_jaune,HIGH);
33   else if (temperature>temperature_max)digitalWrite(pin_led_rouge,HIGH);
34   else digitalWrite(pin_led_verte,HIGH);
35 
36   //On envoie la valeur de la température sur le port série
37   Serial.println(temperature);
38 
39   //On attends une seconde avant de recommencer
40   delay(1000);
41 
42 }

Le programme ci-dessus lit d'abord la valeur de notre capteur de température puis allume une des LED selon la valeur spécifiée dans les seuils. De plus, l'arduino envoie la température mesurée sur le moniteur série.

  • Cliquez sur Sketch → Verify / Compile
  • Cliquez sur File → Upload to I/O Board
  • Vous pouvez maintenant cliquer sur Tools → Serial Monitor pour voir toutes les mesures relevées par le capteur de température.

Cinquième prototype : Capteur de luminosité

Matériel nécessaire (par groupe)

  • Un ordinateur avec environnement Arduino ×1
  • Arduino UNO ×1
  • Câble USB ×1
  • BreadBoard ×1
  • Fil ×5
  • Résistance 10kΩ ×1
  • Photo-résistance ×1
  • LED ×1 (bleu ça change)

Montage

Montage 6 : Capteur de luminosité

Programmation

  • Lancez le logiciel Arduino
  • Ouvrez le fichier AnalogInOutSerial.ino en cliquant sur File → Examples → Analog → AnalogInOutSerial
  • Une fenêtre vient de s’ouvrir. Fermez la précédente.
  • Allez tout en bas de la fenêtre, et regardez le morceau de code suivant :
 1 void loop() {
 2   // read the analog in value:
 3   sensorValue = analogRead(analogInPin);            
 4   // map it to the range of the analog out:
 5   outputValue = map(sensorValue, 0, 1023, 0, 255);          
 6 
 7   // print the results to the serial monitor:
 8   Serial.print("sensor = " );                       
 9   Serial.print(sensorValue);      
10   Serial.print("\t output = ");      
11   Serial.println(outputValue);   
12 
13   // wait 10 milliseconds before the next loop
14   // for the analog-to-digital converter to settle
15   // after the last reading:
16   delay(10);                     
17 }

Le programme ci-dessus lit d'abord la valeur de notre capteur de luminosité et envoie la luminosité mesurée sur le moniteur série. De plus, la LED branchée sur le pin 9 ajuste sa luminosité en fonction de la valeur du capteur de luminosité.

  • Cliquez sur Sketch → Verify / Compile
  • Cliquez sur File → Upload to I/O Board
  • Vous pouvez maintenant cliquer sur Tools → Serial Monitor pour voir toutes les mesures relevées par le capteur de luminosité.

Sixième prototype : LED RGB

Matériel nécessaire (par groupe)

  • Un ordinateur avec environnement Arduino ×1
  • Arduino UNO ×1
  • Câble USB ×1
  • LED RGB ×1
  • BreadBoard ×1
  • Fils ×4
  • Résistance 1500Ω ×3

Montage

Montage 7 : LED RGB

Programmation

  • Lancez le logiciel Arduino
  • Copiez le texte suivant dans votre éditeur :
 1 // Déclarations des pin
 2 int rpin = 9;
 3 int gpin = 11;
 4 int bpin = 10;
 5 
 6 // Prototypes des fonctions
 7 void solid(int r, int g, int b, int t);
 8 void fade(int r1, int g1, int b1, int r2, int g2, int b2, int t);
 9 
10 void setup()  { 
11   //rien
12 } 
13 
14 void loop()  { 
15 
16   // Exemple de séquence : fade toutes les 12 secondes:
17   solid(255,0,0,1000); // Maintain pure red 1 sec
18   fade(255,0,0,0,255,0,3000); //fade from red to green over 3 seconds
19   solid(0,255,0,1000); // Maintain pure green 1 sec
20   fade(0,255,0,0,0,255,3000); //fade from green to blue over 3 seconds
21   solid(0,0,255,1000); // Maintain pure blue 1 sec
22   fade(0,0,255,255,0,0,3000); //fade from blue to red over 3 seconds
23 
24 }
25 
26 //function holds RGB values for time t milliseconds
27 void solid(int r, int g, int b, int t)
28 {
29 
30   //map values - arduino is sinking current, not sourcing it
31   r = map(r, 0, 255, 255, 0);
32   g = map(g, 0, 255, 255, 0);
33   b = map(b, 0, 255, 255, 0);
34 
35   //output
36   analogWrite(rpin,r);
37   analogWrite(gpin,g);
38   analogWrite(bpin,b);
39 
40   //hold at this colour set for t ms
41   delay(t);
42 }
43 
44 //function fades between two RGB values over fade time period t
45 //maximum value of fade time = 30 seconds before gradient values
46 //get too small for floating point math to work? replace floats
47 //with doubles to remedy this?
48 void fade(int r1, int g1, int b1, int r2, int g2, int b2, int t)
49 {
50   float r_float1, g_float1, b_float1;
51   float r_float2, g_float2, b_float2;
52   float grad_r, grad_g, grad_b;
53   float output_r, output_g, output_b;
54 
55   //declare integer RGB values as float values
56   r_float1 = (float) r1;
57   g_float1 = (float) g1;
58   b_float1 = (float) b1;
59   r_float2 = (float) r2;
60   g_float2 = (float) g2;
61   b_float2 = (float) b2;
62 
63   //calculate rates of change of R, G, and B values
64   grad_r = (r_float2-r_float1)/t;
65   grad_g = (g_float2-g_float1)/t;
66   grad_b = (b_float2-b_float1)/t;
67 
68   //loop round, incrementing time value "i" 
69   for ( float i=0; i<=t; i++ )
70   {
71     output_r = r_float1 + grad_r*i;
72     output_g = g_float1 + grad_g*i;
73     output_b = b_float1 + grad_b*i;
74 
75     //map values - arduino is sinking current, not sourcing it
76     output_r = map (output_r,0,255,255,0);
77     output_g = map (output_g,0,255,255,0);
78     output_b = map (output_b,0,255,255,0);
79 
80     //output
81     analogWrite(rpin, (int)output_r);
82     analogWrite(gpin, (int)output_g);
83     analogWrite(bpin, (int)output_b);
84 
85     //hold at this colour set for 1ms
86     delay(1);
87   }
88 }

Le programme ci-dessus permet de voir d'exploiter les capacités d'une LED RGB.

  • Cliquez sur Sketch → Verify / Compile
  • Cliquez sur File → Upload to I/O Board
  • Vous pouvez maintenant voir votre diode passer du vert au bleu en passant par le rouge :)

BON COURAGE !

Le texte de cet atelier est très largement inspiré par le travail de Xavier Hinault sous licence Creative Commons Attribution-ShareAlike 3.0. Je tiens également à saluer le travail de Snootlab qui propose de nombreux montages sous licence CC0 1.0 Universal (CC0 1.0) Public Domain Dedication sur lesquels ce travail s'appuie.

morse.png - Montage 3 : Communications sans-fils (30.7 kB) Baptiste Gaultier, 12/15/2011 03:20 pm

Atelier_de_découverte_Arduino__0.odp - Support - Atelier de découverte Arduino #0 (format odp) (2.6 MB) Baptiste Gaultier, 12/15/2011 03:20 pm

Atelier_de_découverte_Arduino__0.pdf - Support - Atelier de découverte Arduino #0 (format pdf) (2.7 MB) Baptiste Gaultier, 12/15/2011 03:20 pm

blink.png - Montage 1 : Clignotage de diode (19.9 kB) Baptiste Gaultier, 12/15/2011 03:20 pm

button.png - Montage 2 : Diode contrôlée par bouton poussoir (27.5 kB) Baptiste Gaultier, 12/15/2011 03:20 pm

arduino_software.png - Aperçu 1 : Logiciel Arduino (14.7 kB) Baptiste Gaultier, 12/15/2011 03:20 pm

thermometer.png - Montage 5 : Thermomètre numérique (35.9 kB) Baptiste Gaultier, 12/15/2011 03:20 pm

rgbled.png - Montage 7 : LED RGB (27.3 kB) Baptiste Gaultier, 12/15/2011 03:20 pm

photoresistor.png - Montage 6 : Capteur de luminosité (30.2 kB) Baptiste Gaultier, 01/18/2012 10:33 am

Atelier_de_découverte_Arduino_v3.pdf - Support - Atelier de découverte Arduino v3 (format pdf) (3.1 MB) Baptiste Gaultier, 03/29/2012 05:50 pm

Atelier_de_découverte_Arduino_v3.odp - Support - Atelier de découverte Arduino v3 (format odp) (3 MB) Baptiste Gaultier, 03/29/2012 05:50 pm