Eliobot

C’est un petit robot pédagogique, créé par un Maker français en 2022. Il permet d’initier les enfants à la programmation. Bien sûr, il est possible de faire la même chose sur écran avec un logiciel qui simule le déplacement d’un robot à l’écran.

Mais ça n’a rien à voir, la programmation d’un vrai robot est beaucoup plus passionnante. Non seulement il faut débugger le programme, mais il faut aussi analyser les petits soucis matériels :

  • Pourquoi le robot n’avance pas ?
  • Pourquoi robot dévie (sur la droite ou la gauche), au lien d’avancer en ligne droite ?
  • Pourquoi le robot tourne sur lui même au lieu d’avancer ?
  • Pourquoi le robot recule au lieu d’avancer ?
  • Etc…

Tous ces problèmes, il faudra les résoudre mais lorsque ça fonctionne enfin, quelle satisfaction (et en plus, vous aurez acquis de nouvelles compétences).

J’aime bien jouer avec ce type de robot, alors quand Romain Boutrois m’a contacté pour me proposer de tester le robot Eliobot, j’ai accepté avec plaisir.

L’article est sponsorisé puisque j’ai reçu ce robot gratuitement, mais je conserve une entière liberté pour vous parler aussi bien des points positifs que des points négatifs.

Pour la petite histoire…

Romain est ingénieur de formation, il a passé beaucoup de temps dans les fablabs et les associations à partager et construire des projet avec d’autres makers et geeks. C’était la grande période des imprimantes RepRap où tout le monde faisait des variantes ou carrément de nouveaux modèles, ainsi que les drones qui commençaient a arriver pour le grand public. Il en a construit beaucoup et c’est ce qui lui a permis de trouver ses premiers jobs dans des startup de drone. Ensuite, il s’est mis à son compte pour accompagner les entreprises dans la conception et l’industrialisation de leurs produits. C’est ce qui lui a donné le temps et l’envie de concrétiser le projet qu’il avait depuis un moment : Un robot pour faire découvrir la robotique aux enfants.

« Eliobot c’est le premier robot officiel de la société, mais c’est peut être mon 20eme (voir beaucoup plus en comptant les projets abandonnés) et celui qui est commercialisé est la 5eme itération après un peu plus de 1 an de tests auprès des enfants notamment. »

Evolution du robot Eliobot

« L’avenir pour Eliobot dans un futur proche va être de développer l’écosystème hardware avec des nouveaux capteurs comme le suiveur de ligne et actionneurs et on prépare aussi une plateforme de e-learning avec toutes les ressources, tutos, activités et défis pour progresser en robotique. Il y aura peut être un robot V2, peut être un ou des nouveaux produits … On verra en fonction de la demande. »

L'équipe d'Eliobot

Montage du kit

Le robot est en pièces détachées dans une jolie boite en carton.

Eliobot le robot en kit

Le montage est un jeu d’enfant, il suffit d’un simple tournevis cruciforme, vous trouverez les instructions nécessaires à cette adresse.

Le robot Eliobot

Et il y a même une petite surprise pour réconforter les Makers après le montage. Miam-Miam !

Petite récompense après le montage du robot Eliobot

Présentation du robot

Comme beaucoup de robots de ce type, Eliobot possède 2 roues motrices (à l’avant) et une roue libre (à l’arrière). Sa batterie de 3,7 V (14500) est amovible et se recharge lorsque que le robot est relié une source de courant sur la prise USB-C (qui sert aussi à la programmation). Il y a aussi un bouton poussoir (programmable), une LED adressable (Neopixel), un buzzer, 4 détecteurs d’obstacles à infrarouge (3 à l’avant et 1 à l’arrière) et un emplacement pour ajouter d’autres capteurs (par exemple un suivi de ligne).

Présentation (recto, verso) du robot Eliobot

Le Microcontrôleur utilisé est un ESP32-S2FN4R2, c’est une excellente nouvelle puisque le robot devrait être capable de communiquer en WiFi.

Le microcontrôleur ESP32-S2FN4R2 qui équipe le robot Eliobot

Il y a aussi 2 petits boutons poussoirs (un peu cachés à l’arrière) :

  • Le bouton Reset (noté « EN » sous la carte) qui évite d’éteindre et de rallumer le robot lorsqu’on veut simplement le redémarrer.
  • Le bouton « IO0 » qui permet de flasher le firmware de l’ESP32
Les boutons Reset et IO0 du robot Eliobot

Personnalisation du robot

