Arduino projet robot

Bonjour, mon projet consiste a faire un robot tondeuse avec arduino (sans lame) juste pour faire une simulation. il fonctionne avec un capteur de magnétisme et des aimants pour limiter le terrain. Je suis très mauvais en programmation et j'ai quelques problèmes , (voir code) deja les 2 moteurs devraient fonctionner sans interruption or le moteur droit s'arrete et redemarre sans arrêt meme sans la detection d'aimants. Le code est surement mal optimisé.

int moteurR = 3;
int moteurL = 5;
int valeur1=160;
int valeur0=0;
int heState = 0;
long randNumber;
int hePin = 4;
 
void setup() {
 
 pinMode(moteurR, OUTPUT);
  pinMode(moteurL, OUTPUT);
  pinMode(hePin, INPUT);
}
 
void loop() {
  
    heState = digitalRead(hePin);
     
     if (heState == LOW){ // si le capteur detecte un aimant
     
    
  
  analogWrite(moteurR, valeur0);   // arreter le moteur droit
    randNumber = random(1000, 2000); // attendre entre 1 et 2 secondes
  delay(randNumber);
 
  }
  else{
     
    analogWrite(moteurL, valeur1);
    analogWrite(moteurR, valeur1);
  }
}

Bonjour, mon projet consiste a faire un robot tondeuse avec arduino (sans lame)

Je suis très mauvais en programmation et j'ai quelques problèmes

Je traduis en ne pensant pas me tromper : J'ai à faire un projet scolaire (1ere ou terminale) et je ne le l'annonce pas comme un projet scolaire.
Tu te doutera que le ressenti est désagréable, c'est peut être une négligence mais ce peut être aussi une tentative de triche à l'examen.
Tout n'est pas perdu mais dorénavant il faut jouer cartes sur table.

Dans le message épinglé "Règles du forum francophone" il y a un passage sur les projets scolaires je te conseille de le lire en urgence et le message en entier.

Ceci n'est pas un projet scolaire mais je me suis inscrit a des cours d'arduino et j'ai récupéré un capteur a effet hall donc je fais des experiences mais rien de scolaire

Bonjour Antoine

Avez vous vérifié vos connexions ?

Cordialement,
bidouilleelec

Les connexions sont bonnes car quand j'essaie d'enlever la partie randNumber et delay tout se passe bien le moteur s'arrete seulement quand il detecte un aimant mais dès lors que je rajoute un delai tout va mal , le moteur se met a s'arreter et a redemarrer sans arret sans detection de l'aimant.
Cordialement.

Antoine_b89:
Ceci n'est pas un projet scolaire mais je me suis inscrit a des cours d'arduino et j'ai récupéré un capteur a effet hall donc je fais des experiences mais rien de scolaire

Alors désolé, mais les projets scolaires commencent très tôt cette année.

L'année prochaine je passe en terminal avec option ISN donc je dois apprendre la programmation mais ceci n'est pas un projet scolaire mais un entrainement.

Très bonne initiative.
Pas de confusion il n'y a pas de langage arduino, ce n'est que du C/C++.
Ce qui existe ce sont des fonctions (ou des classes) pour servir d'interface entre le microcontroleur et le matériel.
L'IDE n'est qu'une sur-couche à un ensemble de programmes (l'éditeur, le compilateur, le chargeur de programme dans le micro, etc). Elle gère tout pour toi et tu n'as à t'occuper que d'écrire le code.

Au départ un tuto de C/C++ pour débutant est fortement utile pour connaître les bases.
Le tuto d'Eskimon est très fortement recommandé tant pour ses explications logicielles que matérielles, openclassroom est aussi un site très utile.
Bon courage.

D'accord j'irais voir merci et si quelqu'un s'y connais dans ce que j'essaie de faire ou vois un probleme dans le code n'hesitez pas.

essayez avec cela:

const byte moteurR = 3;
const byte moteurL = 5;
const byte hePin = 4;

int valeur1 = 160;
int valeur0 = 0;

