Skip to content

2lambda123/-Orange-OpenSource-oorobot

Repository files navigation

logo_s

OoRoBoT : Un robot éducatif à construire soi-même

OoRoBoT est un robot éducatif destiné aux enfants de maternelle et élémentaire sur le principe de la BeeBot, tout en suivant les contraintes suivantes :

  • projet en OpenSource : page github avec le code, la liste de matériel et les plans nécessaires
  • matériel électronique standard (Arduino) et peu onéreux
  • pas d'opérations "complexes" (soudure, usinage)

Le robot est programmable avec des commandes simples :

  • avancer
  • reculer
  • tourner à droite à angle droit
  • tourner à gauche à angle droit
  • faire une pause
  • lever ou baisser le crayon au centre du robot

Ces commandes sont réalisables par des enfants.

L'OoRoBoT est composé de deux parties :

Actuellement le robot peut être utilisé de deux façons différentes (comme indiqué dans sur ce poster) :

  • Pour les enfants de 4 à 7 ans : programmer des parcours sur des plateaux (voir les plateaux disponibles dans le répertoire /doc/exercices)
  • Pour les enfants de 7 à 12 ans : réaliser des tracés avec un langage de programmation par blocs via une tablette Android (programme disponible ici ). Vous pouvez vous entrainer à faire des tracés sur cette page Web (reproduction de l'interface disponible dans l'application Android)

Pour suivre l'évolution du robot vous pouvez suivre le mot dièse #OoRoBoT sur Twitter

Le FabLab de Lannion propose des kits au prix de 40€ contenant :

  • Tout le matériel électronique nécessaire (voir plus bas dans la page)
  • La dernière version du châssis en MDF réalisé à la découpeuse laser

Pour commander un kit, merci d'envoyer un email à oorobot@fablab-lannion.org. Le FabLab ne propose pas l'envoi de kit par la poste, si vous ne pouvez pas venir jusqu'à Lannion, vous pouvez commander les composants vous même et vous rapprocher du FabLab le plus proche de chez vous pour réaliser le châssis en MDF ou en impression 3D.

La notice de montage est disponible ici.

Genèse du projet

J'ai eu cette idée en discutant avec une professeure des écoles (Maître Formatrice) qui utilisait des BeeBot dans son école. Actuellement on trouve de nombreux de robots sur le marché mais ils sont souvent trop "compliqués" pour faire des activités simples. Dans l'exemple que j'ai observé, les BeeBot étaient utilisées pour apprendre le déplacement relatif et la suite de commandes à des enfants de grande section. J'ai cherché un équivalent moins cher et/ou OpenSource je n'ai rien trouver de probant.

Je me suis donc lancé dans ce projet profitant des imprimantes 3D disponibles au travail, de mes compétences en Arduino et du temps donné par mon employeur pour réaliser des side-project. L'idée était aussi de pouvoir utiliser ce robot comme traceur (comme la mythique tortue "Jeulin" des années 80).

Au final, le robot revient à moins de 30€ (si vous le fabriquez vous-même) et ne demande aucune soudure. Le châssis peut être imprimé sur une imprimante 3D possédant un plateau de 20cm sur 20cm ou en utilisant une découpeuse laser.

Le nom du projet OoRoBoT pour Orange Open ROBOT.

oorobot_cote_s

