Simulation Proteus pour un robot detecteur d'obstacle en utilisant L298N , un capteur à ultrasons HC-SR04

Salut je suis une étudiante en genie electrique et j'ai besoin d'une simulation d'un rorbot detecteur d'obstacle en utilisant Arduino UNO , L298N un capteur à ultrasons HC-SR04. Cette simulation est tres importante car grâce a elle je peux valider mon projet. SVP j'ai besoin d'aide

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

Bonjour,

Soit vous avez terminé votre projet et vous voulez le valider par une "simulation Proteus" à propos de laquelle vous sollicitez notre aide.

Dans ce cas il faut détailler votre projet (plan de câblage, code...).

Soit vous essayez de faire comme beaucoup d'autres ont essayé avant vous.

@jef59 Je pense qu'elle n'a pas encore commencé son projet.

Bonjour,

Et qu'elle espére qu'on le commence?

Non, j’ai déjà commencé, mais j’aurais besoin de quelqu’un qui s’y connaît en Proteus pour vérifier ma simulation et m’aider à corriger les erreurs.

Je pense qu’il y a eu un malentendu. Si je suis venu ici, c’est justement parce que j’ai déjà commencé à travailler sur le projet. Ma démarche n’était pas de déléguer le travail, mais de demander un regard extérieur pour m’aider à corriger ce que j’ai déjà fait. Il ne s’agit pas d’espérer que quelqu’un d’autre le fasse à ma place, mais simplement d’un besoin d’accompagnement pour progresser.

OK.
Donc tu donnes toutes les infos nécessaires pour que l'on puisse t'aider.
On n'a pas Proteus et nous ne sommes pas dans ta tête, donc il faut donner:

  • un schéma
  • le code
  • si c'est un problème logiciel
    • expliquer ce que tu attends du programme
    • expliquer ce qui ne va pas et te pose problème
  • si c'est un problème hardware
    • expliquer ce qui ne fonctionne pas

OK, je m'excuse du mal entendu.

Si vous ne décrivez pas davantage votre projet, ça va être difficile de vous aider.

Avez vous un schéma à nous proposer?

De plus, pour ma part, je connais Proteus, mais je ne l'ais pas à ma disposition, c'est sans doute un point qui va concerner beaucoup d'autres membres actifs sur ce site.


Ceci est le schema de ma simulation sur proteus

Ceci est mon code Arduino :

// Définition des broches du capteur à ultrasons
#define trigPin 7
#define echoPin 8

// Contrôle des moteurs via le L298N
#define IN1 2
#define IN2 3
#define IN3 4
#define IN4 5
#define ENA 6
#define ENB 7

// LEDs indicatrices des moteurs
#define LED_GAUCHE 11
#define LED_DROITE 2

void setup() {
  // Capteur à ultrasons
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

  // Moteurs
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(ENA, OUTPUT);
  pinMode(ENB, OUTPUT);

  // LEDs
  pinMode(LED_GAUCHE, OUTPUT);
  pinMode(LED_DROITE, OUTPUT);

  Serial.begin(9600);
}

void loop() {
  // Mesure de la distance
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  long duration = pulseIn(echoPin, HIGH);
  int distance = duration * 0.034 / 2;

  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");

  if (distance < 20) {
    // Obstacle détecté → arrêt des moteurs et LEDs éteintes
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
    analogWrite(ENA, 0);
    analogWrite(ENB, 0);
    
    digitalWrite(LED_GAUCHE, LOW);
    digitalWrite(LED_DROITE, LOW);
  } else {
    // Pas d’obstacle → avancer et allumer LEDs
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
    analogWrite(ENA, 200);
    analogWrite(ENB, 200);

    digitalWrite(LED_GAUCHE, HIGH);
    digitalWrite(LED_DROITE, HIGH);
  }

  delay(100);
}

Ceci est l'erreur que j'ai rencontré:

N.B: la simulation ne se comporte pas comme elle devrait

Bonjour

