Aujourd'hui je me lance dans un tout petit projet. Je réalise un robot détecteur d'obstacle.
Pour cela j'ai acheter :
_ Système d'engrenages double moteurs Tamiya (le même que celui-ci)
_ Une plateforme universelle Tamiya 70098 (ceci)
_ Un capteur Sharp GP2Y0A02YK0F (15 - 150 cm) + le connecteur
_ Des chenilles tank Tamiya
_ Une mini plaque d'essai (breadboard)
_ Un L293D pour contrôler mes 2 moteurs
_ 4 piles 1.5 volts (Total : 6 volts)
Pour avoir un aperçu j'ai monter la plateforme universelle avec le système d'engrenage puis j'ai rajouter les chenilles. Ce qui me donne un châssis avec mes moteurs et mes chenilles(voir photo jointe). Ensuite j'ai collé mon servomoteur (debout) a l'avant du châssis et sur celui ci j'ai collé mon capteur Sharp. Donc vous l'aurais surement compris je veux réaliser un robot qui roule et qui détecte les obstacles grâce au capteur Sharp et au servomoteur qui sert de balayage. Le tout contrôler via Arduino Mega 2560.
Après avoir tout câblé (voir circuit image jointe),je m'aperçois qu'il y a un problème : le servomoteur tourne comme il faut , le détecteur détecte ma main comme obstacle , mais mes moteurs ne fonctionne pas ou plutôt n'arrive pas a démarrer. Ce que je veux dire c'est que je vois les engrenages qui bougent a peine (1 ou 2 mm)et entend les moteurs qui essayent de tourner , mais c'est comme si que quelqu'un attraper l'embout du moteur pour le bloquer. J'ai tester avec 6 volts chaque un des moteurs (avec les chenilles) et ils fonctionnent très bien! A votre avis d'où vient le problème ? Je pensais aux piles , peut être pas assez puissantes pour faire démarrer 2 moteurs , un servomoteur et un capteur ? Aidez moi s'il vous plait !
Voila le code Arduino :
#include <Servo.h> //includes the servo library int motor_pin1 = 4; int motor_pin2 = 5; int motor_pin3 = 6; int motor_pin4 = 7; int servopin = 8; int sensorpin = 0; int dist = 0; int leftdist = 0; int rightdist = 0; int object = 500; //distance at which the robot should look for another route Servo myservo; void setup () { pinMode(motor_pin1,OUTPUT); pinMode(motor_pin2,OUTPUT); pinMode(motor_pin3,OUTPUT); pinMode(motor_pin4,OUTPUT); myservo.attach(servopin); myservo.write(90); delay(700); } void loop() { dist = analogRead(sensorpin); //reads the sensor if(dist < object) { //if distance is less than 550 forward(); //then move forward } if(dist >= object) { //if distance is greater than or equal to 550 findroute(); } } void forward() { // use combination which works for you digitalWrite(motor_pin1,HIGH); digitalWrite(motor_pin2,LOW); digitalWrite(motor_pin3,HIGH); digitalWrite(motor_pin4,LOW); return; } void findroute() { halt(); // stop backward(); //go backwards lookleft(); //go to subroutine lookleft lookright(); //go to subroutine lookright if ( leftdist < rightdist ) { turnleft(); } else { turnright (); } } void backward() { digitalWrite(motor_pin1,LOW); digitalWrite(motor_pin2,HIGH); digitalWrite(motor_pin3,LOW); digitalWrite(motor_pin4,HIGH); delay(500); halt(); return; } void halt () { digitalWrite(motor_pin1,LOW); digitalWrite(motor_pin2,LOW); digitalWrite(motor_pin3,LOW); digitalWrite(motor_pin4,LOW); delay(500); //wait after stopping return; } void lookleft() { myservo.write(150); delay(700); //wait for the servo to get there leftdist = analogRead(sensorpin); myservo.write(90); delay(700); //wait for the servo to get there return; } void lookright () { myservo.write(30); delay(700); //wait for the servo to get there rightdist = analogRead(sensorpin); myservo.write(90); delay(700); //wait for the servo to get there return; } void turnleft () { digitalWrite(motor_pin1,HIGH); //use the combination which works for you digitalWrite(motor_pin2,LOW); //right motor rotates forward and left motor backward digitalWrite(motor_pin3,LOW); digitalWrite(motor_pin4,HIGH); delay(1000); // wait for the robot to make the turn halt(); return; } void turnright () { digitalWrite(motor_pin1,LOW); //use the combination which works for you digitalWrite(motor_pin2,HIGH); //left motor rotates forward and right motor backward digitalWrite(motor_pin3,HIGH); digitalWrite(motor_pin4,LOW); delay(1000); // wait for the robot to make the turn halt(); return; }
Merci d'avance a toutes vos réponses.
Bonne journée.
Cordialement Dylan