Un code arduino pour une petite voiture
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Un code arduino pour une petite voiture



  1. #1
    itslunyitsluny

    Un code arduino pour une petite voiture


    ------

    Bonjour,
    On est en train de travailler sur une petite voiture à deux roues et deux moteurs DC (chaque moteur controle une roue), je n'ai aucune connaissance en arduino et je suis préssé par le temps pour faire un code qui fait rouler la voiture et aussi de la faire detecter les obstacles.Les composantes utilisées sont:
    -Carte arduino UNO
    -Capteur ultrason HC SR04
    -2 roues
    ...
    en gros j'ai utilisé chatGPT pour generer un code pour faire rouler la voiture, j'ai modifié la vitesse et tout passe bien.
    Cependant je n'ai pas pu trouvé un code compatible avec mes composantes.Les codes générees par chatGPT ne marchent non plus.
    Voici le code pour faire rouler la voiture:
    Code:
        /* Ardumoto Example Sketch
      by: Jim Lindblom
      date: November 8, 2013
      license: Public domain. Please use, reuse, and modify this 
      sketch!
    
      Three useful functions are defined:
        setupArdumoto() -- Setup the Ardumoto Shield pins
        driveArdumoto([motor], [direction], [speed]) -- Drive [motor] 
          (0 for A, 1 for B) in [direction] (0 or 1) at a [speed]
          between 0 and 255. It will spin until told to stop.
        stopArdumoto([motor]) -- Stop driving [motor] (0 or 1).
    
      setupArdumoto() is called in the setup().
      The loop() demonstrates use of the motor driving functions.
    */
    
    // Clockwise and counter-clockwise definitions.
    // Depending on how you wired your motors, you may need to swap.
    #define CW  0
    #define CCW 1
    
    // Motor definitions to make life easier:
    #define MOTOR_A 0
    #define MOTOR_B 1
    
    // Pin Assignments //
    // Don't change these! These pins are statically defined by shield layout
    const byte PWMA = 3;  // PWM control (speed) for motor A
    const byte PWMB = 11; // PWM control (speed) for motor B
    const byte DIRA = 12; // Direction control for motor A
    const byte DIRB = 13; // Direction control for motor B
    
    void setup()
    {
      setupArdumoto(); // Set all pins as outputs
    }
    
    void loop()
    {
      // Drive motor A (and only motor A) at various speeds, then stop.
     // driveArdumoto(MOTOR_A, CCW, 255); // Set motor A to CCW at max
      //delay(1000);  // Motor A will spin as set for 1 second
      //driveArdumoto(MOTOR_A, CW, 127);  // Set motor A to CW at half
      //delay(1000);  // Motor A will keep trucking for 1 second 
      //stopArdumoto(MOTOR_A);  // STOP motor A 
    
      // Drive motor B (and only motor B) at various speeds, then stop.
      //driveArdumoto(MOTOR_B, CCW, 255); // Set motor B to CCW at max
      //delay(1000);  // Motor B will spin as set for 1 second
      //driveArdumoto(MOTOR_B, CW, 127);  // Set motor B to CW at half
      //delay(1000);  // Motor B will keep trucking for 1 second
      //stopArdumoto(MOTOR_B);  // STOP motor B 
    
      // Now spin both!
      driveArdumoto(MOTOR_B, CW, 240);  // Motor B at max speed.
      driveArdumoto(MOTOR_A, CW, 175);  // Motor A at max speed.
      delay(1000);  // Drive forward for a second
      // Now go backwards at half that speed:
      //driveArdumoto(MOTOR_A, CCW, 180);  // Motor A at max speed.
      //driveArdumoto(MOTOR_B, CCW, 200);  // Motor B at max speed.
    }
    
    // driveArdumoto drives 'motor' in 'dir' direction at 'spd' speed
    void driveArdumoto(byte motor, byte dir, byte spd)
    {
      if (motor == MOTOR_A)
      {
        digitalWrite(DIRA, dir);
        analogWrite(PWMA, spd);
      }
      else if (motor == MOTOR_B)
      {
        digitalWrite(DIRB, dir);
        analogWrite(PWMB, spd);
      }  
    }
    
    // stopArdumoto makes a motor stop
    void stopArdumoto(byte motor)
    {
      driveArdumoto(motor, 0, 0);
    }
    
    // setupArdumoto initialize all pins
    void setupArdumoto()
    {
      // All pins should be setup as outputs:
      pinMode(PWMA, OUTPUT);
      pinMode(PWMB, OUTPUT);
      pinMode(DIRA, OUTPUT);
      pinMode(DIRB, OUTPUT);
    
      // Initialize all pins as low:
      digitalWrite(PWMA, LOW);
      digitalWrite(PWMB, LOW);
      digitalWrite(DIRA, LOW);
      digitalWrite(DIRB, LOW);
    }
    Veuillez me proposer un code complet qui fait inclure le code précedent, ainsi qu'une partie consacrée à la détection d'obstacles grace au capteur ultrasons.

    -----

  2. #2
    umfred

    Re : Un code arduino pour une petite voiture

    là ton code ne fait faire rouler ta voiture en ligne droite , aucune commande de direction ou autre.
    la doc du capteur ultrason fournit un code pour mesurer une distance et la transmettre sur le port série arduino https://www.gotronic.fr/pj2-guide-us...duino-2309.pdf
    et surtout tu ne donnes aucune info sur ce que tu veux faire en cas de détection (arrêt ? )

  3. #3
    itslunyitsluny

    Re : Un code arduino pour une petite voiture

    Salut, le code fait rouler les deux roues simultanement, et donc ca roule dans une ligne (avec deviation bien sur). Si tu as un code plus adapté (sachant que je n'ai pas de PID, juste deux moteurs DC et des roues) ca sera génial!
    Pour la décisio, à faire en cas d'obstacle, ca sera mieux de le contourner et continuer dans la meme direction initiale (l'obstacle ne sera pas très grand,pas un mur par exemple,on mettra une bouteille d'eau par exemple et il faut qu'il l a touche pas et il continue son chemin)

  4. #4
    umfred

    Re : Un code arduino pour une petite voiture

    Tu as le code pour mesurer la distance plus haut.
    Tu dois pouvoir connaitre la distance parcourue par ta voiture selon la vitesse définie dans le programme (ça, on ne peut pas te le donner, on n'a pas les infos pour) afin de déterminer une distance d'action d'évitement selon la vitesse et la distance de l'obstacle.
    Pour faire tourner, il faut a priori qu'un côté roule moins vite que l'autre.

  5. A voir en vidéo sur Futura
  6. #5
    jiherve

    Re : Un code arduino pour une petite voiture

    bonjour,
    pour faire de l’évitement il faudra aussi un capteur de direction i.e boussole, à noter aussi que les capteurs US deviennent "aveugles" en deçà d'une certaine distance, et le capteur ne renseigne que sur la distance pas sur l'azimuth de l'obstacle, tu t'attaques à un problème plus compliqué que tu ne le crois.
    par ailleurs il ne faut pas coder comme çà, il faut utiliser les interruptions et pas delay qui est une fonction bloquante, le µC glande pendant la durée du délais!
    JR
    l'électronique c'est pas du vaudou!

  7. #6
    ArchoZaure

    Re : Un code arduino pour une petite voiture

    Bonjour.

    Oubliez ChatGPT pour faire du code...
    Vous trouverez bien mieux par vous même toute les ressources nécessaires en fouinant sur internet.

    Par exemple, un projet qui ressemble au votre, au détail prêt que le capteur HC-SR04 est aussi monté sur un servomoteur de manière à comparer à gauche et à droite la distance la plus grande à un obstacle une fois à l’arrêt (pour déterminer dans quel sens tourner ensuite).
    Code:
    #include <HCSR04.h>
    #include <AFMotor.h>
    #include <Servo.h>
    Servo myservo;  // create servo object to control a servo 
    AF_DCMotor motor1(3); // connecter les deux moteurs des roues du robot au module L293D
    AF_DCMotor motor2(4);
    // definition des broches du capteur HC-SR04
    const int trigPin = 4;
    const int echoPin = 7;
    int distance,distance_droite,distance_gauche; 
    int pos;
    // initialisation du capteur avec les broches utilisees.
    UltraSonicDistanceSensor distanceSensor(trigPin, echoPin);
    void setup() {
    myservo.write(90);   // tell servo to go to position 90
    myservo.attach(10);  // attaches the servo on pin 10 to the servo object  
    motor1.setSpeed(100);
    motor2.setSpeed(100);  
    // initialisation du port serie a 9600 band pour afficher les valeurs mesurees par le capteur.
    Serial.begin(9600);
    }
    
    void loop() {
    distance = distanceSensor.measureDistanceCm();
    Serial.println(distance);
    delay(50);
    if ((distance<15)and(distance>0)){ // le capteur HC-SR04 détecte un obstacle
     motor1.run(RELEASE); // le robot s'arrete
     motor2.run(RELEASE);
     delay(500);
     motor1.run(BACKWARD); // le robot recule
     motor2.run(BACKWARD);
     delay(500); 
     motor1.run(RELEASE); // le robot s'arrete
     motor2.run(RELEASE);
    
     for (pos = 90; pos > 10; pos -= 1) { // Faire tourner le capteur HC-SR04 vers la droite
        myservo.write(pos);              
        delay(15);                       
     }
     delay(500);
     distance_droite = distanceSensor.measureDistanceCm(); // calculer la distance entre le capteur HC-SR04 et un obstacle s'il existe
     delay(500);
     for (pos = 0; pos < 170; pos += 1) { // Faire tourner le capteur HC-SR04 à gauche
        // in steps of 1 degree
        myservo.write(pos);              
        delay(15);                       
     }
     delay(500);
     distance_gauche = distanceSensor.measureDistanceCm();// calculer la distance entre le capteur HC-SR04 et un obstacle s'il existe
     delay(500);
    
     for (pos = 170; pos > 90; pos -= 1) { // retour à la position initiale
        myservo.write(pos);            
        delay(15);                      
     delay(500);
     }
     if (distance_droite<distance_gauche){
       motor2.run(FORWARD); // faire tourner le robot à gauche
       delay(1000);
       motor2.run(RELEASE);
       delay(500);    
     } else {
       motor1.run(FORWARD); // aire tourner le robot à droite
       delay(1000);
       motor1.run(RELEASE);
       delay(500); 
     } 
    }
    else if (distance>0) {
    motor1.run(FORWARD); // faire avancer la voiture
    motor2.run(FORWARD);
    }
    }
    https://www.robotique.tech/tutoriel/...les-obstacles/

  8. #7
    jiherve

    Re : Un code arduino pour une petite voiture

    bonsoir
    là le capteur US est monté sur un petit servo, c'est en effet une bonne solution, mon dernier robot (un chenillé) scanne en permanence et établi une carte des obstacles ensuite il "pense" et prend la moins mauvaise décision; Mais il utilise un µC bien plus puissant qu'un Arduino.
    JR
    l'électronique c'est pas du vaudou!

Discussions similaires

  1. Une petite économie de climatisation pour voiture
    Par ecolami dans le forum Environnement, développement durable et écologie
    Réponses: 10
    Dernier message: 18/06/2023, 23h19
  2. [Programmation] Aide pour code arduino
    Par inviteb9239a00 dans le forum Électronique
    Réponses: 5
    Dernier message: 13/03/2016, 16h12
  3. Arduino: code pour un moteur DC !
    Par invitebbc909eb dans le forum Électronique
    Réponses: 12
    Dernier message: 04/08/2014, 22h39
  4. Besoin d'aide pour choisir un moteur électrique pour petite voiture
    Par invitef24fe664 dans le forum Électronique
    Réponses: 5
    Dernier message: 09/09/2011, 20h28