Arduino-y-Protocoder-LED

Aujourd’hui au programme de notre nouveau chapitre du cours de programmation pour makers avec Arduino et Protocoder : l’animation d’une matrice de LED utilisable sur un robot. Nous allons ainsi créer un œil contrôlable à distance via Protocoder.

Matériel

  • Carte ZUM BT-328
  • Matrice de LED (nous avons utilisé une carte basée sur la puce MAX72XX)
  • Comodoro (les fichiers de notre robot sont à télécharger à la fin du chapitre)

Code Arduino

Le code Arduino permet de recevoir les données à partir de l’application Protocoder. En fonction de ces données, l’œil s’anime dans une position spécifique. L’œil clignote également de manière aléatoire.

Pour contrôler la matrice de LED nous utiliserons la bibliothèque LedControl. Tu peux la télécharger sur GitHub et elle est également disponible avec le code source à la fin du chapitre. Pour en savoir plus sur les possibilités offertes par cette bibliothèque, rendez-vous sur le site Arduino Playground.

Pour commencer à programmer avec Arduino, nous devons intégrer la bibliothèque, définir les pins (broches) et créer un objet LedControl, que nous nommerons ici LM :

Dans la dernière ligne du code ci-dessus, nous avons défini l’objet LM que nous utiliserons pour contrôler la matrice de LED.

Créons maintenant la variable inString, qui stockera les données reçues par Bluetooth. Les fonctions readFromAndroid et writeData ont pour mission respective de stocker les données dans la variable inString et de définir la direction dans laquelle l’œil doit regarder. Pour en savoir plus sur ces fonction tu peux consulter cet article (pour le moment uniquement disponible en anglais et en espagnol).

Une fois le message entièrement lu (après avoir reçu le caractère ‘=’), nous pouvons effacer les informations à l’écran avec la commande LM.clearDisplay(0); afin d’être certain que l’œil sera correctement positionné.
Dans la fonction setup nous lançons le port série, nous activons la matrice de LED (qui est en mode économie d’énergie par défaut), nous configurons la luminosité au maximum, nous « effaçons » la matrice de LED et enfin nous faisons regarder l’œil droit devant.

Nous avons inclus deux routines de test : testPos(), qui change la position de l’œil, et test(), qui allume chaque LED l’une après l’autre.

Afin de prédéfinir les différentes positions de l’œil, nous pouvons nous aider de la matrice à télécharger à la fin du chapitre et marquer quelles LED doivent être allumées puis traduire notre idée en code. Voici la fonction à utiliser :

Le statut peut être true ou false selon que tu veux allumer ou éteindre les LED.

Dans le cas de la fonction lookCenter(), qui permet de faire regarder l’oeil droit devant, le schéma est le suivant :

GRID-LED

Voici le code Arduino correspondant à cette position :

Nous pouvons donc prédéfinir différentes positions. Voici les fonctions qui ont été réalisées pour modifier la position de la pupille de notre œil (lookLeft, lookRight, lookUp, lookDown et lookCenter) et pour le faire cligner (blinkClose, blinkOpen et fullBlink).
La variable delayBlink permet de modifier la vitesse de transition entre la fermeture et l’ouverture de l’œil. Nous l’utiliserons pour augmenter ou réduire la vitesse du clignement. La fonction fullblink prend en compte comme paramètre l’intervalle de temps entre l’état ouvert et l’état fermé. Nous l’utiliserons pour augmenter ou réduire la fréquence des clignements.

Les fonctions blinkOpen et blinkClose permettent respectivement d’ouvrir et de fermer l’œil. Elles utilisent la variable delayBlink pour déterminer la vitesse de clignement.
Enfin la fonction loop permet de contrôler le clignement de l’œil et la réception des données via Bluetooth, à l’aide des fonctions readFromAndroid et writeData.

La première partie de ce code permet de contrôler le clignement de l’œil :

Afin d’obtenir un clignement différent à chaque exécution du code, deux états ont été inclus (simple et double) avec un fonctionnement similaire. Premièrement il est vérifié si le temps d’exécution actuel du programme est supérieur au temps défini pour le prochain clignement. Si la condition est vraie (true), la portion de code correspondant au clignement (routine) sera exécutée et le temps suivant sera défini en ajoutant avec la fonction random une quantité aléatoire à la variable concernée.

La seconde partie du code permet de lire les données envoyées depuis l’application Protocoder via Bluetooth :

Code Protocoder

L’application que nous allons réaliser avec Protocoder enverra les données à Arduino via Bluetooth.

bq_Aquaris_E4_250

Pour commencer à programmer, nous utilisons l’entête habituelle de nos applications et nous ajouterons le contrôle de la connexion Bluetooth. Si tu souhaites en savoir plus sur le fonctionnement de ce code, tu peux consulter ce chapitre (uniquement disponible en espagnol pour le moment).

 

bluetooth

Pour envoyer les données sur la carte ZUM, nous utilisons la fonction send qui prend comme paramètre la chaîne de caractères (string) à envoyer. Par exemple, pour que l’oeil regarde à droite, la fonction enverra seulement le mot right, soit send(“right”);. Voici ci-dessous le code de la fonction send :

Nous créons ensuite les boutons qui détermineront la position de l’œil. Nous uploadons dans Protocoder les fichiers que nous voulons utiliser, puis nous créons les boutons à l’aide du code suivant :

boutonsOeilPour ajuster la taille et la position des boutons, nous utilisons deux variables :

  • WidthImg, qui détermine la largeur et la hauteur du bouton.
  • posX, qui détermine la position du bouton.

Nous intégrons la fonction send(); à la fonction à exécuter après avoir appuyé sur le bouton afin d’envoyer l’instruction correspondant à la position souhaitée :

Modélisation 3D : Comodoro

Pour créer l’objet 3D Comodoro, nous avons utilisé le logiciel Blender. Comodoro-sepia

 

Pour imprimer notre pièce avec un support, nous utilisons Cura avec les réglages suivants :

 

preference-support

Ce support est facile à retirer et permet d’avoir plus de stabilité lors de l’impression.

 

Toujours dans Cura, nous avons paramétré l’échelle à 40,79 afin que notre objet soit adapté à la taille de notre matrice de LED. Tu peux bien évidemment ajuster cette échelle afin que la pièce corresponde à ta matrice de LED.

Comodoro Size