Détecteur de recul Vert, orange et rouge

Bonjour à tous,
Je suis un grand débutant en Arduino et également en programmation C++.
Bonjour à tous,
Je désir copier le montage de ce sujet:

https://www.developpez.net/forums/d1589882/general-developpement/programmation-systeme/embarque/arduino/radar-recul-garage-probleme-code-logique/

J’ai le matériel nécessaire:
Carte Arduino UNO
Détecteur HC-SR04
Petit panneau de 8 leds CJMCU-2812-8
Résistance (valeur inconnue ) j’ai mis une 20K
Outil de programmation: Arduino Genuino 1-8-4

Le code:

/* Télémètre ultrason ARDUINO Uno, HC-SR04 
 *  Rampe 8 leds 2812-8 bouton poussoir
 * et résistance 10 K
 * couleurs et distances désirées:
 * Vert arrivé à 1 M
 * Orange arrivé à 0,50 m
 * Rouge arrivé à 0,25 m
 */
 
#include <EEPROM.h>
#include <Adafruit_NeoPixel.h>
 
#define TRIG 11
#define ECHO 12
#define buttonPin 2
#define PIN 6// On définit le pin où est connecté la patte DATA du bandeau
 
//fonctions utilisées
void clignote(int red, int green, int blue, int delai);
void fled(int red, int green, int blue,int bright);
 
//Variables utilisées
long retourEcho;              // variable pour calcul de la distance mesurée
long distance;                // variable de mesure de la distance mesurée
long distanceold;             // variable de comparaison avec distance mesurée précédente
long distancevar;             // variable de comparaison avec distance mesurée précédente
long cible=0 ;                // variable de réglage de la distance cible mesurée
long relatif ;                // variable de l'écart entre distance mesurée et distance cible
int buttonState=0;            // variable de lecture de l'état du bouton
int checkdelay=100;           // variable de l'intervale de mesure de la distance en millisecondes
unsigned long debutstable=0;  // variable de calcul de calcul de la durée d'immobilité
 
 
// Parameter 1 = number of pixels in strip
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
 
//Ici, le 8 correspond au nombre de led
Adafruit_NeoPixel strip = Adafruit_NeoPixel(8, PIN, NEO_GRB + NEO_KHZ800);
 
void setup () {
  //On définie les entrées/Sorties
  pinMode(buttonPin, INPUT);
  pinMode(TRIG, OUTPUT);
  digitalWrite(TRIG, LOW); 
  pinMode(ECHO, INPUT);  
  //Lancement de la liaison série
  Serial.begin(57600); 
  Serial.println("Liaison série en ligne");
  strip.begin();
  strip.show(); // Initialise toute les led à 'off'
}
 
void loop() {
  relatif=distance-cible ;
 
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);
 
 
  //On lance notre impulsion de 10µs
  digitalWrite(TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);
 
  //Mesure de la longueur de la pulse
  retourEcho=pulseIn(ECHO, HIGH);
 
  //Calcul de la distance
  distanceold=distance;
  distance=retourEcho / 58;
distancevar=abs(distance-distanceold); // la variation peut être négative
 
if (distancevar>0.01*distance) 
  {
      debutstable = millis();   // timer = durée en cours si la distance change
                                      // lorsque la distance ne changera plus le contenu de debutstable sera constant
  }
 
  //Réglage de la valeur cible
  if (buttonState==HIGH) {
    // enregistre la valeur distance comme cible et stocke la valeur
    cible = distance;
    clignote(0,0,233,100);
 
  //Ecriture de la variable valeur à l'adresse 0
  EEPROM.put(0, cible);
  } 
  //Lecture de la valeur à l'adresse 0
  EEPROM.get(0, cible);
 
  //Affichage de la distance dans le moniteur série
  Serial.print("Distance cm : ");
  Serial.println(distance);
  Serial.print("cible cm : ");
  Serial.println(cible);
  Serial.print("relatif cm : ");
  Serial.println(relatif);
  // Signaletique visuelle
 
 if ((millis()-debutstable)>10000) 
  {
    fled(0,0,0,0);
  }
  else  if (relatif<=10){
     Serial.println("rouge ");
        fled (233,0,0,100);
      }
   else if (relatif<=55){
      Serial.println("blue");
      fled (233,127,16,100);
  }
  else if (relatif<=100){
       Serial.println("vert");
            for(int i = 0; i < 8; i++ ) { // On fait une boucle pour définir la couleur de chaque led
        // setPixelColor(n° de led, Rouge, Vert, bleu)
        strip.setPixelColor(i, 0, 223, 0);
        }
 
      strip.show(); // on affiche
      strip.setBrightness(40);  
  }
  else {
       Serial.println("rien");
             for(int i = 0; i < 8; i++ ) { // On fait une boucle pour définir la couleur de chaque led
        // setPixelColor(n° de led, Rouge, Vert, Bleu)
        strip.setPixelColor(i, 0, 0, 0);
        }
 
      strip.show(); // on affiche
      strip.setBrightness(40); 
  }
 
 
  delay(checkdelay); 
}
 