Une partie des pièces est imprimée en 3D, les fichiers sont disponibles sur Cults. C’est une très bonne chose puisque vous pourrez les réimprimer en cas de problème.

Téléchargement des fichiers 3D qui composent le robot Eliobot

Mais curieusement, si les bumpers avant et arrière sont imprimés d’une autre couleur que noir, la détection d’obstacles ne fonctionnent plus. Ou plutôt, les capteurs détectent en permanence des obstacles (même quand il n’y en a pas), les LED jaunes sont toujours allumées.

Erreurs au niveau des détecteurs d'obstacles

Les détecteurs d’obstacles sont toujours composés d’un émetteur et d’un récepteur. L’émetteur envoie un signal (sonore ou lumineux) et si un objet se trouve suffisamment proche, le signal ricoche dessus est peut être capté par le récepteur.

Principe de fonctionnement d'un détecteur d'obstacle

Eliobot émet en continu des signaux lumineux avec de minuscules LED infrarouges. Normalement les récepteurs sont isolés des lumières parasites par les bumpers.

LED et récepteur infrarouge

Je pense que les cloisons sont un tout petit peu trop fines. Cela fonctionne parfaitement avec le noir, parce qu’il absorbe très bien la lumière. Malheureusement, avec des couleurs plus claires, une faible quantité de lumière arrive quand même à passer.

J’ai essayé de modifier les bumpers (en augmentant légèrement l’épaisseur des cloisons) mais le résultat est plutôt mitigé. Cela fonctionne avec le filament gris, mais toujours pas avec le rouge (même augmentant le remplissage à 100%).

Alors j’ai un peu triché, j’ai passé un petit coup de peinture noire à l’emplacement des capteurs (si vous ne dépassez pas, ça ne se verra pas).

L'emplacement des capteurs peint en noir

En fait, il n’est pas utile de peindre tout (comme sur la photo), il suffit simplement de peindre la cloison.

Mais maintenant, le problème est enfin résolu : PIN-PON !!! PIN-PON !!!

Eliobot transformé en camion de pompiers par la coque LEGO

Comme vous l’avez remarqué, j’en ai profité pour faire aussi une coque LEGO. Vous trouverez les fichiers sur Printables, alors je compte sur vous pour personnaliser votre robot.

Téléchargement des bumpers en couleur et de la coque LEGO

Programmation avec ElioBlock

ElioBlock, le langage de blocs officiel est disponible à l’adresse suivante : https://app.eliobot.com
Le programme est très intuitif mais en cas de doute, n’hésitez pas à consulter la documentation.

Documentation du robot Eliobot

L’interface graphique d’ElioBlock génère le code en CircuitPython (un langage dérivé du MicroPython, créé par Adafruit).

Programmation avec ElioBlock

Il faut ensuite téléchargez le fichier main.py (en cliquant sur Programmer) et le copiez dans le robot (comme s’il s’agissait d’une clé USB).

Copie du fichier main.py dans le robot Eliobot

Vous pouvez même modifier par la suite votre programme avec un éditeur de texte.

Modification du fichier main.py avec Notepad++

Voilà un exemple (rudimentaire) de code de détection d’obstacles.

Détection d'obstacles avec ElioBlock

Cela fonctionne, mais puisque le robot dispose de 3 capteurs à l’avant (et d’un à l’arrière), il est possible d’améliorer le programme.

Détection d'obstacles améliorée avec ElioBlock

Vous pouvez aussi tester la nouvelle interface de programmation (actuellement encore en Beta). Elle reprend le style visuel de Scratch et devrait simplifier la programmation du robot car elle intègre les tutos. Si cela vous intéresse, les infos sont disponibles ici : https://app.eliobot.com/beta/

CircuitPython avec Thonny

C’est le véritable langage de programmation d’Eliobot. Le CircuitPython est un dérivé open source du langage de programmation MicroPython. Il y a quelques différences entre les 2 langages mais surtout énormément de points communs, ce qui fait qu’il est très facile de passer de l’un à l’autre.

Comme je l’ai dit tout à l’heure, il suffit d’un éditeur de texte pour écrire ou modifier le programme, mais l’utilisation d’un IDE (environnement de développement intégré) comme Thonny simplifie beaucoup les choses (vous pouvez le télécharger ici).

Après avoir installé Thonny, allez dans Exécuter – Configurer l’interprétateur…, sélectionnez CircuitPython (générique) et le port correspondant à la carte (ou laissez « Essayer de détecter le port automatiquement » ).

