DIFFICULTÉ MOYENNE | 6 À 8 HEURES
- Vous avez compris ce qu'est Arduino et à quoi ça sert.
- Vous avez compris ce qu'est un signal analogique et un signal numérique.
- Vous avez compris ce qu'est un signal entrant et un signal sortant.
- Une platine d'essai n'a presque plus de secrets pour vous !
Dans cette partie, vous allez apprendre à simuler des circuits simples sur Tinkercad, faire vos premiers programmes pour contrôler un effecteur (une DEL) et découvrir le fabuleux monde des "fonctions" et de la programmation en C/C++.
Au travail !
Simulations avec Tinkercad circuits.
Toutes les simulations que vous verrez dans ce tutoriel ont été faites sur Tinkercad. Avec un compte, vous pourrez cliquer sur les simulations pour accéder au site et les modifier. N'hésitez pas à expérimenter !
Simuler un circuit simple sur breadboard
Exercice
Je vous donne un indice : les DEL ont un sens à respecter, on dit qu'elles sont polarisées. L'anode est le côté négatif, la cathode le côté positif. Mais ça vous le saviez déjà !
Obtenez-vous quelque chose de semblable ?
Êtes-vous capable d'ajouter un bouton poussoir ou un interrupteur ?
Êtes-vous capable de crééer votre propre circuit original ?
Nous allons maintenant remplacer la pile de 9 volts par un Arduino et écrire un premier programme !
Simuler un programme simple avec Arduino
La simulation ci-dessous permet également d'allumer une DEL. Cette fois-ci c'est Arduino qui contrôle son éclairage.
Cliquez sur "Start Simulation" pour voir le résultat, cliquez sur "Code" pour afficher le programme.
Remarque : pour modifier le code, cliquez sur le logo "Tinkercad" dans le coin supérieur gauche de la simulation. Vous serez automatiquement redirigé vers le site web de Tinkercad (voir figure). Si vous avez un compte, vous pourez modifier la simulation en cliquant sur "Tinker This".
La structure d'un programme Arduino.
void setup(){ pinMode (13, OUTPUT); } void loop(){ digitalWrite (13, HIGH); }
- Void Setup ()
- Void Loop ()
Mais c'est quoi un "void" ?
Petite définition théorique :
Grosso-modo, un "Void" est une partie de programme qu'Arduino va exécuter. Grâce aux "Void", Arduino saura de quelle manière exécuter ce fragment de programme (soit "Setup", soit "Loop"). Derrière les "Void" il y a des lignes de code que l'on ne voit pas (de la même manière que lorsque vous programmez avec Scratch ou Lego Mindstorm, derrière chaque icône il y a du code). C'est ce que l'on appelle des "routines" (ou des "fonctions", terme que j'utiliserai plus souvent), que l'on déclenche avec un mot (soit "Setup", soit "Loop") et que les concepteurs d'Arduino ont créé pour nous simplifier la tâche.
Donc, à chaque fois que l'on écrit "Void", Arduino se dit "Ah, je dois exécuter une fonction, laquelle ?". Ensuite on y accole le nom de la fonction : "Setup" ou "Loop" (Arduino se dit alors "Ah oui, fonction Loop, je connais, c'est partiiiiiii !").
Sauf qu'Arduino ne se dit rien en fait, il ne pense pas, c'est une machine ! L'humain a tendance à anthropomorphiser...
A quoi servent ces 2 fonctions "void Setup" et "Void Loop" ?
- Void Setup () : c'est la partie d'initialisation du programme. Elle n'est exécutée qu'une seule fois.
Si le programme était une recette de cuisine, nous y écririons "préparez les ustensiles, sortez les ingrédients, préchauffez le four, lavez-vous les mains".
Le code caché derrière la fonction serait par exemple : "les ustensiles sont dans le deuxième tiroir de la cuisine, les ingrédients sont au frigo" : tout ce que vous n'avez pas besoin de spécifier mais que le programme doit connaître pour exécuter l'action. La routine quoi !
Vous n'exécutez ces actions qu'au tout début et ne les referez plus (vous n'allez pas préchauffer votre four 3 fois !). - Void Loop () : c'est la partie du programme dans laquelle on indique toutes les actions que l'on veut qu'Arduino exécute, en boucle ("loop").
Si le programme était une recette de cuisine, nous y écririons "cassez les oeufs, mélangez, cuire 20 minutes".
On peut exécuter ces actions autant de fois que l'on veut tant que les ustensiles sont sortis et que le four est chaud (et tant qu'il reste des oeufs ! ou des piles si c'est un Arduino !)
Void Setup ()
void setup(){ pinMode (13, OUTPUT); }
On y indique, entre autre, quelles prises sont branchées et comment elles doivent se comporter.
Ici, nous voulons que la prise "13" puisse se comporter comme une "sortie" (OUTPUT).
En language Arduino nous écrivons :
pinMode (13, OUTPUT);
Remarque :
- Notez que toutes les lignes se terminent par un point-virgule.
C'est la façon de dire à Arduino : "j'ai fini cette instruction, passe à la suivante". - Notez également que toutes les instructions du "Void" sont comprises entre deux accolades ({}).
Void Loop ()
void loop(){ digitalWrite (13, HIGH); }
Ici nous voulons que la DEL branchée sur la prise 13 s'allume. Nous allons demander à Arduino de produire un signal électrique au niveau de la prise 13 de sorte à alimenter la DEL afin qu'elle s'allume.
En language Arduino nous écrivons :
(traduction : écris un signal numérique HAUT (5 volts) sur la prise 13.)
(traduction : écris un signal numérique HAUT (5 volts) sur la prise 13.)
digitalWrite (13, HIGH);
Remarque :
- Notez que le terme "HIGH" fait référence à un signal élevé, soit une tension de 5 volts.
- A l'inverse, le terme "LOW" fait référence à un signal bas, soit une tension de 0 volt.
Exercices
- Exercice 1 : Modifiez le code et le circuit de sorte à ce que la DEL soit branchée sur la prise 3 et éclaire.
- Exercice 2 : Modifiez le code de sorte à ce que la DEL n'éclaire pas.
- Exercice 3 : Modifiez le code de sorte à ce que la DEL clignote toutes les 1/2 seconde.
Vous avez besoin d'un indice pour cet exercice !
Lisez la suite !
Fonctions et arguments.
Il s'agit de la fonction
delay();
.Entre ses parenthèses, cette fonction a besoin d'un argument, c'est à dire un paramètre.
Dans notre exemple de recette de cuisine, nous pourrions créer une fonction
préchaufferFour();
.L'argument de notre fonction
préchaufferFour();
serait la température de préchauffage. Je pourrais donc utiliser la même fonction pour toutes mes recettes et seuleument modifier l'argument. Pour des CupCakes, j'utiliserai la fonction et l'argument
préchaufferFour(350);
afin de préchauffer le four à 350°, pour un poulet préchaufferFour(400);
pour 400° et pour des lasagnes préchaufferFour(broil);
pour les grattiner.La fonction
delay();
accepte comme argument un nombre entier, qui est le temps, en millisecondes, d'arrêt du programme.
Pour une pause d'une demi-seconde, nous écrirons :
delay (500);
Toutes les fonctions ont besoin de 0, 1, 2, parfois plus, arguments.
Par exemple, les fonctions "Void Setup" et "Void Loop" n'acceptent pas d'argument : les parenthèses restent vides et on écrit
Void Setup()
ou Void Loop()
. Les fonctions "pinMode" et "digitalWrite" acceptent chacune 2 arguments :
- pinMode : numéro de prise et mode de la prise (entrée ou sortie de signal).
On écritpinMode (# prise, mode prise)
. - digitalWrite : numéro de prise et état de la prise (haut ou bas, 5 ou 0 volt).
On écritdigitalWrite (# prise, état prise)
.
Vous savez maintenant comment finir l'exercice 3 !
Comme je ne suis pas trop méchant, voici la correction. Mais comme je suis tout de même un peu méchant j'y ai glissé 4 erreurs. Oui oui c'est vrai, cliquez sur "Start Simulation", vous verrez, ça ne fonctionne pas ! A vous de corriger la correction !
Mais attention, vous devriez pouvoir faire cet exercice vous-même, sinon vous ne serez pas prêt pour la partie 3 !
Résumé de la partie 2.
- Tinkercad circuits permet de faire tout ce qu'on peut faire avec Arduino, sans avoir d'Arduino.
- Un programme Arduino est divisé en deux parties : le
Void Setup
et leVoid Loop
. - Le
Void Setup
permet d'initialiser le programme et, entre autre, indiquer à Arduino quelles prises sont des entrées ou des sorties. - Le
Void Loop
contient le programme proprement dit et que l'on veut qu'Arduino exécute. - Les "Void" sont des fonctions. Les fonctions peuvent accepter des "arguments".
- Le code compris dans un "Void" doit obligatoirement être contenu entre deux accolades "{}".
- Chaque ligne d'instruction dans le programme doit se terminer par un point-virgule ";".
pinMode
etdigitalWrite
sont également des fonctions. Chacune accepte 2 arguments.delay
est une fonction qui n'accepte qu'un seul argument.- Une fonction est une façon "abrégée" de programmer. Dans une fonction il y a plein de code que l'on ne voit pas.
- Vous êtes capable d'écrire le programme de clignotement de la DEL tout seul.
Syntaxe | Emplacement | Utilisation | Argument(s) |
---|---|---|---|
pinMode (a, b) | setup() | Initialisation de la prise indiquée en argument | a = nom ou # de prise b = pin en lecture (INPUT) ou écriture (OUTPUT) |
digitalWrite (a, b); | loop() | Allume ou éteint la pin indiquée en argument. | a = nom ou # de prise b = pin "allumée" (HIGH) ou "éteinte" (LOW) |
delay (x); | loop() | Met le programme en pause pour une certaine durée | x = temps en millisecondes |
Passez à la partie suivante (exercices) pour pratiquer tout ce que vous venez de voir.
Dans la partie 3, nous allons utiliser des capteurs et lire/écrire des signaux analogiques, utiliser les prises PWM et découvrir le fabuleux monde des variables ! Wouaw !