lundi 9 décembre 2013

LES ULTRA-SONS

Pour dompter cette seconde version de mon robot, je change mon fusil d'épaule, et je remplace les infra-rouges (IR) par des ultra-sons (US).
A savoir qu'en théorie (et en pratique) les IR sont plus précis en direction : le faisceau se réduisant à un angle de quelques degrés, alors que les ultra-sons ont un faisceau de 25-30°. Par ailleurs les IR sont plus sensibles à l'environnement : lumière, chaleur, couleur des obstacles.
Comme ma première expérience avec les IR n'était pas très concluante j'opte donc pour les US.
Mais quel modèle choisir ? Il existe effectivement une pléthore de modèles. Mais comme bien souvent : c'est le prix qui est déterminant.
Je décide d'utiliser des SRF05 qui a priori utilisent une seul pin pour envoyer (trigger) le signal de déclenchement et recevoir (echo) en retour l'information. On émet un signal d'émission et on attend son retour, et suivant le temps passé en aller-retour de l'onde, on sait à quelle distance se situe l'obstacle.  Via ebay, je commande mes SRF05 à Hong-Kong. J'en ai une dizaine pour 10 euros ! et sans frais de port ! Mais il ne faut pas en avoir besoin pour le lendemain.
Premier montage : rien ne va ! Normal...
Après analyse, je constate que les HY-SRF05 reçus nécessitent 2 pins : une pour l'émission, l'autre pour la réception, et malheureusement ça double le nombre de connections avec l'Arduino. Comme je pensais utiliser 8 US disposés en cercle tous les 45°, il me faut 16 pins au lieu de 8...et ça coince. Mais je ne désarme pas et je câble mes US via 2 multiplexeurs-démultiplexeurs, et j'arrive à commander les US avec 3 signaux (8 possibilités), plus 1 signal pour le 'trigger' et 1 signal pour l'écho. Soit 5 pins seulement d'utilisées. Mais un peu plus de programmation.pour tout synchroniser.
Sur la photo ci-dessus, on voit les 2 IC pour le multiplexage-démultiplexage derrière le compas , avec seulement 6 US installés.
Les premiers essais sont désastreux. Je constate que j'ai "cramé" plusieurs US, et ce : en voulant souder directement les fils sur les pins de ces derniers. Pour la suite, je revalide une commande via la Chine avec des HC-SRF04 qui fonctionnent à l'identique des SRF05 précédemment reçus. Et pour la mise en oeuvre j'utilise des connecteurs pour relier les pins avec l'Arduino.
Les essais s'avèrent meilleurs, mais certaines valeurs sont toujours erratiques. Je constate effectivement que lorsque les mesures sont effectuées perpendiculairement à l'obstacle, celles-ci sont correctes. Mais lorsque l'US est positionné sous un certain angle, les mesures ne correspondent plus du tout à la réalité !
Et c'est pourquoi de 8 US envisagés au départ, je me limite à 6 : un à chaque point cardinal du robot plus deux disposés à un faible angle de l'US de devant. Ceci devant permettre de déceler des obstacles pouvant se situer sur la trajectoire de JAG2.
Par ailleurs, il n'est pas possible d'obtenir les valeurs successives de plusieurs US disposés les uns à côté des autres. Il est nécessaire d'attendre un délai d'environ 70 millisecondes entre 2 mesures, pour que la réception de l'un ne soit pas perturbée par l'émission du précédent. Donc beaucoup de paramètres à gérer...
Qu'à cela ne tienne...on avance...Mais est-ce dans le bon sens ?

A suivre....

vendredi 15 novembre 2013

JAG2 en préparation

J'ai tout d'abord omis de vous montrer comment se présentait JAG1 en phase finale.
Voici à quoi il ressemblait :
Vous comprendrez tout de suite pourquoi ça ne pouvait pas fonctionner ! (une femme au volant...)
Maintenant son permis lui a été retiré...

J'aborde donc JAG2.