Configuration de Thonny

Vous pouvez taper directement des instructions dans la console, mais pour conserver le code il faut l’enregistrer dans le fichier main.py
Cliquez sur la 2ème icone (une disquette avec une flèche vers le haut), puis sur appareil CircuitPython.

Accès au robot Eliobot depuis Thonny

Sélectionnez le fichier main.py et cliquez sur OK.

Ouverture du fichier main.py depuis Thonny

Vous pouvez lancez le programme avec le triangle sur fond vert ou l’arrêter en cliquant sur le carré sur fond rouge.

Utilisation de Thonny

Thonny est très pratique pour debugger le programme ou tester rapidement une modification (au niveau des capteurs, buzzer, LED Neopixel). Mais pour tester les déplacements du robot, il faudra quand même brancher et débrancher le câble à chaque fois.

L’IDE Arduino

Il est également possible d’utiliser le langage Arduino pour programmer le microcontrôleur (ESP32) d’Eliobot.

Attention, cela effacera le firmware CircuitPython d’Eliobot, mais ne vous inquiétez pas, jexpliquerai ensuite comment réinstaller le firmware d’origine.

Tout d’abord, il faut rajouter les paramètres du microcontrôleur (ESP32-S2FN4R2) dans l’IDE Arduino. Pour cela, allez dans Fichier – Préférences et copiez la ligne suivante dans le champ URL de gestionnaire de cartes supplémentaires :

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json

S’il y a déjà d’autres URL, vous pouvez ajouter celle là, à la suite (en la séparant d’une virgule).

Ajout des cartes ESP32 dans l'IDE Arduino

Allez ensuite dans Outils – Type de carte – Gestionnaire de carte, tapez « esp32 » dans le champ de recherche et cliquez sur le bouton Installer.

Installation des cartes ESP32 dans l'IDE Arduino

Vous pouvez maintenant aller dans Outils – Type de Carte – ESP32 Arduino et sélectionner la carte UM TinyS2 (qui utilise le même microcontrôleur).

Sélection de la carte ESP32 dans l'IDE Arduino

Appuyez sur le bouton IO0 et connectez Eliobot à l’ordinateur (en laissant encore le doigt appuyé pendant quelques secondes). Si le robot était déjà branchée, vous pouvez aussi appuyer sur le bouton IO0 et ensuite sur le bouton reset (EN) en laissant bien sûr le doigt appuyé sur IO0.

Ensuite, sélectionnez le bon port COM.

Sélection du port COM dans l'IDE Arduino

Je vous propose de tester le code suivant, il fait clignoter alternativement la LED Neopixel en bleu, en blanc et en rouge (ainsi, vous verrez tout de suite si le téléversement a fonctionné) :

// Eliobot_LED_NeoPixel
// Appel de la bibliothèque NeoPixel
#include <Adafruit_NeoPixel.h>
// Constantes
const int PIN_NEOPIXEL = 1;
const int NB_LED = 1;

// Création de l'objet "neoPixel"
Adafruit_NeoPixel neoPixel = Adafruit_NeoPixel(NB_LED, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800);

void setup() {
  // initialisation du module de LED
  neoPixel.begin();
  // Intensité lumineuse (de 0 à 100)
  neoPixel.setBrightness(10);
}

void loop() {
  // LED en bleu
  neoPixel.setPixelColor(0,0,0,255);
  neoPixel.show();
  delay(500);
  // LED en blanc
  neoPixel.setPixelColor(0,255,255,255);
  neoPixel.show();
  delay(500);
  // LED en rouge
  neoPixel.setPixelColor(0,255,0,0);
  neoPixel.show();
  delay(500);
  // Extinction de la LED
  neoPixel.clear();
  neoPixel.show();
  delay(500);
}

Le téléversement s’effectue normalement (le pourcentage progresse bien jusqu’à la fin), ne vous inquiétez pas du message d’erreur qui apparait à la fin.

1er téléversement dans l'IDE Arduino

Redémarrez le robot en appuyant sur la touche reset (EN) et vous constaterez que le nouveau programme s’exécute parfaitement (la LED clignote bien en bleu, blanc et rouge).

La LED Neopixel clignote

Il n’est plus nécessaire d’utiliser le bouton IO0 pour reprogrammer le robot, il se comporte maintenant comme un Arduino (vous branchez le robot et vous pouvez lancer directement le téléversement).

Mais comme le port COM a changé, n’oubliez pas de sélectionner le nouveau.

Sélection du port COM dans l'IDE Arduino

