Programmation du robot

Pour ceux qui veulent juste faire fonctionner leur robot voici le programme. Pour les autres toutes les explications sont en dessous.

Télécharger le programme prêt à téléverser

Les sous-programmes

Les sous-programmes aussi appelés blocs personnalisés sous mBlock sont des « morceaux » de programmes qui regroupent toutes les étapes nécessaires pour une fonction.

  • Initialisation

L’initialisation sert à définir l’état des entrées et sorties dès le démarrage du programme. Ici on fixe les sorties de 6 à 11 à une valeur 0 pour que les moteurs soient à l’arrêt. On en profite aussi pour initialiser le servomoteur du capteur à ultrason à 90° pour qu’il « regarde » vers l’avant.

  • Commande des moteurs

Les sous-programmes de commandes des moteurs sont assez simples. Les sorties 6/7/8 sont pour le moteur de droite et les 9/10/11 pour le moteur de gauche.

Les sorties 6 et 11 définissent la vitesse des moteurs. On peut normalement régler la valeur de 0 (arrêt) à 255 (pleine vitesse) mais les moteurs ne veulent pas tourner en dessous de la valeur 100 car ils ne sont pas assez alimentés.

Les sorties 7 et 9 sont pour la marche avant.

Les sorties 8 et 10 sont pour la marche arrière.

Pour s’arrêter il faut tout mettre à zéro.

Pour tourner à droite on met le moteur de droite en arrière et le moteur de gauche en avant.

Pour tourner à gauche on met le moteur de gauche en arrière et le moteur de droite en avant.

Pour avancer on met les deux moteurs en avant.

Sur l’exemple vous pouvez voir que les deux moteurs ne sont pas réglés à la même vitesse. C’est pour que le robot aille droit en marche avant. Cela et du au fait que les moteurs ne sont pas tout à fait identiques et par conséquent pour une même alimentation ils ne tournent pas tout à fait à la même vitesse. Si en marche avant votre robot va sur la droite, augmentez la vitesse du moteur droit et si il va sur la gauche augmentez le vitesse du moteur gauche.

  • Mesures des distances

Pour mesurer les distances on utilise le capteur à ultrason monté sur son support qui peut pivoter à droite (angle 0) ou à gauche (angle 180).

Le capteur donne quelques fois des fausses distances donc les mesures sont faites deux fois à 0.2 secondes d’intervalle et stockées dans des variables nommées DistanceA1 et DistanceA2 pour les distances avant, DistanceG1 et DistanceG2 pour la gauche et DistanceD1 et DistanceD2 pour la droite.

Avant de mesurer les distances de droite et de gauche on oriente le servomoteur à 0° ou 180° en attendant 0.4 secondes avant la mesure pour laisser le temps au servomoteur d’atteindre l’angle désiré.

Après les mesures à droite ou à gauche on remet le servomoteur à un angle de 90° pour pouvoir faire les mesures avant quand on roule.

Programme principal

Le programme principal commence par Arduino générer le code afin qu’il soit autonome.

On appelle ensuite le sous programme Init pour initialiser le robot.

On lance la fonction répéter indéfiniment pour lancer une boucle infinie.

Les étapes du programme sont les suivantes:

  • Lecture de la distance avant
  • Test:si les deux mesures avant sont supérieures à 20cm ou inférieures à 1cm (cela élimine les distances trop grandes pour le capteur qui donne une distance égale à zéro dans ce cas) alors on lance le sous programme Avance.
  • Sinon on lance le sous-programme Stop pour s’arrêter et on lance consécutivement les sous-programmes Distance0 et Distance180 pour lire les distances gauche et droite
  • Comparaison des mesures de distances gauches et droites
  • Si la distance droite est inférieure à la gauche on lance le sous-programme Gauche pour tourner à gauche pendant 0.2 secondes
  • Sinon on lance le sous-programme Droite pour tourner à droite pendant 0.2 secondes
  • Après avoir tourné à gauche ou à droite on relance une nouvelle boucle

Sauvegardez et transférez le programme dans votre Arduino (voir tuto mBlock).

Voila votre robot est monté, câblé et programmé. Bon amusement.

Montage du robot Banggood

  • Montage de la roulette