void fled(int red, int green, int blue,int bright) 
 
   {     
         for(int i = 0; i < 8; i++ ) 
          { // On fait une boucle pour définir la couleur de chaque led
        // setPixelColor(n° de led, Rouge, Vert, bleu)
        strip.setPixelColor(i, red, green, blue);
          }
      strip.show(); // on affiche
      strip.setBrightness(bright);
   }
 
void clignote(int red, int green, int blue, int delai) {
 
for(int j = 0; j<3 ; j++){     
 
          for(int i = 0; i < 8; i++ ) { // On fait une boucle pour définir la couleur de chaque led
        // setPixelColor(n° de led, Rouge, Vert, bleu)
        strip.setPixelColor(i, red, green, blue);
        }
      strip.show(); // on affiche
      strip.setBrightness(50);
      delay(delai);
 
          for(int i = 0; i < 8; i++ ) { // On fait une boucle pour définir la couleur de chaque led
        // setPixelColor(n° de led, Rouge, Vert, bleu)
        strip.setPixelColor(i, 0, 0, 0);
        }
      strip.show();
      strip.setBrightness(50);
      delay(delai);
}
}

Étant grand débutant, les leds s’allument mais restent rouge.
Je n’ai pas compris à qui sert le bouton poussoir et s’il faudra le laisser sur le montage final.

Votre aide me serait d’un grand secours pour comprendre et réaliser tout cela.

Merci
@+
Robert

Salut,

Je n'ai pas les réponses a toutes tes questions mais pour ce qui est du bouton, j'ai l'impresion qu'il sert a enregistrer la distance "étalon" = celle qui sert a définir si tu es trop pret ou trop loin :wink:

cf code ici :

//Réglage de la valeur cible
  if (buttonState==HIGH) {
    // enregistre la valeur distance comme cible et stocke la valeur
    cible = distance;
    clignote(0,0,233,100);
 
  //Ecriture de la variable valeur à l'adresse 0
  EEPROM.put(0, cible);
  }

Je suis un grand débutant aussi alors pour le reste ca va être dur de t'aider,

Bon courag

Bonjour,
résistance de 10K le BP est pour le réglage de limite rouge.
Si tu as repris le dernier code il est OK.

Bonsoir,
Merci pour vos réponses.
Je vais donc remplacer la résistance et procéder à de nouveaux essais.
Ce que je ne sais pas, c'est si nous devons utiliser le BP seulement à 1 m (distance maxi de detection) ou si nous devons le valider à chaque distance que je désir contrôler ?
Ici:
1M Vert
0.50M Orange (mais je ne sais pas si le orange est possible ) *
0.25 Rouge

  • J'ai l'impression que ces leds ne donnent que Vert, Bleu et Rouge

Bon Dimanche
@+
Robert

Le BP est pour le réglage de la distance mini de détection, valeur rouge et une fois pour toute suivant les besoins.

Bonjour,
J'ai remplacé la résistance par une 10 K.

Si l'obstacle reste fixe, le système se met bien en pose. Par contre, les leds sont tout le temps rouge. Ne comprenant pas le code, je suis incapable de procéder aux réglages attendus.

Aurais-je un souci avec ma UNO, Led On allumée fixe.
Led L allumée fixe
Led RX clignote en continu.

@+
Robert

Bonjour,
vérifier le schéma.

Radar.pdf (43.4 KB)

Bonjour,

Il faut déjà vérifier si la distance mesurée est correcte.
Qu'est ce qui est affiché sur le moniteur série?

Bonsoir,

Merci à tous pour votre aide.
Je crois que j’ai compris l’astuce.
J’ai mis l’obstacle contre le détecteur, 0cm et j’ai validé avec le bouton poussoir.

J’ai modifié le code:
else if (relatif<=50){
Serial.println(“orange”)

La valeur était 55 j’ai donc mis 50 et ça change bien orange à 50 cm

else if (relatif<=100){
Serial.println(“vert”);
Et pour passer au vert à 1 m

Mon dernier souci est que s’il n’y a plus d’obstacle devant le détecteur (plus de véhicule dans le garage) ça reste allumé au vert alors que ça fonctionne bien si je suis à 25 cm ???
Dommage que je ne comprenne pas encore bien le code, mais je vais tâcher de m’y mettre rapidement.

Merci à tous pour votre aide
@+
Robert

Re
Je pense avoir compris pourquoi il reste au vert.

Si vous désirez faire le même montage, ne l’essayez pas comme moi, contre l'ordinateur car je pense que le détecteur prends en compte les scintillements de l'écran que l’œil humain ne perçoit pas.

Il ne me reste plus qu'à commander une carte nano pour mettre le montage dans une boite.

Merci à tous pour votre aide.
@+
Robert