Aller au contenu


Information tutoriel

  • Ajouté le: nov. 02 2010 11:07
  • Date Updated: sept. 14 2014 11:01
  • Lectures: 16394
 


* * * * *
1 Notes

Robot Cigale

Posté par Mic* on nov. 02 2010 11:07
Image IPB
...... Sissi la Cigale ......

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

Image IPB

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:

Image IPB

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.

Image IPB

Image IPB

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 :

Image IPB

Image IPB

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 :

Image IPB

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 = Input
Portb.0 = 1
Config Pinb.3 = Input
Portb.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 photo
Servo(1) = 13
Servo(2) = 13


Dim I As Byte ' variable
Dim D As Bit
Dim G As Bit
Begin: 'main program
'=========================
I = 0
D = 0
G = 0
Do
'boucle loop
'Test mustache left moustache gauche
If Pinb.0 = 0 Then
G = 1
Servo(1) = 13
Waitms 10
Servo(2) = 13
Waitms 10
Gosub Arriered 'yes goto rightback
End If

'Test mustache right moustache droite
If Pinb.3 = 0 Then
D = 1
Servo(1) = 13
Waitms 10
Servo(2) = 13
Waitms 10
Gosub Arriereg 'yes gotoleftback
End If

' Sissi the cicada walk straight (on flat)
' Sissi la cigale marche tout droit (sur sol plat)
Servo(1) = 7
Waitms 5
Servo(2) = 13
Waitms 25
Servo(1) = 14
Waitms 5
Servo(2) = 9
Waitms 25
Loop ' fin de boucle


'==========================SOUS PROGRAMMES=====================================




'===========================
'Left back Arrière gauche
Arriereg:
If D = 1 Then
G = 0
For I = 1 To 15
Servo(2) = 18
Servo(1) = 14
Waitms 30
Servo(2) = 12
Servo(1) = 12
Waitms 30
Next
For I = 1 To 7
Servo(2) = 19
Servo(1) = 14
Waitms 30
Servo(2) = 12
Servo(1) = 12
Waitms 30
Next

'Servos In Order Beford Ruturn
Servo(1) = 13
Waitms 10
Servo(2) = 13
Waitms 10
D = 0
End If

'============================
' right back Arrière droite
Arriered:
If G = 1 Then
D = 0
For I = 1 To 10
Servo(2) = 5
Servo(1) = 6
Waitms 30
Servo(2) = 12
Servo(1) = 14
Waitms 30
Next
For I = 1 To 7
Servo(2) = 16
Servo(1) = 12
Waitms 30
Servo(2) = 12
Servo(1) = 6
Waitms 30
Next

Servo(1) = 13
Waitms 10
Servo(2) = 13
Waitms 10
G = 0
End If
Return

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:

Image IPB


Pour les Fans D'ELEKTOR

pour les Fans d'ELEKTOR voici la solution pour programmer SISSI Image IPB
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 sous routine arriere et a 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 sous routine arriere et a 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