Le message 'Missing' concerne l'empreinte ('package') de certains composants
çà poserait un problème pour faire le circuit imprimé, pas pour faire une simulation.
Tu indiques d'ailleurs que la simulation s'effectue mais ne se comporte pas comme elle le devrait.

je vois une incohérence dans ces lignes qui ne donneront pas le résultat espéré (mélange d'entiers et de nombre réel) :

long duration = pulseIn(echoPin, HIGH);
int distance = duration * 0.034 / 2;

NB : Proteus est utilisé dans l'éducation , très peu par les personnes intervenant sur ce forum qui pour la plupart ont quitté l'école depuis longtemps.....

Je rajoute au message de @al1fch

ATTENTION ici

C'est un signal PWM 0-12V qui est envoyé à la Led, ce n'est bon à mon avis et pas compatible avec les entréesmsorties Arduino en 5V

Merci pour votre retour.
Dans ce cas, que recommandez-vous comme solution ou alternative pour adapter le signal et le rendre compatible avec les entrées/sorties 5V de l’Arduino ?
Je suis preneur de toute suggestion ou schéma qui pourrait corriger cela.

Merci pour vos précisions.
Je comprends mieux pour le message "Missing" et la différence entre simulation et fabrication du circuit.
Je vais corriger le mélange de types dans le code, comme vous l’avez signalé.
Et merci pour l’information sur l’usage de Proteus c’est bon à savoir.

Si ce sont des LEDs "classiques"

  • elles peuvent être alimentées en 5V.
  • il devrait y avoir une résistance de limitation du courant car sinon elles vont fumer à la première mise sous tension.

Oui, se sont des LEDs classiques.

Côté Arduino elles reçoivent 0-5V
Côté L298 elles reçoivent 0-12V en PWM.

Donc si je ne me trompe pas, elles sont toujours +/- alimentées selon l'état des sorties et de la valeur moyenne du PWM.

Est-ce que vous pouvez nous décrire en 2 mots ce que vous espérez comme mode de fonctionnement pour ces 2 LEDs?

Les 2 LEDs seront utiliser pour détecter le sens de rotation des roux du robot

On peut toujour brancher les 2 leds sur des pins libres de l'arduino avec une résistance adaptée et les contrôler dans le code pour indiquer le sens de rotation des roues.

L'anode de chaque led sur une pin libre et les cathodes reliées au GND du circuit. De cette façon, les leds sont alimentées en 5V.

Ne le prenez pas mal, je pense que vous avez mal compris quelques détails dans votre schéma.

À proprement parlé, les LEDs sont connectées sur des SORTIES, donc d'un point de vu language, elles ne vont pas DÉTECTER mais MONTRER le sens de rotation.

Ensuite, vous avez adopté un montage particulier pour ces LEDS, en admettant qu'on rajoute une résitance de limitation du courant en série avec celles-ci pour éviter qu'elles brûlent.

Côté "-" des LEDs vous avez 0V ou 5V de sorties Arduino.
Côté "+" vous avez en PWM (signal rectangulaire) du 0V/12V.

Quand le côté "+" est à +12V, quelque soit la valeur au côté "-", (0V ou 5V), la led s'éclaire plus ou moins fort.

On est OK?

Si par exemple vous aviez relié le côté "-" à 0V, vous auriez eut presque le même résultat.

C'est à dire:
Quand le moteur tourne, le signal PWM est actif et la led s'éclaire +/- selon la valeur moyenne du PWM.

Ça vous donne un info du genre "moteur tourne", et "vitesse moteur".

Où il y a la solution de @axelmaux en "Tout ou Rien".

Bonjour

Elles y sont déjà:
LED_GAUCHE
LED_DROITE
sauf que mal câblées, au lieu de connecter l'anode sur une borne du moteur, la connecter sur le +5v via une résistance de 220 ohms.
On pourrait même économiser les pin LED_GAUCHE et LED_DROITE en utilisant les pin de commande IN1 ET IN3.

Cordialement
jpbbricole