Elektor, juillet/août 2007
Transcription
Elektor, juillet/août 2007
Nr. 349/350 juillet/août 2007 (B) 12,10 e • (CH) 21,50 FS • CAN 15,00 $CAN • DOM surface 14,00 e • DOM avion 17,50 e • TOM surface 1600 xpf • TOM avion 2400 xpf platform voor elektronica NUMÉRO D’ÉTÉ DOUBLE www.elektor.fr Nr. 347 MAI 2007 mensuel (B) 6,55 e • (CH) 11,30 FS • CAN 8,35 $CAN DOM surface 7,00 e • DOM avion 8,75 e TOM surface 800 xpf • TOM avion 1390 xpf www.elektor.fr Capteurs Actionneurs Microcontrôleurs Alimentations & chargeurs Mécanique Communications Trucs & astuces Divers L 19624 - 350 - F: 10,60 - RD l’électronique imaginative Hors Gabarit 2007 En outre Ours Quel cerveau pour mon robot ? Alphanumski, le Sudoku 36 x 36 Avant-première de septembre 2007 MÉCANIQUE 6 72 142 148 Antieu-robot Babybot 31 37 Bolo Hunter, le chasseur MOPS le robot Moteur à réducteur à moment de force important pour 5 € Naq’un-pied « Tremblote » TriWi 36 32 38 ALIMENTATIONS & CHARGEURS Anti-décharge profonde pour accus Chargeur d’accus CdNi polyvalent Chargeur d’accus Li * Chargeur rapide d’accumulateur NiMH * Constante de tension Convertisseur USB * Des accus en double * Des accus LiPo en parallèle Mini-inverseur Réducteur de tension MLI Régulateur à découpage à entrée large 3 A réglable Régulateur LDO avec démarrage en douceur ou suivi zBot : alimentation piles/solaire 555 en alimentation à découpage 22 11 8 12 15 20 18 10 20 17 14 9 16 17 TRUCS & ASTUCES Des roues maison qui tournent rond Mesure de tension négative avec le R8C Robot pendulaire 28 27 24 39 35 40 30 CAPTEURS Boussole pour Mindstorms® NXT Lego Capteur auditif stéréo * Capteur de CO Capteur de pouls sans fil Capteur PIR Capteur pour robot suiveur de ligne Commutateur à commande sonore Convertisseur A/N pour robots Convertisseur N/A simple pour robots Détecteur d’obstacles lointains à ultrasons Détecteur d’obstacles proches à infrarouges Du magnétophone à cassette au moteur de propulsion de robot Interrupteur/indicateur de surchauffe LED comme capteur de lumière Oreille de chauve-souris Positionnement à réseau de photodiodes 69 50 49 58 59 48 70 68 54 62 45 55 70 71 67 63 SOMMAIRE Robots moustachus Système de vision CMUCam1 Télémètre infrarouge à PIC ou à Basic Stamp Un inclinomètre pour votre robot Un robot chercheur de lumière Un robot détecteur d’obstacles Un robot qui ne perd pas le Nord 66 64 60 46 44 42 56 MICROCONTRÔLEURS Carte USB de démo à bas2 coût Commande de servo-moteur par PC Interface sérielle pour Propeller * « Navigateur » Pilotage par GPS de robot mobile Platine de prototypage à Propeller pour le BoeBot * Programmateur pour LPC900 * Programmateur STK200/300 optimisé pour µC AVR « TEAclipper » : programmateur « timbre-poste » 91 85 86 87 83 80 79 79 30ième année Juillet/Août 2007 N° 349/350 Relais PIC clignotant 105 Robot-footballeur 101 zBot : étage de puissance 10 A pour moteur CC102 COMMUNICATIONS Antenne 2,4 GHz pour véhicules robotisés Communication IR par UART Détecteur d’impulsion supprimée Récepteur pour télécommandes RC5 Télécommande IR à R8C Télécommande radio pour PDA et Smartphones Voix de robot zBot : liaison sans fil 116 122 122 118 123 120 119 119 DIVERS Boîtes de construction EE de Philips Buggy Formule Flowcode 131 124 Commande de volume automatisée De battre, mes mains l’ont arrêté Dompteur de couleur Et pourtant il marche La structure des fichiers HEX Lucioles chaotiques à LED Nouvelle brique moteur Lego MINDSTORMS® NXT Racer à hydrogène Robot marcheur hexapode Robots footballeurs Un robot avec une mémoire d’éléphant 128 133 133 138 140 130 ACTIONNEURS Catapulte pour robot ... ou autre Commande bidirectionnelle de moteur 12 V Commande de moteur pas à pas Commande de moteurs pas à pas Commande de servos Comment commander des moteurs CC de puissance Conversion de servo-moteur -> moteur Contrôleur de moteur CC MLI de 3 A * Contrôleur de moteur pas à pas à PIC12C508 MotoBox * Pilote complet de moteur pas à pas 112 107 114 108 98 103 111 109 105 94 100 * Montage avec dessin de platine 132 141 134 137 128 Chargeur d’accus Li Paul Goossens Les accumulateurs au lithium, comme les LiPo (Lithium-Polymère) et Li-Ion (Lithium-Ion), sont d’excellents candidats pour la fourniture d’énergie aux robots. Leur masse, comparée à celle d’autres R3 100k K1 1% VL DCIN BST IC1 MAX745 DHI 20 18 C3 GND 7 8 BAT54 2 C1 10u 100n 2 19 LX 17 DLO 15 CS 14 BATT GND T1A T1 = FDS6911 D2, D3 = MBRS540T3G L1 22u D3 D2 4 T1B 4 5 10 1 16 0V CELL1 CELL0 THM/SHDN REF SETI VADJ STATUS C2 10u 3 POWER IN 11 12 6 7 9 8 13 CCV CCI GND IBAT PGND CEL1 CEL0 D1 6 1 5 JP2 3 JP1 180m 100k 1% R5 R6 10k R4 R2 10k 10k R1 C4 C5 C6 100n 100n 47n accumulateurs, est beaucoup plus faible, ce qui soulage mécaniquement le châssis. En ce qui concerne la disponibilité, les choses se présentent bien. On trouve sans trop chercher plusieurs sortes de ces accumulateurs. Charge La charge d’accumulateurs au lithium est un travail de grande précision. Une méthode incorrecte peut faire tout flamber. Il est donc fortement conseillé de choisir le bon chargeur. On peut en fabriquer un assez facilement autour d’un MAX745. 250mW 1% K2 Accu 070273 - 11 GND Pendant la charge, l’intensité du courant en doit pas dépasser 1C. Cela signifie que le courant de charge d’un accumulateur de 1 200 mAh, par exemple, ne doit pas dépasser 1,2 A ! La force électromotrice de ce type d’accumulateur ne doit, en outre, pas dépasser 4,25 V par élément. Un chargeur d’accumulateur au lithium est en principe une source de courant avec une tension de sortie (précise!) maximale. Régulation Tableau 1. JP1 JP2 Éléments Fermé Fermé 1 Ouvert Fermé 2 Fermé Ouvert 3 Ouvert Ouvert 4 La tension de l’accumulateur se mesure par l’intermédiaire de la broche 14 (BATT). Le circuit intégré déduit le courant de charge de la différence de tension entre BATT et CS. Il essaie de maintenir cette différence de tension à 185 mV. Dans notre exemple, nous avons choisi une résistance de 180 mΩ. Le courant de charge est donc de 185 mV/180 mΩ = 1,02 A. Si vous désirez un autre courant de charge, il vous suffit de choisir R5 en conséquence. Le calcul est facile : Dans notre cas, le chargeur utilise une régulation abaisseuse. En choisissant cette Liste des composants Résistances : R1,R2,R6 = 10 kΩ (CMS 0805) R3,R4 = 100 kΩ 1% (CMS 0805) R5 = 180 mΩ/¼ W (CMS 1210), p.ex. Digikey P.18SCT-ND Condensateurs : C1,C2 = 10 µF/25 V (CMS 1210) C3 à C5 = 100 nF (CMS 0805) C6 = 47 nF (CMS 0805) solution, le chargeur gaspillera moins d’énergie et nous pourrons lui éviter un radiateur. Un seul circuit intégré, IC1, se charge de la régulation complète. Quelques composants externes seulement l’accompagnent pour la régulation abaisseuse, à savoir le FET T1 et les composants qui l’entourent. R5 = 185 mV / Icharge. Semi-conducteurs : D1 = BAT54 (SOT-23) D2,D3 = MBRS540T3G (CMS), par ex. Digikey MBRS540T3GOSCT-ND IC1 = MAX745 T1 = FDS6911 (SOIC12), par ex. Digikey FDS6911CT-ND Divers : L1 = 22 µH (JW-MILLER PM2110-220K-RC), p.ex. Digikey M8760-ND JP1,JP2 = cavalier avec embase SIL 2 contacts platine EPS070273-1 (Cf. www.elektor.fr) elektor - 7-8/2007 Le nombre d’éléments se configure à l’aide de cavaliers. Le tableau 1 présente les 4 possibilités. La position de ces cavaliers informe le circuit du nombre d’éléments qui sont connectés en série. Cette information est essentielle puisque d’elle dépend la tension maximale à appliquer à l’accumulateur. La tension maximale par élément d’accumulateur se règle sur l’entrée VADJ entre 3,95 V et 4,45 V. Les résistances R3 et R4 garantissent dans ce cas une tension de seuil de 4,25 V. Comme l’entrée VADJ ne fonctionne que sur une plage limitée, des résistances de 1% suffisent à régler la tension très précisément! Fabrication La platine double-face facilite considérablement la fabrication du montage. Tous les composants s’implantent sur la face supérieure du circuit imprimé. Le soudage de la bobine demandera peut-être une panne de fer plus chaude. Les fils de connexion sont assez massifs et exigent un peu de puissance pour monter à la bonne température. Après implantation des composants et contrôle, vous pouvez alimenter le montage sous une tension de 24 V maximum. Vérifiez que les cavaliers correspondent au nombre d’éléments avant d’installer vos accumulateurs LiPo ou Li-Ion à recharger. Pour un courant de charge de 1C, la recharge d’un élément vide prendra environ une heure et quart. (070273-I) Régulateur LDO avec démarrage en douceur ou suivi Dirk Gehrke tionnel. Les connexions adéquates sont représentées séparément. Les U IN U OUT 5 IC1 OUT 3 TPS74201 et TPS74401 peuvent IN 7 EN R1 Les composants décrits ci-après fournir un courant jusqu’à, respecU BIAS sont conçues pour répondre aux tivement, 1,5 A et 3 A, et disposent 6 BIAS besoins de processeurs, des DSP d’une broche SS permettant à l’utiTPS74201 TPS74401 1 2 (traitement de signal numérique) ou lisateur de définir le taux de rampe SS FB GND de FPGA (réseaux programmables) linéaire de la tension de sortie. R2 4 C1 C3 C4 C2 modernes qui requièrent des tenPour le régulateur TPS74301, la sions d’alimentation faibles mais à valeur de la résistance R4 (dans un 1µ 4µ7 1µ * intensité relativement élevée, avec diviseur de tension) permet à l’utien outre la capacité de produire une lisateur de sélectionner un séquenvoir texte * augmentation (ramp-up) de la tencement soit simultané soit proporU IN U OUT 5 sion fournie et son séquencement tionnel. La valeur de R4 est calculée IC1 OUT 3 IN 7 EN R1 selon une méthode prédéfinie. Ces d’après les équations de la fiche de U BIAS deux derniers besoins ne sont pas caractéristiques, avec l’hypothèse 6 BIAS facilement traités par l’utilisation de qu’un signal en rampe extérieur de R3 TPS74301 TRACK 1 2 composants discrets. La famille des 3,3 V est appliqué sur la broche 4k99 TRACK FB IN régulateurs TPS4x01 répond à ce TRACK IN. Lorsqu’on sélectionne GND R4 R2 4 C1 C3 C2 cahier des charges. la valeur de 10 kΩ pour R4, comme À l’instant d’écriture de ces lignes, la dans cet exemple, la sortie du régu1µ 4µ7 1µ * famille se compose de trois circuits, lateur TPS74301 suivra le signal en 070231 - 11 appelés respectivement TPS74201 rampe extérieur de quelques millivolts jusqu’à ce que le TPS74301 (1,5 A avec redémarrage à chaud), atteigne sa tension stabilisée. Ceci TPS74301 (1,5 A avec traçage) et Figure 1. Schémas des régulateurs TPS74201, TPS74301 s’appelle le séquencement simultané TPS74401 (3 A avec redémarrage et TPS74401 (cf. le texte pour les valeurs de R4 et C4). à chaud). Elle devrait s’agrandir (figure 2). La tension de sortie du prochainement. régulateur TPS74301 aura le même La figure 1 présente un schéma de de laquelle sera dérivée la tension de sortaux de croissance (dv/dt) que le signal en connexion simplifié pour les trois compotie Vou. Les trois régulateurs sont capables rampe extérieur mais un délai de redémarsants. Ces régulateurs fonctionnent avec de fournir des tensions de sortie descenrage à chaud différent. une de tension polarisation faible, VBIAS, et Lorsqu’on fait passer la valeur de la résisdant jusqu’à 0,8 V et le circuit présenté une tension d’alimentation en entrée, VIN, en boîtier QFN comprend aussi un circuit tance R4 à 1,78 kΩ, la tension de sortie du de surveillance intégré avec une sortie à drain ouvert qui passe à haute impédance quand la tension de sortie s’approche de la plage de régulation (fonction « alimentation bonne » ou PG = Power Good). Le régulateur TPS74301 peut fournir un courant de sortie jusqu’à 1,5 A et dispose d’une broche TRACK permettant à l’utilisateur d’entrer un signal de rampe 1a suiFigure 2. Suivi du régulateur LDO TPS74301 Figure 3. Traçage du TPS74301 avec vre par la tension de sortie, afin de réaliser avec démarrage simultané (R4 = 10kΩ). démarrage proportionnel Base de temps : 2 mV/div. un séquencement simultané ou propor(R4 = 1,78 kΩ). Base de temps : 2 mV/div. 4k99 2k49 4k99 2k49 (Texas Instruments Allemagne) 7-8/2007 - elektor Figure 4. Redémarrage en douceur des TPS74201 et TPS74401 avec délai de 1 ms (C4 = 1 nF). Base de temps : 2 mV/div. TPS74301 atteint sa tension stabilisée en même temps que le signal de suivi extérieur atteint sa tension maximum (3,3 V par exemple). Cela s’appelle le séquencement proportionnel (figure 3). Bien que le signal en rampe extérieur et le régulateur TPS74301 aient des taux de croissance différents, ils auront le même délai de redémarrage en douceur (soft-start). Pour les régulateurs TPS74201 et TPS74401, la valeur de la capacité du condensateur peut être utilisée pour programmer le redémarrage en douceur en rampe. Dans l’exemple ci-contre, les valeurs de 1 nF et 10 nF pour C4 ont été utilisées pour réaliser des rampes avec un temps de croissance de respectivement 1 ms et 10 ms (figure 4 et 5 respectivement). Sans condensateur attaché à cette broche, le délai de redémarrage en douceur sera de 500 µs par défaut. Ce délai est le même pour le TPS74301 lorsqu’on applique une tension supérieure à 800 mV à la broche TRACK. (070231-I) Bibliographie TPS74401 3.0A Ultra-Low Dropout Linear Regulator, Texas Instruments Literature # SBVS066C. TPS74301 1.5A Ultra-Low Dropout Linear Regulator with Programmable Sequencing, Littérature Texas Instruments # SBVS065C. Figure 5. Démarrage en douceur TPS74201 et TPS74401 avec délai de 10 ms (C4 = 10 nF). Base de temps : 2 mV/div. TPS74201 1.5A LDO with Programmable Soft-Start, Littérature Texas Instruments # SBVS064C TPS74x01EVM-118 User’s Guide, Texas Instruments Literature # SLVU143. Sequencing Power Supplies in Multiple Voltage Rail Environments by David Daniels, Dirk Gehrke et Mike Segal, Littérature Texas Instruments # SLUP228 ou http://focus.ti.com/lit/ ml/slup228/slup228.pdf Des accus LiPo en parallèle pour limiter le courant de compensation. La différence de potentiel est souvent si faible qu’un simple réglage du courant ne fonctionnera pas. Mais une simple résistance nous permettra aisément de limiter ce courant. Paul Goossens Les accumulateurs LiPo (Lithium Polymère) présentent assez bien d’avantages par rapport à ceux au CdNi ou NiMh. À côté d’un poids inférieur à capacité équivalente, les accumulateurs LiPo sont fabriqués sous une plus grande variété de formats. Les constructeurs profitent souvent de cette dernière caractéristique pour les téléphones mobiles, les lecteurs mp3 et ainsi de suite. Mais les accus LiPo ont aussi quelques inconvénients. L’un d’entre eux est qu’ils ne peuvent fournir qu’un courant moindre que leurs homologues CdNi ou NiMh. La plupart du temps, leur limite correspond à 10 C (10 x la capacité nominale). Les nouvelles versions atteignent déjà 15 C et même 30 C en continu, mais leur prix est aussi franchement plus élevé ! Cela veut dire que, d’une cellule normale d’accumulateur LiPo de 1 000 mAh, on peut tirer quelque 10 000 mA, soit 10 A. Momentanément, on peut doubler le courant, mais ce sera au détriment de l’espé- 10 À la main rance de vie des cellules LiPo ! Dans bien des cas, nous aimerions « sucer » un peu plus de courant de l’accumulateur. Eh bien, c’est possible en montant plusieurs éléments en parallèle. Limitation de courant Brancher des cellules en parallèle est un petit travail de soudure facile. Pas de quoi se salir, en tout cas. Mais avant de raccorder les éléments en parallèle, il nous faut veiller à ce qu’ils présentent exactement la même tension à leurs bornes. À la moindre différence entre les tensions de sources, un fort courant de compensation va se mettre à circuler. Ce courant doit décharger l’accumulateur à la tension la plus haute et charger l’autre jusqu’à les porter à l’équipotentialité. Il faut aussi que ce courant d’équilibrage reste inférieur au courant de charge maximum (généralement 1C). Avant de relier les cellules entre elles, il y a donc des mesures de précaution à pendre Réaliser l’opération convenablement demande de connaître le courant maximum de charge permis sur les deux accus. Ensuite, on mesure leurs tensions respectives, dont on déduit la tension de différence. On peut déjà souder ensemble les pôles négatifs, puis on soude momentanément une résistance entre les pôles positifs. Une résistance de quelle valeur ? Au moins égale à la tension différentielle divisée par le courant de charge autorisé. Maintenant, l’accumulateur le plus rempli va lentement transfuser une partie de sa charge à l’autre. Au fil du temps, la différence de tension s’amenuise et le courant de charge aussi. Si le processus dure trop longtemps à votre goût, rien n’empêche d’adapter de temps à autre la valeur de la résistance pour relever le débit. Quand la différence de tension est devenue si petite qu’une résistance de 10 mΩ suffirait, vous pouvez hardiment relier ensemble les deux pôles positifs. Vous disposer dorénavant d’un accumulateur LiPo plus puissant. (070274-I) elektor - 7-8/2007 Chargeur d’accus CdNi polyvalent C. Tavernier 7-8/2007 - elektor T1 TIP32A +VA LED1 R2 680 Ω * voir texte C1 10n R3 150 Ω * R1 D1 1N4002 V+ 5 K1 3 K2 4 K3 10 9 THI 8 FCHG PGM0 15 V+ DRV PGM1 PGM2 PGM3 BAT+ 14 +BATT 2 IC1 K4 1 BATT- 16 REF BATT VLIM REF MAX713 68k R4 BAT– 7 C5 C2 10µ 25V 1µ 25V R5 22k Sauf s’il est suffisamment frugal au point de se contenter de simples piles sans vous ruiner, ou bien s’il s’agit d’un robot écolo qui s’alimente grâce à des panneaux solaires, votre robot fait certainement appel à des batteries pour assurer son alimentation en énergie. Bien que de nombreux chargeurs soient aujourd’hui disponibles sur le marché, ils ne sont pas toujours adaptés aux besoins, en termes de types et de nombre de batteries qu’ils sont capables de traiter. En outre, certains d’entre eux sont assez peu respectueux des batteries qui leur sont confiées ce qui peut sérieusement abréger leur durée de vie. Cet article vous propose donc de réaliser votre chargeur sur mesure, grâce à un circuit déjà ancien mais toujours d’actualité : le MAX713 de Maxim. Et, comme tous les robots sont différents, nous n’allons pas vous proposer un schéma complètement terminé mais au contraire vous expliquer comment adapter certains de ses éléments aux caractéristiques des batteries que vous aurez à recharger. Le schéma de base d’utilisation du MAX713 vous est présenté sur la figure ci-jointe mais, comme vous pouvez le constater, un certain nombre d’éléments n’ont pas de valeurs indiquées. De plus, divers straps de configuration sont présents. Il faut savoir en effet que, par le biais de ces différents éléments, le MAX713 permet de charger de 1 à 16 cellules (une cellule est en fait un élément de base 1,2 volt), de définir le courant de charge, de définir le courant de maintien en fin de charge et enfin de sélectionner le mode de détection de fin de charge. Pour ce qui est de ce dernier, et afin d’être compatible de toutes les batteries que vous serez susceptibles d’utiliser sur votre robot, nous avons éliminé le mode par détection de température qui nécessite une sonde thermique (CTN ou équivalent) au sein de la batterie. Les résistances R4 et R5 ainsi que la liaison à demeure des entrées THI et TLO programment donc le MAX713 en mode détection de variation de tension en fin de charge. Nous allons donc voir maintenant comment déterminer les autres éléments qui restent à votre disposition afin que vous puissiez réaliser un chargeur parfaitement adapté à vos besoins. Notez dès à présent que, pour ce qui est des straps de configuration, vous pourrez établir les liaisons à demeure sur le circuit imprimé que vous dessinerez pour votre chargeur, ou bien les relier à des commutateurs à plusieurs positions pour réaliser un chargeur polyvalent. TEMP CC TLO GND 6 13 12 -BATT 11 C3 C4 10n 10µ 25V R6 * 070301 - 11 Il faut tout d’abord décider du courant de charge de vos batteries dont on appellera C la capacité exprimée en ampère.heure et Ifast ce courant. Il se calcule grâce à la relation : Ifast = C/T où T est le temps de charge désiré exprimé en heures. Attention ! Le MAX713 ne gère pas les temps supérieurs à 4 heures. En outre, veillez à ne pas choisir un courant Ifast supérieur à 4.C car c’est actuellement le courant maximum admis lors d’une charge rapide par des batteries CdNi et NiMH. Si vous pouvez choisir un courant plus faible, cela ne sera que mieux et prolongera leur durée de vie. Programmez ce temps en câblant les pattes PGM2 et PGM3 du MAX713 conformément au tableau 1. Choisissez ensuite le nombre de cellules à charger simultanément. Pour des batteries monoblocs, ce nombre s’obtient en divisant la tension nominale de la batterie par 1,2 volt. Ainsi, une batterie de 9,6 volts comporte 8 cellules. Si ce nombre est égal ou supérieur à 11, le schéma proposé n’est pas utilisable tel quel et il est alors préférable de charger vos batteries en deux fois. Programmez ce nombre en câblant les pattes PGM0 et PGM1 du MAX713 conformément au tableau 2. Choisissez alors l’alimentation continue non stabilisée de notre chargeur (VA sur la figure) de façon à ce qu’elle soit supérieure d’au moins 1,5 volt à la tension maximum de la batterie à charger. Si votre batterie comporte 4 cellules ou moins, cette règle n’est plus valable car l’alimentation du MAX713 ne doit pas être inférieure à 6 volts. Déterminez alors la puissance maximum dissipée par T1 en appliquant la relation suivante : PD = (VA – VBAT–) . Ifast où VBAT– est la tension minimum de la batterie à recharger. Choisissez T1 en conséquence et munissez-le, si nécessaire, d’un radiateur approprié. Déterminez alors la valeur de la résistance R1 pour que le courant absorbé par le MAX713 soit compris entre 5 et 20 mA en utilisant la relation : R1 = (VA – 5) / I où I est compris entre 5 et 20 mA. Enfin, déterminez la valeur de la résistance R6 en utilisant la relation : R6 = 0,25/Ifast et sa puissance en utilisant la relation PR6 = 0,50 . I fast (la théorie indique en fait 0,25 . Ifast mais il est souhaitable de prendre un facteur de sécurité de 2, d’où cette relation). Votre chargeur est alors opérationnel et son utilisation est fort simple mais, en raison des automates contenus dans le MAX713, il est impératif de réaliser les connexions au niveau de PGM0 à PGM3 11 avant de mettre le montage sous tension sinon elles ne peuvent pas être prises en compte correctement. Cela ne pose pas de problème pour un montage câblé à demeure mais, si votre chargeur comporte des commutateurs de configuration à ce niveau, il faut nécessairement faire une séquence d’arrêt suivie d’une remise sous tension pour valider toute modification de configuration réalisée par manoeuvre de ces commutateurs. La LED s’allume lorsque le chargeur est en mode charge rapide (courant Ifast déterminé ci-dessus). Elle s’éteint lorsque la charge rapide est terminée et que le chargeur passe en mode charge d’entretien. Le courant généré dans ce mode est suffisamment faible pour que la batterie puisse être laissée à demeure connectée au chargeur si nécessaire. Afin que notre exposé soit sans ambiguïté, voici à titre d’exemple le calcul d’un tel chargeur pour un pack de 4 batteries NiMH de 1,2 volt et de 1 800 mA.h de capacité que nous souhaitons charger en 2 heures. • Calcul de Ifast : Ifast = C/T soit 1,8/2 soit encore 0,9 A ou 900 mA. • Connexion de PGM2 et PGM3 : PGM2 reliée à BAT– et PGM3 reliée à REF puisque nous souhaitons un temps de charge de 2 heures soit 120 minutes (nous aurons en fait 132 minutes au maximum). • Connexion de PGM0 et PGM1 : PGM0 à V+ et PGM1 à BAT– puisque notre batterie comporte 4 cellules. • Détermination de VA : VA = 6,3 volts au minimum. On choisira 9 volts afin de s’affranchir des variations éventuelles du secteur. • Puissance dissipée par T1 : P D = (9 – 4*) . 0,9 soit 4,5 watts. On choisira par exemple un TIP32A qui nous donnera une marge de sécurité excellente (PDmax = 40 watts). * nous avons estimée que la tension des batteries complètement déchargées était de 4 volts. • Calcul de R1 : R1 = (9 – 5)/0,01** soit 400 ohms. On prendra la valeur normalisée la plus proche soit 390 ohms. ** nous avons choisi un courant de 10 mA. • Calcul de R6 : R6 = 0,25/0,9 soit 0,27 ohm. • Calcul de la puissance de R6 : PR6 = 0,5 . 0,9 = 0,45 watt. Un modèle ½ watt convient donc bien. Comme vous pouvez le constater, il nous a fallu moins de cinq minutes pour réaliser un chargeur parfaitement adapté à nos batteries. À vous de jouer ... (070301-I) Liens Internet Fiche de caractéristiques du MAX713 www.maxim-ic.com/quick_view2. cfm/qv_pk/1666 Tableau 2. Programmation du nombre de cellules grâce à PGM0 et PGM1. Nombre de cellules Tableau 1. Programmation du temps de charge grâce à PGM2 et PGM3. Temps de charge maximum (mn) PGM3 PGM2 22 V+ REF 33 V+ BAT– 45 Non connecté REF 66 Non connecté BAT– 90 REF REF 132 REF BAT– 180 BAT– REF 264 BAT– BAT– PGM1 PGM0 1 V+ V+ 2 Non connecté V+ 3 REF V+ 4 BAT– V+ 5 V+ Non connecté 6 Non connecté Non connecté 7 REF Non connecté 8 BAT– Non connecté 9 V+ REF 10 Non connecté REF 11 REF REF 12 BAT– REF 13 V+ BAT– 14 Non connecté BAT– 15 REF BAT– 16 BAT– BAT– Chargeur rapide d’accus NiMH Antoine Authier Karl Walraven La capacité des accumulateurs NiMH (Nickel Métal Hydrure) de format AA les plus récents peut atteindre 2900 mAh. Avec un chargeur conventionnel de première génération (qui fournissait un courant de charge de 125 mA) le temps de charge serait donc extrêmement long. Le chargeur que nous vous proposons devrait accélérer ce processus de plus en plus courant qu’est la recharge de ce type d’accus (respect de l’environnement oblige !). 12 Conçu autour du MAX712 de Maxim (Integrated Products pour être complet, repris, pour la petite histoire, par Dallas Semiconductor) et fonctionnant en mode commuté, il peut fournir un courant de charge rapide maximum de Icharge = 250 mV/R1, soit pas moins de un ampère si R1 vaut 0,25 ohm. Dans ces conditions, les accumulateurs seront donc chargés en un peu plus de deux heures. Le circuit de Maxim intègre non seulement toute l’intelligence, mais aussi un convertisseur analogique numérique (CAN), un détecteur de fin de charge, un minuteur et un module de surveillance de la température. Les 4 broches de configuration qu’il comporte en permettent un paramétrage au goût de l’utilisateur. Ces dernières servent à paramétrer le nombre d’éléments à charger, la durée maximale de charge ainsi que la méthode de détection de fin de charge (point d’inflexion ou pente décroissante). On se référera à la fiche de caractéristiques (datasheet) (et à l’article précédent) pour en savoir plus. Le MAX712 est destiné aux accumulateurs elektor - 7-8/2007 NiMH, fin de charge au point d’inflexion de la courbe de tension ∂V/∂t = 0. La tension maximale d’alimentation est 15 V. La tension d’alimentation doit être supérieure de 2 V au minimum à la tension maximale de charge afin de compenser les fluctuations de tension lors de la charge. Ainsi, pour une tension maximale de charge de 1,6 V par élément, une tension d’alimentation de 15 V permet de charger 8 accumulateurs en série. Une tension de 12 V (fournie par, e.g., une batterie de voiture) permettra de (re)charger 6 éléments. L’alimentation du montage doit pouvoir délivrer 1 A. Il est important de veiller à ce cahier des charges. S’il n’est pas satisfait le circuit intégré ne fonctionnera pas correctement, et risque de ne pas détecter correctement la fin de charge rapide (avec les risques de dommage que cela induit pour les accus connectés). Paramétrage du circuit: V+ PGM2 REF PGM2 BAT- Condensateurs : C1 = 220 pF C2 = 100 nF C3,C4,C6,C7 = 10 µF/63 V radial C5 = 1 µF/25 V radial V+ PGM3 REF PGM3 BAT- BF245C C5 THI PGM0 PGM1 PGM2 PGM3 3 PGM0 4 PGM1 9 PGM2 10 PGM3 REF 16 1 C2 K4 100n REF VLIM 1u 25V 15 5 K2 R2 68k 4k7 BC547B D1 V+ IC1 MAX712 7 TEMP R3 TLO R4 BATCC T4 PBYR745 D2 BC557B 2 12 D3 PBYR745 8 FCHG 14 DRV BAT+ L1 T3 220uH GND K3 T2 1k V+ PGM1 REF PGM1 BAT- BC547B 10u 63V 10u 63V V+ PGM0 REF PGM0 BAT- R5 T1 C6 K5 C3 C4 +BATT. 10u 63V 10u 63V -BATT. 11 C1 220p R1 0R22 R1 = 0Ω22/5 W R2 = 68 kΩ R3 = 22 kΩ R4 = 1 kΩ R5 = 4kΩ7 C7 K1 13 Résistances : T5 IRF9520 3 1 2 6 Liste des composants K6 +8V...+15V 1A3 22k • Les broches PRGM0/PRGM1 permettent de régler le nombre d’éléments à charger. Remarque concernant l’utilisation d’un porte-pile(s) lors de la (re)charge : chacun des contacts peut représenter une résistance série de 1 Ω ce qui se traduit par une différence de potentiel de 1 V sous 1 A. Dans cette configuration la tension d’ali- BAT070213 - 11 GND Selfs : L1 = 220 µH Semi-conducteurs : D1 = LED D2,D3 = PBYR745 T1 = BF245 B ou C T2,T3 = BC547B T4 = BC557B T5 = IRF9520 IC1 = MAX712CPE Divers : K1 à K4 = embase autosécable à 1 rangée de 5 contacts K5 = bornier à 2 contacts au pas de 5 mm K6 = jack d’alimentation mâle encartable 7-8/2007 - elektor BATPGMx REF PGMx V+ 13 mentation ne sera peut-être pas suffisante, il est donc préférable de vérifier ce détail avant toute réalisation. • Pour des raisons de sécurité il est préférable de bien configurer la durée maximale de charge avec les broches PRGM2/PRGM3. • Sur ce montage, le dispositif de contrôle de la température des accumulateurs est désactivé. À la fin de la charge rapide, le circuit alimentera les accumulateurs avec un courant d’entretien (goutte à goutte). Intéressons-nous à l’aspect électronique du circuit. T1 est utilisé en source de courant et fournit les 8 mA nécessaires à l’alimentation du MAX712. D3 évite que l’accumulateur ne se décharge dans le circuit au cas où le montage ne serait pas alimenté. Nous avons réalisé une petite platine pour ce montage. L’implantation des composants n’appelle pas de remarque particulière. Il suffira de ne pas publier de mettre en place les 2 ponts de câblage. La self L1 est une self torique de bon format classique. Les embases K1 à K4 permettent de fixer les différents paramètres de charge. La LED D1 s’allume lorsque le circuit est en charge rapide. T5 pourra être monté sur un dissipateur thermique si nécessaire. Les caractéristiques de la self L1 ne sont pas critiques, une self de déparasitage de 100 µH/5 A classique fera l’affaire. De même les diodes D2, D3 et le transistor MOSFET T5 ne sont pas critiques dans cette application. Vous pouvez utiliser n’importe quelle diode Schottky qui supporte 3 ampères, et mettre à contribution n’importe quel MOSFET avec une résistance de drain plus faible. Comme le principe de calcul est le même que dans le cas du chargeur pour NiCd à MAX713 de l’article précédent, nous vous renvoyons à l’exemple de calcul proposé à cet endroit. Les tableaux à utiliser pour le paramétrage de ce circuit sont les mêmes que ceux donnés dans le dit article. (070213-I) Régulateur à découpage à entrée large 3 A réglable Luc Lemmens Le circuit PTN78060 fait partie d’une série de régulateurs mixtes à découpage intégrés (ISR, Integrated Switching Regulators) à haut rendement de notre bon vieux Texas Instrument (TI). Le composant double face, proposé sans boîtier, présente d’excellentes caractéristiques thermiques et est conforme RoHS. Les composants de la famille PTN78060 fonctionnent avec une plage remarquablement large de tensions d’entrée. Composant Ventrée Vsortie PTN78060Wa(x) 7 à 36 V 2.5 à 12,6 V PTN78060HA(x) 15 à 36 V 11.85 à 22,0 V PTN78060AA(x) 9 à 29 V –15 à –3V 14 GND 2 VI GND 7 VO 6 PTN78060 UI VO VO INH ADJ SNS 3 INH 4 UO 5 C1 UO Sense R SET C2 0W05 1% 100µ RL 070115 - 11 Composant PTN780x0W Notez que la version –A fournit une tension de sortie négative. Les circuits ont un rendement très élevé lors de l’abaissement de tension (stepdown) pour des charges allant jusqu’à 3 A. Les circuits PTN conviennent à une grande variété d’applications universelles opérant à partir d’alimentations CC de 12 V, 24 V ou de 28 V parfaitement régulés, et sont donc l’idéal pour faire fonctionner des unités électroniques à basse tension à partir d’une batterie à très haute tension de 24 V 1 PTN780x0H Vsor (requise) (V) RSET (standard value) (kΩ) Vsor (réelle) (V) Plage Vent (V) 2,5 ouvert 2,5 7 to 25 3,3 78,7 3,306 7 to 33 5,0 21,0 4,996 7 to 36 12,0 0,732 12,002 14,5 to 36 12,0 383 12,000 15 to 36 15,0 15,0 14,994 18 to 36 18,0 4,42 18,023 21 to 36 22,0 95,3 21,998 26 to 36 récupérée sur une chaise roulante électrique et intégrée dans un robot. On peut donner à la tension de sortie VO n’importe quelle valeur sur une large plage de réglage en utilisant une résistance externe unique R SET, répondant à l’équation : RSET = 54,9 kΩ×(1,25V/VO –VMIN) – Rp Si la broche 4 est laissée en l’air, la tension de sortie prendra par défaut la valeur de elektor - 7-8/2007 tension minimum. En se limitant au deux régulateurs à tension de sortie positive, pour la version –W, VMIN et Rp seront respectivement de 2,5 V et 6,49 kΩ ; pour la version H, 11,824 V et 6,65 kΩ. Pour que la sortie reste stabilisée, la tension d’entrée doit dépasser, d’une tension différentielle minimum, la valeur de la tension souhaitée en sortie. Une autre considération concerne la plage de modulation de largeur d’impulsion (PWM, Pulse-Width Modulation) du circuit de commande interne du régulateur. Pour un fonctionnement stable, le rapport cyclique de service ne devrait pas être inférieur à un certain pourcentage minimum. Ceci définit le ratio maximum conseillé entre les grandeurs des tensions d’entrée et de sortie du régulateur. Pour obtenir des performances satisfaisantes, la plage de tensions d’entrée opérationnelles du circuit PTN78060x doit satisfaire les exigences suivantes : 1. Pour les composants PTN78060W fournissant des tensions de sortie inférieures à 10 V, la tension minimum d’entrée est la plus grande de (VO+2 V) ou de 7 V. 2. Pour les PTN78060W fournissant des tensions de sortie égales ou supérieures à 10 V, la tension d’entrée minimum est de (VO+2,5 V). 3. La tension d’entrée maximum pour le PTN78060W est la valeur la plus faible de 10VO et de 36 V. augmente sa température. Si l’augmentation est trop forte, la protection thermique commence par couper la tension de sortie de temps en temps. 4. Pour des tensions de sor tie du PTN78060H inférieures à 19 V, la tension d’entrée minimum est la plus grande de (VO+3 V) et de 15 V. Le dispositif d’inhibition peut être utilisé partout où il s’avère nécessaire de couper la tension de sortie. Le module d’alimentation coupe la tension de sortie lorsque la commande d’inhibition (broche 3) est reliée à la masse, par exemple par un commutateur à transistor à effet de champ. 5. Pour des tensions de sor tie du PTN78060H supérieures ou égales à 19 V, la tension d’entrée minimum est de (VO+4 V). Enfin, une attention suivie doit être portée à la qualité des condensateurs pris aux bornes de VI et VO car ce sont eux qui déterminent la stabilité du régulateur et ses performances globales et ce jusqu’à un degré certain. Pour résumer l’information exhaustive donnée sur la sélection des condensateurs dans les fiches de caractéristiques, la valeur minimale à donner à C1 est de 2,2 µF (!) sous forme de condensateurs céramique pour l’unité –W et de 14,1 µF (!!) pour l’unité –H. Les condensateurs au tantale sont déconseillés. À titre d’exemple, le tableau donne la plage de tensions d’entrée opérationnelles pour quelques tensions de bus de sortie classiques. Les modules sont protégés contre les anomalies de charge avec une fonction de limite de courant continu. Si une anomalie de charge est constatée, le courant de sortie augmente jusqu’au seuil limite. Une tentative de tirer un courant excédant ce seuil forcera le module à diminuer progressivement sa tension de sortie. La fourniture du courant à la charge se poursuit jusqu’à ce que l’anomalie disparaisse. Après la disparition du problème, la tension de sortie est rapidement rétablie. Lorsqu’il limite le courant de sortie, le régulateur supporte une dissipation de chaleur supérieure, qui De même, à la sortie du régulateur, le condensateur C2 ne devrait pas avoir une valeur inférieure à 100 µF, capacité obtenue à l’aide de condensateurs électrolytiques à ESR (résistance série) faible. (070115-I) Constance de tension Alexander Wiedekind-Klein 7-8/2007 - elektor TR1 CTX50-4 1 C1 C4 47µ 16V 100n STI 4 1 FB = 1V25 P S 2 3 D1 C6 MBRA130LT3 Uout = 12V 750mA 2 3 10µ 50V R5 5 6 7 FB SYNC/SHDN T1 EXT 8 4 1 4 1 LDO CS+ MAX668 REF FREQ PGND C2 C3 1µ 220n 3 7 R2 FDS6680 IC1 2 5k6 10 8 3k0 5 3 6 2 R1 R4 C5 560p R3 1k 9 0Ω05 Le principe du montage est celui d’un régulateur à découpage compact qui, lorsque les tensions d’entrée fluctuent entre 13 et 25 V, délivre une tension de sortie stable et continue de 12 V sur une charge consommant 750 mA. La réalisation tripolaire lui permet de remplacer facilement un régulateur de tension classique. Le régulateur à découpage mixte demande un FET de puissance CMS pour T2 et, pour un bon Uin = 13V ...25V 100k L’alimentation d’un robot doté de moteurs relativement puissants, malgré des accumulateurs à faible résistance intérieure, peut se retrouver parasitée par des impulsions ou flancher lorsque la charge est élevée. Et alors? Un stabilisateur de tension peut fort bien y remédier. Pas toujours, les circuits intégrés à trois broches ne sont malheureusement pas armés pour faire face à toutes les situations. Dans certains cas, la solution ne peut venir que d’un stabilisateur spécial. C8 C9 47µ 16V 47µ 16V 070280 - 11 15 rendement (environ 90%), une diode de commutation Schottky (D1). Le composant le plus spécial est un transformateur miniature, typique des régulateurs à découpage. Nous avons choisi un CTX504 de Coiltronics. La limitation d’intensité est définie par R4. La tension de sortie est déterminée par le diviseur (R2 + R5)/R3. Elle est réglée de telle façon que la chute de tension sur R3 soit de 1,25 V (= tension de retour sur la broche 5 d’IC1). On obtiendra d’autres tensions de sortie avec d’autres diviseurs de tension. On peut bien sûr réduire l’intervalle de variation des tensions d’entrée si l’on souhaite des tensions de sorties inférieures. Les fichiers Gerber de la platine échantillon sont disponibles gratuitement sur le site www.elektor.fr. Les composants CMS ont les formes suivantes : R1 à R3, R5, C3 à C5 = 0603, C2 = 0805, IC1 = SSOP12, T1 = SO8. Les condensateurs CMS sont céramiques, des condensateurs électrolytiques à faible résistance série (ESR) sont indispensables pour C1, C8 et C9 ; R4 est une résistance CMS de 50 mΩ/1 W. (070280-I) zBot: alimentation piles/solaire Jens Altenburg POWER D7 Solar Panel 1N4001 JP6 POWER ON T9 IC5 RFP30P06 7805 +5V R30 10k L’un des problèmes les plus importants des plates-formes robotiques mobiles est celui de l’alimentation. À part quelques systèmes spéciaux, les piles et accumulateurs T10 R31 C13 C14 10µ 25V 10µ 25V 47k BC337 GND R26 0Ω1 F1 R24 0Ω1 10A T 82k BATT R27 2k R22 2k R29 7 VCC D8 V BATT 1N5408 16 1 R28 18k sont les sources d’énergie électrique les plus courantes dans les robots. Le système d’alimentation du zBot [1] est composé de deux parties, l’accumulateur principal et les piles auxiliaires. La source d’énergie principale est une batterie d’accumulateurs CadNi ou NiMH. Sa taille a été adaptée à celle du porte-accumulateurs du châssis Tamiya (six éléments de 1,2 V 1 400 mAh au format C). Cette source d’énergie est mise à contribution pour l’alimentation des moteurs CC et des servos. Le système auxiliaire, deux piles alcalines au format AAA, n’alimente que le microcontrôleur. La troisième source d’énergie (en option) 2 RG1 N.C. SIGN MAX472 SHDN OUT GND C12 RG2 IC6 4 6 SIGN 5 8 V CHARGE R23 51k 3 100n 070171 - 11 est le panneau solaire. Il n’est pas vraiment nécessaire, mais il contribue à allonger l’autonomie du robot. Le circuit principal d’alimentation du zBot offre une caractéristique spéciale : le circuit de régulation de charge monté autour d’un MAX472. Pour un fonctionnement efficace, nous devons connaître la capacité exacte de l’accumulateur. En imagi- nant la courbe de décharge, nous savons que la tension est pratiquement stable tout au long du temps de décharge et qu’elle tombe brutalement quand l’accumulateur est au bout de sa capacité. Ce temps est très court, si bien que le robot pourrait être perdu. Une simple surveillance de tension ne nous donne pas l’information dont nous avons elektor - 7-8/2007 besoin. Le seul moyen d’obtenir des valeurs exactes est de surveiller la décharge. Le MAX472 délivre deux valeurs : l’intensité du courant à travers R24//R26 sous la forme d’une tension proportionnelle sur la broche 8, et le sens de ce courant (SIGN). Les deux valeurs permettent de calculer la charge (panneau solaire) ou la décharge de la batterie d’accumulateurs. L’alimentation auxiliaire est représentée dans le module CPU. Les deux piles alcalines alimentent seulement la CPU, le modem radio et le système de navigation (compas). La raison de cette séparation des alimentations est simple. À l’aide du système auxiliaire, le zBOT communique sans fil avec l’opérateur. Ainsi la source d’alimen- tation indépendante renforce la sécurité du système. (070171-1) [1] Le document complet intitulé Zbot – the Robot Experimental Platform (en anglais) est disponible au téléchargement gratuit sur le site elektor. Le fichier s’appelle EPS070172-11.zip. 555 en alimentation à découpage Martijn Geel +12V R2 L1 47k 33µH D1 18k 7 6 2 C7 THR OUT BC557 BUZ11 C1 C2 5 T3 C3 1k TR CV R7 R5 3 NE555 C6 470µ T2 T1 IC1 1 220n R = 0,6 / I R DIS 220n 470µ R4 D2 ≥14V C5 C4 47n 470µ R3 BC547 220p 470 Ω R1 +U OUT R6 4 1k 8 4k7 Cette alimentation à découpage est construite autour d’une puce de temporisateur 555 et fournit au maximum 40 V à partir d’une source de 12 V. À l’aide d’une zener, on règle très aisément la tension de sortie qui doit être plus grande que 12 V (il y a toujours au moins 12 V à la sortie de ce circuit). Le mode de travail du NE555 diffère ici de la manière traditionnelle. En configuration normale, la sortie de l’oscillateur intégré reste plus longtemps an niveau haut que bas. Dans cet arrangement-ci, il est possible de maintenir la sortie haute plus brièvement que basse. Le NE555 commute le FET T1 en tout ou rien. Quand T1 conduit, L1 emmagasine de l’énergie. Quand T1 cesse de conduire, cette énergie est transmise par la diode Schottky D1 à C1 et C2, si bien que la tension sur ces condensateurs commence à monter. La tension est limitée par la diode zener D2. Si la tension dépasse celle de zener, T3 commence à conduire. De ce fait, la tension sur la broche 5 du NE555 descend avec pour conséquence que la broche 3 est au niveau haut moins longtemps et passe plus de temps au niveau bas. T1 conduira alors moins longtemps et il y aura moins d’énergie stockée dans L1, ce qui stabilisera la tension de sortie. Le limiteur de courant se compose de R6, R5 et T2. Quand la chute de tension sur R6 070023 - 11 dépasse 0,6 V, T2 commence à conduire et entraîne à son tour T3, d’où une baisse de la tension qui limite le courant. C5 et R7 assurent un démarrage en douceur. R1 peut se situer entre 22 KΩ pour 15 V et 10 kΩ pour 40 V en sortie. Par précaution, ne dépassez pas la tension maximale de 40 V pour la diode zener. T1 et T2 supportent au maximum 50 V. Le FET n’est pas critique, vous en avez peutêtre encore dans vos stocks personnels qui feront l’affaire. Si la bobine chauffe, il se peut que le noyau soit trop petit ou le fil trop fin. La diode Schottky est le seul composant réellement critique. N’utilisez pas de diode ordinaire, elle chaufferait exagérément. On peut encore en trouver dans les anciennes alimentations pour PC (au besoin, mesurez-la, elle doit afficher 0,2 V à l’état conducteur). L’alimentation présentée ici peut délivrer environ 200 W. La tension d’alimentation à l’entrée peut varier entre 7 et 15 V. Souvenez-vous que le NE555 ne peut tolérer que 15 V au maximum. Cette alimentation n’est pas à l’épreuve des courts-circuits ! Il est recommandé d’insérer un fusible lent dans la ligne du 12 V. (070023-I) Réducteur de tension MLI Stefan Brandstetter Ce circuit a été développé pour permettre d’utiliser la remorque d’un véhicule auto- 7-8/2007 - elektor mobile pour réseau de bord 12 V comme remorque de poids lourd (24 V). Le circuit a été adapté à plusieurs reprises pour des clignotants gauche/droite, des feux d’ar- rêt, l’éclairage de la plaque d’immatriculation et le phare de recul. Il fonctionne sans problèmes depuis des années. Grâce à la modulation d’impulsions en largeur 17 24V DC C4 R5 1k5 220µ 63V D2 R1 1k P1 R4 2x 1N4148 50k 14 20k IC1 D3 R2 1k D1 C1 1 2 16V IC1 = 4093 7 8 IC1.A & 3 10µ 25V 5 6 9 IC1.B & STP20NE06FP IC1.C & 10 T2 D5 4 12 13 IC1.D & D4 75V 11 16V C3 10n 50V 3µ3 25V T1 R7 BC547B R3 0Ω047 C2 47 Ω R6 4k7 (MLI, PWM pour Pulse Width Modulation en anglais), ce circuit compact ne dissipe qu’une très faible puissance. Il ne nécessite pas non plus de courant de repos. IC1.A, C2, R1, R2 et P1 forment un générateur peu complexe d’impulsions modulées en largeur. Normalement (T1 bloqué), l’élément RC R4/C3 active IC1.B, de sorte que le signal rectangulaire peut commander le commutateur FET T2. La résistance shunt R3 permet de détecter le courant de sortie. Si le courant de sortie admis est dépassé, T1 commute et court-circuite C3. IC1.B ne peut plus envoyer le signal rectangulaire au transistor de commutation. Le courant de sortie devient nul. T1 est bloqué et C3 peut de nouveau être rechargé par R4. Le signal PWM parvient de nouveau à T2 dès que le seuil de commutation (Ub/2) de IC1. B est dépassé. On dispose ainsi, même en cas de court-circuit permanent, d’un certain comportement impulsionnel. La tension de bord de 24 V est un peu élevée pour le circuit intégré CMOS 4093 servant de trigger de Schmitt. Elle est réduite à la valeur sûre de 16 V par R5, D1 et C1. D4 et D5 protègent T2 des pointes de tension causées presque inévitablement dans le circuit par l’inductance des lignes. T2 est un FET standard canal N dont la tension de claquage dépasse 100 V. Le dimensionnement du circuit indiqué ici s’applique à des lampes 12 V ne consommant pas plus de 60 W. R3 (47 mΩ) limite 4W 070127 - 11 typ. 12V le courant à environ 12 A. Les lampes, dont la résistance ohmique à froid est faible, ne causeront alors aucun problème lors de l’allumage. P1 permet d’ajuster le rapport impulsion-pause à environ 1:3 (durée de commutation 25%). Le circuit peut être redimensionné pour d’autres plages de courant. Il peut aussi être converti en un dispositif simple et à faibles pertes permettant de modifier la vitesse de rotation ou l’éclairage. (070127-I) Des accus en double pour augmenter la sécurité de fonctionnement Paul Goossens Alimenter les circuits sur accumulateurs est une méthode éprouvée pour fournir de l’énergie à des appareils indépendants du secteur. Le gros inconvénient, c’est que ces batteries semblent se retrouver à plat au moment le plus incongru. Et vous voilà surpris par cet appareil qui brusquement vous refuse tout service. Il y a des cas où ce n’est rien qu’un peu ennuyeux, il en est d’autres où les conséquences risquent de se révéler catastrophiques. Songeons à un modèle réduit d’avion en vol dont le récepteur n’entend plus rien parce que la batterie n’a plus de « jus » ! Une aventure tout sauf agréable, vous pouvez nous faire confiance ! 18 Solution La solution est en réalité très simple : mettez-en deux ! Au moment où l’un des accus est vide, l’autre prend le relais et fournit le courant nécessaire. Cela doit évidemment se produire automa- elektor - 7-8/2007 Vbat D1 T2B LM809M3-4.38 R3 IC2 3 R2 100k D3 BAT54 FDV301N ENABLE_A 1M Vbat 3 IC1D 11 & 13 12 IC1B 4 & IC1A 5 6 3 & 1 2 Aok Vcc 2 RST GND R8 10k 1 T4 FDV301N 100n K2 T3 * C1 6 5 2 D5 100k 1k IN BAT A 8 7 T1A 1 R1 R10 4 BAT54 GND C3 100n GND K1 GND D2 100n POWER OUT 4 10 T5 T6 FDV301N R6 100k ENABLE_B IC1C 10 & R9 10k IC3A 3 & IC3B 1 2 4 GND tiquement, il faut donc un circuit approprié qui s’en occupe. Ce projet a été pensé en fonction de circuits & GND 5 6 GND & 3 13 12 GND Vcc 2 RST Bok GND GND Vbat 8 9 11 LM809M3-4.38 BAT54 C4 100n GND IC3D 8 9 D4 FDV301N R7 & IC4 1 1 IC3C 1M K3 T2A R5 * C2 8 7 Vbat S1 ON T1, T2 = IRF7329 IC1, IC3 = 4093 C5 10k IN BAT B D6 100k 1k R11 6 5 T1B 3 2 BAT54 R4 GND table (composée de IC1.A et IC3.D) qui détermine lequel des deux accus doit être en service. 100n IC1E IC3E 14 C7 7 7 100n 14 GND 070343 - 11 truc, c’est que quand un FET est conducteur, le canal est passant dans les deux sens. Du coup, la chute de tension sur la Au moment où les deux groupes d’accumulateurs sont déchargés, ils vont alimenter le circuit ensemble. C’est que… mieux vaut un peu d’alimentation que pas du tout ! Les composants D3, R8 et C3 provoquent un retard à la commutation, ce qui fait que l’enclenchement de l’autre accumulateur ne se produit qu’après un certain délai. Il n’est pas souhaitable lors du changement de source que les deux accus alimentent le circuit simultanément. La différence de potentiel entre les deux branches conduirait à un courant de compensation beaucoup trop élevé. Commutateur (comme le récepteur d’un modèle réduit) qui fonctionnent sur 4 éléments au CdNi. Le circuit est très petit et, avec des CMS, sa platine peut être tellement petite qu’elle pourra se glisser dans des appareils existants. Simple Pas de complication de fonctionnement. IC2 mesure la tension aux bornes de l’accumulateur A. Dès que celle-ci tombe sous 4,38 V, l’entrée RESET passe du niveau haut au niveau bas. IC4 fait pareil, mais pour l’accumulateur B. Les deux signaux vont à une bascule bis- 7-8/2007 - elektor Pour la commutation, nous préférons un FET à un transistor bipolaire. Cela permet déjà d’épargner le courant de base du bipolaire. Un inconvénient du MOS-FET est qu’il a toujours une diode intrinsèque. La diode constitue un embarras dans ce circuit. Un des accus va en fait charger l’autre à travers cette diode. On pourrait circonvenir la difficulté en branchant en série une diode qui l’en empêcherait. Malheureusement, les diodes provoquent toujours une chute de tension. Même une Schottky abaisserait la tension de 0,3 V environ. Pour se sortir d’embarras, utilisons un second MOSFET polarisé en inverse. Le Liste des composants Attention : tous les condensateurs et résistances sont des CMS du type 0805 ! Résistances : R1,R2,R5,R6 = 100 kΩ R3,R7 = 1 MΩ R4,R8,R9 = 10 kΩ R10,R11 = 1 kΩ Condensateurs : C1 à C6 = 100 nF Semi-conducteurs : D1 à D4 = BAT54 (SOT-23) D5,D6 = LED rood (SMD 1206) IC1,IC3 = 4093 (SOIC-14) IC2,IC4 = LM809M3-4.38 (SOT-23) T1,T2 = IRF7329 (SOIC-8) T3 à T6 = FDV301N (SOT-23) Divers : câbles de connexion platine EPS070343-1 (cf. www.elektor.fr) 19 diode interne est éliminée ! Les LED D6 et D5 indiquent quel accumulateur est en service. chez sur les deux entrées d’alimentation (K2 et K3) une batterie de 4 cellules CdNi. La sortie K1 sera alors connectée au circuit que vous avez à alimenter. est en usage. Si jamais les deux batteries étaient vides, vous le remarqueriez à ce que les deux LED seraient allumées en même temps. (070343-I) Utilisation L’interrupteur S1 enclenche l’alimentation. Les LED vous diront quelle batterie Le circuit est d’un emploi très simple. Bran- Mini-inverseur Alexander Wiedekind-Klein R1 C4 0Ω Et quand vous avez besoin d’une tension négative, comment faites-vous? Ce n’est pas si facile lorsque la charge, l’encombrement et la consommation sont à limiter au maximum. Le problème peut également se poser à de petits systèmes autonomes comme les robots. Lorsqu’il a besoin de petites tensions négatives de l’ordre de –5 V alors qu’il ne dispose que de +5 V, il est fréquent que l’électronicien fasse appel, avec raison, à Maxim. Le MAX232 est sans doute le plus célèbre des circuits intégrés de ce fabricant. Il s’agit d’un adaptateur de niveau « sans fer » pour interfaces sérielles avec pompes de charge intégrées. Il n’est pas 100µ 16V le seul de son genre. Le MAX660 fonctionne sur le même principe mais offre une tension de sortie plus stable et un meilleur rendement. Il peut fournir l’« image spéculaire » de n’importe quelle tension d’entrée comprise entre 1,5 V et 5,5 V. Pour une tension 100n 8 1 2 C2 LV FC IC1 OSC C+ 6 7 MAX660 4 C– OUT 5 1 3 2 C1 C3 100n 4µ7 25V 3 C5 L1 10µH 100µ 16V de 5 V, vous pouvez compter sur –4,7 V (valeur moyenne) pour une charge de 100 mA. Le rendement sera de l’ordre de 96% pour 10 mA et encore de 88% pour 100 mA. A vide, le circuit intégré ne consomme que 120 µA. Il y a peu à dire sur le montage. La résistance nulle sur la broche 1 définit la fréquence de travail. Elle sera de 80 kHz avec R1 et de 10 kHz seulement sans elle. L’association de L1 et C5 n’a d’autre +5V effet que de réduire l’ondulation de la tension de sortie et le choix de l’inductance n’est pas aussi critique qu’il le serait pour une self de stockage. Vous trouverez les fichiers Gerber de la platine sur le site www. elektor.fr. Les composants R1, STI C1 et C4 sont des CMS 603, C3 est un condensateur CMS au tantale. Pour IC1, vous avez le choix entre les deux boîtiers SO8 MAX660CSA et MAX660M, L1 est une inductance CMS de –5V 10 µH, 300 mA. 070279 - 11 (070279-I) Convertisseur USB Jörg Schnyder Il ne suffit pas d’acheter un petit appareil, par exemple une interface pour programmer et déboguer un microcontrôleur, encore faut-il assurer son alimentation par un bloc secteur massif. La situation se dégrade encore davantage quand on est en déplacement sans aucune prise secteur en vue. Le bus USB peut venir directement à la rescousse quand la tension d’alimentation est de 5 V. Pour des tensions plus 20 élevées, il faut recourir à un convertisseur USB. Ce petit convertisseur survolteur à découpage peut fournir des tensions atteignant 15 V avec un courant maximum de sortie de 150 mA. Le LM3578, dont le circuit interne est représenté dans la figure 1, est un convertisseur de tension universel à découpage. Dans notre cas, il est utilisé comme convertisseur survolteur (Step-Up Conver- ter). Le schéma de la figure 2 indique les éléments nécessaires. Pour effectuer la conversion, le transistor interne est commuté à l’état passant jusqu’à ce qu’il soit bloqué par le comparateur ou par le circuit de limitation de courant. Le courant collecteur passe par l’enroulement L1 qui emmagasine alors l’énergie magnétique. Le courant continue à passer par L1 lorsque le transistor interne est bloqué, mais cette fois par la diode D1, vers le consomma- elektor - 7-8/2007 Valeurs de R5 et R6 pour d’autres tensions de sortie : 6V: R5 = 47kΩ, R6 = 9,1kΩ 12V: R5 = 110kΩ, R6 = 10kΩ 15V: R5 = 130kΩ, R6 = 9,1kΩ Le tracé de la petite carte du circuit est reproduit dans la figure 3. Hormis le connecteur et le bornier, tous les composants sont de type CMS. (070119-I) Liens Internet teur. La tension de l’enroulement est inversée et vient s’ajouter à la tension d’entrée. La tension de sortie est alors composée de la somme de la tension d’entrée et de la tension induite dans l’enroulement. La tension de sortie dépend du courant de charge ainsi que du temps de commutation du transistor interne de l’état bloqué à l’état passant et réciproquement. La régulation est effectuée en appliquant la tension de sortie au comparateur de la puce par le diviseur de tension R5/R6. C5 sert à fixer la fréquence de commutation qui doit être de l’ordre de 55 kHz. Le réseau R4, C2, C3 sert à la compensation de boucle. Les 3 résistances 1 Ω R1, R2, R3 en parallèle servent de détecteur de courant destiné à limiter le courant de commutation (des résistances de moins de 1 Ω sont difficiles à obtenir sous forme de CMS). L’ondulation de la tension de sortie est déterminée par la valeur et la résistance interne des condensateurs C11, C8, C7 et C6. L’utilisation de plusieurs condensateurs permet d’abaisser la résistance interne totale tout en limitant l’encombrement en hauteur de la carte. L2, C1, C9 et C10 servent de filtre d’entrée. Attention ! La résistance de l’enroulement L2 ne doit pas dépasser 0,5 Ω. Le bus USB est raccordé par une embase USB de type B encartable. Un bornier avec un espacement de 5,08 mm monté sur la Site de l’auteur www.systech-gmbh.ch Liste des composants (pour U s = 9 V) 1 Résistances : carte peut fournir la tension de sortie. Les câbles peuvent, bien entendu, être aussi soudés directement. Il suffit de percer 2 trous supplémentaires dans la carte en guise de dispositif antitraction. (tout en CMS 1206) R1 à R3 = 1 Ω R4 = 220 kΩ R5 = 82 kΩ R6 = 10 kΩ Condensateurs : Comme nous n’avons pas encore réussi à inventer le mouvement perpétuel, il est évident que le courant d’entrée du circuit est supérieur à son courant de sortie. (tout en CMS 1206) C1,C4 = 100 nF C2 = 2nF2 C3 = 22 pF C5 = 1nF5 On peut se baser sur une règle empirique : Condensateurs tantale : (tout en CMS 7343) C6 à C8 = 68 µF/20 V C9,C10 = 47 µF/16 V C11 = 68 µF/20 V Courant d’entrée = courant de sortie * tension de sortie / tension d’entrée / 0,8 En clair : 100 mA de courant de sortie avec 9 V de tension de sortie nécessitent du bus USB un courant d’entrée d’environ 225 mA ! Selfs : L1 = 820 µH (CMS CD105) L2 = 47 µH (CMS 2220) Semi-conducteurs : D1 = diode Schottky SK34 CMS IC1 = LM3578AM (CMS SO8) Divers : L1 47µH 820µH 8 +5V D– D+ GND R4 1 220k K2 2 3 C2 4 1 C3 2 22p 3 2n2 USB -IN UIN C IC1 I LIM +IN LM3578AM E OSC D1 6 R5 SK34SMD 7 82k L2 K1 K1 = bornier à 2 contacts au pas de 5 mm (optionnel) K2 = embase USB de type B dessin de la platine téléchargeable gratuitement depuis www.elektor.fr 5 4 2 7-8/2007 - elektor 100n 47µ 16V 47µ 16V 1n5 R1 R2 R3 C11 C8 C7 C6 C4 68µ 20V 68µ 20V 68µ 20V 68µ 20V 100n R6 10k C5 1Ω C10 1Ω C9 1Ω C1 070119 - 11 3 21 Anti-décharge profonde pour accus Tilman Küpper 22 IRLML6402 8 2 BT1 5 820k R2 3 6 R3 100k R4 100k R1 130k En intégrant une protection contre la décharge profonde dans l’alimentation, on peut éviter que les accumulateurs d’un appareil laissé en circuit se déchargent totalement. Elle interrompt automatiquement l’alimentation quand la tension des accumulateurs descend au-dessous d’un seuil inférieur (ici par exemple 9,5 V). L’interruption ne cesse que lorsque la tension de l’accumulateur dépasse un seuil supérieur (en l’occurrence 10,5 V), par exemple après le branchement d’un chargeur. La consommation du circuit de protection contre la décharge profonde devrait être elle-même aussi faible que possible. Le composant ICL7665 d’Intersil se trouve au cœur du circuit de protection. Il comporte 2 comparateurs avec référence de tension et se distingue par sa consommation extrêmement faible, même pas 3 µA. Dans notre cas, seul le premier comparateur est nécessaire. Ses seuils sont positionnés aux valeurs indiquées plus haut 2 V à 12,5 V. La fiche technique du comparateur ICL7665 fournit tous les détails sur le choix de valeurs appropriées des résistances. Le circuit de protection est réalisé en technique CMS, ce qui permet de le monter même dans un boîtier de petite taille. On pourra se passer d’outils spéciaux s’il est possible d’équiper la carte de résistances qui ne soient pas microscopiques. Un fer à souder normal à panne fine suffira. Pour plus de sécurité, la carte équipée et testée peut être placée dans un morceau de gaine rétractable avant d’être montée. T1 HYST1 RL1 HYST2 OUT1 IC1 ICL7665 OUT2 SET1 1 7 SET2 4 070087 - 11 au moyen des résistances R1 à R3. T1, un MOSFET canal P, met en circuit ou hors circuit la charge RLoad selon l’état de ce comparateur. Les valeurs de seuil ou l’hystérésis peuvent être adaptées en fonction des caractéristiques désirées en modifiant la valeur des résistances R1 à R3. L’augmentation de la valeur de R3 jusqu’à 300 kΩ élève le seuil supérieur de (070087-I) Un grand merci pour tous les précieux conseils des membres du forum de.sci.electronics. Liens : fiche technique IRL7665 : www.intersil.com/data/fn/fn3182.pdf fiche technique IRLML6402 : www.irf.com/product-info/datasheets/data/ irlml6402.pdf elektor - 7-8/2007 Robot pendulaire Angle Filtre Gyroscope Accéléromètre Régulateur Vitesse Vitesse angulaire Potentiomètres Microcontrôleur David den Boer Le robot pendulaire le plus connu, du grand public également, est le Segway, une invention de Dean Kamen [5]. Cette petite voiture à deux roues, sur le même essieu, est un moyen de transport personnel qui agrémente de sa présence les rues de nombreuses grandes villes. Le principe de l’équilibre sur deux roues a inspiré beaucoup de constructeurs de robots et beaucoup sont arrivés à un bon résultat. En témoignent d’autres exemples, comme le NBOT, construit par D. Anderson [3] ou « Joe le Pendule », oeuvre d’une équipe de l’école polytechnique de Lausanne [2]. Les robots de cette sorte contiennent quantité de capteurs et une commande à un ou plusieurs microcontrôleurs (figure 1). Beaucoup s’y sont attelés, la réussite est difficile, puisse cet article aider à lever quelques obstacles. Physique Le but du jeu est naturellement de faire avancer et reculer le robot de la même façon sans qu’il se couche. Son centre de gravité doit rester en permanence au-dessus du robot. Le problème est analogue à celui qui consiste à maintenir en équilibre un manche de balai sur le bout d’un doigt. Il est connu des cybernéticiens sous le nom de pendule inversé. Nous avons appris à l’école en cours de physique que la période d’un pendule simple était proportionnelle à la racine carrée du quotient de la longueur de son fil par l’accélération de la pesanteur: la période est donc plus longue si le fil du pendule est plus long (voir l’équation 1). Nous pouvons en déduire que plus le centre de gravité d’un robot pendulaire est placé haut, plus sa période est grande et qu’il est donc plus facile de l’équilibrer. Nous supposons donc que pour qu’un robot pendulaire fonctionne bien, il est préférable que son 24 Motor G Pont-H Motor D Encodeur Axe Signal MLI (Modulation de Largeur d’Impulsion / PWM) 070294 - 11 centre de gravité soit assez haut placé. Pour le réaliser, nous pouvons fabriquer un robot de grande taille mais également monter son centre de gravité en plaçant assez haut des composants lourds, des accumulateurs, par exemple, ou artificiellement à l’aide de masses supplémentaire, en le lestant plus près de la tête que des pieds, pardon, des roues. Un capteur d’accélération permet de mesurer l’accélération à laquelle le capteur est soumis. Cette accélération est déterminée en fonction de son sens. Nous prendrons comme exemple ADXL202 de Analog Devices qui est assez couramment utilisé. Ce capteur peut mesurer l’accélération dans deux directions perpendiculaires entre elles. Comme ce capteur est aussi sensible à l’accélération statique de la pesanteur (g), il est possible de déterminer, avec le capteur, l’angle que fait le robot avec l’horizontale. Les accélérations que le capteur détecte sont représentées sur la figure 2 par les vecteurs am1 en am2. Quand le capteur n’est soumis à aucune autre accélération, il n’est sensible qu’à l’angle qu’il fait avec la direction de l’accélération de la pesanteur (et l’accélération de la pesanteur elle-même, qui est constante). A partir du moment où le capteur est également soumis à une accélération dynamique (a), il la Régulation La régulation du robot demande la connaissance de nombreuses grandeurs. La première est, naturellement, l’angle que fait le robot avec la verticale lorsqu’il est debout: si le robot est penché, il risque de tomber plus tôt. La vitesse avec laquelle cet angle varie (vitesse angulaire) est la deuxième grandeur importante. Lorsque le robot passe avec une certaine vitesse par son point d’équilibre, l’angle qu’il fait avec la verticale est nul. Le robot n’est toutefois pas dans un état stable, il passe en effet par son point d’équilibre avec une certaine vitesse angulaire. La régulation doit pouvoir anticiper sur ce point; cette vitesse angulaire est donc une grandeur indispensable à la régulation du robot. Nous en arrivons enfin à la vitesse de déplacement du robot, puisque l’objectif est de pouvoir maîtriser la position du robot. En ramenant ces trois grandeurs aux moteurs, il est possible de régler la stabilité du robot (voir l’équation 2). Vous pouvez retrouver les bases physiques de cette stratégie de régulation dans [1]. Vous y retrouverez également les équations de mouvement qu’elles impliquent. Capteurs Pour accéder aux grandeurs que nous avons mentionnées plus haut, on utilise le plus souvent un capteur d’accélération et un gyroscope. détecte aussi. C’est le cas, par exemple, lorsque le robot avance ou recule. L’accélération résultante am2 dépend alors de l’accélération dynamique, de l’accélération de la pesanteur et de l’angle. Vous voyez d’ici le problème que cela pose: au moment où le robot se déplace, on ne peut pas dériver directement du signal du capteur l’angle que fait le robot avec la verticale. Un gyroscope permet de déterminer la vitesse angulaire à laquelle ce capteur se déplace. Le signal de sortie est directement proportionnel à la vitesse avec laquelle le capteur tourne autour de son axe. L’inté- elektor - 7-8/2007 gration de façon simple de ce signal permet de déterminer l’angle que fait le robot avec la verticale. Le problème est ici celui de la précision. Les erreurs s’additionnent. Avec une très petite erreur de mesure du capteur, disons de 0,1 °/s par mesure, nous obtenons, après 100 mesures et intégration, une erreur de 10 °. Nous pourrions construire un robot pendulaire qui ne comporte qu’un gyroscope comme capteur, mais nous le verrions après quelque temps se mettre à osciller et perdre sa stabilité. L’intégration amplifie la faible dérive de ce genre de capteur. L’association d’un gyroscope et d’un capteur d’accélération permet d’échapper aux défauts des deux capteurs. On leur associe généralement un filtre dit « de Kalman ». Celui-ci fait la « somme » de la valeur mesurée par le gyroscope, de la valeur mesurée par le capteur d’accélération et de l’angle calculé lors du cycle de mesure précédent. Lors de la sommation, ces trois valeurs sont pondérées les unes par rapport aux autres. Les facteurs de pondération appliqués sont déterminés dynamiquement à l’équilibrage. Comme, la plupart du temps, les facteurs de pondération concourent rapidement vers une valeur, il est aussi possible de partir d’un rapport constant (équation 3). On détermine les facteurs de pondération pertinents au cours des mesures d’étalonnage. Les moteurs d’un robot sont, d’ordinaire, pourvus de codeurs. Ceux-ci délivrent des impulsions en fonction de la rotation des moteurs. En comptant le nombre d’impulsions par unité de temps, et donc les intervalles de temps qui séparent les impulsions, il est possible de déterminer la vitesse de rotation des roues et, à partir de là, la vitesse du robot. La méthode qui fournit la meilleure précision est celle qui produit le plus grand nombre d’impulsions par tour de roue. Transmission et commande La transmission est encore un point qui demande attention. Quand le robot se balance à l’équilibre, les moteurs commutent régulièrement d’avant en arrière et réciproquement. L’association de moteurs 7-8/2007 - elektor et d’engrenages ne se passe pas sans frottements et sans jeu. Quand la tension de commande des moteurs augmente, la transmission ne délivre pas son énergie directement, il y a un certain décalage. Beaucoup d’applications s’en accommodent mais, dans le cas d’un robot pendulaire, les passages par zéro sont fréquents et c’est autour du zéro que la régulation joue. En demandant au programme du a am1 am2 g g 070294 - 12 T = 2π l g T Débattement pendulaire [s] g Accélération de la pesanteur [m/s2] l Distance entre le point de rotation et le centre de gravité [m] PWM = k1 ⋅ θ + k2 ⋅ θ + k3 ⋅ v θ Angle de positionnement du robot [°] θ Vitesse de variation de l’angle [°/s] PWM Pilotage des moteurs 0-100% v Vitesse du robot [m/s] k1...k3 Facteurs de contre-réaction, constante θ B [ n] = k4 ⋅ θ B [ n −1] + k5 ⋅ θG [ n] + k6 ⋅ θ v [ n] θG [ n] Vitesse angulaire déterminée par le gyroscope [°/s] θ B [ n] Angle du robot, calculé lors de la mesure n [°] θ v [ n] Angle du robot, déterminé par le capteur d’accélération lors de la mesure n [°] θ B [ n −1] Angle du robot, calculé lors de la mesure n–1 [°] k4 ...k6 constantes 25 cesseurs plus petits qui délivrent leurs informations à un processeur central. On peut ainsi diviser les temps de mesure et de réglage, ce qui facilite un peu le travail de programmation. Addition des parties microcontrôleur de compenser le décalage dans la commande des moteurs, le robot gagnera beaucoup en stabilité. Les performances du robot, son aptitude à rester vertical, dépend également des performances des moteurs et des accumulateurs. Plus les moteurs pourront fournir d’énergie, mieux le robot pourra faire la preuve de ses talents d’équilibriste. Architecture De nombreuses opérations doivent s’effectuer quasi simultanément dans la boucle de régulation du programme qui tourne sur le microcontrôleur. Cette boucle collecte les signaux des capteurs, effectue ses calculs et commande le robot. Il est, en outre, souvent souhaitable de communiquer en même temps avec un ordinateur, pour l’acquisition des données, par exemple. Il peut être, de plus, judicieux de ne pas prendre un seul processeur, même relativement puissant mais plusieurs pro- 26 Un robot pendulaire comporte de nombreux composants dont l’ensemble doit maintenir la machine à la verticale: capteurs, filtres éventuels, régulation, commande et transmission. Assembler et essayer ces composants en une seule fois est très ambitieux mais les chances de réussite sont plus élevées si les composants sont essayés et étalonnés séparément. Une bonne méthode, pour ce faire, consiste à ajouter provisoirement un petit bras supplémentaire au robot. Ce petit bras se fixe par une articulation comportant un potentiomètre. L’autre extrémité du petit bras est pourvue d’une roue qui s’appuie sur le sol. Quand le robot commence à perdre l’équilibre, la position du potentiomètre varie et donc sa résistance. La résistance du potentiomètre est proportionnelle à l’angle que fait le robot avec la verticale et peut donc être utilisée à des fins d’étalonnage. Il est, en outre, important de choisir un potentiomètre dont l’axe tourne facilement. La régulation constitue une première étape. Comme nous disposons, avec le petit bras, d’une mesure de l’angle, nous pouvons essayer la régulation et régler le robot. Comme nous l’avons dit, une rétroaction de l’angle que fait le robot avec la verticale, la vitesse angulaire et la vitesse de progression du robot sont nécessaires pour sa régulation. Il est possible de déterminer théoriquement les facteurs de rétroaction concernés. Les calculs demandent toutefois une description physique complète du robot et la connaissance du comportement des moteurs. Il est plus simple de déterminer ces facteurs expérimentalement. On peut le faire, par exemple, en connectant plusieurs potentiomètres analogiques ou numériques au microcontrôleur. Le programme qui tourne sur le microcontrôleur lit la position des potentiomètres et convertit les valeurs correspondantes en facteurs de rétroaction. On peut ensuite régler en s’armant de beaucoup de patience. Une première étape consistera, par exemple, à amplifier le facteur de rétroaction de l’angle. Si ce facteur est trop petit, le robot réagira trop lentement; s’il est trop grand, le robot se balancera rapidement autour de son point d’équilibre. Dans le dernier cas, on peut réduire ce facteur de rétroaction et augmenter celui de la vitesse. Le robot gagnera ainsi rapidement en stabilité. On peut terminer en amplifiant la rétroaction de la vitesse. Cette amplification permettra au robot de mieux tenir sur place. Une trop grande rétroaction de cette grandeur déstabiliserait toutefois le robot. Vient ensuite l’étalonnage des capteurs. Les valeurs de mesure des capteurs (gyroscope, capteur d’accélération) peuvent être lues par l’ordinateur par l’intermédiaire du microprocesseur. Les capteurs qui fournissent leur information par un signal modulé en largeur d’impulsion sont très valables ici. En comparant le résultat de la mesure d’un tel capteur avec celui du potentiomètre sur lequel est monté le petit bras, on peut en déduire facilement l’angle et la vitesse angulaire. Pendant l’étalonnage il n’est pas indispensable que le robot soit motorisé. On peut donc couper le moteur et faire aller et venir manuellement le robot de façon à faire varier angle et vitesse angulaire et procéder à l’étalonnage. Lors de l’étalonnage du capteur d’accélération il est recommandé de faire aller et venir le robot lentement de façon à maintenir l’accélération dynamique aussi petite que possible pour ne plus avoir affaire qu’à l’accélération de la pesanteur. Le calcul de l’angle et de la vitesse angulaire constitue une dernière étape: on combine ici la mesure des capteurs de façon à pouvoir obtenir par approximation l’angle que le robot fait avec la verticale et la vitesse à laquelle cet angle varie. Nous décrivons dans cet article quelles opérations de calcul le permettent. On peut déterminer les facteurs de pondération en déplaçant le robot pendant un certain temps (une minute, par exemple) tout en collectant les résultats de mesure des capteurs (capteur d’accélération, gyroscope et potentiomètre du petit bras). On détermine ensuite sur le PC les facteurs de pondération avec un tableur. (070294-I) Liens Internet [1] http://robotics.ee.uwa.edu.au/theses /2003-Balance-Ooi.pdf (néerlandais) Ce document concerne un document de fins d’études, période au cours de laquelle fut réalisé un robot pendulaire. L’étude entre dans le détail des modèles physiques et mathématiques du problème. [2] http://leiwww.epfl.ch/joe/ Ecole Polytechnique de Lausanne. Comporte un certain nombre de petits films intéressants. [3] www.geology.smu.edu/~dpa-www/ robo/nbot/ Il s’agit là du site Web de D. Anderson, le concepteur du NBOT. [4] www.dena.demon.nl Site Web néerlandais décrivant la réalisation d’un robot pendulaire. [5] www.segway.nl Importateur du Segway. [6] www.sparkfun.com Fournisseur de circuits imprimés dotés d’un capteur d’accélération et d’un gyroscope. elektor - 7-8/2007 Mesure de tension négative avec le R8C IC1 +2V5 LM317 +12V +2V5 R1 10 VCC AN2 P17 AN1 P16 AN0 11 12 13 14 15 16 –2V5 D2 10 27 11 26 12 25 13 24 14 23 15 22 16 D3 D4 –12V D5 D6 V WHEEL D7 21 P13 R5 20 P12 +12V 19 P11 P10 R7 R13 R9 R11 R19 R15 18 P32 13 17 P33 +2V5 2 8 SUB D37 VDD EN S1 MUX S2 IC3 D S3 S4 IC2 –12V –12V 47k 9 AN3 D1 56k 8 28 VSS D0 LM337 –2V5 100 Ω R2 15 16 1 4 5 6 7 12 ADG408 S5 11 A2 S6 A1 S7 A0 S8 VSS 3 10 9 R6 R8 R14 R10 R12 R20 10k 7 9 10k 6 29 E 10k +2V5 5 8 39k –2V5 AN4 7 30 10k 4 31 39k AN5 LIFT EN V LIFT R/W 47k R8C Module 6 10k 3 32 10k 100 Ω 2 RS 5 J2 1 –8V VO 39k J1 R18 +12V +8V VDD 3 39k 100 Ω VSS 2 +12V K1 LCD 1 4 BC547A –2V5 J3 +2V5 R3 LC DISPLAY 1N4001 T1 R16 10k D1 100 Ω RE1 GND 14 100 Ω R4 –12V 070010 - 11 Sven van Vaerenbergh UZ Brussel, service de radiothérapie Pour une « table d’hercule » (une petite plateforme élévatrice électrique) du centre hospitalier de Bruxelles (UZ), nous devions concevoir un circuit capable de contrôler plusieurs tensions de commande et d’arrêter la table en cas de nécessité. Les déplacements verticaux de la plateforme étaient commandés par une tension continue variant entre + et -8 V, son amplitude déterminant la vitesse et sa polarité, le sens des déplacements. Le contrôle de quelques autres tensions fixes était également demandé. Nous avons réalisé ce projet à l’aide d’un module R8C d’Elektor choisi pour la facilité avec laquelle il était possible d’y connecter un module LCD et pour la qualité de son convertisseur analogique/numérique (CAN) sur 10 bits embarqué. La connexion de l’affichage LCD (2 x 16 caractères) est identique à celle de la carte d’expérimentation d’Elektor (mars 2006, page 44). Le contrôleur est, de plus, 7-8/2007 - elektor associé à un multiplexeur de type ADG408. Ce dernier composant est demandé par la multiplicité des tensions à mesurer. La particularité de ce projet est que nous devons lui confier la mesure de tensions aussi bien positives que négatives. En principe, le convertisseur analogique/numérique du R8C ne peut mesurer que des tensions comprises entre 0 et 5 V. Pour résoudre ce problème, nous avons utilisé une alimentation symétrique pour le module R8C, donc plus et moins 2,5 V. Ces tensions sont fabriquées par un LM317 et un LM337. La broche 5 du module R8C est normalement à la masse (Vss). Dans ce cas, nous aurons –2,5 V. Nous pouvons, de cette façon, mesurer des tensions comprises entre +2,5 V et –2,5 V. Les seuls points qui sont reliés à la masse sur le schéma appartiennent aux diviseurs de tension des deux stabilisateurs (R1 à R4) et aux diviseurs de tension (R5 à R16, R19, R20) des signaux à mesurer (disponibles sur le connecteur K1, où sont appliqués tous les signaux pertinents de la table d’Hercule). Le schéma comporte en outre un relais qui peut être commandé par le R8C et commandera directement l’arrêt de la table. Il s’agit d’une option. Nous pouvons maintenant bien surveiller les tensions négatives. La résolution du convertisseur A-N sur 10 bits du R8C est de 5 V/1 024 = 0,004 88 V par bit. Du fait de l’alimentation symétrique, le convertisseur affiche 512 pour une tension d’entrée nulle. Nous pouvons afficher un signe moins sur le LCD quand la valeur est inférieure à 512. Le programme, en C, est le suivant : if ( u < 512 ) // inférieur à 0, mettre signe négatif { lcddata (45); } Il nous faut en outre, dans le logiciel, adapter les niveaux de tension, sachant qu’ils ont été abaissés par les 6 diviseurs de tension. Il nous faut en outre piloter le 27 multiplexeur. En code C cela nous donne ceci : pd3_3 = 1; sortie p3_3 = 0; //port 3.3 en //port 3.3 => pour sélection de canal par MUX analogique pd3_2 = 1; p3_2 = 0; //port 3.2 => pour sélection de canal par MUX analogique 3 canaux attaquent directement le convertisseur analogique/numérique (CAN).1 des canaux est multiplexé pour les tensions +8, –8 et –12 V. (070010-I) Des roues maison qui tournent rond Markus Bindhammer Il n’est pas nécessaire de réinventer la roue (même de robot), mais il faut parfois la fabriquer quand on ne peut ou ne veut pas se procurer le modèle exactement conforme. Le côté artisanat et bricolage ne requiert que peu d’efforts et une seule main (pas trop gauche) : Tracer au compas des cercles de 50 mm de diamètre sur du contre-plaqué de 5 mm d’épaisseur. Découper ou scier ces disques. Percer un trou de 3 mm de diamètre au centre de chaque disque. Perceuse d’établi Bloc de bois enveloppé de papier-émeri Vis M3 de bonne longueur ou tige filetée Rondelle figure. Le disque, maintenu par une rondelle de fixation et un écrou, est fixé dans une perceuse. Un petit bloc de bois enveloppé de papier-émeri permet de polir les disques pour les rendre parfaitement ronds. Pour terminer, enfiler une courroie dentée (provenant d’un ancien magnétoscope, etc.) sur le bord de chaque disque ou coller une bande de caoutchouc plate sur les surfaces de roulement. Une fois la vis enlevée, il suffit d’enfiler les roues sur les axes et de les y fixer avec un soupçon de colle instantanée. (070145-I) Une vis M3 longue d’au moins 30 mm passe par le trou comme indiqué dans la 28 070145 - 11 elektor - 7-8/2007 TriWi Brochage du 89C2051 Abraham Vreugdenhil Si vos préférences vont à un autre, veillez à ce qu’il dispose d’au moins 9 broches d’entrée/sortie: 3 pour les LDR, 3 pour les palpeurs, 3 pour les moteurs (et 3 pour des LED, s’il en a 12). La mesure d’intensité lumineuse par une LDR se réalise en mettant celle-ci en série avec un condensateur de 1 nF et en mesurant la constante de temps RC. La constante de temps du réseau RC varie en fonction de la résistance de la LDR (variable avec l’intensité lumineuse. Lisez le programme, vous comprendrez tout). Un robot triangulaire à trois roues, qui ne peut tourner que dans un sens et qui, pourtant, se dirige vers la lumière: voilà TriWi. Les organes sensoriels du robot sont trois photorésistances (LDR), chacune à tour de rôle détectant la direction d’où vient le plus de lumière, et trois poils de moustache, qui détectent les obstacles. Son processeur est un 89C2051 d’Atmel. Il avait tout pour plaire, prix compris, et offre 2 Koctets de mémoire de programme. Broche Fonction 1 RST Connexion 2 RxD 3 TxD 4 Xtal2 5 Xtal1 6 P3.2 (RC5 extension) 7 P3.3 Moteur 2 8 P3.4 Moteur 3 9 P3.5 Moteur 1 10 GND 11 P3.7 LED 1 12 P1.0 Palpeur 1 13 P1.1 Palpeur 2 14 P1.2 Palpeur 3 15 P1.3 LDR 1 16 P1.4 LDR 2 17 P1.5 LDR 3 18 P1.6 LED 2 19 P1.7 LED 3 20 VCC Le compilateur utilisé, BASCOM-LT ou BASCOM-8051, nous offre une commande pour l’exécution directe de cette mesure : GETRC(numéro de broche). Chaque palpeur est fait d’un petit tube de cuivre dans lequel est introduit un fils d’acier à ressort. Un petit morceau de fil isolant les sépare. Lorsque le fil est mobilisé, il fait contact et le processeur détecte la fermeture du circuit. Les moteurs sont de vieux servomoteurs auxquels nous avons retiré leur électronique. Ils sont commandés directement par S4 R3 LDR1 LDR2 LDR3 10µ 16V 1 BT1 13 14 RST P1.6 IC1 P1.0 P3.7 P1.1 P1.2 P3.0 P3.1 P3.2 15 16 17 AT89C2051 P1.3 P3.5 P1.4 P3.3 P1.5 S3 C2 C3 10µ 35V 10µ 35V 10µ 35V R4 30 R5 R6 R7 X2 5 4 X1 10 M 19 C5 12MHz C6 M2 M Moustache 3 M3 M Moustache 1 Moteur 3 18 11 LDR 3 2 LDR 2 3 6 LDR 1 9 9 1 7 2 8 3 4 5 6 7 22p S1 ... S3 = Moustache P3.4 X1 10k C1 D3 M1 P1.7 4V8 4x 1V2 S2 D2 20 12 S1 D1 C4 1k R2 1k 1k R1 DS I1 O1 I2 O2 I3 IC2 I4 I5 I6 O3 O4 ULN2003 I7 O5 O6 O7 16 Moteur 1 Moteur 2 15 14 13 Moustache 2 12 11 10 070289 - 12 GND 8 22p 070289 - 11 elektor - 7-8/2007 un transistor et ne peuvent ainsi que tourner ou s’arrêter. Ils tournent toujours dans le même sens. Si nous mettons les trois moteurs en marche, le robot tourne en rond sur son axe. Si, en revanche, un des moteurs est arrêté, TriWi tourne autour de sa roue. En remettant ce moteur en marche et en coupant un autre, nous pouvons ainsi « louvoyer » pour aller quelque part en ligne droite. Pour le plaisir des yeux, nous avant rajouté trois LED de 8 mm. Au démarrage du TriWi, elles s’allument un instant selon un certain modèle et les moteurs démarrent tous (pour vérification). Les LED sont câblées de telle façon que celle qui correspond au moteur arrêté s’allume. Se déplacer à l’aide de trois moteurs en un mouvement circulaire pour aller quelque part n’est pas la meilleure façon de progresser. Au lieu de banales roues de caoutchouc, il nous aurait fallu prendre des roues omnidirectionnelles. Notre cahier des charges pour ce projet de robot ne le prévoyait pas. Il privilégiait l’aspect ludique et devait faire quelque de chose d’assez drôle, qui n’exclut pas l’étude. Le programme du TriWi est, bien sûr, dis- ponible sur le site d’Elektor, sous la référence EPS070289-11. (070289-I) Antieu-robot Le nom de ce robot est un jeu de mots qui ne casse pas trois pattes à un canard, mais acceptable de la part d’un électronicien. En déplaçant le trait d’union, on lit antieuro ; cela renvoie aux roues, faites de pièces hollandaises démonétisées du fait de l’euro. Que dire de plus ? Que le montage est plus astucieux que le titre. Les caractéristiques de ce robot se résument en effet à « petit et astucieux ». Quelle est la plus petite taille possible pour un robot autonome ? 7-8/2007 - elektor +3V6 47k R2 R1 8 D1 IC2 5 1 2 3 6 C1 4 IS471F 100n 7 PB0/MOSI IC1 PB1/MISO CLK/PB3 PB2/SCK PB4 1 2 3 AT90S2343 4 1 = VCC 2 = Vo 3 = GND 4 = GLout RESET C2 4µ7 16V R3 10k D2 2k2 Pour commencer il faut de petits moteurs. Ainsi vint à l’auteur l’idée d’utiliser des moteurs de vibreur de téléphone portable. Ces moteurs sont minuscules et tournent très vite. Dans son état d’origine, le moteur porte souvent un excentrique qui produit les vibrations. On l’enlèvera sans peine avec un pince coupante. Le pilotage de chaque moteur est confié à un simple transistor BC557 ou BC537. Les bases sont bloquées par une résis- tance de 10 kΩ. Il nous faudra aussi un petit microcontrôleur, naturellement. La famille AVR propose un type à 8 broches, le 90S2343. En plus des broches d’alimentation et de la broche de remise à zéro, il reste cinq broches d’entrée/sortie. Cela paraît peu, mais un robot simple n’a pas besoin de grand’chose. Le plus gros problème est celui de la source d’énergie. Nous avons choisi un accu NiMH de 3,6 V 160 mA, de petites dimensions. Cet accu est utilisé comme un châssis qui porte le reste de robot. Ensuite, nous avons besoin d’un capteur pour détecter les obstacles. Ce sera un capteur infrarouge IS471F. Il réagit à un signal infrarouge R4 M1 M2 émis par une LED infraM M rouge, commandée par le capteur lui-même. Enfin il faut des roues. Ce seront des pièces de T1 cinq centimes de florin, la monnaie hollandaise 2x d’avant l’euro. D’où le BC557 T2 titre. Nous en collons deux et nous perçons l’assemblage d’un trou de 1 mm pour l’axe. Une tranche de chambre à air de vélo sert de bandage 070296 - 11 élastique, collé sur la 10k Abraham Vreugdenhil 31 jante. L’embout d’un ballon de baudruche peut aussi assurer l’adhérence au sol. Si on fait rouler le robot trop vite et qu’on l’arrête, sa hauteur et son poids risquent de le faire capoter. C’est pourquoi nous le ferons rouler plutôt lentement. Cela donne aussi un robot moins nerveux. Le régime du moteur est beaucoup trop élevé. Une modulation de largeur d’impulsion (PWM) de 25% le ramène à une valeur raisonnable. De plus, nous ne laisserons pas le robot rouler en permanence, mais le ferons s’arrêter périodiquement. D’abord pour ne pas arriver directement aux limites du terrain d’évolution ; ensuite pour lui conférer un caractère malin et réfléchi. Il donne l’impression d’observer son environnement avant de pousser plus loin. Si un obstacle se présente, il va à droite ou à gauche suivant l’état d’un compteur interne. S’il y a encore quelque chose, il continue du même côté, jusqu’à ce qu’il ne détecte plus d’obstacle. Le programme se charge simplement du contournement des objets. Le robot tourne en rond et s’il voit quelque chose il le contourne. Sur les 2 Koctets de mémoire de programme disponibles, 600 octets seulement sont utilisés. Il reste donc beaucoup de place pour programmer un comportement plus intelligent, ou ajouter un deuxième capteur et adap- ter le comportement. L’Antieu-robot est programmé en BASIC. Le code est compilé avec BASCOM-AVR. C’est un très bon compilateur produit par MCSELEC. Pour plus d’informations et la version de démonstration gratuite, on se reportera à www.mcselc.com. Comme extension, on peut imaginer un contact de recharge suspendu au-dessus du terrain d’évolution. Quand le robot le rencontre, il prend un temps de repos pour recharger son accumulateur. Le programme peut être téléchargé du site Elektor sous le numéro EPS070296-11. (070296-I) Hunter, le chasseur Abraham Vreugdenhil Dans la gamme des robots de fabrication personnelle, les robots quadrupèdes occupent une place spéciale. Courir sur quatre pattes est, et reste, un défi. On retire toujours beaucoup de satisfaction de la construction d’un pareil robot. En plus du choix du mode de déplacement, nous devons en faire d’autres, comme celui des capteurs dont nous allons équiper le robot pour lui accorder la possibilité de reconnaître son environnement. Ici, la préférence a été accordée à des fils tactiles, genre moustache de chat ou cornes d’escargot, pour la détection à courte portée. Comme le robot doit aussi se déplacer sur de plus longues distances, il doit pouvoir détecter les objets de la même manière que les humains ou les animaux ; ce sera ici à l’aide de capteurs PIR (Passive Infra Red). Lors de la conception d’un robot, le choix du processeur revêt aussi une importance primordiale. Il faut prévoir suffisamment de lignes d’E/S et une bonne capacité de mémoire. Et puis évaluer le rapport entre le coût et les fonctions souhaitées pour éduquer son comportement. La réactivité est en effet d’une portée essentielle. Comment le robot va-t-il réagir aux informations qu’il perçoit de ses différents capteurs ? Pattes à servos Se faire une belle jambe n’est pas une mince affaire ! Il existe de nombreuses possibilités à considérer, avec des barres et des leviers, qui ont chacune leurs avantages et leurs inconvénients. Dans le cas présent, nous avons opté pour une solu- 32 Fonction des broches de l’AT90S2313 N° Fonction Raccordement 2 PD0 Patte avant gauche hanche 3 PD1 Patte avant gauche genou 6 PD2 Patte arrière gauche hanche 7 PD3 Patte arrière gauche genou 8 PD4 Moustache gauche 9 PD5 Moustache droite 11 PD6 Oeil gauche 12 PB0 Patte avant droite hanche 13 PB1 Patte avant droite genou 14 PB2 Patte arrière droite hanche 15 PB3 Patte arrière droite genou 16 PB4 Oeil droit 17 PB5 - MOSI Capteur PIR gauche / ISP (selon cavalier) 18 PB6 – MISO Capteur PIR central / ISP (selon cavalier) 19 PB7 – SCK Capteur PIR droit / ISP (selon cavalier) elektor - 7-8/2007 +7V2 S4 IC2 BT1 +5V 7805 7V2 D2 VCC R3 20 L S3 1 RST PD6 IC1 17 M PB4 PB5 18 19 R PB6 PD0 PB7 PD1 AT90S2313 PD2 PD3 PB0 MOSI MISO SCK PB1 8 9 PD4 PB2 PD5 PB3 XTAL1 L S1 D6 D5 D7 R4 R5 470 Ω RST 470 Ω R2 470 Ω 470 Ω R1 D4 D3 S2 5 R 470 Ω D1 Capteurs PIR 11 Servo2 2 3 4 Servo3 6 7 Servo4 12 13 Servo5 14 15 XTAL2 X1 Servo1 16 10 Servo6 Servo7 Servo8 GND 8MHz 070283 - 11 GND 2 4 6 8 10 1 3 5 7 9 RST SCK MISO VCC Connecteur ISP MOSI tion fort simple : deux servos fixés côte à côte par brides de câbles. L’un d’entre eux est fixé à une plaque de plexiglas qui sert de fond et sur l’axe du second servo, on monte un barreau d’aluminium de 6 mm de diamètre. Le premier servo sert d’articulation de la hanche. Les quatre pattes sont construites de la même manière. Si nous observons le mouvement de la marche chez un humain, nous constatons que le genou ne peut pas plier plus loin que lorsque la jambe est tendue. Vers l’arrière, il peut fléchir amplement, presque jusqu’à 180 degrés. L’articulation de la hanche, en revanche, peut se mouvoir tant vers l’avant que vers l’arrière. Nous avons monté les servos de manière à obtenir la même liberté de mobilité. L’excursion d’une patte se divise en 28 étapes. Pendant 22 de ces phases, la patte va (lentement) vers l’arrière, puis au cours des 6 dernières, vite vers l’avant. Les états du servo pour le genou et de celui pour la hanche sont répertoriés dans une table. Les servos sont activés à intervalle régulier et les valeurs enregistrées pour ces séries de nombres produisent un déplacement harmonieux de la patte. Les servos sur le flanc opposé du corps du robot doivent être inversés, sinon, les pattes iraient vers l’arrière. Il y a quatre pattes et le nombre d’étapes est de 28 pour chacune d’elles. Pour obtenir une démarche stable, on a prévu un décalage de 7 valeurs entre les séries de nombres (par exemple avant gauche 1, arrière droite 8, avant droite 15 et arrière gauche 22). Pour faire tourner le robot, nous faisons reculer les deux pattes de gauche et avancer celles de droite. Lors de la marche, on exécute toujours les 28 étapes du mouvement avant de retourner vérifier les informations des capteurs. Les pas s’exécutent donc complètement. Cela simplifie le logiciel et veille à ce que les pattes soient chaque fois dans la même position au moment de prendre une nouvelle décision sur la direction de la progression. La marge de détection des moustaches est telle que le robot ne risque pas de se trouver immobilisé si un pas complet a été franchi entre-temps. puce. Il convient de brancher hors tension les rupteurs des moustaches. Les yeux Les yeux de ce robot ne perçoivent rien, ils ont une fonction essentiellement décorative. Ce sont chaque fois deux LED rouges de 8 mm branchées en série. Elles s’alimentent sur le 5 V à travers une résistance de 150 Ω pour limiter le courant. Elles sont reliées à une ligne de sortie du microcontrôleur. Après chaque pas, elles s’éteignent un instant et lors des manoeuvres restent dans le même état. Le capteur PIR Il existe dans le commerce différents modèles de capteurs PIR, comme le Eltec-442 de Les moustaches On a utilisé deux microrupteurs simples pour les moustaches ; sur chacun d’eux, un fil de fer (rayon de vélo) est fixé. Une cosse pour câble a été fixée sur le fil et glissée sur la palette du microrupteur. On a intercalé deux écrous sous l’un des rupteurs pour que les moustaches ne soient pas à la même hauteur et ne se gênent pas mutuellement. Les contacts des rupteurs sont branchés entre bornes d’entrée du microcontrôleur et masse. Aucune résistance de polarisation n’est nécessaire, vu qu’elles sont prévues d’origine dans la 7-8/2007 - elektor 33 Acroname. Son gros inconvénient, c’est le prix. Il y a aussi le HI-859 de Conrad. Lui, son désavantage est la difficulté de raccordement : le signal doit être amplifié avant d’être utilisable. Nous avons préféré choisir un capteur très connu et relativement peu coûteux, il s’agit d’un détecteur de mouvement que l’on trouve dans le marché de la construction pour une dizaine d’euros. Nous avons retiré de l’appareil la platine porteuse du capteur et installé le capteur lui-même sur une autre platine. Il y en aura trois l’un près de l’autre, de manière à diviser l’image en plusieurs domaines, de quoi fournir davantage d’informations sur lesquelles se baser pour décider de la marche à suivre. Nous utilisons aussi la platine qui portait le capteur. Elle recèle toute l’électronique nécessaire pour former un signal numérique directement utilisable. Le tout pour moins de 10 € par capteur ! Ces composants ont en théorie un angle d’ouverture de 140 degrés. En pratique, le panorama est encore plus large en raison de réflexions et d’autres phénomènes. Une démarcation obtenue par occultation partielle à l’aide d’un petit bout de tube pour installation électrique de 2 à 3 cm de long n’est certainement pas un luxe inutile. En assurant un chevauchement des domaines de détection des trois capteurs, on peut distinguer cinq zones. Pour rendre visible ce que les capteurs PIR détectent, il y a une LED à la sortie de chaque capteur, raccordée au 5 V de l’alimentation par une résistance. De cette façon, la LED s’allume tant que le PIR ne détecte rien et s’éteint quand le PIR associé aperçoit une masse chaude en mouvement. port ISP accessible. Le logiciel du robot est rédigé en BASIC et compilé à l’aide de BASCOM-AVR [2]. C’est un excellent compilateur pour les processeurs AVR d’Atmel. La version en logiciel libre de BASCOM-AVR peut aisément traiter 2 Ko. Le programme pour Hunter est disponible gratuitement sur le site web d’Elektor (www.elektor.fr réf. EPS 070283-11). Alimentation Le robot est alimenté en 7,2 V sur un accumulateur issu du modélisme. Nous y avons installé un interrupteur général. La tension d’alimentation pour l’électronique est stabilisée à 5 V par un habituel 7805 sous boîtier TO220. Les servos sont alimentés directement par l’accumulateur via l’interrupteur. Comportement Le nom du robot laisse présager de son comportement : c’est un chasseur. Sa mission consiste à reconnaître et suivre des cibles chaudes en mouvement, comme des humains ou des animaux. Dès qu’il en voit une, il la poursuit. S’il n’en voit pas, il fait tout au plus cinq pas dans l’espoir d’en découvrir une. Après ces cinq pas, il s’arrête et attend une nouvelle proie. Voici comment on pourrait résumer ses règles comportementales. 1. Si tu ne détectes rien, tu ne fais rien (zicht = 1) 2. Si zicht > 1, fais un pas (zicht = zicht – 1) 3. Contrôle les obstacles après chaque pas. Si tu en as détecté un, recule et tourne pour t’en éloigner (zicht = 6) 4. Si zicht < 5, vérifie les capteurs PIR. Si tu détectes quelque chose, tourne dans cette direction. Le sens de rotation peut être : à gauche, avant gauche, en avant (ne pas tourner, zicht est à 6) avant droite et droite (zicht = 6). Conclusion L’objectif était de faire un robot quadrupède au comportement amusant. On y parvient avec un budget raisonnable. La mémoire de son processeur est bien remplie avec le programme actuel, mais il est possible de trouver des astuces pour rendre l’algorithme comportemental plus efficient. Il reste donc quantité de possibilités d’expérimentations sur ce robot. Grâce au connecteur ISP à bord, la programmation est simple. Ce robot constitue un prélude, une mise en jambes, mais pas un but en soi. En chasse, donc ! (070283-I) Liens Internet [1] http://avrhelp.mcselec.com/Sample_ Electronics_cable_programmer.html [2] www.mcselec.com Microcontrôleur et compilateur Le microcontrôleur retenu est un AT90S2313 d’ATMEL (voyez-en le schéma à la figure 1). Il dispose de 2 Ko de mémoire de programme, il y a de la place pour y ranger de la réactivité intelligente. L’AT90S2313 a 15 broches d’E/S dont 3 sont utilisée par l’ISP. Lors des tests et en vue d’extensions du logiciel, une prise ISP est bien utile. Cette liaison est renvoyée sur le robot par l’intermédiaire d’un connecteur CANDA à 10 broches. Pour la programmation, on peut utiliser par exemple le programmateur Sample Electronics [1]. Il ne faut que 3 résistances pour en assurer le raccordement. De nombreuses lignes d’E/S sont nécessaires pour la commande du matériel : 8 pour les servos, 2 pour les moustaches, 2 pour les LED et 3 pour les capteurs PIR. Voilà déjà un total de 15. Aussi, les 3 PIR sontils reliés par des inverseurs (cavaliers) aux lignes de l’ISP sur le robot. En service normal, les PIR sont branchés au processeur. S’il faut charger un nouveau programme, on déplace les cavaliers pour rendre le 34 elektor - 7-8/2007 Naq’un-pied Abraham Vreugdenhil Simple, à part, mais un objectif, tel était le point de départ de ce « robot ». Ou est-ce abusif que de parler de robot? Il est fait d’une roue, d’un moteur, de capteurs, d’un microcontrôleur, de LED, de piles et de « pattes ». Quand le moteur tourne, alternativement, lentement, d’un tour à gauche, puis, de même, à droite, et que les « pattes » restent plantées sur le sol plus longtemps une fois que l’autre, il se déplace un peu vers l’avant. Comme la lumière l’attire, il s’agit bien d’un robot photophile. Voyons ses principaux composants. Roue Sa roue est une petite roue de caoutchouc ordinaire. Son adhérence est satisfaisante, parfois même excessive. Cette adhérence est déjà grande dans le plan de rotation mais elle l’est beaucoup plus dans un plan perpendiculaire à ce plan où elle manifeste une sérieuse résistance. Il est préférable que le robot se déplace dans le sens de rotation de la roue si l’on veut qu’il avance. Il serait donc mieux de monter une roue omnidirectionnelle. De telles roues sont dotées de petites billes ou rouleaux perpendiculaires au sens de rotation. Elles fonctionneraient ici mieux qu’une roue de caoutchouc. Capteur Le photocapteur est une vieille connaissance, le CNY-70. Il se compose d’une LED et d’une photodiode IR. On l’utilise le plus souvent pour permettre à un robot IC2 3 R3 R4 20 K1 GND GND SCK GND MISO GND 9 12 4 13 CNY70 14 8 15 7 16 6 MOSI 17 5 MISO 18 4 SCK 3 2 1 19 IC3 3 Kanda Dongle RST PB0 IC1 PB1 PD0 PB2 PD1 PB3 PD2 PB4 PD3 PB5 PD4 PB6 PD5 PB7 AT90S2313 XTAL1 1 5 PD6 1 2 3 7 8 9 11 XTAL2 4 2 4 CNY70 R2 M1 6 10 X1 R6 21k V+ 2 560 Ω MOSI 10 +4V8 R5 21k D2 560 Ω 560 Ω 1 D1 560 Ω R1 +4V8 de voir le sol ou une ligne tracée sur celuici. Nous pouvons aussi n’en utiliser que la photodiode. En mettant deux de ces capteurs en série, une résistance de chaque côté limitant un peu le courant lorsque la lumière est très intense, nous fabriquons un dispositif qui nous fournira, à leur point d’interconnexion, une tension variable en fonction de la différence d’éclairement de chacun d’eux. Reste à mesurer cette tension. Nous l’appliquerons donc à l’une des entrées de comparateur d’un microcontrôleur. Nous connectons, sur l’autre entrée, deux résistances, l’une à la borne d’alimentation positive, l’autre à celle d’alimentation négative. Nous pourrons lire le signal 8MHz 070284 - 11 de sortie du comparateur par l’intermédiaire d’une variable (bit) interne. À partir de là, nous saurons quel côté du robot est le plus éclairé et nous le commanderons en conséquence. Microcontrôleur et commande de moteur La plupart des microcontrôleurs peuvent délivrer des courants qui suffiront à nos besoins. Nous nous en servirons pour attaquer directement un moteur. S’il nous fallait un courant un peu plus intense, nous câblerions plusieurs sorties en parallèle. Un robot, le nôtre en tout cas, ne peut plus guère se passer d’un microcontrôleur. Notre choix s’est porté ici sur l’AT90S2313. Il est facile à programmer en BASIC à l’aide de BASCOM-AVR, dispose d’un comparateur, de lignes d’entrée/sortie en nombre suffisant, etc. Mieux encore, il nous offre une entrée de programmation ISP. Elle nous permettra, lors des essais et plus tard, de charger facilement un autre programme sur le robot. M Poursuivons... Une paire de LED de 3 mm agrémenteront le spectacle. Nous les connectons entre le processeur, par l’intermédiaire d’une résistance de 1 kΩ, et le pôle plus de l’alimentation. N’oublions pas l’alimentation, 4 mini-accus ou piles et leur support et un interrupteur. Le programme de Naq’un-pied est disponible sur le site d’Elektor sous la référence EPS070284-11. (070284-I) 7-8/2007 - elektor 35 Bolo Bolo est un robot en quête de lumière, bien calfeutré dans une sphère en plastique. L’avantage de la boule, c’est que si elle se cogne, elle peut toujours revenir en arrière par le même chemin. Si nous enfermons un robot dans un ballon, il pourra se promener librement et se dégager s’il a heurté un obstacle. Propulsion Pour que le robot arrive à faire avancer la boule, nous avons glissé sur l’axe de chaque moteur un morceau de tuyau de valve de bicyclette, question de lui donner du grip. Les axes reposent directement sur la surface intérieure de la sphère. En outre, le robot dispose d’une roue auxiliaire faite d’une perle de plastique. Au sommet du robot, il a encore un arceau ample destiné à le faire toujours retomber sur ses pattes, même après avoir été catapulté. Les moteurs Le régime des moteurs est élevé. Si nous voulons faire tourner le robot en permanence, il traversera très vite l’espace disponible. C’est pourquoi les moteurs s’allument une seconde puis s’arrêtent une seconde. Ensuite, on mesure la lumière pour décider dans quelle direction tourner pendant une seconde. Les moteurs sont alimentés par deux piles AAA en série, le reste de l’électronique, par un bloc de 9 V, suivi d’un régulateur de tension 7805. Un interrupteur double permet de commuter ensemble les deux tensions. Si les deux systèmes étaient alimentés par une seule source, l’enclenchement des moteurs pourrait provoquer un bref creux de tension qui provoquerait une mise à zéro du processeur. Pour éviter ce souci, il est raisonnable de garder les deux systèmes séparés. Comportement et extension Un développement possible est l’adjonction d’un récepteur RC5 qui permettrait de piloter le robot par une télécommande « ordinaire » et l’envoyer dans une direction donnée, ou de sélectionner différents 1 IC3 Électronique 36 +2V4 +5V 7805 BT2 BT1 2V4 9V 2x 1V2 R1 D4 1k D3 M1 R3 470 Ω D1 BP41W R4 1 14 15 13 12 16 P1 17 18 D2 BP41W R2 47k R 20 19 M M2 M L RST IC1 P1.2 P3.7 P1.3 P1.1 P3.5 P1.0 P3.4 P1.4 P3.3 P1.5 AT89C2051 P3.2 P1.6 P3.1 P1.7 P3.0 X1 X2 5 4 X1 10 11 9 9 1 8 2 7 3 6 4 3 5 2 6 7 DS I1 O1 I2 O2 I3 IC2 O3 I4 O4 I5 O5 I6 O6 I7 ULN2003 O7 16 15 14 13 12 11 10 GND 8 1k Le processeur choisi est un 89C2051. Il contient entre autres un comparateur dont nous allons avoir besoin. Comme cellules photosensibles, nous utilisons des photodiodes BPW41, deux en série. Le point commun se branche à l’une des entrées du comparateur. En série avec chaque BPW41, il y a une résistance de 1 kΩ pour limiter le courant dans les diodes quand elles sont exposées à une lumière intense. Sur la deuxième entrée du comparateur, un potentiomètre de 47 kΩ permet de régler la direction de sensibilité. Deux yeux sous la forme de LED sont reliés par une résistance de 470 Ω au processeur. Celui-ci commande les deux moteurs par l’intermédiaire de transistors Darlington. Comme nous n’en avions pas sous la main, le prototype a été construit avec un circuit intégré contenant un réseau de 7 transistors Darlington, un ULN2003, mais nous n’en utilisons que deux. S’il fallait davantage de puissance, on pourrait simplement brancher en parallèle leurs entrées et sorties. algorithmes (par exemple rechercher la lumière, la fuir ou agir au hasard). On peut imaginer des tas de comportements pour un robot. Dans le compilateur utilisé pour ce processeur, BASCOM-8051, il y a S1 470 Ω Abraham Vreugdenhil 12MHz 070295 - 11 elektor - 7-8/2007 2 +12V +5V K1 R2 une instruction spéciale pour la réception de signaux RC5. Facile donc de l’intégrer. Pour le moment, Bolo ne réagit qu’en chercheur de lumière. 2k7 13 25 Programmation 12 T1 24 R1 11 10k 23 10 BC547 22 9 21 20 1 2 R4 3 10k 6 7 8 9 11 5 4 T2 RST P3.0 P3.1 8 19 P1.7 IC1 18 P1.6 17 P1.5 P3.2 P1.4 P3.3 P1.3 P3.4 P1.2 P3.5 P1.1 P3.7 P1.0 16 15 14 13 12 AT89C2051 7 19 6 18 5 17 4 16 3 XL1 15 XL2 2 14 10 R3 20 1 10k BC547 DB25M R5 C1 1k Un simple programmateur suffit à transférer le code dans le 89C2051. BlowIt est un programmateur qui se compose en tout et pour tout des régulateurs de tension, deux transistors, quelques résistances et condensateurs [1]. Il y a aussi, bien sûr, un support de puce à 20 broches et un connecteur sub-D à 25 contacts. On peut tout assembler sur une petite platine perforée. L’auteur y a ajouté lui-même un transistor et une LED pour voir quand les données sont transmises au microcontrôleur. On trouve sur Internet le schéma de BlowIt accompagné de nombreuses informations. Un programmateur facile à commander à l’aide de BASCOM-8051 ou BASCOM-LT. Le programme pour Bolo est disponible au téléchargement sur le site web d’Elektor (EPS070295-11). (070295-I) Liens Internet : 1n 070295 - 12 [1] www.geocities.com/dinceraydin/8051/ index.html Babybot Il existe nombre de techniques différentes pour mettre un robot en mouvement. Dans la majorité des cas, la solution la plus simple s’appelle combinaison de moteurs électriques, servos et moteurs pas à pas. Et surtout dès lors que l’on a besoin d’une certaine puissance pour le déplacement. En ce qui concerne des objets de très petite taille, on peut penser à d’autres actionneurs, comme c’est le cas sur ce mini-robot. Ici, le terme « robot » est peutêtre prétentieux. Cette créature est pilotée de l’extérieur et ne comporte pas la moindre intelligence artificielle, mais sa manière de se déplacer est très particulière, pouvant, avec quelques modifications, être utilisée sur d’autres projets. Babybot marche à l’aide de 4 petits relais pour circuit imprimé ayant été modifiés spécialement à cet effet. Les capuchons de protection en plastique ont été enlevés 7-8/2007 - elektor mutation est en effet très petit. Les pattes ne peuvent pas non plus supporter de gros poids ou en déplacer. cela tient d’une part à la très faible force d’attraction de l’électro-aimant et de l’autre à la construction interne très fragile de ces relais miniatures. Il n’est pas exclu que la transmission entre l’aimant et le contact de commutation puisse tomber en panne. Le réparer en le remettant en place constitue, en fonction du relais utilisé, un défi notable. On peut difficilement parler d’approche solide, mais pourquoi ne pas l’essayer si on veut expérimenter. Le résultat est en outre très attrayant. et les pattes ont été soudées directement aux contacts de commutation. On aura vite compris que la taille de pas réelle d’une patte est extrêmement faible. Le « déplacement » d’un contact de com- (070278-I) Petite vidéo d’un robot se déplaçant : www.xj3.nl/_dreijer/backsite/willem/ babybot.avi 37 MOPS le robot Markus Bindhammer quence, le transistor conduit. Un courant peut alors traverser R1 vers la base de T2, de façon à faire également commuter ce transistor. Simultanément, C1 se charge par l’intermédiaire de la base T1 et les deux transistors disposent d’un courant de base plus élevé. Ils conduisent encore davantage (sont presque saturés). Le courant qui traverse T2, R6 et D3 est maintenant suffi- MOPS est un petit robot tout simple qui va bravement son petit bonhomme de chemin, vire et contourne les obstacles avec adresse. Dès que ses organes de la vue, une cellule photo-électrique à réflexion, détectent un obstacle, MOPS met la marche arrière, pivote autour d’une de ses deux roues pour se remettre en route au bout de quelques secondes, en marche avant cette fois, et poursuivre son exploration du plancher dans une autre direction. Vous le voyez tout de suite, sur le montage de la figure 1, MOPS est un « analogique » pur et dur. Les composants R1 à R4, T1, T2 et C1 forment un multivibrateur. Après la mise sous tension, un courant t r av e r s e R4 vers la base de T1. En consé1 S1 +4V5 samment élevé pour que la LED superlumineuse puisse clignoter de tous ses feux. Une fois C1 chargé, le courant de base de T1 ne suffit plus: le transistor se bloque et bloque aussi T2. La LED s’éteint et le jeu peut reprendre. La cellule photo-électrique à réflexion, dont la LED superlumineuse constitue l’émetteur, pourrait également fonctionner avec un éclairage permanent. Le clignotement offre toutefois deux avantages de poids: une écono mie d’énergie considérable et une meilleure visibilité, une LED qui clignote a plus de présence q u ’un e LED a ll u m é e e n permanence. Le récepteur qui répond à la LED de la cellule est T3, un phototransistor. Lorsqu’il est éclairé, et donc conduit, un courant de base circule vers T4. Avec 2 100k R3 T1 D3 T3 D4 D1 RE1 BC557 R9 180Ω 1k8 C1 R5 4k7 R6 180Ω R1 1N4148 M1 R2 M 1k8 1µ 16V D2 T4 P1 BC547 1N4148 BC547 10k R8 T5 2k2 R7 1k 560k R4 T3 T2 C2 D3 Enrobement plastique de protection contre la lumière ambiante M M2 BC547 070143 - 12 470µ 16V 070143 - 11 38 elektor - 7-8/2007 3 UM1 UM2 070143 - 13 R5, P1 et R7 on définit la sensibilité de telle façon que T4 ne commute pas pour un oui ou pour un non – un bref éclairement, par exemple. Plus la résistance du potentiomètre (éventuellement ajustable) est élevée, plus la cellule est sensible. Le fait que T4 ne conduise qu’au rythme du multivibrateur ne pose aucun problème puisque C2 met à disposition un réservoir d’énergie qui se charge complètement à la première commutation de T4. La ten- sion d’émetteur (et, avec elle, le courant de base de T5) ne diminue que lentement même si T4 se bloque pendant les pauses des impulsions, voire en l’absence complète de signal. Nous obtenons ainsi une temporisation de quelques secondes quand MOPS change de direction. T4 fait commuter un petit relais qui commande le sens de rotation des deux moteurs. Dans une des deux positions (relais non excité) la diode D2 conduit. Les deux moteurs tournent dans le même sens, MOPS avance. Dès qu’il détecte un obstacle, RE1 est excité et fait commuter, ce dont témoigne le feu de recul D4. Les moteurs sont polarisés comme le montre le schéma: D2 se bloque si bien que M2 s’arrête tandis que le sens de rotation de M1 s’inverse. De ce fait, MOPS change de direction et (espérons-le) s’éloigne de l’obstacle. Le relais relâche et MOPS reprend son voyage dans une nouvelle direction. La figure 2 représente l’oeil de MOPS: la LED et le phototransistor, protégé des éclairages parasites par un petit tube opaque, sont orientés (expérimentalement) de façon à détecter un obstacle distant de 10 cm. Comme MOPS ne réagit qu’à la lumière réfléchie par les obstacles, il détecte naturellement mieux les objets clairs et moins bien les objets sombres. Pour mieux éviter les collisions avec les obstacles trop noirs, on peut, par exemple, compléter le montage avec des palpeurs. La figure 3 présente le principe de la mécanique, simple, de commande. Chaque moteur forme une unité avec transmission et roue. (070143-I) Lien : www.elexs.de/robo1.htm Moteur à réducteur à moment de force important pour 5 € Bernhard Spitzer Au cours de sa quête à la recherche de solutions de moteur bon marché, l’auteur découvrit, dans un supermarché spécialisé dans le matériel de bricolage, des tournevis électriques alimentés par accu (figure 1). On en trouve pour de l’ordre de 5 € (481576 de Conrad NL); ils sont dotés d’un moteur puissant de la classe 380 ainsi que d’un réducteur multiple. La catégorisation en classes telles que 380, 540, etc., est très courante dans le monde du modélisme et renvoit 7-8/2007 - elektor à la série de moteurs de Mabuchi. La classe 380 se réfère au RS380 de Mabuchi avec d’un diamètre de 29 mm et d’une longueur de quelque 40 mm. La tension nominale est de 6 V à un courant maximal de 4 A environ, la puissance se situant dans les parages de 10 à 15 W en fonction du type concerné. (244511 de Conrad RFA par exemple). 1 Si l’on veut utiliser un tel moteur en tant que système d’entraînement de roue d’un robot, il est nécessaire que l’axe moteur soit doté d’un 39 35 20,3 15 8 11 30 2 10 10 M3 x 10 070347 - 11 roulement à billes, il faut en outre libérer le moteur de tout ballast excédentaire. On commence par dégager le compartiment accu puis le réducteur en repoussant les 2 gougeons (visibles sur les figures 1 et 5 à la jonction des parties orange et noire du boîtier) à l’aide d’une tige de 2 mm de diamètre. Une fois le réducteur sorti, il est facile de séparer les 2 demi-coquilles. Il ne reste plus qu’à replier les contacts du moteur pour extraire l’inverseur de polarité. On scie ensuite les 2 demi- coquilles de manière à ce que le bâti moteur tienne encore. On perce, dans la partie la plus basse de la demicoquille inférieure, un orifice destiné à recevoir une vis de fixation. Il nous faut encore un bloc de support encaissant la force de la roue. 5 3 On utilise à cet effet une plaquette de plastique (cf. le croquis coté de la figure 2). En vue d’obtenir un fonctionnement plus souple du moteur nous utilisons un roulement à bille 15 x 10 x 4 mm dont on se sert dans le monde du modélisme auto (de Tamiya par exemple). On pourra utiliser, pour réaliser la gorge de 15 mm de diamètre dans 4 laquelle il viendra se fixer, une mèche de perçage Forstner. Le perçage du bloc roulement se fait à la moitié de la taille du diamètre du châssis du moteur (20,3 mm dans le cas présent, de manière à ce que l’axe s’y accommode bien. On voit, en figure 4, le bloc de fixation du roulement terminé. Les 2 vis M3x16 servent à la fixation de l’ensemble sur le châssis du véhicule. On voit, en figure 5, un moteur de propulsion doté de son bloc roulement à billes. Les roues de propulsion seront soit dotées d’un perçage de 10 mm pour l’axe et collés directement à l’axe soit fixés à la colle sur l’une des mèches fournies avec le tournevis électrique, cet te dernière étant ensuite montée sur le moteur et fixée. (070347-I) « Tremblote » Abraham Vreugdenhil L’auteur a imaginé cette « construction » à l’intention de sa fille et l’a baptisé, le robot, pas sa fille, « Tremblote » en raison de son joli déplacement tremblotant. Il comporte un petit moteur doté d’une languette excentrée faisant office de balourd, d’un bornier, de deux pattes courtes à l’arrière et de deux pattes plus longues sur le devant. Les deux pattes arrières sont caoutchoutées. L’axe du moteur est orienté dans la direction déterminée 40 par les 2 pattes avant. En d’autres termes, la direction de vibration du balourd excentré est orienté lui dans la direction donnée par les pattes courtes. Lors de la mise en fonction du moteur, le balourd fait entrer le robot en vibration ce qui amène ce dernier à se déplacer. Il ne faut vraiment pas grand chose pour créer un tel objet, il suffit de jeter un coup d’oeil dans le tiroir où l’on stocke soigneusement toutes ces pièces de récupération dont on ne se servira jamais. Les enfants de tout âge raffolent de ce genre de « mobile ». (070288-I) elektor - 7-8/2007 Un robot détecteur d’obstacles 42 Batteries 4V8 K1 1 Piles 6V S1 24 Piles (6V) Batteries (4V8) DROITE GAUCHE 22 5 6 7 +V E GND 9 10 Servo 11 12 +V E GND Servo 6 21 2 S2 VIN SOUT SIN RES ATN IC1 P0 P15 P1 P14 P2 P13 P3 P12 P4 P11 P5 CB220 P9 P7 P8 4 R1 P10 P6 1 7 2 3 3 8 4 20 9 19 5 18 17 16 SUB D9 15 14 13 23 R2 1k Lorsque l’on fait ses premières armes en robotique, on est généralement pressé de réaliser un robot mobile qui dispose d’une certaine autonomie. C’est dans ce but que nous avons rédigé cet article qui va vous permettre, en un temps record, de réaliser un robot mobile capable de détecter et d’éviter les obstacles. Bien sûr, compte tenu de la relative simplicité des solutions employées, il pourra assez facilement être pris en défaut mais, sous réserve que vous preniez quelques précautions quant aux obstacles qui risqueront de se trouver sur son chemin, il fera déjà « son petit effet ». De plus, vous pourrez utiliser cette base de départ comme tremplin pour vos propres développements. Afin de résoudre les problèmes mécaniques, qui posent souvent problèmes à nombre de roboticiens amateurs, nous avons fait appel à une base « Rogue Blue » (www.roguerobotics.com) vendue en kit et très facile à assembler sans outil spécial. En outre, ce kit est distribué en France par Lextronic (www.lextronic.fr) qui peut le livrer dans tous les pays frontaliers. Comme vous pouvez le voir sur la photo, elle se compose de deux platines circulaires prédécoupées pouvant recevoir, en guise de moteurs de traction, deux servos de radiocommande. Ces derniers, fournis avec la base, sont déjà modifiés comme expliqué par ailleurs dans ce numéro, afin de leur permettre de tourner de façon continue. Deux roues à pneus de grand diamètre sont également livrées et se fixent directement sur les axes des servos, tandis que l’avant et l’arrière de la plaque inférieure du robot reçoivent des patins en téflon faisant office de roue folle, appelée encore roue jockey. Du Velcro adhésif permet de sécuriser un bloc support de piles ou de batteries rechargeables entre les deux platines circulaires, ce qui laisse libre l’intégralité de la platine supérieure pour recevoir l’électronique. Compte tenu de la tension d’alimentation des servos et de l’électronique, nous avons utilisé un bloc support pour quatre piles de 1,5 volt au format R6 ce qui permet d’y placer également des batteries NiMH de mêmes dimensions en cas d’usage intensif. Afin de permettre une mise en œuvre rapide de notre robot, nous avons fait appel à un détecteur d’obstacles à « moustaches ». Pour cela, deux microrupteurs à levier long, ou deux microrupteurs à levier ordinaire sur lesquels on soude un petit morceau de corde à piano de quelques cm de long, font l’affaire et sont placés sur la platine supérieure, de façon à former entre eux un angle de 45 à 60° environ dont la bissectrice est l’axe avant – arrière du robot. On dispose ainsi d’un détecteur d’obstacles à l’avant gauche et d’un autre à l’avant droite. L’intelligence du robot est confiée à un module Cubloc CB 220 de Comfile Technology (voir pages centrales de ce même numéro) ce qui nous permet tout à la fois d’écrire un programme très simple et de réaliser un schéma électronique qui l’est tout autant, comme vous pouvez le constater à l’examen de la figure. Les ports P0 et P1 du Cubloc sont programmés en entrées et reçoivent les informations émanant des détecteurs d’obstacles. Elles sont donc au niveau bas en temps normal et au niveau logique haut 1k C. Tavernier 070298 - 11 lorsque l’une ou l’autre des moustaches est activée, c’est à dire en présence d’un obstacle. Les ports P5 et P6 sont quant à eux programmés en sorties et commandent les servos de propulsion. Le choix de ces ports est impératif car l’instruction de génération de signaux PWM du Cubloc que nous allons utiliser ne peut fonctionner qu’avec eux. L’alimentation des servos a lieu directement à partir du bloc de 4 piles de 1,5 volt tandis que, pour le Cubloc, nous utilisons son entrée VIN afin de bénéficier de la régulation interne à 5 volts dont il dispose. Par contre, si vous faites appel à des batteries NiMH à la place des piles, il faut utiliser l’entrée VDD pour alimenter le Cubloc car la tension disponible dans ce cas n’est plus que de 4,8 volts. Le connecteur DB9 est destiné à raccorder le Cubloc à un PC afin de le programmer avec le logiciel que nous allons vous proposer dans un instant. Compte tenu de la simplicité du schéma, le montage pourra être réalisé sur une plaquette perforée ou encore sur une platine de test CB220-Proto elektor - 7-8/2007 qui dispose déjà d’origine de ce connecteur pré-câblé. Le logiciel nécessaire à la commande de cet ensemble est très simple, même pour quelqu’un qui n’a que de faibles notions de programmation. Le langage Basic du Cubloc est en effet tout à la fois simple est très puissant. Son listing source est à votre disposition sur le site Internet d’Elektor ainsi que sur celui d e l’auteur (www.tavernier-c.com) mais il est tellement cour t que vous pouvez aussi le saisir directement dans l’éditeur de Cubloc Studio qui est l’outil de développement (gratuit) du Cubloc. Cet outil est téléchargeable sur www.comfiletech.com ou sur www.lextronic.fr. Ce listing se laisse très facilement analyser. Après avoir défini le type de Cubloc utilisé et le sens de fonctionnement des ports P0, P1, P5 et P6, on définit également une variable appelée obstacle. Le programme principal peut alors commencer sous forme d’une boucle Do Loop permanente. On commence par tester le passage au niveau haut de l’un ou l’autre des ports P0 et P1 et, si c’est le cas, le robot est arrêté au moyen des deux instructions PWM qui suivent. Compte tenu du fait que l’on utilise des servos de radiocommande modifiés, rappelons qu’ils sont arrêtés lorsqu’ils reçoivent des impulsions de 1,5 ms ; qu’ils tournent à pleine vitesse dans un sens pour des impulsions de 2 ms et à pleine vitesse dans l’autre pour des impulsions de 1 ms. Notez également que, comme les servos sont montés à l’inverse l’un de l’autre dans la base Rogue Blue, il faut les faire tourner en sens inverse l’un de l’autre pour faire avancer ou reculer le robot. En raison de leurs tolérances mécaniques et électriques, l’arrêt n’est pas toujours obtenu exactement pour des impulsions de 1,5 ms. Il vous sera donc peut être nécessaire de retoucher le premier paramètre des instructions PWM (3410 dans cet exemple). Une fois le robot arrêté, on teste si c’est la moustache gauche ou la droite qui a été actionnée et on positionne en conséquence la variable obstacle. Un dernier test vérifie si les deux moustaches ont été actionnées simultanément et, dans l’affirmative, ce qui signifie que le robot a rencontré un obstacle frontal, une marche arrière est provoquée (impulsions de 2 ms 7-8/2007 - elektor Listing source complet du programme de gestion du robot détecteur d’obstacles ‘ Robot détecteur d’obstacle sur base Rogue Blue Const Device = CB220 Dim Obstacle As Byte Input 0 ‘ Entrée moustache droite Input 1 ‘ Entrée moustache gauche Low 5 ‘ P5 en sortie pour PWM Low 6 ‘ P6 en sortie pour PWM Delay 1000 Do If In(0)=1 Or In(1)=1 Then ‘ Une moustache activée ? Pwm 1,3410,32768 ‘ Arrêt des servos Pwm 0,3410,32768 Pause 800 If In(0) = 1 Then ‘ Moustache droite ? Obstacle = 1 Else Obstacle = 2 ‘ Moustache gauche ! End If If In(0) = 1 And In(1)= 1 Then ‘ Moustaches d. et g. ? Obstacle =3 End if Pwm 1,3590,32768 ‘ Marche arrière Pwm 0,3195,32768 Pause 1500 Else Obstacle = 0 ‘ Aucune moustache activée End If ‘ Interprétation de la variable Obstacle Select Case Obstacle Case 0 Pwm 0,3590,32768 Pwm 1,3195,32768 Case 1 Pwm 0,3600,32768 Pwm 1,3600,32768 Pause 1000 Case 2 Pwm 1,3180,32768 Pwm 0,3180,32768 Pause 1000 Case 3 Pwm 0,3750,32768 Pwm 1,3750,32768 Pause 1500 End Select Loop ‘ Aucun obstacle ‘ Marche avant ‘ Obstacle à droite ‘ Léger virage à gauche ‘ Obstacle à gauche ‘ Léger virage à droite ‘ Obstacle frontal ‘ Demi-tour complet 43 sur un servo et de 1 ms sur l’autre). La variable obstacle est ensuite analysée au moyen d’un select case que le puissant Basic du Cubloc a emprunté au langage C. Si la variable obstacle vaut 0, aucun obstacle n’a été rencontré et notre robot part en marche avant. Si la variable obstacle vaut 1 ou 2, un obstacle a été rencontré à droite ou à gauche et un demi-tour en sens inverse est donc exécuté. Par contre, si la variable obstacle vaut 3, un obstacle frontal a été rencontré et le robot fait un demi-tour complet. Attention ! Selon ce que vous aurez appelé avant ou arrière et gauche ou droite sur votre robot personnel, il se peut que vous ayez à permuter les instructions PWM suc- cessives du listing que nous venons de présenter pour qu’elles provoquent bien les mouvements attendus. Il se peut également que vous ayez à retoucher le premier paramètre des diverses instructions PWM. Nous vous avons expliqué pourquoi ci-dessus pour l’arrêt mais le même phénomène se manifeste pour la rotation des servos à pleine vitesse dans un sens ou dans l’autre. Si votre robot se déplace « de travers » lorsqu’il roule en marche avant ou en marche arrière, c’est tout simplement que les servos ne tournent pas à la même vitesse pour des impulsions de la même largeur. Il suffit alors de retoucher délicatement le premier paramètre de l’une ou l’autre des instructions PWM pour parvenir au bon résultat. Ne vous en privez pas, la mémoire de programme du Cubloc est reprogrammable quasiment à l’infini (10 000 cycles minimum garantis par le fabricant du microcontrôleur qui l’équipe !). Après un certain temps d’utilisation, vous vous rendrez sans doute compte des limitations de ce robot. Libre à vous alors de le faire évoluer en lui ajoutant, par exemple, des détecteurs d’obstacles du même type mais à l’arrière, un détecteur d’obstacles lointains à ultrasons, une fonction de suivi de ligne, etc. Ce numéro d’Elektor devrait déjà vous fournir quelques bonnes idées de départ pour cela. (070298-I) Un robot chercheur de lumière B. Broussas Quel que puisse être l’intérêt des nombreuses formes de robot qu’il est aujourd’hui possible de réaliser, le robot mobile reste l’étape incontournable par laquelle tout amateur de robotique doit passer, et ce pour au moins deux raisons. Le robot mobile présente un concentré des difficultés, et donc des solutions, que l’on peut être amené à rencontrer en robotique. Il faut en effet régler tout à la fois des problèmes de mécanique et de cinétique afin de gérer ses déplacements, des problèmes de capteurs, dont la diversité peut être extrême selon ce que l’on souhaite faire détecter, ou au contraire éviter, des problème d’intelligence comportementale pour la prise en compte des informations délivrées par ces capteurs, etc. Mais la deuxième raison pour laquelle l’amateur de robotique doit passer par la case « robot mobile » est souvent beaucoup moins prosaïque puisqu’elle vise tout simplement à impressionner son entourage (parents, amis, petit(e) ami(e)). Quoi de plus impressionnant en effet que cette « chose », tout droit sortie d’un film de science fiction des années 50, qui se déplace toute seule en suivant une ligne tracée par terre, en évitant les pieds des chaises ou bien encore en répondant à un signal de son maître ? Vous l’aurez compris, débutants en robotique de tous poils, c’est donc un robot mobile que nous allons vous proposer de réaliser. Et pour que vous soyez rapidement capable de voir ce que vos mains auront produit, nous avons choisi des solutions simples mais néanmoins suffisamment efficaces pour produire un certain effet. 44 +6V C4 C3 470µ 16V 100n Servo +V 13 14 R1 R2 6 3 4 1 5 PWR +5V P6 IC1 P7 E GND P0 P1 P2 RES PCO BS1-IC PCI P3 P4 P5 7 8 Servo 9 10 +V 11 E 12 GND GND C1 C2 100n 100n 2 070306 - 11 Notre robot est tout simplement un robot chercheur de lumière ; une sorte de papillon de nuit (à roulettes) si vous préférez puisque, tel son homologue du monde du vivant, il va invariablement se diriger vers la source la plus lumineuse qu’il pourra déceler dans la pièce où vous le ferez évoluer. Afin de simplifier sa réalisation et de vous permettre d’être opérationnel en quelques heures, voire moins, après avoir lu cet article, nous vous proposons de faire appel à une base mécanique disponible en kit. Comme nous avons opté pour une propulsion par des moteurs de servos modifiés, nous vous suggérons deux bases différentes : la base Rogue Blue de Rogue Robotics (www.roguerobotics.com) ou bien encore la base Carpet Rover 2 de LynxMotion (www.lynxmotion.com). Bien sûr, si vous avez des talents de mécanicien, rien ne vous interdit de réaliser une telle base vous-même. Il suffit qu’elle soit propulsée par deux servos de radiocommande modifiés, et donc qu’elle dispose à l’avant et/ou à l’arrière, d’une roue folle ou roue jockey. La modification destinée à transformer des servos en moteurs de propulsion est expliquée par ailleurs dans ce numéro mais, si vous avez peur de ne pas la réussir, sachez que vous pouvez également, depuis assez peu de temps il est vrai, acheter de tels servos déjà pré-modifiés par leur fabri- elektor - 7-8/2007 cant. Voyez par exemple Lextronic pour cela (www.lextronic.fr). Pour ce qui est du « cerveau » de notre robot, et afin de vous montrer qu’il n’est pas toujours nécessaire de faire appel au dernier microcontrôleur 32 bits sorti, nous avons décidé de faire appel au plus petit des Basic Stamp, à savoir le Basic Stamp I. Son schéma complet adopte donc l’allure visible sur la figure. Les deux ports P0 et P1 du Basic Stamp I sont utilisés pour commander les servos de propulsion droit et gauche. La luminosité quant à elle est mesurée grâce à deux photorésistances ou LDR (appelées encore cellules CdS dans certaines documentations) connectées sur les ports P6 et P7 du Basic Stamp I. Le curieux mode de connexion utilisé ici permet de faire appel à une instruction particulière du Basic Stamp I, l’instruction POT, qui mesure le temps de charge d’un condensateur connecté sur un de ses ports, c’est à dire encore la résistance de la LDR et donc la luminosité à laquelle elle est soumise. Afin que le robot puisse se diriger vers la zone la plus lumineuse de la pièce dans laquelle il évolue, il faut donc placer ces deux LDR orientées vers l’avant du robot en les séparant l’une de l’autre par un petit morceau de carton ou de circuit imprimé opaque afin qu’elles ne puissent pas toutes deux recevoir le même éclairement. L’ensemble peut être alimenté par quatre piles de 1,5 volt. Cette tension est directement appliquée aux servos et à l’entrée PWR de tension non régulée du Basic Stamp I. Attention ! Ne reliez en aucun cas les alimentations des servos à la sortie + 5 V du Basic Stamp I ; son régulateur 5 volts intégré n’apprécierait pas ! La partie logicielle de notre robot est au moins aussi simple que sa partie matérielle comme vous pouvez en juger à l’examen du listing ci-dessous : PINS = 0 DIRS = %00001111 SYMBOL RightStop = 150 SYMBOL LeftSTop = 150 SYMBOL Move = 30 SYMBOL LightDif = b2 SYMBOL RightLDR = b6 SYMBOL LeftLDR = b7 Main : POT 7, 128, LeftLDR POT 6, 128, RightLDR LightDif = RightLDR – LeftLDR b0 = RightStop + Move - LightDif b1 = LeftStop - Move + LightDif PULSOUT 0, b0 PULSOUT 1, b1 GOTO Main Ce listing se laisse très facilement analyser. En effet, après une première phase de définition des étiquettes utilisées et de réservation des RAM du Basic Stamp I, on procède à la mesure de lumière grâce à l’instruction POT. Cette instruction renvoie, dans la variable LeftLDR (ou RightLDR) un nombre qui est l’image de la résistance des LDR connectées sur P6 et P7 divisée par la constante qui précède appelée facteur d’échelle. Il vous faudra peut-être d’ailleurs ajuster ce paramètre en fonction des caractéristiques des LDR que vous utiliserez. Les valeurs ainsi obtenues sont soustraites l’une de l’autre afin de disposer d’une information de différence d’éclairement des deux cellules. Le calcul de la durée des impulsions à appliquer aux servos peut alors être réalisé en notant que : RightStop et LeftStop sont les valeurs permettant d’obtenir l’arrêt des servos, et que Move est un paramètre destiné à fixer la vitesse de base des servos, auquel est ajouté ou soustrait le résultat de la différence d’éclairement. Ainsi par exemple, si LightDif vaut 50, b0 vaudra 150 + 30 – 50 soit 130 tandis que b1 vaudra 150 – 30 + 50 soit 170. Sachant que la résolution de l’impulsion PULSOUT est de 10 µs, le programme génèrera donc des impulsions de 1,3 ms à destination d’un servo et de 1,7 ms à destination de l’autre, provoquant la rotation du robot dans la direction de la LDR qui reçoit le plus de lumière. Ce programme est donc parfaitement fonctionnel mais, compte tenu des dispersions des caractéristiques tant des servos vis à vis de leurs impulsions de commande que des résistances des LDR, il vous sera sans doute nécessaire de retoucher certains paramètres numériques pour obtenir un résultat satisfaisant. Pour cela notez que : • RightStop et LeftStop sont égaux au 1/10 de la largeur des impulsions provoquant l’arrêt des servos droite et gauche. • Move permet de définir la vitesse de rotation des servos lorsque le robot se déplace en ligne droite. Il est égal au 1/10 ème de l’écart entre la largeur des impulsions provoquant l’arrêt et la largeur des impulsions désirées pour un mouvement en ligne droite. • Les coefficients 128 utilisés dans les instructions POT peuvent également être ajustés entre 1 et 255 afin d’obtenir un comportement satisfaisant du robot compte tenu des LDR utilisées et l’éclairage ambiant du local dans lequel le robot évolue. Notez également que si votre robot semble fuir la lumière au lieu de se diriger vers elle, vous avez très probablement inversé le câblage des servos droite et gauche ou des LDR droite et gauche (tout cela étant bien sûr relatif selon ce que l’on appelle l’avant et l’arrière du robot). À vous de jouer ... (070306-I) Détecteur d’obstacles proches à infrarouges B. Broussas Si les ultrasons sont bien adaptés à la détection d’obstacles lointains, ils sont totalement inutilisables pour des obstacles proches, c’est à dire lorsque la distance de détection arrive au niveau du centimètre, voire moins. Dans ces conditions deux solutions sont utilisables : le pare-choc 7-8/2007 - elektor ou assimilé qui actionne un ou plusieurs microrupteurs, mais cela reste une solution mécanique, ou le détecteur à infrarouges que nous vous proposons de réaliser maintenant et qui allie l’élégance de l’électronique à l’absence de toute pièce en mouvement. Le principe d’un tel détecteur est très simple. Un organe émetteur, qui sera ici une simple LED, émet devant elle un faisceau lumineux infrarouge, plus ou moins directif. Placé à côté de cet émetteur, un organe récepteur qui peut être une photodiode ou un phototransistor, est convenablement orienté afin de ne rien recevoir en temps normal. Dès qu’un obstacle est présent à une distance adéquate, il renvoie une par- 45 +U +UB R4 10k 10k R3 22k R2 270Ω R1 2 IC1 P1 3 C1 C2 10n 47µ 16V 8 IC2.A D 1 4 Obstacle 10k lin P2 IC2 = LM339 5 R7 22k R6 10k R5 6 IC2.B G 7 R8 10k 10k lin IC3 270Ω tie de la lumière émise par la LED sur la photodiode ou le phototransistor et la présence d’un signal en sortie de ce dernier indique alors la proximité de cet obstacle. La distance jusqu’à laquelle le procédé fonctionne correctement dépend bien évidemment de nombreux facteurs : puissance lumineuse émise par la LED, sensibilité du capteur mais aussi et surtout qualités réfléchissantes de l’obstacle. Un chat noir sera ainsi beaucoup moins facilement détecté qu’un mur blanc ! Notez, pour répondre à une question fréquemment posée en cours de robotique, que ce principe fonctionne aussi bien en lumière visible qu’avec des infrarouges mais que l’usage de ces derniers permet tout simplement d’éviter, dans une certains mesure, l’éblouissement du capteur par la lumière ambiante. Bien sûr, si vous utilisez un robot muni d’un tel capteur en plein soleil ou sous un projecteur halogène, cet effet anti-éblouissement risque d’être assez peu efficace vu la richesse en rayonnement infrarouge de telles sources ! Notez également que ce système n’est pas un télémètre et qu’il est donc incapable de donner la moindre information de distance par rapport à l’obstacle. En effet, le seul paramètre lié à cette distance est l’amplitude du signal réfléchi, mais celleci dépend aussi, et dans une très large mesure, des propriétés réfléchissantes de l’obstacle (pensez au chat noir et au mur blanc évoqués ci-dessus). Ceci étant vu, sachez que notre détecteur est capable de fonctionner dans une plage qui s’étend de quelques mm à une vingtaine de mm environ selon le type de capteur utilisé. En outre, il n’est pas limité à de la simple détection d’obstacles au sens où on l’entend habituellement. Par exemple, dans le cas d’un robot destiné à rester sur une table, il suffit de placer judicieusement de tels détecteurs en partie périphérique sous le châssis du robot. Dès que ce der- +U 070300 - 11 nier s’approche trop près du bord de la table, le capteur cesse de recevoir le signal réfléchi par celle-ci, ce qui lui indique qu’il doit faire demi-tour. La réalisation de notre détecteur d’obstacles à infrarouge est fort simple comme le montre la figure qui, compte tenu du circuit intégré utilisé, permet d’en fabriquer deux d’un coup, ce qui n’est pas inutile. En effet, comme la zone de détection d’un tel système est relativement limitée, nous avons prévu d’utiliser deux capteurs, que nous avons appelés D et G pour droite et gauche, mais cela n’a rien d’impératif quant à leur position sur le robot. La figure présente donc le schéma d’une seule voie ; l’autre étant évidemment identique avec seulement C1 et C2 comme condensateurs de découplage communs. La LED contenue dans le détecteur IC1 est alimentée de manière permanente au travers de la résistance R1, tandis que le collecteur du phototransistor contenu dans ce même détecteur est ramené au positif de l’alimentation par R2. On dispose donc, en ce point, d’une tension proche de l’alimentation lorsque le transistor est bloqué, c’est à dire encore lorsqu’il ne reçoit pas de lumière et donc qu’il n’y a pas d’obstacle. Ce niveau baisse d’autant plus que le transistor devient conducteur, c’est à dire encore lorsqu’un obstacle suffisamment réfléchissant et/ou proche renvoie la lumière émise par la diode sur le phototransistor. Cette information est mise en forme par le comparateur intégré IC2A dont on peut ajuster le seuil de basculement au moyen de P1. On peut ainsi adapter le montage à divers capteurs et régler, dans une certaine mesure, la plage de détection. La sortie du montage est compatible TTL s’il est alimenté sous 5 volts et, compte tenu du mode de connexion des entrées de IC2A, elle est au niveau logique haut en présence d’un obstacle. La réalisation ne présente aucune difficulté mais l’efficacité du montage dépend du bon choix des capteurs. Nous vous proposons trois références que nous avons essayées, dans une gamme de prix qui s’étend de 1,5 à 12 euros environ, mais rien ne vous interdit, bien au contraire, de tester d’autres modèles, voire même de réaliser votre propre capteur avec une LED et un phototransistor infrarouges de votre choix. Le capteur le moins cher est le CNY70 (environ 1,5 euro). Il ne détecte qu’à de très courtes distances, de l’ordre de 5 mm, et se trouve très facilement ébloui par la lumière ambiante. Pour quatre fois plus cher environ, nous avons trouvé le HOA 709-001 d’Honeywell, disponible entre autres chez Radiospares. Il ne détecte lui aussi que jusqu’à 5 mm environ mais avec une efficacité bien meilleure que celle du CNY70, et il s’avère plus difficile à éblouir. Enfin, si vous doublez encore la mise (soit huit fois le prix du CNY70) vous pouvez faire appel au HOA 1180-003, toujours d’Honeywell, très difficile à éblouir et qui détecte jusqu’à 15 mm de distance. (070300-I) Un inclinomètre pour votre robot C. Tavernier Si votre robot mobile a pour seule vocation d’arpenter le carrelage ou le parquet 46 de votre domicile, il est assez peu probable qu’il ait besoin du capteur que nous vous proposons de décrire dans cet article. Par contre, s’il doit affronter les dures réalités du sol du monde extérieur, avec ses trous et ses bosses, un inclinomètre peut elektor - 7-8/2007 220k 47 Ω 220k 47 Ω s’avérer fort utile afin qu’il ne puisse pas chavirer à la première déclivité un tant soit peu importante. Avant que l’électronique sache accomplir les prouesses auxquelles elle nous a habitués aujourd’hui, un inclinomètre était un système purement mécanique avec toutes les difficultés de mise en œuvre, l’encombrement et les imprécisions que cela impliquait. Autant dire que son utilisation sur un robot amateur était, sinon impossible, du moins très difficile. Depuis quelques années déjà, ce lement à la surface de la terre, il n’est plus le cas grâce à la mise est influencé par l’accélération de 1 +6V...+12V sur le marché par Analog Devices la gravitation terrestre et peut donc indiquer une inclinaison gauche d’accéléromètres « solid state », R2 c’est à dire réalisés sous formes de – droite ou roulis (le « roll » de nos circuits intégrés, ne comportant amis de langue Anglaise) ou bien aucune pièce mobile visible. encore avant – arrière ou tangage (le C1 C4 En fait, il nous est toujours impos« tilt » toujours en langue Anglaise). 100n 10n sible de mesurer une accéléraOn constitue donc bien de la sorte 8 2 8 X tion sans mettre en œuvre une un inclinomètre deux axes. 1 VDD IC2.A pièce mobile mais celle-ci est Cette inclinaisons peut être exploi2 7 3 BIAS XOUT R1 aujourd’hui constituée par une tée sous forme absolue si l’on désire IC1 4 5 minuscule structure en polysiliconnaître exactement l’angle fait NC NC IC2 = OP284 ADXL311 cium suspendue par quatre ressorts par l’inclinomètre, et donc le cir1 6 5 ST YOUT Y du même matériau au dessus de cuit imprimé qui le supporte, et la 7 COM IC2.B la puce du circuit intégré constisurface du sol, ou bien sous forme 6 3 4 tuant l’accéléromètre. Lorsque cet relative si l’on veut juste un indicaC2 C3 équipage mobile est soumis à une tion limite de ce que peut supporter accélération, il se déforme et cette le robot avant de basculer. 47n 47n déformation est mise en évidence Dans le cas de l’ADXL311 ou de 070305 - 11 par la variation de capacité qui se l’ADXL320 l’inclinaison absolue est produit entre une plaque située donnée par les relations : sur l’équipage mobile et deux plaques fixes, placées sur la puce elle-même. Tangage = asin (AX /AX0) et Les plaques fixes se voient appliquer deux chez les détaillants. S’il advenait qu’il dissignaux rectangulaires en opposition de paraisse totalement, il pourrait être remRoulis = asin(AY/AY0) phase qui, lorsque la plaque mobile est placé par l’ADXL320, beaucoup plus récent soumise à une accélération et donc se et électriquement compatible, et dont seul où A X et AY sont les tensions analogiques déplace, deviennent déséquilibrés et perle brochage est différent. délivrées par l’accéléromètre lorsqu’il est mettent de disposer d’une tension proL’ADXL311 renferme en fait deux accéincliné et AX0 et AY0 les tensions délivrées portionnelle à l’accélération grâce à une léromètres très sensibles, placés à angle lorsqu’il est parfaitement horizontal. démodulation de phase. droit avec un positionnement meilleur que Le schéma d’utilisation de l’accéléromètre Tout cela passe bien sûr totalement ina0,1°. De ce fait, et si on le place parallèse résume à très peu de choses comme le perçu de l’utilisateur montre la figure 1. Les qui dispose, en sorseuls éléments impor2 tie du circuit intégré tant sur cette figure +6V...+12V accéléromètre, d’une sont en fait les condenR2 information qui est le sateurs C2 et C3 qui fil20 reflet de l’accélératrent la tension de sor1 tion enregistrée, sous tie de l’accéléromètre. MCLR 11 18 RC0 RC7 forme analogique ou En effet, ce dernier préC1 C4 12 IC3 RC6 17 RC1 numérique selon le sente une bande pas13 16 100n 10n RC2 RC5 type de circuit choisi. sante de plusieurs kHz 8 2 14 15 RC3/SCL RC4/SDA 8 1 Pour notre applicaet peut donc réagir à VDD IC2.A PIC16F876 2 7 3 9 21 tion robotique, nous des vibrations très rapiBIAS XOUT OSC1 RB0 R1 10 22 OSC2 RB1 IC1 C5 avons décidé de retedes, ce qui n’est pas ce 4 5 2 23 NC NC RA0/AN0 RB2 IC2 = OP284 nir un accéléromèque l’on souhaite dans 3 24 10µ ADXL311 RA1/AN1 RB3 16V tre relativement peu une application en tant 1 6 5 4 25 ST YOUT RA2/AN2 RB4 7 5 26 coûteux sous forme qu’inclinomètre. Avec RA3/AN3 RB5 COM IC2.B 6 6 27 RA4/T0CKI RB6 de l’ADXL311 d’Anales valeurs choisies ici, 3 4 7 28 RA5/AN4 RB7 log Devices. Notez la bande passante est C2 C3 cependant dès à prélimitée à 100 Hz ce qui 8 19 47n 47n sent que ce circuit est largement suffisant. n’est plus produit Les deux amplificateurs 070305 - 12 mais qu’il est encore opérationnels montés largement disponible en suiveurs permettent 7-8/2007 - elektor 47 la tension délivrée 220k 47 Ω d’éviter toute influence externe sur ces tre avec un microcontrôleur PIC dispo ‘ lorsque l’inclinomècondensateurs de filtrage et permettent de sant d’un convertisseur analogique/digital tre est horizontal raccorder l’accéléromètre sur n’importe intégré, tandis que la figure 3 présente le quelle entrée de microcontrôleur ou de même type de schéma mais avec cette pour récupérer l’information de tangage convertisseur analogique/digital sans préfois-ci un Cubloc CB220. avec un Cubloc CB220 caution particulière. Nous ne vous proposons aucun proAlors que vous écrirez par exemple : Le seul petit problème que vous risquez de gramme pour exploiter l’information délitilt = Adc_Read(0) rencontrer en tentant de réaliser ce monvrée par l’inclinomètre car, dans un cas tilt = tilt - 512 tage est que l’accéléromètre est proposé en comme dans l’autre, il suffit de deux ins‘ à ajuster en fonction de boîtier CMS dont la soudure sur un circuit tructions pour disposer de l’information de la tension délivrée imprimé d’amateur n’est pas toujours facile. tangage ou de roulis. ‘ lorsque l’inclinomètre Sachez donc qu’il existe aujourd’hui un Ainsi par exemple écrirez-vous : est horizontal tilt = Adin(0) module, de référence Accel chez Lextrotilt = tilt – 512 nic (www.lextronic.fr), qui comporte tous pour récupérer l’information de tan‘ ajuster en fonction de les composants de la gage ave c un PIC programmé en Basic figure 1 rassemblés sur 3 un minuscule circuit (compilateur MikroR2 Basic et convertisseur imprimé de 15 mm sur analogique/digital 20 mm (voir photo). L’utilisation de notre 10 bits dans le cas de 21 accéléromètre en tant cet exemple). +6V...+12V C1 C4 1 24 SOUT VIN qu’inclinomètre quant Les mêmes instructions 2 100n 10n SIN à elle se résume à seront bien évidem8 2 3 22 8 ATN RES 1 mesurer ses tensions ment utilisées pour VDD IC3 IC2.A 2 7 3 5 20 analogiques de sortie le roulis, mais avec la BIAS XOUT P0 P15 R1 6 19 IC1 P1 P14 sur ses deux axes et voie analogique n° 1 si 4 5 7 18 NC NC P2 P13 IC2 = OP284 à en soustraire la tenvous avez adopté les 8 17 ADXL311 P3 P12 sion délivrée au repos, schémas de câblage 1 6 5 9 16 ST YOUT P4 P11 7 10 CB220 15 c’est à dire lorsque son des figures 2 ou 3. Il ne P5 P10 COM IC2.B 6 11 14 3 P6 P9 circuit imprimé supvous restera plus alors 4 12 13 P7 P8 port est parfaitement qu’à exploiter ces donC2 C3 parallèle à la surface nées afin d’éviter que 4 23 47n 47n du sol. votre robot ne se casse La figure 2 présente la figure sur un terrain 070305 - 13 un exemple d’utilisatrop pentu pour lui ! tion de cet inclinomè(070305-I) Capteur pour robot suiveur de ligne 48 +5V R2 100k R1 10k R3 1k L’une des disciplines traditionnelles auxquelles les robots sont censés participer est la compétition du suivi de ligne. Les robots sont rangés derrière une ligne dessinée d’avance (généralement une bande autocollante noire) posée sur une surface blanchâtre (en papier, carton ou plastique). Cette discipline requiert des capteurs spéciaux. D’habitude, il s’agit de photocapteurs à réflexion (tels que CNY70, LTH209…). Un tel capteur contient un phototransistor et une LED infrarouge. Les capteurs sont pointés vers la surface sur laquelle le robot va devoir montrer sa vitesse et son agilité. La LED émet des rayons infrarouges et le phototransistor agit comme récepteur. La couleur noire de la ligne à pister réfléchit moins intensément que la surface blanche qui l’entoure. Le courant dans un phototransistor dépend P1 3 5 10k 4 1 IC2 3 IC1 2 12 LM339N 2 CNY70 4 070230 - 11 de l’intensité du rayonnement qu’il détecte. Dès lors, il y circulera plus de courant quand il surplombera une surface blanche. De la même manière, ce dispositif peut aussi servir à détecter des types de surface. Le plus petit nombre de capteurs nécessaire à fabriquer un robot suiveur de ligne est deux : un à gauche, l’autre à droite de la ligne. Il est pourtant préférable d’en prévoir un troisième, au milieu des deux autres, comme précaution au cas où le robot tomberait de la table. Dans ce circuit, on compare la tension sur le phototransistor à un niveau de référence réglé par P1. Quand IC2 est éclairé, sa tension chute. IC1A compare cette tension à celle de référence. Si la tension de référence dépasse celle du phototransistor, la sortie du comparateur baisse jusqu’aux environs de zéro. C’est ce qui se passe quand il y a une ligne noire sous le capteur. Le signal de sortie du comparateur est alors envoyé à un microprocesseur ou toute logique de elektor - 7-8/2007 commande qui, on peut l’espérer, répond en adaptant le cap du robot. Il faut étalonner les circuits au préalable. La meilleure méthode consiste à mettre le potentiomètre P1 au milieu, puis à placer le capteur au-dessus de la surface à détecter, la blanche. Remarquez que la hauteur du capteur par-dessus la surface est importante. C’est moins grave avec un CNY70, par exemple, mais un LTH209, entre autres, ne fonctionne qu’à de très faibles distances (à peu près 3,8 mm). Si la réponse de la sortie du comparateur est correcte (broche 2 haute), déplacez le capteur vers la ligne. Si le résultat est bien celui attendu (broche 2 basse), le circuit est étalonné. Sinon, changez le réglage de P1 jusqu’à atteindre le bon étalonnage. Le schéma représente un seul des quatre canaux que l’on peut construire avec une seule puce LM339. La résistance de forçage haut à la broche 2 du comparateur est nécessaire parce que le LM339 a les sorties à collecteur ouvert. R3 détermine le courant pour la LED IR. On peut utiliser une grande variété de comparateurs, il se fait que le LM339 était sous la main. On peut en dire autant du photocapteur ; remarquez cependant qu’il y a différents brochages possibles, vérifiez-le donc dans les caractéristiques du constructeur. (070230-I) Capteur de CO Filtre au charbon actif Couvercle / Electrode Orifice d'admission Film de régulation de la diffusion des gaz Orifice d'admission Couche de Couche de réaction Catalyse Joint d'étanchéité La résistance R1 sert à éviter une polarisation éventuelle du capteur lorsque l’électronique se trouve hors-tension. Il est d’une importance capitale de veiller à ce qu’il n’y ait jamais, Séparateur (immergé dans un électrolyte alcaline liquide) Couche de captage du gaz Rondelle Eau Boîte métallique / Contre-électrode 070187 - 12 quelles que soient les conditions, application d’une tension au capteur lui-même, car ceci se traduirait par un endommagement irréversible du capteur. La tension aux bornes du capteur ne doit en aucun cas dépasser 10 mV. Figure 1. Structure interne du capteur. C1 22µ R2 7-8/2007 - elektor 100k IC1 2 working 3 AD708 1 Uout R1 1k d'oxyde de carbone • Relation linéaire entre la concentration de CO et la tension de sortie • Sensibilité faible en présence d'éthanol • Grande insensibilité aux autres gaz présents La figure 1 donne la structure interne du capteur TGS 5042. La couche sensible au gaz CO se trouve intercalée entre une rondelle d’acier inoxydable (contre-électrode) et une tête électrolysée au nickel (électrode de fonction). Cette dernière est enveloppée d’une sorte de film et de plusieurs couches de soutien. Le tout prend place dans une enveloppe cylindrique en acier inoxydable. Le compartiment inférieur est rempli d’eau, dans la partie supérieure on trouve un filtre de charbon actif. La figure 2 propose un schéma d’application de base du TGS 5042. Le capteur génère un courant minuscule converti, par le biais de l’amplificateur de mesure que constitue la paire IC1/R2, en une tension. TGS5042 Le capteur TGS 5042 de Figaro est un capteur d’oxyde de carbone qui a rendu, et rend toujours, d’éminents services dans de nombreuses applications industrielles telles que détecteurs de fumé, systèmes de détection d’incendie et de commande de ventilation, dans les garages souterrains par exemple. Ce type de capteur convient de façon idéale pour les applications à alimentation autonome (piles) et présente, si on le compare à des capteurs traditionnels, de nombreux avantages. L’électrolyte utilisé est respectueux de l’environnement, le boîtier évite tout risque de fuite. Le capteur est en état de détecter des concentration de CO de 1% seulement, sa plage de température s’étalant de –40 à +70 °C. Le boîtier présente une forme identique à celle d'une pile de type AA. Caractéristiques marquantes : • Utilisable pour les applications alimentées par pile • Sensibilité/précision élevées en présence counter 070187 - 11 Figure 2. Exemple de schéma d’application simple. Citons, à titre d’exemple, certains applications possibles du capteur : • Détection de CO dans les logements • Monitoring du CO dans des installations industrielles • Commande de système de ventilation pour garages souterrains. (070187-I) 49 Capteur auditif stéréo Comment permettre à un robot de localiser des sources sonores Claude Baumann et Laurent Kneip Les serviteurs robots de l’avenir doivent être capables de localiser leur « maître » ou « maîtresse », de les identifier à la voix et aussi de comprendre leurs ordres vocaux. Cet article est consacré à la localisation acoustique basée sur la fonction d’intercorrélation. Une simplification de ce procédé de calcul met le tout à la portée d’un microcontrôleur. Le « capteur binaural » ainsi conçu peut déterminer la direction d’un signal sonore continu à 10° près. Le robot en LEGO GASTON [1], réalisé en 2003 par des élèves (grande photo) comporte un grand nombre de fonctions intéressantes, telles qu’exprimer des sentiments. Il peut en outre localiser des sources sonores dans l’espace et tourner la tête dans cette direction. Il se sert pour cela d’un capteur dit à effet d’antériorité ou de Haas équipé de 3 microphones. Une onde sonore parvient à chaque micro à un instant différent. Ce décalage temporel permet d’estimer la direction d’où provien- D G Source sonore 060040 - 13 Figure 1. Pour les fréquences dépassant 1 kHz, la tête constitue un obstacle qui joue le rôle de filtre passe-bas. Le signal reçu par l’oreille orientée vers la source sonore est bien plus fort que celui que reçoit l’autre oreille. 50 nent des bruits d’un niveau plus ou moins élevé (applaudissements ou claquements de doigts). Malgré son impressionnante panoplie fonctionnelle, l’ouïe de GASTON ne lui permet pas de repérer un bruit continu, sans parler de localiser sa provenance. Il faut recourir à des techniques plus élaborées, atteignant même le franchement complexe, comme nous le verrons ci-dessous. Comment effectuer une localisation acoustique L’ouïe humaine est un système d’une extrême complexité aux propriétés étonnantes. Elle se compose de l’organe sensoriel proprement dit et des régions cervicales chargées de l’analyse. Sans ces dernières, il serait impossible de séparer les informations nécessaires de la cacophonie ambiante. Le cerveau effectue entre autres une détermination extrêmement complexe de la direction d’où provient le son. La précision de cette détermination atteint 3° environ ! Le repérage correct exige la collaboration de plusieurs sous-systèmes. Il faut tout d’abord posséder 2 oreilles, ce que l’on traduit par « système binaural ». L’ouïe dispose de différentes méthodes pour localiser latéralement une source sonore. a. Interaural Level Difference – ILD La longueur d’onde des basses fréquences dépasse le diamètre d’une tête humaine. Elles contournent donc celle-ci, de sorte qu’elles atteignent les 2 oreilles avec une intensité du même ordre. Pour les fréquen- ces dépassant 1 kHz, la tête constitue au contraire un obstacle qui joue le rôle de filtre passe-bas (jusqu’à –20 dB) en dispensant une « ombre sonore ». Le signal reçu par l’oreille orientée vers la source sonore est bien plus fort que celui que reçoit l’autre oreille (figure 1). b. Interaural Time Difference – ITD Si le son arrive latéralement, la réception des signaux par les 2 oreilles n’est pas simultanée. Ce délai est mesuré à l’aide d’une sorte d’intercorrélation neuronale. Le déphasage entre les 2 signaux permet en effet de déterminer l’angle par rapport à la source sonore (azimut α). Considérons la figure 2. Mathématiquement, tous les points M(u,v) ayant la même différence de temps de propagation se trouvent sur une hyperbole dont l’équation est : u2/a 2 – v2/b2 = 1, a = ∆x / 2, b2 = k 2 – a 2, où k est la moitié de la distance entre les oreilles et ∆x le chemin parcouru par l’onde sonore pendant la courte différence de temps ∆t, où ∆x = c · ∆t. La vitesse du son c vaut 343 m/s à 25°C. La partie avant de l’hyperbole se rapproche asymptotiquement de l’équation : v = b/a · u, avec tan(β) = b/a 4k 2 1 β = arctan ⋅ − 1 c 2 ∆t 2 Pour R (Right : oreille droite), on a : elektor - 7-8/2007 α = 90° – β, pour L (Left : oreille gauche), par conséquent α = –(90° – β). L’ouïe doit encore obtenir des informations supplémentaires sur la provenance avant ou arrière du son. De plus, le son peut provenir d’en haut ou d’en bas. On se trouve donc en présence d’un hyperboloïde à la surface duquel sont situés tous les points ayant la même différence de temps de propagation. Pour résoudre ce genre d’ambiguïté, l’oreille humaine fait appel aux modifications caractéristiques de la représentation spectrale dues au tronc, à la tête et aux pavillons des oreilles. Des mouvements de la tête, qui pourraient tenir compte de l’effet Doppler, sont également impliqués. L’exemple qui suit donne une idée de la puissance de calcul que doit fournir le cerveau lui-même lors de la détermination gauche-droite. Supposons que le son provienne de la droite (α = 20°). Dans le cas d’un éloignement moyen des oreilles de 17,5 cm, les équations nous donnent un temps de propagation de 175 µs. Avec 3°, la valeur se réduit à 27 µs. Que le cerveau (dont le temps d’activation des neurones est de l’ordre de la milliseconde) puisse mesurer des différences de temps aussi brèves et en déduire la direction laisse entrevoir un mécanisme d’une grande complexité. Figure 2. Si le son arrive latéralement, la réception des signaux par les 2 oreilles n’est pas simultanée. Mathématiquement, tous les points ayant la même différence de temps de propagation se trouvent sur une hyperbole (rouge) dont une asymptote (blanche) se rapproche : Le cerveau peut en déduire la direction de la source sonore à défaut de son emplacement. +5V +5V 3 IC1.A R7 1µ 16V 10k VREF 100n 5 IC1.B 14 7 R9 R6 4 17 VREF 18 R17 +5V R12 C3 R11 1k 1µ 16V IC1.C C4 8 R14 1µ 16V 10k 100k 13 2k2 MICL VREF 3 100k 9 10 R15 12 JP1 IC1.D R13 14 MCLR RB7 RB6 IC2 RA0 RB5 RA1 RB4 RA2 PIC16F88 RA3 RA4/T0CKI JP2 RB3 RB2 RB1 RB0/INT OSC2 15 13 12 K3 11 TX 10 9 8 7 K4 6 RX OSC1 X1 16 5 K5 R16 C10 10k 22k 47k 2 SENSITIVITY RELATIVE IC1 = LM324N 1 HOLD R10 C8 6 2k2 MICR R20 Digital C2 1 R19 22p VREF +5V C9 20MHz 22p PWM/Servo 2 R18 10k 1k 1µ 16V 100k 10k 22k 47k C1 R4 K2 R8 10k R5 10k R3 060040 - 11 C6 C7 4 IC1 POWER 100µ 16V 100n 11 VREF R2 33k K1 47k R1 C5 22µ 16V Figure 3. Le circuit se compose de 2 canaux audio équipés chacun d’un microphone à électret et d’un amplificateur à 2 étages. Les sorties des amplificateurs sont raccordées à 2 entrées du microcontrôleur configurées comme convertisseurs A/N. 7-8/2007 - elektor 51 R16 C10 SL5 C9 R9 R15 C4 R11 R14 SL2 C3 1 1 R10 R12 8 IC1 1 7 18 10 IC2 9 SL3 1 R2 R7 1 R19 JP1 JP2 1 C2 R4 SL1 SL6 R3 R1 R5 C6 C5 1 R20 SL4 C7 R13 R6 1 SL7 R8 C8 Q1 14 R18 C1 1 R17 r otkelE )c( 060040-1 1-040060 (c) Elekto r Figure 4. Schéma de montage du capteur binaural. Le dessin des pistes est téléchargeable gratuitement depuis le site Web d’Elektor [3]. Liste des composants Résistances : R1,R5,R12 = 47 kΩ R2 = 33 kΩ R3,R10 = 22 kΩ R4,R11 = 1 kΩ R6,R9,R13,R16,R18,R19,R20 = 10 kΩ R7, R14 = 2kΩ2 R8, R15 = 100 kΩ R17 = ajustable 100 kΩ Condensateurs : C1,C2,C3,C4 = 1 µF/16 V C5 = 22 µF/16 V C6 = 100 µF/16 V C7,C8 = 100 nF C9,C10 = 22 pF Semi-conducteurs : IC1 = LM324 IC2 = PIC16F88 (programmé, EPS06004041 disponible auprès des adresses habituelles) Divers : X1 = quartz 20 MHz support DIL14 support DIL18 K1,K3,K4,K5 = embase autosécable à 1 rangée de 2 contacts (K4 est ponté pour l’instant par une résistance de 100 kΩ, cf. texte) K2 = embase autosécable à 1 rangée de 6 contacts JP1,JP2 = cavalier MicR,MicL = micro électret CZ034 platine EPS060040-1 téléchargeable gratuitement depuis www.elektor.fr Figure 5. La précision du repérage varie en fonction de l’azimut. La moyenne est de l’ordre de 9°. Les limites d’application de la détermination ITD sont évidentes. À partir de 1 kHz, la différence maximale de temps de propagation de 500 µs déterminée par la distance interauriculaire correspond à la moitié d’une période, soit à une relation de phase de 180°. Il devient alors impossible de déterminer si le signal de droite est en avance ou en retard de phase par rapport au signal de gauche. c. Effet d’antériorité De fortes distorsions des signaux par réverbération acoustique compliquent passablement la localisation. Un sous-système prend alors le relais, l’interprétation gauche-droite. Son fonctionnement rappelle celui de la détermination ITD à la différence essentielle près que seul le front de l’onde sonore est considéré. On peut se représenter ce système comme une porte neuronale qui s’ouvre pendant environ 1 ms en présence d’un signal sonore. La différence de phase des 2 signaux reçus et raccourcis est alors extraite. Tous les échos suivants sont rejetés. L’ouïe du robot GASTON est basée sur cet effet. Il va sans dire que l’analyse d’antériorité ne convient pas dans le cas d’un signal continu. L’intercorrélation, une alternative Figure 6. Prototype de notre capteur binaural. 52 L’intercorrélation (corrélation croisée) compte parmi les méthodes les plus populaires permettant de comparer 2 signaux équivalents. Comme l’analyse de Fourier, elle fait partie des incontournables parmi les techniques numériques de traitement du signal. La fonction numérique d’intercorrélation de 2 signaux enregistrés se calcule comme décrit ci-dessous. On obtient la valeur de cette fonction à ∆t = 0 en effectuant tout d’abord le produit des valeurs mesurées des 2 signaux pour tous les points t. On elektor - 7-8/2007 additionne alors tous ces produits et on applique un facteur de normalisation au résultat. On procède de façon analogue pour calculer la fonction d’intercorrélation à une autre valeur du temps, par exemple ∆t = 1 µs. On décale toutefois d’abord le second signal de 1 µs par rapport au premier. On multiplie ensuite toutes les mesures, on additionne les produits et on effectue la normalisation. On procède de façon identique pour calculer toutes les autres valeurs de la fonction d’intercorrélation. Il faut bien entendu limiter le volume de calcul en choisissant un pas raisonnable. La fonction d’intercorrélation permet de déterminer si les 2 signaux sont « corrélés ». Supposons par exemple que le premier signal soit déphasé par rapport au second, mais sinon très semblable ; la fonction d’intercorrélation possèdera un maximum prononcé à l’endroit du déphasage. Le grand nombre de multiplications et d’additions vaut à la fonction d’intercorrélation la réputation d’être un des consommateurs les plus redoutables de temps processeur. Comment limiter le volume de calcul L’audition de notre robot ne souffrira aucunement d’une recherche du déphasage restreinte à la plage basée sur la distance entre les 2 oreilles – pardon microphones. Il est en outre facile de démontrer que la maximisation de la somme des produits (intercorrélation) équivaut à la minimisation d’une fonction bien plus simple à calculer. La somme des différences des 2 valeurs du signal (au carré) peut être transformée pour chaque déphasage τ de telle sorte que la fonction d’intercorrélation γ (τ) apparaîtra dans l’équation. 2 f (τ ) = ∑ x (t ) − y (t + τ ) 2 2 = ∑ x (t ) + y (t + τ ) − 2 x (t ) y (t + τ ) = ∑ x 2 (t ) +∑ y 2 (t + τ ) − 2 ∑ x(t ) y(t + τ ) = c1 − 2 ∑ x (t ) y (t + τ ) = c1 − 2⋅ N ⋅ γ (τ ) avec γ (τ) = (2N)-1 [c1 – f(τ)] La valeur c1 est identique pour tous les déphasages. En effet, les carrés de toutes les valeurs du signal sont additionnées chaque fois, quelle que soit leur relation de phase. (N est la moyenne géométrique, elle aussi constante, de toutes les valeurs du signal. Elle est le coefficient de normalisation de γ (τ).) Il est évident qu’une maximisation de la fonction d’intercorrélation est équivalente à une minimisation de la somme des déviations f. On peut enfin remplacer f par la fonction suivante qui ne nécessite qu’une puissance de calcul bien plus modeste 7-8/2007 - elektor g (τ ) = ∑ x (t ) − y (t + τ ) et le comportement de la courbe obtenue est similaire à celui de la fonction d’intercorrélation. Il suffit pour cela de soustraire l’une de l’autre les 2 valeurs instantanées du signal puis de laisser tomber le signe, en d’autres termes de déterminer la valeur de la différence d’amplitude. La somme constitue une valeur non normalisée qu’il faut minimiser. Nous disposons ainsi d’une méthode de calcul au moins 20 x plus rapide que l’intercorrélation. Comment réaliser son propre capteur binaural Le circuit (figure 3) est on ne peut plus simple. Il se compose de 2 canaux audio équipés chacun d’un microphone à électret et d’un amplificateur à 2 étages. Les sorties des amplificateurs sont raccordées à 2 entrées du microcontrôleur configurées comme convertisseurs A/N. La sensibilité du capteur est ajustée par le l’ajustable R17 (Sensitivity). Les repérages sont disponibles au rythme d’un dixième de seconde. Ils sont fournis sous différentes formes pour que le capteur puisse être raccordé à différents types de robots. Le résultat de chaque repérage est envoyé sous forme d’octet de mesure (2400, 1, N, 8) par le module UART (TX). Il est aussi fourni sous forme de valeur numérique de 5 bits (Digital). La sortie servo (PWM/Servo) produit un signal 50 Hz d’une largeur de 1 à 2 ms permettant de commander un servomoteur de type courant destiné aux modèles réduits. Le cavalier 1 (Hold) peut être inséré pour effectuer des tests. Il permet d’effectuer une pause de 2 s entre 2 mesures au cours de laquelle la dernière valeur de sortie est maintenue. Si le cavalier 2 (Relative) est inséré, la moyenne est envoyée si le signal est trop faible, sinon la valeur précédente est maintenue. Le capteur offre en effet 2 configurations de base. S’il fait partie d’un robot mobile, les microphones se déplacent avec la base de celui-ci. Le robot ne doit pas pivoter quand les signaux sont faibles, sous peine de poursuivre en vain un bruit fantôme. L’azimut de α = 0 fourni par le capteur donne le résultat désiré. Si par contre le capteur utilise une configuration fixe des microphones, par exemple pour commander une caméra Web, une interprétation erronée ferait pivoter continuellement celle-ci. La stratégie dans ce cas consiste à conserver la dernière valeur correcte. L’entrée RX ne remplit actuellement aucune fonction. Elle pourrait toutefois être utilisée lors d’une future mise à jour du micrologiciel. Il est préférable de relier cette entrée à la masse par une résistance additionnelle de 100 kΩ pour éviter les phénomènes d’entrée flottante. Séquence temporelle et résolution Le capteur doit avoir un taux d’échantillonnage suffisamment élevé pour déterminer des ITD (donc des différences de temps de propagation) dans une plage de 200 à 1000 Hz. Ce but ne sera atteint qu’avec une organisation élaborée du programme du microcontrôleur. Le PIC16F88 offre un accès simple et rapide des 2 x 96 octets dans les blocs de mémoire (banks) 2 et 3. Il suffit de modifier un seul bit pour que les valeurs des 2 canaux de signalisation soient mémorisées à la vitesse de l’éclair par adressage indirect. Bien que le PIC16F88 possède des convertisseurs A/N 10 bits, seuls les 8 bits les plus significatifs sont utilisés. On obtient une fréquence d’échantillonnage de 20 kHz. Les valeurs de mesure sont lissées par un filtre FIR. Le programme ignore simplement les erreurs d’interprétation ; la dernière valeur correcte est maintenue. Un déphasage de 180° pour un signal de 1 kHz correspond à une différence de temps de propagation 0,5 ms, donc à la durée de mesure de 10 points. La plus petite différence du temps de propagation détectable équivaut à une distance minimale de : dmin = 50 [µs] · 343 [m/s] = 1,7 cm La distance optimale 2k entre les microphones est donnée par : 2k = 10 [Samples] · dmin = 17 cm Si le signal provient exactement de la droite ou de la gauche (azimut α = ±90°), une différence du temps de propagation égale à ±10 échantillons (samples) est mesurée. Le calcul de la corrélation comporte donc au moins 20 sommations des différences d’amplitude. Considérons maintenant le cas où les microphones sont fixés à une « tête ». Il faut remplacer la distance interaurale directe par le trajet réel du son diffracté autour de la tête, c’est-à-dire par la longueur d’arc maximale r · π, où r est le rayon de la tête. Le rayon doit être tel que la longueur d’arc ne dépasse pas 17 cm. La précision du repérage varie en fonction de l’azimut. Comme on peut le déduire de la figure 5, elle atteint environ 5° quand le son provient de l’avant. Elle atteint 11° avec des ondes venant du côté. Elle n’est plus que de 25° à la limite de détection. La moyenne est de l’ordre de 9°. La caractéristique de directionnalité prononcée des microphones à électret rend superflue toute analyse supplémentaire en sens longitudinal. 53 bêta. Le programme en langage assembleur Binaural_v132.asm et le fichier en pseudocode binaire Binaural_v132.hex peuvent être téléchargés à partir du site Web d’Elektor [3]. Un contrô leur programmé peut être obtenu au même endroit. Le schéma de montage est reproduit dans la figure 4. Le dessin de la platine peut être téléchargé gratuitement depuis le site Web d’Elektor [3]. 2 R1 3 IC1.A 1 K1 U out R2 10k 20k IC1 = LM358N R3 20k 10k +5V R5 20k R6 8 10k 5 Bit Digital IN K2 R4 IC1 4 R7 R8 10k 20k R9 6 R10 20k 20k 5 IC1.B 7 Montage et test Lors de la réalisation pratique de ce capteur, il est parfois nécessaire de raccorder les microphones par des câbles audio blindés. On empêche ainsi un taux excessif de signaux 060040 - 12 Figure 7. Le réseau de résistances sert de convertisseur N/A. Il faut ici utiliser des résistances à de tolérance de 1%. Le PIC16F88 a été programmé avec Ultimate Lab. Cet environnement de développement, basé sur LabVIEW, a été conçu pour répondre aux besoins du Center for Engineering Education Outreach (CEEO) de la Tufts University, Massachusetts. Il est actuellement disponible en version Signification des valeurs de sortie du capteur (s+2) entier 8 bits Direction (TX) parasites de parvenir aux entrées des amplificateurs. Notre prototype est reproduit dans la figure 6. Le courant de l’ordre de 10 mA consommé par ce capteur est assez faible pour qu’une alimentation 5 V, de faible puissance mais stable, suffisent déjà à ses besoins. Les microphones, montés vers l’avant, doivent se trouver à une distance de 17 cm l’un de l’autre. Un signal de test de 500 Hz est idéal pour les premiers essais. On peut aussi pousser la chansonnette ou en charger la radio. Il faut tout d’abord faire pivoter le potentiomètre trimmer jusqu’à la butée de gauche pour que le capteur offre la sensibilité la plus élevée.Pour obtenir une tension comme signal de sortie, il est recommandé de raccorder un réseau de résistances 2R/R en aval de la sortie numérique des capteurs (figure 7). Il est toutefois indispensable de le faire suivre d’un convertisseur d’impédance. (060040-I) Liens sur le Web [1] www.convict.lu/Jeunes/RoboticsIntro.htm [2] www.ultimaterobolab.com [3] www.elektor.fr PWM/Servo (s+6) entier 5 bits (Digital) À fond à droite 22 2 ms 26 Centre 12 1,5 ms 16 À fond à gauche 2 1 ms 6 Convertisseur N/A simple pour robots Tilo Gockel Lorsqu’un convertisseur numériqueanalogique (CNA) intégré fait défaut à un microcontrôleur pour la sortie de valeurs analogiques, on peut naturellement y suppléer à l’aide d’un circuit intégré CNA externe. Cette solution n’est ni la plus simple ni la plus élégante. Le montage présenté ici, proposé dans une note d’application de Microchip [1], se passe de circuit intégré spécial et résout judicieusement le problème. Le microcontrôleur y produit un signal à modulation en largeur d’impulsion (MLI = PWM pour Pulse Width Modulation en anglais) qu’un simple filtre passe-bas RC convertit en un signal analogique. En fait, le signal PWM est déjà un signal analogique, même s’il 54 +10V C51 ANALOG OUT R PWM1 OPAMP 3k9 C 10n -10V 070133 - 11 présente l’aspect d’un signal numérique: son amplitude est certes aussi constante que la fréquence du signal PWM, mais la durée des impulsions varie entre 0% et 100%, proportionnellement à l’amplitude du signal analogique à produire. On peut ainsi obtenir une tension analogique en sollicitant en PWM une broche de port à l’aide d’un chronomètre, par exemple. La note d’application explique comment calculer le filtre passe-bas RC. Avec les valeurs de composants indiquées (3,9 kΩ et 10 nF), la fréquence de coupure à –3 dB du filtre passe-bas est de quelque 4 kHz. Pour une fréquence PWM de 20 kHz, le dispositif produira des signaux analogiques (émissions vocales ou sonores du robot, par exemple) avec une bande passante qui peut atteindre 4 kHz. Le filtre passe-bas atténue de 14 dB la fréquence PWM de 20 kHz. La faiblesse de cette atté- elektor - 7-8/2007 nuation ne pose pas de problème pour une émission vocale puisque le signal résiduel de 20 KHz ne sera pas perçu par l’oreille humaine, ou à peine si elle est jeune. Le choix de l’amplificateur opérationnel n’est pas critique et un modèle courant, comme le TL071, par exemple, conviendra. On peut, naturellement, adapter la fré- quence de coupure à l’émission de signaux analogiques de fréquence inférieure, voire continus, de façon à atténuer plus fortement la fréquence PWM. On réduira ainsi l’ondulation du signal (continu) de sortie. Cette tension de sortie pourra servir, par exemple, de signal de commande, au standard industriel de ±10V, à un asservisse- ment de vitesse. Si le moteur, à la sortie d’un étage de puissance, est attaqué directement par la PWM, le moteur assurera la fonction de filtre passe-bas. (070133-I) [1] http://ww1.microchip.com/downloads/ en/AppNotes/00538c.pdf Du magnétophone à cassettes au moteur de propulsion de robot B. Broussas 1 +6V Il existe à l’heure actuelle trois modes prinC1 cipaux de propulsion d’un robot mobile : 10µ la servo de radiocommande modifié, le 16V moteur pas à pas et le moteur à courant 7 continu. Tous présentent des avantages et 1 8 des inconvénients qu’il importe de bien IN1 IN1 OUT1 M1 IC1 3 6 connaître avant de faire son choix. VCONT NC M LB1630 La servo de radiocommande modifié pré4 5 OUT2 IN2 IN2 sente de nombreux avantages, dont le prin400mA max. cipal est d’offrir une puissance de traction 2 relativement importante sans nécessiter le 070303 - 11 montage d’aucune mécanique de démultiplication. En effet, cette dernière est déjà contenue dans le boîtier de la servo qu’il ne reste donc plus qu’à monter Tableau : Table de vérité sur le robot en fixant directement du circuit de commande de moteur LB1630. les roues sur son axe. En outre, une IN1 IN2 OUT1 OUT2 Moteur servo de radiocommande s’alimente H L H L Marche avant sous une tension de 4,8 volts ce qui s’avère particulièrement bien adapté L H L H Marche arrière aux robots utilisant quatre batteries H H HiZ HiZ Arrêt rechargeable de 1,2 volt. L L HiZ HiZ Arrêt L’inconvénient majeur de la servo de radiocommande n’est pas tant son mode de commande impulsionnel, pour lequel diverses solutions vous 2 21 sont proposées par ailleurs dans ce +6V 1 24 même numéro, que l’imprécision SOUT VIN 2 SIN C1 du comportement de la servo vis à 3 22 ATN RES vis de la largeur des impulsions. En 10µ IC2 16V 20 5 effet, si la servo tourne théoriqueP15 P0 19 6 ment à sa vitesse maximum dans un P14 P1 18 7 P13 P2 7 sens ou dans l’autre pour des impul17 8 P12 P3 sions de 1 ou 2 ms et s’arrête pour 16 9 1 8 IN1 OUT1 P11 P4 M1 des impulsions de 1,5 ms ; l’expéIC1 15 CB220 10 P10 P5 3 6 VCONT NC M 14 11 rience montre que des écarts de 10 P9 P6 LB1630 13 12 4 5 OUT2 à 20% sur la largeur des impulsions P8 P7 IN2 à utiliser sont parfois rencontrés. 400mA max. 4 23 2 Ces écarts imposent donc de calibrer les programmes de commande 070303 - 12 de propulsion des robots équipés de servos au cas par cas, interdisant toute reproductibilité d’un modèle 7-8/2007 - elektor de robot à une autre. Les moteurs pas à pas quant à eux ne souffrent pas de ces inconvénients, mais ils ne comportent le plus souvent aucune démultiplication mécanique intégrée, ce qui impose d’en prévoir une externe si l’on ne veut pas disposer d’un couple trop faible. Si vous ne voulez pas réaliser une telle démultiplication vous-même ; il est possible de faire appel à des « boîtes de vitesse » vendues en kit chez divers détaillants en robotique ou en modélisme, mais l’expérience montre que ces dernières sont généralement prévues pour des moteurs à courant continu standards, et sont donc mal adaptées à l’encombrement assez important des moteurs pas à pas. En outre, la commande de ces derniers nécessite de recourir, soit à un circuit intégré spécialisé, soit à un ensemble de circuits logiques associés à des transistors de puissance. Si donc vous êtes contraint de recourir à une démultiplication externe, parce que vous ne voulez pas utiliser une servo par exemple, le moteur à courant continu s’impose alors comme un choix naturel, et ce d’autant que certains kits de « boîtes de vitesse » sont vendus avec de tels moteurs. Reste alors à commander ces derniers correctement. Si des schémas classiques à base de transistors sont toujours utilisables, sachez qu’il existe également une solution très simple, directement inspirée des (anciens) magnétophones à cassettes sur lesquels les moteurs à courant continu étaient monnaie courante. Elle consiste à faire appel à un circuit intégré fabriqué par Sanyo, baptisé LB1630, que vous pourrez récupérer sur de nombreux magnétophones à cassettes mis au 55 rebut ou bien acheter neuf chez Lextronic par exemple (www.lextronic.fr). Le LB1630, disponible en boîtier DIP 8 pattes, est d’une mise en œuvre ridiculement simple comme le montre la figure 1. Il ne lui faut en effet qu’un condensateur externe de découplage pour pouvoir fonctionner et il se commande au moyen de deux signaux logiques compatibles TTL lorsque le circuit est alimenté sous une tension de l’ordre de 5 volts. Cette dernière d’ailleurs doit être comprise entre 2,5 et 6 volts et ne doit en aucun cas dépasser 7 volts sous peine de destruction du circuit. La consommation de courant du moteur ainsi commandé peut atteindre 400 mA au maximum, même si des pointes jusqu’à 2 ampères sont admises, mais seulement sous forme d’impulsions dont la durée ne saurait excéder 50 ms avec un rapport cyclique de 10%. Les diodes de protection, indispensables lorsque l’on commande un moteur électrique avec des transistors, sont intégrées dans le LB1630 et n’ont donc pas besoin d’être ajoutées sur la figure présentée. Les deux entrées IN1 et IN2 permettent une commande logique du moteur conformément aux indications du tableau ci-dessous. En fait, il suffit que les entrées IN1 et IN2 du LB1630 soient dans un état contraire pour que le moteur tourne dans un sens ou dans l’autre. Une commande à partir de deux lignes de ports parallèles de n’importe quel microcontrôleur est donc très facile à réaliser. Indépendamment de cette commande de type « tout ou rien », qui permet de faire tourner le moteur dans un sens ou dans l’autre ; il est possible de réaliser de la commande de vitesse de rotation. Il suffit pour cela d’appliquer des impulsions PWM à l’une ou l’autre des entrées IN1 et IN2. La figure 2 présente ainsi un exemple de réalisation d’une telle commande de vitesse au moyen d’un Cubloc CB220 qui présente l’avantage, sur de nombreux autres microcontrôleurs programmables en Basic, de pouvoir générer des signaux PWM (MLI, Modulation en Largeur d’Impulsion) de manière continue. Avec un tel schéma, il suffit d’écrire par exemple : OUT 6,0 PWM 0, SPEED, 255 pour faire tourner le moteur dans un sens à une vitesse réglable au moyen de la variable SPEED qui peut varier de 0 à 255, et : OUT 6,1 PWM 0, (255-SPEED), 255 pour le faire tourner à la même vitesse mais dans l’autre sens. Notez également que, compte tenu du fait que les entrées IN1 et IN2 du LB1630 sont des entrées de signaux logiques, il est possible d’en connecter plusieurs en parallèle afin de commander ainsi plusieurs moteurs de manière identique. Attention ! Si vous commandez de la sorte deux moteurs de traction placés dos à dos de part et d’autre du robot, il faut qu’ils tournent en sens inverse l’un de l’autre pour faire avancer ou reculer le robot. Il faut alors croiser les entrées des LB1630 (IN1 de l’un sur IN2 de l’autre et vice versa) si vous les commandez simultanément, ou bien encore câbler les moteurs à l’inverse l’un de l’autre sur les sorties OUT1 et OUT2. (070303-I) Un robot qui ne perd pas le Nord C.Tavernier La réalisation d’un robot capable de suivre une direction précise sans nécessiter de support matériel, telle qu’une ligne tracée sur le sol par exemple, a pendant longtemps été une opération très délicate à réaliser. Grâce à l’essor de la robotique amateur d’une part et au développement de nouveaux capteurs d’autre part ; il est aujourd’hui possible de réaliser des robots dont les fonctions relevaient encore de la science fiction il y a seulement quelques années. C’est ce que nous vous proposons de découvrir maintenant avec la réalisation d’un robot capable de repérer le Nord magnétique terrestre, et donc de suivre n’importe quelle direction angulaire par rapport à ce dernier, exactement comme vous le feriez pour vous repérer avec une boussole. Il utilise pour cela le successeur de la bonne vieille boussole à aiguille sous la forme d’un module fabriqué par Devantech, qui a pour nom CMP03 (ou CMPS03 56 selon les versions et les documents). Ce module, fourni sous forme d’un petit circuit imprimé prêt à l’emploi comme le montre la photo qui illustre cet article, contient deux capteurs de champ magnétique KMZ51 de Philips, montés à angle droit, dont les signaux de sortie sont traités par un microcontrôleur PIC16F872 convenablement programmé. Il est capable de délivrer une information de positionnement angulaire par rapport au Nord magnétique terrestre avec une précision qui peut atteindre le dixième de degré. Cette information est disponible sous forme d’un signal PWM dont la largeur des états hauts des impulsions est l’image de cet angle, mais la résolution n’est alors que de un degré. Elle est également disponible via un bus I2C qui, selon le registre que l’on va lire dans le module, peut permettre de disposer de cet angle sous forme d’un mot de 16 bits qui offre alors une précision d’un dixième de degré. Si l’on équipe un robot d’un tel module, il est alors possible à tout instant de connaître l’angle que fait sa trajectoire avec le Nord magnétique et donc de le diriger exactement comme vous le feriez vousmême avec une boussole. Le seul « problème » qui peut se poser est l’interfaçage du module CMP03 avec le microcontrôleur qui équipe le robot. Afin de répondre au plus grand nombre elektor - 7-8/2007 1 21 1 PULSIN 0, 1, PULSE POSITION = (PULSE – 500) / 50 La première ligne permet à l’instruction PULSIN de lire la durée de l’état haut de l’impulsion générée par le module CMP03. La seconde ligne, ne fait qu’appliquer la relation vue ci-dessus en tenant compte du fait que la résolution de la mesure effectuée par PULSIN est de 2 µs dans le cas du Basic Stamp II. On dispose donc bien, dans la variable POSITION, de l’angle par rapport au Nord magnétique exprimé en degrés. Si vous souhaitez bénéficier d’une précision plus importante ou bien encore si votre microcontrôleur dispose d’une inter- 7-8/2007 - elektor VIN SIN 3 ATN RES IC1 20 19 18 17 16 15 P15 P0 P14 P1 P13 P2 P12 P3 P11 P4 P10 14 13 BS2 P5 P9 P6 P8 P7 4 24 1 22 3 4 6 5 7 6 8 7 9 8 10 9 2 3 5 6 7 9 10 11 12 CMP03 ou CMPS03 11 12 S1 23 070304 - 11 face I2C, il vous est possible d’utiliser cette interface pour dialoguer avec le module CMP03 comme le montre à titre d’exemple la figure 2. Elle a été dessinée dans le cas d’un Cubloc CB220 ou d’un PIC programmé en Basic avec un compilateur disposant d’une bibliothèque I2C, ce qui +U SOUT R1 VIN SIN ATN RES IC1 P0 P15 P1 P14 P2 P13 P3 P12 P4 P5 CB220 P11 P10 P6 P9 P7 P8 4 24 R2 4k7 1 2 5 21 8 Lire une telle information avec un Basic Stamp II ou un PIC programmé en Basic se résume à deux lignes de programme : SOUT 2 La figure 1 présente le schéma à utiliser pour exploiter les signaux PWM. Elle a été réalisée dans le cas d’un Basic Stamp II mais peut être transposée à n’importe quel microcontrôleur PIC programmé en Basic ne disposant pas de fonctions I2C. L’interrupteur S1, présent au niveau de la patte 6 du module CMP03, n’intervient pas dans le processus de dialogue mais permet de calibrer le module selon la procédure indiquée dans sa documentation, que nous ne reproduirons pas ici car cela ne présente aucune difficulté. L’information délivrée par le module CMP03 est une succession d’impulsions au niveau haut séparées par des états bas de 65 ms de durée. La largeur des états hauts des impulsions indique l’angle de l’axe principal du module par rapport au Nord grâce à la rela2 tion suivante : Position = (Largeur – 1) x 10 où : • Position est l’angle, exprimé en degrés, par rapport au Nord magnétique. • Largeur est la largeur de l’état haut des impulsions exprimée en millisecondes. +U 4k7 de configurations robotiques possibles nous allons donc vous montrer comment exploiter les deux moyens de dialogue proposés par le module : les signaux PWM et le bus I2C. 1 22 2 3 20 4 19 5 18 6 17 7 16 8 15 CMP03 ou est le cas de la majorité d’entre eux aujourd’hui. Les seules précautions à prendre avec ce schéma concernent les résistances de rappel du bus I 2C qui doivent être câblées car elles ne sont intégrées ni dans le module CMP03, ni dans le microcontrôleur (quel qu’il soit). Si vous utilisez un PIC programmé en Basic, il faut également veiller à choisir correctement les ports destinés à gérer les signaux SDA et SCL du bus I2C car certains compilateurs Basic imposent des restrictions à ce niveau. Afin de pouvoir écrire le programme correspondant, il suffit ensuite de savoir que l’adresse I2C du module CMP03 est égale à C0 et que quatre registres principaux sont à notre disposition à partir de cette adresse : • le registre 0 contient le numéro de version du logiciel du module ; • le registre 1 contient l’angle codé sur un octet. L’évolution de cette valeur de 0 à 255 correspond donc à un cercle de 0 à 360° ; • les registres 2 et 3 contiennent l’angle, codé cette fois-ci sur deux octets, sous la forme d’un nombre compris entre 0 et 3599 (exprimé en décimal) qui est en fait l’angle en degrés multipliée par dix. Dès lors, la lecture de ces informations au travers d’un bus I2C ne présente aucune difficulté comme le montre le très court listing cidessous rédigé dans le cas du langage Basic du Cubloc : CMPS03 9 14 SCL 13 SDA S1 23 070304 - 12 Pin 9 - 0V GND Pin 8 - No Connect Pin 7 - 50/60 Hz Pin 6 - Calibrate Pin 5 - No Connect Pin 4 - PWM Pin 3 - SDA Pin 2 - SCL Pin 1 - +5V 070304 - 13 I2CSTART Temp = I2CWRITE (&HC0) Temp = I2CWRITE(0) I2CSTART Temp = I2CWRITE(&HC1) Version = I2CREAD(0) Temp = I2CWRITE(&HC1) Position8 = I2CREAD(0) Temp = I2CWRITE(&HC1) Position16.byte1 = I2CREAD(0) Temp = I2CWRITE(&HC1) Position16.byte0 = I2CREAD(0) Les trois premières instructions adressent le module et sélectionnent le premier registre à lire. Les instructions suivantes lisent les quatre registres décrits précédemment, l’un après l’autre, et permettent donc de disposer dans la variable Version du numéro de version du logiciel, dans la variable Position8 de l’angle codé sur 8 bits et dans la variable 16 bits Position16 de l’angle codé sur 16 bits. La variable Temp ne sert à rien mais elle est requise par la syn- 57 taxe particulière des instructions I2C du Basic du Cubloc. De même, la constante 0 qui doit être présente au niveau des instructions I2CREAD, n’a aucune signification particulière. Si vous utilisez ce listing avec un PIC programmé en Basic, une légère adaptation pourra donc s’avérer nécessaire selon le compilateur auquel vous ferez appel (voir par exemple à ce sujet l’ouvrage « Microcontrôleurs PIC : programmation en Basic » Adresses Internet : publié chez Dunod). Que vous choisissiez la version PWM ou la version I2C pour interfacer le module CMP03, vous disposez donc, avec celuici, d’une information de positionnement de la trajectoire de votre robot par rapport au Nord magnétique. Il ne vous reste plus qu’à en faire bon usage pour que votre robot « ne perde pas le Nord ». Devantech www.robot-electronics.co.uk/shop/ Compass_CMPS032004.htm Un peu de lecture : http://zedomax.com/blog/zedomax-diyhack-lets-make-a-digital-compass/ http://zedomax.com/blog/2006/08/16/digital-compass-using-cmps03/ (070304-I) Capteur de pouls sans fil +5V +5V R4 10k Markus Bindhammer IC1 100k 4 100k R5 C1 220 Ω 3 470n 1 IC1.A 2 5 7 IC1.B 6 T1 R6 1k8 BD139 R7 LDR1 R3 R2 IC1 = LM358 1k LED3 47k Ce capteur de pouls a été conçu pour servir d’interface de communication hommemachine. Le robot peut réagir à au changement du rythme cardiaque de son vis-à-vis humain. Les sorties numériques du circuit permettent de l’utiliser efficacement dans d’autres applications. 8 P1 R1 220 Ω Pour robots et autres commandes P2 100k LED2 Le capteur de pouls proprement dit est constitué par une LDR (résistance en pleine P3 BD139 BC547 21 mm +5V TSOP1136 C E BC547 IC3 58 OUT THR NE555 TR 7 R8 6 2 CV 5 C3 C2 10n 1n IR 1 TSOP1136 070006 - 12 lumière 300 Ω, résistance dans l’obscurité environ 10 MΩ) ordinaire et une LED claire (D1). Celle-ci doit produire au moins 1 000 mcd et éclaire la LDR à travers le doigt. Chaque fois que le cœur effectue un battement pour envoyer du sang dans les artères, le doigt s’assombrit – tout au moins à l’intérieur. La LDR reçoit donc moins de lumière. L’évaluation qui s’ensuit donne lieu à une impulsion. Chaque battement modifie l’impédance de la LDR, donc la tension d’entrée du comparateur IC1.A. Le gain de ce dernier est ajusté par le potentiomètre trimmer P1 3 1 LED1 3 Gaine thermorétractable 1k8 IC2 R11 3 2 LED R10 100 Ω Ø 22 mm 100n 2 T2 C C5 1 B 4 R DIS E B 22k 8 LDR Tube de plastique R9 100n 6k8 15mm 10k 30 ... 40 kHz C4 de la rétroaction. Le deuxième comparateur IC1.B qui suit le premier et le potentiomètre P2 déterminent la sensibilité du circuit. Le petit étage de sortie T1 alimente une LED (D2) qui reflète « localement » le pouls, mais active surtout le temporisateur 555 (IC2) utilisé comme générateur classique de signaux rectangulaires. La fréquence du signal modulé par le pouls produit par le générateur est déterminée par le potentiomètre trimmer P3 dans la plage de 30 à 40 kHz. La LED IR raccordée à la sortie du 555 par un étage d’attaque peut transmettre le signal modulé au module 070006 - 11 récepteur IR IC3. La portée de l’interface croît avec la puissance de la LED IR. Il peut donc devenir nécessaire d’ajuster R11 en fonction du courant requis par la LED. Le module récepteur peut envoyer directement son signal de sortie démodulé à un microcontrôleur. La fréquence de travail du module de réception utilisé détermine la valeur de P1. Un petit tube de plastique ne dépassant pas 40 mm et fermé à une extrémité sert de capteur de pouls. Il doit s’ajuster étroitement mais commodément au bout du doigt. Percer les trous pour la LED et la elektor - 7-8/2007 LDR à 15 mm de l’extrémité. Coller les 2 composants (veiller à ce qu’ils soient d’une forme appropriée) de façon à ce qu’ils « voient » l’intérieur du tube. Isoler les fils de connexion et recouvrir tout le capteur d’un morceau de gaine rétractable pour éviter l’intrusion de lumière parasite dans la LDR. Si le tout paraît trop gros- sier, on peut aussi se servir d’un capteur de pouls à clip, par exemple d’une bicyclette d’entraînement. (070006-I) Capteur PIR Abraham Vreugdenhil 1 On se trouve toujours, lorsque l’on envisage de réaliser un robot, confronté au choix des capteurs. Ce choix dépend bien entendu également de la « mission » du robot. La difficulté de mise en oeuvre et le coût du capteur jouent eux aussi un rôle non négligeable dans cette décision. Les capteurs répondant le mieux à ce cahier 2 3 Sig + – des charges sont indubitablement les détecteurs de choc et les antennes (moustaches) à base de micro-interrupteurs (microswitch) mais aussi les télécapteurs IR de Sharp et les capteurs à ultrasons. Si nous souhaitons détecter des objets « chauds » tels qu’êtres humains ou animaux, les détecteurs PIR (Passive InfraRed sensor) d’Eltec tels que le Eltec-442. Il s’agit d’un très beau capteur dont le prix (dépassant 60 dollars) constitue un problème majeur. Conrad FR propose un capteur PIR, le LHI958 (référence 178730) pour 5,50 €. L’inconvénient de ce capteur est qu’il faut le doter d’un amplificateur si l’on veut disposer d’un signal de sortie utilisable. La documentation descriptive de ce capteur n’en parle qu’à mots couverts. Il existe une autre approche possible : utiliser un capteur que l’on trouve un peu partout de nos jours : le fameux détecteur de présence dont sont dotés les éclairages extérieurs et que l’on trouve, à un prix très abordable, dans tous les magasins de bricolage. Ils sont souvent proposés à moins de 10 euros. Après démontage de ce capteur on se trouve en présence d’une platine principale dans laquelle est enfichée un circuit imprimé auxiliaire (figure 1). C’est sur ce dernier que se trouve le détecteur PIR et son électronique connexe. Les points 7-8/2007 - elektor d’application de la tension d’alimentation et le signal de sortie se trouvent sur le dos de cette platine (figure 2). Normalement, l’alimentation du capteur se fait sous 8 V, mais il fonctionne parfaitement sous 5 V. Un robot d’une certaine taille sera souvent doté de plusieurs capteurs PIR montés à des angles différents sur le bâti. À cet effet, nous pouvons monter 3 capteurs sur un morceau de platine d’expérimentation à pastilles et limiter leur champ de vision par le biais de morceaux de tubes d’installation électrique en plastique. La longueur de ce morceau de tube détermine l’angle de vision souhaité. Nominalement, l’angle de détection de ce type de capteurs est de 140 °, ce qui expli- que la nécessité de limitation du champ de vision. Il est bon de faire en sorte que les champs de vision des différents capteurs se recoupent. Une triplette de capteurs permet ainsi de définir 5 domaines de détection. On peut bien évidemment envisager d'utiliser plus de 3 capteurs de manière à augmenter la résolution. Il est possible, de cette façon et à un coût relativement abordable, une belle unité de détection PIR. L'exemple représenté en figure 3 comporte 3 détecteurs PIR. Ce type d’unité de détection est facile à réaliser et fonctionne de façon très satisfaisante. (070189-I) 59 Télémètre infrarouge à PIC ou à Basic Stamp 1 VCC 3 C. Tavernier VCC Régulateur Objet réfléchissant VCC Circuit traitement signal Circuit de commande 12k Si les robots les moins évolués peuvent se contenter d’une simple détection d’obstacles, nombre de robots qui requièrent de la précision dans leur positionnement ont besoin de pouvoir mesurer des distances avec exactitude. Pour cela, il est nécessaire de faire appel alors à un télémètre, qui peut utiliser des infrarouges ou des ultrasons, tout en sachant que les infrarouges sont bien adaptés à de la mesure à courte distance (quelques centimètres à quelques dizaines de centimètres) alors que les ultra- 4 VOUT Détecteur lumière (PSD) LED IR Circuit Commande LED 2 VCC 1 GND VIN (Entrée du signal de commande) 070235 - 11 Listage 1 : Utilisation du GP2Dxx avec un Basic Stamp. Vin Vout Mesure Lecture Attente con con var 0 1 Byte Mesure = 0 ‘ : Vin = 0 ‘ : IF Vout = 0 THEN Attente ‘ SHIFTIN Vout, Vin, 2, [Mesure] Vin = 1 ‘ Pause = 1 ‘ ‘ Définition de l’entrée de commande ‘ Définition de la sortie de données ‘ Réservation d’un octet pour le résultat Initialisation de la variable « Mesure » Validation du télémètre Attente de la disponibilité du résultat Mise en veille du télémètre Temps de repos par précaution ‘ Le résultat de la mesure est disponible dans la variable « Mesure » Listing 2 : Utilisation du GP2Dxx avec un microcontrôleur PIC. Lecture Attente Lectbit BCF NOP PortA.0 ‘ Validation du télémètre BTFSS GOTO BSF CLRF MOVLW MOVWF BCF NOP PortA,1 Attente PortA,0 Mesure 8 Compte Status,C ‘ Attente de la disponibilité du résultat BCF NOP NOP RLF BTFSC BSF BSF NOP NOP DECFSZ GOTO Porta.0 ‘ Horloge au niveau bas Mesure,f PortA.1 Mesure,0 PortA.0 ‘ Rotation du bit précédent ‘ Lecture du bit de données Compte,f Lectbit ‘ Décomptage du nombre de bits à lire ‘ Mise au niveau haut de Vin ‘ Initialisation de la variable « Mesure » ‘ Préparation à la lecture de 8 bits ‘ Mise à zéro de la retenue ‘ Horloge au niveau haut ‘ Le résultat de la mesure est disponible dans la variable « Mesure » 60 elektor - 7-8/2007 2 3 +5V PIC ou Basic Stamp Connecteur GP2Dxx 1 2 3 4 D1 1N4148 0,2 ms ou moins 70 ms ou plus 1,5 ms ou plus Alim OFF VIN RA0 (PIC) ou P0 (Stamp) RA1 (PIC) ou P1 (Stamp) Sortie MSB sons conviennent mieux à des distances allant de quelques dizaines de centimètres à quelques mètres. Si la réalisation d’un télémètre reste possible avec des moyens classiques, elle ne présente plus aujourd’hui beaucoup d’intérêt en raison de la mise sur le marché de modules intégrés prêts à l’emploi qui sont tout à la fois relativement précis, peu coûteux et peu encombrants. Si l’on s’intéresse aux télémètres à infrarouges, c’est Sharp qui dispose aujourd’hui de la gamme la plus vaste et la mieux distribuée tant que l’on cherche à rester dans des produits à prix compatibles d’un robot « amateur ». Cette gamme, dont toutes les références commencent par GP2, comprend des télémètres qui délivrent des informations de type tout ou rien (ce ne sont plus vraiment des télémètres !), des informations sous forme analogique et des informations sous forme numérique. Si les versions délivrant des informations analogiques semblent être les plus faciles à mettre en œuvre, c’est cependant une absurdité que de les utiliser dans un robot piloté par un microcontrôleur. En effet, ce dernier va s’empresser de convertir cette tension analogique en numérique via son convertisseur intégré afin de pouvoir l’exploiter. Il vaut donc mieux, dès le départ, disposer d’une information numérique même si elle semble un peu plus difficile à lire en sortie du télémètre. Dans ces conditions, deux références sont actuellement facilement disponibles en Europe, chez Selectronic notamment, avec le GP2D02 capable de mesure de 10 cm à 80 cm environ et le GP2D021 capable de mesurer de 4 à 30 cm environ. Ces deux références sont totalement compatibles tant en termes mécaniques qu’électroniques et tout ce que nous allons écrire maintenant est donc valable pour ces deux modèles. Le principe d’un télémètre à infrarouge est relativement simple : une LED émet un faisceau infrarouge qui, s’il rencontre un objet, est réfléchi par ce dernier vers une photodiode. Si on le laisse tel quel, un tel système est de type tout ou rien et tient plus du détecteur d’obstacle que du vrai télémètre. Si certains des télémètres Sharp LSB LSB Exemple de sortie de mesure de distance (8 bits) fonctionnent selon ce principe, les deux références que nous avons retenues sont capables de réaliser une véritable mesure de distance car ce n’est plus une simple photodiode qui reçoit le rayon réfléchi par l’objet mais une barrette de CCD. De ce fait, l’angle d’incidence du faisceau réfléchi arrivant sur cette barrette varie en fonction de l’éloignement de l’objet détecté et permet donc une véritable mesure de distance, pour peu qu’un minimum de traitement du signal exploite les informations générées par le capteur CCD. C’est le cas dans les télémètres Sharp de ce type dont le synoptique interne vous est présenté figure 1. Pour ceux des télémètres qui ont une entrée de validation de mesure, ce qui est le cas des modèles choisis, la LED est mise sous tension uniquement sous contrôle de celle-ci, ce qui permet de réduire de façon très importante la consommation au repos. Dans les autres télémètres, elle fonctionne en permanence. Le capteur CCD est suivi par une circuiterie de traitement du signal qui permet de générer en sortie : soit une information de type tout ou rien pour les télémètres les plus simples, soit une information analogique, soit enfin, dans les modèles qui nous intéressent, une information numérique codée sur 8 bits. Nous avons choisi de vous montrer comment utiliser un tel télémètre avec un Basic Stamp ou bien encore avec un microcontrôleur PIC programmé en Basic ou en langage machine afin d’être compatible d’un maximum de solutions robotiques. Le schéma de connexion du télémètre se résume à ce que vous pouvez découvrir figure 2, que ce soit avec un PIC ou avec un Basic Stamp. Le détecteur GP2D02 ou GP2D021 est alimenté en permanence mais, du fait de la présence de son entrée de commande, il ne consomme quasiment rien tant qu’il ne réalise pas de mesure. L’examen de son chronogramme de fonctionnement, présenté figure 3, permet de constater que cette entrée sert non seulement à valider la mesure mais qu’elle sert également d’horloge pour lire le résultat fourni sur sa borne Vout. Elle doit donc être contrôlée par le micro- 070235 - 13 contrôleur associé, mais comme elle ne doit pas se voir appliquer une tension supérieure à 3 volts, la diode D l’isole de la sortie du microcontrôleur lorsque cette dernière est au niveau haut. Ceci étant précisé, l’examen du chronogramme de la figure 3 vous permettra sans peine de suivre les listings des très courts programmes que nous avons écrits pour exploiter ce capteur, que ce soit en Basic, pour le Basic Stamp et pour les PIC programmés en Basic, ou en assembleur PIC pour ceux d’entre vous qui préfèrent le langage machine. Pour ce qui est du Basic Stamp, la seule instruction SHIFTIN, suffit à lire le résultat de mesure du capteur. Pour ce qui est du PIC, il faut évidemment faire appel à un peu plus d’instructions de façon à générer l’horloge de lecture et à récupérer les données correspondantes. Dans les deux cas, ces programmes fournissent dans la variable « Mesure » la donnée numérique renvoyée par le télémètre suite à la mesure réalisée. A charge ensuite par le programme de gestion de votre robot d’exploiter cette valeur directement, ou de la linéariser grâce à une table de conversion si vous voulez faire de la mesure de distance réelle. En effet, comme le montre la figure 4, et c’est peut être là le seul défaut de ces télémètres, l’information qu’ils délivrent est loin d’être linéaire. (070235-I) 220 Papier blanc : carte grise R-27 faite par KODAK surface blanche (réflectivité : 90%) Papier gris : carte grise R-27 faite par KODAK surface grise (réflectivité : 18%) 200 Sortie de mesure de distance (DEC) 070235 - 12 7-8/2007 - elektor 1,5 ms ou plus 1 ms ou plus 180 160 Blanc 140 120 100 80 60 Gris 40 20 0 0 20 40 60 80 100 Distance -> objet réfléchissant L [cm] 4 120 140 070235 - 14 61 Détecteur d’obstacles lointains à ultrasons 62 +5V...+12V R5 1k lin. 14 C4 IC1 10n 4k7 R1 R7 C5 10k P1 2k2 R3 330 Ω 100µ 15V 7 1 C1 22n C2 R2 T1 D2 R6 1 IC1.B 2 3 1 4 S2 T3 220k R4 BC548B RXUS IC1 = 74HC14 IC1.A 470k Le premier capteur dont on équipe habituellement un robot est un détecteur d’obstacles. Il peut revêtir trois aspects différents selon le type d’obstacles que l’on souhaite détecter mais aussi et surtout selon la distance à laquelle on souhaite que la détection ait lieu. Pour les obstacles proches ou très proches on fera appel le plus souvent à des capteurs à infrarouge à réflexion, dont un exemple de réalisation vous est proposé par ailleurs dans ce numéro. Ces capteurs sont toutefois limités à des distances de quelques mm à une dizaine de mm tout au plus. Une autre solution, simple et fréquemment rencontrée, consiste à faire appel à des détecteurs à contacts ou « moustaches » qui ne sont rien d’autre que des tiges plus ou moins longues, en corde à piano ou en matériau similaire, qui agissent sur des microrupteurs. La détection a lieu un peu plus loin qu’avec les capteurs infrarouges mais reste limitée à quelques cm car, dans le cas contraire, les moustaches deviennent trop longues et gênent le déplacement normal du robot car elles risquent de se coincer dans son environnement. Pour les obstacles situés au delà d’un ou deux cm, une autre solution efficace existe et consiste à faire appel aux ultrasons. Elle est souvent de mise en œuvre délicate car leurs concepteurs raisonnent comme s’ils devaient réaliser un télémètre alors que l’on cherche juste ici à détecter la présence ou l’absence d’obstacles, et non à mesurer la distance à laquelle ils se trouvent. Nous vous proposons donc ici une approche originale qui permet de réduire le schéma nécessaire à une poignée de composants classiques et peu coûteux. Notre solution repose sur l’effet Larsen, bien connu des amateurs de sonorisation. Cet effet, qui se traduit par un sifflement plus ou moins violent, se produit lorsqu’un micro capte le son des enceintes qui lui sont reliées au travers de l’amplificateur. On réalise ainsi un oscillateur acoustique en réinjectant le signal de sortie, produit par le haut-parleur, sur l’entrée, matérialisée par le micro. Notre détecteur fonctionne sur le même principe, mais le micro est un récepteur à ultrasons tandis que le haut-parleur est un émetteur d’ultrasons. Entre les deux, il n’y a qu’un banal amplificateur très facile à réaliser et c’est l’obstacle dont on veut détecter la présence qui se charge de réfléchir le faisceau ultrasonore de la sortie sur l’entrée. 1 470k B. Broussas 560p T2 D1 BC548B C3 1N4148 BC548B S1 1N4148 470n TXUS 070236 - 11 Comme le montre la figure 1, le récepteur à ultrasons RXUS est relié à l’entrée d’un amplificateur à grand gain réalisé grâce aux transistors T1 et T2. Le gain de cet étage étant très élevé, il peut être réduit si nécessaire au moyen du potentiomètre P1 pour éviter qu’il entre en oscillation tout seul, en l’absence d’obstacle. La sortie de cet amplificateur est reliée à l’émetteur à ultrasons TXUS constituant ainsi la boucle susceptible d’osciller par effet Larsen. Lorsque cela se produit, c’est à dire lorsqu’un obstacle se trouve suffisamment prés des transducteurs à ultrasons ; un signal pseudo sinusoïdal à 40 kHz, qui est leur fréquence de résonance, apparaît en sortie de l’amplificateur c’est à dire aux bornes du transducteur émetteur. Ce signal est redressé par D1 et D2 et filtré par C3 et, s’il est d’amplitude suffisante, il produit dans R6 un courant capable de rendre le transistor T3 plus ou moins conducteur. Selon la nature et l’éloignement de l’obstacle, ce processus ne fonctionne pas nécessairement de manière parfaitement binaire et le niveau disponible sur le collecteur de T3 peut être assez mal défini. Les inverseurs CMOS à trigger de Schmitt se chargent donc de le transformer en un signal logique digne de ce nom. En présence d’obstacle S1 est donc au niveau haut tandis que S2 est au niveau bas. L’alimentation peut avoir lieu sous n’importe quelle tension comprise entre 5 et 12 volts. Le gain, et donc la sensibilité de détection du montage, varie un peu lorsque la tension d’alimentation augmente mais le potentiomètre P1 permet dans tous les cas un réglage satisfaisant. Bien qu’il soit très simple, ce montage est capable de détecter dans de bonnes conditions un obstacle normalement réfléchissant aux ultrasons jusqu’à 5 ou 6 cm de distance environ. Si une distance plus faible est nécessaire, il suffit tout simplement de réduire le gain en agissant sur P1. La réalisation du montage ne présente aucune difficulté. Les deux transducteurs sont des modèles 40 kHz que l’on trouve chez tous les revendeurs, quant aux autres composants, ils sont on ne peut plus classiques. Par contre, il faut prendre une précaution, lors du câblage des transducteurs. En effet, même s’ils ne sont pas polarisés au sens strict du terme, une de leurs électrodes est commune avec leur boîtier métallique. C’est celle-ci qu’il faut relier à la masse du montage tant côté émetteur que côté récepteur. Le fonctionnement est immédiat et se limite au réglage de P1 afin de choisir la 2 Distance maximum de détection Obstacle 070236 - 12 distance de détection qui vous convient, mais celle-ci dépend aussi du positionnement des transducteurs. Pour un fonctionnement optimum, nous vous conseillons de les orienter comme indiqué figure 2. (070236-I) elektor - 7-8/2007 Positionnement à réseau de photodiodes Pascal Choquet Le tableau résume les principales caractéristiques des réseaux les plus usuels. Comme la sensibilité effective d’une photodiode se calcule à partir du temps d’intégration et de la surface, le tableau reprend aussi les dimensions des surfaces de diodes actives. De l’extérieur, un réseau est construit très simplement. Il se connecte par trois fils, plus l’alimentation, à un microcontrôleur: Une entrée d’horloge (CLK), une entrée destinée à une impulsion de démarrage (SI) et une sortie analogique – pas plus. La sortie analogique se connecte à la masse par l’intermédiaire d’une résistance de 330 Ω. Une lecture procède comme suit: le contrôleur délivre un signal d’horloge. Quand une impulsion SI est appliquée pendant le flanc positif du signal, les valeurs des pixels successifs apparaissent sur la sortie analogique à chacun des flancs négatifs suivants du signal d’horloge. Le microcontrôleur n’a plus qu’à lire successivement ces valeurs sur son entrée analogique et à les enregistrer. Le flanc qui suit le dernier pixel réinitialise l’électronique de lecture. Le MLX90255 présente des particularités : les deux premières valeurs sont des pixels « pour rien » (dummy). La première valeur réelle arrive donc avec le troisième flanc. Les autres pixels suivent et, sur les flancs numéro 131 et 132, suivent encore deux pixels fictifs. Le 133ème flanc est le signal de réinitialisation. Les photodiodes extérieures sont, ensuite, les plus sensibles, puisque la pondération cosinus est adaptée à la poursuite d’une LED, dont l’éclai- 7-8/2007 - elektor 10k R2 C6 C5 100n 100n 20 K1 1 7 6 5 4 4 3 2 IC2 A OUT SI CLK 3 MCLR/VPP IC3 C3 1µ RA5/AN4/SS/LVDIN RA4/T0CKI RA3/AN3/VREF+ RA1/AN1 C1 RA0/AN0 PIC18F242 1 21 2 22 23 MLX90255 24 25 5 26 27 28 RB0/INT0 RC7/RX/DT RB1/INT1 RC6/TX/CK RB2/INT2 RC5/SDO RB3/CCP2 RC4/SDI/SDA RB4 RC3/SCK/SCL RB5/PGM RC2/CCP1 RB6/PGC RC1/T1OSI/CCP2 RB7/PGD RC0/T1OSO/T1CKI OSC1 R1 8 9 25V 2 RA2/AN2/VREF- 18 1µ 25V 1 3 12 17 11 16 10 15 9 14 13 12 11 C2 1µ 25V 4 5 V+ C1+ IC1 C1– X1 K2 R1OUT R1IN T1IN T1OUT T2IN T2OUT R2OUT R2IN C10 13 RX 14 TX 7 8 C2+ MAX232 C2– 15 V6 OSC2 10 16 C4 19 1µ 25V 330Ω Un robot de fabrication doit toujours savoir précisément ou se trouvent ses actionneurs, ses outils et les pièces. Pour des tâches de positionnement précises, il existe des circuits intégrés à réseaux de photodiodes qui contiennent aussi une électronique de lecture et font d’excellents capteurs de déplacement. Leurs échantillonneurs-bloqueurs (E&B) peuvent analyser simultanément toutes les diodes. Cette caractéristique est importante, puisque la sensibilité, toutes choses égales par ailleurs, dépend surtout du temps d’intégration pendant lequel les photodiodes enregistrent les quanta de lumière. Sans ces E&B, la diode la plus sensible serait toujours la dernière diode lue. +5V C9 15p 15p 4.9152MHz 070314 - 11 Caractéristiques de réseaux de photodiodes Réseau MLX90255 TLS1301 TLS1401 TLS208R Pixels (* Cf. texte) 128 (+ 4*) 102 128 512 Pas [DPI] 385 300 400 200 Pondération cosinus uniforme uniforme uniforme L x l [µm] 200 x 66 85 x 77 63,5 x 55,5 120 x 70 Valeur de sortie [V] 0,125 à 2,4 0 à 2,0 0 à 2,0 0 à 2,0 rage est irrégulier. Le temps d’intégration démarre toujours au 18ème flanc et dure jusqu’à la SI suivante. Les valeurs collectées sont celles de l’intégration précédente. Si la mesure n’est pas permanente, le cycle doit se répéter une fois pour une mesure unique. Le premier cycle délivre des résultats non exploitables, puisqu’il n’est parcouru que pour démarrer l’intégration. Le temps d’intégration est, de ce fait, égal au nombre de pixels moins 18, divisé par la fréquence d’horloge. Le microcontrôleur peut donc bien commander la sensibilité. Le montage élémentaire représenté se compose, pour l’essentiel, du capteur, d’un simple microcontrôleur PIC et d’un convertisseur de niveau pour une interface sérielle. L’auteur y propose un programme convenable. Vous pouvez en télécharger le fichier source en C (EPS070314-11.zip) sur le site d’ELEKTOR. On démarre un cycle à l’aide d’un programme de terminal et de la combinaison de touches « Ctrl+S ». Les valeurs s’affichent séparées par des pointsvirgules de façon à faciliter leur introduction dans un tableau Excel. Un réseau de photodiodes peut fournir un bon capteur fonctionnant sur le principe de la chambre noire à un robot. Il lui permettra de suivre une ligne avec une bonne résolution et à une grande distance de travail du sol. Un prisme ou une grille optique permettront même une détection simple et précise des couleurs. (070314-I) 63 Système de vision CMUCam1 Seattle Robotics dote de la vision le BoeBot (et les autres robots) Ken Gracey (Parallax, Inc.) Le BoeBot est un petit véhicule-robot conçu et vendu par Parallax Inc [1]. Son intelligence lui est conférée par un autre poulain de l’écurie Parallax, le Board of Education (BoE, Carte d’apprentissage), lequel à son tour est basé sur leur fameux BASIC Stamp. Le robot lui–même, tout autant que le BoE, a eu les faveurs de nombreuses publications dans la presse et sur l’Internet. À juste titre car, en plus de leur prix modique, ces projets bénéficient d’un niveau de qualité et d’un volume de production qui les rendent compatibles avec l’utilisation dans les écoles et en général avec l’apprentissage de la robotique [2]. Pour le CMUCam1 Vision System, Parallax a fait équipe avec l’Université Carnegie Mellon [3] par l’entremise de Seattle Robotics [4]. Toutefois, le produit n’est disponible que chez Parallax et ses distributeurs, comme Milford Instruments [5] et Lextronic [9] pour la France. La livraison du CMUcam1 comprend : 1. Une caméra CMUcam1 montée sur une platine d’interface AppMod. 2. Un manuel d’utilisation imprimé. 3. Un cédérom de programmes de démonstration. L’ensemble vise un fonctionnement aussi proche que possible du plug and play. Branchez le matériel (plug), téléchargez le code de démonstration, appuyez sur les boutons et observez comment votre BoeBot se sert de son « œil » tout neuf pour voir son environnement et y réagir. Objectif Le système de vision CMUcam1-AppMod se compose d'une caméra CMUcam1 montée sur une prise dans la platine AppMod. La platine AppMod offre une interface utilisateur simple constituée de deux boutons, huit LED et un haut-parleur piézo. L'interface utilisateur remplit trois fonctions : 1) Un système simple de sélection par menu lié au code de démonstration pour vous permettre de choisir et lancer l'un des huit programmes de démonstration de la vision robotique. 2) Un retour visuel par les LED, pendant que le programme se déroule, pour montrer comment la caméra perçoit la cible poursuivie. 3) L'indication de la couleur de l'objet repéré, par l'éclairement de la LED correspondante (par ex. LED rouge pour un objet rouge). Grâce à un circuit astucieux sur la platine AppMod, huit LED et un haut-parleur piézo se contentent de quatre broches d'entrée/sortie de votre Basic Stamp2, Tableau 1. Jeu d’instructions de base Instruction Paramètres Description 1 \r néant Touche <Enter> ou <Retour>. Met la caméra en attente GM néant (\r) Capture la couleur dominante dans l’image courante. L1 valeur \r Commande la LED verte de poursuite. MM mode \r Commande le mode Middle Mass qui ajoute les coordonnées du centre de gravité aux données de poursuite normales. NF active \r Réglage du filtre de bruit. Accepte les valeurs booléennes 1 (défaut) et 0. Activé par 1, arrêté par 0. PM mode \r Active le mode balayage (Poll). Le paramètre 1 active le mode, 0 l’arrête. RS néant (\r) Remet à zéro la carte de vision. Nota : pour le reset, le premier caractère est un /r. SW [x y x2 y2] \r Fixe la fenêtre de vision de la caméra. Accepte les coordonnées cartésiennes x et y du coin supérieur gauche, suivies par celles du coin inférieur droit de la fenêtre visée. TC [R min R max Gmin Gmax B min B max]\r Poursuite d’une couleur. Accepte les valeurs RVB minimales et émet un paquet de données M ou C (suivant la commande MM). néant (\r) Poursuit la couleur trouvée dans la partie centrale de la fenêtre courante. TW 1 On 64 trouvera une description détaillée dans le manuel de l’utilisateur. elektor - 7-8/2007 Tableau 2. Instructions avancées Instruction Paramètres Description 1 CR [ reg1 value1 [reg2 value2 ... reg16 value16] ]\r Règle directement les registres internes de la caméra. L’adresse des registres et les contenus possibles se trouvent dans la documentation Omnivision. DF néant (\r) Décharge une trame par le port sériel. DM valeur \r Règle le délai avant la transmission des paquets par le port sériel GV néant (\r) Lit la version du microcode installé dans la caméra. HM active \r Règle la caméra en mode demi-résolution horizontale pour les commandes DF et LM pour le vidage d’une image bitmap. I1 néant (\r) Utilise le port servo comme une entrée tout ou rien. LM active \r Active le mode Line qui utilise le temps entre les trames pour transmettre des données plus détaillées sur l’image. RM bit_flags \r Active le mode de transfert brut (Raw). Il lit la valeur des trois premiers bits (LSB) pour configurer les réglages. S1 position \r Règle la position du servo 1. La valeur 0 l’arrête et maintient la ligne au niveau bas. Les valeurs de 1 à 127 règlent la position du servo pendant la poursuite ou l’acquisition des donnés moyennes. valeur \r Active le mode Switching de poursuite de couleur. SM 1 On trouvera une description détaillée dans le manuel de l’utilisateur. ce qui laisse les autres disponibles pour d'autres usages. 8 Fonctions de démonstration Une fois le système de vision CMUcam1AppMod enfiché dans le connecteur AppMod du BoeBot, l'étape suivante consiste à charger le code de démonstration du cédérom dans le Basic Stamp2. Les huit fonctions du programme de démonstration illustrent chacune une des fonctions de la camera CMUcam1. À la première mise sous tension du BoeBot, les huit LED de l'interface AppMod clignotent plusieurs fois, puis le haut-parleur émet un bip pour signaler que le robot est prêt. Chaque fonction commence avec un bip et finit avec deux bips. Les LED clignotent différemment suivant la fonction en cours d'exécution pour indiquer comment elle s'exécute. Les huit fonctions de démonstration sont : 1. Calibrage de la lumière Une vingtaine de secondes sont nécessaires pour permettre à la CMUcam1 d’évaluer les conditions d’éclairage ambiant. 2. Échantillonnage et sauvegarde de la couleur Il faut environ une seconde à la caméra pour se verrouiller sur la couleur d’un objet tenu devant elle ; les LED clignotent et le haut-parleur émet deux bips quand c’est fait. Les données de couleur sont stockées dans la mémoire EEPROM du Basic Stamp2. 3. Poursuite d’une couleur Le robot se déplace en avant, en arrière, à droite et à gauche pour suivre la couleur de l’objet sauvegardée par la fonction 2. 4. Déplacement et contournement Le robot avance et évite les objets à l’aide de sa seule vision. Il le fait en évaluant la plage de couleur du sol devant lui. 7-8/2007 - elektor 5. Poursuite adaptative Le robot se verrouille sur la première couleur qu’il voit et poursuit cette couleur (en avant, à gauche, à droite, mais pas en arrière). S’il perd l’objet pendant environ cinq secondes, il se verrouille sur la première couleur qu’il voit ensuite et la suit jusqu’à ce qu’il la perde et ainsi de suite. 6. Suivi de ligne On suppose qu’une ligne blanche de 1,2 cm environ (un demi-pouce) est tracée sur le trajet. 7. Doigt pointé et poursuite Le robot enregistre, tourne à droite et à gauche en fonction du doigt pointé. Il le fait en utilisant le même angle de visée vers le bas que pour les autres fonctions. 8. Affichage de couleur Le robot allume une ou plusieurs des LED rouge, verte et orange en réponse à la couleur de l’objet placé devant lui. Cela fonctionne bien avec un disque de caoutchouc ou un bloc de plastique coloré de 5 cm de diamètre. Pour la meilleure exécution de toutes les fonctions, la caméra doit être inclinée vers le bas de façon à pointer juste devant le robot. Basic Stamp2SX et Basic Stamp2P Le programme de démonstration et le système CMUcam1-AppMod fonctionnent aussi avec les versions plus puissantes 2SX et 2P du Basic Stamp. Des versions adaptées différentes se trouvent sur le cédérom. Les différences de code sont mineures et liées à la vitesse d’exécution deux fois et demie plus rapide. Vous avez davantage de possibilités avec les Stamps 2SX et 2P du fait de leur vitesse supérieure et de leur mémoire plus vaste. L’interface sérielle du Basic Stamp2 est limitée à 9 600 bauds pour le dialogue avec la caméra, alors que les 2SX et 2P ont un débit maximal de 115 200 bauds. La commutation en 115 200 bauds se fait par le déplacement de deux cavaliers sur la carte. La vitesse supérieure permet au robot de réagir plus vite au système de vision. À propos de la CMUcam et du module La caméra CMUcam1 est constituée d’un microcontrôleur SX28 [6] attelé à une caméra CMOS OV6620 Omnivision [7] sur une puce qui permet d’extraire simplement des données de haut niveau à partir du flux vidéo de la caméra. La platine communique par un port sériel à niveaux TTL, avec les fonctions suivantes : Poursuivre des taches de couleur définie à 17 images par seconde. Trouver le centre de gravité de la tache. Trouver la couleur moyenne et des données sur la variation. Fenêtre arbitraire de l’image. Résolution de 80 x 143. Communication sérielle à 9600 bauds. Détection automatique d’une couleur et pilotage d’un servo pour suivre la couleur. Mode de traitement parallèle asservi sur un bus de caméra unique (fonction avancée). Possibilité de commander un servo ou une broche d’entrée/sortie (fonction avancée). Réglage des propriétés optiques de la caméra (fonction avancée). Si on utilise la caméra à l’extérieur, étant donné la forte teneur en infrarouges de la lumière du soleil, même par temps couvert, il faudra probablement monter un filtre IR ou un filtre gris neutre de densité 3 (c’est-à-dire 3 crans de diaphragme, ou 8 fois, 23) pour réduire la forte intensité lumineuse. Un verre prélevé sur une paire de 65 contrôle du dialogue (ni logiciel Xon/Xoff, ni matériel). Toutes les instructions sont envoyées au moyen de caractères ASCII imprimables, c’est-à-dire que le nombre 123 est envoyé sous la forme des trois chiffres 1, 2 et 3. Après transmission correcte d’une instruction, la chaîne ACK est renvoyée. S’il y a une erreur de syntaxe ou si une erreur de transfert est détectée, la chaîne renvoyée est NCK. La chaîne ACK ou NCK est suivie par \r (retour chariot). Quand une invite est renvoyée (« \r »_ suivi par « : ») cela signifie que la caméra au repos attend une nouvelle instruction. Les espaces blancs sont pris en compte et servent à séparer les paramètres. Le caractères \r (ASCII 13, retour chariot) termine la ligne et active la commande. Si la transmission en caractères imprimables est trop lourde, il est possible d’utiliser différents degrés de transfert de données brutes (Raw mode). Le système reconnaît deux jeux d’instructions : basic (tableau 1) et advanced (tableau 2). lunettes bon marché, placé devant l’objectif, permettra à la CMUcam1 de travailler en plein soleil. Communication sérielle et jeu d’instructions Les paramètres de la communication sérielle sont : 9 600 bauds, 8 bits de données, 1 bit d’arrêt ; pas de parité, pas de Affichage des données de poursuite de la CMUcam1 sur l’écran de débogage. Le premier paquet de données affiché par l’écran de débogage est le paquet « S » (Statistiques) qui indique la couleur de l’objet poursuivi. Cela vous permet d’évaluer les possibilités de votre caméra pour la poursuite d’un objet donné. Essayez des objets de couleurs et de tailles différentes pour voir les effets sur les données de poursuite. C’est un programme important que vous réutiliserez souvent, quand vous trouverez des choses intéressantes à faire avec votre CMUcam1 et votre BoeBot. Ce programme vous permet de voir et comprendre exactement ce que peut voir votre BoeBot avec son système de vision. Vous trouverez sous la référence [8] une courte vidéo qui montre un BoeBot équipé de CMUcam1 repérant un objet rouge. (070132-I) Références ouèbe [1] www.parallax.com [2] www.stampsinclass.com [3] www.cs.cmu.edu/~cmucam Programmes utilitaires [4] www.seattlerobotics.com Le cédérom de Seattle Robotics contient aussi les utilitaires qui suivent. Test de la communication entre CMUcam et BoeBot. Ce programme règle la communication sérielle à 9 600 bauds entre le Stamp et la CMUcam1. Il fait clignoter la LED verte de la caméra. [5] www.milinst.com [6] www.ubicom.com/processors/sx/ sx_family.html [7] www.ovt.com [8] www.seattlerobotics.com/video.htm [9] http://www.lextronic.fr/cmucam/PP.htm Robots moustachus Alexander Wiedekind-Klein Lorsque la télédétection avec caméras vidéo, infrarouge ou ultrasons jette l’éponge, il est temps de se tourner vers les bons vieux capteurs tactiles. Ces « palpeurs » fonctionnent comme les antennes (feelers) ou moustaches (whiskers) dans le règne animal et servent à explorer l’environnement rapproché. En cas de contact, 66 1 un capteur de ce genre transmet un signal au robot signifiant qu’il y a « quelque chose » là. Il est possible de réaliser des capteurs tout à la fois sensibles et stables basés sur des cordes de guitare en acier. Celles-ci tout en étant très flexibles, sont aussi conductrices. Le principe ne pourrait pas être plus simple : Le morceau de fil passe par un manchon métallique. Le fil se plie en cas de contact elektor - 7-8/2007 avec l’environnement et entre en contact électrique avec le manchon. Le mode de réponse et la sensibilité sont principalement déterminés par la longueur et l’épaisseur du morceau de corde. 3. Déplacer la corde dans la gaine pour que seule une longueur d’environ 10 mm soit isolée à l’extrémité du manchon. Fixer la corde au centre au moyen d’adhésif à chaud. Ne pas laisser trop d’adhésif pénétrer dans le manchon. 2 3 +5V Le résultat devrait ressembler à la figure 2. Il n’est pas interdit de se livrer à quelques expériences... La moustache du robot n’est en principe rien d’autre qu’un interrupteur de contact. Pour détecter la collision la plus légère, il est recommandé de déclencher une bascule au moyen de la « moustache » comme dans la figure 3. Le microcontrôleur du robot peut lire le résultat en toute tranquillité avant de réinitialiser la bascule. 10k La réalisation ne constitue pas un obstacle insurmontable, même en cas d’allergie à la mécanique. Procédons comme dans la figure 1 : 1. Couper un morceau de corde de guitare (8 à 10 cm suffisent) et scier environ 2 cm d’un tube en laiton (Ø 4 mm) ; ébarber l’intérieur et l’extérieur de ce dernier. IC1 = 74HC74 4 S 2 D IC1.A 3 C 2. Souder un fil torsadé à une extrémité du petit tube en laiton et un autre fil torsadé à l’extrémité de la corde de guitare. Isoler le point de soudage sur la corde au moyen d’une gaine rétractable. Q Q Entrée capteur 5 6 R 1 Sortie réinitialisation (070282-I) 070282 - 11 Oreille de chauve-souris Alexander Wiedekind-Klein 1 C1 R5 470k 7-8/2007 - elektor 39k 14 11 IC1 IC2 7 4 2 C5 IC1.A 3 ≥1 1 R1 5 IC1.B ≥1 6 4 8 9 Émetteur US IC1.C (40kHz) 10 ≥1 100n 12 R9 13 22k IC1 = CD4001 IC2 = TL084 +5V US +5V IC1.D 11 ≥1 STI 1 +5V 2 3 GND 4 C3 CONTROL C6 R3 10p R6 10p 56k R7 3k9 100n Récepteur US US (40kHz) 100k 2 3 IC2.A C2 1 R2 4k7 V+ 100n C4 4µ7 25V C8 4µ7 25V 13 9 10 IC2.C 8 D1 12 14 IC2.D LL4448 R4 6 180k C7 5 R8 C9 IC2.B 7 R10 22k Les signaux réfléchis sont amplifiés à l’aide d’IC2.A et IC2.C, redressés par D1 et tamponnés par IC2.D. Nous disposons ainsi du « frontal » analogique pour un microcontrôleur. La straté- 150p P1 10k V+ 180k Strictement parlant, ce télémètre à ultrasons fonctionnant par réflexion est plus qu’une simple oreille puisqu’il émet également, à 40 kHz, l’impulsion sonore. Le montage de la figure 1 comprend deux parties. Nous avons, en haut, l’oscillateur de 40 kHz à côté de l’étage de sortie « pushpull » composé d’IC1.C et IC1.D qu’un signal logique de 5 V sur l’entrée de commande (broche 2 de ST1) permet d’activer et désactiver. La fréquence de l’oscillateur s’ajuste précisément à la fréquence de résonance (40 kHz nominal) du convertisseur à ultrasons à l’aide de P1. 100n 070281 - 11 67 gie d’élaboration d’un algorithme de traitement numérique du signal s’appuiera sur les réflexions suivantes: après l’émission d’une salve d’ultrasons pendant 2,5 ms, on balaie pendant 50 ms (étendue de mesurage de 8 m environ, puisque le signal doit aller et revenir) la courbe d’enveloppe du signal reçu fournie par le montage. La figure 2 reproduit l’allure typique du signal. Le tracé rectangulaire vert représente le signal à l’entrée de commande (broche 2 de ST1) qui déclenche l’oscillateur pendant 2,5 ms. On voit déjà pendant cette durée (t1) un premier signal à la sortie du récepteur puisqu’il n’est pas possible d’éviter tout à fait la réception directe du signal émis. Il est bien sûr indispensable d’en tenir compte lors de l’évaluation. Le second signal, après le temps t2, est le signal réfléchi par un objet. Le temps t2 est proportionnel à la distance de l’objet. Il se mesure entre le milieu de l’émission de la salve (donc 1,25 ms après le déclenchement de l’oscillateur) et l’instant de date auquel le signal réfléchi atteint son maximum. La distance de l’objet (dans l’air) en centimètres se calcule très facilement et avec une bonne précision en multipliant simplement par 16 la durée en ms. Si t2 est de 10 ms, par exemple, l’objet est éloigné de 160 cm. Si l’objet est très proche, le signal de retour arrive avant la fin de l’émission puisque la propagation dure très peu. Le signal reçu est également très fort (figure 3). Dans ce cas, le mieux est de mesurer, à partir du déclenchement de l’oscillateur, le temps que met le signal réfléchi pour atteindre environ la moitié de son maximum. Ce temps (t2 sur la figure 3) servira de mesure de la distance de l’objet. 4 Entrée de commande t1 1er maximum Sortie analogique 3ème maximum 2ème maximum Temps 070281 - 14 Si le signal émis rencontre sur son parcours plusieurs objets à des distances différentes, on doit s’attendre à recevoir plusieurs signaux réfléchis d’amplitudes différentes (figure 4). Il est vite évident, dans ce cas, qu’un simple détecteur de seuil, au lieu d’un microcontrôleur, ne fournira pas de résultat fiable. Un microcontrôleur avec un logiciel « intelligent » pourra, en revanche, mesurer l’éloignement de l’objet le plus proche ou, en un seul mesurage, celui de plusieurs objets. Comme le montage, en dehors du +5 V et de la masse, n’a besoin que du signal de commande de l’émetteur et conduit le signal analogique de la courbe d’enveloppe du récepteur vers le matériel d’analyse, on peut équiper un robot de quatre télémètres décalés de 90 degrés, par exemple, pour lui permettre de s’orienter dans l’espace. 2 Entrée de commande Sortie analogique t1 t2 Temps 070281 - 12 3 Entrée de commande Signal très fortement réfléchi t1 Sortie analogique t2 Temps 070281 - 13 (070281-I) Convertisseur A/N pour robots Tilo Gockel Le composant TLC549CP de Texas Instruments se prête fort bien au rôle de convertisseur A/N pour petits robots (en particulier avec des microcontrôleurs compatibles 8051). Cet ADC sériel 8 bits est facilement disponible, relativement peu coûteux et il est facile d’en extraire les données. Un coup d’œil à la fiche technique du TLC549 suffit à faire comprendre la séquence temporelle des lignes I/O Clock, DATA OUT et CS (figure 1). Une manip avec un potentiomètre trimmer comme diviseur de tension fournissant une tension analogique variable est vite mise sur pied. La figure 2 indique la mise en circuit strictement nécessaire du TLC549 et le raccordement à un microcontrôleur compatible 8051. 68 operating sequence 1 2 3 4 5 6 7 8 8 Don’t I/O CLOCK Access Cycle B tsu(CS) tconv (see Note A) Sample Cycle B 1 2 3 4 5 6 7 Care Access Cycle C Sample Cycle C tsu(CS) CS twH(CS) DATA OUT A7 Hi-Z State A6 A5 A4 A3 A2 A1 A0 Previous Conversion Data A MSB LSB (see Note B) Hi-Z State B7 B7 A7 Conversion Data B MSB ten B6 B5 B4 B3 B2 B1 B0 MSB LSB MSB ten NOTES: A. The conversion cycle, which requires 36 internal system clock periods (17 µs maximum), is initiated with the eighth I/O clock pulse trailing edge after CS goes low for the channel whose address exists in memory at the time. B. The most significant bit (A7) is automatically placed on the DATA OUT bus after CS is brought low. The remaining seven bits (A6–A0) are clocked out on the first seven I/O clock falling edges. B7–B0 follows in the same manner. Comment se présente le code source nécessaire pour lire les données sérielles du TLC549, c’est-à-dire pour les envoyer au contrôleur au rythme approprié ? elektor - 7-8/2007 +5VDC µC51 1 REF+ 8 VCC TLC549 I/O CLOCK DATA OUT 2 ANALOG 7 6 Px.x A7 A6 A5 5 A4 A3 A2 A1 A0 Px.x Px.x 10k 3 REF- GND //_wait(); // > 20 usek (50kHz) P3_B0 = 0; for(count = 0; count < 8; count++){ addat = addat << 1; if (P1_B3 == 1) ++addat; P1_B2 = 1; //_wait(); P1_B2 = 0; } return addat; } 4 070134 - 12 Lors de nos essais avec une carte contrôleur AT89S8252 (carte flash ELEKTOR), il s’est avéré que la fonction _ wait() est superflue, car le contrôleur n’est pas particulièrement rapide (voir les commentaires dans le listage). L’implémentation en C devrait donc être : unsigned char unsigned char unsigned char P1_B2 = 0; // P3_B0 = 0; // P3_B0 = 1; // ReadADC1() { count; addat = 0; clk Chip Select Cette conversion A/N peut servir par exemple à raccorder 2 photorésistances (LDR) au microcontrôleur par le biais de 2 circuits TLC549 pour y lire leur état. Il suffit de reproduire à deux exemplaires le circuit de la figure 2. Les photorésistances sont intercalées dans les diviseurs de tension formés par les potentiomètres trimmer voire tout simplement raccordées en parallèle sur ceux-ci. (070134-I) Boussole pour Mindstorms® NXT Lego Zeno Otten Elektor a accordé, il y a quelques années, toute l’attention voulue à la construction de capteurs pour le bloc de commande intelligent (RCX) du Mindstorms de Lego [1]. Celui-ci a trouvé entre temps un successeur. Le NXT est le coeur du nouveau Mindstorms. Avec ce système, l’amateur de microinformatique peut s’en donner à coeur joie, développer, construire et, surtout, programmer de nombreux de robots. Avec un compas (une boussole) le NXT peut déterminer son cap à quelques degrés près. Un robot équipé de ce capteur pourra naviguer. teurs à effet Hall KMZ51 de Philips disposés à angle droit pour détecter le champ magnétique terrestre. Un petit contrôleur PIC calcule une valeur comprise entre 0 et 360 degrés et la met numériquement à disposition à la sortie du module. La communication avec le monde extérieur s’effectue par l’intermédiaire d’une procédure I2C ou des impulsions d’un signal. Le module demande 5 V de tension d’alimentation et consomme environ 20 mA. Il est (presque) fait sur mesure pour le NXT. Connexion NXT 4V3 +V 4 1 2 I C NXT SCL 2 5 I C NXT SDA 6 NXT GND 3 CMPS03 82k 82k +5V Robot Compass Module SCL SCL GND SDA 2 9 3 SDA GND 070156 - 11 Module de compas CMPS03 Devantec [2] fournit un module de compas tout équipé. Ce module utilise deux cap- 7-8/2007 - elektor Le nouveau NXT supporte des capteurs qui utilisent la procédure I2C. Il est de ce fait possible de connecter le capteur par l’intermédiaire d’une prise RJ12 au NXT. Il suffit de savoir que le bus I2C du NXT ne comporte pas de résistances de rappel au niveau haut. Celles-ci lui seront donc câblées à l’extérieur. Lego conseille des résistances de 82 kΩ tant sur la ligne de données (SDA) que sur celle d’horloge (SCL). Programme La programmation du Mindstorms de Lego consiste à associer les uns aux autres des blocs de fonctions représentées par des 69 icônes. Outre cette association, il n’est possible de modifier que les paramètres des blocs, leurs fonctions sont définies une fois pour toutes. Not Exact C (NXC) est un langage de programmation pour le NXT qui ressemble beaucoup au C. La programmation y est beaucoup plus souple. Il est sûr que cela simplifie les choses lorsqu’il s’agit de programmer du matériel étranger à Lego comme ce compas. Le compilateur (BricX) [3] est disponible gratuitement, son utilisation est simple et il offre beaucoup de possibilités pour la programmation du NXT. Le programme « compass.nxc » (gratuit, à télécharger sur le site d’Elektor sous la référence 070156-11) collecte en continu les données du capteur. Les valeurs mesurées sont ensuite traitées dans un robot qui « indique » successivement le nord, le sud, l’est et l’ouest. Les valeurs de mesure du compas électronique s’affichent sur l’écran du bloc NXT. (070156-I) Bibliographie et liens Internet [1] Boussole pour RCX de Lego, Z. Otten, Elektor n° 288, juin 2002, page 20 et suivantes [2] Devantec: http://www.robot-electronics. co.uk/shop/Compass_CMPS032004.htm [3] BricX: http://bricxcc.sourceforge.net/ Interrupteur/indicateur de surchauffe T. K. Hareendran entraîne aussi T2 en conduction pour alimenter suffisamment R1 R3 À la base de ce circuit, on l’oscillateur et le faire démarC6 trouve un capteur de tempérer. Le 555 est en mode astable 2x 100µ BC 547 16V T2 rature de précision du type et commande directement un T1 C1 LM35 (IC1) qui fournit un vibreur piézoélectrique, Bz1, 10µ 16V R4 1 signal linéaire et juste, direcqui donne un puissant signal IC2 R7 R2 5 tement proportionnel à la d’alerte. Ce sont les composants 7 IC1 2 3 C5 12k 4 8 6 LM35 température dans la gamme R7, R8 et C4 qui déterminent le 47µ 16V 2 R 8 7 3 4 DIS rythme des pulsations sonores. de zéro à +155 °C. La tension 1 IC3 R8 CA3130 de sortie du LM35 change de On peut utiliser le circuit LMC555 2 3 TR OUT TP1 d’émetteur de T1 (TP1) pour for10 mV par variation de 1 Kel6 THR CV vin. Par construction, le LM35 mer une commande transistoriBZ1 R5 R6 5 1 C3 C4 ne consomme que très peu de sée de relais. De même, il est P1 10µ 1µ 10k courant ce qui lui permet de possible de remplacer l’avertis16V 16V 5V réduire considérablement sa seur piézo par un relais adéquat 060349 - 11 propre dissipation, même en capable de commuter un flash l’absence de courant d’air. puissant, une sirène ou autre relève sa sortie jusqu’à environ 2,2 V, ce qui Dès que la température mesurée excède le dispositif d’alarme alimenté sur secteur. niveau défini par l’utilisateur, le comparateur polarise instantanément le transistor T1, mais (060349-I) 1M 2k2 22k 220k 12k 10k 1k +5V REG Commutateur à commande sonore Hesam Hoshiri 70 +5V...+12V R4 33k R6 1k8 R2 3M3 R1 5k6 T3 R5 330 Ω BD140 C2 R3 47k Il peut s’avérer utile de commander par le son, non seulement en robotique mais aussi en domotique, par exemple, question de se construire une lampe qui répond à un coup sur la porte ou un claquement des mains. La lumière s’éteindra d’elle-même après quelques secondes. Elle peut constituer un moyen de dissuasion contre les cambriolages : si un individu tente d’ouvrir la porte ou de casser quelque chose, la lumière s’allumera et fera penser qu’il y a quelqu’un sur place. Le circuit peut fonctionner avec n’importe quelle source régulée de courant continu entre 5 et 12 V, selon la tension requise pour la bobine du relais. Quand vous brancherez l’alimentation pour la première fois, le relais s’activera C1 0µ1 MIC1 4µ7 T2 T1 2SC945 2SC945 D1 RE1 1N4007 060379 - 11 sous l’effet du condensateur C2. Attendez quelques secondes pour qu’il retombe. Vous pouvez augmenter ou diminuer la période d’allumage en changeant la valeur de C2. Une capacité plus grande allonge la période et vice-versa. N’utilisez pas de valeur supérieure à 47 µF. La résistance de polarisation R1 détermine dans une large mesure la sensibilité du microphone. D’ordinaire, un micro à électret est équipé d’un FET embarqué qui réclame une tension de polarisation pour fonctionner. Cherchez donc par essais successifs le niveau optimal de réponse au son. Il y a lieu de prendre toutes les précautions requises quand on travaille sur des appareils alimentés par le secteur, en particulier ici les contacts des relais. (060379-I) elektor - 7-8/2007 LED comme capteur de lumière Andreas Grün La mesure de la luminosité joue un rôle important en robotique, et plus encore la mesure des variations de luminosité. On utilise généralement un circuit standard (figure 1) pour mesurer le courant photoélectrique d’un photo-transistor par la chute de tension aux bornes de R1 (et ensuite un convertisseur analogique-numérique). C’est la valeur de R1 qui fixe les limites de la plage de mesure. Une forte résistance convient pour les faibles éclairements, une moins forte pour les éclairements plus intenses. En tout état de cause la plage de mesure est déterminée aussi par la résolution du convertisseur analogique-numérique. 1 VCC R1 T1 070356 - 11 Une diode LED polarisée dans le sens bloqué laisse passer aussi un courant photoélectrique. Toutefois ce courant, notablement inférieur à celui d’un photo-transistor, exclut toute mesure directe. La publication de Mitsubishi référencée en [1] éclaire une nouvelle voie. Le dispositif présenté là exploite le fait qu’une LED polarisée en inverse présente une forte capacité. Pour la mesure, cette capacité est chargée d’abord pour être ensuite déchargée par le courant photo-électrique. La durée de la décharge est une mesure de l’éclairement (figure 2). La charge et la mesure peuvent se faire simplement à l’aide d’une seule broche du microcontrôleur, si elle peut être commutée entre sortie et entrée. Comme entrée, elle présente une forte impédance qui n’influe pas sur la décharge. La mesure s’effectue en deux étapes : 1. Commuter la broche en sortie et la porter au niveau haut ; la capacité se charge (figure 3). 2. Commuter la broche en entrée, inhiber la polarisation éventuelle et mesurer le temps que met l’entrée à repasser au Listage niveau bas (figure 4). L’exemple de programme selon le listing a été écrit pour des processeurs Atmel AVR. Ce programme de test inverse après chaque cycle tous les bits du port A, de façon à produire un signal de rapport cyclique proche de 50% et de fréquence proportionnelle à l’éclairement. La fréquence varie du millihertz (pièce obscure) à quelques centaines de kilohertz (éclairage direct de la LED). Une telle dynamique de mesure est inimaginable avec un convertisseur analogique-numérique. En fait, on mesure une période et non une fréquence. À cette large dynamique s’ajoute un autre avantage : les LED se trouvent avec des angles de rayonnement divers, ce qui permet de choisir la zone de mesure. De même les LED sont sensibles à la couleur, ce qui peut être mis à profit pour la reconnaissance des couleurs. Ainsi s’ouvrent à la robotique une série de nouvelles possibilités. (070356-I) Source www.merl.com/publications/TR2003‑035/ Exemple de programme #include <avr/io.h> #include <avr/interrupt.h> 2 #define LEDPIN 0x40 // LED on PB6 I photo 070356 - 12 int main() { unsigned char cr=0,cb=0; DDRB = 0x00; // PORTB input DDRA = 0xff; // PORTA output for display LEDs PORTA = 0; // off PORTB = LEDPIN; // PB6 hi 3 sei(); VCC while(1) { if((PINB & LEDPIN) == 0) // discharge complete { PORTB = LEDPIN; // PB6 hi // multiple times to get enough charging time DDRB |= LEDPIN; // PB6 output and DDRB |= LEDPIN; // PB6 output and DDRB |= LEDPIN; // PB6 output and DDRB |= LEDPIN; // PB6 output and 070356 - 13 4 hi, hi, hi, hi, charges charges charges charges LED LED LED LED DDRB &= ~LEDPIN; // PB6 input, still charging w/ pullup PORTB = 0; // switch off pullup PORTA ^= LEDPIN; // toggle PORTA for display LEDs IN } } return(0); 070356 - 14 7-8/2007 - elektor } 71 Quel cerveau pour mon robot ? Petit guide pratique C. Tavernier Plus encore que toute autre réalisation électronique, un robot ne peut aujourd’hui quasiment pas se passer de la présence d’au moins un microcontrôleur pour le piloter. La question de son choix se pose donc tout naturellement et cet article est là pour vous aider dans cette tâche délicate. En effet, si les robots les plus simples peuvent se satisfaire de quasiment n’importe quel type de microcontrôleur programmé dans le langage de votre choix ; au fur et à mesure que la complexité du robot croît, on s’aperçoit que certains circuits sont mieux adaptés que d’autres à une application purement robotique. Après un court exposé des besoins particuliers qui caractérisent les robots, nous allons donc vous présenter un certain nombre de microcontrôleurs et tenter de mettre en avant leurs points forts dans le cadre d’une utilisation robotique. Le besoin crée l’organe Si on le compare à un montage électronique classique, un robot comporte certaines particularités qui influent directement sur le choix du microcontrôleur qui l’équipe. Ainsi, qu’il soit fixe ou mobile – et les premiers robots réalisés par des amateurs sont très souvent mobiles car il faut bien reconnaître que ce sont les plus spectaculaires – un robot comporte toujours un ou plusieurs moteurs. Comme vous avez pu le découvrir tout au long de ce numéro d’Elektor, ils peuvent revêtir la forme de servos de radiocommande, de moteurs pas à pas ou bien encore de moteurs à courant continu. Aucun ne se commande exactement de la même façon mais tous demandent au microcontrôleur de savoir générer de manière plus ou moins répétitive des impulsions. Notre robot est évidemment muni de capteurs. Si les versions les plus simples se 72 contentent de simples « moustaches » ou détecteurs d’obstacles à contacts ; au fur et à mesure que les robots évoluent, ils se couvrent littéralement de capteurs dont certains peuvent être très complexes. Les informations qu’ils délivrent sont le plus souvent de type numérique, depuis la simple information « tout ou rien » d’un interrupteur ouvert ou fermé, aux complexes trames NMEA d’un récepteur GPS. Quelques rares capteurs fournissent également une information sous forme analogique et il importe de ne pas les oublier. Le microcontrôleur de notre robot doit donc disposer de nombreuses lignes de ports parallèles pour les informations de type « tout ou rien », mais également d’interfaces série asynchrones et synchrones (I2C, SPI, etc.) pour les capteurs délivrant une information plus complexe (boussoles électroniques, inclinomètres, etc.) ainsi que d’au moins un convertisseur analogique/digital pour les informations de type analogique. Jusque là, tout ce que nous avons exposé reste à la portée de tous les microcontrôleurs actuels et ne nous aide pas beaucoup à faire notre choix. En fait, la situation est plus compliquée que peut le laisser croire cet exposé que l’on peut qualifier de « statique ». En effet, lorsque notre robot est en mouvement il faut tout à la fois commander ses moteurs, interpréter l’information délivrée par les capteurs et prendre les décisions qui s’imposent. Sur les robots les plus simples, dotés d’un faible nombre de capteurs, on peut y arriver en programmation séquentielle classique, mais dès que le nombre ou la complexité des capteurs augmente, la situation devient vite inextricable. Il faut alors faire appel à un fonctionnement multitâche, c’est à dire encore à un mode de fonctionnement pendant lequel le microcontrôleur s’occupe tout à la fois et « en même temps » des capteurs, des moteurs et des prises de décisions. Tous les microcontrôleurs et tous les langages de programmation sont hélas loin de pouvoir y parvenir. La dernière particularité des robots est que, contrairement à des montages électroniques classiques, ils sont souvent réalisés par des amateurs venus d’autres horizons que l’électronique. Mécaniciens, modélistes, simples curieux se lancent ainsi dans la conception de robots. Pour tous ces concepteurs, qui apportent beaucoup au monde de la robotique car ils ont une vision différente de celle des électroniciens, il faut que le microcontrôleur soit simple à mettre en œuvre et à programmer. Cette simplicité bute parfois sur l’écueil du fonctionnement multitâche que nous venons d’évoquer mais nous allons voir que, par un choix judicieux du microcontrôleur, il est possible de concilier l’inconciliable. Microcontrôleurs ordinaires ou spéciaux ? Si l’électronique n’a plus de secret pour vous et si la programmation ne vous fait pas peur, vous pouvez bien évidemment choisir pour votre robot un microcontrôleur classique. PIC de chez Microchip, AVR de chez Atmel, etc. ; la liste est longue d’autant que chaque fabricant propose une large palette de circuits aux ressources très diverses. Ainsi chez Microchip, la famille PIC18 est en train de supplanter peu à peu la famille PIC16 qui a fait les délices des amateurs elektor - 7-8/2007 pendant de nombreuses années. Les circuits sont en effet plus performants, plus puissants et coûtent à peine plus cher. Quant aux outils de développement, l’indétrônable MPLAB, de plus en plus agréable d’emploi et toujours gratuit bien sûr, fonctionne aussi bien avec les uns qu’avec les autres et la transition se fait donc en douceur. Et si la puissance de la famille PIC18 ne vous suffit pas, la famille PIC24 est toute prête à la remplacer comme Elektor s’en est fait l’écho à partir du numéro 343 avec la présentation de l’Explorer-16. Même son de cloche chez Atmel où les circuits AVR de la gamme ATméga, rares et coûteux il y a encore quelques années, sont aujourd’hui à portée de toutes les bourses avec leurs innombrables ressources internes et leurs capacités mémoire parfois impressionnantes. Là encore l’outil de développement AVR Studio est gratuit et se trouve à votre disposition sur le site d’Atmel. Compte tenu de ce que nous venons d’écrire, ce n’est cependant pas à ces circuits « classiques » que nous allons nous intéresser, d’autant que ce sujet a déjà été traité par le passé dans Elektor (numéro 322), mais à des microcontrôleurs « spéciaux » qui rencontrent un vif succès en robotique en raison de leur facilité de mise en œuvre et des particularités de leur langage de programmation. Vous connaissez certainement le plus ancien d’entre eux qui n’est autre que le célèbre Basic Stamp, mais il est loin aujourd’hui d’être le seul. En effet, ce concept imaginé par Parallax a fait des émules, et on rencontre désormais sur le marché de nombreux microcontrôleurs qui se réclament de sa filiation tout en prétendant, bien sûr, faire beaucoup mieux. C’est parmi ces circuits, que nous vous proposons de faire votre choix. Un ancêtre qui a bien vieilli Pour ceux d’entre vous qui ne le connaîtraient pas encore, sachez que le Basic Stamp, développé et commercialisé dès 1993 aux Etats-Unis par la société Parallax, est un microcontrôleur qui se comporte comme s’il était directement programmable en Basic, mais cette particularité est loin d’être la seule à avoir assuré son succès. En effet, c’est aussi un microcontrôleur prêt à l’emploi car il ne lui faut ni quartz d’horloge, ni circuit de reset externe, ni même une alimentation stabilisée pour fonctionner. Il dispose déjà de tout cela en interne. Comme tout microcontrôleur qui se respecte, le Basic Stamp doit être programmé, mais cette programmation se réalise en langage Basic, simple d’emploi et accessible à tous, au point d’être presque devenu un standard sur lequel se sont appuyés ses 7-8/2007 - elektor Tableau 1. Brochage du Basic Stamp 2 en boîtier 24 pattes, adopté par nombre de ses concurrents (Basic Atom 24, Cubloc CB220, Javelin Stamp entre autres). Appellation N° de broche Fonction SOUT 1 Sortie de programmation (port série du PC) S IN 2 Entrée de programmation (port série du PC) ATN 3 Entrée de programmation (port série du PC) VSS 4 et 23 Masse P0 à P15 5 à 20 Ports d’entrées/sorties VDD 21 Sortie (entrée si VIN trop faible) 5 volts stabilisés RST 22 Entrée de reset externe manuel si nécessaire VIN 24 Alimentation positive non stabilisée de 5 à 15 volts (12 volts pour 2E, 2SX et 2P24) successeurs. Aucun programmateur n’est nécessaire puisque ce dernier se résume à … un simple câble reliant le Basic Stamp ou port série de n’importe quel PC, même ancien ou de bas de gamme. L’outil de développement, destiné à l’écriture des programmes, est totalement gratuit et disponible en téléchargement libre sur le site de Parallax. Même si le plus simple des Basic Stamp, en l’occurrence le Basic Stamp 1, peut être utilisé pour piloter un robot, nous vous conseillons sans hésiter de faire appel au minimum au Basic Stamp 2 afin de bénéficier de ressources plus nombreuses et d’un jeu d’instructions plus riche. En outre, de très nombreux successeurs du Basic Stamp 2, appelé BS2 dans la suite de cette étude, lui sont compatibles broche à broche, ce qui permet un éventuel remplacement lors de l’évolution du robot sans avoir à modifier l’électronique associée. La figure 1 présente tout à la fois l’aspect physique du BS2 et son brochage tandis que les fonctions des différents signaux disponibles sont rappelées tableau 1. Comme tous ses successeurs, le Basic Stamp n’est pas un « vrai » circuit intégré mais un minuscule circuit imprimé de la taille d’un circuit intégré DIL à 24 pattes sur lequel ont pris place un certain nombre de composants CMS dont : un microcontrôleur, Figure 1. L’aspect physique, les dimensions et le brochage du Basic Stamp 2 ont été repris par nombre de ses concurrents : Basic Atom 24, Javelin Stamp, Cubloc CB220 entre autres. sa circuiterie de reset et d’horloge, une mémoire EEPROM destiné au stockage du programme et un régulateur 5 volts pour son alimentation. Basé sur un « vieux » PIC16C57 à 20 MHz, le BS2 se programme directement en Basic, Même s’il est un peu dépassé aujourd’hui, voici le père de tous les Basic Stamp : le Basic Stamp 1. 73 Tableau 2. Caractéristiques principales des différents Basic Stamp et du Javelin Stamp. Paramètre Basic Stamp 2 Basic Stamp 2SX Basic Stamp 2E Basic Stamp 2P24 Basic Stamp 2P40 Javelin Stamp Microcontrôleur PIC16C57 SX28 SX28 SX48 SX48 SX48 Fréquence d’horloge 20 MHz 50 MHz 20 MHz 20 MHz 20 MHz 25 MHz Mémoire de programme (octets) 2 K 8 x 2 K 8 x 2 K 8 x 2 K 8 x 2 K 32 K Mémoire de programme (instructions) 500 4 000 4 000 4 000 4 000 – Mémoire de travail (octets) 32 32 32 38 38 32 K Mémoire bloc-notes (octets) – 64 64 128 128 – Vitesse (inst./sec.) 4 000 10 000 4 000 12 000 12 000 8 500 Nombre d’instructions Basic 36 39 39 55 55 0 (Java) Entrées/sorties parallèles 16 16 16 16 32 16 Courant maximum absorbé/ fourni par sortie 20/25 mA 30/30 mA 30/30 mA 30/30 mA 30/30 mA 30/30 mA Courant maximum absorbé/ fourni par circuit 40/50 par groupe de 8 entrées/sorties 60/60 par groupe de 8 entrées/sorties 60/60 par groupe de 8 entrées/sorties 60/60 par groupe de 8 entrées/sorties 60/60 par groupe de 8 entrées/sorties 60/60 par groupe de 8 entrées/sorties Interface de programmation Port série PC 9 600 bauds Port série PC 9 600 bauds Port série PC 9 600 bauds Port série PC 9 600 bauds Port série PC 9 600 bauds Port série PC 28 800 bauds Tension d’alimentation 5 à 15 V 5 à 12 V 5 à 12 V 5 à 12 V 5 à 12 V 5 à 24 V Consommation en fonctionnement 8 mA 60 mA 20 mA 40 mA 40 mA 80 mA Consommation en veille 100 µA 200 µA 100 µA 400 µA 400 µA Pas de mode veille appelé parfois PBasic, et s’avère capable d’exécuter environ 4 000 instructions par seconde tandis que sa mémoire peut stocker environ 500 lignes de programme. Son succès planétaire, et le mot n’est pas trop fort, a poussé Parallax à mettre sur le marché d’autres BS2 dont voici rapidement résumés les points forts. Première évolution à avoir vu le jour, le Basic Stamp 2SX ou BS2SX, est en fait une version nettement plus rapide du BS2. Il exécute en moyenne 10 000 instructions par seconde grâce au remplacement du microcontrôleur du BS2 par un SX28 de la société Ubicom. La mémoire de programme est également de taille plus importante et peut accueillir environ 4 000 lignes de programme. Tout cela est bien sûr transparent pour l’utilisateur et le jeu d’instructions du BS2SX est identique à celui du BS2 hormis trois instructions nouvelles permettant justement de gérer cette mémoire supplémentaire. Le BS2SX et sa mémoire de programme de taille relativement importante ont créé un besoin chez certains utilisateurs de Basic Stamp qui, tout en souhaitant bénéficier de cette mémoire plus vaste, n’avaient pas besoin de la vitesse (et donc du prix !) du BS2SX. Parallax leur a donc proposé le Basic Stamp 2E qui n’est autre qu’une version « dégradée », uniquement au plan de la vitesse s’entend, du BS2SX. Le Basic 74 Stamp 2E a donc toutes les caractéristiques du BS2SX mais il affiche la même vitesse d’exécution des programmes que le BS2. Les Basic Stamp 2P24 et 2P40 présentent quant à eux des innovations plus nombreuses mais peuvent être présentés simultanément car leurs caractéristiques sont identiques à un seul détail près que nous verrons dans un instant. Outre le fait qu’ils soient plus rapides que le déjà rapide BS2SX, puisqu’ils atteignent 12 000 instructions par seconde ; ils disposent d’un jeu d’instructions étendu puisque les 36 ou 39 instructions des BS2 ou BS2SX passent à 55. Cette augmentation se traduit par l’apparition d’instructions très puissantes et extrêmement pratiques capable de commander directement un afficheur alphanumérique à cristaux liquides, de dialoguer avec des périphériques sur bus I2C ou bien encore de piloter des circuits disposant d’un bus « un fil » de Dallas. Cette évolution se fait toutefois intelligemment et les 36 instructions du BS2 se retrouvent donc identiques à elles-mêmes parmi les 55 instructions des BS2P24 et BS2P40. Le BS2P24 adopte un brochage compatible des autres Basic Stamp tandis que le BS2P40 adopte l’allure d’un circuit DIL 40 pattes ce qui lui permet de disposer de 16 lignes de ports parallèles supplémentaires par rapport aux boîtiers 24 pattes. Le tableau 2 synthétise les informations les plus importantes relatives aux différentes versions de Basic Stamp afin de vous gui- der dans votre choix. Notez qu’il contient, par raison de commodité, le Javelin Stamp décrit dans la suite de cette étude. Tous ces Basic Stamp font merveille dans des robots car leur jeu d’instructions a réellement été conçu pour un usage orienté microcontrôleurs. Ainsi, pour faire passer la ligne de port parallèle P2 au niveau haut on écrit tout simplement HIGH P2, pour lui faire générer des impulsions on utilise l’instruction PULSIN, pour recevoir des données sous forme série asynchrone on utilise SERIN alors que pour lui faire émettre des données sous forme série synchrone on utilise SHIFTOUT. Du fait de la syntaxe très simple et très parlante (en anglais bien sûr mais ce n’est pas vraiment un problème) de ces instructions, n’importe qui est capable d’écrire des programmes pour un Basic Stamp après seulement quelques heures de manipulations et sans connaissances préalables en programmation. En outre, vu l’ancienneté et le succès du Basic Stamp, la bibliothèque de programmes disponibles est immense. Il suffit de « donner un p’tit coup de Google » pour le constater. Le Basic Stamp est donc à notre avis un bon choix pour qui veut débuter en robotique même s’il présente à nos yeux deux défauts d’inégale importance : il reste un produit cher si on le compare aux autres circuits similaires, et il ne supporte pas le elektor - 7-8/2007 Le Basic Stamp a fait des petits. fonctionnement multitâche. Ce point doit toutefois être relativisé par le fait qu’un certain nombre de microcontrôleurs qui le supportent sont compatibles broche à broche avec les Basic Stamp 24 pattes et permettent donc une substitution facile en cas d’évolution du robot en ce sens. Les « clones » du Basic Stamp Le succès du Basic Stamp a évidemment fait des envieux et différents produit ont tenté de l’imiter tout en cherchant à compenser certaines de ses faiblesses. Deux produits au moins sont dans ce cas : le Basic Atom 24 de la société Basic Micro et la gamme PICBasic de Comfile Technology. Basé sur un PIC16F876, le Basic Atom 24, compatible broche à broche avec les Basic Stamp 2 en boîtiers 24 pattes, dispose d’une mémoire de programme de la taille de celle du BS2E. Il est globalement plus rapide, avec environ 33 000 instructions par seconde, et propose des ressources internes plus nombreuses dont un convertisseur analogique/digital, deux ports PWM et un relatif support des interruptions. Son jeu d’instructions est également plus riche que celui des Basic Stamp « classiques » et s’apparente à celui des Basic Stamp 2P en étant toutefois un peu plus complet du fait de ses ressources internes plus nombreuses. Il peut donc représenter une alterna- 7-8/2007 - elektor tive intéressante au Basic Stamp d’autant qu’il est un peu moins coûteux à l’achat. A son passif nous devons toutefois noter que lui non plus n’est pas multitâche et que son réseau de distribution laisse à désirer car le produit n’a manifestement pas eu le succès espéré par ses concepteurs (ou est arrivé trop tard sur le marché). Comme il est assez peu utilisé, la bibliothèque de programmes le concernant est également sans commune mesure avec celle du Basic Stamp. Le PICBasic quant à lui est, ou plutôt a été, un succédané de Basic Stamp 2 conçu par la société Coréenne Comfile Technology. Nous n’en parlerons pas ici car ce produit est manifestement en voie d’extinction si l’on en croit le site Internet de Comfile, au profit de la gamme Cubloc de ce même fabricant. Lorsque vous aurez découvert dans un instant les possibilités du Cubloc et sachant qu’un CB220 (entré de gamme Cubloc) coûte quasiment le même prix qu’un PICBasic 2S, vous comprendrez aisément les raisons de cet abandon. Un premier pas vers le multitâche C’est encore une fois Parallax qui a innové en matière de multitâche avec deux produits distincts aux finalités totalement différentes. Le premier, qui est aussi le plus ancien, est le Javelin Stamp, beaucoup moins connu que le Basic Stamp. Il faut dire que son prix qui avoisine les 67 euros y est peut-être pour quelque chose ... Le Javelin Stamp se présente donc physiquement comme un Basic Stamp 2 mais il se programme en Java. Ce n’est pas cela bien sûr qui suffit à lui conférer son caractère multitâches mais le fait qu’il dispose de deux modes de fonctionnement : un mode « avant-plan » (ou foreground en bon anglais), dans lequel s’exécute le programme principal écrit en Java donc, et un mode « arrière-plan » (ou background) dans lequel peuvent s’exécuter un certain nombre de tâches indépendamment, et donc en même temps, que le programme principal. Ces tâches s’exécutent au moyen de périphériques virtuels ou VP qui, pour ce qui est du mode arrière-plan, sont au nombre de cinq : UART, génération de signaux PWM, timer 32 bits, convertisseur digital/ analogique 1 bit et convertisseur analogique/digital de type delta sigma. Ainsi par exemple, la génération de signaux PWM en arrière-plan s’avère très intéressante dans le cadre des applications robotiques puisque de nombreux moteurs sont commandés par des signaux de ce type. Le Javelin Stamp peut donc piloter par exemple les moteurs d’un robot et convertir l’information analogique provenant d’un 75 Figure 2. Architecture interne du Cubloc CB220. capteur tout en continuant à exécuter son programme principal. Indépendamment de ces particularités, le Javelin Stamp utilise un processeur Ubicom SX48 fonctionnant à 25 MHz ce qui lui confère une vitesse d’exécution de 8 500 instructions par seconde ; ses autres caractéristiques essentielles étant résumées dans le tableau 2 afin de vous permettre une comparaison rapide avec les Basic Stamp. Le caractère partiellement multitâche du Javelin Stamp en fait donc un processeur intéressant pour des applications robotiques mais il souffre à nos yeux de deux défauts : son prix excessif si on le compare à des processeurs « concurrents » et le fait qu’il se programme en Java, qui est tout de même un langage assez difficile à maîtriser pour qui n’a jamais fait de programmation. Un microcontrôleur à deux têtes Le PicBasic (à droite) marquait l’entrée de Comfile Technology dans le monde de ces microcontrôleurs particuliers. Il n’était pas encore compatible broche à broche avec le Basic Stamp 2 (à gauche). Figure 3. L’architecture interne du Propeller a de quoi impressionner mais permet réellement un fonctionnement multitâche. 76 La gamme Cubloc de Comfile Technology est quant à elle beaucoup plus innovante en matière de multitâche. En effet, comme le montre la figure 2 qui présente la structure interne d’un Cubloc, ce microcontrôleur est en fait double et comporte d’un côté un processeur qui se programme en Basic et de l’autre un processeur qui se commande en langage Ladder. Ce langage, qui vous est peut-être inconnu, n’est autre que le langage utilisé pour les automates programmables. Ces deux processeurs du Cubloc peuvent bien sûr fonctionner simultanément ce qui fait véritablement du Cubloc un processeur multitâche, sous réserve bien sûr que l’on mélange programmation en Basic et programmation en Ladder. Afin de faciliter sa prise en mains, il est bien sûr possible de ne le programmer que dans un langage ou dans l’autre, et si vous choisissez le Basic, sachez que sa syntaxe est proche de celle du Basic Stamp avec, toutefois, de nombreuses nouvelles instructions facilitant la génération de signaux PWM, ou bien encore le pilotage d’un bus I2C, l’interfaçage avec un clavier, etc. Bien que la gamme Cubloc comporte actuellement quatre modules principaux dont les caractéristiques essentielles sont résumées tableau 3, nous vous conseillons de faire vos première armes avec le CB220. Outre le fait que ce soit le moins coûteux des Cubloc, ce circuit est en effet compatible broche à broche avec le Basic Stamp 2 et permet donc de faire évoluer une application monotâche utilisant ce dernier en application multitâche, sans avoir à faire la moindre modification de sa partie électronique. En outre, compte tenu du fait qu’il est basé sur un ATmega128 à 18 MHz, il peut elektor - 7-8/2007 Tableau 3. Caractéristiques principales des différents Cublocs. Paramètre CB220 CB280 CB290 CB405 Microcontrôleur ATmega128 ATmega128 ATmega128 ATmega2560 Fréquence d’horloge 18,432 MHz 18,432 MHz 18,432 MHz 18,432 MHz Mémoire de programme 80 K 80 K 80 K 200 K Mémoire vive (RAM) 2 K (Basic) 1 K (Ladder) 2 K (Basic) 1 K (Ladder) 24 K (Basic) 4 K (Ladder) 51 K (Basic) 4 K (Ladder) 55 K (pile) EEPROM de données 4 K 4 K 4 K 4 K Vitesse (inst./seconde) 36 000 36 000 36 000 36 000 64 Entrées/sorties 16 49 91 (33 entrées, 32 sorties et 26 entrées/sorties) Ports série 1 RS-232 1 TTL 1 RS-232 1 TTL 1 RS-232 1 TTL 4 RS-232 Convertisseur A/D 8 canaux 10 bits 8 canaux 10 bits 8 canaux 10 bits 16 canaux 10 bits Convertisseur D/A 3 canaux 16 bits (PWM) 6 canaux 16 bits (PWM) 6 canaux 16 bits (PWM) 12 canaux 16 bits (PWM) Interruptions externes – 4 4 4 Compteurs rapides 2 x 32 bits 2 x 32 bits 2 x 32 bits 2 x 32 bits Horloge temps réel – – Oui – Tension d’alimentation 5 à 12 V 5 V 5 V 5 V Consommation en fonctionnement 40 mA 40 mA 70 mA 50 mA Boîtier DIL 24 pattes compatible Basic Stamp 2 Module 64 pattes Module 108 pattes Module 80 pattes exécuter environ 36 000 instructions par seconde et sa mémoire de programme offre une capacité très confortable de 80 Koctets. Notez qu’il dispose également d’un convertisseur analogique/digital 10 bits à 8 canaux et d’un convertisseur inverse 16 bits à 3 canaux capable de générer des signaux PWM. Le Cubloc CB220 nous semble donc être aujourd’hui un bon choix en matière de processeur destiné à la robotique car il regroupe en un seul boîtier de nombreux atouts : compatibilité matérielle avec le Basic Stamp 2, simplicité de la programmation en Basic, possibilité de fonctionnement en multitâche ; le tout pour un prix qui reste raisonnable si on le compare à celui des autres produits de cette étude. portant chacun son propre processeur et de la mémoire vive. Ces Cogs sont reliés via un bus géré par un Hub qui se charge de la synchronisation de leurs échanges. Par ailleurs, ils se partagent les 32 lignes d’entrées/sorties du produit qui sont toutes banalisées. Très peu de périphériques spécialisés sont intégrés dans le Propeller mais cela ne pose aucun problème compte tenu du fait que son langage de programmation, appelé Spin, est en fait un langage orienté objet. Si donc vous avez besoin, par exemple, d’un port série RS 232, il vous suffira de puiser dans la volumineuse bibliothèque d’objets mise à votre disposition par Parallax pour y trouver votre bonheur. Vous ferez de même pour générer des signaux PWM, piloter un bus I2C, un afficheur LCD, etc. Compte tenu du fait que l’on dispose de 8 Cogs, il est possible de faire tourner simultanément jusqu’à 8 applications différentes. Un robot équipé d’un tel processeur n’a donc aucune difficulté à gérer les moteurs de ses roues tout en analysant les données issues de plusieurs capteurs et en prenant les décisions correspondantes. Bien sûr, le Spin est un peu rébarbatif et l’écriture des premières instructions se fait Enfin du vrai multitâche Que les lecteurs d’Elektor se rassurent, nous n’avons pas été payés par Parallax pour écrire cet article, même si c’est encore un produit de cette société dont nous allons parler maintenant avec le Propeller. Force est de constater en effet que, depuis la sortie du premier Basic Stamp il y a près de 15 ans, Parallax ne s’est pas endormie sur ses lauriers. Mais, alors que les produits précédents étaient basés sur des processeurs existants, le Propeller est véritablement un « silicium » développé par Parallax. Comme le montre la figure 3, il s’agit d’un produit impressionnant de prime abord car il ne comporte pas moins de 8 bloc fonctionnels indépendants, les Cogs, com- 7-8/2007 - elektor Le Cubloc CB220 (à droite) est quant à lui directement interchangeable avec le Basic Stamp 2 (à gauche). 77 Les outils de développement pour Basic Stamp et Cubloc incluent un terminal de mise au point fort pratique Le langage Spin, dont on voit ici un extrait dans l’outil de développement du Propeller, n’est pas une partie de plaisir mais le jeu en vaut la chandelle. L’outil de développement de l’OOPic permet d’inter agir de manière graphique sur les objets utilisés par le programme. quelque peu dans la douleur pour qui n’a jamais programmé au préalable, mais le jeu en vaut la chandelle. En outre, Parallax met à votre disposition un forum et surtout une zone de son site sur laquelle chacun peut venir déposer les différents modules objets qu’il a développés pour le Propeller. Cette librairie participative est riche aujourd’hui de plus de 75 modules objets couvrant les domaines les plus divers et ne cesse de s’enrichir. Si donc vous souhaitez réaliser un robot pour lequel un véritable fonctionnement multitâche est requis, le Propeller est actuellement une des meilleures solutions qui soit, et ce d’autant que le prix du circuit n’est que le quart de celui d’un Basic Stamp, d’un Cubloc CB220 ou d’un produit similaire. très facile, avec un OOPic, de réaliser une application multitâche. Mais le concept va plus loin. Il est possible de relier ces objets entre eux pour constituer ce que l’on appelle des circuits virtuels réalisant des fonctions complètes. Concrètement, cela signifie que les objets peuvent échanger des informations entre eux, en tâche de fond, sans même que votre programme principal n’ait à s’en occuper. architecture n’est plus à la portée d’un débutant en robotique mais, après avoir fait ses premières armes avec un Basic Stamp ou un Cubloc par exemple, elle reste accessible à qui veut s’en donner la peine d’autant qu’elle ne nécessite aucun investissement particulier puisque l’OOPic se programme dans le langage de votre choix, que les objets sont mis gratuitement à votre disposition et que la programmation du circuit a lieu avec un simple câble connecté sur le port parallèle de n’importe quel PC. Un drôle de PIC multitâche Nous ne saurions terminer cette revue des processeurs spéciaux pour robot par un circuit relativement peu connu sous nos latitudes malgré son indéniable intérêt : l’OOPic. Comme son nom le laisse supposer, ce circuit n’est autre qu’un microcontrôleur PIC programmable en langage orienté objet puisque OO signifie en effet « Object Oriented » mais ce n’est pas tout. L’OOPic est en effet un PIC que vous allez pouvoir programmer dans le langage de votre choix : Basic, C ou même Java mais ce programme va se résumer à de simples scripts qui vont appeler des objets. Ces objets, actuellement au nombre de 130, sont capables de gérer quasiment tout ce que l’on peut imaginer piloter au moyen d’un microcontrôleur et, plutôt que d’en faire la liste ici, nous vous renvoyons au site de l’OOPic pour les découvrir. Tous ces objets peuvent fonctionner simultanément et indépendamment les uns des autres en tâche de fond pendant que le programme principal s’exécute. Il est donc 78 Autre avantage, et non des moindres de l’OOPic, il dispose d’une possibilité de mise en réseau et l’on peut ainsi interconnecter jusqu’à un maximum de 128 OOPic conjointement à des circuits I2C, grâce à un bus à trois fils et sans aucun composant externe supplémentaire. Il est donc possible, avec l’OOPic, de réaliser ce que l’on appelle une architecture robotique semidistribuée c’est à dire encore de ne plus faire du multitâche mais du multiprocesseur. Un processeur se charge de la gestion de la propulsion, un autre de tel ou tel type de capteur, et ainsi de suite, tandis qu’un processeur « central » n’a plus à se charger que des prises de décisions compte tenu des informations qui lui sont transmises. Bien sûr, la mise en œuvre d’une telle Conclusion Ce panorama est nécessairement incomplet surtout lorsque l’on sait que le manuel de programmation de l’un quelconque des circuits présentés ici comporte au minimum une centaine de pages ! Nous espérons cependant vous avoir fait découvrir ou re-découvrir des processeurs particulièrement bien adaptés à la robotique et qui, tout en étant simples à mettre en œuvre, ne sacrifient en rien les performances. (070319-I) Carnet d’adresses Adresse Société Commentaire www.atmel.com Atmel Fabricant des microcontrôleurs AVR www.basicmicro Basic Micro Fabricant des Basic Atom www.comfile.co.kr/english2/ Comfile Technology Site « PicBasic » Fabricant des PicBasic www.comfiletech.com Comfile Technology Site général Fabricant des Cubloc www.microchip.com Microchip Fabricant des microcontrôleurs PIC www.oopic.com Savage Innovations Fabricant des OOPic www.parallax.com Parallax Fabricant des : Basic Stamp, Javelin Stamp, Propeller www.tavernier-c.com – Site de l’auteur elektor - 7-8/2007 Programmateur STK200/300 optimisé pour µC AVR 26 1 20 14 IC1 2 10 R1 C1 100n 100k Hesam Moshiri Le programmateur STK200/300 accompagne presque tous les logiciels de programmation pour les microcontrôleurs AVR d’Atmel. Celui qui vous est proposé ici se différencie de ses semblables par son autosuffisance alimentaire, tout en offrant l’ensemble des possibilités de programmation du STK200 comme du STK300. +5V K1 15 27 16 4 17 5 IC1 19 EN2 1 EN1 18 6 19 7 20 8 21 Pour rappel, les microcontrôleurs AVR se contentent de cinq fils seulement pour la programmation en circuit : horloge, MOSI, MISO, mise à zéro et masse, auxquels il faut ajouter la tension d’alimentation en +5 V, prélevée sur le microcontrôleur de la carte cible. Sur le schéma du programmateur, vous ne trouverez rien d’autre GND 3 9 22 10 23 2 16 6 14 8 12 11 13 CLK 18 1D1 4 MOSI RST 9 1D2 MISO 7 15 5 17 3 74HC244 11 24 12 25 13 SUB D25 060374 - 11 qu’une puce tampon du type 74HC244, un connecteur mâle sub-D à 25 broches à brancher sur le port parallèle d’imprimante (Centronics) du PC, une résistance de forçage haut de 100 kΩ sur la ligne MOSI et un condensateur de découplage de 1 µF sur l’alimentation de +5 V. Un chouïa d’habileté vous permettra de pelotonner tout le circuit dans le boîtier du connecteur sub-D. Et pour compléter le tout, un petit bout de câble en nappe et une prise IDC à 6 broches vers la carte cible. Après programmation, il vous suffira de débrancher le câble de la carte cible. Le matériel pour les programmateurs STK200 ou STK300 est disponible dans de nombreux ensembles avec logiciels pour microcontrôleurs, par exemple BASCOM et CodeVision. (060374-I) « TEAclipper » programmateur « timbre-poste » Richard Hoptroff L’art subtil de l’électronique discrète (à base de composants distincts) a été remplacé, depuis une bonne décade, par le code machine stockée dans la mémoire de microcontrôleurs. Le progiciel (firmware) est la baguette magique des circuits électroniques actuels et à raison. Cette approche est plus rapide, moins chère, plus simple et bien plus flexible que son homologue consistant à modifier le matériel. Malheureusement, l’échange de progiciel est encore à ses balbutiements. Qu’avezvous comme options si vous voulez acheter le progiciel créé par une autre personne ? Dans le meilleur des cas, vous avez l’option d’acheter un composant préprogrammé chez l’auteur, voire auprès du service de vente d’un magazine comme l’e-choppe d’Elektor ou sur www.hexwax. 7-8/2007 - elektor com. Dans le pire des cas, vous obtenez un fichier hexadécimal (.hex) et vous programmez le microcontrôleur vous-même - à condition bien entendu d’avoir l’équipement de programmation adéquat. Et, à supposer que le progiciel soit bogué, ce n’est sans doute pas l’approche la plus aisée pour procéder à une remise à niveau (upgrade). Les choses seraient beaucoup plus simples si le progiciel tenait un peu plus du logiciel. Fournir du logiciel est l’une des tâches les plus simples qui soient, nous le faisons sans même y penser, à un point tel que c’est devenu l’une des industries les plus profitables au monde (le grand Bill (Gate) n’est pas pour rien l’une des personnes les plus riches au monde). De la taille d’un timbre-poste, le TEAclipper de FlexiPanel Ltd (www.flexipanel.com) semble être un pas dans la bonne direction. Ce programmateur de microcontrôleur constitue un mécanisme de fourniture de progiciel simple et fiable. Il peut avoir été préchargé d’un progiciel donné et envoyé ensuite à un client. Mais ce dernier a également la possibilité de télécharger du progiciel par le biais d’Internet et d’envoyer ce dernier vers le TEAclipper par le biais d’un adaptateur USB. Le TEAclipper est ensuite implanté sur la 79 platine-cible et génère tous les signaux nécessaires pour procéder à la programmation du microcontrôleur. La connexion se fait par le biais d’une embase à 5 contacts qui véhicule également la tension d’alimentation requise par le TEAclipper. S’agissant d’une connexion temporaire, il n’est pas même nécessaire de disposer d’une embase fixe sur le circuit imprimé. On peut envisager d’appuyer les contacts en question contre des orifices métallisés prévus à cet effet présents sur la platine les quelques secondes nécessaires à la programmation. Il est même possible de spécifier le nombre de cycles de programmation, la mémoire du timbre-poste s’auto-effaçant ensuite. Il est possible de cette manière de contrô- ler le nombre de ventes et d’achats de progiciels. Il existe actuellement des TEAclipper permettant la programmation de BASIC STAMP de Parallax et de microcontrôleurs PIC de Microchip, mais ce système ne manquera pas de se développer pour d’autres modèles de microcontrôleurs. (070117-I) Programmateur pour LPC900 Jürgen Wickenhäuser De l’avis de l’auteur les contrôleurs de la famille LPC900 sont le « couteau suisse » des CPU compatibles 8051. L’abréviation « LPC » précédent la dénomination de type LPC900 signifie « Low Pin Count », slogan publicitaire que nous ne vous ferons pas l’injure de traduire : la famille LPC900 [1] de NXP (anciennement Philips Semiconductor) prend la forme d’une série de microcontrôleurs de petite taille agréables à mettre en oeuvre. Ils conviennent fort bien à toutes les petites applications rapides. Comme le LPC900 possède un noyau 8051, il est facile à prendre en main. Et pourtant, le LPC900 est bien plus qu’un 51 légèrement remis au goût du jour. En voici les caractéristiques marquantes : • Noyau 8051 grande vitesse à 2 cycles (6 fois plus rapide qu’un 8051 standard !) • Mémoire Flash (de 1 à 16 Koctets) programmable à 100% via ISP (In-System Programming) ou IAP (In-Application Programming) • Oscillateur RC interne haute précision à base de quartz 7,327 8 MHz convenant excellemment pour des taux de transmission allant jusqu’à 115 kbauds sans nécessité de quartz externe • Les composants sont disponibles en version DIL mains aussi en variantes CMS (TSSOP) extrêmement compactes • Un système minimaliste ne requiert qu’un unique condensateur comme composant connexe • Nombreux périphériques embarqués : détecteur de tension faible (brown-out), 80 Figure 1. L’outil gratuit « Code Architect » fait de l’utilisation des contrôleurs LPC900 un vrai jeu d’enfant. elektor - 7-8/2007 chien de garde (watchdog), comparateurs, Convertisseur Analogique/Numérique (CAN) 11 & C4 C5 1u 1u 6 +3V3 10 T2IN 9 R2OUT K1 IC2 = 74HCT00 D1 1 R1 IN OUT IC1 LM317 ADJ 4 C2 IC1 C1 4u7 25V R2 4 5 C7 1u +3V3_ISP R11 1k 1 2 IC2B & & 9 10 6 IC2A 3 IC2C & nement compatibles CMOS, ce qui présente souvent des avantages. Il nous faut immédiatement mentionner une particu- CPU_VCC CPU_RXD CPU_TXD CPU_RES CPU_GND R12 1k 8 Connecteur ISP R4 1k T1 +3V3_ISP 3V3 commuté BC857 R3 R7 14 R1 240R IC2 C2 10u 6V LED1 C3 7 LED2 R13 100n LPC900 PROGR AMME R Figure 3. Sérigraphie de l’implantation des composants. K3 R9 1k +3V3 2 3 6 7 390R C3 K3 R13 T1 R 3 IC3 C7 R2 LED1 R7 R9 R11 LED2 K1 1N4001 IC2 C4 R12 C8 7 T2OUT 8 R2IN R10 220k C 1 D1 R4 C5 R6 R8 C 6 (c) Elektor 070084-1 5 R5 1 11 T1IN 12 R1OUT R6 220k R 10 K2 14 T1OUT 13 R1IN GND 1u 4 C2+ 5 C2- IC3 MAX3232 9 6 V- 15 10 1 6 2 7 3 8 4 9 5 C6 1 C1+ 3 C1- VCC V+ 1u R8 220k K2 11 C8 R5 220k La seule différence importante par rapport à un 8051 standard est une structure améliorée des Entrées/Sorties (I/O) : elles travaillent aussi en modes de fonction- 2 1k IC2D 1k 12 13 1k +3V3 • Tension d’alimentation allant de 2,4 à 3,6 V 16 +3V3 070084 - 11 Figure 2. L’électronique du programmateur pour LPC900. larité importante : après une réinitialisation (reset) tous les ports de trouvent en mode d’entrée (Input Mode) CMOS ce qui implique qu’il faut, le cas échéant, commencer par les initialiser. Sinon, la mise en oeuvre des LPC900 est Liste des composants Résistances : R1 = 240 Ω (CMS 0805) R2 = 390 Ω (CMS 0805) R3,R4,R7,R9,R11 à R13 = 1 kΩ (CMS 0805) R5,R6,R8,R10 = 220 kΩ (CMS 0805) Condensateurs : C1 = 4µF7/25 V (CMS 1206 ou 1210) C2 = 10 µF/6 V (CMS 1206 ou 1210) C3 = 100 nF (CMS 0805) C4 à C8 = 1 µF (CMS 0805) Semi-conducteurs : D1 = GF1M T1 = BC857 (CMS SOT23) LED1,LED2 = LED rouge (CMS 0805) IC1 = LM317 (CMS SO8) IC2 = 74HCT00 (CMS SO14) IC3 = MAX3232 (SO16) Divers : K1 = embase jack d’alimentation encartable K2 = embase sub-D à 9 contacts en équerre encartable K3 = embase autosécable à une rangée de 5 contacts platine EPS070084-1 disponible via thePCBShop (Cf. www.elektor.fr) 7-8/2007 - elektor Figure 4. Les initialisations spécifiques du LPC ne comportent que 5 instructions. 81 extrêmement simple au point que l’on peut se passer de fiche de caractéristiques grâce au « Code Architect » de « Embedded Systems Academy » [2] gratuit. Cet outil est en mesure de générer les pièces de code-source en C correspondants (Cf. figure 1). Le transfert de programmes vers les contrôleurs de type LPC900 se fait on ne peut plus simplement : si, après mise sous tension (Power-On) de la CPU, il se présente 3 impulsions dans une fenêtre de durée définie, la CPU saute vers un chargeur d’amorce (bootloader) le reste de la communication se faisant par le biais des lignes RxD et TxD. Une fois le téléchargement terminé, les 3 lignes de signal sont disponibles, ce qui explique que l’on ait besoin d’un câble à 5 contacts pour le téléchargement. Comme le montre la figure 2, le matériel requis se limite à bien peu de choses. Il est même en mesure d’alimenter le LPC en courant et fait même office de convertisseur d’interface (vers RS232, et convient de ce fait idéalement pour un programme de terminal). On retrouve, en figure 3, la platine développée par l’auteur. Le principe de fonctionnement est incroyablement simple : la CPU se laisse activer et désactiver par le biais de la ligne DTR. La ligne RTS fait office de sas : si RTS est activé, les signaux de la ligne RxD (RS-232) sont transmises à la broche de réinitialisation de la CPU, en vue d’activer le chargeur d’amorce. Remarque importante : R13 sert à faire chuter rapidement la tension d’alimentation du matériel-cible. Il est judicieux de limiter à quelque 10 µF la capacité des condensateurs de l'alimentation 3,3 V du matériel-cible, vu que sinon il se pourrait qie le contrôleur à programmer ne reconnaisse pas l'initialisation à la mise sous tension (POR = Power-On Reset). On pourra, pour un flashage (programmation de la mémoire de programme) confortable, utiliser le programme gratuit « Flash Magic » de « Embedded Systems Academy », programme que nombre de lecteurs connaissent suite à la publication du lecteur RFID [3]. Cet outil intègre même un programme de terminal adéquat. On a impérativement besoin, pour la programmation des membres de la famille LPC900, d’un compilateur C optimisant le code. Il en existe plusieurs versions commerciales. Il est bon ici de parler succinctement de la mise en oeuvre du μC/51 [4]. On pourra, pour la quasi-totalité des variantes de 82 Figure 5. Le compilateur μC/51 travaille avec un système Make classique parfaitement lisible. Figure 6. Flash Magic est un outil gratuit servant à la programmation des contrôleurs LPC. Figure 7. Paramétrage des lignes RTS et DTR dans le programme de terminal de Flash Magic. la famille LPC900, parfaitement utiliser la version de démonstration gratuite de ce compilateur. La seule limitation que connaît cette version gratuite est celle de 8 Koctets de code seulement ce qui signifie qu’il est possible de réaliser des applications relativement complexes déjà à l’aide de contrôleurs compatibles 8051. Le compilateur produit un code extrêmement compact. Il est en mesure, tout d’abord, de bien utiliser la RAM interne à la capacité quelque peu limite des LPC en raison de la présence d’un processus d’optimisation graphique permettant l’utilisation multiple de secteurs de la mémoire. Il est possible ainsi, avec ces CPU minuscules, d’utiliser à plein la fonction « printf() ». Le μC/51 comporte en outre une librairie de virgule flottante complète et fiable (Notre : la société GeoPrecision a développé le μC/51 en tant qu’outil où il est utilisé et amélioré depuis de nombreuses années). Les outils logiciels mentionnés plus haut collaborent parfaitement et réduisent énormément les durées de développement. En 3 étapes on passe du code-source à un programme fonctionnel. Nous avons utilisé, à titre de démo, un microcontrôleur 89LPC922 dont le port P1.7 avait été doté d’une LED. Le listage donné en figure 4 est un projet donné à titre d’exemple et que l’on trouve dans le μC/51 à partir de la version 1.20.06. Comme le montre la figure 5, le compilateur utilise un système Make classique bien compréhensible. Avec ce programme, le transfert du programme vers le microcontrôleur se fait de façon quasiment intuitive (figure 6). Il est recommandé de configurer le programme de terminal intégré dans « Flash Magic » de manière à démarrer immédiatement ensuite l’application sur le LPC. Important : il faut paramétrer correctement la fonction des lignes RTS et DTR (activées toutes les deux) ce qu’illustre la recopie d’écran de la figure 7. (070084-I) Littérature et Liens : [1] www.standardics.nxp.com/products/ lpc900 (NXP, fabricant du LPC900) [2] www.esacademy.com (Embedded Systems Academy : Flash Magic, Code Architect) [3] Lecteur RFID (avec 89LPC935) d’Elektor, Elektor n°339, septembre 2006, page 28 et suivantes [4] www.wickenhaeuser.de (compilateur μC/51, version de démonstration) [5] www.geo-precision.de (développement de projets géotechniques) elektor - 7-8/2007 Platine de prototypage à Propeller pour le BoeBot La puce Propeller de Parallax est un extraterrestre, ou un surdoué, dans le monde des microcontrôleurs. Ce circuit intégré renferme pas moins de huit noyaux de processeurs à 32 bits qui accèdent un par un aux périphériques et à la vaste mémoire du microcontrôleur. Le Propeller peut ainsi s’acquitter de ses tâches à une vitesse considérable et fonctionner sans mécanisme d’interruption : les tâches que nous étions habitués à confier aux interruptions se voient simplement affecter leur propre noyau de processeur (« COG » en langage Propeller). Ce processeur est par exemple assez rapide pour attaquer directement un écran VGA tout en exécutant d’autres processus. L’étude plus approfondie du Propeller et de son logiciel nous entraînerait trop loin. Toute la documentation nécessaire, des exemples d’application et un environnement de développement étendu sont disponibles au téléchargement gratuit sur le site de Parallax. 7-8/2007 - elektor BoeBot On sait que Parallax est aussi le fabricant du kit robotique BoeBot, un châssis avec tout le matériel nécessaire pour construire un véhicule robot et toutes sortes de capteurs pour l’équiper. L’ensemble est piloté par une platine à microcontrôleur sur la base du Basic Stamp ou du Javelin Stamp. La version à Basic Stamp a donné lieu à de nombreux articles d’Elektor, mais pas mal d’eau à coulé sous les ponts depuis lors : fin 1999-début 2000 pour être précis. Le concept semble pourtant solide comme l’acier, compte tenu du fait que le BoeBot est toujours très utilisé dans l’enseignement. Rien d’étonnant si on sait que Boe signifie Board of education, platine d’apprentissage. Mise à niveau Il était tout naturel de mettre ce robot à niveau avec une platine processeur à puce Propeller. Parallax a aussi mis sur la marché récemment une platine de prototypage taillée sur mesure pour le châssis BoeBot. On voit immédiatement que la platine présente une zone perforée pour l’adjonction d’électronique supplémentaire : la « vieille » platine à Basic Stamp est munie d’une mini platine à enfichage. Il faut donc souder des composants supplémentaires sur la platine à Propeller, ce qui est certes un peu plus laborieux que de les enficher, mais en contrepartie plus solide pour un robot. Malgré tout le soin apporté à sa construction et à la conception du logiciel, il peut arriver qu’un robot croise le chemin, ou devienne la victime, de quelque animal domestique de passage qui le prendrait pour un nouveau camarade de jeu. Avec une platine à enfichage, les composants risquent de tomber, avec une platine perforée, les chances de survie sont plus grandes. La platine de prototypage est très propre, complète et son prix est tiré, mais nous y avons vu un inconvénient qui peut se révéler gênant, surtout dans l’enseignement : le processeur comme la mémoire sont montés en surface. Si quelque chose est mal soudé, cela peut signifier la fin du processeur, voire, dans bien des cas, la fin de la platine. Tout le monde ne dispose pas de l’outillage adapté à l’utilisation de ce genre de composants. Parallax n’a vu aucun inconvénient à ce que nous développions une version de la platine équipée de composants traversants. Si un accident arrive à l’un des circuits intégrés, il suffira d’enficher simplement un exemplaire neuf dans le support (après avoir trouvé et supprimé la cause !). Naturellement ces composants occupent une plus grande partie de la surface limitée du châssis BoeBot ; en particulier le processeur en version DIL est beaucoup plus encombrant que son petit frère en boîtier LQFP. C’est pourquoi nous avons renoncé à certains composants qui se trouvent sur la platine Parallax, mais n’ont guère d’utilité selon nous sur un robot mobile : connecteurs VGA, clavier, souris. Schéma Le schéma (voir figure 1) brille par sa simplicité. Deux régulateurs de tension à faible tension de déchet fournissent le 3,3 V pour le processeur et l’EEPROM, le 5 V est disponible pour les périphériques qui auraient besoin d’une plus forte tension, comme par 83 IC1 LM2937ES-5.0 K1 1 +5V 3V3 3 3V3 R1 270 3 1 C3 C2 C1 100n 10u 16V 10u 16V D1 GND GND 3V3 C4 RX TX RESn S2 10k 100n 5MHz 8 GND VCC IC3 5 1 SDA NC 6 2 SCL 24LC256 NC 7 3 WC NC GND P31 P30 P29 P28 P27 P26 P25 P24 P23 P22 P21 P20 P19 P18 P17 P16 40 39 38 37 36 35 34 33 28 27 26 25 24 23 22 21 4 12 VDD VDD RES IC4 P8X32A-D40 X1 C5 GND 30 XI 9 VSS 29 VSS K3 P0 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P11 P12 P13 P14 P15 32 11 RX TX RESn 10 BOE 31 XO 1 2 3 4 5 6 7 8 13 14 15 16 17 18 19 20 K2 3V3 R2 100n Côté pratique La platine est simple elle aussi (voir figure 2). Nous avons opté délibérément pour une réalisation en simple face, pour faciliter la gravure et la réalisation maison. Les deux régulateurs de tension sont soudés sur le dessous de la platine. Le circuit intégré IC3 n’est pas absolument indispensable à la mise en œuvre du Propeller. Quand le processeur démarre, il lance son chargeur amorce (bootloader), lequel vérifie d’abord si la communication avec l’hôte est possible puis attend le téléchargement d’un programme. L’utilisateur peut choisir de charger une application IC2 LM2937ES-3.3 5V 2 4 S1 2 4 exemple les servo-moteurs modifiés qui assurent la propulsion du BoeBot. Veillez à ce que les broches du Propeller ne puissent pas voir le 5 V. En plus de S1, interrupteur de la tension d’alimentation, on trouve un emplacement pour quatre connecteurs SIL tripolaires pour le raccordement des servo-moteurs et autres périphériques qui doivent être alimentés en 5 V. Le connecteur K1 peut recevoir toute tension comprise entre 5,5 et 26 V, mais il vaut mieux que cette tension ne soit pas trop élevée, pour éviter une dissipation excessive dans IC1. Quant à l’interface de programmation avec un PC, il existe deux possibilités : K3 sert à la connexion de l’interface Propeller Plug de Parallax, qui permet l’utilisation d’un port USB. Le connecteur K2 est destiné à l’interface sérielle ordinaire décrite ailleurs dans ce numéro. La diode D1 signale la présence de la tension d’alimentation, S2 est la touche de remise à zéro. GND +5V +5V GND GND +5V +5V GND GND 070275 - 11 GND Figure 1. Le schéma de la platine de prototypage pour Propeller. PROM ; s’il n’en trouve pas, il s’arrête et arrête le processeur. Un programme peut être chargé directement du PC dans la mémoire interne et dans la méoire interne du Propeller ou dans l’EEPROM externe. En l’absence de liaison avec le PC, le chargeur va chercher un programme dans l’EE- Liste des composants Résistances : K1 R1 = 270 Ω R2 = 10 k Ω P16 P17 P18 P19 P20 P21 P22 P23 Condensateurs : Semi-conducteurs : IC1 = LM2937ES‑5.0 IC2 = LM2937ES‑3.3 IC3 = 24LC256 IC4 = Propeller‑chip P8X32A‑D40 (Parallax) Divers : X1 = quartz 5 MHz K2 = barrette SIL 5 broches K3 = barrette SIL 4 broches S1 = inverseur unipolaire S2 = unipolaire à fermeture 4 barrettes SIL 3 broches platine EPS070275‑1 (voir www.elektor.fr) 84 IC4 X1 C1,C2 = 10 µF/16 V radial C3 à C5 = 100 nF P15 P14 P13 P12 P11 P10 P9 P8 S2 C4 P7 P6 P5 P4 P3 P2 P1 P0 P24 P25 P26 P27 P28 P29 P30 P31 IC3 R2 K3 K2 S1 C3 C2 C1 R1 D1 C5 Figure 2. Le dessin de la platine est à simple face, mais pour un usage intensif de la zone pastillée, la solidité du double face à trous métallisés est préférable. elektor - 7-8/2007 exécuté, mais il ne faut pas oublier que cette mémoire est volatile. Elle est effacée quand l’alimentation est coupée. Le quartz aussi est superflu a priori, le Propeller démarre avec un oscillateur RC interne qui cadence la puce à 12 MHz, une fréquence suffisamment élevée pour nombre d’applications. Le quartz X1 n’est utilisé que si les registres internes le prévoient. Une fois le processeur alimenté, et relié au PC par une interface, il faut lancer le logiciel « Propeller Tool » et appuyer sur F7 (ou choisir Identify Hardware dans le menu Run). Les ports sériels du PC sont scrutés un par un jusqu’à trouver le Propeller ; si tout paraît en ordre, un message apparaît comme sur la figure 3. Le numéro du port COM est celui auquel l’interface est raccordée. Après l’apparition du message, nous pouvons nous mettre au travail avec le Propeller et découvrir le monde de ce microcontrôleur étonnant. (070275-I) Lien ouèbe : www.parallax.com/propeller Figure 3. Ce message annonce que la liaison est établie avec le Propeller. La fête peut commencer ! Commande de servo-moteur par PC Bas Lijten La commande de plusieurs servos par un microcontrôleur représente toujours un problème. Ce problème est résolu par l’arrivée sur le marché d’un contrôleur de servos à connecter à un PC : le SSC-32. Le SSC-32 est un contrôleur open-source, il établit la liaison à travers le port sériel. Il dispose de 32 sorties, pour commander simultanément jusqu’à 32 servo-moteurs. En plus de cela, chaque sortie peut être utilisée comme une sortie universelles au niveau TTL. Comme si cela ne suffisait pas, le microcontrôleur dispose de quatre entrées tout ou rien et la platine comporte un support pour recevoir une EEPROM. Au moment de la rédaction, ce support est inutilisé, mais les futures mises à jour du micro-code l’exploiteront vraisemblablement. Les servos raccordés au contrôleur se commandent de façon très simple. Il suffit, pour faire se mouvoir le servo, de connaître le servo à commander, la longueur d’impulsion (position) et la vitesse ou la durée. Si une vitesse est indiquée, le servo se déplacera à cette vitesse jusqu’à la position demandée. Si c’est une 7-8/2007 - elektor durée qui est donnée, le servo prendra ce temps pour rejoindre la position. On dit dans l’introduction que les servos peuvent être commandés simultanément. C’est possible avec une commande groupmove. On indique la liste des servos, la longueur d’impulsion et le temps imparti pour rejoindre la position demandée. Ainsi tous les servos se déplacent simultanément. Ce mouvement de groupe peut être pratique quand on veut imprimer à un bras de robot un mouvement fluide. Le contrôleur calcule lui-même les vitesses auxquelles les servos doivent tourner. Le microcontrôleur contient en outre les fonctions nécessaires pour commander un hexapode, ou robot à six pattes. Ainsi il est inutile de concocter des algorithmes dans le PC pour faire marcher le robot : il existe 85 des commandes pour faire mouvoir le côté droit ou le côté gauche. Le code du microcontrôleur est dit open source, c’est-à-dire qu’il est accessible librement. Cela permet d’ajouter, modifier ou supprimer des fonctions. Pas satisfait par l’hexapode ? Vous pouvez le réécrire « facilement ». De même on peut ajouter des fonctions. Par exemple un code pour déplacer un bras de robot dans un système de coordonnées cartésiennes. Il serait alors inutile de commander les mouvements, il suffirait d’envoyer les coordonnées pour faire mouvoir le bras. Ce contrôleur facile à piloter, autant qu’à modifier pour le programmeur expérimenté, conviendra à toute personne qui s’intéresse à la robotique. (070373-I) Fabricant du microcontrôleur : www.lynxmotion.com Interface sérielle pour Propeller Simple et bon marché Luc Lemmens La carte de prototypage Propeller décrite ailleurs dans ce magazine nécessite une interface de programmation, tout comme la carte de Parallax elle-même. Le producteur fournit à cet effet la fiche et le clip Propeller, qui l’une comme l’autre permettent la liaison avec le port USB du PC. Ces mini-platines portent un FT232 de FTDI, une puce qui revient fréquemment dans nos colonnes. La différence entre fiche (Plug) et clip réside dans la manière dont ils donnent contact avec la carte du processeur : la fiche s’adapte sur une embase SIL à 4 broches tandis qu’on pince le clip sur quatre pastilles en bordure de carte. C’est la liaison par clip qui était utilisée sur la première version de la carte Demo Propeller et n’est plus très pertinente. Aussi bien avec la carte de prototypage de Parallax que la nôtre, la fiche Propeller est l’interface correcte pour l’USB. Cette petite carte coûte une vingtaine d’euros, mais celui qui désire limiter les frais et dispose encore d’une bonne vieille interface RS-232 peut se construire cette interface sérielle simple. 86 4k7 T2 10k R5 10k T3 K1 11 10 1 6 2 7 3 8 4 9 5 R7 BC547 K2 R6 1k BC560B R4 C1 T1 R1 10k +3V3 RX (P31) TX (P30) RESn GND R2 10n 10k Sur K2, qui assure la liaison vers la carte Propeller, on a fait en sorte que l’ordre des connexions soit le même que sur la fiche Propeller, il ne faut y ajouter que la ligne d’alimentation en 3,3 V. De cette façon, il est possible d’utiliser aussi cette interface R3 10k Il suffit de trois transistors communs et une poignée de résistances pour mettre en communication Propeller avec le port sériel d’un PC. En réalité, il ne faut pas plus de trois inverseurs adaptateurs de niveau qui s’arrangent pour faire travailler ensemble le Propeller alimenté sous 3,3 V et le port COM du PC qui joue avec du + et du –12 V. 3V3 BC547 D Connector 9 GND 070276 - 11 elektor - 7-8/2007 sur la carte de prototypage de Parallax. Il faut naturellement une petite modification pour raccorder l’alimentation. Nous avons dessiné une petite platine pour ce circuit, mais il va de soi qu’on peut aussi bien la construire en vitesse sur un bout de platine à trous. On peut même 5 9 imaginer, avec une certaine habileté, un montage tellement compact qu’il se loge dans le boîtier d’un connecteur RS-232 à 9 contacts. Lors de la mise en service de cette interface, on peut se réjouir de n’avoir aucun R4 R5 1 6 K1 R3 C1 = 10 nF K1 = embase sub-D femelle à 9 contacts, à angle droit pour circuit imprimé K2 = support SIL à 5 broches platine EPS070276-1 disponible aux adresses habituelles K2 R1 R6 C1 R7 Condensateurs : Divers : T2 R1,R2,R4,R5,R7 = 10 kΩ R3 = 4,7 kΩ R6 = 1kΩ T1 T1,T2 = BC547 T3 = BC557 R2 Résistances : Semi-conducteurs : T3 Liste des composants souci de réglage (débit binaire, nombre de bits, etc.) puisque c’est le logiciel de développement « Propeller Tool » qui s’en charge. Utilisez pour la liaison sérielle un câble direct, donc pas de câble croisé ou de null-modem. (070276-I) « Navigateur » Pilotage par GPS de robot mobile Ulli Sommer L’un des rêves (restant souvent à l’état de rêve) de nombre de concepteurs de robots est de réaliser une machine ayant une capacité de navigation autonome. À quoi donc servent alors GPS et tous ces modules de réception dont le prix ne cesse de devenir plus abordable ? Notre système de navigation GPS pour robot repose sur un ATmega32, programmé en BASCOM-BASIC et communiquant avec le monde extérieur par le biais du bus I2C. Construire une machine qui, à l’image du fameux robot Sojourner se promenant sur Mars, serait en mesure de se déplacer de façon autonome en terrain inconnu, est sans doute le rêve le plus fou de tout amateur de robotique. Ne serait-il pas intéressant, par exemple, de pouvoir se contenter d’entrer, dans la mémoire d’un robot mobile, les coordonnées d’un lieu quelconque pour voir ensuite la machine 7-8/2007 - elektor se mettre d’elle-même à sa recherche. Si nombre d’idées d’applications robotiques d’un niveau aussi éthéré resteront (encore) longtemps de rêves, le problème décrit peut être résolu, comme le prouve l’auteur à l’aide d’une platine additionnelle destinée au robot de surveillance de son cru (photo de gros plan). La réalisation d’un système de navigation pour robot de conception-maison tient à l’existence de modules bon marché permettant la réception et le traitement des signaux fournis par les satellites GPS. Autre ingrédient de la recette, un microcontrôleur aux épaules solides pouvant être programmé, si possible, à l’aide d’un logiciel gratuit. Un central appelé ATmega Le système de navigation décrit a pour 87 MISO 3 8 7 SCK 4 6 5 RST 5 4 3 2 1 6 MOSI 7 8 K2 ISP +5V RXD TXD RXD 14 TXD 15 16 GND 17 18 GPS ou câble de programmation 19 20 K3 21 470 Ω Droite Gauche R16 S3 S2 D6 D5 R22 PB1(T1) (ADC1)PA1 PB2(INT2/AIN0) (ADC2)PA2 PB3(OC0/AIN1) (ADC3)PA3 PB4(SS) (ADC4)PA4 PB5(MOSI) (ADC5)PA5 PB6(MISO) (ADC6)PA6 PB7(SCK) (ADC7)PA7 ATmega32 PD0(RXD) (TOSC2)PC7 PD1(TXD) (TOSC1)PC6 PD2(INT0) (TDI)PC5 PD3(INT1) (TDO)PC4 RESET PRG SIGNAL TRAJET (TMS)PC3 PD4(OC1B) PD5(OC1A) (TCK)PC2 PD6(ICP1) (SDA)PC1 PD7(OC2) (SCL)PC0 GND XTAL1 11 XTAL2 GND 12 31 13 SYSTEM RUN R13 R11 R10 R12 4k7 4k7 4k7 R6 4k7 R7 4k7 40 4 39 5 38 6 37 7 36 9 35 10 34 11 33 12 SDA P1 IC2 P2 P3 C1 22p 22p INT P4 P5 A0 P6 A1 P7 A2 SDA 14 SCL 13 GND 1 +5V R5 10k 2 R4 10k 3 R3 10k 8 27 25 ADR +5V 26 K5 B u s I 2C 24 +5V 23 SDA 22 SCL K6 2k2 2k2 GND Boussole R1 R2 I 2C LCD 16 x 4 IC3 D1 C2 SCL +5V 15 PCF8574 28 X1 16MHz P0 29 D3 10k R15 10k 10k R14 R18 (ADC0)PA0 470 Ω R17 470 Ω But OK PB0(XCK/T0) K7 +5V 7805 R19 1N4001 C4 C5 C6 C7 47µ 100n 100n 1µ +8V ... +15V 470 Ω 100n 9 K4 JP3 +5V 10 16 IC1 JP2 C3 2 RST Bus I 2C vers Annonce Point Tournant Contrôleur Principal +5V JP1 1 K1 30 AVCC 4k7 R9 9 10 VCC 4k7 32 AREF 4k7 R24 10k 10k R23 R8 +5V D2 AFFICHAGE POWER 070350 - 11 Figure 1. L’ATmega32 communique avec la boussole et l’affichage LCD par le biais du bus I2C, la souris GPS passant par l’interface RS-232. Le circuit d’interfaçage I2C PCF8574P a pour charge de recevoir un octet de commande et de l’appliquer aux broches 33 à 40 de l’ATmega. coeur un ATmeg32 d’Atmel qui se trouve tie RS-232. Elle pourra, dès l’instant où niveau MAX232. Il est fort probable, bien au centre tant du schéma (figure 1) que de elle fournit ses données à niveaux TTL, souvent, que la platine principale du robot la platine du prototype (figure 2). La proêtre reliée directement à notre platine de soit déjà dotée d’un tel adaptateur. grammation du contrôleur AVR fait appel à navigation. Si au contraire elle fournit de La souris GPS fournit les coordonnées un dialecte BASIC et par le biais d’un sysprécises (longitude et latitude géographi« vrais » niveaux RS-232 (±12 V), il fautème de développement de BASCOM reladra la doter, en amont, d’un adaptateur de ques) sous un format prédéfini (cf. l’un tivement connu et des encadrés). Elle téléchargeable graest également en tuitement (dans sa mesure de déterversion de démonsminer le cap suivi, tration) auprès du à condition que la fabricant du logivitesse de déplacement ait une valeur ciel [1]. Nous mettons à votre dispominimum, comprise sition, gratuitement, entre 3 et 5 km/ sur le site d’Elekh. Comme nous tenons à connaître tor [2], le code source et le code la direction même .hex du projet. Tout robot à l’arrêt, nous ce dont on a encore avons besoin d’une besoin est un câble « boussole éle cde programmation tronique » (Cf. le IPS, que l’on trousynoptique de la vera, par exemple, figure 3). Le CMPSà l’adresse donnée 03 de Devantech en référence [3]. (disponible en [4] et On pourra utiliser, utilisé dans un autre en tant que réceparticle de ce même teur GP S, n’im numéro) est l’un des porte quelle souris modules de bousGPS du commerce sole adéquat. Cette Figure 2. Prototype de la platine de navigation pour robots mobiles. dotée d’une sorboussole attaque 88 elektor - 7-8/2007 notre platine de navigation par le biais de l’un des ports I2C. Nous avons en outre besoin, si nous voulons afficher les coordonnées et la direction, d’un module LCD. Pour nous éviter de nous compliquer la vie avec le protocole de communication par le biais du microcontrôleur, nous allons piloter l’affichage LCD lui aussi par le biais du bus I2C. À noter qu’il existe des affichages LCD dotés d’une interface I2C intégrée, mais nous pouvons fort utiliser un circuit intégré pour interface I2C comme le PCF8574 [5] (cf. figure 4), composant que nous remettrons à contribution ailleurs dans ce montage. Commande du moteur Nous souhaitons que notre robot non seulement indique où il se trouve mais aussi qu’il soit capable d’aller à un endroit donné. Pour cela, notre Navigateur, à savoir l’ATmega32, est en mesure de fournir des signaux de direction. Ces derniers sont disponibles sur deux broches. Les broches Motor l et Motor r donnent, en com- binaison, la direction de déplacement et de la manière suivante : Motor_l Motor_r 0 0 Fonction ARRÊT 1 1 Aller tout droit 1 0 Aller à gauche 0 1 Aller à droite Il manque encore, aspect important, la possibilité d’indiquer au robot Navigateur où se rendre. Il nous faut commencer par entrer Programmation des points tournants Avant de pouvoir lâcher notre robot dans la nature il faut doter le système de navigation d’une série de positions précalculées, les points tournants (track-points). On commence par substituer un câble de données (modem zéro) à la souris, câble connecté à un PC. Une fois la connexion au PC rétablie, nous allons ouvrir un programme de terminal tel que, par exemple, Hyperterminal. L’environnement BASCOM comporte lui aussi un programme de terminal. L’interface doit être paramétrée exactement comme le serait la souris GPS (4 800 bauds). Dès que l’on a établi la communication, on appuie simultanément sur les touches de réinitialisation (Reset) et de programmation. On relâche ensuite d’abord la touche Reset, une seconde plus tard environ, la touche de programmation. GPS-NAVI:\ Ensuite nous devrions voir sur notre terminal l’écran suivant : Les coordonnées des points tournants peuvent être déterminées à l’aide d’un second système GPS (PNA ou PDA GPS); on pourra bien entendu transporter le robot aux différents « points de passage obligés » et en lire sur son affichage LCD les coordonnées. ************************************* * GPS - Navigation Programming Mode * * Assistance call with Help * * Sommer Robotics 2006 V1.0 * ************************************* 7-8/2007 - elektor Nous avons alors le choix des instructions suivantes : Help = Appel d’un petit manuel d’aide Data = Liste les données GPS mémorisées Input = Permet l’édition des données GPS Reset = Réinitialisation du système de navigation Exit = Quitter mode de programmation Info = Infos générales (e Une fois les données programmées dans le système, on peut lâcher la bête ! 89 SCL GND 16 3 2 1 A1 A2 13 A0 SDA 7 14 P3 6 13 P2 P1 5 P0 4 12 12 8 11 11 9 P7 10 8 P5 P4 IC4 PCF8574 7 RS232 Aller à gauche Aller à droite But OK 9 GPS PRG 6 GPS-BOT-DRIVE INT +5V RST 14 Gauche SCL Droite K8 Annonce Point Tournant P6 I 2C SDA +5V I 2C 15 Boussole 10k D7 D6 D5 D4 5 4 3 2 10 D3 D2 D1 D0 E R/W RS VO VDD VSS Figure 3. Synoptique simplifié de « Navigateur ». Les touches servent à la programmation. La sortie des instructions destinées aux moteurs se fait au travers d’une paire de broches. 1 070350 - 13 LC DISPLAY 16 x 4 dans le système de navigation une série de coordonnées de points tournants (« track-points »), opération qui se fait, avant que le robot ne soit autonome, par le biais d’un câble (Cf. l’un des encadrés). En cours de déplacement, la platine de navigation est informée du prochain « point tournant » à passer, ce qui pourra, par exemple, se faire depuis le processeur principal du robot. Ce second petit problème de communication s’est vu résolu, lui aussi, à l’aide du bus I2C ô combien pratique, bus auquel il est facile d’accéder en BASCOM-BASIC. Un circuit intégré d’interfaçage I2C, un PCF8574P, se charge de la saisie d’un octet de commande et de son application aux broches 33 à 40 de l’ATmega (Cf. figure 1). Pour cela, logiciellement, ce composant est configuré en entrée (« Input »). Si l’on préfère une approche matérielle plus simple, on pourra se passer de ces circuits d’exten- sion de port I2C vu qu’il est également possible d’attaquer directement et en parallèle les ports du Mega32 par l’application de niveaux hauts cris bas. Si l’on veut, par I 2C, choisir, par exemple, le point tournant 1 il faut envoyer un « 1 » au PCF8574P. En BASCOM-BASIC cela prend la forme suivante : I2cstart I2cwbyte &H7A (adresse du PCF8574P, fonction de l’adressage, cf. fiche de caractéristiques) I2cwbyte 1 (Track Point Number) I2cstop Après émission des octets des points tournant, Navigateur se lance à la recherche de la direction à prendre vers le but. Il procède pour cela à une comparaison entre la direction calculée avec le cap actuel du robot (déterminé à l’aide de Données souris 070350 - 12 Figure 4. La commande du LCD se fait par le biais du bus I2C. On retrouve ailleurs un second exemplaire du circuit d’interfaçage PCF8574P (Cf. figure 1). la boussole). Nous n’avons pas, lors des calculs, tenu compte de la rotondité de la Terre car il est fort peu probable que nous envoyions notre robot sur des trajets à longue distance. Si les directions actuelle et de consigne sont identiques, notre robot avance tout droit. Si, en cours de trajet, il devait dériver du cap vers le but, le système de navigation corrige et ramène le robot au bon cap. S’il devait se faire que la qualité du signal GPS devienne trop mauvaise ou qu’il n’y ait pas suffisamment de satellites dans le « champ de vision », le robot attend sagement jusqu’à ce que le signal capté soit à nouveau OK pour le calcul d’un nouveau cap de consigne. Une fois le but atteint, le robot s’arrête et fournit, sur sa broche But OK, un signal de niveau haut que le processeur principal pourra traiter ensuite. Il pourra, par exemple, appeler le point tournant suivant, de manière à ce que le robot parcoure un trajet prédéterminé. (070350-I) D’après le protocole $GPGGA simple, un bloc de données reçu par la souris GPS prend le format suivant : $GPGGA,191410,4735.5634,N,00739.3538,E,1,04,4.4,351.5,M,48.0,M,,*45 Type de protocole Latitude Heure Longitude Nombre de satellites « visibles » Qualité de la mesure (0=invalide, 1=OK) Comme nous le constatons, nous disposons de toutes les données requises : le type de protocole ($GPGGA), la longitude (191410,4735.5634,N), la latitude (00739.3538,E) et qualité du signal (données valides (1) ou non) et le nombre de satellites visibles (4). Il suffit de paramétrer la souris GPS pour le protocole $GPGGA et de fixer le taux de transmission à 4 800 bauds. Il faudra désactiver les protocoles restants. L’intervalle entre données devrait être de l’ordre de 1 s. Ce paramétrage est à faire par le biais du logiciel fourni avec la souris GPS. Liens Internet [1] www.mcselec.com [2] www.elektor.fr [3] http://www.kanda.com [4] http://www.robot-electronics.co.uk [5] www.nxp.com/cgi-bin/pldb/pip/pcf8574 90 elektor - 7-8/2007 Carte USB de démo à bas² coût Retrouver sa voie dans l’USB VDD 1 470 Ω JP1 R3 analogiques qui se muent 470 Ω S1 3 P1 C3 en graphiques, appareils 100n 10k 8 VDD 9 10 Mais comment font-ils ? R8 1Ω 15 16 K1 +5V D– D+ ite 6 7 un avion, le tout en USB… L’USB v 4 5 et cadrans comme dans fait, b 2 t ien fai GND USB-B 1 2 3 4 R10 10 Ω 10 Ω R11 17 23 24 25 26 18 e) tiomètr oten 1 sur p iques ( g lo a rs) n rrupteu trées a s (inte • 2 en e u q ri umé trées n • 2 en s (LED) érique m u n 4550 s ie PIC18F • 4 sort ce : le pour vous) u p ) le mmé e seu ction • 1 (un nible progra onstru s de c c lo (dispo b des mplet tail co • Éven iciel ++ 6 ilder C du log our Bu p t r A/N je pro rtisseu iel de conve mérique r u o • Logic p u Demo phique et n ra ramme • Prog affichage g avec MCLR/VPP 32 RB7/PGD RB6/PGC RA0/AN0 RB5/PGM RA1/AN1 RB4/AN11 RA2/AN2 RB3/AN9 RA3/AN3 RB2/AN8 RA4/T0CKI RB1/AN10 RA5/AN4 RB0/AN12 IC1 RE0/AN5 R16 100n 11 Graphe futés, données R7 330 Ω 100n R2 R6 C2 10k 10k C1 10k R1 Martin Valle 40 39 R5 470 Ω 38 37 D5 R4 36 35 470 Ω PWR S2 S3 34 33 RE1/AN6 RE2/AN7 PIC18F4550 RC0/T1OSO RD7/SPP7 RC1/T1OSI RD6/SPP6 RC2/CCP1 RD5/SPP5 RC4/D- RD4/SPP4 RC5/V+ RD3/SPP3 RC6/TX RD2/SPP2 RC7/RX RD1/SPP1 VUSB RD0/SPP0 OSC1 12 13 30 29 28 27 22 21 20 19 OSC2 14 R9 R15 R14 RD2 330 Ω R13 RD1 330 Ω R12 31 RD3 330 Ω 330 Ω RD0 D4 D3 D2 D1 10M 100n JP2 X1 C6 C4 C5 20MHz 22p 22p 060342 - 11 Figure 1. Le schéma de la carte démo USB. Comme ceci : une simple carte, branchée au PC par câble USB et qui exhibe un microcontrôleur PIC de pointe. Ajoutez-y ce qu’il faut de logiciel et votre carte démo USB se transforme en système de développement pour vous faire découvrir comment l’USB s’est greffé sur un microcontrôleur programmé à traiter des E/S analogiques et numériques pour de vraies applications de tous les jours. Matériel Au centre du circuit de la figure 1, on trouve un microcontrôleur PIC18F4550 de Microchip. Il jouit de la connectivité USB… si vous savez comment vous en servir ! Le processeur est scandé à 20 MHz par le quartz X1. Les interrupteurs (sauf S1), les LED (sauf D5) et le potentiomètre connectés au PIC micro seront vos appareils d’E/S (entrée/sortie) de base. 7-8/2007 - elektor Figure 2. Panneau de configuration arborant l’installation de la carte PICDEM FS USB Demo. 91 vaste. Le plaisir, c’est qu’il est disponible gracieusement sur le site web d’Elektor sous le numéro d’archive 060342-11.zip. Le programme tout prêt est aussi à votre disposition, mais via l’e-choppe d’Elektor sous la référence 060342-41. Il y a en réalité quatre fichiers zippés : MCHPFSUSB.zip contient tous les composants du projet que l’on peut télécharger gratuitement chez Microchip plus le projet spécial pour le microcontrôleur, la version de démonstration du logiciel et l’amorce de chargement qui cause : « talker ». Project.zip contient tous les fichiers nécessaires pour réaliser le projet en Builder C++ 6. REQUIRED.zip contient les fichiers de project.zip que vous aurez à copier si vous voulez lancer un nouveau projet. Without builder.zip contient tous les fichiers nécessaires pour tourner le fichier .exe sans avoir installé Builder sur votre ordinateur. Figure 3. L’outil PICDEM FS USB indiquant l’appareil (la carte) connecté. Vous ne devriez avoir aucune difficulté à assembler le tout sur un morceau de platine pour prototype ou de Veroboard (perforé ou à bandes). Logiciel En contraste flagrant avec le matériel minimum, le logiciel pour ce projet est très Voici comment exécuter le logiciel. 1. Extraire le fichier MCHPFSUSB.zip dans le répertoire racine C:\ Vérifiez qu’il n’y a pas de doublon du classeur MCHPFSUSB du genre : C:\ MCHPFSUSB\ MCHPFSUSB\ repe rtoire_xx, à la place de : C:\ MCHPFSUSB\répertoire_xx. 2. En utilisant un appareil adéquat, programmer le microcontrôleur PIC18F4550 par le fichier : C:\MCHPFSUSB\fw\_factory_hex\picdemfsusb.hex. La puce est aussi disponible déjà programmée. Réveil du F4550 Quand vous avez réalisé le projet et vérifié qu’il n’y a pas d’erreur, vous pourrez connecter l’USB à l’hôte. Lors de la première connexion, Windows XP est préférable. Dès le branchement de la carte sur l’hôte, les LED D0 et D1 commencent à clignoter, puis l’hôte détecte l’appareil comme « PICDEM FS USB Demo Board © 2004 » et demande s’il y a des pilotes à bord. Sélectionnez alors les pilotes voulus situés en : C:\ MCHPFSUSB\Pc<MCHPUSB Driver\Release\ Figure 4. Mode Demo de l’outil Pdfsusb. 92 Windows va encore se plaindre que l’appareil ne réussit pas le test du logo Windows. Ignorez ses lamentations et continuez simplement l’installation de l’appareil. elektor - 7-8/2007 Vous pouvez vérifier la bonne installation par une exploration dans le Gestionnaire de périphériques de Windows, il devrait ressembler à la figure 2. Maintenez enfoncé le bouton S3 (RB4) et mettez à zéro le microcontrôleur en poussant et lâchant S1. Cette procédure entraîne le microcontrôleur en mode « chargeur d’amorce ». L’hôte va détecter un nouvel appareil et il vous faudra répéter la procédure d’installation avec le pilote assis à la même place : C:\ MCHPFSUSB\Pc<MCHPUSB Driver\Release\ À partir de maintenant, vous pouvez charger de nouveaux programmes dans le microcontrôleur à l’aide du chargeur d’amorce en utilisant les poussoirs S3 et Mise à zéro. L’application sur le PC qui communique avec le chargeur d’amorce est le fichier exécutable : Figure 5. Deux canaux ADC (convertisseur A/N) et l’USB du PIC en pleine action. C:\MCHPFSUSB\Pc\pdfsusb\ PDFSUSB.exe. L’outil Pdfsusb doit apparaître dans la fenêtre de connexion exactement comme à la figure 3. Mode démo et chausse-trappes Si vous mettez la carte à zéro sans garder le doigt sur S3, le microcontrôleur va exécuter le programme en mémoire, donc pas le chargeur d’amorce. Idem si vous cliquez sur le bouton « / Execute » dans l’application. C’est pourquoi le premier appareil détecté par l’hôte n’a pas été le chargeur d’amorce. C’était un programme de test avec l’autre partie de l’outil Pdfsusb (mode démo), il s’agit du bouton en haut, à gauche, à l’intérieur du mode Bootload. Ce mode est représenté à la figure 4. Il permet la lecture de la position approximative du potentiomètre connecté à RA0, commande l’état des LED branchées sur RD2 et RD3 et mesure la température d’un capteur SPI qui n’est pas encore relié à la carte (aussi, ne tenez aucun compte de la température affichée). Le micrologiciel Demo utilise quelques broches pour vérifier la tension principale sur l’USB (ceci n’est pas représenté dans le schéma). Il arrive que cette vérification rate après connexion de l’appareil à l’ordinateur. Heureusement, l’erreur ne vaut que pour le micrologiciel Demo, pas pour le chargeur d’amorce. Il y a une manière aisée d’éviter ceci. Dans chaque projet inclus dans le dossier MCHPFSUSB, il y a un fichier C:\MCHPFSUSB\fw\project_name_folder\ autofiles\usbcfg.h. Il contient les déclara- 7-8/2007 - elektor tions qui causent le problème. Il suffit de transformer en commentaire (//) les deux définitions SENSE_IO comme le montre le listage 1. Quand vous l’aurez fait, vous pourrez recharger le projet Demo ou n’importe quel autre de ce sujet, et tout marchera convenablement. On y va, Letsgo ? Maintenant, il est temps d’explorer l’exemple d’application. Comme antérieurement, mettez le microcontrôleur à zéro tout en enfonçant S3 pour exécuter le chargeur d’amorce et transférez dans le microcontrôleur le fichier hex situé dans : C:\MCHPFSUSB\fw\Hid02/_output/ NICAPM.hex À présent, lancez le programme. liser l’attirail du nom de « Without builder. zip ». De toute évidence, le microcontrôleur doit être branché sur l’hôte et exécuter le micrologiciel NICAPM. La fenêtre de l’application demo devrait ressembler à la figure 5, qui montre les signaux sur le canal 0 (AN0, broche 2) et le canal 1 (AN1, broche 3). Il y a aussi un fichier d’archive appelé project.zip si vous désirez modifier quelque chose dans le projet PC. Voulez-vous entamer un nouveau projet Builder ? Il ne vous faudra veiller qu’à deux choses : 1. Ajouter le fichier hid.lib en faisant : Project ➞ Add to project ➞ hid.lib 2. Changer l’alignement des données de mots, de Quad en octet, en faisant : Project ➞ Options ➞ Advanced Options ➞ Data alignment. Vous pouvez tourner l’application pour PC directement, sans avoir à installer C++ Builder 6 sur l’ordinateur, à condition d’uti- (060342-I) Listage 1. /** D E F I N I T I O N S *****************************************/ #define EP0_BUFF_SIZE 8 // 8, 16, 32, or 64 #define MAX_NUM_INT 1 // For tracking Alternate Setting /* Parameter definitions are defined in usbdrv.h */ #define MODE_PP _PPBM0 #define UCFG_VAL _PUEN|_TRINT|_FS|MODE_PP //#define USE_SELF_POWER_SENSE_IO //#define USE_USB_BUS_SENSE_IO 93 MotoBox Pilote moteurs à CC, pas à pas et servos Joseph Zamnit (MCAST, Malta) Avant de faire bouger un robot, peu importe qu’il marche, nage, se faufile dans un labyrinthe ou arrache l’asphalte, il faut vous occuper de l’interface et du pilotage de différents types de moteurs. Rédiger les algorithmes appropriés va encore allonger la durée de développement, d’autant que des étirements et adaptations semblent nécessaires pour toute nouvelle application. Ce projet résout la question, il présente une carte générique de pilotage de moteur, capable de commander trois sortes de moteurs, pas à pas, à courant continu ou encore servos, sans devoir programmer l’algorithme au cas par cas. MotoBox est idéal pour les débutants en robotique autant que pour les chevronnés qui se serviront de la carte pour les prototypes et le développement. La platine peut aussi piloter deux types de moteurs en même temps ! On programme la carte par une interface RS232. Le protocole est celui que l’on rencontre sur beaucoup de microcontrôleurs. Il peut être issu du port sériel d’un PC ou d’un autre microcontrôleur. Le code utilisé en commande du moteur est un jeu d’instructions très simple à 6 caractères. Il a été choisi tel pour obtenir une interface très conviviale. Le code permet également à l’utilisateur de lire l’état de la carte. En outre, cette carte surveille le courant consommé par chaque moteur et coupe le pilote dès qu’elle détecte un court-circuit. L’auteur est ingénieur de profession, compte de nombreuses années d’expérience dans la conception et la construction de circuits électroniques. Il est spécialiste des antennes planar et enseigne actuellement les télécommunications à l’MCAST, à Malte. Description du circuit Si l’on se reporte au schéma de la figure 1, on s’aperçoit que le coeur du circuit est un PIC16F628A qui commande et surveille les pilotes de moteurs. Le microcontrôleur est s e u câblé pour utiliser son oscillaq i n s tech e teur interne à 4 MHz, ce qui u q i t is r é t c libère les broches du quartz a Car teurs : o pour les attribuer à l’interface m s e sd olaire 3 type ) pas bip sérielle. PORTB sert de sortie C à C s • Pilote ( a p ontinu oteurs de commande des pilotes de urant c o •m c à 1 oteurs 00, N, 6 m 9 • moteurs, tandis que PORTA @ l oteurs rt série ervom r le po a s’occupe de différentes foncp rs •s oteu ,8 V n des m u’à 13 o tions, la lecture du courant, q ti s a v ju ti • Ac oteurs des m la commande des pilotes et n é o is ti a ta en mploi rvo) e ’e s d • Alim t s des LED. La broche MCLR e e C mand 2 A (C squ’à de com est maintenue haute par ju u e t, J n • coura R15 et D13. On trouve nce du as) la il » e p rreur • Surv (pas à aussi un connecteur de uge « e ro , » ou 4 A k vert « o t : n D programmation ICSP o E p L que oin à de cha • Tém e ll pour programmer la e u divid ande in oteurs puce in situ. Les lignes m m o •C te de m PGC et PGD sont découplées par du pilo 94 condensateurs de 100 nF. Le module reçoit son énergie d’une alimentation de 12 V régulée à 5 V par un 78L05. Un témoin, la LED verte D16, indique la mise sous tension. Le module est prévu pour travailler sur batterie au plomb/acide qui fournit 13,8 V fraîchement chargée mais peut descendre jusqu’à 7 V. Il importe que le module ne doive pas partager la source de tension utilisée par les moteurs à cause des pics de courant, pointes de tension et bruit induits par le moteur. C’est un MAX232 qui sert d’interface entre le module et le port sériel d’un ordinateur de bureau ou d’un portable. Il faut absolument que le MAX232 soit compris dans le circuit, sinon, assurez-vous que la broche de réception RA7 est maintenue au niveau bas quand elle n’est pas utilisée. Le microcontrôleur pourrait confondre le bruit d’une entrée flottante avec des données, ce qui conduirait à des erreurs d’opéra- elektor - 7-8/2007 Vsup +5V Vsup C17 C19 100n IC6C D14 4 GND GND 1u 5 25V 4 VCC2 10k 330 VSS 1u 25V GND R2 VCC2 9 5 1A1 7 1A2 6 1EN D7 D8 D9 D10 GND IC5 6 K5 2 1Y1 3 1Y2 1 1E 5 4 K10 3 13 10 2A1 L298KV 2Y1 12 14 2A2 2Y2 15 11 2EN 2E 2 D11 D12 K9 1 6x 1N5400 K4 K2 D13 GND C14 GND 4k7 1N4148 R15 C11 C10 100n 100n R8 220n R7 10k 4k7 C8 C2- 100n 100n GND D15 GND GND C6 6 7 8 9 10 11 12 13 C18 8 D Connector 9 MAX232CPE 3 11 10 12 9 4 1u 25V RA0/AN0 RB0/INT RB1/RX/DT RA1/AN1 IC1 RA2/AN2/VREF RB2/TX/CK RA3/AN3/CMP1 PIC16F628-04/P RB3/CCP1 RA4/T0CKI/CMP2 RB4/PGM RA5/MCLR/VPP RB5 RA6/OSC2/CLKOUT RB6/T1OSO/T1CKI/PGC RA7/OSC1/CLKIN RB7/T1OSI/PGD 10k 15 C1T1IN T2IN R1OUT R2OUT C2+ C7 C16 5 VDD T1OUT 7 T2OUT 13 R1IN 8 R2IN 1 Vsup R13 VDD 17 18 1 2 3 4 15 16 2 10 IC3 100n 14 VEE 11 10u 25V C1+ 5W GND +5V Vsup 14 470 GND R9 C13 100n 100n 6 1 6 2 7 3 8 4 9 5 +5V C4 25V VCC 2 1k5 C9 16 IC6A R3 +5V R12 C3 VCC1 1 GND C22 4k7 5k6 3 R17 100n K3 K8 1 6x 1N5400 R5 220n R4 10k R16 1u D6 GND C12 +5V +5V 2 D5 R11 IC6 = LM358AJG C23 K7 3 0R22 GND 8 C21 D16 K6 5 4 GND +5V 5 7 IC6B 6 R6 R10 10k C15 0R22 47u 25V 6 13 2Y1 14 2Y2 15 2E GND C20 D4 8 C5 100n D3 D2 2 1Y1 3 1Y2 1 1E 4 100u 100n 63V L298KV 10 2A1 12 2A2 11 2EN R1 VCC1 C2 R14 D1 GND IC4 10k C1 1 330 K1 5 1A1 7 1A2 6 1EN +5V 470 3 L78L05CZ IC2 2 Vsup 100n 9 100n GND 100n 5W 070129 - 11 GND Figure 1. Schéma du Motobox, le contrôleur « tout en un » pour moteurs de robots. tion. Un autre microcontrôleur peut également commander le module en utilisant le connecteur K2. Les moteurs sont attaqués par les étages de puissance du L298, chacun en commande d’un seul moteur. Le L298 est un pilote à double demi-pont capable de délivrer 2 A par canal, avec validation et mesure du courant séparées pour chaque pont. Il peut servir à la commande de différents types de moteurs. Dans ce projet, le L298 est validé par le microcontrôleur et cette ligne Enable est attirée au niveau bas lors de la mise sous tension pour s’assurer que la puce reste inactive. Les condensateurs de découplage de 100 nF chacun sont placés tout près de la puce. Le LM358 constitue un amplificateur CC qui mesure la tension aux bornes de la résistance d’entrée. Il est suivi d’un filtre passe-bas et d’un tampon amplificateur dont le gain diminue avec la fréquence pour éliminer le bruit. Les moteurs à CC 7-8/2007 - elektor génèrent, quand l’armature donne contact avec le commutateur, des parasites qui se manifestent en pointes de courant, lesquelles se répercutent aux bornes de la résistance de mesure. Des pics de courant peuvent produire, pour le microcontrôleur, un effet similaire à un court-circuit et lui faire arrêter le moteur. Le filtre adoucit tous les pics de tension. En outre, il y a dans le micrologiciel un algorithme qui détecte des surcharges de courant limitées dans le temps avant de couper le canal en cause. Tableau 1. Mémento des options de pilotage du moteur Fonction du pilote de moteur Sortie Moteur 1 Broche µC Broche embase Moteur 2 RB3 RB2 RB1 RB0 RB7 RB6 RB5 RB4 2 3 4 5 2 3 4 5 Mode Chaque sortie commande une phase Pilote pas à pas Pilote moteur à CC (1) Pilote Servo (2) 3 3 3(3) P(4) P(4) 3(3) Chaque sortie commande une phase 3 3 3(3) P(4) P(4) 3(3) (1) Entrée différentielle (2) Utiliser la broche de terre sur le connecteur pour le servomoteur (3) Permet de piloter 2 servomoteurs en même temps avec le même signal (4) Utilisé pour alimenter le servomoteur 95 Construction K2 K4 C13 D16 C15 R6 IC6 R12 R15 D13 C22 C3 C9 C7 R4 R3 C12 C10 5 K3 1 R14 C2 D9 C19 D12 D3 15 C1 K1 IC5 IC4 C16 1 IC2 C17 R13 C18 R10 R5 R1 D15 C5 R2 R11 D14 R9 D6 15 C20 C14 R7 R8 C23 C8 C21 C4 IC1 IC3 C6 1 Inspection préalable D10 D8 D7 D4 D2 D1 D11 K9 K10 K5 D5 K8 K7 K6 Une fois le circuit construit, il convient d’en vérifier le fonctionnement. Mettez-le sous tension avant d’y insérer les circuits intégrés. D16 doit s’allumer. Contrôlez le 5 V sur les broches concernées des supports de IC1, IC3, IC4, IC5, IC6. La tension d’alimentation doit aussi arriver sur la broche 4 de IC4 et de IC5. Si tout est correct, débranchez et insérez le microcontrôleur programmé et le restant des puces. On peut aussi programmer le microcontrôleur en circuit par le connecteur K4. S’il vous faut contrôler la carte à partir d’un autre microcontrôleur, vous pouvez utiliser le connecteur K2. Il s’agit d’un connecteur direct, il faut permuter les lignes Transmission/Réception avant de les brancher à la carte. En revanche, si c’est le connecteur sub-D qui est utilisé, la permutation des signaux a été réalisée sur la platine elle-même. 9 C11 6 R16 R17 Bonne nouvelle : le projet ne nécessite aucun composant exotique, à l’exception éventuellement du radiateur à agrafer, mais il est disponible chez Mouser. Le circuit ne contient que des composants traversants pour simplifier la fabrication et ils sont tous aisément disponibles et d’un montage facile sur la platine, dont vous pouvez voir la sérigraphie d’implantation à la figure 2. Peu de chose à dire sur les composants, sauf que pour la résistance de 0,22 Ω, il vaut mieux prendre un modèle non bobiné, et que les LED bicolores ont deux pattes, pas trois ! Si vous ne comptez pas utiliser la platine avec un PC, vous pouvez vous passer du connecteur sub-D. Cependant, le MAX232 doit toujours être présent. De même, IC4 et IC5 doivent dans tous les cas être soudés sur la carte. Figure 2. Sérigraphie de l’implantation des composants sur la carte conçue pour MotoBox. Le dessin des pistes est disponible gracieusement en téléchargement sur le site d’Elektor. ché sur la carte. Il faut taper la commande « DC1FOR », en capitales ou en bas de casse, pour faire tourner le moteur à l’en- droit. Le logiciel convertit toutes les lettres en capitales. La commande sera exécutée dès son expédition. La bonne réception Tableau 2. Syntaxe de commande Commande Description de commande 1 ST1FOR Pas à pas 1 cw (cw = clockwise = sens horaire) 2 ST1BAK Pas à pas 1 ccw (ccw = counter clockwise = sens anti-horaire) 3 ST2FOR Pas à pas 2 cw 4 ST2BAK Pas à pas 2 ccw 5 STBFOR Les deux pas à pas cw — simultanément 6 STBBAK Les deux pas à pas ccw — simultanément 7 STSYNC Mettre les deux pas à pas dans la même position si glissement 8 AMSTOP Arrêt d’urgence. Couper tous les moteurs — p. ex surcharge 9 ST1FXX Tourner pas à pas 1 xx (999 pas max) positions cw 10 ST1BXX Tourner pas à pas 1 xx (999 pas max) positions ccw … et on les contrôle 11 ST2FXX Tourner pas à pas 2 xx (999 pas max) positions cw Aussitôt la carte bien alimentée, elle va expédier le caractère « I » à l’hôte pour confirmer son initialisation et attendre une commande. Elles ont toutes une longueur de six caractères, comme vous pouvez le voir dans la liste du tableau 2. Supposons qu’un moteur à CC soit bran- 12 ST2BXX Tourner pas à pas 2 xx (999 pas max) positions ccw 13 DC2FOR Moteur CC 2 ON/cw 14 DC2BAK Moteur CC 2 ON/ccw 15 DC2OFF Moteur CC 2 OFF 16 DC1FOR Moteur CC 1 ON/cw 17 DC1BAK Moteur CC 1 ON/ccw On branche les moteurs… La meilleure façon de vérifier complètement la carte est de la connecter au PC et de lancer HyperTerminal pour lui envoyer des commandes. Attachez-y un moteur selon l’une des configurations indiquées à la figure 3 pour tester la carte. Utilisez le mémento des options de pilotage du moteur, dans le tableau 1, pour brancher correctement les bornes du moteur. 96 elektor - 7-8/2007 est alors effacé et la carte reste en attente d’une nouvelle commande. Les LED s’allument tant que le système fonctionne bien, elles sont au rouge si le pilote du moteur a été coupé. Il y a des commandes de moteur pas à pas pour les faire tourner « cw » (clockwise, sens des aiguilles) et « ccw » (counter clockwise, sens inverse) d’un certain nombre de pas (maximum 999). Cette commande s’accompagne d’un nombre de trois chiffres, par exemple 050 pour avancer de 50 pas. Pour des nombres de pas inférieurs à 100, le ou les zéros de tête doivent être écrits. Les commandes pour moteur CC, pour servo et celles d’état s’exécutent immédiatement, mais pour le moteur pas à pas, elles subissent un retard (20 ms par défaut) de manière à ce que la commande soit acceptée après que le moteur ait démarré. Si l’on envoie une commande pendant cet intervalle, elle se perdra et sera omise. On peut demander le type de moteur en service à tout moment par la commande Liste des composants Résistances : R1 à R4,R6,R7 = 10 kΩ R5,R8,R15 = 4kΩ7 R9,R10 = 0Ω22/5 W R11,R13 = 330 Ω R12,R14 = 470 Ω R16 = 5kΩ6 R17 = 1kΩ5 Condensateurs : se signale par un caractère « A », avec une répétition du code de la commande en cours. C’est très utile quand on utilise un terminal élémentaire. Si la commande envoyée est incorrecte, la réponse sera le « E » de erreur. Le tampon de commande C1 = 100 µF/40 V radial C2 à C5,C10,C11,C13,C15 à C19,C21,C23 = 100 nF C6-C9 = 1 µF/25 V radial C12,C14 = 220 nF C20 = 47 µF/25 V radial C22 = 10 µF/25 V radial Semi-conducteurs : 18 DC1OFF Moteur CC 1 OFF 19 DCBFOR Les deux moteurs CC cw 20 DCBBAK Les deux moteurs CC ccw 21 DCBOFF Les deux moteurs CC OFF 22 SV2FOR Servo 1 cw 23 SV2BAK Servo 1 ccw 24 SV2MID Servo 1 position centrale 25 SV2HLD Servo 1 maintien D1 à D12 = 1N5400 D13 = 1N4148 D14,D15 = LED 5 mm bicolore à 2 contacts D16 = LED 5 mm IC1 = PIC16F628-04/P programmé EPS070129-41 IC2 = 78L05 IC3 = MAX232 IC4,IC5 = L298N avec radiateur pour boîtier Multiwatt15 (mouser.com) IC6 = LM358 26 SV1FOR Servo 2 cw Divers : 27 SV1BAK Servo 2 ccw 28 SV1MID Servo 2 en position centrale K1,K5 à K10 = bornier à 2 contacts au pas de 5 mm encartable K2 = embase autosécable à 1 rangée de 3 contacts K3 = embase sub-D à 9 contacts femelle en équerre encartable K4 = embase autosécable à 1 rangée de 4 contacts platine réf. EPS070129-1 fichiers source et .hex téléchargeables gratuitement EPS070129-11.zip depuis www.elektor.fr 29 SV1HLD Servo 2 en maintien 30 MTYPEX Retourne le type de moteur 31 STDELX Configurer retard moteur pas à pas 32 ECHOST Configurer l’écho. Défaut = ON 33 AMONXX Tous les moteurs ON 34 MONOFF Ne pas surveiller la consommation 35 CMONON Surveiller la consommation 36 RESUME Débloquer les moteurs après une surcharge 7-8/2007 - elektor 97 Alimentation Alimentation Alimentation 2 3 2 3 1 Entrée sérielle 2 Entrée sérielle Carte moteur Entrée sérielle Carte moteur M Carte moteur M 4 4 5 5 6 M 3 070129 - 12 Figure 3. Voici comment connecter vos moteurs. « MTYPEX », la réponse sera un caractère révélateur du type de moteur. Surcharge, pointes, ondulations… Par l’intermédiaire du comparateur analogique, la section logicielle surveille en permanence le courant consommé. La carte coupera le moteur si la consommation de courant excède les spécifications du moteur en service. Un filtrage a lieu pour que le contrôleur ne coupe pas les moteurs sur n’importe quel parasite. De rapides mises en et hors service de moteurs CC produisent de grandes pointes de courant, ce qui peut conduire le contrôleur à inhiber le pilote du moteur en question. Il est possible de supprimer la surveillance du courant, mais ce n’est pas recommandé. Une surcharge de courant peut imposer une surchauffe exagérée du L298 et causer sa destruction. Il faut envoyer une commande « RESUME » après inhibition du pilote de moteur pour remettre le moteur en service. Une période de répit est accordée avant d’autoriser l’envoi d’une autre commande et tenter de débloquer le moteur. Logiciel Les codes source et hex pour le PIC16F328A sont disponible sur le site d’Elektor. Le numéro de fichier est EPS070129-11.zip (Juillet/Août 2007). (070129-I) Adresses du site web et de courriel de l’auteur : www.mcast.edu.mt [email protected] Liens Internet http://www.microchip.com www.st.com/stonline/products/literature/ ds/1773.pdf Commande de servos Avec un PIC programmé en Basic, un Basic Stamp ou un Cubloc C. Tavernier Les servos de radiocommande connaissent aujourd’hui une nouvelle jeunesse grâce à la robotique en raison de leur caractéristiques qui, sans l’avoir prévu au départ, se trouvent être bien adaptées au besoin. En effet, les servos de radiocommande sont aujourd’hui peu encombrants si l’on 98 tient compte du fait qu’il contiennent tout à la fois leur propre mécanique ainsi que leur électronique de commande qui se satisfait en entrée de simples signaux logiques TTL ou CMOS. La force qu’ils sont capables d’exercer peut être très importante pour les plus puissants d’entre eux (ceux initialement destinés aux « grosses » maquettes d’avions ou de bateaux) et enfin ils sont généralement livrés avec une multitude d’accessoires tels que palonnier, roue perforée, etc. qui facilitent leur interfaçage avec les éléments à actionner. Il existe aujourd’hui deux modes essentiels d’utilisation d’une servo dans un robot. Le premier, décrit par ailleurs dans ce même numéro, consiste à transformer la servo en moteur de propulsion ce qui le détourne un peu de sa fonction première il est vrai. Le second, que nous allons étudier ici, consiste à l’utiliser pour faire du positionnement. Que ce soit dans un bras, pour faire tourner une plate-forme supportant une caméra, un télémètre ou tout autre organe, notre servo est en effet parfaitement adaptée. Nous ne vous ferons pas l’affront de vous dire à quoi ressemble une servo car, même si vous n’êtes pas un « accro » de la radiocommande, vous en avez sans doute déjà elektor - 7-8/2007 vu. Par contre, voici quelques informations qu’il faut connaître afin de pouvoir l’utiliser. Au plan électrique, une servo ne dispose que de trois fils codés par des couleurs. Les fils rouge et noir sont destinés à son alimentation qui peut être comprise entre 4,8 et 6 volts. Le troisième fil, de couleur jaune ou blanche, ou en pratique de toute autre couleur que rouge et noir, sert à transmettre les ordres à la servo sous forme de signaux PWM que l’on peut appeler plus simplement impulsions codées en largeur. 1 La figure 1 montre tout à la fois le principe de codage de ces impulsions et l’influence qu’elles ont sur la position de la servo. Remarquez tout d’abord qu’elles doivent se répéter à un rythme tel que l’on ne doit pas 2 avoir plus de 10 à 20 ms d’écart entre deux impulsions successives. En théorie, cette répétition n’est pas absolument indispensable mais, si elle a lieu, la servo tient la position imposée par la largeur des impulsions reçues. Si ces impulsions ne se répètent pas, la servo va bien à la position codée par la dernière impulsion reçue mais, dès qu’elle disparaît, le moindre effort sur son axe lui fait perdre la position ainsi atteinte. Ceci étant, sachez que, comme l’indique la figure : • une impulsion de 1,5 ms de large place la servo dans sa position dite centrée ou de repos ; • une impulsion de 1 ms de large fait tourner la servo dans sa position maximum en sens inverse des aiguilles d’une montre, ce qui représente généralement un angle de 45° par rapport à sa position de repos ; • une impulsion de 2 ms de large fait tourner la servo dans sa position maximum dans le sens des aiguilles d’une montre ce qui représente, là aussi, un angle de 45° par rapport à sa position de repos. Toutes les positions intermédiaires peuvent être atteintes lorsque l’on fait varier la largeur des impulsions de 1 ms à 2 ms. Listage 1 ‘ Version Basic Stamp I et II ou PIC programmé en Basic boucle: for b2 = 100 to 200 for b3 = 1 to 5 pulsout 0,b2 ‘ servo connectée sur le port P0 pause 15 next next goto boucle 7-8/2007 - elektor 1,5 ms Centré 10 ... 20 ms 1 ms - 45 ° 10 ... 20 ms 2 ms +45 ° 10 ... 20 ms 070238 - 11 Basic Stamp ou Cubloc +5VServo P0 (Stamp) rouge blanc, jaune Servo P5 (Cubloc) VSS noir 070238- 12 Pour une utilisation robotique, il est même possible d’aller au delà et d’appliquer à la servo des impulsions un peu plus courtes que 1 ms ou un peu plus longues que 2 ms et atteindre ainsi un angle total de rotation de 180°. Mais attention ! On se trouve alors hors des spécifications de la servo qui risque de se bloquer sur ces positions extrêmes et de détruire ainsi son moteur, son électronique de commande ou les deux à la fois si vous avez de la chance ! Ceci étant, la connexion d’une servo à un microcontrôleur (Basic Stamp, PIC, Cubloc) est très simple comme le montre la figure 2. La seule précaution à prendre se situe au niveau de l’alimentation de la servo. En effet, compte tenu des appels de courant relativement importants réalisés par la servo lorsqu’il tourne, il est préférable de l’alimenter sous une tension indépendante de celle du microcontrôleur. Lorsque ce n’est pas possible, il faut s’assurer d’un excellent découplage entre les deux en alimentant par exemple la servo et le microcontrôleur au travers de deux régulateurs indépendants. Pour ce qui est du logiciel, la commande d’une servo avec un Basic Stamp ou un PIC programmé en Basic ne demande que très peu de lignes de programme. Il suffit en effet de faire appel aux deux instructions que sont PULSOUT et PAUSE pour y parvenir. Voici, à titre d’exemple, un programme qui fait tourner une servo lentement de sa position extrême d’un côté à sa position extrême de l’autre et ainsi de suite. Il peut ainsi par exemple déplacer un capteur dans un plan de 90° d’amplitude totale. L’instruction PULSOUT génère des impulsions de durée variant de 100 x 10 µs à 200 x 10 µs en fonction de l’évolution de la variable de boucle b2, tandis que l’espacement entre ces impulsions est fixé à 15 ms au moyen de l’instruction PAUSE. Ce programme est écrit ici en langage Basic Stamp I mais sa transposition en Basic Stamp II ou pour l’utiliser avec un PIC programmé en Basic, ne demande que la modification des valeurs extrêmes et du pas de la variable de boucle b2. En effet la résolution de l’instruction PULSOUT n’est plus de 10 µs mais de 2 µs. Il faut donc multiplier ces différentes valeurs par 5. L’utilisation d’une servo avec un Cubloc de Comfile Technology est tout aussi simple mais fait appel à une instruction appelée PWM selon le listing ci-dessous. Dans une application de ce type, l’avantage du Cubloc sur le Basic Stamp est que la commande PWM génère les impulsions indéfiniment, même si le programme continue à s’exécuter. Dans le cas du Basic Stamp, l’instruction PULSOUT ne génère qu’une impulsion et doit donc être appelée dans une boucle pour produire en permanence ces dernières, ce qui interdit au Basic Stamp de faire autre chose. Si vous ne voulez pas recourir à un Cubloc, une autre solution consiste à faire appel à un circuit spécialisé, tel le MIC 800 de Mictronics (www.mictronics.com) capable de commander de manière autonome jusqu’à 8 servos simultanément (Cf. le cas échéant le numéro double d’Elektor de l’été 2006). (070238-I) Listage 2 ‘ Version Cubloc Const Device = CB220 Dim Position As Integer Low 5 ‘ Servo connectée sur le port P5 Do For Position = 2300 to Position = 4300 Step 20 Pwm 0, Position, 32768 Delay 100 Next Loop 99 Pilote complet de moteur pas à pas +5V 10k 20 1 RST 9 IC2 8 13 14 15 T0/P3.4 P1.7 P1.1/IN– P1.6 P1.2 P1.5 P1.3 P1.4 19 1 18 2 17 3 16 4 5 AT89C2051 12 9 11 P1.0/IN+ RXD/P3.0 TXD/P3.1 T1/P3.5 INT0/P3.2 P3.7 INT1/P3.3 X1 X0 5 4 10 S2 S3 S4 R1 C4 8k2 S1 Plein pas Droite 6 3 7 6 I1 O1 I2 O2 I3 IC3 I4 I5 I6 O3 O4 ULN2003 I7 O5 O6 O7 16 15 14 M1 M 13 12 11 10 GND 7 8 R8 M1 = Moteur pas à pas 5 V R9 Tableau 1 Angle de pas (degrés) C3 12MHz +9V 33p 7805 500 1,8 200 2,0 180 C2 2,5 144 100n 5,0 72 7,5 48 15 24 +5V Gauche C1 47µ 16V 070228 - 11 Hesam Moshiri Ce circuit va vous permettre de faire à peu près tout ce qu’il faut dans les applications de robotique : tourner à gauche ou à droite, à pas complets ou par demi-pas. Le moteur pas à pas convertit des impulsions électriques en mouvements mécaniques. Sur les disques durs, les imprimantes, les numériseurs, certains photocopieurs, on utilise des moteurs pas à pas pour tourner ou commander avec précision le positionnement d’organes mécaniques. La plu- Pas par tour 0,72 IC1 33p Demipas X1 2 DS 10k 10µ 16V R7 10k R6 C5 10k R5 10k R4 10k 10k R3 10k R2 part des moteurs pas à pas sont faits d’un axe en aimant permanent appelé rotor, entouré d’une partie fixe que l’on nomme stator. D’habitude, ces moteurs sont dotés d’un stator à quatre fils avec deux ou un point commun, que l’on branche souvent au positif de l’alimentation. En envoyant une séquence déterminée d’impulsions à chaque enroulement du stator, on met le moteur en rotation. Les moteurs pas à pas diffèrent par la taille, la forme, la puissance, la tension d’alimentation, le prix, la précision, entre autres, mais surtout par le nombre de pas nécessaires pour effectuer un tour complet. C’est cette même caractéristique qui définit l’angle de pas, comme vous pouvez le constater dans le tableau 1. Si par exemple un moteur présente un angle de pas de 1,8 degré, on en déduit qu’il faudra 360 / 1,8 = 200 impulsions pour obtenir une révolution complète de l’axe. On dispose de deux modes de fonctionnement du moteur : à pas complets ou par demi-pas. Ces deux régimes sont Tableau 2. Mode plein-pas Rotation vers la droite (horaire) § Pas Enroulement A Enroulement B Enroulement C Enroulement D 1 1 0 0 0 2 0 1 0 0 3 0 0 1 0 4 0 0 0 1 Pas Enroulement A Enroulement B Enroulement C Enroulement D 1 1 0 0 0 2 1 1 0 0 3 0 1 0 0 4 0 1 1 0 5 0 0 1 0 6 0 0 1 1 7 0 0 0 1 8 1 0 0 1 Rotation vers la gauche (anti-horaire) £ Tableau 3. Mode demi-pas Rotation vers la droite (horaire) § 100 Rotation vers la gauche (anti-horaire) £ elektor - 7-8/2007 résumés séparément dans le tableau 2 et le tableau 3. Faire travailler le moteur à demi-pas augmente le précision dans la rotation de l’axe. Dans le cas d’un moteur à angle de 1,8 degré, la commande en demi-pas correspond à 400 stades par révolution. Un autre avantage important des pulsations à demi-pas est de conférer plus de puissance au moteur, ce qui se traduit généralement par un couple plus élevé. Le circuit de pilotage du moteur est bâti autour d’un microcontrôleur Atmel AT89C2051 scandé à 12 MHz et d’un réseau de transistors Darlington haute tension et fort courant du type ULN2003. Les impulsions de commande du moteur générées par le microcontrôleur animé par le micrologiciel sont transmises à l’ULN2003 via les quatre lignes de port P1.4 à P1.7. Les enroulements du stator du moteur sont connectés aux broches correspondantes de l’ULN2003, lequel peut fournir jusqu’à 500 mA à chaque ligne de sortie. Notez que c’est un moteur pas à pas de 5 V qui est mis en service dans ce circuit. Vous pouvez télécharger gratuitement les fichiers (archivés) de code source ainsi que le micrologiciel (fichier .hex) de l’AT89 à partir de notre site Elektor sous la référence 070228-11.zip. Votre circuit achevé, mettez-le sous tension. Appuyez sur le bouton Full Step ou Half Step. Poussez ensuite sur Left ou Right et vous verrez le moteur démarrer et tourner selon le mode choisi. Vous pouvez changer à tout moment entre pas complet et demi-pas. Mais ceci ne vaut évidemment que si vous avez câblé votre moteur correctement. Le code source de l’AT89 contient un certain nombre d’indications pour vous aider à modifier le câblage dans le logiciel plutôt que d’avoir à refaire les soudures et vous perdre dans les différentes couleurs de fils. En pratique, vous remarquerez qu’en mode à pas complets le rotor atteint une vitesse supérieure et un couple moteur plus faible, alors qu’en demi-pas, couple et précision sont augmentés, au détriment de la vitesse. C’est pourquoi, quand ce genre de moteur entraîne un disque ou un plateau, on les commande de façon à ce qu’ils démarrent et s’arrêtent en demi-pas, tandis que les parcours intermédiaires ont lieu à pas complets pour atteindre la vitesse maximale. (070228-I) Robot-footballeur 1 Po u r t ir e r u n e Noyau de fer balle avec la force n é c e s s air e, le s jambes du robot sont commandées Ressort par des électroaimants de levage. La qualité du tir dépend toutefois plus de l’accélération que de la 2 force. Les électro-aimants du commerce ne conviennent pas. Ils sont certes puissants, alimentés en général sous 12 V ou 24 V, mais beaucoup trop lents pour ce que nous voulons faire. L’effet magnétique dynamique (l’impulsion donc) de la bobine sur un induit en fer, considéré en fonction du temps dépend – toutes grandeurs statiques telles que nombre de spires, géométrie de bobine, perméabilité mises à part – de la vitesse de variation du courant dans la bobine. Le courant variera d’autant plus vite que nous choisirons une tension plus élevée. Il nous faut donc de la haute tension. 7-8/2007 - elektor Nous confierons la production de la haute tension aux composants d’un appareil photo jetable avec flash que l’on peut éventuellement récupérer gratuitement dans un magasin spécialisé. L’électronique de l’appareil contient une cascade haute tension avec condensateur d’alimentation du flash. Ces pièces conviena b Bobine THY1 TIC126D R1 BT1 1V5 2k2 Vous avez peut-être vu ces images de Robocup et de footballeurs qui tiraient des balles très rapides sur le terrain. Il n’est pas absolument indispensable d’être un professionnel pour réaliser une électromécanique de ce style. Il est possible d’en faire autant avec des moyens « maison » très bon marché. Circuit de charge d’un appareil photo jetable 330V Julian Straub L1 R2 LDR C1 120µ 400V 070316 - 11 Bobine de lancement nent parfaitement au footballeur. Il reste à les récupérer. Ouvrez prudemment l’appareil après l’avoir déchargé. Commencez par retirer la pile pour ne pas risquer de vous brûler les doigts sur le condensateur. Déchargez prudemment ce dernier sur une résistance (de l’ordre du kilohm). Sortez ensuite la platine. Comme le condensateur se chargera par la suite en permanence, vous pouvez court-circuiter l’interrupteur. Nous avons r é cu p é r é n o t r e platine sur un petit Kodak qui charBaguette en geait en 16 s sous plastique 330 V avec une pile de 1,5 V son condensateur de 120 µF. 070316 - 12 Pour la suite, nous nous servirons dans la boîte de couture: nous avons besoin de deux petites bobines de fil (vides), que nous transformerons en inductances avec du fil de cuivre émaillé. Quel diamètre de fil ? En prenant du fil très fin, vous bobinerez évidemment plus de spires sur un plus grand nombre de couches et fabriquerez une forte inductance. Un fil trop fin a toutefois l’inconvénient d’offrir une plus grande résistance au passage du courant. Il s’agit de trouver le bon compromis. Un conseil pour vous simplifier le bobinage du fil fin: commencez par coller une couche de ruban adhésif double face sur le corps de la bobine. Vos spires y adhéreront et le fil ne se décalera pas. 101 Faites de même entre chaque couche de façon à éviter aux spires de se croiser. Terminez la bobine par une couche de ruban isolant en laissant bien sûr dépasser les deux fils de connexion du paquet (avec un isolant supplémentaire). Vous trouverez, avec un peu de chance, les deux noyaux de fer dans la boîte de fin de série d’un magasin d’électronique. À défaut, vous êtes condamné à les fabriquer. Prenez de l’acier rond (ni acier « VA » ni maté- riau non ferreux) chez un quincaillier ou un mécanicien. Vos ronds d’acier doivent pouvoir coulisser sans trop de jeu dans les bobines. Percez un trou à une extrémité de chaque noyau et fixez-y une petite rondelle qui empêche un léger ressort de pression de sortir. La fonction du ressort est de rappeler rapidement la jambe après chaque tir (figure 1a) à sa position initiale (figure 1b). Enfilez les noyaux dans les bobines et collez des cylindres de plastique à leurs extrémi- tés libres, celles qui seront en contact avec la balle. La commande est très simple, comme le montre la figure 2: un thyristor TIC126D est inséré comme déclencheur final entre la platine haute tension et la bobine. Le thyristor est amorcé optiquement par l’intermédiaire d’une LDR qui assure la séparation galvanique entre la haute tension et l’électronique de commande. (070316-I) zBot : étage de puissance 10 A niveau sont nécessaires. Le schéma de l’étage de puissance en H montre quel- ques sont très importantes parce que la façon simpliste, c’est-à-dire la commande directe, de piloter les quatre MOSFET présente un inconvénient rédhibitoire. En cas de plantage logiciel, il pourrait arriver qu’un ou plusieurs des MOSFET se trouve commandé de façon incorrecte, par exemple T4 et T7 simultanément. Dans ce cas, le courant qui traverse les transistors n’est limité par rien d’autre que la résistance interne des MOSFET, à peu près 10 mΩ, autant dire rien. Un erreur de ce genre détruirait les transistors à coup sûr. Le verrouillage logique mis en œuvre ici interdit ce genre de situation illégale et désastreuse. La commande de moteur à courant continu utilise trois signaux : DIR, PWM et STOP. ques inverseurs, des portes NON-ET et deux tampons à trois états. Ces fonctions logi- pour moteur CC U+ C11 102 IC7 IC8 7 7 R18 RFP30P06 T4 STOP 1 2 IC7.A 3 & RFP30P06 D2 D1 T5 T3 R15 10k IC7 = 74HCT00 IC8 = 74HCT125 R17 10k 14 T6 1N4001 R18 10k 1N4001 BC337 IC7.D 11 & 12 13 BC337 M BUK101 IC8 EN 1 PWR DIR 9 10 4 5 T7 D5 D6 T8 BUK101 3 IC8 6 R14 1N4001 1N4001 5 EN R21 10k 2 10k Si vous regardez le châssis du véhicule zBOT1, vous trouvez deux organes qui réclament une commande intelligente : la servo de direction et le moteur à courant continu. Le montage dit pont en H est le circuit usuel de la commande de vitesse de propulsion et de direction. Le moteur à courant continu d’une voiture Tamiya est suffisamment puissant pour propulser le zBot jusqu’à plus de 30 km/h. Le moteur consomme alors plus de 10 A, c’est pourquoi on choisit des MOSFET de puissance à fort courant pour l’étage de sortie. Le choix est large dans une grande variété de types. Le MOSFET dont nous avons besoin doit passer le courant maximal du moteur et –ce qui est important– il doit commuter avec des tensions de grille d’environ 5 V. Dans ce cas, le microcontrôleur commande la puissance directement du côté masse(low side). Du côté alimentation positive (high side) des adaptateurs de 14 10k Jens Altenburg 4 IC7.C & 8 IC7.B & 6 070172 - 11 elektor - 7-8/2007 Le signal DIR commande le sens de rotation du moteur, PWM règle la vitesse et STOP freine le moteur. Le module logiciel de commande de moteur CC s’appelle dcm.c. [1] Le document complet intitulé Zbot – the Robot Experimental Platform (en anglais) est disponible au téléchargement gratuit sur le site elektor. Le fichier s’appelle 070172-11.zip. (070172-I) Comment commander des moteurs CC de puissance 1 2 COMMANDE 2 +VS OUT 1 COMMANDE 1 OUT 2 OUT 3 OUT 4 100n 2 +VSS 9 +U M 3 4 13 14 Vref A B 100n RE2 1 RE1 2 3 4 IN 1 5 12 IN 2 7 10 IN 3 EN A 6 11 EN B IN 4 M1 M 1 8 15 SENSE A SENSE B 070317 - 11 RSA RSB 070317 - 12 B. Broussas La commande des « petits » moteurs pouvant être utilisés en robotique ne pose généralement pas trop de problèmes. Les moteurs de servos disposent en effet de leur propre électronique de commande, les moteurs pas à pas peuvent être facilement commandés par des transistors de puissance classiques ou par des ULN2803 comme cela vous a été présenté par ailleurs dans ce numéro car ils consomment rarement plus que quelques centaines de mA. Quant aux petits moteurs à courant continu, de simples transistors suffisent, à moins que vous ne préfériez par exemple le LB1630 de Sanyo, limité hélas à un courant de 400 mA et une tension de 6 volts. Par contre, dès que la consommation du moteur atteint ou dépasse l’ampère ou bien encore que sa tension d’alimentation dépasse une vingtaine de volts, la situation se complique et ce d’autant que vous êtes nombreux à ne pas trop aimer l’électronique de puissance. Cet article se propose donc de vous donner quelques idées ou 7-8/2007 - elektor niers comme indique figure 1, vous disposez d’une commande de sens de fonctionnement selon ceux des relais qui sont collés et décollés, ainsi que d’une commande d’arrêt faisant office de frein électrique très efficace lorsque les deux relais se trouvent dans la même position. Dans ce pistes de recherche pour la commande de tels moteurs. La première méthode, pour commander un moteur à courant continu de puissance, n’est autre que le bon vieux relais ou, plus exactement, la paire de relais. Sous réserve en effet de câbler ces der3 +U L +U M M2 C2 D2 M 100n IN2(4) IN2(4) +VSS IN1(3) +VS 1 /2 L298 IN1(3) OUT2(4) ENA(B) C1 ENA(B) GND 100n OUT1(3) D1, D2 = BY252; 1N5402 M1 D1 M 070317 - 13 103 4 +U L sons de niveaux logiques des entrées de commande et d’inhibition du L298, on dispose même de deux possibilités d’arrêt du moteur comme indiqué dans le tableau ci-dessous : le mode « roue libre » ou non freiné, ou le mode freiné comme vu précédemment avec le schéma à relais. +U M D3 C2 D4 M1 100n M D1 D2 D1 ... D2 = BY252; 1N5402 OUT 1(3) OUT 2(4) +VSS +VS IN1(3) IN1(3) IN2(4) 1 /2 L298 ENA(B) ENA(B) Si le sens de rotation du moteur doit pouvoir être modifié, il faut alors faire appel à un montage en pont ou en H comme indiqué figure 4. Notez que, avec un L298, il est possible de commander ainsi deux moteurs puisque le circuit contient quatre amplificateurs. Un seul L298 suffit donc généralement pour les moteurs de propulsion droite et gauche d’un robot mobile. C1 100n GND IN2(4) 070317 - 14 Tableau 1. EnA(B) In1(3) In2(4) M1 M2 H H H Frein Rotation H L L Rotation Frein L X X Arrêt en roue libre Arrêt en roue libre 5 D1 R1 10k 1N4148 1 /4 L298 C1 In x Out x 1n5 070317 - 15 6 +U L +U M C2 C1 100n 4 +VSS IN1 100n 9 +VS L298 5 2 1 OUT1 6 IN2 7 10 EN 3 2 13 3 11 12 14 4 GND 8 15 1 R1 Rs 070317 - 16 104 OUT2 cas en effet, le moteur se retrouve courtcircuité sur lui même et il est donc freiné par sa propre force contre électromotrice (fcem). Des relais capables de couper 10 ampères tout en ne nécessitant que 5 volts et quelques dizaines de mA au niveau de leur bobine sont aujourd’hui monnaie courant (voyez par exemple les relais Finder) et peuvent donc être utilisés de la sorte sans difficulté. Si cette solution électromécanique vous déplaît, nous vous conseillons de recourir au circuit de puissance en pont dont un des dignes représentants est le L298 de ST Microelectronics. Comme le montre son synoptique interne visible figure 2, ce circuit renferme quatre amplificateurs de puissance en pont précédés d’une circuiterie logique de commande. Conçu à l’origine pour la commande des « gros » moteurs pas à pas, ce circuit peut recevoir une multitude d’autres applications dont voici quelques exemples. En raison de la relative indépendance des amplificateurs qu’il contient, il peut être utilisé pour commander quatre moteurs sous réserve de se satisfaire d’un seul sens de rotation. Il est alors possible de ramener une des connexions de ces moteurs à la masse ou à l’alimentation comme indiqué figure 3. En jouant sur les combinai- Bien que le circuit dispose d’une protection contre les échauffements excessifs, sachez que vous pouvez accroître sa sécurité de fonctionnement en surveillant le courant consommé par les moteurs. Il suffit pour cela de placer une résistance de très faible valeur entre les entrées SENSE A ou SENSE B et la masse. Cette résistance sera alors traversée par l’intégralité du courant consommé par le moteur connecté aux bornes de l’amplificateur correspondant et, par simple application de la loi d’Ohm et mesure de la tension à ses bornes, il sera ainsi possible de surveiller ce courant. Si vous ne souhaitez pas mettre en place cette surveillance, il est alors conseillé de protéger le circuit des éventuels courts-circuits de ses sorties à la masse, qui sont les plus susceptibles de se produire dans un robot (une cosse du moteur qui touche le châssis métallique par exemple !). Dans ce cas, le schéma de la figure 5 est préconisé par ST Microelectronics. Ce circuit se déclenche en 10 µs et se réarme tout seul lorsque le court-circuit disparaît. Le L298 est capable de supporter une tension d’alimentation maximum de 46 volts et chacun de ses amplificateurs de puissance peut fournir un courant de 2 ampères ce qui est déjà une valeur plus que confortable, même pour un robot mobile relativement lourd. Si cela ne vous suffit pas, sachez qu’il est possible de monter les amplificateurs de puissance en parallèle, sous réserve de ne pas le faire « n’importe comment ». On dispose alors d’un courant de sortie maximum de 3,5 ampères. Pour cela, il faut respecter le schéma de la figure 6 à l’exclusion de tout autre ; c’est à dire encore que les amplificateurs 1 et 4 d’une part et 2 et 3 d’autre part doivent être mis en parallèle. Remarquez, avant de conclure cet article, que les diodes de protection ne sont pas intégrées dans le L298. Il est donc indispensable de les prévoir en externe comme nous l’avons fait sur chacune de elektor - 7-8/2007 nos figures, sinon c’est la destruction assurée du L298 dès les premiers tours de roues du robot ! Ce circuit n’est bien sûr pas le seul qui soit utilisable pour commander des moteurs à courant continu de puissance pour des applications robotiques. Des boîtiers plus récents et/ou plus performants existent en effet aujourd’hui. Le L298 présente cependant l’avantage d’être bien distribué, peu coûteux et de pouvoir répondre à une large plage de besoins ce qui justifie largement à nos yeux cette présentation de ces divers modes d’utilisation. Et si vous êtes un tant soit peu curieux, vous pour- rez en outre découvrir sur le site de ST Microelectronics (www.st.com) de nombreuses notes d’applications qui lui sont consacrées et qui seront autant de source d’idées complémentaires pour le mettre en œuvre. (070317-I) Relais PIC clignotant Herbert Musser +12V 1k R6 1k R2 1 3 6 7 R1 C1 100n D1 GP4 GP3 IC1 GP1 GP5 PIC12F675 GP0 GP2 8 R4 T2 100k 1k R3 1k La réalisation de ce relais électronique clignotant a été déclenchée par les demandes de motards. Les vibrations de certains types de motos conduisent à une forte usure des lampes des clignotants. Les modules clignotants à LED disponibles entre-temps pour la plupart des motos résolvent ce problème. Un autre vient toutefois prendre sa place : les relais clignotants ordinaires dépendent de la charge. Comme celle des modules LED est faible, ils clignotent beaucoup trop rapidement. Les premières tentatives de résoudre le problème par des circuits électroniques clignotants ont été insatisfaisantes : la première impulsion de clignotement dure en général deux fois plus longtemps que les suivantes (la faute en est à la charge initiale du condensateur de l’élément de temporisation). Le mini circuit PIC de commande d’un FET présenté ici constitue une meilleure solution. Cette exécution du circuit permet de régler élégamment un autre problème : il est bien connu que certains motards oublient le clignotant après l’avoir mis. Si le cavalier représenté dans le schéma est posé, le logiciel veillera à ce que le clignotant s’éteigne de lui-même après 120 impulsions. Il clignotera bien entendu de nouveau lorsqu’il sera actionné. Le circuit se contente d’un nombre très réduit de composants. Le circuit, mis à 4 2 IRF4905 R5 T1 1k BC547 5 JP1 D2 1N4001 4V7 070090 - 11 l’épreuve et déjà réalisé à plusieurs exemplaire, ne mesure que 20 sur 30 mm environ et peut être placé dans le boîtier du clignotant. Le signal de commutation à la sortie du PIC commande un robuste transistor de puissance HEXFET (T2) par l’entremise du transistor d’attaque (T1). Le IRF4905 possède une résistance de commutation de 20 mΩ, une valeur incroyablement faible, et peut commuter jusqu’à 74 A. Pour que le microcontrôleur survive dans l’environnement peu convivial du réseau de bord, sa tension d’alimentation (provenant de la commande des clignotants) est limitée à 4,7 V par D1 et découplée par C1. Des versions du micrologiciel sont disponibles pour les contrôleurs PIC 12F629, 12F683 et 12F675. Il peut bien entendu être aussi téléchargé à partir du site Web ELEKTOR. Pour moins de 10 euros en matériel, on peut réaliser un relais électronique clignotant fiable, insensible aux vibrations et surtout indépendant de la charge. Il convient toutefois de tenir compte des règlements en vigueur avant de lâcher ces motos améliorées sur les routes. (070090-I) Contrôleur de moteur pas à pas à PIC12C508 C.Tavernier Lorsque l’on n’utilise pas un moteur pas à 7-8/2007 - elektor pas pour assurer le positionnement précis d’un élément de robot, on peut l’employer en tant que moteur de traction, en lieu et place des classiques servos modifiés présentés par ailleurs dans ce même numéro. Dans ces conditions, il n’est plus nécessaire de savoir « compter les pas » que doit accomplir le moteur puisque l’on souhaite seulement le faire tourner de manière continue dans un sens ou dans l’autre. 105 Toutefois, pour l’utilisation d’un moteur pas à pas en tant que moteur de traction, ces solutions sont loin d’être satisfaisantes. En effet, elles imposent toutes de générer des impulsions de manière permanente tant que l’on veut faire tourner le moteur, ce qui nécessite soit un oscillateur programmable supplémentaire, soit la mobilisation d’une ressource du microcontrôleur de commande du robot. Aussi avons nous décidé de vous proposer une autre approche, avec ce contrôleur de moteur pas à pas spécifiquement prévu pour faire tourner le moteur dans un sens ou dans l’autre, sous le contrôle d’un simple niveau logique. Et comme les moteurs utilisés pour la propulsion d’un robot vont généralement par paire, nous allons même vous proposer un double contrôleur en détournant de sa fonction première un circuit intégré très répandu et peu coûteux. L’utilisation d’un moteur pas à pas en tant que moteur de propulsion n’ayant que faire de la précision du positionnent et donc de la précision des pas, de simples modèles unipolaires conviennent très bien. Notre montage est donc prévu pour des moteurs de ce type. IC2 +U 7805 C2 C1 C3 C4 47µ 16V 10n 220n 470µ 25V IC1 R1 1 GP0 5 G D 4 GP1 7 GP0 6 GP1 GP2/T0CK GP3/MCLR GP4/OSC2 GP5/OSC1 8 3 GP4 2 GP5 12C508 070302 - 11 2 +U D8 BD679 R1 GP0 T4 1k D1 D2 R2 GP1 1k BD679 D7 T3 L2 D1...D8 = 1N4004 M1 L1 +U M M L3 L4 D6 BD679 R3 GP4 Il permet de commander le moteur GP5 au moyen de deux entrées logiques compatibles TTL ou CMOS. Lorsque ces deux entrées, baptisées G et D, sont au niveau logique haut ou en l’air (elles ont leur propre résistance de tirage) le moteur reste à l’arrêt mais en mode freiné puisque c’est un moteur pas à pas. Lorsque l’entrée G est mise au niveau logique bas, le moteur tourne dans un sens (arbitrairement vers la gauche d’où l’appellation G) alors que si c’est l’entrée D qui est mise au niveau bas, il tourne dans l’autre sens. Si les deux entrées sont mises à la masse simultanément, l’entrée D est prioritaire et le moteur tourne donc dans le sens qui lui correspond. La vitesse de rotation du moteur est fixe mais, comme nous vous fournissons le listing source du logiciel utilisé pour cette application, il vous est très facile de la 106 modifier si elle ne vous convient pas, voire même d’ajouter une possibilité de réglage externe si nécessaire. Le schéma de la partie « intelligente » de notre contrôleur est présenté figure 1 et, comme vous pouvez le constater ; elle fait appel à un microcontrôleur PIC12C508 de Microchip. Il est utilisé ici en mode horloge et circuiterie de reset internes. De ce fait, il ne nécessite aucun composant externe pour sa mise en œuvre et toutes ses lignes de port sont donc disponibles. Les ports parallèles GP2 et GP3 sont utilisés en entrées et, comme GP2 ne dispose pas d’une résistance de tirage au niveau haut en interne, celle-ci est réalisée au moyen de R1. Les ports parallèles GP0, GP1, GP4 et GP5 quant à eux sont utilisés en sorties pour générer les impulsions à destination des bobinages du moteur. Ces dernières peuvent être amplifiées par deux types d’étages de puissance, dont nous verrons le schéma dans un instant, selon le modèle et le nombre de moteurs à commander. 1 10k Plusieurs solutions sont alors à notre disposition pour commander le moteur dont certaines vous sont d’ailleurs présentées dans ce même numéro : utilisation d’un circuit intégré spécialisé dans le contrôle des moteurs pas à pas, exploitation d’un ou plusieurs ports parallèles de microcontrôleurs convenablement programmés ou encore réalisation d’un contrôleur à base de circuits logiques conventionnels. T2 1k D3 D4 R4 1k BD679 T1 D5 070302 - 12 Programmation de la durée des pas par modification d’une constante utilisée dans le programme. Constante binaire Durée d’un pas 10010010 1 ms 10010011 2 ms 10010100 4 ms 10010101 8 ms 10010110 16 ms 10010111 32 ms Le 12C508 devant être alimenté sous 5 volts, cette tension est produite à partir de la tension d’alimentation du moteur au moyen d’un régulateur intégré trois pattes classique IC2. Si le contrôleur n’est destiné qu’à un seul moteur, ou si le moteur à commander consomme plus de 500 mA par bobine, l’étage de puissance dont le schéma vous est présenté figure 2 peut être utilisé. Il fait appel à des transistors bipolaires classiques qui, compte tenu de leurs caractéristiques, peuvent commuter des courants de 3 ampères. Les diodes D1 à D8 écrêtent les surtensions parasites générées par la commutation brutale du courant dans les bobinages du moteur et protègent les transistors. Par contre, si le moteur utilisé consomme moins de 500 mA et à plus forte raison si vous devez commander deux moteurs de ce type, une solution élégante et astucieuse existe, comme indiqué figure 3. Elle consiste à faire appel à un classique ULN2803, habituellement utilisé pour de la commande de relais, mais qui renferme 8 Darlingtons de moyenne puissance avec leurs diodes de protection. Ce circuit peut donc parfaitement commander n’importe quel moteur pas à pas unipolaire tant que la tension nécessaire ne dépasse pas 50 volts et le courant par bobine 500 mA. De plus, comme l’ULN2803 contient 8 étages identiques, on peut le faire précéder par deux contrôleurs analogues à celui de la figure 1 et commander ainsi elektor - 7-8/2007 deux moteurs de propulsion de robot : un à gauche et un à droite repérés MA et MB sur cette figure. La réalisation de l’une ou l’autre des versions ne présente aucune difficulté. Le PIC 12C508 doit être programmé avec le fichier que vous trouverez sous forme objet, mais également sous forme source au cas où vous souhaiteriez le modifier, sur le site Internet d’Elektor ainsi que sur celui de l’auteur (www. tavernier-c.com). 3 Comme nous vous fournissons en téléchargement le listing source complet du logiciel programmé dans le 12C508, il vous est possible de le modifier afin de l’adapter à vos besoins. Si vous n’êtes pas familier de l’assembleur des microcontrôleurs PIC, voici les indications nécessaires pour la modification la plus importante que vous souhaiterez peut-être réaliser : celle de la vitesse de génération des impulsions de commande des moteurs et donc, de leur vitesse de rotation (voire le tableau). Il suffit pour cela de modifier la constante binaire qui se trouve placée sur la ligne : +U L2 10 1 GP0A 2 GP1A 3 GP4A 4 GP5A 5 GP0B 6 GP1B 7 GP4B 8 GP5B Si vous réaliser l’amplificateur de puissance à transistors notez que T1 à T4 n’ont pas besoin de radiateur tant que la consommation du moteur ne dépasse pas l’ampère. Dans le cas contraire, vissez-les sur une petite plaquette de dural de quelques cm2. Pour des raisons de simplification de montage mécanique, elle peut être commune aux quatre transistors mais il faut dans ce cas utiliser les accessoires d’isolement classiques que sont le mica et les rondelles à épaulement car le collecteur des transistors est relié à I1 IC1 I3 I4 I6 O3 I8 O8 VEE +U M 15 13 O6 O7 L4 16 14 O5 I7 L3 17 O2 O4 ULN2803 M 18 O1 I2 I5 MA L1 12 L6 11 MB 9 L5 M L7 L8 MOVLW B’10010101’ se trouvant juste au dessus de la ligne contenant OPTION sur le listing source. Avec la valeur originale, la durée d’un pas est de 8 ms, mais le tableau ci-dessus indique quelle constante utiliser en fonction de la durée des pas que vous pouvez souhaiter. 070302 - 13 la partie métallique de leur boîtier. Si vous réalisez la version à base d’ULN2803, aucune précaution particulière n’est à prendre si ce n’est de ne pas dépasser les possibilités en courant maximum du circuit (500 mA rappelons-le). (070302-I) Commande bidirectionnelle de moteur 12 V R1 R3 T2 R9 1k 230V Le circuit comporte aussi un transformateur secteur 18 V (1,5 A), 4 diodes (D1 à D4) pour un redresseur en pont et un condensateur électrolytique de charge (C1) fournissant une tension d’environ 24 V. La commande du moteur est 7-8/2007 - elektor D2 C2 D4 D3 1µ 4x 1N5401 40V R7 BC327 2k2 D5 T5 1W R5 BC327 T6 D6 2k2 150 Ω T3 T4 BAT42 R4 BAT42 T1, T2 = BDW93C; BD901; BD679 T3, T4 = BDW94C; BD902; BD680 effectuée en le plaçant dans un pont en H classique formé de T1/T3 et T2/T4. Le courant du pont est limité par T5 et T6 et par les « détecteurs de courant » R7 et R8. Ces résistances permettent de modifier le cou- 1W R6 150 Ω R2 P1.B R8 150 Ω 1000µ P1.A 0Ω47 C1 0Ω47 18V 1A5 150 Ω Cette commande est conçue pour les moteurs à courant continu consommant jusqu’à 1 A. Le circuit, d’une grande simplicité, ne comporte que des composants ordinaires. La tension de sortie entre 0 et 14 V permet de modifier la vitesse du moteur et l’inversion de polarité cause celle du sens de rotation. Le circuit se prête donc aussi à la régulation de la marche de trains miniatures à courant continu et à la commande de petits outils électriques. T1 150 Ω D1 150 Ω TR1 Stefan Brandstetter 070104 - 11 rant maximum du moteur, normalement de 1 A (IOUT = 0,6 V/R7 ou R8). L’alimentation (transfo/redresseur) doit alors pouvoir fournir un courant plus élevé et les transistors en pont sont à redimensionner en consé- 107 quence. Un potentiomètre linéaire double (P1) sert d’organe de réglage. Il forme un double diviseur de tension ajustable avec R1 et R2 ou R3 et R4. Les deux moitiés du potentiomètre sont raccordées en sens opposé. La tension d’un curseur est alors maximale et celle de l’autre curseur mini- male quand le potentiomètre se trouve en position extrême. Les curseurs des 2 moitiés du potentiomètre en position médiane se trouvent à une tension à peu près égale. La tension appliquée au moteur est donc nulle (position zéro). Le moteur tournera plus ou moins vite dans un sens ou dans l’autre selon la position angulaire du potentiomètre. La chute de tension aux bornes de D5/D6 équilibre UBE des transistors en pont. Cela permet de faire démarrer le moteur sans à-coups à partir de la position zéro. (070104-I) Commande de moteurs pas à pas Sans circuit spécialisé B. Broussas Très utilisé en robotique où il est un concurrent direct des moteurs à courant continu et autres servos de radiocommande, le moteur pas à pas souffre cependant de la relative difficulté que l’on rencontre pour le commander. En effet, contrairement à ses homologues à courant continu qui tournent dès qu’ils sont alimentés, le moteur pas à pas demande une succession d’impulsions appliquées à ses diverses bobines pour le faire tourner. En contrepartie, et sous réserve que l’on ne dépasse pas ses possibilités mécaniques, le nombre d’impulsions appliquées à ses bobines correspond au nombre de pas élémentaires accomplis par le moteur. On dispose donc ainsi d’une information de positionnement quasi automatique, impossible à obtenir avec un moteur à courant continu. Dans nombre de robots qu’il nous a été donné d’observer, la commande du ou des moteurs pas à pas était confiée à un circuit spécialisé, au premier rang desquels se trouve le L293 de ST Microelectronics qui, malgré son âge, reste toujours d’actualité. De nombreuses autres solutions existent pourtant, telle que la commande directe par un des ports du microcontrôleur qui pilote le robot ou bien encore celle que nous vous proposons de découvrir maintenant et qui se contente de ... deux circuits logiques CMOS standards. Comme vous le savez peut-être déjà, il existe en fait deux types de moteurs pas à pas : les moteurs unipolaires et les moteurs bipolaires. Alors que les premiers se contentent de simples impulsions envoyées à leurs quatre bobines, les seconds nécessitent une inversion de la polarité des signaux appliqués à celles-ci. Afin de ne pas compliquer outre mesure notre schéma, nous l’avons donc conçu pour des moteurs unipolaires dont 108 1 +5V IC3 +5V 78L05 50mA max C2 C1 C3 C4 10µ 16V 10n 220n 1000µ 25V D8 SENS 1 2 BD679 IC1.A =1 R1 4 3 5 6 IC1.C =1 6 4 3 5 R J C K IC2.A T4 2k2 1 D1 2 D2 R2 S 2k2 7 BD679 +5V D7 T3 L2 PAS IC1 = 4070 IC2 = 4027 14 16 IC1 IC2 7 8 M1 L1 +U MOTEUR M L3 D1...D8 = 1N4004 L4 D6 BD679 R3 9 10 9 12 13 8 IC1.B =1 11 =1 IC1.D 10 J 13 11 R C K IC2.B 15 14 S 12 T2 2k2 D3 D4 R4 2k2 BD679 T1 D5 070299 - 11 le tableau ci-dessous rappelle le « chronogramme » de fonctionnement. La lecture des colonnes de ce tableau de 1 vers 4 correspond à la rotation du moteur dans un sens, alors que le parcours de 4 vers 1 inverse le sens de rotation. Chaque colonne de ce tableau correspond à un pas mécanique du moteur ; pas qui varie de 1,8° à 7,5° selon le type de moteur choisi. Ceci étant précisé, le schéma de notre contrôleur sans circuit intégré spécialisé, présenté figure 1, est très simple puisque son « intelligence » se limite en fait à deux circuits logiques IC1 et IC2, en l’occurrence de simples portes OU exclusif et deux bascules J-K, tandis que l’étage de puissance est confié à de vulgaires transistors bipolaires passe-partout. Les impulsions destinées à faire avancer le moteur doivent être appliquées à l’entrée PAS. Chaque impulsion fait avancer le moteur d’un pas dans un sens ou dans l’autre ; sens qui est déterminé bien entendu par l’état de l’entrée SENS. Cette dernière agit sur les portes OU exclusif IC1a et IC1d qui sont utilisées ici en inverseurs programmables. Rappelons en effet qu’une porte OU exclusif peut être considérée, vis à vis d’une de ses entrées, comme une porte qui inverse ou non le signal qui la traverse en fonction de l’état de son autre entrée. Cela se voit elektor - 7-8/2007 très bien à la lecture de la table de vérité de la figure 2. Si l’entrée A est à « 0 », le signal appliqué sur l’entrée B se retrouve identique à lui-même en sortie (0 donne 0 et 1 donne 1). Par contre, si l’entrée A est à « 1 », le signal appliqué sur l’entrée B se retrouve inversé en sortie (0 donne 1 et 1 donne 0). Nous n’avons rien écrit là de bien nouveau mais nous avons tenu à préciser cette interprétation de la table de vérité du OU exclusif utilisée comme un inverseur programmable car nous avons remarqué que vous étiez nombreux à ne pas la connaître (ou à l’avoir oubliée !). Ceci étant, la partie réellement active du circuit est constituée par les deux bascules J-K IC2A et IC2B. La figure 2 rappelle la table de vérité de ces bascules ; table de vérité qui se simplifie ici compte tenu du fait que J et K sont toujours toutes deux au même niveau. Lorsque ces entrées sont à « 1 », les bascules changent d’état pour chaque impulsion d’horloge, c’est à dire en fait pour chaque impulsion appliquée à l’entrée PAS. Dans le cas contraire, c’est à dire lorsque J et K sont toutes deux à « 0 », les sorties Q et Q conservent leur état précédent. Si vous doutez encore que cela génère bien les chronogrammes correspondant au tableau ci-dessus, armez-vous d’un papier quadrillé 5 x 5, d’un crayon, de patience et dessinez les chronogrammes des signaux fournis, lorsque SENS est à un niveau que vous choisirez arbitrairement. 2 J K R J Q C CLK K A Q S B S EXOR JK FLIP-FLOP CLK =1 J K Qn Qn + 1 A B S 1 x 0 1 0 0 0 X 0 1 1 0 1 1 0 X 0 0 1 0 1 1 1 0 X 1 1 0 1 1 Qo Qo X X X Qn 070299 - 12 Tableau Numéro de pas 1 2 3 4 Bobine 1 1 1 0 0 Bobine 2 0 0 1 1 Bobine 3 1 0 0 1 Bobine 4 0 1 1 0 L’étage de puissance, quant à lui, est réalisé au moyen de transistors bipolaires, protégés des surtensions générées par la commutation du courant dans les bobines des moteurs grâce aux diodes D1 à D8. Avec les transistors utilisés, il est possible de commuter des courants pouvant atteindre 3 ampères, ce qui laisse beaucoup de souplesse quant au choix du moteur pas à pas. La partie logique du montage est alimentée sous une tension fixe de 5 volts, stabilisée par IC3, ce qui rend les entrées PAS et SENS compatibles TTL. On peut également utiliser cette tension pour alimenter le circuit qui précède le contrôleur sous réserve de ne pas dépasser une cinquantaine de mA avec le régulateur choisi. Si votre moteur est alimenté sous 6 volts, il est conseillé de remplacer IC3 par un LM2936Z5 par exemple, qui est un régulateur 5 volts à faible chute de tension. En effet, pour pouvoir fonctionner correctement, le 78L05 prévu d’origine pour IC3 demande près de 2 volts entre entrée et sortie, ce qui est évidemment impossible à obtenir avec une tension d’alimentation du moteur de 6 volts. Toujours à propos de la tension d’alimentation du moteur, notez qu’elle peut atteindre 24 volts si nécessaire. Tant que le courant consommé par le moteur ne dépasse pas l’ampère, les transistors n’ont pas besoin de radiateur alors que celui-ci devient conseillé au delà. Sa surface peut toutefois se limiter à quelques cm2 puisque les transistors fonctionnent ici en commutation et dissipent donc une puissance relativement faible. (070299-I) Fiche de caractéristiques du L293 www.st.com/stonline/books/pdf/ docs/1328.pdf Contrôleur de moteur CC MLI de 3 A Rajkumar Sharma Ce circuit est conçu pour des applications de commande de déplacement, un besoin classique en robotique ! Ce contrôleur de moteur CC MLI (Modulation en Largeur d’Impulsion = PWM pour Pulse-Width Modulation en anglais) tér Carac istique s CC à 3 0 V teu r 12 li menta n sortie ion d’a nti nu e • Ten s d e co Hz A 3 ’à à 35,1 k it ju squ e 1,16 rn d u le o F b • g la mètre PWM ré tentio u e n ce pa r po u n • Fréq ti n e n co g la ble 0% 0 à 10 • M LI ré r ue de utateu q li c y co m m port c n pa r o ti • Ra p c e ir e de d u itée ma nd rt-circ • Co m e co u rg a h ec ction d • Prote nts iq ue m posa therm d e co etu re e c rm a e F rf • n su tage e e mon leu r • Pa s d contrô e m icro d e c n • Abse mo tion d u 7-8/2007 - elektor à prix abordable peut pilon’importe quel moteur PMDC (Permanent Magnet Direct Current = à courant continu et aimants permanents) entre 12 et 30 V et 3 A maximum. La direction du moteur est pilotée par un commutateur à glissière et la vitesse par un ter potentiomètre ordinaire. Le schéma du circuit de la figure 1 présente des circuits intégrés de t ype LMD18200 et SG3525 au coeur du montage. Le SG3525 est un circuit de commande de modulation de largeur d’impulsions (MLI), le LMD18200 étant lui un pont en H (H-bridge) permettant au moteur de fonctionner dans les deux sens de rotation. Le circuit SG3525 supporte la commande 109 GND B 4 2k7 7 SD R5 R2 S1 3 330 1k5 18k 10 12 GND VS 6 18k VREF VCC 15 16 de fréquence et le pilosateurs C6 à C10 sertage du rapport cyclique. vent à supprimer les VCC2 VCC2 VCC1 La fréquence de l’oscillaparasites sur les deux R1 10k teur est déterminée par voies d’alimentation. C1 R4 les composants pris aux Le régulateur de ten100n 13 3 sion L7805ACV pour broches 5 et 6. L’ajusSYNC VC R3 GND 6 4 C2 2k2 OSC OUT RT table P2 sert à régler la l’alimentation de la par9 1 T BS1 IC1 11 2 5 fréquence entre 1,16 et tie de logique accepte K1 100n OUT A IN+ PWM 14 1 IC2 OUT1 2 INOUT B toute tension conti35 kHz. Bien qu’il soit 10 9 CMPEN OUT2 7 3 habituellement recomnue non régulée comLMD18200 C4 P1 P2 SG3525AN DISC DIR 5 8 8 11 SS CS BS2 CT mandé de rester auprise entre 7,5 et 18 V R6 100n appliquée au bornier dessus de 20 kHz pour 100k 10k C3 éviter d’entendre le bruit K2. L’autre connecteur 18n du moteur, cela n’est d’alimentation, K3, est GND GND pas toujours possible en destiné à l’alimentation IC3 VCC1 VCC2 fonction du moteur utidu moteur. La capacité L7805ACV VCC1 lisé. Le potentiomètre de l’alimentation du R2 1 2 R7 R5 P2 détermine le rapport moteur dépend bien K3 K2 C8 C5 C6 C9 C7 S1 cyclique, qui peut être sûr du moteur utilisé. 0 0 D2 D1 100u 63V 100n 100n 100u 63V 100n réglé de 0 à 100 % pour S’il est prévu 12 V, alors commander la vitesse R7 devrait être de 1 kΩ, 060339 - 11 du moteur, et le condenet si on veut travailler GND GND GND 1 sateur C5 sert au redéà 24 V, elle aura une marrage en douceur. Les valeur de 1,5 kΩ. Si transistors internes sont vous voulez utiliser un utilisés pour obtenir moteur lourd consomun rapport cyclique de mant plus de 1 A environ, il peut être utile 100 %. Les transistors IC2 C2 C4 K1 d’attaque internes utilide renforcer les pistes sés sont mis à la masse de cuivre venant de et K3 1 11 R7C7 C1 allant vers K2/K3 en les par les broches 11 et 14 R4 pour alterner les cycles dotant de vrais fils de P2 d’oscillateur. La brocuivre de 1,5 mm 2 de C6 IC1 R6 D1 D2 section. che 16 du circuit intégré R1 Si vous désirez interfaest la borne REF V, qui C9 C5 K2 P1 cer le circuit avec une produit 5 V en sortie. La résistance R1 fournit la source fournissant de R3 tension d’alimentation 0 à 5 V, enlevez simC8 IC3 à un transistor interne à plement le potentioC3 collecteur ouvert pour mètre P1 et appliquez une sortie MLI à niveau la tension analogique à TTL. la broche 2 du circuit 2 Quant au circuit intégré. LMD18200, le commutateur à glissière masse. L’entrée Brake (frein, broche 4) est La figure 2 présente la platine de comS1 (sur l’embase K1) pilote l’entrée de la reliée directement à la masse. Les condenmande conçue pour le circuit, qui devrait sateurs C2 et C4 à la sortie du moteur sont s’adapter à de nombreuses applications à commande de direction (broche 3) pour changer la direction du moteur de cw des endroits critiques dans un robot. Après des condensateurs « d’amorce » (boots(clockwise = sens horaire) vers ccw (countout, la plupart des méthodes de déplacetrap). Les broches 2 et 10 sont les sorties ter clockwise = sens antihoraire), ou inverment d’un robot nécessitent un moteur en pont H alimentant le moteur à courant sement. La résistance R4 est connectée quelconque. La platine a été conçue pour continu. à la broche de signalisation thermique être compacte toute en utilisant uniqueDans la section alimentation, les condenment des compoT (broche 9), qui n’est pas utilisée sant s classiques, C5 = 22 µF/63 µF ici. La fonction peut c’est dire que nous Liste des composants C6,C8 = 100 µF/63 V être utilisée pour n e t r o u vo n s ici envoyer un avertisaucun composant Résistances : Semi-conducteurs : sement lorsque la CMS (Montage en R1 = 10 kΩ D1,D2 = LED température de la Surface). Le desR2,R4 = 18 kΩ IC1 = SG3525AN sin des pistes et puce atteint 145 °C. R3 = 2kΩ2 IC2 = LMD18200 R5 = 330 Ω Le circuit intégré est la sérigraphie de IC3 = L7805ACV R6 = 2kΩ7 automatiquement l’implantation des R7 = 1kΩ5 mis hors ser vice composants sont P1 = potentiomètre 10 kΩ Divers : téléchargeables arrive à 170 °C. La P2 = ajustable 100kΩ K1 à K3 = bornier encartable à 2 contacts gratuitement depuis broche 8 du circuit au pas de 5 mm LMD18200 est l’enn o t r e si t e We b S1 = inverseur à glissière Condensateurs : platine EPS060339-1 disponible via trée de détection sous la référence C1,C2,C4,C5,C7,C9,C10 = 100 nF thePCBShop de courant. R6 relie EPS060339-1.zip. C3 = 18 nF cette broche à la (060339-I) 1 3 2 110 elektor - 7-8/2007 Conversion servo-moteur ➧ moteur Paul Goossens Les servo-moteurs utilisés en modélisme servent le plus souvent à actionner les bras, pieds et autres « organes » d’un robot. En dehors de cette utilisation évidente, ils remplissent parfaitement la fonction de moteur, par exemple pour actionner les roues d’un robot. Il suffit pour cela de commencer par modifier une servo standard. Les servos sont utilisées depuis longtemps en modélisme. C’est pourquoi ils sont faciles à trouver, et souvent pour des prix très abordables. Servo standard Une servo standard est destinée à atteindre une position donnée et à la conserver. La servo reçoit sur son entrée un train d’impulsions numériques. C’est la longueur de ces impulsions qui détermine la position que l’arbre de sortie doit rejoindre. L’électronique interne utilise un potentiomètre lié mécaniquement à l’arbre de sortie pour déterminer sa position. Dans le cas où la longueur des impulsions ne correspond pas à la position réelle du potentiomètre, l’électronique actionne le moteur interne. Si l’arbre est trop loin à droite, le moteur tournera à gauche et inversement. Dès que l’arbre arrive à la position correcte, le moteur cesse d’être alimenté. Petite adaptation Une servo standard n’est donc pas en mesure de faire tourner des roues ou autre organes du même genre. Un peu de bricolage nous permettra d’adapter une servo à cet usage. Le truc est tout simple. Le potentiomètre est remplacé par un diviseur de tension composé de deux résistances de 10 kΩ. Ainsi l’électronique « croit » que l’arbre est toujours en position médiane. Si on envoie à la servo une impulsion de 1,5 ms (position neutre), il ne se passe rien. La servo coupe l’alimentation du moteur. Réduisons à 1 ms la durée de l’impulsion, la servo s’efforcera de d’amener l’arbre en butée à gauche. Pour cela il fait tourner le moteur vers la gauche. Pendant ce temps, son entrée de contre-réaction « voit » toujours l’arbre au milieu. Ainsi le moteur continue de tourner vers la gauche. Pour faire tourner le moteur dans l’autre sens, on lui envoie une impulsion de durée supérieure à 1,5 ms (par exemple 2 ms). Le moteur s’arrête à nouveau si la durée d’impulsion est ramenée à 1,5 ms. 7-8/2007 - elektor Attention au fait que la plupart des servos ont des butées mécaniques de fin de course qui empêchent la rotation totale de l’arbre. Nous devrons donc retirer ces butées préalablement pour éviter que le moteur parte en fumée pendant les tests. échéant de remettre en place le pignon du moteur. Pour finir on revisse la plaque du fond. La servo ne peut plus servir de servo mais il est prêt à servir de moteur-réducteur. (070358-I) Mécanique Pour ce qui est de l’électronique, la modification ne représente pas grand’chose. Elle demande un peu de savoir faire pour l’exécution dans le petit volume de la servo. Nous utilisons comme exemple une servo bon marché de Conrad (figure 1). Le fond du boîtier montre quatre vis à retirer d’abord. Ensuite, on peut déposer le fond du boîtier. Retirez alors précautionneusement la partie supérieure. Elle renferme un certain nombre de pignons toujours enclins à prendre leur liberté. Il faut repérer exactement leur position, parce qu’il faudra bientôt leur faire reprendre la même place. Une photo (c’est tellement facile avec les appareils numériques !) avec tous les pignons visibles se révèle une référence précieuse au moment du remontage de la servo. Après cela, la servo prend l’aspect de la figure 2. Retirez l’arbre de sortie. Il est situé sur l’axe du potentiomètre. Cet axe est muni d’un téton qui limite la course mécanique avec deux encoches dans le boîtier. Cette limitation est indésirable, supprimez le téton avec un couteau tranchant (figure 3). La deuxième tâche consiste à extraire le circuit imprimé du boîtier. S’il ne se laisse pas retirer facilement, une poussée délicate sur l’axe du potentiomètre devrait suffire à le convaincre. Il doit rester un pignon de petit diamètre sur l’arbre du moteur. Il arrive qu’il reste collé dans le boîtier ; dans ce cas, il faudra le chahuter un peu pour le retirer, puis le remonter plus tard sur l’arbre. On reconnaîtra facilement le potentiomètre et le moteur. Le potentiomètre est remplacé comme indiqué par deux résistances. Chacune a une broche soudée à l’un des points extrêmes occupés précédemment par le potentiomètre. Les broches restantes sont soudées ensemble et à la connexion du curseur. 1 2 3 4 5 Voilà : la servo est transformée. Si tel est le cas, votre servo ressemble à notre exemplaire de démonstration de la figure 4. Il reste à remonter les éléments de la servo. On veillera à remettre chaque pignon à sa place et à ce que tout tourne rond sans encombre. Ne pas oublier le cas 111 Catapulte pour robot ...ou autre Pascal Liégeois À l’heure des rayons laser, parler de catapulte paraît anachronique mais détrompezvous, ce n’est pas si absurde que ça. Dans de nombreux thèmes de concours de robots, partout sur la planète, il a été question à un moment de ramasser des balles, de différents formats selon les concours, et de les projeter dans un réceptacle, souvent à des distances non négligeables pour nos petits robots. Il est une catégorie de balle, très légère, et connue de tous, la balle de ping pong, qui est beaucoup utilisée comme projectile dans ce type de concours. Outre la collecte de ces balles, leur projection pose souvent le problème de la précision et de la fiabilité. J’apporte dans ces lignes ma solution, qui n’est pas forcément la meilleure du monde, mais qui a fait ses preuves. Cette catapulte se réarme toute seule après chaque tir, et ce en 2 secondes, et elle est réglable en portée par réglage de sa courbe balistique, et ce grâce à un unique potentiomètre. Son électronique est très simple et peu onéreuse, ne nécessitant pas de composant programmable et disposant de sortie pour renseigner le porteur sur l’état de la catapulte. Le schéma L’élément principal du système est un vulgaire servomoteur standard, tel qu’utilisé en modélisme. Ce type d’actionneur est une petite merveille qui contient un moto réducteur asservi en position grâce à un potentiomètre et une électronique adaptée. La commande d’un servomoteur se réalise à l’aide d’un signal à fréquence fixe (50 Hz) dont la largeur de l’impulsion est variable, généralement de 1 à 2 ms. Pour réaliser ce signal, nous utiliserons le célèbre NE555 (IC1) utilisé en astable câblé de telle manière à ce qu’il délivre la fréquence requise. La diode D1, en parallèle sur la résistance R1 déterminant le rapport cyclique, permet de fixer à 18 ms environ la partie négative de l’impulsion dont la largeur de la partie positive est ajustable à l’aide de R2 et P1 ou P2. La sortie du 555 attaque l’entrée du servomoteur. La partie « électromécanique » du schéma est basée sur l’emploi d’un relais 2RT et de deux microswitchs. Le premier, Sw1 a pour fonction de déclencher le réarmement automatique de la catapulte, le second, Sw2 remplit deux fonctions : il donne une information de réarmement de la catapulte et il permet, une fois ce réarmement 112 R Sw1 P 2 1 G L V Sw2 Electro-aimant 070210 - 12 Figure 1. Synoptique fonctionnel de la catapulte. effectué, de repositionner le servomoteur en position de tir. Sur le schéma, Sw2 est représenté actionné, ce qui correspond à la position réarmée de la catapulte. En se conformant à la représentation synoptique figure 1, on comprendra aisément le fonctionnement de la catapulte. Lorsque l’on alimente brièvement l’électroaimant via l’entrée « TIR » qui commande le transistor T1 , le levier L est relâ- Trous oblongs ché, rappelé par le ressort R. Ce levier vient finir sa course sur le galet en caoutchouc G fixé sur la palonnier P du servomoteur. En venant se poser sur ce galet, le projectile est envoyé et le levier actionne aussi Sw1 qui alimente le relais RE1, qui s’auto alimente via son contact re1B et le microswitch Sw2 revenu entre temps à son état repos. Le servomoteur se met en mouvement dans le sens horaire et le galet entraîne le Sw1 Levier section carrée Profilé Electro-aimant Tringlerie Sw2 Ressort Gâchette 070210 - 13 Figure 2. Détails de la réalisation mécanique. elektor - 7-8/2007 levier vers sa position réarmée. En fin de course, le levier s’accroche à la gâchette en même temps que Sw2 est actionné. Celuici supprime alors l’auto-maintien du relais qui, en revenant au repos, commande au servomoteur de revenir en position de tir. L’ajustable P1 permet de régler la position haute du galet et donc la portée du tir comme l’explique la figure 3. P2 permet le réglage du point d’accroche du levier en position réarmé. On peut voir sur la figure 1 deux positions de tir (en pointillés) du levier et aussi les positions correspondantes du galet de caoutchouc (numérotées 1 et 2). Pour affiner la portée de tir, il faut simplement savoir, et c’est logique, qu’en position 1 la balle montera en hauteur, et qu’en position 2 la balle montera moins. Tout dépend de l’utilisation : si l’on veut atteindre un réceptacle au sol avec une balle de ping pong, il vaut mieux prévoir d’y arriver par rebonds successifs, dont d’effectuer un tir plus en hauteur. Par contre, si l’on vise un panier en hauteur, il faudra viser « pile poil dedans », donc laisser le levier remonter plus haut. Une fois les réglages faits, vous serez épatés par la reproductibilité de ce système. Le circuit intégré sera monté sur support à 8 broches. Les ajustables P1 et P2 seront des multitours de préférence, horizontaux ou verticaux. Bien vérifier votre câblage. Alimenter le circuit sans IC1 ni le relais. Vérifier les tensions d’alimentation sur IC1, sur les communs des switchs qui seront reliés au circuit via des fils d’une dizaine de cm. Vérifier la présence du +VCC sur le picot central du connecteur servomoteur. Connecter un +VCC sur l’entrée « TIR » et vérifier que l’électro-aimant est activé. La mécanique, sans être d’une complexité suisse, requiert néanmoins un peu d’attention. Le plan représenté figure 2 détaille les éléments et parties essentielles du système. Le châssis se réalise principalement sur un morceau de profilé alu en L, ou sur un pliage équivalent. Le servomoteur, équipé d’un palonnier d’un diamètre de 35 mm environ, est monté sur la plan vertical de ce profilé. L’axe d’articulation du levier se situe un peu avant celui du servomoteur. J’ai réalisé pour ma part ce levier à l’aide d’un tube carré en laiton de 5 mm de côté. Cette section creuse permet de pouvoir accrocher avec la petite gâchette le levier une fois réarmé. Cette gâchette est actionnée par l’électroaimant au moyen d’une petite tringlerie. L’électroaimant est un modèle 6 V qui sera fixé sur le plan horizontal de notre profilé alu. Le positionnement des switchs est important, notamment celui de Sw2 dont le positionnement est figé une fois le réglage du réarmement optimum. Ce réglage nécessitera d’avoir réalisé l’électronique décrite plus haut. Le montage de Sw2 sur le profilé se fait au Réalisation L’électronique La partie électronique étant relativement simple, elle se réalisera sur un morceau de circuit imprimé à pastilles. Le relais DIL RE1 sera monté sur un support confectionné avec un DIP14 tulipe. Le connecteur du servomoteur sera réalisé avec 3 picots (de 10 mm utiles) de barrette sécable au pas de 2,54 mm. Marquer la broche signal afin d’éviter une erreur de branchement du servomoteur. +4V8...+6V 4k7 R2 1RT Sw1 re1A RE1 Sw2 P2 P1 2RT-6V 1RT 8 7 D2 TIR 1N4148 S1 re1B 10k 6 6V 2 NE555 TR 5 C1 C2 C3 330n 10n 470µ 16V P1, P2 = 4k7 à 5k multitour Figure 3. L’électronique de la catapulte. 7-8/2007 - elektor Servo CV 1 2N2219 K1 3 THR 1N4148 4k7 R4 IC1 OUT Electro-aimant T1 R3 DIS D1 68k R1 4 R 070210 - 11 moyen d’une petite équerre dans laquelle on pratiquera deux trous oblongs afin de permettre le positionnement de ce switch. Pour Sw1, deux trous oblongs en arc de cercle seront pratiqués sur le plan vertical, où est fixé le servomoteur, afin de permettre de réglage de la portée de tir, conjointement à l’effet de l’ajustable P1. Une fois la mécanique entièrement terminée, on mettra le levier en position basse, ce qui détendra le ressort. On s’assurera de la gâchette vienne bien accrocher le levier sur au moins un millimètre. L’opération doit se faire sans forcer, le ressort doit permettre à la gâchette de s’incliner sur la droite avant de s’accrocher dans le tube. Bien vérifier que l’électroaimant est équipé de son ressort de rappel qui peut se trouver entre la bobine et le noyau magnétique, ou dans le puit de la bobine, où plonge le noyau. Le ressort doit pousser légèrement le noyau afin qu’il ressorte de la bobine après sollicitation de cette dernière. Mise au point La mise au point du montage est facile. Ne pas implanter le relais sur son support. Mettre le levier en position réarmé et vérifier que la gâchette le retienne bien en position horizontale. Déclencher la gâchette et s’assurer que le levier remonte bien à l’aide du ressort. Mettre le montage sous tension. Le servomoteur va prendre une position quelconque. À l’aide de l’ajustable P2, amener le servomoteur, via le galet en caoutchouc, à positionner le levier à l’horizontale jusqu’à l’accroche de la gâchette. Ajuster la position de Sw2 afin qu’il soit actionné par la petite équerre solidaire du levier. Si le servomoteur ne fonctionne pas, vérifier le montage, les soudures et le positionnement correct du connecteur du servomoteur. S’assurer que le signal et la masse ne soit pas inversés. Couper l’alimentation. Mettre le relais sur son support. Remettre sous tension. Le servomoteur doit prendre une position quelconque. Ajuster P1 pour amener le galet dans une position de tir quelconque (par exemple 1). Couper l’alimentation et ajuster Sw1 pour qu’il soit actionné par le levier en position haute. Remettre sous tension. La catapulte doit se réarmer seule et le servomoteur doit se remettre en position haute comme défini plus haut. Tout fonctionne. C’est parfait. Sollicitez l’électro-aimant pour vérifier que le tir s’effectue correctement. Vous pouvez maintenant équiper le levier d’un support pour le projectile (balle). À noter que le contact travail de Sw2 étant non utilisé, vous disposez sur ce contact d’un +VCC qui vous signale que la catapulte est réarmée… (070210-I) 113 Commande de moteurs pas à pas Avec un Basic Stamp ou un PIC programmé en Basic +U Moteur (50V max) +5V Stamp / Cubloc C. Tavernier 1k 1k R2 Tableau 1 Numéro de pas 1 2 3 4 Bobine 1 1 1 0 0 Bobine 2 0 0 1 1 Bobine 3 1 0 0 1 Bobine 4 0 1 1 0 Du fait de cette commande impulsionnelle, les moteurs ne tournent pas de manière continue mais avancent en fait à chaque fois d’un pas élémentaire, d’où leur nom ; pas dont la taille peut varier entre 1,8 et 7,5° selon le type de moteur utilisé. Cette avance par pas permet en principe au programme qui commande le moteur de connaître très précisément sa position. Pour que cela reste vrai, il faut toutefois veiller à ne pas dépasser la charge maximum permise par le moteur car, dans ce cas, le moteur pourrait ne pas avancer pour chaque impulsion reçue et ainsi « sauter » des pas. Un autre avantage non négligeable du moteur pas à pas est que, s’il est alimenté mais ne reçoit plus d’impulsions, il reste 2 R4 1k R3 1k P1 9 1 P0 Lorsque l’on souhaite motoriser un robot, deux solutions principales nous sont offertes : le moteur à courant continu, utilisé seul ou au sein d’une servo de radiocommande transformé comme expliqué par ailleurs dans ce même numéro, et le moteur pas à pas. Si le moteur à courant continu est bien adapté à tout ce qui touche à la propulsion, le moteur pas à pas convient mieux lorsqu’il s’agit de réaliser des positionnements précis tels ceux demandés par un bras robot, un capteur mobile dans un plan, etc. Par contre, alors que la commande d’un moteur à courant continu reste relativement simple puisqu’il tourne dès qu’il est alimenté, la commande d’un moteur pas à pas est un peu plus délicate. En effet, ces derniers ne tournent que lorsqu’ils reçoivent des impulsions sur leurs différentes bobines ; impulsions qui doivent être présentées dans un ordre bien précis pour faire tourner le moteur dans un sens ou dans l’autre. 114 R1 Basic Stamp ou Cubloc 3 4 5 6 7 DS I1 O1 I2 I3 I4 I5 I6 O2 IC1 ULN2003 I7 O3 O4 O5 O6 O7 16 L3 L1 M1 15 M 14 13 12 L2 L4 11 10 GND 8 070237 - 11 verrouillé sur la position qu’il a atteinte. On dispose ainsi d’une sorte de frein électrique, toujours sous réserve de ne pas dépasser les possibilités de charge du moteur évoquées ci-dessus bien sûr. À l’heure actuelle, il existe deux familles de moteurs pas à pas : les moteurs unipolaires et les moteurs bipolaires. Les premiers sont les plus simples à commander car il suffit d’appliquer ou non une tension à leurs bobines tandis que, dans les moteurs bipolaires, il faut inverser régulièrement la tension appliquée à ces même bobines ce qui complique quelque peu le schéma à mettre en œuvre. Le tableau ci-joint indique l’ordre dans lequel il faut alimenter les bobines d’un moteur unipolaire pour le faire tourner. Si l’on parcourt les colonnes de ce tableau de 1 vers 4 on fait tourner le moteur dans le sens horaire, alors qu’un parcours inverse change son sens de rotation. Chaque colonne de ce tableau correspond bien sûr à un pas mécanique du moteur, compris rappelons-le entre 1,8 ° et 7,5 ° selon les modèles. De nombreux circuits spécialisés dans la commande de moteurs pas à pas existent sur le marché et diverses solutions vous ‘ Commande d’un moteur pas à pas unipolaire ‘ Le nombre de pas est placé dans w1 ‘ Le sens de rotation est défini par b0 ‘ Définition des variables Symbol Symbol Symbol Symbol direction = b0 pas = w1 index = w2 delai = b6 ‘ Initialisation dirs = %00000011 pins = %00000001 b1 = %00000001 ‘ Le programme de l’application doit initialiser ‘ pas, direction et délai avec les valeurs désirées ici if direction = 0 then paspas b1 = b1 ^ %00000011 paspas: for index = 1 to pas pins = pins ^ b1 b1 = b1 ^ %00000011 pause delai next elektor - 7-8/2007 sont proposées dans ce même numéro d’Elektor mais, si votre robot utilise un Basic Stamp ou bien encore un microcontrôleur PIC programmé en Basic, il existe une solution extrêmement simple et peu coûteuse pour lui faire commander de tels moteurs. Il suffit en effet de faire appel à un banal ULN2003 ou ULN2803 qui est, rappelons-le, un septuple (ULN2003) ou octuple (ULN2803) Darlington de puissance intégré, utilisé habituellement pour commander des bobines de relais. Le logiciel nécessaire et quant à lui fort simple grâce à l’utilisation de deux astuces suggérées par Parallax (fabricant du Basic Stamp). La première consiste à remarquer que l’état des bobines 1 et 2 d’une part et 3 et 4 d’autre part est toujours contraire comme indiqué dans le tableau ci-joint. De ce fait, on peut commander le moteur avec seulement deux sorties du Basic Stamp comme le montre le schéma fort simple que nous vous proposons. Les bobines 1 et 3 sont commandées par deux lignes de port du Basic Stamp après amplification par l’ULN2003 ou 2803. Les bobines 2 et 4 quant à elles reçoivent ces signaux après inversion réalisée grâce aux amplificateurs libres contenus dans l’ULN2003 (ou 2803 qui est surabondant mais parfaitement utilisable). Notez 7-8/2007 - elektor la présence des deux résistances de tirage (pullup) indispensables de 1 kΩ, connectées en sor ties des amplificateurs contenus dans l’ULN2003 ou 2803 puisque ce dernier ne comprend en fait que des Darlingtons à collecteur ouvert. La deuxième astuce proposée par Parallax consiste à calculer directement la séquence des signaux à appliquer sur les sorties P0 et P1 du Basic Stamp plutôt que d’extraire ces données d’une table. Il suffit en effet pour cela d’un simple OU exclusif logique comme le montre le listing. Ce court exemple de code peut être inclus tel quel dans une application plus complète. Comme le montre son analyse, il fait tourner le moteur pas à pas connecté comme indiqué sur la figure du nombre de pas préalablement placé dans w1. Le sens de la rotation est quant à lui déterminé par le contenu de b0. Si b0 est différent de 0 le moteur tourne dans un sens ; sinon il tourne dans l’autre. Ce programme permet également de définir le délai d’attente entre chaque pas au moyen de la donnée utilisée dans l’instruction PAUSE. La seule précaution à prendre est de ne pas trop réduire ce délai compte tenu du moteur utilisé et de la charge qu’il actionne. Afin d’être le plus général possible, notez que cet exemple de code a été écrit en langage Basic Stamp I. Il est donc parfaitement transposable, sans aucune restriction, sur tout autre modèle de Basic Stamp, ainsi bien sûr que sur n’importe quel PIC programmé en Basic puisque la majorité des compilateurs Basic pour PIC est compatible du langage du Basic Stamp I. Il est également transposable sans aucune difficulté à un PicBasic ou à un Cubloc de Comfile Technology. (070237-I) 115 Antenne 2,4 GHz pour véhicules robotisés Ragnar Jensen 4 Les inconditionnels de robotique sont également de farouches partisants d’équipement radio trafiquant sur la bande sans licence des 2,4 GHz dite bande ISM (Industriel/Scientifique/Médical, pour une fois que cela colle aussi en français); laissez un peu divaguer votre imagination et pensez à ce que vous pourriez faire avec Bluetooth, des caméscopes sans fils, des télécommandes et même un point d’accès ou client WLAN monté sur un véhicule robotisé ! L’un des hics est qu’une application-maison de ce genre requiert, normalement, une antenne qui se doit d’être (1) omnidirectionnelle, (2) présentant un minimum de flexibilité en raison des risques de dommages qu’elle encourt en court d’utilisation et (3) de coût faible2. L’antenne présentée ici remplit avec brio ce « cahier à 3 charges ». Liste des ingrédients : un petit morceau de câble coaxial de 50 Ω tel que du RG58(C)U doté d’un connecteur BNC serti (« empruntez » un câble auprès du département IT ?) ; un couteau de poche bien affûté; un outil pointu (une aiguille de bonne section ou un tournevis d’horloger) ; une règle; un fer à souder (optionnel) ; un pistolet thermique à colle ; un rien de bon sens et de l’ordre de 30 minutes de votre temps libre. En vous servant de l’outil pointu démêlez soigneusement les filaments constituant la tresse. 5 C’est parti. 1 Le matériel de base : un petit morceau de câble coaxial 50 Ω. 2 Jusqu’à ce que le blindage « détressé » ressemble un peu à cela... 6 Coupez quelque 40 mm de la gaine d’isolation extérieure. Vous verrez apparaître la tresse métallique servant de blindage du câble. 3 Retroussez la tresse cuivrée pour voir apparaître la gaine d’isolation interne. 116 Répartissez les fils en 4 ensembles de taille similaire et espacés régulièrement (ah des tresses !) elektor - 7-8/2007 7 8 Repliez-les maintenant à 45 degrés par rapport au câble. Cet angle donne à l’antenne son impédance de 50 Ω environ. Recouvrez les faisceaux de fils de soudure. Bien que cette étape soit optionnelle, elle permet aux éléments constituant l’antenne de mieux garder leur forme et évite qu’ils ne s’entremêlent. 9 10 Soudure terminée ! Appliquez quelques gouttes de thermocolle... 12 11 ... ceci permettra à l’ensemble de gader la forme correcte. Coupez les rayons et l’élément rayonnant (radiator) à une longueur de 30 mm (exact, cela correspond exactement au 1/4 de lambda (1/4λ). 13 Nous avons terminé ! (070142-I) (reproduit avec modifications et extensions du numéro de téléphone 17 du magazine CQ-TV). 7-8/2007 - elektor 117 Récepteur pour télécommandes RC5 D30 1N4148 +5V IC4 +8V 78L05 R2 RESET CLK IC1.A 14 1 7 R 6 2 7 R 1D SRG4 11 12 13 6 9 C2 C3 100n 100n R 1D 10 3 4 SRG4 5 2 SRG4 11 12 13 10 3 4 5 BC557B D2 D3 D4 D6 D7 D8 D9 D10 D11 D12 D13 IC8.D R16 D14 11 R19 D15 R21 & 1k R18 1k R17 1k R15 1k R14 1k R13 1k R12 1k R11 1k 1k D5 R10 1k R9 1k R8 1k R7 1k 10k R5 1k R6 1k R4 1k R20 D1 2 IC2.A 14 1 12 D16 100k SRG4 10k 1 TSOP1736 15 T1 R3 3 IC2.B 9 R 1D C1/ 1D 2 IC3 1 15 100n 220n 1000µ IC1.B C1/ C1 C1/ C6 C1/ C7 DATA 47k 100 Ω R1 C4 C5 47µ 470µ 13 3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 IC8.C 9 DATA & 8 10 +5V 1 IC6.A 3 C R 4 2 D17 D18 39k 180k R27 P1 2 0 11 1 2 CT=0 3 IC7 IC5 CT OUT 6 THR 10k CTR12 8 7555 TR 4 16 R DIS 3 18kHz 10 + 4 5 6 7 8 CV 5 C9 C10 150p 100n IC8.A 1 2 1 4040 9 10 11 & 3 9 7 6 5 IC9.C 5 D19 3 D20 2 D21 9 11 4 13 D22 12 D23 D S C R 118 & 8 8 IC1, IC2 = CD4015 IC6 = CD4013 IC8, IC9 = CD4093 D17...D29 = 1N4148 8 9 13 IC9.B IC6.B 12 4 10 D26 14 15 10 8 6 & IC9.A 3 & 5 6 IC9.D 11 & 12 13 +5V 1 2 D27 D24 R29 1 D25 8 Reset 02 Les microcontrôleurs actuels peuvent décoder « comme en se jouant » les signaux des télécommandes RC5. Les composants dédiés de décodage RC5 sont passés de mode. Pas tout à fait ! L’évaluation des signaux RC5 par des composants usuels a encore son mot à dire. Ils jouent tout d’abord un rôle didactique : comprendre le codage. Ils s’adaptent aussi facilement à des besoins particuliers. Le circuit était initialement conçu dans le seul but d’afficher les adresses et commandes qu’une « télécommande universelle » exécute en réponse à la pression d’un bouton. Il est toutefois aussi en mesure de télécommander tous les appareils domestiques imaginables, comme un amplificateur audio, par l’entremise des diverses 16 IC2 IC8.B & Reset 01 Thomas Möll 16 IC1 100p 100k 4 7 47µ C11 R28 R26 C8 R30 D28 télécommandes, ornements de tout foyer. Il suffit de choisir une adresse non encore attribuée et de définir les commandes propres à l’appareil. Le récepteur IR TSOP 1736 inverse la suite de bits du signal émis. T1 l’inverse une seconde fois et la remet donc l’état initial. La LED de la liaison collecteur Data indique la réception. Le niveau de la première moitié du bit de départ est bas (0 V). Le saut au niveau haut (5 V) au début de la seconde moitié du bit de départ l’identifie comme haut et active la bascule IC6.A. Sa sortie inversée est basse et permet au diviseur CD4040 de diviser le signal rectangulaire 18 kHz produit par un bon vieux NE555. Une impulsion de niveau bas est engendrée simultanément par l’étage différentiateur C11/R23. Celle-ci, transformée en une impulsion de niveau haut Reset_02 100k S R25 100k D 1M 33k 6 5 R24 100k R23 100k R22 14 14 14 IC6 IC8 IC9 7 7 7 D29 070089 - 11 par le trigger de Schmitt inverseur IC8.A, efface tout le contenu des registres à décalage CD4015 (IC1/IC2). La sortie Q4 (broche 5) du CD4040 se trouve à 1 125 Hz, ce qui correspond à une période de 888,8 µs et une largeur d’impulsion de 444,4 µs. La sortie Q5 (broche 3) est inversée par la porte trigger de Schmitt IC8.B dont la sortie se trouve donc à l’état haut dès le début. Le circuit ET formé par la matrice de diodes positionne exactement une entrée de IC8.C à l’état haut lors du premier accroissement de Q4. La sortie inversée de la bascule IC6.B se trouve aussi à l’état haut. Une impulsion de synchronisation de niveau haut (inversée par IC8.D) est donc envoyée au registre à décalage CD4015 pour qu’il reprenne l’information instantanée du signal de données. Ce processus se répète ensuite toutes les 1,333 µs elektor - 7-8/2007 donc – et cela constitue le véritable tour de force du circuit – toujours aux ¾ des bits envoyés par un émetteur. Le niveau bas ou haut de chaque bit est donc détecté avec précision. Conformément à leur définition, les informations RC5 se terminent après 14 bits. Une matrice de diodes ET aux sorties de CD4040 active la bascule IC6.B dont la sortie passe à l’état bas et bloque le signal d’horloge destiné au registre à décalage. Le protocole d’envoi se termine après 64 bits. Q12 (broche 1) du diviseur CD4040 passe brusquement à l’état haut au début du 64ème bit. Reset_01 réinitialise la bascule IC6.A, bloquant ainsi le compteur. Les informations aux sorties ne changent pas jusqu’à ce qu’une suite de bits de l’émetteur active la bascule IC6.A, ce sur quoi les mémoires sont temporairement vidées et la détection est rétablie. L’impulsion d’arrêt de la broche 11 du CD4040 permet de reprendre les informations pour évaluation. Il est bon de munir la sortie du 555 d’une broche de test lors du montage du circuit. Elle permettra de toujours ajuster avec précision le signal d’horloge de18 kHz – pour le plus grand bien de la séquence temporelle. (070089-I) zBot: liaison sans fil Jens Altenburg Il existe de nombreux modules de communication sans fil, tous utilisables librement dans les bandes de fréquences ISM (Industriel, Scientifique, Médical), telles que 433 MHz, 866 MHz et plus récemment 2,4 GHz. On en trouve d’abordables avec de faibles débits, et d’autres excellents à grande vitesse. « Combien (me coûtera la chose) ? » est la question la plus fréquemment posée si vous cherchez un module radio. Les modules à faible débit sans intelligence sont bon marché ; les rapides et intelligents passablement chers. Simple, mais ça ne nous aide guère. La société CT-Video GmbH (www.ctvideo.com) commercialise un module spécial avec un haut débit numérique, sans intelligence, à un prix raisonnable. Le module est basé sur un émetteur-récepteur complètement intégré avec une interface numérique. Il est utilisé avec succès dans le zBOT [1]. Il s’agit d’une petite platine complètement assemblée et testée. Elle comporte la section radio complète. Le module travaille dans la bande ISM 433 MHz, avec une puissance de 10 mW à l’émission et une sensibilité de –108 dBm côté réception. Pour la mise en œuvre du module dans vos propres réalisations, un module logiciel est disponible aussi. Ce dernier ne consomme qu’une petite parties des ressources du microcontrôleur : quelques entrées/sorties à usage général (GPIO) et un canal UART. L’UART sera configuré pour un débit de 76,8 kbits/ s. Ce débit doit être précis, faute de quoi le comportement sera celui d’un récepteur à faible sensibilité. Le module logiciel de communication radio s’appelle rf433.c. (070173-I) [1] Le document complet intitulé Zbot – the Robot Experimental Platform (en anglais) est disponible au téléchargement gratuit sur le site Elektor. Le fichier s’appelle EPS070172-11.zip. Voix de robot Pascal Choquet Que serait le film 2001 Odyssée de l’espace sans la voix à la fois douce et inquiétante de HAL ? C’est précisément pour cela que nos robots ont besoin d’une voix. Un module à construire soi-même va mettre fin au mutisme de nos machines. Si vous imaginez un générateur de parole avec une foule de circuits intégrés, vous vous trompez ! On s’en tire avec un circuit unique. Le circuit intégré ISD2500 de Winbond, dans la famille baptisée ChipCorder, offre presque tout ce qui est nécessaire. 7-8/2007 - elektor Cette puce est capable d’enregistrer et de restituer plusieurs signaux audio différents. Elle contient un préampli de micro pour les capsules à électret bon marché, un amplificateur de sortie pour le haut-parleur, mémoire, oscillateur, convertisseurs A/N et N/A, de même qu’une commande automatique de gain (CAG). Il existe quatre versions : les derniers chiffres de la référence indiquent la capacité de la mémoire en secondes (2560, 2575, 2590 et 25120). La taille réelle de la mémoire est la même, seule change la fréquence d’échantillonnage. Ainsi la version 60 offre la meilleure qualité audio. Comme le circuit intégré n’a besoin pour la restitution que de deux condensateurs de découplage (voir la figure 2), il est logique de prévoir un circuit d’enregistrement séparé (figure 1) et d’équiper chaque platine d’un support pour le circuit intégré. Une fois l’enregistrement terminé, le circuit intégré peut être retiré et enfiché dans l’électronique du robot. L’enregistrement se déroule comme suit : Le commutateur S3 doit se trouver comme celui de la figure 1 dans la position enregistrement. Une action sur S2 lance le pre- 119 IC2 +U S4 +5V 7805 D1 C9 C8 C11 10µ 25V 100n 100n 10µ 16V R6 220 Ω C10 +5V D2 C4 100n 16 22 VCCA 23 24 27 S2 S3 R2 10k S1 20 PD 22µ 16V Play/Rec Next 100n 21 IC1 CE PD 17 A7 A6 P/R A5 ANAIN A4 A2 ANAOUT 18 11 19 470k A1 MIC SP+ 10 9 8 7 6 5 4 3 2 1 14 ISD2560 100n 10k A8 A0 C2 R5 28 VCCD A9 100n R3 100n A3 C1 MIC1 OVF C3 C7 C5 R4 220 Ω R1 1k R7 4k7 R9 4k7 R8 4k7 mier enregistrement. Une deuxième pression y met fin, une troisième démarre le deuxième enregistrement. On peut continuer jusqu’à ce que la mémoire interne soit pleine (état signalé par la LED D2) ou bien qu’on n’ait plus rien à dire. Dans ce dernier cas, on appuie une fois sur S1 et le circuit se remet à zéro. On peut alors passer en restitution avec S3 et écouter les enregistrements en séquence avec S2. Si quelques chose se passe mal, on peut remettre à zéro avec S1, basculer S3 et recommencer depuis le début. Il est conseillé de n’enregistrer que des mots isolés qu’on pourra restituer à la suite pour énoncer un texte. Donc au lieu d’enregistrer « Obstacle devant » etc. on enregistrera « Obstacle », « devant », « à gauche », « à droite » etc. sans oublier les chiffres « un », « deux », « virgule »... Lors de l’enregistrement, le CI place après chaque message un drapeau EOM (End Of Message) qui permet lors de la restitution un saut très rapide (jusqu’à 800 fois la vitesse normale) au message suivant. Le circuit de restitution minimal de la figure 2 se pilote par quatre lignes du microcontrôleur pour les signaux : A0, PD, CE et EOM. Le circuit intégré est activé en mode restitution par PD=0. Si c’est le premier message qui doit être restitué, CE reçoit une courte impulsion au niveau bas. La restitution se déroule avec A0=0. Si A0=1, on a le « bobinage rapide ». Si on veut entendre le troisième message après le premier, on envoie une impulsion sur CE avec AO=1 puis on attend le drapeau EOM. Quand EOM passe à zéro, on peut écouter le troisième message avec A0=0 et une impulsion sur CE. Comme les impulsions durent moins de 10 ms, le recours aux interruptions est recommandé. C6 MICREF SP– AUX IN EOM LS1 16 Ω 15 25 AGC VSSA XCLK VSSD 13 26 12 4µ7 16V 070313 - 11 Un exemple de code source en C pour le microcontrôleur à 16 bits MSP430 de Texas Instruments, par l’auteur, est disponible sous la référence EPS070313-1.zip sur le site Elektor (www.elektor.fr). (070313-I) Lien : www.winbond-usa.com/mambo/content/ view/153/283/ Télécommande radio pour PDA et Smartphones Peter Zirngibl Sous la désignation de AVR Blue Remote, l’auteur présente sur son site Web une télécommande radio Bluetooth munie de 6 relais de sortie et de 6 entrées d’acquittement. Elle est accompagnée du logiciel avrblueremote.exe pour téléphone intelligent et du logiciel avrblueremote.hex pour microcontrôleur. Elle permet entre 120 autres d’ouvrir la porte d’un garage à faible distance ou de réaliser un télérupteur de l’éclairage d’une portée d’environ 10 m. L’utilisation du logiciel dans des buts non commerciaux est gratuite. L’émetteur peut être basé sur un téléphone intelligent équipé du système d’exploitation Windows Mobile 5.0. Le récepteur, qui fait partie d’un circuit dépourvu de complications, est un module Bluetooth (Blue Nice Com III) fabriqué par Amber Wireless. De la taille d’un timbre-poste, il inclut une antenne puce. Le module est basé sur un LMX9820A de National Semiconductor. Il transfert le télégramme radio décodé à un microcontrôleur AVR ATMega8L d’Atmel par son interface UART RX/TX. L’étage de puissance octuple ULN2803, connecté aux sorties du contrôleur, fournit assez de « jus » pour commuter sans difficultés des elektor - 7-8/2007 IC4 +3V 4 3 6 5 7 1 FB3 VCC AVCC PD3(INT1) PD4(XCK/TO) SCK 19 MISO 18 MOSI 17 16 FB4 15 FB5 14 FB6 IC1 PB5(SCK) PC0(ADC0) PB4(MISO) PC1(ADC1) PB3(MOSI/OC2) PC2(ADC2) PB2(SS/OC1B) PC3(ADC3) PB1(OC1A) PC4(ADC4/SDA) PB0(ICP) PC5(ADC5/SCL) PD7(AIN1) 4 11 12 ATmega8L PD2(INT0) PD0(RXD) PD6(AIN0) PD1(TXD) XTAL1 8 JP1 AREF PD5(T1) GND S1 R2 R3 9 JP2 C4 X1 5 D3 6 23 1 24 2 25 3 26 4 27 5 28 6 13 7 8 21 2 RE1 1N4148 +VS I1 I4 I6 I7 I8 VEE OUT4 14 O5 OUT5 13 O6 OUT6 12 O7 +3V OUT3 15 O4 ULN2803 OUT2 16 O3 IC2 OUT1 17 O2 I3 I5 18 O1 I2 11 O8 Reset Bluetooth 9 3 D4 22 9 R5 C5 10 11 12 13 22p D6 10 XTAL2 AGND 10 R1 D2 220 Ω FB1 10µ D1 20 PC6(RESET) ISP FB2 22p 14 15 7,3728MHz R6 220 Ω La topologie du circuit sur la carte pose quelques défis. Pour obtenir la meilleure portée possible, il faut exclure toute surface de masse, piste et tout composant ou autre partie métallique du voisinage de l’antenne (8 mm). Le mode d’emploi du module contient des détails supplémentaires. L’interface ISP permet de programmer le contrôleur. Il faut bien entendu que le brochage du connecteur soit compatible avec 1 C1 10µ 1k K1 2 C2 100n 220 Ω R4 C3 1k VCC +3V +5V LP2950 3V 4k7 relais, même puissants. Un régulateur de tension 3 V (LP29503V) et un connecteur de programmation ISP font aussi partie des composants embarqués. Les 4 LED du circuit indiquent l’état de la connexion : LED1 signale la réception correcte des données dans le microcontrôleur, LED2 un dépassement de délai (timeout). Les LED du module Bluetooth indiquent l’état de la liaison (LED3) et le mode « Émission » (LED4). RX 16 GND RESET ENV1 CTS ENV0 RTS LSTAT_0 TX LSTAT_1 RX Host_wu ISEL2 TX_LED ISEL1 VDD_DIGI VCC 8 7 R7 1k 6 +3V 5 4 3 2 1 IC3 Blue Nice Com III D5 TX 070126 - 11 qu’il puisse tourner, installer d’abord le Compact Framework 2.0 approprié (disponible à partir du centre de téléchargement Microsoft). • Windows Mobile 5.0 Pocket PC et Smartphone NETCFv2. wm.armv4i.cab • Pocket PC 2003 et 2003 SE NETCFv2.ppc. armv4.cab • Windows XP netcfsetupv2.msi le programmateur ISP utilisé. On trouvera des circuits applicables sur Internet et, bien entendu, dans Elektor. L’entreprise Atmel fournit aussi des conseils sur son site Web. Les sorties de rétroaction (feedback) peuvent être raccordées (ou non) selon ses préférences perso. Le matériel est assemblé. C’est au tour du logiciel du téléphone intelligent. Pour 7-8/2007 - elektor Copier ensuite avrblueremote.exe sur la plate-forme choisie, par exemple la carte SD du téléphone intelligent. Puis effectuer une opération (unique) entre les 2 appareils Bluetooth, le téléphone intelligent et la carte de réception : le jumelage (pairing). Le moment est venu de lancer le programme et de mettre au point le port COM par la flèche vers le haut ou vers le bas. Le carré central ouvre l’interface de façon à établir une connexion avec le récepteur. La croix directionnelle permet alors de commuter les sorties de la carte réceptrice. La sixième sortie est déclenchée par la touche espace. Les symboles de 6 LED d’acquittement sont affichés au haut de l’écran. Se trouve-t-on hors de portée du récepteur ? Les LED virtuelles s’éteignent et une barre de timeout est affichée. C’est le moment d’agir avec promptitude : faute de la réception d’un signal correct, la fin du délai signifie aussi la fermeture de l’interface. (070126-I) Liens Internet Site Web de l’auteur (allemand) : www.clipswitch.de/avrblueremote.html Infos concernant le module Bluetooth : www.amber-wireless.de/en/produkte/ bluetooth/default.php?fnum=115287704928 Manuel du module Bluetooth (anglais) : www.amber-wireless.de/pdf/ OPC1601_MA.pdf Fiche de caractéristiques du LMX9820 : www.national.com/pf/LM/LMX9820A.html Programmateur AVR : www.atmel.com/dyn/products/ tools_card.asp?tool_id=2726 AVR Studio : www.atmel.com/dyn/products/ tools_card.asp?tool_id=2725 121 Détecteur d’impulsion supprimée 1 VCC R 10k R1 8 7 4 R DIS IC1 2 6 T1 OUT TR 3 LM555CN THR la figure 2. Il faut, si l’on veut garantir un fonctionnement correct du détecteur, respecter un certain nombre de conditions quant à la chronologie du signal. Si l’on prend comme référence le chronodiagramme de la figure 3, les valeurs des composants R et C du circuit se calculent de la façon suivante : τ = 1.1 R C 2 Entrée Sortie 3 1 5 BC558 070099 - 11 Hesam Moshiri Un détecteur signalant les impulsions manquantes est, en robotique, l’un des circuits les plus importants qui soient. En cas d’application d’impulsions au circuit représenté en figure 1, le signal de sortie restera de façon continue au niveau haut (c’est-àdire pratiquement au niveau de VCC) comme l’illustre le chronodiagramme de N Entrée CV C 070099 - 12 M en tenant compte des restrictions suivantes : 1kΩ < R < 1MΩ et M < τ < N En cas d’application d’un signal correct à l’entrée (figure 2), le circuit est déclenché par une autre impulsion avant que n’expire la constante de temps (τ). Ceci explique que le signal de sortie reste au niveau Haut. En cas d’absence d’une impulsion voire plus, suite, par exemple, à un problème, un coup porté à la tête du robot Mathilda ou tout simplement suite à une mauvaise réception au niveau de canal de télécom- Sortie Impulsion effacée 070099 - 13 mandée, le signal de sortie passera brièvement au niveau Bas. Le signal s’avertissement résultant peut être détecté par une électronique additionnelle, un microcontrôleur par exemple ou tout autre dispositif de détection qui réagit à une interruption du flux d’impulsions. Si les choses devaient s’aggraver encore, il ne serait pas mauvais de s’assurer que George (le pilote automatique) se trouve bien en fonction ! (070099-I) Communication IR par UART Dominik Tewiele 122 PC5(ADC5/SCL) PC3(ADC3) PC2(ADC2) IC PD0(RXD) PD1(TXD) PD2(INT0) PD3(INT1) PD4(XCK/TO) PD5(T1) PD6(AIN0) PD7(AIN1) ATmega8 PB0(ICP) PB1(OC1A) PB2(SS/OC1B) PB3(MOSI/OC2) PB4(MISO) PB5(SCK) 28 26 C5 25 10µ 2 3 4 16V R3 T2 10k 5 BC448 6 R1 11 100Ω La lumière IR est bien moins onéreuse que des modules radio dans le cas où des robots communiquent entre eux ou avec des stations de base à moyenne distance (de 5 à 10 m). La modulation nécessaire pour supprimer la partie IR présente dans la lumière du jour et le protocole reposent sur des composants et des normes éprouvés. La majorité des contrôleurs modernes disposent d’une ou de plusieurs interfaces sérielles asynchrones (UART). Cellesci semblent destinées à être munies d’un émetteur et d’un récepteur IR. Le TSOP17xx, par exemple, constitue un récepteur adéquat. Les 2 caractères xx indiquent la fréquence de modulation en kHz. On peut raccorder directement sa sortie à la broche RxD du contrôleur. La sortie à collecteur ouvert permet de raccorder plusieurs modules de réception en parallèle pour étendre la zone de réception. L’émetteur ne comporte qu’une diode IR et quelques composants discrets. La modulation fait appel à un tempori- VCC 12 13 D1 14 15 16 17 R4 T1 10k BC447 18 19 070170 - 11 sateur du contrôleur – ou à un NE555. Dans l’ATmega8 de l’exemple, Timer1 est piloté de sorte que PB2 permette d’ajuster la fréquence et la largeur des impulsions en faisant appel aux registres de comparaison de sortie OCR1A et OCR1B. La modulation basée sur la fréquence choisie est effectuée par le transistor NPN. Ici aussi, plusieurs LED IR raccordées en parallèle permettent d’étendre la zone d’émission et l’angle de rayonnement. La portée et le courant maximum admissible des LED IR en régime impulsionnel déterminent la valeur de leur résistance de protection. Un coup d’œil à la fiche technique de la diode s’impose. On en déduira aussi la largeur d’impulsion ajustable par logiciel. Le nombre maximum de bauds de l’UART dépend du récepteur choisi. Un TSOP17xx permet d’atteindre environ 1 200 bauds. Cela devrait largement suffire pour des commandes simples. Besoin d’une liaison bidirectionnelle ? Il suffit d’équiper les 2 côtés de circuits émission/réception. Gardons toutefois la tête froide. Des réflexions peuvent partiellement entraver l’établissement d’une liaison en duplex intégral. (070170-I) elektor - 7-8/2007 Télécommande IR à R8C G. van Zeijts +5V R8C/13 max. 15mA 1 2 3 4 5 6 7 8 1 K2 RXD1 2 RESET 4 1. Le bit 7 du port P0 indique s’il s’agit d’impulsions RC5 ou Sony. Bit 7 au niveau « Haut » = RC5 et bit+7 au niveau « Bas » = Sony. 2. On trouve, sur le port 0 (sortie) le code de la dernière touche enfoncée. On utilise à cet effet les bits 0 à 6, le bit 7 servant, nous le disions à dire s’il s’agit de RC5 ou de Sony. 3. Le port P1 (sortie) est utilisé pour une mise directe des 8 bits au niveau haut ou bas par le biais des touches 2 à 9 de la télécommande. Une première action sur l’une de ces touches fait passer la sortie au niveau haut. Une nouvelle action sur cette touche fait passer la sortie au niveau bas. Ces 8 touches permet donc une commande directe (à distance) de 8 processus différents. L’état des différents bits du port P1 n’est pas influencé par une action sur les autres touches de la télécommande. La touche « 1 » permet de mettre au niveau haut tous les 8 bits de P1. Les touches « 0 » et « Arrêt » permettent de met- 7-8/2007 - elektor 30 P0.2 29 P0.3 5 VSS 6 28 MODE 27 P0.4 7 8 9 10 VCC P0.5 P1.7 P0.6 P1.6 P0.7 26 25 24 23 P1.5 11 P1.4 12 P1.2 14 21 20 P3.1 19 P1.1 15 16 P1.0 P3.2 P4.5 P3.3 TSOP1736 22 P3.0 P1.3 13 18 17 1k T1 8x 1k BC638 1k +5V 10k Le montage a été conçu de manière à pouvoir être utilisé tant avec une télécommande de Philips (RC5) que de Sont. Le système fournit sur l’un des ports de sortie d’un code à 7 bits, permettant d’« informer » un ordinateur ou un autre microcontrôleur de la touche activée sur la télécommande. Il est possible de piloter les 8 bits d’un autre port de sortie à l’aide des touches 2 à 9 de la télécommande. On peut ainsi commander/activer directement à distance un maximum de 8 processus. Le programme, écrit en C sous HEW, remplit les fonctions décrites ci-après. Un cavalier, JP1, permet le choix entre l’analyse d’impulsions Philips (RC5) lorsqu’il est ouvert (non implanté) ou de SOny (cavalier implanté). 31 P0.1 3 K1 8x 1k 32 P0.0 JP1 2k2 Elektor a publié, ces dernières années, différents articles dans lesquels des microcontrôleurs captaient et analysaient les impulsions émises par une télécommande IR. Cette possibilité n’existait malheureusement pas, jusqu’à présent, pour l’un des microcontrôleurs auquel Elektor a consacré le plus grand nombre d’articles ces dernières années, à savoir le R8C, ce qui a amené l’auteur à s’y mettre et, après avoir trouvé une solution, à la proposer à d’autres lecteurs intéressés. 2 3 vert 1 rouge TSOP1736 070191 - 11 tre ces mêmes bits au niveau bas. 8 LED rendent l’état momentané des 8 bits; elles drainent de l’ordre de 3 mA du port P1. Il faut donc limiter, pour des fonctions plus « lourdes », à 17 mA au maximum le courant drainé par le biais de l’embase K2 (pour des raisons de sécurité, on limitera cette valeur à 15 mA seulement). 4. Si l’on a paramétré le système (JP1 ouvert) pour la réception d’impulsions RC5, mais que le microcontrôleur reçoit des impulsions en provenance d’une télécommande « non-RC5 » (et inversement), il fournit un bref signal d’alarme : • La LED rouge prise sur le port P3 0 clignote brièvement • Les sorties 0 à 6 du port P0 passent à « 0 » (= le code n’est pas standard) • Le bit 7 du port P0 donne un signal clignotant • On a un bref signal acoustique sur la broche 16 (bit P4 5) Le schéma ne requiert qu’une description succincte : Le détecteur IR (infrarouge), le TSOP1736, est connecté directement à l’entrée, la sor- tie étant forcée au niveau haut par le biais d’une résistance de 2kΩ2. Une seconde entrée sert à l’interrogation du cavalier JP1 (choix entre RC5 et Sony). La sortie P0 sert à reproduire sous forme hexadécimale le code RC5/Sony. Cette sortie peut de ce fait attaquer directement, au travers d’une résistance de 1 kΩ, des entrées d’un autre ordinateur ou microcontrôleur, le but de l’opération étant que le dit ordinateur/microcontrôleur réagisse au code qu’il reçoit. L’utilisateur pourra mettre la sortie P1 à contribution pour piloter un « dispositif » numérique quelconque par le biais d’un circuit d’interfaçage de son cru (K2 peut être chargé à concurrence de 15 mA environ). Des LED à faible consommation visualisent l’état actuel des 8 bits du port P1. La LED verte prise à la broche 20 sert d’indicateur « marche/arrêt » du circuit. Rien n’interdit, en ce qui concerne l’alarme acoustique reliée au port P4 5, d’utiliser un résonateur piézo-électrique (zoomer), (ce port pouvant être chargé à concurrence de 8 mA). (070191-I) 123 Buggy Formule Flowcode Un robot pas cher pour aller plus loin… que l’école Bart Huyskens, Institut St Joseph (Schoten, Belgique) Venu d’une école belge, ce buggy robot de 125 € a pour vocation d’inverser la tendance actuelle, de rendre le goût de l’étude de l’électronique et de la technique en Europe et qui sait, plus loin aussi. Parmi bien d’autres, dans la fraternité des professeurs d’ingénierie, l’auteur s’aperçoit de plus en plus que l’électronique, comme la plupart des activités orientées vers la science et la technologie, n’a plus la cote auprès des jeunes. Pour des gens qui ont grandi dans la fascination envers la technique, le constat est douloureux et combien paradoxal quand on voit tous ces jeunes séduits par quantité d’ustensiles électroniques comme les i-pods, les caméras numériques ou les téléphones mobiles. On ne sait trop pour quelles raisons l’école rate l’occasion de déployer les efforts voulus pour surfer sur cet intérêt et attirer les jeunes vers les carrières techniques. De longues et intenses réflexions ont été consacrées à trouver des remèdes et d’abord à identifier les difficultés réelles, sans perdre de vue le fait que l’électronique a des aspects mathématiques, que certaines matières sont difficiles à comprendre et peuvent présenter une image ennuyeuse. On a essayé toutes sortes d’idées, certaines ont fourni de bons résultats, mais pas suffisamment. Il y a une exception qui sort du lot : Lego. Le robot NXT de Lego a l’air cool, il l’est réellement et amusant à utiliser. Mais il coûte cher, n’apprend pas vraiment grand-chose sur l’électronique, on ne peut pas aller lui jeter un oeil « sous le capot » ni l’utiliser comme plateforme pour étudier plus que des programmes simples. Il y a environ six mois, lors d’une conversation avec des ingénieurs de Matrix Multimedia en Angleterre, a surgi une inspiration qui pouvait évoluer pour résoudre la question : un robot buggy à programmer soi-même qui offrirait davantage de fonctions que celui de Lego, qui présenterait une architecture ouverte et servirait à toute une gamme d’activités dans l’enseignement et l’étude de l’électronique et de la technique. Depuis, nous avons travaillé ferme pour donner vie à cette idée et nous avons baptisé le projet « Formula Flowcode ». Formule Flowcode est une solution robotique complète, tant maté- 19 2 5 4 17 Bouton de remise à zéro 4. LED d’indication de 16 Connecteur de l’alimentation externe 5V 13 6 7 Connecteur USB 3. 5. 1 8 µC PIC18F4455 2. programmation 18 3 1. 6. Interrupteur de mise sous tension 7. Châssis plastique avec compartiment à piles, moteurs, réducteurs et deux roues 8. 12 14 Circuit intégré de commande du moteur : un L293D 9. Microphone et amplificateur BF 10. Bouton poussoir configurable 9 11. Capteur de proximité - droite 10 12. Capteur de proximité - centre 11 13. Capteur de proximité - gauche 14. Capteur de lumière 15 15. Module de suivi de ligne 16. 8 LEDs configurables 17. Volume 18. HP 19. Connecteur pour E-blocks Figure 1. Les différentes parties de Formule Flowcode. 124 elektor - 7-8/2007 Figure 2. Le schéma du PIC18F4455 a ici été simplifié, il ne montre que les fonctions réellement utilisées des broches du PIC. D indique les E/S numériques, A les analogiques. rielle que logicielle, pour l’étude de l’électronique et de la programmation. Cet article va s’efforcer de décrire ce que Formule Flowcode fait, comment ça marche et comment, nous l’espérons, elle servira à apprendre tout ce qui concerne la robotique… Nous y voilà Figure 3. Le L293D est un circuit de pilotage de moteur avec pont en double H. La figure 1 donne une représentation de Formule Flowcode avec une liste des composants et les caractéristiques du buggy. Comment tout cela fonctionne-t-il ? Commençons par le commencement. Le buggy tout entier est conçu au départ d’un nouveau microcontrôleur très puissant, le PIC18F4455 de Microchip. Cette puce à 40 pattes travaille à 24 MHz et exécute des programmes à la vitesse impressionnante de 6 MIPS (méga-instructions pas seconde). Un schéma de présentation de cette unité centrale se trouve à la figure 2. L’appareil se branche sans intermédiaire à votre port USB et contient une amorce de chargement qui vous permet de le programmer à l’aide d’une version de Flowcode 3 livrée gratuitement avec le buggy. Le PIC18F4455 dispose de deux sorties matérielles PWM, un UART, un bus I²C, des entrées analogiques, des interruptions par broche, par port et par temporisateur ainsi qu’un tas d’E/S numériques. En commande de moteurs à CC Les deux moteurs à courant continu avec boîtes de vitesse séparées sont alimentés par une classique puce L293D avec deux ponts en H complets comme le montre la figure 3. Le sens et la vitesse de chaque moteur peuvent se programmer séparément en Flowcode, ce qui permet au buggy d’effectuer les déplacements les plus extravagants qui se puissent imaginer. Comme vous pouvez le voir sur le schéma, le L293 utilise quatre sorties du PIC pour la commande. Deux sorties (RE0 et RE1) déterminent la direction et deux signaux PWM (fabriqués par le matériel) à RC1 et RC2 régissent la vitesse de chaque roue. Figure 4. Deux interrupteurs, huit LED et le connecteur de type D pour E-blocks. Possibilités d’extension des LED, commutateurs et E-blocks Le schéma du matériel pour les E/S est représenté à la figure 4. Les huit LED et les deux interrupteurs en avant du buggy vous seront très pratiques dans vos premiers pas en Flowcode et se montreront encore plus utiles quand il s’agira de déboguer des logiciels plus 7-8/2007 - elektor Figure 5. Les circuits du microphone, du haut-parleur et du photocapteur. 125 dispose aussi d’un haut-parleur simple à haute impédance auquel on peut faire reproduire des fréquences entre 100 Hz et 17 kHz. Sur la face avant du buggy, il y a un petit capteur photosensible qui fournit au véhicule la mesure de l’intensité lumineuse dans le sens de progression. Circuit infrarouge de mesure de distance Le buggy est aussi équipé de trois capteurs de distance vers l’avant, la gauche et la droite de la platine principale. La figure 6 en montre le schéma. Chaque capteur est la combinaison d’une LED IR qui émet des infrarouges et d’un phototransistor correspondant qui produit une tension analogique inversement proportionnelle à l’énergie IR réfléchie. Figure 6. Le circuit de télémétrie à bord du buggy Formule Flowcode. Circuit suiveur de ligne Toujours à l’avant du buggy, il y a une petite carte fille porteuse de deux transcepteurs infrarouges I²C intelligents capables de déceler les surfaces noires et blanches à des distances comprises entre 1 et 6 mm sans la moindre erreur. Le circuit est représenté à la figure 7. Ces capteurs permettent au buggy de pister des lignes sur une table ou une moquette. Alimentation La source d’énergie est dévoilée à la figure 8, sous forme d’une combinaison de pictogrammes avec le schéma, bien sûr. Le petit châssis est alimenté par quatre accumulateurs NiMH AA qui fournissent entre 4 et 6,2 V. La platine dispose d’espace libre pour des composants supplémentaire, vous pouvez y brancher une plus grosse batterie et utiliser un régulateur de 5 V. Figure 7. Le circuit suiveur de ligne. Circuiterie additionnelle complexes sur ce microcontrôleur PIC à 8 bits. En parallèle sur les huit LED, Formule Flowcode est équipée d’un connecteur pour E-blocks. Rien de plus simple, dès lors, de développer le buggy en lui adjoignant des blocs standard tels que LCD, Bluetooth et encore bien d’autres. E/S sonore et capteur de lumière Le buggy peut réagir au son (battement de mains) grâce à un microphone amplifié connecté à RB2. Comme le montre la figure 5, ce capteur de sons peut s’utiliser comme entrée numérique, comme interruption externe ou même comme entrée analogique. Le buggy Outre ce qui vient d’être décrit, le châssis est aussi équipé d’un bon nombre de connecteurs d’extension. On peut citer le bus I²C, des entrées à roues codeuses, des entrées de servo et bien d’autres. Pour utiliser Formule Flowcode À présent, vous devriez vous faire une bonne idée de la manière dont fonctionne le matériel et ce qui l’anime. Mais comment le programmer, comment s’en servir, comment les étudiants saurontils ce qu’il faut faire ? Le buggy de Formule Flowcode est livré avec une copie gratuite (à fonctionnalités réduites) de Flowcode, un langage graphique de programmation des microcontrôleurs. Avec Flowcode, l’utilisateur peut charger directement le logiciel par un câble USB. Après quoi, il n’y a plus qu’à débrancher le câble USB, à pousser sur le bouton de mise à zéro et le buggy exécute le programme. Des cours pour une course Figure 8. Simple mais incontournable, l’alimentation en énergie. 126 La nouvelle version de Flowcode contient un composant à modulation en largeur d’impulsion (PWM) pour la commande de moteurs. Comme Flowcode est à présent disponible en une dizaine de langues, en ce compris le chinois, il pourra servir à des enfants à partir de 12 ans virtuellement partout dans le monde. Le robot buggy s’appelle officiellement « Formula Flowcode », d’après la Formule Ford dans laquelle toutes les voitures sont identiques, pour gagner, il faut être le meilleur pilote. Dans notre cas, ce sont les talents de programmation du concurrent qui sont mis à l’honneur. Comme vous l’avez deviné, il y a un certain nombre de « leçons » à étudier pour améliorer son niveau de compétence. Ces cours commencent par l’allumage d’une simple LED et vont jusqu’à être capable de retrouver son chemin dans un labyrinthe elektor - 7-8/2007 en utilisant un châssis sur mesure, des roues codeuses et tout ce que vous voulez. C’est bien là l’idée ingénieuse de Formule Flowcode, parce qu’elle convient à des débutants en robotique comme en électronique, mais propose un défi considérable à ceux qui ont déjà acquis les connaissances voulues en électronique et en science informatique. On trouve dans ces cours des sujets tels que : • allumer une seule LED ; • réaliser un effet de « NightRider » sur la face de Formule Flowcode ; • développer un programme qui utilise le photocapteur embarqué pour suivre le faisceau d’une lampe torche ; • développer un programme pour faire danser Formule Flowcode sur la musique. À chaque battement de mains, elle tourne de 90 degrés ; • développer un programme pour lui faire suivre une ligne de deux mètres de long en toile isolante noire ; temps à battre, 30 secondes ; • développer un programme qui permet à Formule Flowcode de sortir d’un labyrinthe à 64 cellules en utilisant la technique du mur de gauche. Ces cours sont présentés aux étudiants sous la forme de tableaux basés sur les tâches à accomplir. Certai- Figure 9. Exercice typique de suivi de ligne. Arrêt au stand ! Comment participer ? Le robot buggy Formule Flowcode a été développé dans le but de motiver les gens qui veulent en savoir davantage sur la robotique et l’électronique, dès l’âge de 12 ans pour les jeunes curieux de s’instruire et jusqu’aux retraités tout heureux d’avoir enfin l’occasion de connaître le sujet et de se maintenir intellectuellement dans le mouvement. Aux États-Unis, le First Robotics programme (www.usfirst.org) a remporté un vif succès dans l’industrie auprès des ingénieurs, les stimulant à collaborer avec des jeunes pour s’aventurer dans des compétitions entre robots. Nous avons l’espoir de réaliser quelque chose de comparable ici, en proposant matériel et logiciel d’un robot à bon compte, un soutien en ligne et un plan d’apprentissage de qualité. L’organisation d’ateliers et de compétitions devrait attirer du monde à s’intéresser aux choses de l’électronique. Si vous estimez que pareil objectif est valable et a des chances de réussir, si vous souhaitez participer à ce programme ou si vous êtes intéressé par les concours et les ateliers, faites-le nous savoir. Si le niveau d’enthousiasme est élevé, nous écrirons d’autres articles sur le sujet et nous publierons une édition spéciale pour les lecteurs d’Elektor. Vous pouvez contacter l’auteur et ses collègues par courriel adressé à [email protected] ou par l’intermédiaire d’Elektor. Vous pouvez vous procurer un buggy Formula Flowcode auprès de l’e-choppe d’Elektor au prix de 125 € TVA incluse. nes proposent la compétition, en termes de durée ou de fonction, et peuvent constituer la base de concours régionaux, en espérant qu’Elektor et les pouvoirs animateurs de l’enseignement les organisent à travers l’Europe. D’autres cours visent l’amusement ou l’exploration détaillée de caractéristiques techniques et de programmation. Le forum sur le site Internet de Matrix Multimedia, accessible via www.matrixmultimedia.com se tient à la disposition de chacun pour se poser des questions les uns aux autres et échanger des programmes. Nous avons le projet d’organiser des ateliers pour jeunes, qui les aideraient à démarrer et aiguiseraient leur intérêt pour la technique. En complément à cela, Elektor va publier un livre qui conduira l’utilisateur à travers les arcanes de la conception de programmes et de circuits additionnels pour le buggy. On disposera alors d’une suite complète de tutoriels pour apprendre aux jeunes enthousiastes jusqu’à seize ans tout ce qu’il faut savoir pour construire des appareils électroniques en se familiarisant avec la technologie. (070323-I) 7-8/2007 - elektor Figure 10. Résoudre par la gauche un problème de labyrinthe. 127 Commande de volume automatisé Raj K. Gorkhali +5V IC2.A 1 14 2 IC2 2 10 + 10k 3 IC1 C1 10µ CT T1 4040 11 12V 1 4 5 6 7 8 CT=0 9 BC547 10 MIC1 11 S1 3 5 R2 7 6 5 3 2 4 IC2.C 11 12 R3 1k 0 CTR12 9 1k 16 P1 100k R5 IC2.B 4 13 12 14 15 10 IC2.D 9 6 R4 1k 7 R6 R1 1k 13 10k De la musique, des sirènes ou de la parole à un niveau plus élevé en réponse à des niveaux de bruit ambiant plus importants ? Ce simple circuit est l’une des solutions possibles et pourrait permettre à votre robot d’être au moins aussi bruyant ou loquace que tous les autres personnages présents dans le secteur. Les sous-ensembles constitutifs de cette électronique : un microphone, un détecteur de niveau, un compteur 4 états et un quarteron de commutateurs analogiques reliés à un réseau résistif en échelle. Un coup d’oeil au schéma nous apprend que le signal fourni par le microphone électret Mic1 est amplifié par le transistor T1 dont on retrouve la tension de collecteur aux bornes d’un potentiomètre. Mic1 reçoit sa tension de polarisation (bias) par le biais de R6. En fonction de la position de P1, le compteur 4040 se voit appliquer une impulsion d’horloge en cas de dépassement d’un niveau sonore donné (seuil). L’état du compteur (son contenu) détermine la configuration des 4 commutateurs électroniques intégrés dans le 4066 et du même coup la résistance série intercalée dans la ligne qu’emprunte le signal audio. L’alimentation du circuit se fera à l’aide doit d’une alimentation de 5 à 9 V régulée soit par une pile compacte sachant qu’il ne consomme que quelques milliampères. 1 8 8 RESET IC2 = 4066 070034 - 11 Le bouton S1 permet de réinitialiser le compteur, ouvrant tous les commutateurs du 4066, ce qui se traduit par l’application de l’atténuation maximale dans le trajet du signal audio vu que dans ces conditions, aucune des résistances de 1 kΩ ne se trouve court-circuitée. Il vous faudra, en vue de calibrer l’électronique, déconnecter l’entrée d’horloge du 4040 (broche 10) du curseur de P1, la mettre momentanément à la masse au travers d’une résistance de 100 kΩ. Appliquez maintenant une impulsion à l’entrée d’horloge en connectant cette broche brièvement à la ligne positive de l’alimentation; vous verrez les sorties du compteur changer d’état ce qui se traduit par le changement d’état des commutateurs double position intégrés dans le 4066. (070034-I) Un robot avec une mémoire d’éléphant B. Broussas Si les applications robotiques ludiques peuvent généralement se satisfaire des quelques octets à quelques centaines d’octets de mémoire Flash dont dispose aujourd’hui la majorité des microcontrôleurs ; certaines applications plus « sérieuses » ou plus complexes ont besoin de capacités mémoire beaucoup plus importantes. Un robot mobile peut ainsi avoir en mémoire la cartographie complète d’un lieu sous forme de coordonnées telles que 128 celles fournies par un GPS par exemple. Ou bien alors il peut être chargé de collecter une grande quantité d’informations délivrées par ses capteurs. En présence d’une telle situation, il est bien sûr possible de réaliser une ou des cartes mémoires spécifiques en utilisant les boîtiers EEPROM Flash de forte capacité existant aujourd’hui sur le marché. Cette approche se heurte toutefois assez vite à de nombreux problèmes. Le premier est celui de la réalisation des circuits imprimés nécessaires. En effet, la majorité des mémoires de ce type n’est disponible qu’en boîtier CMS dont la densité des pattes rend la réalisation d’un circuit imprimé par l’amateur délicate, sans parler de la difficulté qu’il y a ensuite à souder correctement de tels circuits. Le deuxième problème est que ces mémoires étant surtout destinées au marché professionnel, il est parfois très difficile de se les procurer sur le marché amateur. Nous vous proposons donc, avec cet article, une solution originale à ce problème pour peu que votre robot soit équipé d’au elektor - 7-8/2007 7-8/2007 - elektor 2k2 2k2 2k2 3k3 3k3 3k3 moins un microcontrôleur PIC et que vous répond. Divers registres internes aux signifiNous n’allons pas détailler ici les seize insacceptiez de le programmer en Basic. Il cations bien précises sont également à notre tructions disponibles pour manipuler les s’agit là de contraintes relativement légères disposition. Enfin, le positionnement des cartes SD et ce d’autant que vous pouvez vous en conviendrez, surtout lorsque vous données dans la carte ne se fait pas « n’imtélécharger gratuitement le manuel de ce saurez qu’en procédant de la sorte vous porte comment » mais respecte un principe compilateur (en langue anglaise uniquepourrez doter votre robot d’un giga-octet similaire à celui que l’on rencontre sur les ment) sur le site de son éditeur. Sachez de mémoire, voire plus, pour seulement disquettes et disques durs avec, notamment, seulement que le recours à ce produit faciquelques dizaines d’euros ! une FAT (File Allocation Table) qui indique lite énormément, et encore le mot n’est pas La mémoire que nous avons retenue est où sont rangées les données contenues de assez fort, la gestion de telles cartes. tout simplement de la mémoire vendue ce fait dans des fichiers. Ainsi par exemple, si vous avez rempli une sous forme de cartes SD (Secure Digital Même s’il est possible de gérer toutes ces zone de mémoire tampon (un buffer pour Card), initialement destinées aux appainformations en écrivant soi-même les parler comme nos amis Anglais) et que reils photos numériques et autres balasous-programmes nécessaires en langage vous souhaitiez la stocker dans la carte deurs. Cette mémoire est en effet très peu machine, c’est là une tâche longue, fastiSD, il vous suffira d’écrire : dieuse et source d’erreurs. coûteuse aujourd’hui (environ 10 € pour Fort heureusement, si l’utilisation d’une telle status = Mmc _ Write _ Sector 1 giga-octet au moment où ces lignes sont écrites), très compacte et d’une fiabilité à carte mémoire dans votre robot vous inté(numero, buffer) où : toute épreuve dès lors que vous ne • status est une dépassez pas le variable qui contient nombre maximum un code numérique 11 32 de cycles d’écrirenvoyé par la com+5V 3V3 1 40 ture, qui se chifmande indiquant le MCLR/VPP RB7/PGD 39 RB6/PGC fre en centaine de résultat de son exé2 38 RA0/AN0 RB5 C2 C3 C1 milliers, voir en cution (0 pour un 3 37 RA1/AN1 RB4 millions selon l’opsuccès, 1 pour une 4 36 10µ 220n 10µ RA2/AN2 RB3 5 35 timisme des fabrierreur lors de l’envoi RA3/AN3 RB2 6 34 RA4/T0CKI RB1 cants ... de la commande, 2 7 33 RA5/AN4/SS RB0 L’interfaçage matépour une erreur lors 8 RE0/RD/AN5 riel d ’une telle de l’écriture propre9 15 RE1/WR/AN6 RC0/T1CKI 10 16 mémoire avec un ment dite). RE2/CS/AN7 RC1/CCP2 17 microcontrôleur • nu m ero est le RC2/CCP1 13 18 OSC1/CLKIN RC3/SCK/SCL PIC est relativenuméro du secteur 14 23 OSC2/CLKOUT RC4/SDI ment facile car les de la mémoire SD PIC18Fxxx mémoires de type dans lequel on sou19 24 RD0/PSP0 RC5/SDO R6 R4 R3 20 25 SD disposent d’un haite écrire (nous RD1/PSP1 RC6/TXD 8 21 26 7 RD2/PSP2 RC7/RXD DOUT mode de fonctionvous avons indiqué 22 6 RD3/PSP3 GND nement compatible ci-dessus que le ranCarte SD 27 29 5 RD4/PSP4 RD6/PSP6 SCK en mode SPI de l’interface série gement des données 28 30 4 RD5/PSP5 RD7/PSP7 +3V3 Vue côté contacts 3 synchrone de type ressemblait à ce que GND 2 SPI présente sur ces l’on trouvait sur un DIN 12 31 1 CS microcontrôleurs. disque dur ; en voici R5 R2 R1 9 La seule précaution la matérialisation). à prendre concerne • buffer est l’étiles niveaux électriquette repérant le 070318 - 11 ques car ces cartes début d’une zone mémoire travaillent de mémoire tampon pouvant conteen 3,3 volts alors que, le plus souvent, les PIC de nos robots resse, sachez qu’il existe un compilateur nir jusqu’à 512 octets puisque c’est la taille Basic (pour microcontrôleurs PIC seuledes secteurs de la carte SD. sont alimentés en 5 volts. La figure ci-jointe propose un schéma utilisable avec tous les ment au moment où ces lignes sont écrites) microcontrôleurs PIC de la famille PIC18 disposant d’une bibliothèque de gestion La lecture des informations stockées sur de Microchip. complète de cartes mémoires de type SD la carte SD et leur transfert en mémoire Par contre, le problème est nettement câblées comme indiqué sur notre figure. vive du processeur du robot est tout aussi plus délicat pour ce qui est du logiciel de Il s’agit du compilateur MikroBasic de simple et se résume à une seule ligne de gestion de ces cartes mémoires. En effet, Mikroelektronika que vous pouvez découcode : contrairement à ce que l’on pourrait croire vrir sur le site Internet de son éditeur de prime abord. Il ne s’agit pas de simples (www.mikroelektronika.co.yu) et dont il status = Mmc _ Read _ Sector mémoires EEPROM Flash à accès série existe une version de démonstration fonc(numero, buffer) où : mais de modules dotés d’une intelligence tionnelle permettant de le tester avant locale. Il n’est donc pas possible de lire tout achat. Outre les fonctions classiques • status est une variable qui contient ou d’écrire directement dans ces mémoires présentes sur tous les compilateurs Basic un code numérique indiquant le résultat comme vous le feriez par exemple avec pour PIC dignes de ce nom que l’on trouve de l’exécution de la commande (0 pour un une banale EEPROM à accès série telle aujourd’hui sur le marché, il dispose d’une succès, 1 pour un échec). qu’une 24C16 par exemple. bibliothèque de gestion complète de car• numero est le numéro du secteur de la Le dialogue doit respecter un protocole tes mémoires de type SD (et également de mémoire SD que l’on souhaite lire. précis car la carte ne comprend qu’un certype Compact Flash mais ce n’est pas le • buffer est l’étiquette repérant le début tain nombre de commandes auxquelles elle propos de cet article). d’une zone de mémoire tampon dont la 129 taille doit être au moins de 512 octets ; zone qui va recevoir les données lues dans le secteur sélectionné sur la carte. Comme vous pouvez le constater, il est difficile de faire plus simple même si, dans le cadre de cet article nécessairement syn- thétique, nous avons passé sous silence les instructions de gestion de la FAT de carte. Ces dernières sont toutefois d’usage beaucoup moins courant une fois que la structure de la carte est définie et un exemple commenté et détaillé est fourni à leur sujet dans le manuel du compilateur. Alors, si votre robot a besoin de beaucoup de mémoire, prêtez-lui la carte SD de votre appareil photo et faites un tour du côté de chez Mikroelektronika (www.mikroelektronika.co.yu). (070318-I) Lucioles chaotiques à LED Jonathan Hare 1 +9V Coupler des oscillateurs à LED permet de produire des effets intéressants pour donner à votre robot un look spectaculaire et exclusif. Comme on le voit dans le schéma de la figure 1, au lieu d’utiliser la broche de décharge du 555, le condensateur se charger et se décharger par la sortie, en intercalant une résistance d’ajustement P1. Si nous supposons que la résistance de sortie du 555 est très basse (ce sera le cas avec un 555 bipolaire plutôt qu’un CMOS), il produira un rapport cyclique de 50 % à une fréquence indépendante de la charge. Mais si nous augmentons délibérément la résistance de sortie par le biais d’une résistance en série (R1), le tempo devient dépendant du courant consommé par la charge, parce que R1 va effectivement faire tomber la tension de charge disponible pour le circuit de temporisation P1/C3. Imaginons à présent un certain nombre de ces oscillateurs dont les sorties sont connectées les unes aux autres par des résistances de limitation et des LED bicolores (figure 2). Il est possible de réaliser avec des oscillateurs et de LED des figures 1 et 2, chacun avec son propre symbole, une constellation telle que sur la figure 3, par exemple. La cadence de chaque oscillateur dépendra alors des autres oscillateurs, parce qu’ils vont déterminer le courant qui circule dans les LED. Supposons que toutes les sorties soient hautes (ou basses), il n’y a aucune différence de potentiel et donc aucun courant qui circule dans les circuits des LED. Alors, tous les oscillateurs seront à la fréquence maximale. D’autres combinaisons de sorties feront s’allumer certaines LED et leurs courants affecteront le tempo de chaque oscillateur. C’est la loi du chaos ! Les résistances R1 couplent les oscillateurs entre eux dans ce but. Un interrupteur aux bornes de chaque R1 permet de commander le couplage. Régler la fréquence d’oscillation aux alen- 130 P1 C1 10µ 100k 7 4 8 S1 R DIS IC1 2 6 OUT TR 3 R1 220 Ω OSC(n) 555 THR CV 5 C3 C2 10µ 100n 1 070141 - 11 2 680 Ω LED bicolore 070141 - 12 3 OSC1 OSC3 OSC2 OSC4 070141 - 13 tours de 2 Hz à l’aide des P1 révèle la complexité du clignotement des LED qui passent du rouge au vert avec des extinc- tions. Parfois, les LED semblent se mettre d’accord et pulser de concert. On dirait un peu une version électronique de ce qui elektor - 7-8/2007 se passe dans la nature quand un groupe de lucioles se rassemble dans un buisson : leurs fluctuations se synchronisent et peutêtre notre petit circuit est-il une version simplifiée de ce système de rétroaction naturel nettement plus complexe. En remontant la fréquence dans le voisi- nage de 100 Hz, on peut varier le mélange (le battement) des couleurs scintillantes rouges et vertes pour obtenir une « vague » de modification des couleurs à travers le réseau de LED. Ajouter des résistances sensibles à la lumière (LDR) en série avec R1 pourrait aider nos lucioles électroluminescentes à se « voir » entre elles. Mais même sans LDR, avec trois oscillateurs couplés ou davantage, on peut déjà s’étonner à l’observation du comportement chaotique des oscillateurs. (070141-I) Boîtes de construction EE de Philips Luc Lemmens Nombre de nos lecteurs, ceux de la génération précédente plus particulièrement, ne manqueront pas de se souvenir de ces légendaires boîtes d’expérimentation EE (Electronic Engineer). Philips les a eu, des années durant, de 1963 au milieu des années 80, à son programme. Combien d’électroniciens ne doiventils pas leur intérêt pour le domaine d’activité qui est devenu le leur à ces kits ? Le but (non avoué) des premiers kits était bien entendu de faire de la pub pour les composants électroniques de Philips auprès des amateurs, mais les années passant, la complexité des ensembles proposés n’a cessé de croître, les désignant pour une utilisation dans l’enseignement. En fin des années 80, Philips a vendu ses kits d’expérimentation électroniques à la société allemande Schuco 7-8/2007 - elektor qui a continué de les proposer jusqu’au milieu des années 90. Moins connus sont les coffrets d’expérimentation ME (Mechanical Engineer) de Philips, mais cela s’explique par le fait qu’ils n’ont été sur le marché que pendant près d’un lustre au cours des années soixante. On ne sera guère surpris de pouvoir en déduire que la série ME a connu un succès moindre que celui des coffrets EE ce qui explique que leur vie commerciale ait été relativement courte. Et si vous faites partie, tout comme le soussigné, de ceux qui s’y sont frotté, vous aurez sans doute compris la raison de leur échec commercial. Les coffrets ME n’étaient pas en mesure de concurrencer les autres systèmes de construction mécanique tels que les très populaires, à l’époque, Meccano et Fischer Technik. De nombreuses pièces étaient bien trop fragiles pour de petites mains enfantines et maladroites et les montages proposés étaient, pour certains d’entre eux, même funeste pour les pièces concernées. En particulier les pivots utilisés avec les engrenages servant à réaliser toutes sortes d’interconnexions avec les axes souffraient beaucoup dans certaines applications et pouvaient, après un projet déjà, être mis à la poubelle. Heureusement qu’il était possible, à l’époque, d’obtenir ces pièces séparément. Quelque soit la beauté sur papier de certains des projets, ils ne pouvaient 131 guère prétendre à une palme quelconque tant au niveau de la solidité que de celui de la finition. De ce fait, de nombreuses heures de montage donnaient naissance à des constructions mécaniques parfaitement capables de se « démonter » d’elles-mêmes. Les coffrets ME ne connaissaient que les fixations par pince, approche qui n’était pas en mesure, dans bien des cas, de supporter toutes les forces mécaniques mises en jeu. L’aspect intéressant de la technique ME était l’énorme diversité de constructions qu’elle permettait de réaliser, d’horloges mécaniques à des installations de pompage d’eau. Il y avait même des projets de construction qui utilisaient aussi des pièces de la série EE, une combinaison de mécanique et d’électronique, à l’image du véhicule de la photo. Il s’arrêtait automatiquement dès qu’il arrivait au-dessus d’une surface sombre. De nos jours, il s’agit d’une application on ne peut plus simple ne requérant qu’un minimum de technologie, mais à l’époque, cela tenait, pour un gamin, presque de la magie ! Philips a encore tenté d’intéresser les enfants d’âge tendre à la mécanique en vue d’en faire des clients pour leurs coffrets ME. En 1968, on lança sur le marché Philiform, une technique de construction très proche de celle de Lego Technic et qui pouvait être utilisée en association avec les pièces ME. L’année 1970 sonna cependant le glas de ces matériaux de construction mécanique produits à Eindhoven, la Ville Lumière des Pays-Bas. Il nous faut cependant signaler un point fort, sous l’aspect mécanique, du premier coffret ME, le ME1200. Il était fourni dans un coffret de bois à couvercle coulissant. Ceci a sans doute permis une bonne conservation de ces produits, ce qui explique que l’on puisse en trouver, complet ou presque, sur Ebay ou d’autres sites Web de vente de particuliers. Il faut compter de l’ordre de trente à quarante euros, en fonction de l’état de conservation bien entendu. Comme c’est le cas pour tout ce qui a un certain âge, il existe des collectionneurs pour ce genre d’objets et on trouve de nombreux sites y faisant référence et donnant de plus amples informations à leur sujet. (070277-I) Nouvelle brique moteur Lego MINDSTORMS® NXT Antoine Authier En 2006, les briques Lego MINDSTORMS® RCX se sont métamorphosées en briques NXT. Elles surprennent par leurs formes avant-gardistes. Au traditionnel pavé compact RCX, les ingénieurs Lego ont préféré un profil « pistolet » pour le moteur NeXT génération. rotation lente sera perçue comme inconvénient dans les applications de vitesse. Les données fournies par l’encodeur rotatif optique permettent au logiciel du boîtier NXT de déterminer l’angle de rotation au degré près. Faute d’avoir disséqué la brique, nous ignorons comment cette précision est obtenue alors que le disque codeur ne présente que douze crans. Deux ensembles électroniques sont présents dans la brique : d’une part le module de conditionnement du signal provenant du capteur optique, d’autre part le module de protection contre les surcharges éventuelles. Celui-ci est Cette brique comprend à la fois un moteur, un encodeur rotatif et un réducteur de vitesse à engrenages. Son poids atteint les 80 g ! Le moteur à courant continu semble de type standard. Il se situe sous le logo Lego, dans le cylindre gris clair de plus grand diamètre. Il est alimenté par une tension de 9 V et consomme 60 mA à vide pour une vitesse de 170 tours/minute (360 t/mn et quelque 3,5 mA pour un moteur RCX). Le réducteur de vitesse interne permet d’augmenter le couple disponible sur le disque de sortie, ce qui est intéressant pour les applications de force. En revanche, la 132 elektor - 7-8/2007 constitué d’un fusible Polyswitch ® réarmable contre les courants trop forts, et d’un limiteur de surtensions à 15 V. À une extrémité de la brique, se trouve le disque d’entraînement, de couleur orange. À l’autre extrémité se trouve le connecteur pour l’alimentation et la sortie de données. Il est de type RJ11 et détrompé afin d’éviter Liens Internet la confusion avec un cordon téléphonique standard. [1] Philo’s NXT® motor internals : www.philohome.com/nxtmotor/ nxtmotor.htm Les lecteurs intéressés trouveront les caractéristiques et les vues des entrailles de la brique sur les pages de Philo [1], [2]. [2] Lego ® 9 V Technic Motors compared characteristics : www.philohome.com/motors/ motorcomp.htm (070371-I) Dompteur de couleurs U+ T4 Nivard van de Boogaard Pour éviter de charger excessivement les sorties du circuit intégré IC1, nous avons ajouté les transistors T1 à T3. Dès qu’une sortie du compteur passe à l’état actif (haut), le transistor devient passant et un 5 1 2 R4 3 CKB T1 QA CKA IC1 QB (HCT) 7493 QC R0(1) QD R0(2) 12 T2 9 T3 8 11 R3 150 Ω 14 10 R2 R1 150 Ω S1 1k Ce circuit simple permet d’utiliser facilement trois LED ou une LED RVB (rouge-vert-bleu). Le commutateur S1 fait avancer continuellement la valeur de sortie (numérique) du compteur IC1, de type HCT7493. Ainsi une nouvelle LED ou combinaison de plusieurs LED s’allume constamment ou bien, dans le cas d’un LED tricolore, la couleur change constamment. Après avoir atteint la valeur maximale, le compteur recommence par la plus petite. Toutes les combinaisons possibles se présentent sans qu’il soit nécessaire de prévoir un système de remise à zéro. Intéressant pour agrémenter un robot, mais l’effet est également heureux dans un PC personnalisé. 150 Ω Réglage de LED RVB D1 LED RVB 070025 - 11 courant traverse la LED. Ce courant est limité par les résistances R1 à R3. Le type de transistor utilisé pour T1 à T3 n’est pas critique. Les LED ordinaires ne consomment guère qu’une vingtaine de milliampères. Un BC337 convient parfaitement, un BC547 aussi. Le transistor T4 permet de couper l’alimentation des LED. C’est pratique par exemple dans le cas du montage dans un coffret de PC. Tant que le circuit IC1 est alimenté, l’état du compteur est conservé et avec lui la composition correspondante de la lumière des LED ou de la LED RVB. Ainsi il n’est pas nécessaire de redéfinir la couleur chaque fois que le PC est redémarré. Il est évident que T4 doit supporter un courant supérieur à celui de T1 à T3, mais un BC547, avec un courant de collecteur maximal de 100 mA, n’est pas encore à sa limite. Nous utilisons R4 pour fixer au niveau bas l’entrée d’horloge quand l’interrupteur est ouvert. Le compteur HCT7493 est un compteur binaire à quatre bits constitué de quatre bascules maître-esclave qui constituent un diviseur par deux et un diviseur par quatre. Les entrées RO(1) et RO(2) permettent la remise à zéro des deux sections. Comme cette fonction est inutilisée dans notre application, RO(1) et RO(2) sont reliées à la masse pour éviter les parasites. De même, on peut éviter les parasites sur l’entrée d’horloge CKA en la reliant au pôle positif de l’alimentation. (070025-I) De battre, mes mains l’ont arrêté Raj. K. Gorkhali Applaudissez, vous ferez obéir vos appareils électriques ! Qu’ils s’agisse de la télé, d’un ventilateur, de l’éclairage ou d’accessoires quelconques, ce circuit vous permet d’en allumer ou éteindre quatre à l’aide de relais à bascule. 7-8/2007 - elektor Dans le schéma, on voit le microphone à condensateur (électret) M1 branché à l’entrée du préamplificateur T5. Le signal capté par le micro y est amplifié avant de l’appliquer à l’entrée (broche 2) du temporisateur 555 en configuration de monostable dont la sortie est employée comme horloge du compteur 7490. Chaque fois qu’une impulsion arrive à l’entrée d’horloge (broche 14) de IC2, elle produit un code à quatre bits sur les quatre sorties de la puce. Par exemple, quand la première impulsion arrive à l’entrée TRIG du 555, le code binaire en 133 +5V D1 +5V 1N4148 R1 R8 RE1 +5V T1 1k 10k R7 3k3 R6 100k 10k sortie du 7490 devient 0001, la deuxième impulsion y formera 0010 et ainsi de suite. Lors de la 15e impulsion, la sortie affichera 1111. Encore une impulsion et IC2 reviendra alors automatiquement à l’état originel 0000. R5 Les quatre sorties du compteur commandent chacune un transistor, T1 à T4, lesquels pilotent à leur tour les quatre relais RE1 à RE4 dont les contacts commandent les appareils. Quatre diodes de redressement D1 à D4 sont branchées en parallèle sur les bornes des bobines de relais C1 pour éviter que les extra-cou100n rants de rupture ne dérangent le MIC1 fonctionnement du circuit. On peut mettre à l’épreuve le montage de façon très simple. On l’alimente en 5 ou 6 V régulé. Momentanément, on débranche l’entrée CLKA du 7490 de la sortie du 555. Brancher alors un fil à l’entrée CLKA permet de toucher la ligne positive de l’alimentation. À chaque impulsion d’horloge ainsi créée, RE1, RE2, RE3 et RE4 vont alors s’exciter ou retomber dans l’une des 16 configurations différentes. Il faut alors rétablir la connexion entre IC1 et IC2. Frappez dans les mains à proximité du microphone, les relais doivent répéter BC547 5 8 7 C2 100n T5 2 6 4 R DIS B 14 OUT TR LM555C THR CV 3 2 3 6 7 1N4148 QA IC2 A IC1 1 BC547 1 74LS90 QB R0(1) R0(2) QC R9(1) R9(2) QD R2 12 C3 10n 10n RE2 T2 1k +5V 9 8 D3 BC547 RE3 11 1N4148 5 C4 D2 10 R3 +5V T3 1k BC547 D4 1N4148 R4 RE4 T4 1k 070092 - 11 le cycle de la même manière. Enfin, il vous reste à brancher les appareils voulus aux contacts des relais. Il est recommandé d’utiliser une tension régulée de 5 V pour ce circuit. Les contacts des relais doivent être prévus pour une tension alternative de 230 V et BC547 pouvoir supporter le courant demandé par les appareils. Il y a lieu de prendre toutes les précautions requises quand on travaille sur des appareils alimentés par le secteur, en particulier ici les contacts des relais. (070092-I) Robot marcheur hexapode Joseph Kopff Cette réalisation n’a pas d’autre but que de vous amener à expérimenter et à vous amuser de voir comment les choses évoluent. Ce robot « à moustaches » présente un comportement tout à fait classique en robotique : il avance en ligne droite. En l’absence d’obstacle il poursuit son petit bonhomme de chemin. Lorsque sa moustache gauche détecte un obstacle, il recule un peu, tourne à droite et reprend sa marche en avant. Si c’est la moustache droite qui détecte un obstacle, il recule un peu, tourne à gauche et reprend sa marche en avant. Son originalité se situe au niveau de la mécanique. Le châssis repose en effet sur un lecteur de disquette (floppy 3,5») débarrassé de tous ses composants électroniques et mécaniques. On a fixé, sur chacun de ses côtés, une plaquette de plexiglas qui sert de support aux pattes. Cette plaquette que l’on 134 elektor - 7-8/2007 retrouve sur le croquis de la figure 1, est translucide ce qui explique qu’on ne puisse pas bien l’identifier sur la photo. 1 Le groupe propulseur est constitué de 2 servomoteurs modifiés. Par suppression de la liaison mécanique entre le potentiomètre interne et le pignon moteur, on obtient des moteurs à vitesse variable commandés par largeur d’impulsion. Si vous voulez en savoir plus sur la modification des servos pour en faire un moteur commandé par impulsion, nous vous renvoyons au site : Tube 1 Châssis G E A Patte 1 F C Patte 2 D B Patte 3 Sol http://fribotte.free.fr/bdtech/pic/ servoCC.html (en français). ‘------------------------------------‘ Ces lignes correspondent au fichier «PIC16F84. INC» ‘ définissant la valeur des registres du µp (Microprocesseur) ‘ Elles devront être présentes dans tous les programmes ‘ define INDIR 0H define OPTION_REG 81H define PCL 2H define STATUS 3h define FSR 4h define PORTA 5h define PORTB 6h define _EEDATA 9Ah define EEADR 9Bh define PCLATH 0AH ‘ symbol btn1 “PORTA 0” symbol btn2 “PORTA 1” symbol btn3 “PORTA 2” symbol btn4 “PORTA 3” ‘ Zone des variables ‘-------------------dim a,i ‘ début du programme ‘-------------------------‘ Mettre tous les pins du port B en sortie ‘ et tous les pins du port A en entrée start: Init portb=00000000 Init porta=11111111 ‘désactiver les comparateurs CMCON=0x07 PORTB=0x00 boucle: delayus(10) a=INPORTA ifnbit btn1 goto detectgauche delayus(10) a=INPORTA ifnbit btn2 goto detectdroite gosub avance goto boucle detectgauche: for i=1 to 40 gosub recule next i for i=1 to 80 7-8/2007 - elektor 070333 - 12 gosub droite next i goto boucle detectdroite: for i=1 to 40 gosub recule next i for i=1 to 80 gosub gauche next i goto boucle avance: ‘génère une impulsion de 2 ms sur moteur droite et 1 ms sur moteur gauche PORTB=0x03 delayms(1) PORTB=0x02 delayms(1) PORTB=0x00 delayms(18) return recule: ‘génère une impulsion de 1 ms sur moteur droite et 2 ms sur moteur gauche PORTB=0x03 delayms(1) PORTB=0x01 delayms(1) PORTB=0x00 delayms(18) return gauche: ‘génère une impulsion de 2 ms sur moteurs droite et gauche PORTB=0x03 delayms(2) PORTB=0x00 delayms(18) return droite: ‘génère une impulsion de 1 ms sur moteurs droite et gauche PORTB=0x03 delayms(1) PORTB=0x00 delayms(19) return end ‘ fin physique du prog. 135 Examinons les pattes d’un côté du robot : ce sont les mêmes de l’autre côté. Les 3 pattes sont formées d’un barreau de laiton de 6x2 mm. Les pattes 1 et 3 pivotent sur les axes A et B. Ces axes sont solidaires du châssis. 2 0Ω1 136 R2 10k R1 servomoteur droit +V E 14 4 MCLR C1 17 18 100µ 1 2 3 S2 GND RB0 RB1 IC1 Les points E et F des patS1 tes sont reliées par une contact biellette, constituée d’une gauche tige de laiton de 3 mm, sur laquelle on a soudé en bout un écrou M3 en laiton. Les trous E et F des pattes sont taraudés, une vis de 3 mm y est vissée à fond, l’écrou soudé sur la biellette est mobile sur cette vis. Une 2ème bielle (D-F) découpée dans un morceau de tôle de fer transmet le mouvement du moteur aux pattes 1 et 3. La patte 2 a un mouvement inversé par rapport aux pattes 1 et 3. Elle se lève et va en avant quand les pattes 1 et 3 descendent et vont en arrière. La patte 2 est mise en mouvement par le moteur au point C et guidée en translation par le Tube 1. Elle est prolongée vers le haut (soudure à l’étain) par un tube de laiton de 3 mm qui coulisse dans un tube de laiton de 4 mm (noté Tube 1). Le Tube 1 pivote librement sur l’axe G, qui est solidaire du châssis. Détail des points de rotation E, F et G : L’axe de rotation du point E (idem pour F) est une vis de 3 mm vissée à fond dans un trou taraudé des pattes 1 et 3. La partie mobile est un écrou M3, non bloqué sur cette vis. Ainsi la bielle EF soudée à l’écrou peut tourner, sans quitter la liaison aux pattes. De même l’axe de rotation du point G est une vis fixée par 2 écrous au châssis. Le point mobile est l’écrou soudé au Tube 1. Avantage de ce système : Toute la mécanique est +5V R3 10k Sur la figure ci-dessus, l’axe moteur est en C et la transmission des mouvements se fait à partir du point D excentré de 5 mm par rapport à l’axe du moteur. RB2 RA0 RB3 RA1 RB4 RA2 PIC16F628 RB5 RA3 RB6 RA4 RB7 6 7 servomoteur gauche 8 9 +V 10 E 11 GND 12 13 sés de façon symétrique sur le châssis. Donc, pour un mouvement en AVANT du robot, il faut que l’un des moteurs tourne dans le sens horaire et l’autre dans le sens antihoraire. Les moteurs sont commandés de façon extrêmement simple : une impulsion de 1 ms toutes les 20 ms fait avancer le moteur, une impulsion de 2 ms toutes les 20 ms fait reculer le moteur. Une impulsion de 1,5 ms arrêterait le moteur, mais l’absence d’impulsion contact produit le même effet. droit L’auteur n’a pas exploité la vitesse variable dans 070333 - 11 cette expérimentation. Le programme du PIC en plastique et laiton, facile à usiner. (disponible au téléchargement) a été écrit Pas besoin d’outillage complexe : persous Win Pic Basic. ceuse, scie et lime suffisent. Le laiton peut être soudé avec un fer à souLes routines «delayms» et «delayus» produider d’électronicien (assez puissant tout de sent, comme leur nom le suggère, un délai même). d’attente en ms ou en µs. Elles préexistent dans ce langage de programmation. OSC1 OSC2 16 15 5 L’électronique La partie électronique du robot est basée (cf. figure 2) sur un PIC 16F628, et 2 servomoteurs modifiés en moteurs à vitesse variable, commandé en modulation à largeur d’impulsions. Notez que les 2 servomoteurs sont dispo- Possibilités à suivre ... Le circuit est réalisé sur une plaque à bandes cuivrées (genre Veroboard). Tout est modulaire pour permettre d’autres expérimentations : capteurs de proximité à ultra-sons, capteurs de lumière, etc. Pour cette même raison, les capteurs de contact ont été montés sur une prise DB25 visible à l’avant du robot. En principe ce genre de robot devrait toujours reposer sur 3 pat tes, soit 2 d’un côté et une de l’autre côté. Mais il n’a pas été prévu ici de synchronisation entre les mouvements des pattes gauches et droites, ce qui provoque parfois une marche bancale du robot (il arrive qu’il soit en équilibre instable sur les pattes du milieu). Toutefois sa démarche reste amusante et il ne peut pas se renverser sur un terrain plat. (070333-I) elektor - 7-8/2007 Robots footballeurs Dans ce numéro Hors-Gabarit consacré à la robotique, nous ne pouvons pas passer à côté de la Robot-Coupe. Vous n’y couperez pas ! La RoboCup est un projet collectif international destiné à promouvoir la recherche en intelligence artificielle, en robotique et dans les domaines connexes. La base choisie est le football et l’objectif final s’énonce comme suit. En 2050, une équipe de robots humanoïdes complètement autonomes doit être en mesure de battre les champions du monde de football. On peut apporter sa contribution dans une ligue parmi quatre : la ligue de simulation, la ligue des tailles petite et moyenne, la ligue des quadripodes et celle des humanoïdes. Dans la ligue des tailles petite et moyenne (MSL), Philips apporte sa contribution avec une équipe. Les robots MSL doivent être complètement autonomes. Toute l’intelligence doit donc être située à bord et personne ne doit piloter le robot depuis la ligne de touche. Pour jouer au football les robots Philips emportent à leur bord les organes suivants : • deux caméras Vision (une fixe vers l’avant et une « omnicamera» ; • un PC ; • un automate programmable (PLC, Programmable Logic Controller) ; • un réseau sans fil ; • quatre roues ; • quatre capteurs pour la détection des lignes blanches ; • un manipulateur de ballon ; • un mécanisme de tir ; • des accumulateurs. 7-8/2007 - elektor Les caméras Vision sont les yeux du robot. Le robot filtre les images capturées et utilise les couleurs pour reconnaître le ballon, les buts, les piquets de corner et les autres robots. La caméra de face sert à l’orienta- tion précise. L’omnicamera, pointée vers le haut sur un miroir spécial, surveille l’environnement du robot et lui indique où il se trouve et ce qui se passe autour de lui. L’automate programmable surveille l’état du robot : les accumulateurs sont-ils encore chargés, le mécanisme de tir fonctionnet-il correctement etc. ? Le réseau sans fil permet aux robots de la même équipe de communiquer entre eux, pour leur éviter de tenter de se prendre la balle les uns aux autres et pour marquer. Les capteurs de ligne blanche contribuent à déterminer la position. Le PC embarqué pilote les quatre roues par un module spécial. Chaque roue peut être actionnée et orientée individuellement. Il est donc possible de poursuivre la balle tout en effectuant une pirouette. Le manipulateur de ballon doit le garder aussi près que possible du robot, sans jamais le tenir réellement. Il n’est pas permis de coller le ballon. Le manipulateur de ballon fait en sorte que le robot puisse se déplacer en arrière et latéralement sans perdre le ballon. Le manipulateur sert aussi au tir en avant. Il maintient le ballon devant le mécanisme de tir, capable de l’expédier à une vitesse de 30 km/h. L’énergie du tir est délivrée par un ressort bandé en quelques secondes pour être relâché à l’instant choisi par le logiciel. Le match met en jeu huit robots en deux équipes de quatre. Ils jouent sur un terrain de 12 m par 8 m ; le match commence, au signal de l’arbitre, par la recherche du ballon. L’art consiste en suite à rouler vers le but adverse avec le ballon pour marquer, en évitant bien sûr de se laisser prendre le ballon. Dans le camp opposé, naturellement, le jeu consiste à prendre le ballon à l’adversaire avant qu’il marque un coup au but. Comme les robots sont entièrement autonomes, leur comportement doit être programmé à l’avance. Les collisions sont sanctionnées par un carton jaune, la récidive par un carton rouge et l’exclusion. Dès que la fenêtre de tir est suffisante, le robot tire au but. Il ne suffit pas de tirer fort, la vitesse et la tactique sont au moins aussi importantes. (070359-I) 137 Et pourtant il marche ! Batteries 4V8 Piles 6V 24 Piles (6V) Batteries (4V8) 22 5 6 +V E GND 7 8 9 10 Servo 11 +V E GND 12 1 6 21 VIN 2 SOUT SIN RES ATN IC1 P0 P15 P1 P14 P2 P13 P3 P12 P4 P11 P5 K1 * voir texte CB220 P10 P6 P9 P7 P8 4 1 7 2 3 20 19 18 17 16 3 * C1 100n C2 8 4 9 5 * 100n SUB D9 15 14 13 23 Servo 070353 - 11 C.Tavernier Si la majorité des robots réalisée par les amateurs se déplace au moyen de roues ou de chenilles, deux catégories occupent une place à part en raison de l’aspect spectaculaire de leurs mouvements : le robot hexapode, appelé aussi robot araignée (même si cette dernière a en réalité huit pattes !), et le robot marcheur. En effet, s’il peut sembler relativement facile de faire tourner des roues au moyen de moteurs, puisque c’est là le seul besoin d’un robot mobile classique, reproduire la marche, que ce soit celle d’un insecte avec l’hexapode ou celle d’un humain ave c le robot marcheur, peut paraître nettement plus difficile. Nous allons voir, avec cet article, comment y parvenir dans le cas d’un robot marcheur que nous avons choisi d’acquérir 138 en kit pour ce qui est de sa partie mécanique. En effet, si tout bon bricoleur peut aujourd’hui réaliser une base de robot mobile « classique », c’est à dire à roues ou à chenilles, la réalisation mécanique d’un robot marcheur est beaucoup plus délicate, principalement en raison de la particularité de sa marche que nous décrirons dans un instant. À notre connaissance il n’existe aujourd’hui que 2 kits de mécaniques de robots marcheurs vendus à un prix abordable : le célèbre Toddler de Parallax (www.parallax.com) et, plus près de chez nous, le Yeti d’Arexx Engineering (www.arexx.com). Comme ces deux robots fonctionnent quasiment de la même façon pour ce qui est du principe de leur marche, nous avons jeté notre dévolu sur le kit Yeti, distribué en France par Lextronic (www.lextronic.fr), car il est un peu moins coûteux que son frère de chez Parallax. Mais sachez que tout ce que nous allons écrire pour l’un sera vrai, à des variantes mineures près, pour l’autre. Ces robots marcheurs se composent donc tous deux de deux jambes rigides, en ce sens qu’elles n’ont pas d’articulation médiane sensée reproduire notre genou. Elles sont constituées par deux bras (c’est un comble pour des jambes !) formant un parallélogramme, et sont munies de pieds articulés de part et d’autre du plan formé par ce dernier. elektor - 7-8/2007 Bien que cela puisse sembler étonnamment peu, il suffit de deux servos de radiocommande normaux, c’est à dire non modifiés, pour faire marcher un tel robot. La première servo, clairement visible à l’avant du robot, commande les pieds au moyen de deux longues biellettes, tandis que l’autre, placé sous le ventre du robot, agit sur le bras arrière du parallélogramme de chaque jambe. Le décor étant planté, voyons comment un tel personnage peut marcher. Pour faciliter la compréhension de l’explication qui va suivre, nous allons utiliser les appellations droite et gauche mais cela n’est évidemment que tout relatif. Lorsque le robot est au repos, ses deux pieds sont à plat sur le sol, l’un à côté de l’autre. La servo des pieds tourne alors dans un sens de façon à faire basculer le corps du robot au dessus du pied gauche, ce qui a évidemment pour effet de faire décoller le pied droit du sol. La servo des jambes tourne alors à son tour, ce qui fait avancer la jambe droite qui est libre de se mouvoir puisque son pied est décollé du sol. La servo des pieds tourne ensuite dans l’autre sens ce qui fait basculer le corps du robot sur le pied droit et fait donc décoller maintenant du sol le pied gauche. Une nouvelle rotation de la servo des jambes fait alors avancer la jambe gauche qui est maintenant libre de se mouvoir, et le premier pas est ainsi terminé. Les condensateurs C1 et C2 appellent une remarque : C1 et C2 ne sont à mettre en place qu’en cas d’utilisation d’un BS II. En cas d’utilisation d’un CB 220, C1 sera remplacé par un strap et C2 ne sera pas implanté, ses 2 plots restant ouverts. Tout le reste n’est qu’affaire de programmation ; programmation reposant essentiellement sur l’instruction PWM dans le cas du Cubloc et sur PULSOUT dans le cas du Basic Stamp. Pour faire marcher notre robot, et comme vous l’avez compris à la lecture des explications qui précèdent, il suffit en effet de faire tourner les servos alternativement dans un sens ou dans l’autre et dans un ordre bien défini. Comme vous pouvez le constater à la lecture de ce texte, ou bien si vous avez déjà regardé les vidéos disponibles tant sur le site de Parallax pour son Toddler que sur le site de Lextronic pour le Yeti, le robot est en fait à la limite du déséquilibre permanent pendant sa marche, et celle-ci ne peut fonctionner correctement que si les masses qui le composent sont parfaitement bien réparties et ... si les mouvements des servos ne sont ni trop brusques, ni d’amplitude trop importante. Même si ces deux kits de robots marcheurs peuvent être vendus avec des platines électroniques, parfois très élaborées comme dans le cas du Yeti avec un processeur ATMega8 d’Atmel et son compilateur C ; un simple Basic Stamp II ou un Cubloc CB 220 suffit pour faire ses premiers pas (au propre comme au figuré !). Comme le montre la figure, valable pour ces deux microcontrôleurs qui sont, rappelons-le, compatibles broche à broche, il ne faut aucun composant actif autre que le microcontrôleur lui-même pour faire marcher notre robot. Elle génère, sur le port correspondant (0 pour P5 et 1 pour P6) un signal PWM dont le rapport cyclique est défini conjointement par rapport et période. L’avantage du Cubloc est que cette instruction permet la génération permanente du signal correspondant, dès lors qu’elle a été appelée au moins une fois. Dans le cas du Basic Stamp, l’instruction PULSOUT s’utilise de la façon suivante : Les entrées de commande des servos sont reliées à deux ports parallèles qui peuvent être quelconques dans le cas du Basic Stamp mais qui doivent impérativement être P5 et P6 dans le cas du Cubloc CB 220 car ses instructions PWM ne peuvent fonctionner que sur ces deux là. 7-8/2007 - elektor Nous vous proposons, en téléchargement sur le site d’Elektor ou bien encore sur le site de l’auteur (www.tavernier-c.com), deux listings sources complets : un pour Basic Stamp II et un pour Cubloc, destinés à faire marcher notre robot, mais voici quelques commentaires afin que vous soyez persuadés de leur simplicité et que vous puissiez les adapter à vos besoins sans difficulté. Rappelons tout d’abord que, dans le cas du Cubloc, l’instruction PWM s’utilise de la façon suivante : PWM port, rapport, période PULSOUT port, durée Elle génère une impulsion sur le port correspondant pendant un laps de temps égal à 2 µs que multiplie la valeur du paramètre durée. L’inconvénient de PULSOUT par rapport à PWM est que cette génération n’est pas répétitive. Il faut donc nécessairement faire appel à des boucles si l’on souhaite générer des impulsions répétitives, ce qui complique un peu la version Basic Stamp du programme par rapport à la version Cubloc. Rappelons enfin qu’une servo se place en position de repos lorsqu’il reçoit des impulsions de 1,5 ms et qu’il se déplace vers ses positions extrêmes dans un sens ou dans l’autre pour des impulsions de, respectivement, 1,0 ms ou 2,0 ms. Dès lors, la compréhension de l’un ou l’autre des listings proposés est évidente. Ainsi, pour mettre les pieds du robot au repos on écrit pour le Cubloc : PWM 0, 3150, 32768 PWM 1, 3150, 32768 Et pour le Basic Stamp II : FOR Pulses = 1 TO 100 STEP 5 PULSOUT TiltServo, 750 PULSOUT StrideServo, 750 PAUSE 25 NEXT Ce qui fait générer, dans les deux cas, des impulsions de 1,5 ms à destination des deux servos et les place donc en position de repos. Notez que, dans le cas du Cubloc, il convient d’ajuster les paramètres 3150 afin qu’ils amènent bien les servos dans leurs positions de repos tandis que, pour le Basic Stamp, il faut agir sur les deux paramètres 750 pour la même raison. Pour faire lever un pied, on écrira donc en Cubloc : FOR Position = 3150 TO 2850 STEP -1 PWM 0, Position, 32768 DELAY 1 NEXT Et en Basic Stamp : FOR Pulses = 750 TO 620 STEP -5 PULSOUT TiltServo, Pulses PULSOUT StrideServo, 750 NEXT Remarquez le surcroît de « complexité » induit par le fait que, contrairement à PWM, PULSOUT ne fonctionne pas en continu. Il faut en effet ajouter dans la boucle de « levé de pied » du Basic Stamp la génération des impulsions qui maintiennent au repos le servo des jambes. Dans le cas du Cubloc cette génération est assurée automatiquement par l’instruction PWM qui l’a initiée lors de la mise en position de repos des servos. Nous vous laissons le soin d’analyser la suite de ces deux listings vous-mêmes car, comme vous pouvez le constater, ils ne sont en fait que la succession des groupes d’instructions que nous venons de voir avec, à chaque fois, des paramètres numériques adaptés aux impulsions qu’il faut générer pour amener les servos dans les positions requises. Précisons avant de conclure que ces deux listings sont extraits : pour celui de Parallax du site Internet de Parallax (www.parallax. com) sur lequel nous vous incitons vivement à télécharger le document intitulé « Advanced Robotics with the Toddler Robot » (disponible en anglais au format pdf) qui contient une très bonne étude sur les différentes méthodes de programmation de la marche ; et pour le Cubloc du site Internet de Lextronic (www.lextronic. fr) que nous remercions tous deux pour leur collaboration. (070353-I) 139 La structure des fichiers HEX Comment ça marchait donc ? Luc Lemmens Ce mois-ci, une histoire qui n’aurait en fait aucune raison d’être. Lorsque l’on développe du logiciel pour un microcontrôleur, le compilateur ou l’assembleur devrait, en fin de processus, générer un fichier pouvant être programmé dans la mémoire de programme. Bien souvent, ce fichier aura un format connu sous le nom de IntelHEX (Intellec), un fichier qui comporte, outre le code-machine, également les adresses auxquelles ce code doit être placé. Il intègre également des sommes de vérification (checksum) servant à s’assurer de la validité du code. En fait, la structure exacte de ce fichier ne devrait pas présenter le moindre intérêt pour le programmeur, il devrait lui suffire de programmer la mémoire pour être arrivé à ses fins et en avoir terminé. Mais les choses se compliquent lorsque le produit généré par l’assembleur ou le compilateur paraît différer de ce à quoi on s’attendait. On se trouve, dans bien des cas, forcé de mettre le nez dans le fichier .HEX pour voir ce qui sera vraiment transféré dans la mémoire de programme. On découvre souvent dans ce fichier les bits de configuration du contrôleur pour le paramétrage de l’oscillateur, du chien de garde, de la protection anticopie et autres paramètres similaires. Les occasions d’examiner un fichier .HEX sont rares, ce qui explique qu’il faille à chaque fois se creuser les méninges pour « y retrouver ses petits ». Un fichier .HEX est constitué d’enregistrements (records). Chacun d’entre eux comporte son type, sa longueur, l’adresse à laquelle doivent être placées les données et une somme de vérification. Il existe 6 types d’enregistrements différents qui, au demeurant, ne sont pas toujours tous utilisés : • Data record (avec tous les formats) • End of File record (avec tous les formats) • Extended Segment Address record (pas pour les formats 8 bits) • Start Segment Address record (pas pour les formats 8 bits) • Extended Linear Address record (uniquement pour formats 32 bits) • Start Linear Address record (uniquement pour formats 32 bits) Chaque enregistrement présente la structure représentée en figure 1. RECORD MARK ’:’ 1-byte RECLEN LOAD OFFSET RECTYP 1-byte 2-bytes 1-byte INFO or DATA n-bytes CHKSUM 1-byte Le champ INFO/DATA est constitué d’un certain nombre d’octets (cf. RECLEN) dont l’interprétation dépend du type de l’enregistrement. La somme de vérification est calculée à partir du complément à deux de la somme des octets des champs allant de RECLEN au dernier octet de INFO/DATA. L’addition de la somme des octets à la somme de vérification a pour résultat « 0 ». Extended Linear Address Record (uniquement pour formats 32 bits) RECORD MARK ’:’ 1-byte RECLEN ‘02’ 1-byte LOAD OFFSET ‘0000’ 2-bytes RECTYP ‘04’ 1-byte ULBA CHKSUM 2-bytes 1-byte Dans le cas de fichiers .HEX 8 bits on disposait de 2 octets (LOAD OFFSET) pour indiquer l’adresse. Avec ce type d’enregistrement sont définis, dans ULBA (Upper Linear Base Address), les bits 16 à 31 d’une adresse, le LOAD OFFET des enregistrements de données qui suivent indiquant les bits 0 `a 15 de l’adresse absolue définitive. Extended Segment Address record (pour formats 16 et 32 bits) RECORD MARK ’:’ 1-byte RECLEN ‘02’ 1-byte LOAD OFFSET ‘0000’ 2-bytes RECTYP ‘02’ 1-byte USBA CHKSUM 2-bytes 1-byte L’enregistrement à 16 bits Extended Segment Address spécifie les bits 4 à 19 de la SBA (Segment Base Address), les bits 0 à 3 de la SBA sont à « 0 ». Le LOAD OFFET des enregistrements de données qui suivent donne l’adresse finale. Data record (pour tous les formats) RECORD MARK ’:’ 1-byte RECLEN LOAD OFFSET 1-byte 2-bytes RECTYP ‘00’ 1-byte DATA CHKSUM n-bytes 1-byte Ce dernier comporte au maximum 256 (RECLEN) octets de données, LOAD OFFSET déterminant (en combinaison ou non avec ULBA ou SBA) l’endroit de la mémoire où sera placé le premier octet de données de l’enregistrement. Les octets suivants sont placés, incrémentalement, à l’adresse qui suit. Les Start Linear Address record et Start Segment Address record ne sont pas utilisés par les microcontrôleurs, de sorte que nous n’en parlons pas dans le cadre de cet article. Le début est identifié par un « : ». RECLEN indique le nombre d’octets de données de l’information. LOAD OFFSET indique avec un offset à 16 bits où doivent être placées les octets de données et n’a de sens qu’avec des enregistrements de données, les autres enregistrements comportant tous un « 0000 » à cet endroit. End of File record (pour tous les formats) RECTYP indique le type d’enregistrement : « 00 » = Data record « 01 » = End of File record « 02 » = Extended Segment Address record « 03 » = Start Segment Address record « 04 » = Extended Linear Address record « 05 » = Start Linear Address record Comme on peut l’imaginer, cet enregistrement donne la fin du fichier de programmation. Il ne nous reste plus qu’à souhaiter que vous n’ayez jamais besoin de ces connaissances ! Il existe bien entendu bien d’autres formats que le format Intel qui est cependant le plus répandu; les techniciens adorent les standards ce qui ne les empêche pas d’en imaginer toujours d’autres... RECORD MARK ’:’ 1-byte RECLEN ‘00’ 1-byte LOAD OFFSET ‘0000’ 2-bytes RECTYP ‘01’ 1-byte CHKSUM ‘FF’ 1-byte (075034) 140 elektor - 7-8/2007 Racer à hydrogène Modèle réduit à pile à combustible Ludwig Retzbach La fabrication en série de voitures à piles à combustible est encore loin. On peut toutefois se procurer les premières piles à combustible à prix abordable pour réaliser ses propres expériences ou trouver des objets de démonstration. C’est un objet de ce genre, le H-Racer, que propose Horizon, une entreprise chinoise de Shanghai, dans une sorte de boîte de construction pédagogique. Le coffret comprend, avec le racer à hydrogène, une station service d’hydrogène alimentée par ces cellules solaires. Le châssis du modèle réduit (16 cm de long sur 7,5 cm de large), en plexiglas, est équipé de quatre roues, pneus caoutchouc, d’un moteur à courant continu, d’une boîte à deux vitesses. Cette partie est montée et câblée, avec les interrupteurs nécessaires. La mini-pile à combustible (53 x 32 x 15 mm) ainsi que le petit réservoir d’hydrogène ne sont pas longs à encliqueter. Le réservoir se compose d’un ballon gonflable contenu par un petit cylindre. La déformation du ballon donne une certaine idée du combustible restant. Le bolide à hydrogène est prêt à fonctionner dès que sa valve de recharge est engagée et que les petits tuyaux sont enfilés. Une fois posée la carrosserie de plexiglas, fixée par quatre vis au châssis, l’ensemble a une allure d’enfer et des plus futuristes. Reste à faire le plein du réservoir d’hy- 7-8/2007 - elektor drogène. Cette étape illustre bien qu’il est nécessaire de produire l’hydrogène avec du courant électrique (par électrolyse de l’eau) avant qu’il puisse à son tour produire du courant dans la pile à combustible. De jour et, de préférence au soleil, le module solaire fourni délivre le courant nécessaire à la cellule d’électrolyse. Les jours de pluie ou la nuit, deux piles mignon serviront d’alimentation de secours à la cellule. Des bulles de gaz dans la cellule remplie d’eau distillée et purgée d’air à l’aide de la seringue fournie signalent le début de la production d’hydrogène. Le clignotement de deux LED bleues sur le réservoir confirme que la station fonctionne. Le ballon commence également à se remplir. Le fabricant recommande de limiter l’électrolyse à 20 minutes, la vessie bleue bien gonflée devrait alors coller aux parois du cylindre de plexiglas. Son plein ainsi fait, la H-Racer à traction avant file ensuite sur le plancher et se préCaractéristiques techniques Caractéristiques annoncées Pile à combustible de la H-Racer Dimensions [mm] : 32 x 32 x 10 Masse : 27,3 g Tension de sortie continue : 0,6 V Courant de sortie : 0,4 A cipite à fond de train contre le premier obstacle venu – si l’on ne l’a pas arrêté avant. Une direction et une (télé-)commande lui font malheureusement défaut. La faible capacité du réservoir d’hydrogène limite sa portée à quelque 100 m. Selon son fabricant, le petit bolide devrait rouler plus de 300 m (3 minutes à 7 km/h environ). Nous n’avons toutefois pas atteint ces trois minutes de course lors de ce premier essai. Caractéristiques, adresses Quelques caractéristiques techniques sont rassemblées dans le tableau où vous retrouverez, entre parenthèses, les mesures ou les commentaires de l’auteur. En France, la H-Racer est commercialisée par la CETH (prix non disponible). On peut également la commander en Allemagne (99 €, port inclus) sur le site [1]. Pour en savoir plus sur les produits « éducatifs » de Horizon [2], vous pouvez consulter le magasin en ligne [3] du fabricant. Il y en a pour presque toutes les bourses, de la voiture à hydrogène prête-à-monter à 59 $US, à la pile à combustible de 300 W pour 2 999 $US. Nous pouvons en déduire que le prix d’une voiture à hydrogène ne serait pas encore très abordable… Puissance de sortie : 240 mW (070116-I) Module solaire de la station de H2 [1] www.techgalerie.de (allemand) Mesure: force électromotrice 3 V, courant de court-circuit 0,3 A [2] www.horizonfuelcell.com (anglais) [3] http://store.horizonfuelcell.com (anglais) 141 info & marché avant première EXTRA! Avec chaque magazine : PLATINE DE COMMANDE DE LED Dotée de tous les composants ! Essayez-vous aux LED blanches ! Banc d’essai : modules ampli audio Réaliser son (ses) propre(s) amplificateur(s) audio est (et reste) un violon d’Ingres très pratiqué, car énormément apprécié, par nombre d’électroniciens audiophiles. Ceux-ci ont la possibilité, outre d’utiliser l’un des projets décrits régulièrement dans Elektor, d’opter pour des modules ampli audio de sortie (tout montés ou encore en kits) proposés par différents fabricants. Il ne reste plus qu’à les monter, épaulés par une alimentation, dans un coffret de caractéristiques convenables. Nous avons, pour le numéro à venir, rassemblé un certain nombre de modules ampli de puissance et leur avons fait subir des tests sévères dans nos laboratoires. Dans le numéro de septembre nous vous proposerons une description exhaustive des modules testés et des résultats de mesure. Traceur GPS Si, il y a à peine deux lustres, connaître sa position avec précision était réservé aux militaires (systèmes à centrale inertielle), il n’y a rien de plus commun aujourd’hui que de savoir, grâce au GPS (Global Positioning System), presque au mètre près, où l’on se trouve exactement. Il est également envisageable cependant d’utiliser un récepteur GPS non pas pour connaître sa propre position mais celle d’un objet (un véhicule par exemple). C’est à cet effet que nous avons développé, dans le laboratoire d’Elektor, ce Traceur GPS (bien mieux qu’un simple positionneur GPS). Il s’agit d’un montage très compact constitué d’un modem GSM intelligent et d’un récepteur GPS à antenne active. En cas d’envoi d’un message SMS vers le modem GSM, le récepteur répond en envoyant ses coordonnées. Il est possible ainsi de toujours savoir où se trouve l’objet doté de ce Traceur GPS. Des raisons rédactionnelles impératives peuvent se traduire par un non-respect à la lettre de cette avant-première du prochain numéro. Attention le numéro de septembre 2007 devrait être en kiosque à partir du 22 août 2007. Le site Elektor - du sang neuf ! De par l’approche adoptée « Projet par Projet » lors de la construction, le visiteur de cette nouvelle mouture du site trouvera sur la même page, tout ce qui a trait à un projet donné : téléchargement de l’article au format .pdf, du logiciel, commande (platine et composants), mais aussi informations additionnelles et mises à jour. Magazine : fait apparaître le sommaire du numéro le plus récent. Un clic sur le titre concerné permet de lire le début de l’article concerné. Collection : Permet de remonter le temps grâce aux archives. Pour le moment, tous les articles depuis l’année 2000 sont téléchargeables, un moteur de recherche permettant de travailler par année et/ou par mot-clé. Quoi de neuf sinon sur www.elektor.fr : • Un Forum lecteur • Petites Annonces Gratuites • Nouvelles vous concernant • Courriel Hebdomadaire Gratuit • FAQ • e-CHOPPE, pour tous vos achats 148 elektor - 7-8/2007