Le principe

  • On allume le robot
  • L'enfant peut lui donner les ordres suivants :
    • avancer
    • reculer
    • tourner à droite à angle droit
    • tourner à gauche à angle droit
    • faire une pause
    • effacer la dernière commande
    • lever ou baisser le crayon au centre du robot
  • À chaque appui sur un bouton d'ordre ce dernier s'affiche sur l'écran LCD. NB : L'écran LCD ne peut afficher que 32 ordres (l'Arduino quant à lui peut en gérer plus)
  • En cas d'erreur l'enfant peut effacer le dernier ordre ou tout son programme par un appui long sur le bouton "effacer"
  • Quand l'enfant le veut il peut lancer son programme avec le bouton "Lancer"
  • Le robot exécute alors chaque ordre en faisant une courte pause entre chacun d'entre eux.
  • Quand le programme est terminé, la liste des ordres s'affiche à nouveau et l'enfant peut faire d'éventuels ajustements.
  • On peut accéder au réglage des paramètres en faisant un appui long sur un bouton dédié. Les paramètres sont :
    • La distance parcourue pour les déplacements "avancer" et "reculer".
    • Le nombre de pas que les moteurs doivent faire pour effectuer un tour complet (qui peut varier selon la surface sur laquelle doit évoluer le robot)
    • Le nombre de pas que les moteurs doivent faire pour avancer de 10cm

Pour changer de ligne il faut appuyer sur les touches "avancer" ou "reculer", pour changer les valeurs il faut appuyer sur les touches "tourner à droite" et "tourner à gauche". Un appui long sur ces touches permet d'augmenter la valeur d'incrément.

Pour annuler les changements des paramètres il faut appuyer sur le bouton "effacer". Pour quitter les paramètres en les sauvegardant il faut appuyer sur la touche "lancer" ou "paramètre"

Le robot peut aussi être programmé à distance (Bluetooth) via une application Android (disponible ici).

Le matériel

composant_s

À acheter :

Soit un total d'environ 30€ et surtout aucune soudure n'est nécessaire ! De plus les moteurs pas-à-pas, bien que lents, sont très silencieux.

En remplacement du clavier 3x4 boutons on utilise un clavier tactile que l'on fixe avec du scotch double-face : nouveau-clavier

À récupérer :

  • 2 grands élastiques pour les pneus.
  • Un tube de colle liquide (forte, à bois ...) qui est utile pour coller certaines parties ou au cas où les trous de vis soient un peu trop grands. C'est aussi pratique pour coller les élastiques sur les roues ou pour éviter que la prise du conteneur de piles ne se dévisse.

Notes sur l'alimentation électrique

  • Dans la liste de matériel j'ai indiqué de prendre un conteneur de 6 piles LR6 (soit 9V). Ces piles sont à brancher sur l'entrée régulée du shield. Cette solution permet d'assurer la stabilité de l'alimentation du robot même quand les piles commencent à faiblir. L'inconvénient c'est que ça oblige à avoir 6 piles pour chaque robot.
  • On peut utiliser un conteneur de 4 piles, mais ce dernier doit être branché directement sur l'alimentation 5V derrière le régulateur (celui-ci est prévu pour des tensions de 7V à 12v). Le problème de cette solution est qu'elle surcharge un peu les composants au début de vie des piles et peut entraîner des instabilités de fonctionnement en fin de vie des piles.
  • On peut utiliser une batterie 5V pour téléphone portable de ce style à 7€ à brancher directement sur la prise micro-USB de l'Arduino.

Les batteries ont l'avantage d'être bien régulées (et peuvent donc être directement branchées sur l'Arduino). L'autre avantage est qu'elles disposent, la plupart du temps, d'un bouton marche/arrêt.

Sans optimisation, lors des premiers essais réalisés on mesure que lors des déplacements le montage consomme 0,36A, puis quand l'afficheur LCD est allumé il consomme 0,05A et quand il ne fait rien 0,03A.

Le châssis

  • Il doit être solide
  • Les roues doivent être assez grandes pour que le robot avance assez rapidement
  • Il faut garder un trou dans l'axe des roues pour pouvoir insérer un crayon

Il existe deux types de patron pour le châssis :

  • impressions 3D
  • découpe laser

Impression 3D

Les parties conçues (voir répertoire 3D) :

  • Deux roues rapides à imprimer de diamètre 9cm avec les encoches pour insérer en force les moteurs pas-à-pas et des rebords pour retenir les élastiques
  • Un châssis contenant les supports nécessaires pour fixer les composants. Utilisation des contrôleurs des moteurs pas-à-pas pour faire des "yeux".

L'impression de la version actuelle des pièces a pris 5h20 et consommé 98g de matière (PLA) avec les réglages suivant (sur une imprimante Volumic Stream20Pro):

  • qualité normale (200 microns)
  • densité de remplissage : 20%
  • épaisseur des bords : 0.8 mm (au lieu de 1.2mm par défaut sur les profils Cura de l'imprimante)

Découpe laser

A la vue des demandes qui commencent à affluer pour avoir un robot, j'ai conçu un modèle à fabriquer avec une découpeuse laser comme celle disponible au FabLab de Lannion. Cette version en découpe laser permet maintenant de lever/baisser un crayon.

Historique

Au fil des évolutions du projet, l'OoRoBoT apporte tout un lot de fonctionnalités complémentaires :

  • Présence d'un écran LCD de 2 lignes de 16 caractères permettant à l'enfant de visualiser le programme qu'il écrit. Cet écran associé au clavier permet aussi de régler le robot très précisément
  • Ajout d'une interface Bluetooth permettant de piloter le robot à distance et ainsi permettre de lui donner des ordres complexes (boucles, tracé d'arc de cercle ...)
  • Ajout d'un servomoteur afin de baisser/lever un crayon

Delphine Thibault avait réalisé une première version du robot en impression 3D avec la possibilité de baisser/lever un crayon, voir son article

La version en MDF

Ajout d'un système pour pouvoir lever et baisser un crayon.

oorobot mdf

Les fichiers pour la découpe laser (oorobot.svg pour modifier le modèle avec Inkscape et oorobot.dxf à charger dans le logiciel de votre découpeuse laser) se trouve dans le répertoire 2d. Il ne faut garder que les pièces en blanc :

plan

Le char

Déplacement des roues au centre du châssis. Centre de gravité descendu au maximum.

oorobot char

Le chariot

Premier "vrai" modèle. Présence d'une roue encodeuse pour le réglage du pas qui a été enlevé dans la version actuelle (utilisation du clavier)

oorobot chariot

Le prototype

proto

Le montage des composants

Brancher l'Arduino Nano sur le "sensor shield" en expliquant dans quel sens (il n'y a pas de détrompeur) : le port usb de l'arduino doit être dirigé vers l'extérieur, et non vers le port I2C.

Branchement du clavier sur le port A0 (détacher un groupe de 3 fils):

  • Brancher un fil entre la broche VCC du clavier et la broche V du "sensor shield"
  • Brancher un fil entre la broche GND du clavier et la broche G du "sensor shield"
  • Brancher un fil entre la broche Out du clavier et la broche S du "sensor shield"

Branchement de l'écran LCD sur une des ligne I2C (détacher un groupe de 4 fils):

  • Brancher un fil entre la broche GND de l'écran et la broche GND la ligne I2C choisie
  • Brancher un fil entre la broche VCC de l'écran et la broche 5V la ligne I2C choisie
  • Brancher un fil entre la broche SDA de l'écran et la broche SDA la ligne I2C choisie
  • Brancher un fil entre la broche SCL de l'écran et la broche *SCL la ligne I2C choisie

Branchement des cartes de contrôle des moteurs pas-à-pas :

  • Moteur roue droite sur les ports 4, 5, 6 et 7 de l'Arduino (détacher un groupe de 6 fils pour les broches IN et pour les broches - et +):
    • Brancher un fil entre la broche IN1 du contrôleur et la broche S du port 4 du "sensor shield"
    • Brancher un fil entre la broche IN2 du contrôleur et la broche S du port 5 du "sensor shield"
    • Brancher un fil entre la broche IN3 du contrôleur et la broche S du port 6 du "sensor shield"
    • Brancher un fil entre la broche IN4 du contrôleur et la broche S du port 7 du "sensor shield"
    • Brancher un fil entre la broche - du contrôleur et la broche G du port 7 du "sensor shield"
    • Brancher un fil entre la broche + du contrôleur et la broche V du port 7 du "sensor shield"
  • Moteur roue gauche sur les ports 8, 9, 10 et 11 de l'Arduino (détacher un groupe de 6 fils pour les broches IN et pour les broches - et +):
    • Brancher un fil entre la broche IN1 du contrôleur et la broche S du port 8 du "sensor shield"
    • Brancher un fil entre la broche IN2 du contrôleur et la broche S du port 9 du "sensor shield"
    • Brancher un fil entre la broche IN3 du contrôleur et la broche S du port 10 du "sensor shield"
    • Brancher un fil entre la broche IN4 du contrôleur et la broche S du port 11 du "sensor shield"
    • Brancher un fil entre la broche - du contrôleur et la broche G du port 11 du "sensor shield"
    • Brancher un fil entre la broche + du contrôleur et la broche V du port 11 du "sensor shield"

Brancher les moteurs pas-à-pas sur les contrôleurs. Marquer les moteurs droite et gauche afin de les différencier facilement lors du montage final.

Branchement du servomoteur sur le port 3 : brancher le câble de façon à ce que le fil marron soit sur la broche G du port 3, le fil rouge sur la broche V et le fil orange sur la broche S

Attention pour les personnes ayant commandé ce modèle de shield il faut inverser les fils rouge et marron du servomoteur! Pour cela utiliser un petit tournevis plat et soulever légèrement le petit ergot au bout d'un des fils (rouge ou marron) puis tirer légèrement sur ce dernier, il devrait venir facilement. Faire de même avec le deuxième fil. Rebrancher les fils en les inversant par rapport à leur position initiale. Vous pourrez maintenant faire en sorte de respecter la consigne pour que "le fil marron soit sur la broche G du port 3, le fil rouge sur la broche V et le fil orange sur la broche S"

Branchement du module Bluetooth :

  • Brancher le câble de l'interrupteur (détacher un groupe de 2 fils):
    • Brancher un fil entre la broche G du port 12 du "sensor shield" en face du fil noir de l'interrupteur
    • Brancher un fil entre la broche V du port 12 du "sensor shield" en face du fil rouge de l'interrupteur
    • Brancher l'autre extrémité de l'interrupteur de manière à ce que le fil noir soit en face de la broche GND du module Bluetooth et le fil rouge en face de la broche +5V
  • Brancher le module à l'Arduino (détacher un groupe de 2 fils) :
    • Brancher un fil entre la broche RX du module Bluetooth et la broche S du port 13 du "sensor shield"
    • Brancher un fil entre la broche TX du module Bluetooth et la broche S du port 12 du "sensor shield"

Découper les modèles de touches (disponibles ici) et les insérer dans le clavier, pour cela il faut sortir les touches (ça vient facilement en tirant dessus) puis enlever la partie transparente (vous pouvez utiliser une paire de ciseaux pour faire levier), placer les découpes et remettre en place les touches comme ci-dessous (pour bien placer le clavier, il faut que les fils sortent sur la droite) :

positions_touches

Le code

Vous trouverez 2 programmes dans le répertoire arduino de ce dépôt :

  • init-bluetooth: ce programme permet d'initialiser le module Bluetooth (lui donner un nom au format "OoRoBoT-XXXX" et affecter le code d'appairage 0000). Ce programme n'est à charger qu'une seule fois.
  • oorobot: le programme principal du robot