Voilà un exemple de programme de détection d’obstacles (n’hésitez pas à vous en inspirer et éventuellement à l’améliorer, si cela vous amuse) :

// Eliobot_detection_obstacle
// Appel de la bibliothèque NeoPixel
#include <Adafruit_NeoPixel.h>
// Constantes
const int PIN_NEOPIXEL = 1;
const int NB_LED = 1;
const int OBSTACLE_G = 4;
const int OBSTACLE_AV = 5;
const int OBSTACLE_D = 6;
const int OBSTACLE_AR = 7;
const int motorAIN1 = 36;
const int motorAIN2 = 38;
const int motorBIN1 = 35;
const int motorBIN2 = 37;
// Création de l'objet "neoPixel"
Adafruit_NeoPixel neoPixel = Adafruit_NeoPixel(NB_LED, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800);

void setup() {
  pinMode(OBSTACLE_G, INPUT);
  pinMode(OBSTACLE_AV, INPUT);
  pinMode(OBSTACLE_D, INPUT);
  pinMode(OBSTACLE_AR, INPUT);
  pinMode(motorAIN1, OUTPUT);
  pinMode(motorAIN2, OUTPUT);
  pinMode(motorBIN1, OUTPUT);
  pinMode(motorBIN2, OUTPUT);
  // initialisation du module de LED
  neoPixel.begin();
  // Intensité lumineuse (de 0 à 100)
  neoPixel.setBrightness(20);
  //randomSeed(1);
}

void loop() {
  if (digitalRead(OBSTACLE_G) == 0){// Obstacle à gauche
    tourneDroite(500); // A droite pendant 0.5 seconde    
  }
  else if (digitalRead(OBSTACLE_D) == 0){//Obstacle à droite
    tourneGauche(500); // A gauche pendant 0.5 seconde
  }
  else if(digitalRead(OBSTACLE_AV) == 0) { // Obstacle devant
    if(random(2) == 0){
      tourneDroite(500); // A droite pendant 0.5 seconde
    }
    else {
      tourneGauche(500); // A gauche pendant 0.5 seconde
    }
  }
  else if (digitalRead(OBSTACLE_AR) == 0){//Obstacle derriere
    arret(500); // Arret pendant 0.5 seconde
  }  
  else {// Pas d'obstacle
    avant(20);
  }  
}

// Déplacements du robot
void arret(int duree){
  // LED en rouge
  neoPixel.setPixelColor(0,255,0,0);
  neoPixel.show();
  // Arret des moteurs 
  digitalWrite(motorAIN1, HIGH);
  digitalWrite(motorAIN2, HIGH);
  digitalWrite(motorBIN1, HIGH);
  digitalWrite(motorBIN2, HIGH);
  delay(duree);
}

void avant(int duree) {
  // LED en vert
  neoPixel.setPixelColor(0,0,255,0);
  neoPixel.show();
  // Moteurs en avant
  digitalWrite(motorAIN1, LOW);
  digitalWrite(motorAIN2, HIGH);
  digitalWrite(motorBIN1, LOW);
  digitalWrite(motorBIN2, HIGH);
  delay(duree);
}

void arriere(int duree) {
  digitalWrite(motorAIN1, HIGH);
  digitalWrite(motorAIN2, LOW);
  digitalWrite(motorBIN1, HIGH);
  digitalWrite(motorBIN2, LOW);
  delay(duree);
}

void tourneDroite(int duree) {
  arret(100);
  arriere(200);
  digitalWrite(motorAIN1, HIGH);
  digitalWrite(motorAIN2, LOW);
  digitalWrite(motorBIN1, LOW);
  digitalWrite(motorBIN2, HIGH);
  delay(duree);
}

void tourneGauche(int duree) {
  arret(100);
  arriere(200);
  digitalWrite(motorAIN1, LOW);
  digitalWrite(motorAIN2, HIGH);
  digitalWrite(motorBIN1, HIGH);
  digitalWrite(motorBIN2, LOW);
  delay(duree);
}

Réinstallation du firmware d’origine

Vous souhaitez revenir au firmware d’origine et retrouver un Elibot neuf, comme au premier jour ?

J’ai posé la question à Romain et il m’a indiqué sa procédure (mais bien sûr, je l’ai un peu modifiée à ma sauce). En l’absence de source officielle pour les télécharger, j’ai déposé tous les fichiers nécessaires sur le Github d’Arduiblog. Alors, rendez-vous à l’adresse suivante : https://github.com/arduiblog/eliobot pour récupérer les fichiers eliobot.bin, firmware.uf2 et Sauvegarde ELIOBOT.zip.

