vendredi 14 mars 2014

ATTENTION DANGER !


Il y a quelques temps, pour améliorer le fonctionnement de JAG3 , j’avais décidé de remplacer les 10 accus 1,2 volts NiMh d’une capacité théorique de 3000 milli ampères par un accu LiPo  (3 éléments) de 11,1 volts et 5000 milli ampères de capacité.
Avec les accus NiMh, le robot fonctionnait pendant environ 5 à 6 heures. Avec les LiPo, je doublais largement ce temps.
Des différents essais que j’ai pu réaliser, la tension (globale), bien que plus faible sur les LiPo se maintient dans une fourchette plus serrée, plus longtemps que sur les NiMh. Par contre, JAG 3 fonctionnait encore avec des NiMh à une tension avoisinant la moitié de la tension pleine charge, sans détérioration des accus. alors qu’avec les LiPo, il ne faut pas se risquer à une telle baisse sous peine de détruire l’accu. Pour palier ce risque, à chaque démarrage de programme je relevais la tension des accus directement par une routine programme qui bloquait le fonctionnement du robot en cas de charge trop faible.

Mais le problème n’est pas l’utilisation des accus, mais leur maintient en pleine forme. C'est-à-dire la recharge électrique de ces derniers.

Une chose que je n’ai pas compris, c’est que si je les chargeais sous un courant de 2,5 ampères ou bien sous 5 ampères, le temps de charge se trouvait identique (environ 120 minutes). Mon chargeur est un IMAX B6AC sur lequel on sélectionne le type d’accus, les courants de décharge de charge et des subtilités qui m’échappent. (notice in English)
Je vous parle au passé car une désastreuse aventure m’est arrivée. J’avais effectué plusieurs fois la recharge desdits accus sans rencontrer de problème particulier sinon celui du temps de charge identique sous des courants différents. Peut-être que quelqu’un pourra m’expliquer ça un jour. Bref suite à une charge réalisée comme dab, j’ai eu l’impression que mon accu n’était pas suffisamment chargé, et bêtement sans me poser de question je suis reparti pour une seconde passe ! Je n’ai même pas envisagé d’effectuer une décharge préalable. Et …j’ai eu droit à un beau feu d’artifice dans mon bureau. J’avais laissé l’accu tranquillement se refaire une santé sans bibi qui regardait tranquille  les J.O. Quand j’ai voulu voir où en était l’opération, l’accu avait EXPLOSE et le feu se propageait au plancher de mon bureau. J’ai pu intervenir rapidement et circonscrire l’incendie, mais ce n’était pas le résultat attendu !

Moralité j’ai du déménager le bureau , refaire le plancher, les papier-peints et le plafond…avec les félicitations de madame !

Les erreurs commises : sont

1 - d’avoir posé l’accu sur le sol du bureau (à côté de l’ordi rendu HS par l’opération) sans enveloppe de     protection
2- d’avoir relancé la charge de l’accu sans avoir effectué une décharge préalable ;
3 - de n’être pas resté à surveiller cette charge. (Mais j’aurai loupé les J.O.!)

A BON ENTENDEUR … SALUT

Seul côté positif : JAG3 est vivant.


Des nouvelles suivront. Plus cool, je l’espère !

mardi 18 février 2014

10 - Découverte du RASPBERRY PI

Voici donc la bête

Oui, c’est un ordinateur !
comprenant :
Le cœur (le processeur) est un ARM11.
Le disque : une carte mémoire (SD card)
Des connecteurs permettant d’adjoindre ce qui manque.

On ajoute donc principalement :
Une alimentation en 5 volts
Un écran de préférence avec entrée HDMI
Un clavier avec adaptateur USB

Et c’est parti.
Personnellement, j’ai acheté mon RPI avec une carte mémoire possédant déjà le logiciel nécessaire au démarrage. A savoir que c’est Linux. Il faut bien découvrir !
La première prise en main est un peu délicate. La télé avec le VGA ne fait pas vraiment l’affaire pour bien visualiser, mais ça défile. Donc le RPI est bien vivant.
Après achat d’un écran HDMI, et d’un câble adhoc, l’affichage est nickel.

Première configuration : première difficulté. Je dispose d’un  petit clavier Logitech avec ‘touchpad’ et configuration ‘azerty’, mais impossibilité de le valider en français ! Au diable : je transpose les caractères en ajoutant un transparent sur le clavier pour ne pas trop galérer. Je constaterai par la suite que lorsque l’affichage est graphique : le clavier est ‘US’ et lorsque je suis en affichage console, le clavier est ‘FR’…(pratique !)

