Le Peuht : Encore plus bête que méchant !
Un Wheely qui ne sert à rien, mais attachant
Voici encore un truc (ou un truck) totalement inutile ! Ce mobile attachant ne sert à rien si ce n'est agacer le chat pendant sa sieste ou promener un plumeau sous les meubles . ... Bon, il ne sert à rien, comme toutes les oeuvres artistiques, mais il est plaisant à regarder évoluer en mode autonome ou à diriger en mode piloté, comme une voiture télécommandée .
En mode de fonctionnement aléatoire, le Peuht se déplace à la vitesse pré-sélectionnée, en ligne droite ou presque et va effectuer un quart de tour ou sensiblement, dès qu'un obstacle est détecté à une distance inférieure à 200 mm . Dans ce cas il s'arrête, recule et effectue une rotation à gauche ou à droite pour repartir vers de nouvelles aventures . Et ce jusqu'à l'épuisement de la batterie ... On imagine la crise de nerfs du chat, qui est sans cesse importuné dans sa sieste, par ce casse pieds...
Mais le plus intéressant est tout de même le mode téléguidé ! Dès qu'il va détecter une synchronisation BlueTooth, d'un smartphone ou d'une tablette, le Peuht va s'arrêter nette et attendre les ordres . L'envoi de caractères ASCII en majuscule va lui donner l'ordre d'exécuter un (ou des ) déplacement(s) dans la direction choisie . La précision de ces ordres sera relative a la vitesse à laquelle le Wheely à été préréglé !
Quels sont les ordres :
- "P" demande l'avance de 1 pas de moteur; le pas va être réglé par des jumpers (cavaliers ) de 1 tour de roue à 1/16ème de tour de roue !
- "A" c'est pour avancer un peu plus vite ! Là, les moteurs vont faire 6 pas ...
- "S" va arrêter la progression du Peuht (stop).
- "R" fait reculer d'un pas le mobile.
- "G" ordonne un virage à gauche de 1 pas de stepper
- "D" ordonne un virage à droite de 1 pas de stepper
A noter que pour les virages, le Peuht tourne sur place par la rotation en sens inverse des moteurs ... Il est tout à fait aisé de rajouter des commandes de rotation (Ex.: un seul moteur tourne ) ou d'avance, en assignant de nouvelles lettres dans le programme .
De la ferraille et des plastiques :
Une lecture du schéma :
Tout commence par le centre du dessin, où un Arduino nano, abonné de ce site, va s'occuper de tout ce qui gravite autour ! Le programme est si léger (on le verra plus bas ) que la capacité du Nano est largement suffisante; en plus il n'est pas cher et relativement performant pour ce que l'on en fait ici: pas besoin d'un cheval de course ! Je ne vais utiliser que des sorties en tout ou rien (logiques), une entrée normale (ECHO) , une entrée déclarée en Pull-Up (BTOK) pour économiser une résistance (pas avare le Nanard mais économe ) et la communication RX/TX pour le dialogue avec le module BlueTooth .
Si l'on commence par la gauche, on voit que l'énergie est fournie par une batterie; je lui ai donné une valeur de 11,7 volts mais ça fonctionne très bien de 7 à 13 volts. Il faut juste faire attention à la polarité ! (lors des tests ça m'a coûté un peu de matériel Grrrrrr!) . Dans les fonds de tiroirs, je suis sûr que vous avez çà et sa capacité est le reflet de l'autonomie du Peuht . J'ai détrompé le raccordement pour éviter de nouveaux désagréments étourderistiques . L'énergie de cette batterie va alimenter les moteurs, et les régulateurs intégrés du Nano qui fournissent les tensions de 5 volts pour la logique et 3,3 volts pour le récepteur BT .
Au dessus, à gauche, se trouve le radar ultra-sons anticollision (module HC-SR04) qui vient comme le reste de chez Aliexpress . Cet élément est alimenté en 5 volt DC et comporte une entrée TRIG et une sortie ECHO; une impulsion de 10 mS sur l'entrée trigger va émettre un ultrason qui, lorsqu'il rencontre un obstacle, est retourné sous forme d'un écho sur le capteur . Une électronique de mise en forme retape le signal pour le rendre exploitable, tant et si bien qu'il suffit de mesurer le temps entre le puls et l'écho pour avoir la distance entre le module et l'obstacle "distance = temps / (2 x 340 m/s )" .Et ça marche...mais attention l'angle de mesure n'a qu'une ouverture de 15 à 20° par rapport à l'axe => donc la vision du Peuht est aussi étroite que son esprit !
Sur la droite, on trouve les deux drivers de moteurs pas à pas (A4988) de chez Aliexpress également. Les moteurs sont de type bi-phasés et les pilotes ont pour rôle de créer un champs tournant par alimentation puis inversion des polarités des bobines afin que les aimants permanents du moteur aillent se caler en face du champs adéquat ainsi crée . Chacun de ces circuits comporte un diviseur de pas (JP3 JP4 ) de 1 à 1/16 ème qui par enfichage de cavaliers permet de régler, dans mon application, la vitesse de rotation des roues ( En pas complet, 1 tour de roue est égal à 200 pas sur mes moteurs ).... Un potentiomètre permet de limiter le courant dans les moteurs ( donc le couple, la consommation et l'échauffement ). Je n'y ai pas touché . Je n'utilise que 2 lignes de pilotage par moteur (DIR et STEP ) ; la première définit le sens de rotation suivant son état logique et la deuxième demande l'avance d'un pas du moteur par l'envoi d'une impulsion avec un rapport cyclique symétrique ... Pour ce montage je n'utilise pas les lignes Enable, Reset et Sleep . Un gros condensateur électrochimique (100µF/63v) découple la source d'alimentation, car les steppers étant réversibles il peuvent se transformer en générateur de tension qui peut avoisiner les 35 volts (!)
Sur la gauche, le module HC-05 va s'occuper de la communication BlueTooth ... Ce circuit qui ne coûte même pas 1€ est alimenté par le 3,3 volts fourni par le régulateur intégré de l'Arduino ... Ses deux lignes de dialogue, respectivement RX / TX sont à croiser avec les lignes TX / RX du Nano . Si l'on raccordait directement RX au microcontrôleur, nous aurions des trames avec un potentiel de 5 volts alors que la tension d'alimentation est de 3,3 volts, ce qui fait que ça ne fonctionnerait pas longtemps ! Donc il est impératif de diviser cette tension par les deux résistances R3-R4. Sur le schéma et la réalisation, j'ai inclus deux cavaliers enfichables pour permettre le téléversement (programmation) du Nano sans le sortir du support ou le dessouder; en effet lors de transfert du programme dans le µcontroller ces lignes TX-RX sont utilisées et doivent être dégagées de tout potentiel, sinon vous allez voir apparaitre un message annonçant un défaut de communication . La pin 25 du HC-05 est prévue pour allumer une led lorsque la synchronisation BlueTooth est assurée; Je me sers de ce signal, via un opto-coupleur pour que le programme passe du mode de fonctionnement autonome en mode télécommandé ! Dès que la communication est établie et validée, la led de l'opto s'allume, tire à l'état logique bas l'entrée 'BTOK' et le programme saute, comme décrit plus bas, dans la partie qui traite les fonctions suivant les caractères ASCII reçus ! Ainsi soit il ...
Le cerveau du Peuht :
L'électronique occupe l'étage du milieu; le circuit du Peuht est aux dimensions des autres éléments . C'est du simple face, pour pouvoir le réaliser soi-même avec les moyens du bord: un seul strap permet de s'affranchir d'une sérigraphie côté 'composants' J'ai privilégié du SMD (composants montés en surface ) autant que possible. Les pistes sont de largeur supérieures pour la partie puissance et j'ai limité les passages entre les pattes pour qu'il reste un peu de gras pour les soudures .
On commence par câbler le côté 'soudure' par les CMS avec un petit fer, une brucelle et de bonnes lunettes grossissantes ! Pour ma part, je procède ainsi: je dépose un peu d'étain sur la pad droite du circuit, au niveau du composant à souder; puis fer dans la main droite et pince dans la gauche, je refonds l'étain et y dépose le composant ... Et soude l'autre pad après . Ca ne va pas trop mal et entre les deux soudages, ça laisse la possibilité de réajuster la présentation.
Un soin particulier et une dextérité maximum est à apporter au soudage du UC-05 BT . Je colle sur le dessous du module un bout de ruban adhésif pour isoler les pistes des deux circuits et légèrement surélever le module BT; je le positionne avec finesse, je soude une pads, et si tout est convenable je fais les autres avec la même rigueur .
On câble ensuite tout le reste des éléments en commençant par le seul et unique strap, puis les jumpers, les électrochimiques, ainsi que l'opto coupleur. Personnellement je l'ai monté sur support mais ce n'est pas impératif, c'est juste du luxe . La plug d'alimentation impose un perçage 1,2 mm ! Ne faites pas comme moi, pensez y avant de commencer le soudage ! Vient le tour des drivers de steppers, eux impérativement sur support et on fini par l'Arduino sur support également .
J'ai fini par souder le détecteur d'obstacle, côté pistes. Je positionne le petit circuit HC-SR04 bien perpendiculairement dans les deux axes et si l'azimutage est convenable, je fais toutes les pattes dans la foulée !
Les jambes du Peuht :
Toutes les pièces de la mécanique sont réalisées à l'imprimante 3D .
- Le corps bas qui supporte les moteurs pas à pas. C'est un élément dont la résistance mécanique doit être dense car les moteurs ont un poids certain.
- Les roues de tractions dont les moyeux sont dessinés au diamètre des axes moteurs, avec un méplat pour en assurer l'entrainement; les pneus sont des joints toriques et la liberté de patinage est définie par la dureté du sertissage de l'un sur l'autre .
- Le plateau supérieur fait la rigidité à l'ensemble et permet d'y poser les accessoires qui donnent la fonction au Peuht .
- Un parechoc protège le détecteur ultrason, avec les autres composants. Il se prolonge loin derrière car il sert également à supporter et à permettre l'articulation de la fourche . Un ensemble de deux roulements fait office de colonne de direction (tiens ! on reconnait là le motard ) .
- Une fourche avec une chasse orientée à la traine, se monte dans cette colonne de direction et reçoit la petite roue folle .
- La petite roue est traversée par un axe de 4mm en tige filetée montée légèrement serré dans la fourche ...
Je ne cacherai pas que j'étais parti pour faire un robot équilibriste mais pour gérer l'équilibre, la régulation PID et les capteurs gyroscopiques, j'ai dû me résoudre à abandonner ou à copier un projet existant, mais là, ça n'a plus d'intérêt.
Les fichiers au format STL sont dans le ZIP plus bas ... Pour ceux qui seraient tentés par des modifications, j'ai également joint les fichiers RSDOC issus du fabuleux logiciel de Radiospares gratuit qui s'appelle DesignSpark Mechanical ...
Un aperçu des différentes phases de montages :
L'âme et la motivation du Peuht :
Autrement dit: le logiciel ...
La simplicité et l'abondance de commentaires va bien démystifier le programme développé avec l'IDE de Arduino . On peut le téléverser après avoir choisi le Nano ! Le mien est un ATmega 328 Old boot loader à 1,80 € dans les échoppes du soleil levant . Je me répète, mais il faut bien penser à retirer les cavaliers sur les lignes TX-RX du circuit imprimé, car elles doivent être libres de toutes charges pendant le transfert, au risque de voir apparaître quelques sympathiques gros mots dans le bas de l'écran du PC .
Le sketch commence par les déclarations d'entrées / sorties et des variables utilisées . Puis des sous-programmes qui traitent de chaque mouvement du Peuht ; Exemple pour avancer d'un tour de roue :
void moveForward() { // Pour faire un Tour de roue en avant
digitalWrite(dirPin, HIGH);
digitalWrite(dirPin1, LOW);
// Pour 1 tour moteur:
for (int i = 0; i < stepsPerRevolution; i++) {
digitalWrite(stepPin, HIGH);
digitalWrite(stepPin1, HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin, LOW);
digitalWrite(stepPin1, LOW);
delayMicroseconds(1000);
}
}
Pour avancer on commence par donner le sens de rotation des moteurs en plaçant "dirPin" à l'état logique demandé ! (évidement l'inverse l'un de l'autre car les moteurs sont en tête bêche). Puis on vient successivement, placer à l'état haut et à l'état bas les commandes de pas moteurs, avec une légère temporisation pour la fluidité, avec une boucle qui va reproduire 200 fois cette suite pour un tour de roue, si l'on a pas mis de diviseur de pas sur les steppeurs (suivant enfichage des cavaliers devant les drivers ).
Et pour chaque type de mouvement on va reproduire un sous-programme avec les rotations adéquates... Sauf pour le "stopRun" où l'on met à l'état bas les deux lignes "stepPin" .
Dans le setup, on déclare la direction des I/O et les éventuelles résistances de rappel (Pull-Up)
Dans le loop, on lance un coup de radar ultrason, on calcule la distance avec l'écho reçu :
void loop() { //Départ du cycles défini par le programme
moveForward(); //Un pas en avant
digitalWrite(TRIGG,HIGH); //Envoi d'un puls d'ultrason de 10ms
delayMicroseconds(10);
digitalWrite(TRIGG,LOW);
int mesure = pulseIn(ECHO,HIGH,TIMEOUT); //Attente de l'écho
float distance_mm = mesure /2.0*son; //Calcul de la distance
Si la distance est inférieure à 200mm, on va provoquer l'arrêt, un petit temps, la reculotte du Peuht, un petit temps d'arrêt encore, puis la rotation à gauche ou à droite de manière aléatoire jusqu'à ce que la voie soit libre en vérifiant avec un nouvel écho chaque fois .
if(distance_mm < 200) { //Si la distance est inférieure à 200mm => Obstacle !
delay (1000);
moveBack(); // Un pas en arrière
int sens = random (10); //pour se dégager et repartir
delay(700);
if ( sens < 5 ) {
turnLeft(); // Tourne à droite
}
else {
turnRight(); //tourne à gauche
}
delay (1000);
}
On repart pour un tour de roue en analysant le dégagement du chemin à suivre !
Lors de chaque boucle, on vient également tester que le BlueTooth n'est pas activé pour repartir sur la boucle principale => c'est le fonctionnement autonome !
if (digitalRead(btOk)) { // Le récepteur Bluetooth est-il activé ? Si Non ...
digitalWrite(Led, HIGH) ; // Led 13 S'allume
}
else { // Le récepteur Bluetooth est-il activé ? Si Oui
digitalWrite(Led, LOW) ; // Led 13 S'eteind
delay (50);
goto tlCmd; // Saute au sous programme de marche pilotée
}
return; //Si non, retour au début
Si l'entrée BTOK est détectée au niveau bas, ça veut dire qu'un appareil BlueTooth est synchronisé avec le Peuht, et là le programme saute sur l'étiquette "tlCmd" et va attendre qu'un caractère ASCII soit reçu, puis on l'analyse pour savoir si il est valide, et on regarde à quel cas il s'applique :
tlCmd: {
Serial.flush(); //Attente d'un caractère
cha = Serial.read(); // Lecture du caractère
if (Serial.available()>0) { //Valide si plus grand que nul
delay (50);
if(cha=='A'){ //Si c'est le caractère A
for (int i=0; i <= 10 ; i++)
digitalWrite(TRIGG,HIGH); //Envoi d'un puls d'ultrason de 10ms
delayMicroseconds(10);
digitalWrite(TRIGG,LOW);
int mesure = pulseIn(ECHO,HIGH,TIMEOUT); //Attente de l'écho
float distance_mm = mesure /2.0*son; //Calcul de la distance
if(distance_mm > 200) { //Si la distance est supérieure à 200mm => la voie est libre !
moveForward(); // 10 pas en avant
delay (50);
}
}
if(cha=='P'){ //Si c'est le caractère P
moveForward(); // un pas en avant
}
Par exemple, si le récepteur reçoit le caractère "A" , on prépare une boucle pour avancer de 10 tours de roue en prenant en compte la détection d'obstacle ! Si le chemin est libre (mesure > 200mm), on continue la boucle... Si c'est le caractère ASCII "P" qui est reçu, on avance d'un pas. Idem pour les autres mais pour tourner, reculer, etc etc ...
Les Applications de Pilotage :
j'en ai essayé deux, mais tous les terminaux Bluetooth sur le Google Play Store devraient fonctionner avec plus ou moins d'avantages, et suivant les goûts de chacun :
- Sur le smart phone, j'ai fais des essais avec "BlueTooth Terminal HC-05 (version gratuite ). Très facile à configurer ; juste faire reconnaitre l'élément avec lequel on souhaite se connecter; Puis un mot de passe est demandé par le HC-05 (ce mot de passe est 1234) et ensuite il nous demande quel genre de trames l'on désire envoyer => ASCII . Des boutons paramétrables, Btn1 à Btn5, sont disponibles et on peut leur affecter à chacun un caractère "S", "G", "P", "A", "D", "R", ...Chaque envoi va exécuter une action sur le Peuht ! MAIS la version gratuite a un gros inconvénient: elle est bourrée d'écrans de publicité qui la rendent très vite inutilisable ... Et comme je n'ai pas envie de payer, je vais passer à une autre ! Na na nère heu .
- Sur la tablette, j'avais déjà "Serial BlueTooh" qui était installé, donc j'ai voulu l'essayer. Cette application fait partie d'une série de 3, qui sont pour les autres "Serial WiFi" et "Serial USB". Après avoir lancé l'APP, on choisi l'élément avec lequel on souhaite communiquer dans la configuration "Device" puis "Connecter" après avoir renseigné le mot de passe 1234, le dialogue est établi ! Gros avantage --> pas de pub ! Ouf . Un autre point intéressant c'est que l'on peut créer des séquences de caractères ASCII , les essayer et les mémoriser: ce qui se traduit par le Peuht qui exécute une suite de mouvements et de manoeuvres. Et encore mieux, le nombre de mémoires est plus grand . Donc je vous conseille cette série du même auteur .
Bon, eh bien maintenant, il y a plus qu'a s'amuser un petit peu avec . Voilà je viens de faire ma voiture radio commandée que je demande à Noël depuis de nombreuses décennies ... Comme quoi, on est jamais si bien servi que par soi-même ! Et comme il neige à gros flocons en ce moment, je vais y ajouter une étrave, comme ça le déneigement passera de corvée à amusement ; On est pas au bout, courage !
Pour ceux qui sont intéressés par la réalisation, tous les fichiers sont dans le zip ci-dessous :
Le peuht files (739.46 Ko)
Commentaires
-
- 1. CORDIER MICHEL Le 27/01/2021
Que de dire , trop fort Nanard,
c est un beau joujou pour le chat
faudrait penser a mettre un peu poil dessus
bisous a vous deux
Ajouter un commentaire