Blog ENI : Toute la veille numérique !
Dernière chance (fin le 29/02) : -25€ dès 75€ sur les livres en ligne, vidéos... code FUSEE25. J'en profite !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Scratch et Raspberry Pi
  3. Scratch 3 et Arduino
Extrait - Scratch et Raspberry Pi Projets maker pour s'initier à l'électronique et à la robotique (2e édition)
Extraits du livre
Scratch et Raspberry Pi Projets maker pour s'initier à l'électronique et à la robotique (2e édition)
5 avis
Revenir à la page d'achat du livre

Scratch 3 et Arduino

Présentation

Le MIT a créé Scratch 3 comme un outil d’apprentissage de l’algorithmique et de la programmation. Lors de son portage sur le Raspberry Pi, Scratch 3 a été étendu à la gestion des GPIO et a été imaginé dès l’origine pour accepter des extensions. Cela permet à des développeurs de créer des blocs pour des cartes autres que le Raspberry Pi, qui n’étaient pas prévues au départ dans Scratch 3. Alan Yorinks (aussi connu comme MrYsLab) a créé plusieurs extensions qui seront utilisées dans cet ouvrage.

Arduino vs Raspberry Pi

Arduino est une carte programmable simple qui possède plus d’entrées/sorties que le Raspberry Pi. On l’utilise pour raccorder des capteurs ou des actionneurs. Une fois le programme en langage C chargé sur la carte, l’Arduino l’exécute en boucle. La puissance de calcul est faible et la mémoire réduite (32 Ko) mais la consommation est minime et permet d’envisager une alimentation par batterie ou par panneau solaire.

Le Raspberry Pi est un vrai ordinateur avec son système d’exploitation Linux. Tous les périphériques habituellement connectés sur un PC fonctionnent sur le Raspberry Pi (audio, vidéo, Ethernet, clé USB, HDMI, clavier, écran, souris...). Il est équipé d’un micro-processeur qui fonctionne à 1500 MHz (contre 16 MHz pour l’Arduino) et d’une mémoire plus étendue (jusqu’à 4 Go). Le Raspberry Pi accepte des programmes écrits dans tous les langages comme C++, Java, Python, etc. Par contre, il consomme énormément de courant et, contrairement à l’Arduino ne supporte pas une extinction brutale, qui peut empêcher un prochain redémarrage.

La carte Arduino UNO

1. Présentation

images/12LF01.png

Arduino Uno est une carte basée sur un microcontrôleur ATmega328P. Elle possède 14 broches d’entrée/sortie numériques (dont 6 peuvent être utilisées comme sorties PWM) et 6 entrées analogiques. La carte se connecte au Raspberry Pi via une prise USB Type B (modèle carré). Elle est alors alimentée par le port USB du Raspberry Pi. La prise d’alimentation n’est pas utilisée dans cette configuration.

2. Limitations de la carte Arduino

a. Connexion directe au Raspberry Pi

La carte Arduino fonctionne en 5 V alors que le Raspberry Pi fonctionne en 3,3 V. Le raccordement des deux cartes via les ports USB ne pose aucun problème, l’USB étant standardisé. Par contre, il ne faut pas connecter les E/S de l’Arduino directement sur les GPIO du Raspberry Pi sous peine de détérioration irréversible. La connexion directe entre les ports GPIO et les E/S de l’Arduino est possible sous réserve de l’utilisation d’un adaptateur de niveau.

b. Courant maximum sur les sorties

Les broches d’E/S de la carte Arduino fonctionnent en 5 volts. Chaque broche peut fournir ou recevoir 20 mA (destruction de la sortie à 40 mA) et comporte une résistance de tirage (pull-up) interne (non connectée par défaut) de 20 à 50 k.

L’ensemble...

Préparation de l’Arduino

Pour gérer la carte Arduino avec Scratch 3, il est nécessaire d’installer un programme sur l’Arduino. Ce programme lui permettra de communiquer avec Scratch 3 pour recevoir les instructions à exécuter et renvoyer l’état des E/S.

Avant de commencer l’installation de l’IDE Arduino (Integrated Development Environment = Environnement de développement intégré), il convient de mettre à jour le système Raspberry Pi OS sur le Raspberry Pi. Ceci permet de s’assurer que les dernières versions des programmes sont présentes.

sudo apt-get update 
sudo apt-get dist-upgrade 

Une fois la mise à jour terminée, vous pouvez installer l’IDE Arduino. Deux possibilités s’offrent à vous. En effet, la version de l’IDE qui est disponible dans les dépôts Raspberry Pi OS est une ancienne version. Elle fonctionne mais ne bénéficie pas des dernières nouveautés, et n’est plus maintenue par l’équipe Arduino. Par contre, son installation se fait en quelques clics, sans difficulté.

L’alternative est d’installer la toute dernière version. Celle-ci est disponible sur la page Arduino. Il faudra alors passer par un terminal, les commandes se font en mode texte. C’est un peu plus compliqué, mais la version d’IDE disponible est vraiment la toute dernière disponible au moment de l’installation.

1. Installation de l’IDE

