[Résolu] Robot simple - Problème simple (Alimentation)

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 !

Vous pouvez mettre un lien sur votre shield et une photo du montage pour voir comment tout cela est vraiment alimenté une fois débranché de l'USB ??

As tu mesuré la tension aux bornes du jack, au repos et moteur en marche?

Quelles sont elles?

Bonjour,

Tout d'abord, merci d'avoir pris le temps de regarder et de répondre.

Info complémentaire : Je viens de tester en branchant une batterie USB à l'Arduino et tout fonctionne. Cependant, il y a bien un problème quelque part car je souhaite alimenter l'ARDUINO avec la même source que les moteurs !

Jambe:
As tu mesuré la tension aux bornes du jack, au repos et moteur en marche?

Quelles sont elles?

Je viens de mesurer : 4.99 V, que les moteurs tournent ou non.

pepe:
Bonjour

Il serait intéressant de savoir si la led L de l'Arduino clignote quand ton problème apparaît. Ce pourrait être le symptôme d'un redémarrage de la carte.

La led L est fixe.

J-M-L:
Vous pouvez mettre un lien sur votre shield et une photo du montage pour voir comment tout cela est vraiment alimenté une fois débranché de l'USB ??

Le SHIELD utilisé est celui ci :

Je me suis d'ailleurs aidé de cette page pour mon montage

Voici un schéma du SHIELD fais sur PAINT !

le pb c'est que la pin que vous reprenez sur votre Motor Shield est une sortie 5V. Le Jack de l'arduino Uno attend entre 7 et 12V pour fonctionner correctement. 5V c'est vraiment limite pour alimenter votre arduino, il faut que l'alimentation soit super stable - et avec les moteurs qui tirent et la diode de protection du jack, je n'en suis pas si sûr.

Vous pouvez essayez de mettre les 5V sur la pin Vin de l'arduino Uno (et le ground au ground) - ça contourne la diode de protection qui fait chuter la tension mais pas garanti que ça marche super mieux

Attention de ne pas inverser les polarités

OK ! merci beaucoup J-M-L
Et en effet, je viens de mesurer l'intensité au niveau du capteur ultrason et voici ce que je constate :

Avec USB : 5V
En passant par le jack : 3.3V

Et je viens de lire sur la doc du module ultrason (HC SR04) qu'il a besoin de minimum 4.5V pour fonctionner.

Donc le problème vient bien de là. Et même en passant par la pin VIN, ce sera insuffisant 5V pour l'Arduino + le capteur ultrason qui réclame 4.5V !

Du coup existe t-il un moyen d'alimenter l'arduino par les piles sans passer par le L298N ?

Je demande car j'ai peur de faire des tests et de cramer ma carte (c'est la seule que j'ai !)

comme ils disent dans votre doc:

Comme vous alimentez le shield avec moins de 12 volts, il faut mettre le cavalier identifié par le rond jaune. ça vous permet d'avoir ensuite un 5V propre sur la sortie #6 qui peut servir à alimenter votre arduino et ça devrait aller mieux.

vous serez bien sûr toujours limité par le max de courant que vos piles vont pouvoir fournir (des alcalines marcheront mieux que des piles batons de base Cd Ni)

J'ai branché sur le VIN et ça fonctionne !
Merci beaucoup !

Bonne soirée

super - bons bricolages !