Dans les derniers kits livrés par le FabLab de Lannion (depuis novembre 2018) le module Bluetooth est pré-configuré et l'Arduino aura la dernière version du programme 'oorobot' d'installé. Vous n'avez donc pas à faire les étapes suivantes.

Télécharger et installer l'IDE Visual Studio Code sur votre ordinateur. installer ensuite l'extension PlatformIO dans Visual Studio Code. Si vous utilisez un Arduino Nano comme indiqué ci dessus, la configuration du projet PlatformIO est déjà prête, sinon, vous devez adapter la configuration de PlatformIO aux composants que vous utilisez, en utilisant la fonction PIOHome dans Visual Studio Code pour modifier votre configuration. Les librairies nécessaires au fonctionnement du robot sont déjà pré-installée ; liste des librairies pre-installées :

  • AccelStepper v1.57.1 by Mike McCauley
  • LiquidCrystal I2C v1.1.2 by Frank de Brabander
  • Servo v1.1.8 by Michael Margolis

Si vous voulez changer le nom du module Bluetooth (sinon votre robot sera visible sous le nom "HC-06" ou "HC-05") il faut faire la manipulation suivante :

  • Brancher votre Arduino sur votre PC. La LED du module Bluetooth doit clignoter rapidement
  • Débrancher le câble arrivant sur la broche VCC du module Bluetooth.
  • Faire un pont sur l'entrée EN comme sur le schéma ci-dessus init-bluetooth-zs-040
  • la photo n'est pas assez nette pour que ça soit compréhensible...
  • Rebrancher le câble arrivant sur la broche VCC du module Bluetooth. La LED du module Bluetooth devrait clignoter moins rapidement