byte heState = 0;

void setup()
{
  pinMode(moteurR, OUTPUT);
  pinMode(moteurL, OUTPUT);
  pinMode(hePin, INPUT_PULLUP);
}

void loop()
{
  heState = digitalRead(hePin);

  if (heState == LOW) { // si le capteur detecte un aimant
    analogWrite(moteurR, valeur0);   // arreter le moteur droit
    delay(random(1000, 2000));// attendre entre 1 et 2 secondes
  } else {
    analogWrite(moteurL, valeur1);
    analogWrite(moteurR, valeur1);
  }
}

j'ai un peu nettoyé les types et mis votre capteur à effet Hall en INPUT_PULLUP -> à tester (un lien sur votre capteur? comment l'avez vous câblé?)

pas de lien malheureusement mais il y a écrit des nombres dessus : 3144 746.

sans doute un “A3144 Hall effect Sensor

(notez que la doc qui date de 2005 (13 ans) dit:" These parts are no longer in production The device should not be purchased for new design applications. Samples are no longer available"…)

ça a cette tête?
sensor.png

Totalement et les connexions sont comme les miennes

Alors voila j'essaie d'avancer mais j'ai un problème, avec cet extrait de code les moteurs roulent et quand il detectent un aimant s'arrete puis redemarre après mais maintenant je voudrais qu'il y est juste le moteurR qui s'arrete pendant une durée de 1 a 2 secondes puis redemarre mais je ne sais pas a quel endroit mettre le delai.

Code:

if (heState == LOW) { // si le capteur detecte un aimant
analogWrite(moteurR, valeur0);
analogWrite(moteurL, valeur0);

} else {

analogWrite(moteurR, valeur1);
analogWrite(moteurL, valeur1);
}

Commencez par voir si votre détecteur fonctionne. enlevez les moteurs et tout le reste, conservez juste le capteur (il faut sans doute une résistance) et écrivez un bout de code qui teste la présence d'un aimant. Tant que ça ne marche pas, pas la peine d'aller plus loin

j'ai trouvé un exemple de montage:

Le capteur marche c'est sur regarder mon dernier message que vous avez peut-etre pas vu

Antoine_b89:
Le capteur marche c'est sur regarder mon dernier message que vous avez peut-etre pas vu

le mieux ce serait de ne pas mettre de delay() mais en première approche

if (heState == LOW) { // si le capteur detecte un aimant
    analogWrite(moteurR, valeur0);  
    analogWrite(moteurL, valeur1);
    delay(2000); // on bloque le moteur droit 2 secondes pour tourner puis on redémarre
    analogWrite(moteurR, valeur1);
  } else {
    analogWrite(moteurR, valeur1);
    analogWrite(moteurL, valeur1);
  }

C'est très bizarre quand j'utilise ce code ci les 2 moteurs tournent

if (heState == LOW) { // si le capteur detecte un aimant
   analogWrite(moteurR, valeur0);  
   analogWrite(moteurL, valeur0);
 } else {
   analogWrite(moteurR, valeur1);
   analogWrite(moteurL, valeur1);
 }
}

mais avec ce code dès le demarrage seulement le moteur gauche marche...

if (heState == LOW) { // si le capteur detecte un aimant
   analogWrite(moteurR, valeur0);  
   analogWrite(moteurL, valeur1);
   delay(2000); // on bloque le moteur droit 2 secondes pour tourner puis on redémarre
   analogWrite(moteurR, valeur1);
 } else {
   analogWrite(moteurR, valeur1);
   analogWrite(moteurL, valeur1);
 }

vous alimentez comment les moteurs?

sinon si un seul moteur tourne ça veut dire que le heState est tout le temps LOW

est-ce que vos moteurs sont près du capteur? (un moteur ça génère un champ magnétique aussi)

Les moteurs sont juste alimentés avec les pin 3 et 5 et le heState ne peut pas toujours etre en low car avec le premier code ci-dessus le code fonctionne normalement