La roulette se monte avec quatre vis et quatre écrous. Veillez à positionner la roulette du bon coté du châssis afin d’avoir les deux trous entourés en rouge du bon coté.

  • Montage des moteurs

Après avoir soudé les fils sur les moteurs, assemblez les moteurs sur le châssis (du même coté que la roulette) à l’aide de deux grandes vis,deux écrous et deux pattes de fixation par moteur. Puis faire passer les fils dans le gros trou central. Attention les pattes sur lesquelles vous avez soudé les fils des moteurs sont assez fragiles donc ne tirez pas trop sur les fils. Si vous avez une petite pince plate, vous pouvez dé-clipser les bandes transparentes qui tiennent les moteurs et faire passer un des deux fils en dessous puis refixer les bandes transparentes. De cette façon votre câble sera fixé et il ne bougera plus.

  • Montage des roues

Cette étape est très simple. Il suffit d’emboîter les roues sur les cotés extérieurs des moteurs et les disques crantés sur les cotés intérieurs des moteurs.

  • Montage de l’Arduino

Pour cette étape vous aurez besoin de huit vis, quatre entretoises (les petites colonnettes jaunes hexagonales) et huit rondelles rouges. Si vous n’avez pas de rondelles rouges, des petits ronds découpés dans du fin carton feront très bien l’affaire. Fixez les entretoises sur l’Arduino avec les vis en intercalant une rondelle entre la tête de la vis et l’Arduino et une autre rondelles entre l’Arduino et l’entretoise. Ensuite positionnez l’Arduino sur le dessus du châssis comme sur la photo et fixez le par le dessous avec les quatre dernière vis.

  • Montage du support de piles

Le support de piles se fixe en dessous du châssis avec deux vis tête fraisées plates (plates du coté sur lequel on met le tournevis et obliques juste en dessous) et de deux écrous. Passez les fils du support de piles dans le trou central avec ceux des moteurs et servez-vous du support de piles pour bloquer les fils des moteurs.

  • Montage de la carte L298N

Pour fixer la carte L298N vous aurez besoin de 3 vis fines et longues, trois petits écrous et trois rondelles rouges (eh oui trois de chaque car il n’y a que trois trous qui correspondent mais ça suffit). Fixez la sur le dessus du châssis comme sur la photo mais sans trop serrer sinon la carte va se plier.

  • Montage de la tête

Dans un premier temps il faut couper un des bras du servo afin qu’il s’adapte dans le support noir. Il faut le couper en longueur mais en gardant au moins trois trous de chaque cotés et un peu en largeur pour qu’il entre dans le fond du support. Quand il s’adapte bien collez le avec un peu de colle style néoprène. Assembler ensuite le servo dans les deux demi supports et les visser ensemble avec les deux vis.

  • Montage du capteur à ultrason

Positionnez le capteur à ultrason sur l’avant du support avec les broches dirigées vers le haut. Fixez le capteur avec un collier électrique ou un bout de câble comme sur la photo. Vous pouvez maintenant assembler la tête sur le support mais avant de la fixer avec les deux vis vérifiez que la tête peut bien pivoter de 90° vers la droite ou vers la gauche. Si ce n’est pas le cas décaler la tête jusqu’à pouvoir effectuer les mouvement gauche/droite de 90°. Fixer le servo avec la petite vis et le bras du servo avec la plus grande.

  • Montage de la tête

La tête se fixe à l’avant du châssis avec deux vis et deux écrous dans les deux trous situés de chaque coté de la découpe rectangulaire.

  • Câblage du capteur à ultrason

Installez quatre câbles sur les broches du capteur à ultrason. Faites passer les câbles sous la carte Arduino et faites les sortir vers l’arrière du robot.

  • Câblage des moteurs

Branchez les fils des moteurs sur les deux borniers latéraux de la carte L298N. Attention à ne pas prendre les fils du support de piles. Ne serrez pas les vis trop fort sinon vous risquez de casser le bornier.

  • Câblage du fil de masse

Branchez le fil noir du support de piles et un deuxième fil noir d’environ 15 cm sur le point milieu du connecteur 3 points de la carte L298N.

  • Câblage du fil d’alimentation