Github d'Arduiblog

ESPtool est très utile pour copier, effacer ou sauvegarder le contenu de l’ESP32. Pour l’installer, Téléchargez et installez la dernière version de Python. Cochez la case Add Python.exe to PATH et cliquez sur Install Now.

Installation de Python

Ensuite faites un clic droit sur l’icône Windows, sélectionnez Terminal (administrateur), répondez Oui à la question Voulez-vous autoriser… et tapez le texte suivant (et bien sûr, appuyez sur Entrée) :

pip install esptool

À la fin de l’installation vous pouvez vérifier que tout s’est bien passé en tapant :

esptool.py version
Vérification de la version d'ESPTool

Appuyez sur le bouton IO0 et connectez Eliobot à l’ordinateur (en laissant le doigt appuyé encore quelques secondes). Si le robot était déjà branchée, vous pouvez aussi appuyer sur le bouton IO0 et ensuite sur le bouton reset (EN) mais en laissant encore pendant quelques secondes le doigt appuyé sur IO0.

Tapez l’instruction suivante pour avoir des infos sur la carte (notamment le numéro de port série) :

esptool.py flash_id
Informations sur la carte ESP32 avec ESPTool

Pour commencer, nous allons effacer la mémoire de la carte (modifiez le numéro de port en fonction des infos obtenue en tapant la commande précédente)

esptool.py -p COM39 erase_flash
Effacement de la carte ESP32 avec ESPTool

Ensuite, tapez la commande suivante pour flasher le bootloader (adaptez le numéro de port et le chemin du fichier eliobot.bin) :

esptool.py -p COM39 write_flash 0x0 C:\Eliobot\eliobot.bin
Flash du bootloader

Appuyez sur le bouton reset (EN) pour redémarrer le robot. Un nouveau lecteur (nommé TINYS2BOOT) apparait. Copier-y le fichier firmware.uf2

Copie du firmware CircuitPython

Eliobot redémarre tout seul à la fin de la copie et le lecteur s’appelle maintenant CIRCUIPY. Vous pouvez le renommer (ELIOBOT) en faisant un clic droit dessus et en sélectionnant Propriétés.

Décompressez le fichier Sauvegarde ELIOBOT.zip et copiez tout son contenu dans le robot (directement à la racine du lecteur), n’hésitez pas à remplacer les fichiers du même nom.

Copie des fichiers dans le robot Eliobot

Voilà, Eliobot a retrouvé sa configuration initiale. Allumez-le pour vérifier qu’il exécute le programme de démonstration (détection d’obstacles).

Mon avis sur le robot

En général, les moteurs des robots pédagogiques se mettent en marche dés qu’on branche le câble à l’ordinateur, c’est très pénible parce que le robot se sauve alors qu’on essaie de le reprogrammer. Mais là, pas du tout, le robot n’avance que si l’interrupteur est sur ON (mais ça n’empêche absolument pas de le reprogrammer). C’est vraiment génial, je me demande pourquoi les autres n’y ont pas pensé.

Eliobot est capable de rouler en ligne droite sans dévier de sa route (et encore une fois, ce n’est pas le cas de tous les robots pédagogiques), cela montre que les moteurs sont bien équilibrés mais c’est peut être aussi parce que la roue libre est située à l’arrière (au lieu d’être à l’avant).

Les capteurs infrarouges de détection d’obstacle sont bien plus compacts que les habituels capteurs à ultrason mais il sont parfaitement efficaces. J’apprécie aussi les petits plus : la batterie amovible et rechargeable, la LED Neopixel, le buzzer ou le bouton programmable.

Je n’aime pas trop la petite bille qui sert de roue libre (j’aurais préféré une vrai roulette), mais excepté ce petit détail je pense vraiment qu’Eliobot est un très bon robot.

Pour le moment, la documentation est encore insuffisante. Une partie du site est toujours en construction et de nombreuses fonctions (comme le WiFi ou le buzzer) ne sont pas encore expliquées. Il manque aussi un schéma pour indiquer à quels pins sont connectés les différents éléments.

Heureusement cela pourrait très vite changer. Actuellement, Romain se concentre sur la version Beta d’Elioblock et sur les prochaines évolutions (comme le capteur de suivi de ligne), mais il m’a promis qu’il allait aussi enrichir bientôt la documentation.

Sources et liens utiles


Laisser un commentaire