Télécharger le programme init-bluetooth, le décompresser et l'ouvrir avec Visual Studio Code. Téléverser le programme (item Upload and Monitor du menu PlatformIO) sur l'Arduino. Ce programme va configurer le module Bluetooth pour :

  • Donner un nom au format "OoRoBoT-XXXX"
  • Configurer le code PIN à 0000
  • Configurer la vitesse de communication à 9600 bauds

Vous pouvez utiliser le "moniteur série" (Menu "Options/Moniteur série") du programme Arduino IDE pour voir où en est la configuration du Bluetooth.

Le nom de votre robot sera affiché sur l'écran LCD. Si ce n'est pas le cas vérifier le contraste de votre écran (en tournant le petit potentiomètre derrière l'écran avec un tournevis cruciforme jusqu'à avoir un bon contraste entre l'affichage des caractères et le fond de l'écran). Si c'est bon vous pouvez enlever le pont sur l'entrée EN du module Bluetooth. Débranchez et rebranchez le câble arrivant sur la broche VCC du module Bluetooth. Votre module Bluetooth devrait clignoter rapidement, il est prêt à être appairé. Vérifiez que vous voyez bien le robot dans la liste des périphériques Bluetooth depuis votre téléphone/tablette.

Télécharger le programme oorobot, le décompresser et l'ouvrir avec le programme Visual Studio Code.

Téléverser ensuite le programme oorobot sur l'Arduino. Ce programme va piloter tout le robot. Après le téléchargement il est temps de vérifier que le câblage est bien réalisé :

indiquer si le montage peut être branché sur un port usb quelconque, ou sur le bloc de piles

