Après le STOP:bit et le LAMP:bit, je vais maintenant vous parler du Servo:Lite de Kitronik. Une carte d’extension qui facilite le branchement des servomoteurs. Le Servo Lite permet en effet d’en piloter jusqu’à 3 (ou seulement 2 si vous utilisez les LED NeoPixel).

La boutique MC Hobby qui m’apporte son soutien depuis le début, m’a accordé une très grosse réduction sur l’achat de ce produit.
Mais, je ne suis pas payé pour en parler (ou en faire la publicité). Je n’ai pas non plus de lien d’affiliation (si vous cliquez sur un lien ou si vous achetez ce produit, je ne touche aucune commission). Je parlerai, évidement des points positifs. Mais je n’hésiterai pas non plus à vous parler aussi des points négatifs.
Le montage ne présente aucune difficulté. Il est d’ailleurs clairement expliqué sur le site de Kitronik.

LED Neopixel
Souvenez-vous, je vous avais déjà parlé des LED adressables de type NeoPixel au mois d’avril :
- Ce sont des LED RGB (Red, Green, Blue).
- Elles peuvent bien sûr se colorer de chacune des 3 couleurs, mais surtout, elles peuvent prendre n’importe quelle couleur en variant la proportion entre le rouge, le vert et le bleu (un peu comme pour la peinture).
- Elles forment une chaîne (ou un réseau) qui les relies entre elles et sont toutes pilotables individuellement.
- Rien n’empêche d’en ajouter pour prolonger la chaîne (à condition que l’alimentation puisse suivre).
Installation de la bibliothèque
Le plus simple pour les piloter est d’installer la bibliothèque NeoPixel. Vous disposerez ainsi d’instructions spécifiques facilitant beaucoup le contrôle des LED.
Avec MakeCode, déroulez le menu « Avancé » et cliquez sur « Extensions« .

Cliquez sur « neopixel » et attendez quelques instants…

Ça y est, la bibliothèque est installée. Vous avez maintenant accès à de nouvelles fonctions.

En MicroPython (avec Mu), c’est encore plus facile, il suffit d’appeler la bibliothèque au début du code.
from neopixel import NeoPixel
Programmation
Les LED sont reliées au port P0 du Micro:Bit. Au début du programme, il faut créer un objet (« strip » dans cet exemple) et indiquer le port utilisé (P0), le nombre (5) et le type de LED (RGB).
Baissez éventuellement la luminosité en indiquant une valeur comprise entre 0 et 255.
Définissez la couleur de chaque LED en précisant auparavant son numéro de 0 à 4 (bouton A). Pour que le changement soit visible, il faut ensuite demander la mise à jour de l’affichage.
Mais il est également possible de choisir la même couleur pour l’ensemble des LED (bouton B) et là l’affiche se met automatiquement à jour.

# Appel des bibliothèques
from microbit import *
from neopixel import NeoPixel
# Crée l'objet "strip" pour piloter 5 LED
strip = NeoPixel(pin0, 5)
# Définis les couleurs
ROUGE = (255, 0, 0)
ROSE = (255, 0, 100)
JAUNE = (255, 125, 0)
VERT = (0, 255, 0)
ORANGE = (255, 40, 0)
CYAN = (0, 255, 255)
BLEU = (0, 0, 255)
VIOLET = (180, 0, 255)
BLANC = (255, 255, 255)
OFF = (0, 0, 0)
# Boucle infinie
while True:
# Si bouton A appuyé
if button_a.is_pressed():
strip[0] = (ROUGE)
strip[1] = (ORANGE)
strip[2] = (JAUNE)
strip[3] = (VIOLET)
strip[4] = (BLEU)
# Affiche toutes les LED
strip.show()
# Si bouton B appuyé
if button_b.is_pressed():
for i in range(0, 5):
# Programme la couleur de la LED
strip[i] = (VERT)
# Affiche toutes les LED
strip.show()
# Petite pause (0,01 seconde)
sleep(10)
Servomoteurs
Mais l’intérêt principal de la carte est bien sûr la gestion des servomoteurs. Pour tester cela, je vais utiliser un simple servomoteur SG90.

Attentions, ne vous trompez pas de sens, branchez :
- Le fil marron sur la borne GND
- Le fil rouge sur la borne VCC
- Le fil jaune sur la borne SIG

