4. Microcontrôleur#
Ce workshop est issu de la formation Fablab. On retrouve les informations nécessaires sur ce site.
4.1 Arduino IDE (logiciel et board)#
C’est un logiciel gratuit et open source qui vous permet de coder des programmes exécutés par un petit ordinateur de type Arduino, Raspberry PI ou autres. Ces ordinateurs fonctionnent au moyen de langage C et non Python. Si vous voulez utiliser ce dernier, il faut au préalable installer un interpréteur sur votre petit ordinateur afin que celui-ci puisse convertir le langage.
Notre ordinateur va fonctionner de deux façons différentes et au moyen de deux états. L’état 1 équivalent à une tension de 3,3V et l’état 0 équivalent à une tension 0V ne laissant donc pas passer le courant. Ces états vont permettre de travailler soit en digital soit en analogique.
Le digital va passer d’un état à l’autre sans transition. Cela va par exemple permettre d’allumer/éteindre une LED tous les 2 secondes. L’analogique va pouvoir se trouver dans tous les états intermédiaires entre 0 et 3,3V permettant ainsi de mesurer ou programmer des choses sans être dépendant de ce système binaire. On va ainsi pouvoir mesurer du son, des températures, des intensités lumineuses et ainsi de suite. Il est également possible de mélanger le digital et l’analogique en programmant par exemple un seuil de son assez intense (taper dans ses mains p.e) à partir duquel une LED s’éteint ou s’allume.
Avant d’aller plus loin, il est nécessaire de savoir avec quelle board on travaille car le code en dépend. Une board Raspberry PI n’aura pas les éléments aux mêmes endroits qu’une board Arduino par exemple. Il est donc primordial de télécharger les informations concernant cette dernière dans le « board manager » présent soit à gauche de votre fenêtre soit dans l’onglet tools de votre barre de recherche.
Dans le cadre de notre formation au sein du Fablab, nous avons travaillé avec des Raspberry Pi Pico RP2040
Il existe une bibliothèque de code disponible pour tout un tas de fonction différente dans l’onglet file puis examples.
Si c’est la première fois que vous ouvrez ce logiciel, vous ne trouverez que des examples issu de Arduino IDE. Dans le cadre de la formation nous avons dû télécharger deux autres bibliothèques d’examples afin de faciliter l’avancement du projet. Cela se fait juste en dessous du « board manager » vu précédemment dans l’espace « library ».
La bibliothèque Neopixel va servir au LED et la Servo va servir au fonctionnement d’un servomoteur (un petit moteur adapté au microcontrôleur).
4.2 Allumer une LED#
Pour ce faire nous avons donc été dans la bibliothèque NeoPixel et nous avons sélectionné le code « simple » écrit par un certain Shae Erisson. Ce code va nous permettre d’allumer une LED en choisissant l’intensité du rouge/vert/bleu, sur une échelle allant de 0 à 255, permettant ainsi de produire n’importe quelle couleur.
Il suffit alors de sélectionné la bonne « pin » vers laquelle notre ordinateur va envoyer ce signal d’information. Dans le cas de cette board, une LED est placé sur la pin 23.
Il suffit alors de « vérifier » son code et enfin de « l’upload » vers la board. Cette dernière continuera alors d’exécuter uniquement le dernier code configuré jusqu’à ce qu’un nouveau lui soit envoyé.
4.3 Faire fonctionner un Servomoteur#
L’objectif ici est de faire tourner un petit moteur à une intensité voulu à l’aide d’une résistance variable (potentiomètre) se trouvant entre l’alimentation (ici mon ordinateur mais représenté par une batterie sur le schéma ci-dessous) et le moteur.
Nous n’avons pas utiliser la documentation Fablab mentionné au tout début mais celle proposée ici par Arduino. Nous avons suivi le circuit Knob ainsi que le code qui l’accompagne.
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
}
Faites bien attention de vérifier que vous êtes bien dans une pin analogique car le flux d’information (comme vu plus haut) n’est pas du tout le même que sur les autres pin. Si le montage est correcte, votre petit moteur devrait tourner comme ceci :
Si la vidéo ne s’affiche pas correctement sur votre navigateur, voici le lien.
4.4 (Essayer de) Faire fonctionner un senseur#
L’unique problème rencontré lors de cette formation fut un problème matériel cette fois-ci. Sur Mac, le logiciel Arduino IDE n’arrive pas à reconnaitre correctement quelle sortie/entrée USB à emprunter lors de l’envoie d’information vers la board. Dans mon cas, le logiciel confondait chacun des appareils Bluetooth auquel mon ordi s’était déjà une fois connecté avec un possible port USB. Après de longues recherches sur des forums officiels (ou non), la seule solution fonctionnelle qui est apparue était de Restart le logiciel voire carrément l’ordinateur jusqu’à apparition du port USB voulu.
Je n’ai vu apparaitre ce port que lors du montage pour le LED et pour le Servomoteur. Je n’ai de ce fait pas pu réaliser le montage avec le senseur de température/humidité (DHT-20) ni celui avec le senseur de notre choix. J’ai perdu plusieurs heures au cours des deux après-midis à essayer de voir apparaitre ce port USB et me suis donc résolu à uniquement faire les montages vu plus haut.
Cependant j’ai eu l’occasion de réaliser le montage du DHT-20 avec Chris dans le cadre de mon projet final. Nous avons utilisé son ordinateur ce qui m’a permis de contourner temporairement le problème de port USB.