Pour l'instant, mon "robot" n'est muni d'aucun capteur, mais il peut avancer, reculer et tourner en suivant un sketch préétabli (c'est un début!).
Pour piloter les deux moteurs, mon Arduino est branché à un circuit intégré L293D soudé sur une plaque perforée pour faciliter un peu les branchements (je n'ai pas fait eu la patience de construire un shield superposable cette fois-ci).
L'illustration ci-dessous montre comment le L293D est branché à l'Arduino, aux moteurs et à la pile qui alimente les moteurs (cliquez sur l'image pour l'agrandir).
Finalement, voici le sketch qui vérifie que tout fonctionne correctement: le robot avance pendant quelques secondes, tourne sur lui même (les deux roues tournent en sens contraire), puis recule un peu.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Sketch qui fait avancer, reculer, tourner un robot roulant (smart car). | |
Le robot ne comporte aucun capteur, le mouvement est prédéfini. | |
http://electroniqueamateur.blogspot.com/2012/01/debuts-en-robotique.html | |
*/ | |
#define motorPin1a 3 // Marche avant du premier moteur | |
#define motorPin1b 4 // Marche arrière du premier moteur | |
#define speedPin1 9 // L293D enable pin pour le premier moteur | |
#define motorPin2a 5 // Marche avant du deuxième moteur | |
#define motorPin2b 6 // Marche arrière du deuxième moteur | |
#define speedPin2 10 // L293D enable pin pour le deuxième moteur | |
int Mspeed = 0; | |
unsigned long time; | |
void setup() { | |
// réglage des broches à output | |
pinMode(motorPin1a, OUTPUT); | |
pinMode(motorPin1b, OUTPUT); | |
pinMode(speedPin1, OUTPUT); | |
pinMode(motorPin2a, OUTPUT); | |
pinMode(motorPin2b, OUTPUT); | |
pinMode(speedPin2, OUTPUT); | |
} | |
void loop() { | |
Mspeed = 500; // 0 à 1023 | |
// marche avant pendant 5 secondes | |
time = millis(); | |
while((millis()-time) < 5000){ | |
analogWrite(speedPin1, Mspeed); | |
digitalWrite(motorPin1a, LOW); | |
digitalWrite(motorPin1b, HIGH); | |
analogWrite(speedPin2, Mspeed); | |
digitalWrite(motorPin2a, LOW); | |
digitalWrite(motorPin2b, HIGH); | |
} | |
// on tourne sur place | |
time = millis(); | |
while((millis()-time) < 2000){ | |
analogWrite(speedPin1, Mspeed); | |
digitalWrite(motorPin1a, LOW); | |
digitalWrite(motorPin1b, HIGH); | |
analogWrite(speedPin2, Mspeed); | |
digitalWrite(motorPin2a, LOW); | |
digitalWrite(motorPin2b, LOW); | |
} | |
// marche arrière pendant 4 secondes | |
time = millis(); | |
while((millis()-time) < 4000){ | |
analogWrite(speedPin1, Mspeed); | |
digitalWrite(motorPin1a, HIGH); | |
digitalWrite(motorPin1b, LOW); | |
analogWrite(speedPin2, Mspeed); | |
digitalWrite(motorPin2a, HIGH); | |
digitalWrite(motorPin2b, LOW); | |
} | |
} |
Prochaines étapes: contrôler mon véhicule au moyen d'un joystick, ajouter des capteurs pour en faire un suiveur de ligne, éviter les obstacles au moyen d'un capteur à ultrasons...
Concernant le contrôle de moteurs à courant continu avec un Arduino, d'autres options s'offrent à vous: utilisation du L298N, utilisation du L9110S, utilisation du L6205, utilisation d'un pont en H de fabrication maison, et utilisation d'un relais DPDT.
De plus, le L293D dont on parle dans le présent billet peut également être utilisé pour contrôler un moteur pas à pas.
Yves Pelletier (Twitter, Facebook)
salut
RépondreSupprimerMoi je m’appelle Rachid je suis africain d'origine béninoise.j'ai la passion pour les métiers industriels comme les télécoms ,l’électronique.Mais il se fait que mon diplôme du BAC n’équivaut pas aux critères exigés.je suis actuellement embarrassé, déprimé parce que je suis sur le point de laisser tomber mon rêve.je m’adresse a vous avec ce présent écrit en quête d'un espoir , celui de me donner un coup de main.ma demande d'aide consiste a ce que comme le dis le nom de votre blog de me donner des cours préliminaires d’électronique en ligne.Cela est mon plus grand espoir
émail :rachidali87@yahoo.fr
MERCI et en attente de votre réponse
Ce blog n'a pas la prétention d'offrir un cours d'électronique, et je ne prévois pas que ça devienne un jour son mandat: il ne sert qu'à partager mes découvertes.
RépondreSupprimerPour des cours, vous pourriez peut-être essayer ceci.
Bonjour,
RépondreSupprimerj'aimerais savoir quels sont les modèles de moteurs qui ont été utilisés ici?
Merci d'avance pour les réponses.
Bonjour,
SupprimerCe sont des moteurs 6 V munis d'un motoréducteur. Pour plus de détails, vous pouvez faire une recherche des mots clés "Smart Car Robot Plastic DC 6 gear Motor" sur eBay.
bonjour je voudrais savoir c'est quoi comme type de capteur merci d'avance.
RépondreSupprimerBonjour,
RépondreSupprimerJ'ai fait votre montage avec le 293 D et 2 moteur classique, je n'ai aucune puissance, je dois lance les moteur a la main, auriez vous une idée ?
Merci