Le connecteur nommé SERVO_1 est relié au port P01 du Micro:Bit et SERVO_2 est relié au port P02.
Ce type de servomoteur peut prendre n’importe quel angle entre 0 et 180°. Il suffit simplement d’indiquer l’angle souhaité avec le bloc : régler position servo broche P1 (ou P2) à angle.

Dans cet exemple de code, les LED s’allument en rouge et le servomoteur est à la position à 0° au début du programme. Si l’on appuie sur le bouton A, les LED deviennent vertes et le servomoteur se positionne à 90°. Puis au bout de 2 secondes, le moteur revient à sa position de départ. La fonction « positionDepart » allège le code et facilite les modifications ultérieures.

J’ai un peu modifié les angles dans la version MicroPython, par rapport à la version MakeCode, car le servomoteur ne se comporte pas exactement de la même manière. Il vous faudra peut être quelques essais afin de trouver les valeurs qui fonctionnent le mieux chez vous.
# TestServo
# Appel des bibliothèques
from microbit import *
from neopixel import NeoPixel
# Crée l'objet "strip" pour piloter 5 LED
strip = NeoPixel(pin0, 5)
# Définis les couleurs
ROUGE = (255, 0, 0)
VERT = (0, 255, 0)
def positionDepart():
for i in range(0, 5):
# Programme la couleur de la LED
strip[i] = (ROUGE)
# Affiche toutes les LED
strip.show()
# Positionne le servomoteur
pin1.write_analog(10)
positionDepart()
# Boucle infinie
while True:
# Si bouton A appuyé
if button_a.is_pressed():
for i in range(0, 5):
# Programme la couleur de la LED
strip[i] = (VERT)
# Affiche toutes les LED
strip.show()
# Positionne le servomoteur
pin1.write_analog(70)
# Pause
sleep(2000)
positionDepart()
# Petite pause (0,01 seconde)
sleep(10)
Voilà un petit exemple d’utilisation du servomoteur (pour ouvrir la barrière, appuyez sur le bouton A). Si vous souhaitez reproduire cette scène, téléchargez et imprimez la barrière (sur Thingiverse).

Pour utiliser la SERVO_2 (reliée au port P02), il suffit de l’indiquer dans le programme. Bien sûr, rien ne vous empêche d’utiliser 2 moteurs en même temps. Pour en ajouter un 3ème, c’est un peu plus compliqué car il faut déactiver les LED Néopixel, mais je vous reparlerai bientôt (avec un exemple concret).
Problème rencontré
L’interrupteur OFF/ON s’est dessoudé au bout de quelques heures de test. Je pense qu’il s’agit plutôt d’une mauvaise manipulation de ma part (je n’avais pas mes lunettes et j’ai bêtement forcé sur les soudures en actionnant le bouton dans le mauvais axe). Mais, le bouton est un composant CMS (composant soudé en surface), la fixation est donc beaucoup moins solide qu’avec un composant traversant le circuit.
Alors s’il vous plait, soyez doux avec ce pauvre interrupteur !
J’ai essayé sans succès, de le ressouder, mais j’avais un faux-contact et ensuite, après quelques essais, le bouton s’est finalement désintégré. J’ai donc été obligé de relier les contacts de façon permanente, avec un peu d’étain.

Je vous rassure, la carte fonctionne toujours très bien, mais maintenant je suis obligé de retirer au moins une des piles pour l’éteindre.
Conclusion
Malgré cette mésaventure, je suis très content de cette carte d’extension. Elle est compacte, facile à utiliser et surtout, elle résout le problème de l’alimentation (le Micro:Bit fonctionne en 3,3 V alors que les servomoteurs nécessitent 5 V).
La carte SERVO:Lite permet aussi d’animer le robot MOVE.

Mais ce sera l’objet d’un prochain article…
Bonjour,
» elles peuvent prendre n’importe quelle couleur en variant la proportion entre le rouge, le vert et le bleu (comme pour la peinture). »
Pas vraiment « comme en peinture ». Le rouge, le vert et le bleu sont les couleurs primaires en synthèse *additive*, alors qu’en synthèse *soustractive* (cas de la peinture, des filtres de couleur sur les projecteurs ou les objectifs…) ce sont le rouge, le *jaune* et le bleu.
J’aimeJ’aime
Bonjour Eric,
Vous avez tout à fait raison, je vais introduire une nuance et plutôt dire « un peu comme pour la peinture », pour suggérer que c’est le même principe, mais que ce n’est pas exactement la même chose.
Merci pour cette remarque.
J’aimeJ’aime