
Si je fais appelle a vos connaissances aujourd’hui c'est car autrement je crois que je vais finir par explosé mon robot à coups de marteau ^^
J'ai construit il y a peut un petit robot eviteur d'obstacles basé sur Arduino et comportant, pour l'instant, qu'un capteur ultrasonique ( SRF04 ) à l'avant et mes moteurs sont pilotés à l'aide d'un L293NE.
J'ai donc fais mon propre shield moteur basé sur ce CI Comme ceci avec comme Vcc1, les 5V de l'arduino et comme Vcc2, 7,2V provenant d'une batterie externe.
J'ai ensuite rédigé mon code ( ce qui devais s’avèré très simple étant donné la simplicité d'utilisation des différents composants ) et j'ai ensuite testé le robot.
C'est la que les ennuis on commencés. Tous d'abord, la distance en centimètre provenant de mon capteur et s'affichant sur le moniteur série ne fonctionne plus bien ( J'avais fais le test à part et tout marchais nickel ), en effet les donné qui s'affiche sont désormais à peut près aléatoire et reste de temps en temps bloqué sur une valeur ( faible en général ).
Ensuite vient le problème des moteurs, ils ne fonctionnent pas du tout comme je voudrais qu'ils fonctionne. Quand j'allume mon robot, ils se mettent à tourner dans des sens et surtout à des vitesses différentes alors que dans mon code, il n'y a aucune notion de vitesse qui rentre en compte.
Sinon, mes moteurs sont des petits moteurs 3V classiques.
Voila mon code ( J'ai une librairie incluse pour le capteur ) :
#include <DistanceSRF04.h> DistanceSRF04 Dist; int distance; int motor1Pin1 = 4; // pin 2 on L293D int motor1Pin2 = 5; // pin 7 on L293D int enable1Pin = 3; // pin 1 on L293D int motor2Pin1 = 7; // pin 10 on L293D int motor2Pin2 = 6; // pin 15 on L293D int enable2Pin = 2; // pin 9 on L293D void setup() { Serial.begin(9600); Dist.begin(13,12); // set the motor pins as outputs: pinMode(motor1Pin1, OUTPUT); pinMode(motor1Pin2, OUTPUT); pinMode(enable1Pin, OUTPUT); pinMode(motor2Pin1, OUTPUT); pinMode(motor2Pin2, OUTPUT); pinMode(enable2Pin, OUTPUT); // set enablePins high so that motor can turn on: digitalWrite(enable1Pin, HIGH); digitalWrite(enable2Pin, HIGH); } void loop() { distance = Dist.getDistanceCentimeter(); Serial.print("\nDistance in centimers: "); Serial.print(distance); delay(50); //make it readable // check the average distance and move accordingly if (distance <= 10){ // go backwards digitalWrite(motor1Pin1, HIGH); digitalWrite(motor1Pin2, LOW); digitalWrite(motor2Pin1, LOW); digitalWrite(motor2Pin2, HIGH); } if (distance > 25) { // go forward digitalWrite(motor1Pin1, LOW); digitalWrite(motor1Pin2, HIGH); digitalWrite(motor2Pin1, LOW); digitalWrite(motor2Pin2, HIGH); } }