Avant de commencer l’installation de l’IDE Arduino, il convient de mettre à jour le système Raspberry Pi OS sur le Raspberry Pi. Ceci permet de s’assurer que les dernières versions des programmes sont présentes.

sudo apt-get update 
sudo apt-get dist-upgrade 

Une fois la mise à jour terminée, lancez l’installation de l’IDE Arduino que vous avez choisi.

a. Ancienne version en mode graphique

La distribution Raspberry Pi OS ne dispose pas d’une version récente de l’IDE Arduino.

L’installation en mode graphique passe par le menu principal : Menu - Préférences - Add/Remove Software.

images/12LF06.png

C’est une version 1.0.5 qui est installée. Les extensions utilisées avec Scratch 3 nécessitent...

Installation de Scratch 3 avec les extensions

L’utilisation de Scratch 3 sur le Raspberry Pi nécessite un certain nombre de prérequis. Les sections qui suivent préparent Raspberry Pi OS pour que Scratch 3 puisse dialoguer avec Arduino et les autres cartes.

1. Vérifier que Python 3 se lance par défaut

Pour connaître la version par défaut de Raspberry Pi OS :

 Ouvrez un terminal. Saisissez la commande suivante :

python 

Avec la version de Raspberry Pi OS utilisée au moment de l’écriture de ces lignes, le résultat est celui-ci :

pi@raspberrypi:~ $ python 
Python 2.7.16(default, Oct 10 2019, 22:02:15) 
[GCC 8.3.0] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 

La version de Python exécutée par défaut est la version 2.7.16.

Pour sortir de Python, saisissez exit() après les >>> et validez avec la touche [Entrée].

Le support de cette version par l’équipe de développement de Python a cessé depuis le 1er janvier 2020. Elle devrait laisser place à la version de Python 3 mais ce n’est pas encore le cas. La version Python 3 est présente sur la distribution Raspberry Pi OS mais elle n’est pas exécutée par défaut. Les extensions pour Scratch sont écrites avec Python 3, il convient donc de modifier la version par défaut.

Lorsque vous réaliserez ce test, si la version de Python qui se lance est la version Python 3, vous pouvez ignorer la section suivante. Ceci signifie que la version de Raspberry Pi OS que vous utilisez exécute Python 3 par défaut.

2. Modifier la version de Python par défaut

Pour modifier la version de Python utilisée par défaut, saisissez les deux lignes suivantes dans la fenêtre du terminal :

sudo update-alternatives --install /usr/bin/python python  
/usr/bin/python2.7 1 
sudo update-alternatives --install /usr/bin/python python  
/usr/bin/python3.7 2 

Vous devriez obtenir ce résultat :

pi@raspberrypi:~ $ sudo update-alternatives --install  
/usr/bin/python python /usr/bin/python2.7 1 
update-alternatives: utilisation de « /usr/bin/python2.7 »  
pour fournir « /usr/bin/python »...

Connexion de l’Arduino à Scratch 3

1. Démarche à utiliser

Dans un premier temps, voici la démarche adoptée pour raccorder les cartes au Raspberry Pi et utiliser Scratch 3 pour les piloter. Cette procédure est à utiliser pour toutes les extensions connectées au Raspberry Pi.

a. Étape 1 : Préparer hors tension

 Arrêtez "proprement" le Raspberry Pi (shutdown) et débranchez l’alimentation.

 Connectez la carte Arduino avec le câble USB à l’un des ports USB du Raspberry Pi. Connectez les capteurs et les actionneurs à la carte Arduino (LED, moteur, capteur de distance…).

N’ajoutez ou ne retirez jamais de capteurs ou d’actionneurs lorsque le matériel est sous tension Vous risquez d’endommager définitivement votre carte Arduino.

b. Étape 2 : Mettre sous tension

 Mettez le Raspberry Pi sous tension. Au travers du port USB, l’alimentation sera également appliquée à la carte Arduino.

c. Étape 3 : Démarrer le serveur

 Démarrez le code du serveur OneGPIO en ouvrant une fenêtre de terminal et en saisissant la commande pour lancer le serveur approprié. Ici, ce sera le serveur pour la carte Arduino.

Liste des serveurs disponibles :

  • s3a - pour l’Arduino

  • s3c - pour l’Adafruit Circuit Playground Express...

Les blocs de programmation Arduino

1. Écriture sur une sortie numérique

images/12LF26.png

Ce bloc vous permet de sélectionner la broche sur laquelle vous voulez agir. Ce choix se fait dans la liste déroulante de gauche. Les sorties de 2 à 19 sont accessibles. La sortie peut prendre la valeur 0 ou la valeur 1, cette valeur est choisie dans la liste déroulante de droite.

2. Écriture sur une sortie PWM

images/12LF27.png

La liste déroulante permet de choisir la sortie numérique qui fournira le signal PWM. Les sorties 3, 5, 6, 9, 10, 11 sont disponibles. Le taux de PWM est variable de 0 à 100 %. Si vous mettez une valeur négative, la sortie sera à 0. Si vous mettez une valeur supérieure à 100, la sortie restera à 100 %.

3. Actionner un buzzer

images/12LF28.png