Soudez le fil rouge du support de pile sur une des deux broches de l’interrupteur et un autre bout de fil rouge d’environ 5 à 6 cm sur l’autre broche de l’interrupteur. A l’extrémité de ce fil, soudez un bout de fil rouge d’environ 3 à 4 cm pour faire un pont entre les points 1 et 3 du connecteur 3 points de la carte L298N. Sur ce petit morceau de fil, soudez un fils rouge de 15 cm qui alimentera l’Arduino. Câblez le tout comme sur la photo.

  • Montage de l’interrupteur

Maintenant vous pouvez fixer l’interrupteur entre les deux supports du moteur comme sur la photo suivante.

  • Alimentation de l’Arduino

Passez les fils rouge et noir de la carte L298N sous l’Arduino et faites les sortir sur le coté. Installer la carte shield sur l’Arduino en faisant attention de ne pas tordre les broches qui doivent correspondre aux broches de l’Arduino. Pour finir branchez les fils sur le bornier de la carte shield en respectant les polarités: fil rouge sur VCC et fil noir sur GND.

  • Câblage carte L298N

Branchez six câbles sur les broches de la carte L298N.

  • Câblage du servo

Branchez le câble du servomoteur sur la carte shield à l’emplacement n°4. Respectez bien le sens du câble: le fil jaune/orange du coté du 4 et le marron du coté du G.

  • Câblage de la carte L298N et du capteur à ultrason

Branchez les câbles de la carte L298N sur la carte shield. L’ordre des câbles est le suivant: ENB=>6 IN4=>7 IN3=>8 IN2=>9 IN1=>10 ENA=>11. Branchez ensuite les câbles du capteur ultrason: Echo=>12 Trig=>13. Branchez le fil Vcc sur la ligne V de la carte shield et le fil Gnd sur la ligne G.

Voila votre robot est monté et câblé. Nous allons pouvoir le programmer avec mBlock.

Programmation du robot Banggood

Pullup dans mBlock

  • Activation du PULLUP pour les entrées digitales

Les entrées digitales de l’Arduino doivent être reliées à du 5V (niveau logique 1) ou à du 0V/GND (niveau logique 0). Lorsque qu’une entrée n’est reliée à rien (on dit qu’elle est en l’air) elle devient flottante (elle peut être à 0V, à 5V ou à des valeurs intermédiaires). Or en électronique on aime pas les valeurs incertaines. On a donc inventé la fonction PULLUP (le PULLDOWN existe aussi mais il n’est pas utilisé sur l’Arduino). Cette fonction permet de donner la valeur logique 1 (5V) à une entrée si elle n’est pas utilisée.

Cette fonction n’est pas activée d’origine avec mBlock. Nous allons donc voir comment l’activer en modifiant deux fichiers de mBlock.

Le premier fichier à modifier est baseboard_firmware.ino se trouvant dans:

C:\Program Files (x86)\mBlock\firmware\baseboard_firmware\

Ouvrez le fichier avec le bloc-notes de windows ou Notepad++ et vers la fin du fichier vous trouverez dans la section « case DIGITAL » la ligne pinMode(pin,INPUT); qu’il faut modifier en pinMode(pin,INPUT_PULLUP)

Enregistrez le fichier en écrasant l’ancien fichier. Vous aurez peut-etre un avertissement concernant les droits d’accès au fichier, dans ce cas autorisez l’accès comme administrateur.

Si vraiment cela ne passe pas copier/coller le fichier sur votre bureau, modifiez le fichier sur votre bureau puis remplacer le fichier original par le fichier modifié.

Le deuxième fichier à modifier est Arduino.s2e se trouvant dans:

C:\Program Files (x86)\mBlock\ext\libraries\arduino\

Vous trouverez au début du fichier une longue ligne contenant pinMode({0},INPUT) qu’il faut modifier en pinMode({0},INPUT_PULLUP) comme sur la photo.

Vous pouvez enregistrer les modifications de la même façon que pour le premier fichier.

Une fois les deux fichiers modifiés, vous pouvez redémarrer mBlock et vider le cache comme sur la photo afin de prendre en compte les changements. Le logiciel vous proposera de redémarrer. Cliquez sur OK.

Lorsque le logiciel redémarre, tous ses paramètres seront réinitialisés. Voici comment régler les différents paramètres.

Régler la langue:

Régler le type de carte:

Régler le mode Arduino:

Voilà à partir de maintenant quand vous utiliserez des entrées digitales la fonction PULLUP sera activée.