Bonjour à tous,
Premier message sur ce forum car je suis débutant en arduino.
Je n'ai jamais eu de problème particulier avec mon arduino et le code. J'ai suivi tous les tutos du starter kit et j'ai fais quelques créations pour m'améliorer.
Actuellement, je fais un robot qui se ballade et tourne quand il detecte un obstacle.
Aujourd'hui, je rencontre un problème qui me dépasse car je ne comprend pas comment c'est possible !
Config :
Arduino UNO
MOTOR SHIELD L293N
Module ultra son HC SR04
Alimenté par 6 piles 1.5V, qui alimentent le motor shield.
Ensuite, j'alimente l'arduino via le connecteur jack en passant par le motor shield.
Mon problème est que lorsque je suis connecté au PC, tout fonctionne. Ca réagit correctement : les roues tourne en continue puis quand j'approche ma main du capteur, la condition s'applique (stopper les moteurs puis tourner).
Quand je débranche du pc, ça ne fonctionne plus. Comme s'il appliquait constamment la condition, qu'il y ait un obstacle ou non.
Voici mon code :
// moteur A
int enA = 10;
int in1 = 9;
int in2 = 8;
// moteur B
int enB = 5;
int in3 = 7;
int in4 = 6;
//Capteur Ultrason
int trig = 12;
int echo = 11;
long lecture_echo;
long cm;
void setup()
{
// on précise les OUTPUT Moteur
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
//puis le output ultrason
pinMode(trig, OUTPUT);
digitalWrite(trig, LOW);
pinMode(echo, INPUT);
Serial.begin(9600);
}
void avancer()
{
//allumer le moteur A
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
//CHOISIR LA VITESSE 255 MAX
analogWrite(enA, 100);
// allumer le moteur B
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
//CHOISIR LA VITESSE 255 MAX
analogWrite(enB, 120);
}
void demitour()
{
// on arrette les moteurs
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
delay(1000);
//puis on tourne !
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(800);
}
void loop()
{
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
lecture_echo = pulseIn(echo, HIGH);
cm = lecture_echo / 58;
Serial.print("Distance en cm : ");
Serial.println(cm);
// delay(1000);
//METTRE ICI LA CONDITION
if (cm < 10)
{
demitour();
}
avancer();
}
Merci d'avance pour vos conseils !