Pour faire mieux (ou essayer de faire mieux !) : je procède aux achats suivant :
- une paire de moteurs EMG30 12v "Devantech" possédant un contrôle odométrique incorporé (360 pulses par tour de roue).
- 2 roues "Lynxmotion" en aluminium de diamètre 7cm.
- supports moteurs et adaptateurs de moyeux. (rien n'est normalisé!)
- carte de contrôle des moteurs "H Bridge Devantech MD25"

Pour la platine de base, j'adopte une forme triangulaire arrondie, sur laquelle j'installe les composants.
Voilà ce que ça donne, et c'est beaucoup plus "pro"
Pour l'alimentation des moteurs : j'installe 10 accus 1,2v 2700 maH, ainsi qu'un des microcontrôleurs Arduino UNO récupéré sur JAG1.
La carte MD25 sera commandée via une liaison I2C par l'Arduino.
Le but de JAG2 étant d'éviter les obstacles, je supprime les contacteurs installés à l'origine sur JAG1.
La carte MD25 permet de définir la vitesse et le sens de rotation des moteurs, donne également la valeur des encodeurs de chaque moteurs et permet de connaître la valeur de la tension des accus.
Pour la vitesse de rotation des moteurs : la valeur 128 donne une vitesse nulle (STOP)
Les valeurs 129 à 255 permettent un sens d'avancement et 127  à 0 donnent une rotation inverse.
Connaissant le diamètre des roues : 7cm soit 22cm par tour et 360 pulses, j'effectue des tests à différentes vitesses pour une distance odomètrique de 3600 pulses (10 tours de roue)
Les résultats sont les suivant :
V = 140  temps mesuré : 35,4 s   distance parcourue : 2205 mm  
V = 150      " "       " "      18 s          " "             " "       2215 mm
V = 160      " "       " "      12 s          " "             " "       2220 mm
V = 170      " "       " "       9,5 s        " "             " "       2228 mm
On voit que la distance augmente progressivement avec la vitesse bien que le nombre de pulses soit identique! Ceci étant dû au fait que l'arrêt ne se fait pas instantanément...

Dans la foulée j'installe une seconde platine à 20 cm au-dessus de la base, afin d'installer les détecteurs de présence ainsi que le compas. A nouveau : relevé des caps sur la rose et vents. Et pour une facilité des réglages à venir, je règle physiquement le compas sur le robot afin que la boussole indiquant le Nord, JAG2 soit également aligné vers le Nord.

L'étape suivante consistera à installer les détecteurs de distance. Et ceci fera l'objet du prochain chapitre....


dimanche 27 octobre 2013

Circuit 24...

Non ce n'est pas pour les 24 heures du Mans !

Je vous présente le circuit envisagé pour JAG.
J'ai relevé sur papier quadrillé au centimètre près (plus ou moins!) le plan du rez-de-chaussée de ma maison, avec le mobilier, pour déterminer où le robot devait passer. Sur le plan, chaque carré vaut 10x10 cm. J'ai déterminé une zone de sécurité de 20 cm autour des murs et du mobilier, que JAG1 se doit d'éviter. Reste donc les zones d'accès en vert dans lesquelles j'ai tracé le circuit. Voici le résultat :
 Le départ et l'arrivée se feront à partir du bureau, à un point central non critique.
Chaque portion de ligne droite, fera donc l'objet d'une étape d'avancement vers la portion suivante. Chaque pivotement étant une étape supplémentaire. Pour simplifier mes explications, je situerai le nord en haut, l'est à droite...etc. Ce qui n'est pas vraiment le cas hélas !
La première étape consiste à orienter le robot vers l'ouest à l'aide de sa boussole (CMPS03)
Puis il avance jusqu'à une certaine distance du premier obstacle détecté par IR (infra-rouge) positionné vers l'avant. A ce stade pivotement à droite vers le sud, encore à l'aide du compas, et ensuite déplacement jusqu'au nouvel obstacle se présentant avec IR de devant. 
A ce moment le robot à une position calée en x et y sur le plan. Avec quelques repères ainsi définis, je peux espérer faire mon petit tour, et revenir au point de départ. Sur certaines portions, j'utilise aussi l'odométrie : comptage des pulses à l'avancement des roues, ceci permettant d'avancer d'une certaine distance, et également de définir une orientation par le différentiel d'avancement des deux roues. 
Et bien, j'ai passé des journées et des soirées à suivre JAG1 dans son dédale, sans jamais parvenir à boucler un tour complet !!! 
A force d'essayer un peu tous les réglages, j'en suis arrivé à la conclusion, que je manquais de précision.
C'est à partir de là, que j'ai décidé de repartir de zéro avec des éléments plus performants, et que JAG2 s'est dessiné dans mon esprit.
A suivre.

vendredi 18 octobre 2013

Toujours plus !

JAG1 devait se déplacer dans la maison en partant d'un point quelconque ! Je n'y suis pas encore arrivé...
Pour simplifier les opérations, au départ, je positionne toujours la bête au milieu de mon bureau, et vogue la galère... Non pas tout à fait, car j'ai adjoint un circuit electro-magnétique qui détecte le champ magnétique terrestre, et grâce à ce circuit qui renvoie les valeurs d'orientation, et avec quelques lignes de code, il est possible d'orienter le robot. Le circuit utilisé est un CMPS03.
 Voilà à quoi ressemble le compas : une carte électronique de 3 x 3 cm
Ca aide beaucoup pour obtenir une direction, mais la fiabilité à l'intérieur d'une maison n'est pas toujours au rendez-vous. A savoir que le champ magnétique est perturbé par tout ce qui est métal. Entre autre, les encadrements de mes portes étant métalliques, il n'y a aucune possibilité d'avoir un positionnement correct près de celles-ci. Il faut donc jongler entre détecteurs de distance, odométrie, et orientation. Chaque paramètre devant être réglé au plus juste pour obtenir un résultat quelquefois très aléatoire !
Entre autre, j'ai du recalibrer de nombreuses fois le compas pour obtenir des valeurs plausibles. Je vous montre ci-dessous la méthode de calibrage du compas.

Je dispose au sol une rose des vents orientée avec le champ magnétique terrestre. J'aligne le robot successivement sur les 4 points cardinaux, et j'envoie une pulse de calibrage à chaque quart de tour.
Ensuite, je crée un fichier du relevé des caps en faisant pivoter le robot de 10 degrés en 10 degrés.Un coup dans le sens horaire et ensuite dans le sens contraire...Jusqu'à ce que le résultat soit satisfaisant. Mais il reste toujours des orientations assez peu précises ! Avec l'expérience, j'arrive à orienter le robot dans les zones non perturbées à plus ou moins 5 degrés. Et ainsi, je peux diriger le robot perpendiculairement à un mur, et en déterminant la distance avec le détecteur infra-rouge, j'obtiens un repère de départ. 

Mais voilà : un problème succédant à un autre, je n'ai plus assez de connections disponibles sur le microcontrôleur. Au diable l'avarice, comme je commence à maîtriser l'Arduino UNO, j'en commande un second. Premier déboire, il est d'une nouvelle génération, et je ne comprends pas pourquoi il refuse de fonctionner. Après enquête, mon logiciel n'est pas à jour. On recommence, et là le problème est de faire dialoguer les 2 micros entre eux. Je m'essaye avec des commandes de niveau logique entre les 2, mais j'y perds vite mon latin (que je n'ai jamais pratiqué). 
Les microcontrôleurs ont été développés avec des entrées sorties logiques permettant de dialoguer avec de nombreux composants suivant différents protocoles : liaisons série, I2C, SPI, BUS "un fil". Après diverses réflexions, j'opte pour une liaison I2C qui se fait à l'aide de 2 lignes de signal (SDA et SCL), l'échange des informations s'effectuant en série avec un débit de 100 kilobits par seconde. Un microcontrôleur étant "maître" des opérations et pouvant gérer jusqu'à 128 périphériques dits "esclaves".
Le micro "maître" gérera le compas lui aussi en I2C , les interruptions des compteurs odomètriques et le dialogue avec le micro "esclave" qui lui relèvera les valeurs des IR,  des contacteurs, et commandera les servomoteurs des roues et de la caméra.
Avec tout ça en place...ça devait carburer !
A suivre...

vendredi 11 octobre 2013

Suite des améliorations...

L'amélioration suivante consistait à visualiser sur PC ce que le robot voyait lui-même.
J'avoue que c'était vraiment pour le 'fun', car je n'envisageais pas de diriger JAG1 depuis mon bureau. Peut-être qu'un jour j'aborderai la reconnaissance environnementale par imagerie! J'ai donc décidé d'installer une "caméra espion" sur le robot. Celle-ci fut d'abord positionnée sur le haut du véhicule. Les détecteurs de distance étant situés à un niveau inférieur : la caméra butait sur les obstacles non détectés et placés au-dessus des IR. Copie revue, je déplace la caméra à l'avant du robot, avec un servo de rotation horizontale placé sur la platine précédemment rajoutée. Un second servo fixé sur le premier permettant un balayage vertical. Et tout fonctionne après installation d'un convertisseur vidéo vers PC. Je suis toujours émerveillé quand la technique fonctionne ! C'est beau, mais ça n'aide pas beaucoup JAG1 à aller où je voudrai.

Etape suivante : l'alimentation.
Quand il faut changer les piles tous les 8 jours, d'une part ce n'est pas pratique et ça coûte.
J'installe donc 8 accus 1,2 v. en série sous le dessous de la platine inférieure. Cette alim délivrant une tension supérieure à 10 v, je prévois 2 adaptateurs DC-DC pour délivrer d'une part 5 v aux servos et aux IR et d'autre part 9 v pour la platine Arduino et la caméra....Ce qui entraîne la modification de toute l'implantation des circuits...Mais au bout du compte c'est un plus.
La réalisation des adaptateurs DC-DC se fait à l'aide d'un LM350, et sur le net pas de problème pour trouver un shéma fonctionnel.

Pour améliorer les déplacements de JAG1 j'envisage d'implanter l'odométrie. Ce terme signifiant le suivi de la rotation des roues à l'aide d'un comptage de pulses.
Pour ce faire, je réalise sur papier glacé un disque comportant 2 pistes avec 16 secteurs alternativement noirs et blancs, et chaque piste étant décalée d'un demi-secteur par rapport à l'autre. La détection des changements de couleur est réalisée avec des détecteurs IR QTR-1A et un IC 7474 pour mise en forme des signaux.
Sur la photo ci-dessus ( platine supérieure enlevée) on voit le disque collé à la roue et les 2 détecteurs QTR-1A positionnés sur le côté de celle-ci.
Le signal du détecteur odométrique sera contrôlé avec un interrupt de l'Arduino.
L'opération est répétée sur la seconde roue.
Reste à déterminer si la gestion programme de l'interrupt n'alourdira pas trop la détection infra-rouge des obstacles.

Un second microcontrôleur sera envisagé pour alléger certaines fonctions...
Plus plus plus....
Jusqu'où ira-t'on ?

samedi 5 octobre 2013

Améliorons JAG 1

Pour faire mieux, que fallait-il ?

En priorité, je voulais qu'il ne bute pas dans les obstacles, mais qu'il les détecte afin de les éviter.
J'ai donc décidé d'adjoindre des détecteurs de distance. Mais que choisir? La première décision à prendre est de choisir entre infra-rouges ( IR ) et ultra-sons ( US ). Les IR ont un cône de détection plus étroit que les US, mais sont aussi plus sensibles à l'environnement. Côté programmation avec l'Arduino : une seule instruction est nécessaire pour mesurer la distance entre le détecteur IR et l'obstacle :
 distance = analogRead(pin)
Concernant le prix, les IR étaient moins onéreux que les US, mais tout dépend des modèles. Récemment j'ai acheté des US type SRF04 sur ebay avec un marchand à Hong-Kong à moins de 1 euro pièce et sans frais de port ! Mais il ne faut pas en avoir un besoin urgent.
Bref, j'ai d'abord installé 2 IR (modèle Sharp GP2Y0A) en opposition sur une tourelle pilotée par servomoteur. Je pensais qu'en effectuant des rotations droite-gauche il serait possible de détecter les obstacles, et aussi de caler le déplacement de mon bolide parallèlement à un mur. Mais j'ai dû revoir ma théorie, car c'était sans compter avec le temps nécessaire à la rotation du servo de la tourelle. Ou alors, il fallait avancer le robot, l'arreter, faire des mesures, et repartir. Ca ne collait pas avec mes envies. Je voulais un déplacement plus fluide.
On efface tout et on recommence différemment. J'abandonne le servo qui servira plus tard pour une caméra espion, et je rajoute 2 IR. Le modèle d'origine n'étant plus dispo, je patiente, puis change de modèle après trois semaines d'attente. Et j'installe quatre IR : 1 devant, 1 derrière, 1 à droite et 1 à gauche. Et là : c'est déjà beaucoup mieux, mais toujours très imparfait.
Parallèlement à la détection IR située à 20 cm au-dessus du sol, les contacteurs mécaniques permettent  la détection rase-motte des obstacles, et le programme s'en alourdi d'autant. Sachant que le programme du microcontrôleur tourne en boucle infinie, avec de nombreux  paramètres à gérer tels :
- obstacle de face (mesure de distance )
- distance à respecter le long du mur,
- tester l'état des contacteurs
- agir sur les déplacement droite, gauche, ou arrêt des roues.
Tout ne peut se contrôler au même instant.
Autre souci rencontré, avec les IR : les distances mesurées sont fluctuantes : d'une part suivant l'environnement, mais aussi avec le niveau de la tension les contrôlant. Ce qui est bon à 15h (batterie neuve, lumière du jour) ne l'est plus à 20h (batterie faible, lumière artificielle)

Bref c'est un peu galère. Mais ça occupe !
JAG1 est perfectible et il le sera...Je le veux.
A suivre...

jeudi 26 septembre 2013

Pour qui la robotique ?

Je dirai qu'il faut d'abord s'intéresser aux nouvelles technologies, et à tout ce qui bouge...

Donc il faut être un peu curieux, et suivant son niveau, les envies seront plus ou moins complexes.
Cependant, si on veut faire trop compliqué, il y a risque de tout laisser tomber. Donc il vaut mieux partir petit et progresser par la suite.

Il faudra être créatif, et ne pas hésiter à se remettre en question. Combien de fois, j'ai du reprendre des montages, afin de les peaufiner!

Quand les idées sont en place (même à l'état de rêve), il faut être bricoleur, et ne pas renâcler à mettre les mains dans le cambouis ! Quand je dis cambouis, tout est relatif. Il faut manier la scie, la perceuse, le cutter (attention aux doigts !), la lime, faire des petites soudures... On n'a pas les mains noires d'un mécano...mais ça salit quand même! et pas besoin de gros outillage. Souvent il sera intéressant  d'utiliser du matériel de récupération. Je pense surtout aux jouets (moteurs, roues..) et au matériel électrique comme les robots ménagers. Les boîtes, les planchettes, les vis....

Ensuite quand la mécanique est en place, il faut lui donner vie. Donc choisir un microcontrôleur (pas facile). Je vous ai parlé de mon choix précédent, et depuis j'en ai fait d'autres dont certains dorment dans le placard. La technique évoluant très vite, les choix sont nombreux, mais certains n'arrivent jamais à maturité.
Je reviendrai certainement sur le sujet.

Quand ce choix est fait, il va faut dialoguer avec la bête. Donc il va falloir programmer. Et ce n'est pas évident pour tout le monde. Quand on choisit un microcontrôleur, il ne parlent pas tous de la même façon !
Certains en Assembleur, d'autres en Basic, en 'C', en Java, en Python... Lors du choix du "cerveau" de la machine, regardez sur le Web, tout ce qui se dit, et comment ça parle. En général suivant les choix opérés, vous aurez plus ou moins d'exemples à disposition. Personnellement je travaille en 'C' sans vraiment le maîtriser, mais avec les bases du "siteduzero.com" je me débrouille.

Lorsque les divers éléments de la "bête" seront en place...ça ne marchera pas forcément comme vous voulez. M... alors ! Il faudra se creuser les méninges, modifier l'installation des composants, en changer certains, revoir le programme. Bref beaucoup de temps à passer, et de la patience à avoir.

Mais quel plaisir d'apprivoiser la "bête". Et elle ne mord pas !

Combien ça coûte ? Tout dépend de la technologie mise en place. Au début, j'ai investi dans la littérature, et ce n'est pas le moins cher, mais c'est pratique d'avoir de la documentation à feuilleter. Ca permet de faire mûrir les idées.
Certains mois, je dépense entre 50 et 100 euros, d'autres rien.
Si vous achetez un robot en kit, il s'en trouve à moins de 100 euros, et permettent d'appréhender le sujet. Mais il y en a aussi à plus de 10.000 euros. (demandez au Père Noël !)
 

vendredi 20 septembre 2013

Tout commence ici

Au début...

Il y a quelques années (au début de ce millénaire) je m'étais passionné pour le robot 'MONTY' dont la tâche principale était de suivre une ligne tracée au sol.
Chacun pourra le découvrir sur internet.
La retraite arrivant, et après avoir tâté d'autres hobby comme l' aéromodélisme (où ça casse ! ) ou les "burpuzzle' (pas très vivant), je reviens avec l'envie de bricoler quelque chose qui remue...

Fin 2010 donc j'entame le projet d'un petit robot qui pourrait circuler dans l'environnement de mon habitation.

Après avoir pris quelques idées sur le Net, j'ai commencé par découper une platine en plexiglass : un ovale d'environ 160 x 240. Les roues diamètre 90 ont été découpées dans de l'isorel de 4mm et élargies par la suite pour une meilleure motricité. Les moteurs de roues ont été réalisé avec des servos 'Hitec 322) modifiés pour une rotation continue.
Pour contrôler les déplacements et faire simple, j'ai opté pour des contacteurs mécaniques autour de la platine, qui dès qu'ils seraient activés par un obstacle permettraient de modifier la trajectoire du robot (que j'ai baptisé "JAG" et deviendra par la suite "JAG1")
Je vous montre la bête qui avait déjà évolué dans le temps. Il faut savoir qu'une petite bête comme ça grandit en permanence...avant de donner naissance à une nouvelle progéniture !
Après étude de l'existant, et ne sachant pas où je mettais les pieds, j'ai opté pour un microcontrôleur type 'Arduino Uno'. Et avec le recul, le choix était bon : pas cher et facile à mettre en oeuvre.
La première platine encombrée par les 'switchs' et la filasse, j'ai superposé une seconde platine pour y installer le microcontrôleur et l'alimentation.

Et que faisait JAG ?   Euh...  pas grand grand chose je l'avoue.
Lorsqu'il rencontrait un obstacle devant lui, il partait en arrière, pivotait et repartait. Opération inverse lorsqu'il butait par l'arrière. S'il y avait contact sur la droite : arrêt de la roue gauche pour dégager et vice versa pour un contact à droite.
Mais à chaque jour suffit sa peine...et les idées foisonnent pour améliorer.

Je vous parlerai de la suite prochainement, et si des détails vous intéressent n'hésitez pas à poser des questions.
Jac.