indiquer si on peut utiliser des piles rechargeables (1.2 v) ou s'il faut impérativement des piles non-rechargeables (1.5 v)

  • Vérifier le branchement du clavier, un appui sur un bouton doit afficher des caractères sur l'écran LCD
  • Vérifier le contraste de l'écran : ce dernier doit s'allumer au démarrage, par contre si vous ne voyez rien, pas de panique c'est peut-être tout simplement parce que le contraste est mal réglé. Pour changer ce paramètre il suffit de tourner le petit potentiomètre derrière l'écran avec un tournevis cruciforme jusqu'à avoir un bon contraste entre l'affichage des caractères et le fond de l'écran
  • Marquer le dessus du servomoteur : l'axe du moteur doit être sur la gauche du composant quand la partie mobile est devant vous. Vérifier que ce dernier bouge bien si vous appuyer sur les boutons lever/baisser le crayon
  • Vérifier que les moteurs fonctionnent bien : lancer une commande "avance" pour vérifier que les moteurs tournent dans le bon sens, faire de même avec une commande "tourne à droite".
  • Vérifier le sens de l'interrupteur : jouer avec le bouton de l'interrupteur pour voir dans quelle position il allume ou éteint le module Bluetooth. Veillez à noter ces états afin de bien positionner plus tard l'interrupteur sur le châssis.
  • Vérifier que le module Bluetooth fonctionne : activer le Bluetooth sur votre téléphone/tablette et vérifier que vous pouvez bien vous appairez avec le robot (code PIN 0000). Si vous le pouvez vérifier ensuite que vous pouvez piloter le robot avec l'application Android fournie (voir plus bas)

Tout est OK? Vous pouvez passer au montage des composants sur le châssis.

Ordre de montage des composants sur le châssis 2D :

Vous trouverez la documentation en ligne ici et au format PDF ici.

Ordre de montage des composants sur le châssis 3D :

montage2

  • Débrancher les moteurs pas-à-pas des contrôleurs
  • Fixer les roues en force sur les moteurs pas-à-pas
  • Faire passer les contrôleurs des moteurs dans les trous placés derrière le support de l'Arduino
  • Visser l'Arduino sur son support
  • Visser les contrôleurs sur leurs support (garder la cohérence contrôleur moteur droit fixer à droite du robot)
  • Visser le clavier sur son support en passant les câbles entre le châssis et le clavier
  • Plier les broches de l'écran pour les mettre à la verticale. Visser ensuite l'écran sur le châssis
  • Entrer en force les moteurs pas-à-pas dans leur emplacement. Faire passer leurs fils jusqu'à leur contrôleur respectif. Visser ensuite les vis M3 pour maintenir les moteurs au châssis
  • Placer le bloc de pile devant l'Arduino

Pilotage avec le Bluetooth

Le robot est maintenant pilotable via une application pour mobile/tablette (Android pour le moment) conçue par un collègue (merci Julien) avec Ionic (voir répertoire OoRobotIonicApp) et utilisant Blockly :

app

Vous pouvez télécharger l'APK ici

Afin d'envoyer les programmes sur l'Arduino on a définit un pseudo langage simple sous la forme :

[<lettre>;<chiffre>*]*

Combinaisons possibles

  • U (up). Les chiffres correspondent aux nombres de mm à faire.
  • D (down). Les chiffres correspondent aux nombres de mm à faire.
  • R (right). Les chiffres correspondent à l'angle à faire.
  • L (left). Les chiffres correspondent à l'angle à faire.
  • B (begin loop). Les chiffres correspondent au nombre de répétitions des commandes suivantes (jusqu'à trouver la lettre E)
  • E (end loop). Pas de chiffre attendu
  • P (pause). Faire une attente de x ms
  • W (waiting). Les chiffres correspondent au temps d'attente (en ms) entre 2 mouvements.
  • ! baisser le crayon
  • | lever le crayon
  • c pour préparer un arc de cercle, les chiffres correspondent au diamètre de l'arc
  • a lance le début du traçage de l'arc en prenant comme angle les chiffres qui suivent

Pour dessiner un héxagone :

!U50R60U50R60U50R60U50R60U50R60U50R60|

ou

!B6U50R60E|

Licences

Le code est sous GPL2, les modèles (3D et 2D) et la documentation sont sous CC-BY-SA.

Les projets équivalents

  • escornabot : un projet espagnol vraiment dans le même esprit mais qui demande un peu connaissance technique pour la partie clavier (soudure)
  • scott : un projet assez proche de l'OoRoBoT dans l'esprit et le matériel utilisé. La différence principale se situe dans le fait que l'OoRoBoT peut fonctionner de façon autonome avec son clavier et son écran.