Ce bloc génère une tonalité sur la broche choisie dans la liste déroulante (2 à 19). La fréquence et la durée sont spécifiées dans les deux zones de la partie droite du bloc. La fréquence de la tonalité est exprimée en Hertz et la durée est en millisecondes avec une limite à 5000 ms soit 5 secondes. Si vous indiquez une durée supérieure à 5 secondes, la tonalité durera seulement 5 secondes.

4. Actionner un servomoteur

images/12LF29.png

Ce bloc contrôle l’angle de rotation de l’axe d’un servomoteur. Il contient...

Exemples de programmes

1. Faire clignoter une LED

a. Schéma de branchement

Le "Hello World" de l’électronique consiste à faire clignoter une LED. Cette action simple permet de vérifier toute la chaîne et de s’assurer que l’utilisateur est capable de piloter de bout en bout le dispositif (connexions, logiciel, programme…).

images/12LF33.png

Connectez une LED comme sur le schéma ci-dessus. La sortie utilisée est la broche 9 de la carte Arduino. Une résistance de 220 Ω limite le courant dans la LED rouge. La cathode de la LED rejoint la broche de masse GND.

b. Programme clignotement de LED

Le programme est téléchargeable sous le nom Arduino_LED_basic.sb3.

Ce programme comporte une boucle infinie. Quand le drapeau est cliqué, la broche 9 de l’Arduino est mise à 1 pendant une demi-seconde, puis à 0 pendant une demi-seconde. Cette séquence se répète tant que l’utilisateur ne clique pas sur l’icône Stop. La LED clignote toutes les demi-secondes.

quand drapeau vert est cliqué 
répéter indéfiniment // ouverture d'une boucle de répétition. 
Mettre la pin numérique 9 à 1 // la LED est branchée sur la pin 9.  
L'état 1 correspond à la position allumée. Le courant passe. 
attendre 0.5 secondes 
Mettre la pin numérique 9 à 0 // l'état 0 correspond à 
la position éteinte. Le courant ne passe pas. 
attendre 0.5 secondes 
// Fermeture de la boucle de répétition. 
images/12LF34.png

c. Scratch annonce l’état de la LED

Une modification du programme permet d’utiliser la scène de Scratch pour combiner l’action physique sur l’Arduino et l’affichage de l’état de la LED. Pour cela, nous allons utiliser le bloc dire ().

Le programme est téléchargeable sous le nom Arduino_LED.sb3.

quand drapeau vert est cliqué 
répéter indéfiniment // ouverture de la boucle de répétition. 
Mettre la pin numérique 9 à 1 dire Allumé // l'état 1 correspond à la position 
allumée. Lorsque la LED est allumée, le sprite en informe l'utilisateur  
par un message. 
attendre...

Programme de synthèse

Ce programme propose de regrouper la plupart des possibilités abordées précédemment. Au moment de l’écriture de ce chapitre (mai 2020), la France est en confinement et de nombreux makers participent à la lutte contre le virus Covid-19 en imprimant des visières ou des clips de masques distribués à tous ceux qui en ont besoin quotidiennement. Le projet qui suit entre dans ce cadre et a été réellement mis en œuvre par de nombreuses équipes.

1. Cahier des charges

Le lavage des mains fréquent présente un risque de transmission du virus par l’intermédiaire du piston sur lequel les utilisateurs appuient pour recevoir une dose de gel hydroalcoolique. Le système présenté ici offre les caractéristiques suivantes :

  • détection de présence sans contact (capteur à ultrasons) ;

  • appui sur le piston par un servomoteur ;

  • clignotement d’une LED le temps du lavage de mains ;

  • bip sonore en fin de lavage ;

  • détection du niveau de liquide (flotteur) ;

  • bip d’alarme pour remplissage du bidon.

L’utilisateur passe la main devant le détecteur à ultrasons. Si le bidon est vide, la LED rouge s’allume et le buzzer émet des bips pendant 3 secondes. S’il reste du gel, le servomoteur appuie sur le piston et délivre une dose de gel dans la main de l’utilisateur. La LED rouge se met à clignoter pendant le temps du lavage de mains (20 secondes). À la fin des 20 secondes, la LED s’éteint et un bip est émis par le buzzer pour indiquer la fin du lavage. Le cycle recommence et le programme se met en attente d’une nouvelle détection de présence.

2. Montage du projet

images/12LF58N.png

Tous les éléments de ce montage ont été abordés précédemment sauf le détecteur de niveau. Le synoptique ci-dessus n’est pas un schéma de câblage. Il donne simplement une vue globale de la réalisation du projet.

a. Le capteur de niveau

Ce modèle de capteur de niveau étanche est disponible avec des caractéristiques domestiques (niveau de liquide dans un réservoir, culture hydroponique, jardinage, aquariums, eau pour des poules…) ou industrielles (chimie, pétrochimie...

Conclusion

Avec ce système d’extensions, Scratch 3 ouvre la voie à la découverte de nombreuses cartes habituellement gérées par leur propre IDE. Ici, un débutant qui vient de découvrir Scratch 3 pourra aisément démarrer sur Arduino pour appréhender cet environnement, avant de passer à du développement sur l’IDE Arduino.