Voici un petit robot facile à construire et à programmer, qui ne nécessite pas de programmateur spécifique.
Le CI à été conçu avec Kicad le DAO gratuit (et complet) pour électronique.
Le microcontrôleur utilisé peut être un AT90S2313 ou ATtiny2313 de chez AMTEL.
Cette Cigale à été réalisée grâce aux logiciels gratuits Kicad pour l'électronique et Wings3D pour les composants en 3D.
La programmation est en langage BASIC avec le logiciel en démo BASCOM-AVR ici : http://www.mcselec.c.
Pour finir une vidéo :
Liste des composants
Pour les deux cartes:
1 plaque époxy présensibilisé 100 x 75 mm
Carte de commande:
1 microcontrôleur AT90S2313 ou ATtiny2313
1 quartz 4 MHz
2 microrupteurs (modèle longueur 20mm)
1 barrette picots sécables femelle(pour le connecteur de programmation et les ports libres du microcontrôleur)
1 barrette picots sécables mâle (pour les connecteurs des servos et l'alimentation)
1 condensateur 100 NanoFarad (pour le reset)
1 résistance 10 KHoms (reset)
1 condensateur 10 MicroFarad (filtrage et découplage alimentation)
2 servos FUTABA S3003
1 coupleur 4 accus AA 1,2 vols
4 accus NiMh AA 1,2 volts
Carte gestion des yeux:
1 CD4001
1 LDR
2 LEDs vertes ou rouges
2 résistances 10 KOhms (10 000 Ohms)
1 résistance 220 Ohms
1 résistance 2,2 MOhms (2 200 000 Ohms)
1 condensateur 470 NanoFarad
1 transistor PNP (type courant)
1 mini résistance ajustable ronde
Cordon de programmation (In Situe)
5 picots barrette sécable femelle
1 fiche DB25 mâle
3 résistance 330 Ohms
1 cordon 5 fils (genre fil téléphone mais souple) 1 mètre
Une petite explication sur le fonctionnement des Yeux de Sissi : sous un éclairage normal les yeux clignotent si la lumière manque les yeux se mettent en fixe.
Voici le schéma:
Le seuil de lumière (réglable grâce à l'ajustable TRIM)est transmis à la port NOR U1A et inverser par U1B.
Ce signal est transmis à la broche 8 de U1C qui avec avec U1D forme un oscillateur astable commandé, tant que la lumière est suffisante, l'oscillateur fonctionne et les yeux clignotent par le biais du transistor PNP Q1, si la lumière devient insuffisante, le niveau présent sur la broche 8 change d'état, l'oscillateur se bloque et les yeux passent au fixe.
Les Plans
Ici on va voir comment créer l'ossature et l'habillage de la cigale.
Passons aux plans : l'ossature est composée de deux équerres en aluminium de 20 mm de largeur
assemblées par les fixations des servomoteurs.
Pour les pattes utiliser des rayons de bicyclette ou de la corde à piano, pour l'habillage, on peut utiliser une chemise (range dossiers)plastique
que l'on découpe et que l'on fixe avec des vis parker comme sur l'image :
Une fois l'habillage terminer on peint avec de la peinture à l'eau (genre boite à peinture 16 couleurs) et on vernit avec un vernis en bombe.
Voici l'aspect des divers modules version 4001 en place :
Pour les antennes j'ai pris du fil électrique en cuivre, j'ai dû les ligaturer sur les mini-rupteurs avec du fil téléphone car on ne peut pas les souder sur les lamelles. On trouve pas mal d'images de cigales sur le net pour s'inspirer.
Programmation BASIC
Exemple commenté de programmation en BASIC du robot, et lien vers un tutoriel très intéressant sur les microcontrôleurs AMTEL.
Tout d'abord voici un lien à ne pas manquer pour ceux qui débutent sur les microcontrôleurs AMTEL: http://www.atmicroprog.com/.
Maintenant voici un exemple de programmation de la Cigale en BASIC (BASCOM AVR 1.11), avec quelques commentaires :
Code : Bascom
'PROGRAMME Bug Cigale.bas 09/2010 ELEKTOR inspired inspiré par ELEKTOR 'mic-josi@orange.fr Build 1.3' specify the used micro - spécification du microcontroleur ici un AT90S2313 mais
'un ATtiny2313 fonctionne aussi bien
$regfile = "2313def.dat" ' used crystal frequency -- Quartz utilisé$crystal = 4000000'Servo's need a pulse in order to operate'with the config statement CONFIG SERVOS
'we can specify how many servo's we'will use and which port pins are used. A maximum
'of 14 servos might be used'The SERVO statements use one byte for an interrupt counter and the TIMER0'This
'means that you can not use TIMER0 anymore'The reload value specifies the interval of the timer in uS 'les Servos on besoin d'ordres par impulsions pour fonctionner'CONFIG permet de 'déclarer les SERVOS nous pouvons spécifier le nombre de servoà Utiliser et les 'broches des ports utilisées.
'Un maximum de 14 servos peut être utilisés.'Les Servos Utilisent Un Octet Pour le Compteur d'interruption et le TIMER0'Cela signifie que vous ne pouvez plus utiliser plus TIMER0'La valeur de reload 'spécifie l'intervalle du Timer en µS 'we use 2 servos with 7 uS resolution(steps)'utilisation de 2 Servos avec une résolution de 7 µS Config Servos = 2 , Servo1 = Portd.0 , Servo2 = Portd.6 , Reload = 7 'we must configure the port D pins used to act as output'configuration des ports D en sortie Ddrd.0 = 1 ' servo 1 (avant) Ddrd.6 = 1 ' servo 2 (arrière) 'we must turn on the global interrupt'on active les interruptions Enable Interrupts 'the servo() array is created automatic.'un tableau servo() est automatiquement créé 'we must configure the port B pins used to act as input'Pinb is for the hardware test (microruptors)'Portb is for the software test 'configuration des ports B en entrée'Pinb dialoguedirectement avec les micros 'rupteurs (moustaches)Portb dialogue avec le programme Config Pinb.0 = InputPortb.0 = 1Config Pinb.3 = InputPortb.3 = 1 'we need to position the legs at the center of the body'see lr adjustable leegs on the photo 'nous devons positionner les pattes au centre du corps'voir lr réglage des pattes sur la photoServo(1) = 13Servo(2) = 13 Dim I As Byte ' variableDim D As BitDim G As BitBegin: 'main program'=========================I = 0D = 0G = 0Do 'boucle loop'Test mustache left moustache gaucheIf Pinb.0 = 0 ThenG = 1Servo(1) = 13Waitms 10Servo(2) = 13Waitms 10Gosub Arriered 'yes goto rightbackEnd If 'Test mustache right moustache droiteIf Pinb.3 = 0 ThenD = 1Servo(1) = 13Waitms 10Servo(2) = 13Waitms 10Gosub Arriereg 'yes gotoleftbackEnd If ' Sissi the cicada walk straight (on flat)' Sissi la cigale marche tout droit (sur sol plat)Servo(1) = 7Waitms 5Servo(2) = 13Waitms 25Servo(1) = 14Waitms 5Servo(2) = 9Waitms 25Loop ' fin de boucle '==========================SOUS PROGRAMMES===================================== '==========================='Left back Arrière gaucheArriereg:If D = 1 ThenG = 0For I = 1 To 15 Servo(2) = 18 Servo(1) = 14Waitms 30Servo(2) = 12Servo(1) = 12Waitms 30NextFor I = 1 To 7 Servo(2) = 19 Servo(1) = 14Waitms 30Servo(2) = 12Servo(1) = 12Waitms 30Next 'Servos In Order Beford RuturnServo(1) = 13Waitms 10Servo(2) = 13Waitms 10D = 0End If '============================' right back Arrière droiteArriered:If G = 1 ThenD = 0For I = 1 To 10 Servo(2) = 5 Servo(1) = 6Waitms 30Servo(2) = 12Servo(1) = 14Waitms 30NextFor I = 1 To 7 Servo(2) = 16 Servo(1) = 12Waitms 30Servo(2) = 12Servo(1) = 6Waitms 30Next Servo(1) = 13Waitms 10Servo(2) = 13Waitms 10G = 0End IfReturn End ' END OF ALL 'FIN du PROGRAMME
On peut améliorer la façon dont recule la Cigale devant un obstacle, j'ai programmé une autre façon de reculer comme sur la vidéo ou Sissi tourne mieux mais est en limite d'équilibre.
Maintenant une copie d'écran pour ceux qui veulent aller au plus direct de la programmation:
Pour les Fans D'ELEKTOR
pour les Fans d'ELEKTOR voici la solution pour programmer SISSI
j'ai fait le test avec le programme ELEKTOR qui m'avait posé problème, la cause .....?
les fusibles !
On peut faire marcher Sissi façon ELEKTOR pour cela:
Se rendre sur le site grâce à ce lien:
www.elektor.fr/magaz [...] rand-pas.67863.lynkx
télécharger le programme 040071-11.zip pour BASCOM AVR dans téléchargements gratuit au bas de la page
on peut aussi télécharger l'article complet pour 10 unités de crédit (environ 2 Euros)
La copie d'écran du shéma modifié et de la programmation des fusibles (dans BASCOM AVR) est téléchargeable sur ce lien:
www.cijoint.fr/cjlin [...] 01102/cijbgRkjBw.zip
pour cette modif on peut supprimer le module de gestion des yeux de Sissi et les connecter sur les ports D1 et D5
comme sur la copie d'écran du shéma, ils seront alors gérés par le microcontrôleur .
Nota: si la cigale marche en arrière à la mise en route, il suffit de permuter le branchement des servos avant et arrière
Voila je pense que la modif vaut aussi le coups et ci joint la traduction des commentaires du programme:
Code : Bascom
' Awalker_2.bas 7-11-2002 1st version, A. Vreugdenhil ' 31-07-2004 adapted to AVR_Bascom version ' µP-controlled walker, four legs code en BASCOM AVR $regfile = "2313def.dat" ' ou "ATtiny2313.dat" $crystal = 4000000 ' 4 Mhz Ddrd.0 = 1 ' servo 1 (avant) Ddrd.6 = 1 ' servo 2 Ddrd.1 = 1 ' Led 1 Ddrd.5 = 1 ' Led 2 Config Pinb.0 = Input Portb.0 = 1 Config Pinb.3 = Input Portb.3 = 1 Config Servos = 2 , Servo1 = Portd.0 , Servo2 = Portd.6 , Reload = 10 Enable Interrupts Servo(1) = 82 Servo(2) = 82 '********* Declaration des variables ******************************* Dim Sense As Byte ' avant = 1, arrière = 2 Dim Direction As Byte ' gauche = 2, droite = 1, tout droit = 0 Dim Vp As Byte Dim Ap As Byte Dim Counter As Byte Dim Count2 As Byte Dim Loop1 As Byte Dim Difference As Byte Sense = 2 'arriere Direction = 0 'tout droit Counter = 4 Portd.5 = 0 'led 2 Off Begin: 'programme principal '**********lecture des antennes en premier ************************** Do 'boucle principale Direction = 0 Sense = 1 'en avant tout droit Gosub Step1 'appel sous routine du sens Toggle Portd.1 'led 2 bascule Toggle Portd.5 'led 1 bascule Waitms 35 'temps d'attente If Pinb.0 = 0 Then 'Test antenne droite Portd.5 = 0 'led 2 eteinte Portd.1 = 1 'led 1 allumée Direction = 1 'a droite Gosub Back 'appel ss routine arriere,droite Elseif Pinb.3 = 0 Then 'antenne gauche Direction = 2 'a gauche Portd.1 = 0 'led 2 allumee Portd.5 = 1 'led 1 eteinte Gosub Back 'appel ss routine arriere,gauche Sense = 1 'en avant Direction = 2 'droite For Loop1 = 1 To 60 Gosub Step1 Waitms 35 'boucle de marche Next Loop1 End If Loop ' fin de la boucle principale Back: '*** sous programme arriere *** Sense = 2 'arriere For Loop1 = 1 To 75 Gosub Step1 Waitms 35 ' boucle de pas Next Loop1 ' Sense = 1 , Direction = 2 = en avant gauche ! ' Sense = 1 , Direction = 1 = "comme une horlge" bons pas en avant !!!!!! ' Sense = 2 , Direction = 1 = en arriere droite ! ' Sense = 2 , Direction = 2 = en arriere gauche ! '*** make step *** Step1: If Sense = 1 Then 'avant Counter = Counter + 1 End If If Sense = 2 Then 'arriere Counter = Counter - 1 End If 'raz avant If Counter = 13 Then 'seulement 12 pas Counter = 1 End If 'raz arriere If Counter = 0 Then Counter = 12 End If 'difference angulaire pour les pas If Sense = 1 Then Difference = 10 Elseif Sense = 2 Then Difference = 8 End If 'deplacement tout droit Count2 = Counter + Difference Vp = Lookup(counter , Dta1) 'pattes avant Ap = Lookup(count2 , Dta1) 'pattes arriere If Direction = 1 Then 'deplacement gauche Vp = Vp + 5 Ap = Ap - 5 Elseif Direction = 2 Then 'droite Vp = Vp - 5 Ap = Ap + 5 End If Servo(1) = Vp 'mouvement des pattes avant Servo(2) = Ap 'mouvement des pattes arriere Return End 'fin du programme '********** Donnees de commandes de deplacement des servos *********** Dta1: Data 00 , 67 , 72 , 77 , 82 , 87 , 92 , 97 , 92 , 87 , 82 , 77 , 72 Data 67 , 72 , 77 , 82 , 87 , 92 , 97 , 92 , 87 , 82 , 77 , 72 , 67
Un video du Robot Cigale
Aucun commentaire:
Enregistrer un commentaire