La prise en main s’avère amusante. A l’aide des infos piquées sur le web, on peut rapidement faire joujou, et programmer quelques petits programmes à l’aide de logiciels comme ‘Python’ ‘Scratch’ et  langage ‘C’. La liaison internet est opérationnelle et permet de faire quelques mises à jour.

Mon premier but est de faire communiquer le RPI avec l’ARDUINO.
For de mon expérience I2C sur l’Arduino, les 2 modules dialogueront avec ce protocole disponible également sur le RPI.

Oui, mais les signaux du RPI sont en 3,3v et ceux de l’Arduino en 5v. Il faut donc adapter.
Premiers bidouillages, et premiers échecs (normal) La solution viendra d’un composant  ‘Logic Level Converter’ provenant de chez ‘Sparkfun’.



Mais côté logiciel ce n’est pas gagné !
Il a d’abord été nécessaire de recharger une nouvelle version de l’OS , puis de modifier certains paramètres dans le système. Que de bonheur quand ça fonctionne comme prévu.

Voici ce que ça donne quand tout est au point.

En clair ça veut dire que la liaison I2C est validée  entre le RPI (le maître) et
-         avec l’Arduino : adresse 15,
-         avec le compas : adresse 58
-         et avec la carte contrôle des moteurs : adresse 60


Il n’y a plus qu’à programmer….

lundi 27 janvier 2014

9 - JAG2 est mort ... vive JAG3

Je dois avouer que JAG2 n’a pas été à la hauteur de ce que j’espérai.
Quelques degrés d’écart dans un pivotement, et c’est toute la trajectoire à suivre qui est incorrecte ! Alors si les erreurs se cumulent, ça devient vite irréparable !
Comme le programme doit d’une part relever les distances, la direction, et continuer à se déplacer, lorsqu’un impondérable est détecté, il a déjà parcouru un certain espace, et les corrections ne sont pas toujours celles qui devraient être à cet instant.
J’avoue de mon côté que ma programmation n’est peut-être pas tout à fait adéquate. Mais j’ai eu beau triturer le programme dans tous les sens, le résultat n’a pas donné ce que j’en escomptais.

Mais comme les idées ne sont pas figées, je tourne la page…

Courant 2013, je découvre un ordinateur : le « RASPERRY PI ».
Pour les ignares : la bête que je dénommerai désormais RPI est un ordinateur de la taille d’une carte de crédit et qui tourne sous Linux, comme votre PC avec Windows.
Depuis le temps que j’entendais parler de « Linux embarqué » , je m’embarque donc dans cette voie !
Certains diront que le RPI n’est pas fait pour l’embarqué. Mais je ne suis pas un puriste, et j’espère en faire mon affaire.

Dans mon esprit, l’Arduino relèvera les valeurs d’ultra-sons en boucle, et le RPI n’aura qu’à aller l’interroger de temps à autre. Pendant que JAG3 se déplacera vers ses objectifs, l’Arduino continuera ses relevés. Par ailleurs le RPI pourra stocker toutes les données reçues dans un fichier. Ceci  permettant  après parcours d’étudier les réactions de JAG3 en connaissant plus précisément ce qui a pu les provoquer.
Et peut-être même pourrais-je lancer plusieurs applications simultanément…

Je vous présente sommairement le schéma  de la réalisation envisagée.


Donc c’est reparti.
Je garde la base de JAG2.
La première évolution que j’envisage est d’installer une tourelle de 12 ultra-sons qui me permettra de connaître plus précisément l’environnement dans lequel évolue JAG3.
Comme j’avais été limité avec l’Arduino UNO, j’évolue aussi vers un Arduino MEGA 2560. Ce dernier possédant 54 entrées-sorties, je suis fort aise pour connecter les signaux aller-retour des 12 ultra-sons.
La prise en main se révèle identique à celle de l’UNO, avec plus de possibilités physiques et logicielles. De 32 ko de mémoire, ça passe à 256.
J’effectue donc le montage de cette tourelle, et je vous montre le résultat.



Sur ka photo, JAG3 est déjà bien avancé, mais je vous garde la suite au chaud !
Pour les connections, les signaux « émission» et « réception » des ultra-sons sont regroupés sur une plaquette et ensuite relayés par une nappe avec un connecteur 2 fois 13 pins qui s’insère directement sur la carte Arduino. Les tension plus et moins sur une seconde plaquette pour une alimentation 5 volts dédiée aux ultra-sons. Le résultat est propre et me satisfait pleinement J.

Voici donc la première phase de cette évolution.
Je vous parlerai prochainement de mes combats avec le RPI.


A suivre.

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...