Led et ultrasonic ( Led toujours allumée )

Bonjours à tous,

Je viens de me procurer le HC-SR04 ultrasonique...

J'arrive à faire fonctionner les ultrasons avec les examples.., mais lorsque je veux brancher une LED lorsque en dessous de 25cm...

Elle reste allumer aussitôt que j'upload..

Voici mon code :

// ---------------------------------------------------------------------------
// Example NewPing library sketch that does a ping about 20 times per second.
// ---------------------------------------------------------------------------

#include <NewPing.h>

// LED
int LED = 7;

// Ultrason Sensor
#define ALERT 20
const int TOTAL = 0;

#define TRIGGER_PIN  12  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     11  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 200 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

void setup() {
  Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.
  pinMode(LED, OUTPUT);
}

void loop() {
  digitalWrite(LED, LOW);
  delay(50);                     // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
  unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS).
  Serial.print("Ping: ");
  uS = uS / US_ROUNDTRIP_CM; // Convert ping time to distance and print result (0 = outside set distance range, no ping echo)
  Serial.print(uS); 
  Serial.println("cm");
  
  if(uS < ALERT){ // If Distance ( Cm ) is smaller than ALERT
    Serial.println("Danger!!!");
    digitalWrite(LED, HIGH);
  }

}

J'ai essayé avec " const int LED = 7; ", ou, " #define LED 7", ou, "int LED = 7;"

Dans le " void setup()" : pinMode(LED, OUTPUT); <--- C'est surtout à cause de celui la, mais sinon rien allume.

"void loop()" : j'ai essayé avec et sans tous les syntaxes.

digitalWrite(LED, LOW); <-- avec ou sans.... pour l'éteindre au début..
..

Comment cela fonctionne?

Merci

Salut nolimitech,

J'ai essayé ton sketch et chez moi il semble fonctionner correctement:

-pour des distances inférieures à 25 cm, la LED clignote très rapidement (puisque tu lui demandes de s'éteindre au début du loop).
-pour des distances situées entre 25 cm et 2 mètres, la LED est éteinte.
-pour des distances de 2 mètres ou plus, la variable uS redevient nulle (donc la LED clignote à nouveau).

As-tu observé les valeurs qui s'affichent sur le serial monitor pendant que la LED reste allumée (et qu'elle ne le devrait pas)?

oui, merci..

Je sais que cela devrais fonctionner, mais non...

Je ne sais pas pourquoi.

Oui, dans le serial je vois " DANGER !!" ( en bas de 20 ).. Comme je veux, donc la commande suivante devrais marcher..

la lumière est ouverte au début, mais lorsque je suis en dessous de 20, elle se ferme maintenant, mais plu rien après..

Comme s'il à eu une erreur.. un reset... Sauf que les chiffre ( distance en cm ) est toujours lisible ( et fonctionne )

Hum... avec le script tel quel, tout marche ? hum... pas chez moi.. Lorsque tu enlève le digitalWrite(LED', LOW); au début du LOOP... tout est normal ? elle s'allume en bas de 20cm?

ma LED est connecté --->

Circuit pour LED :=: D7 ---> résistance ( 180ohm ) ---> LED ( - + ) ---> 5v

Es-ce correct?

Merci de ton aide.

Oui, selon ta description, ta LED est correctement branchée.

Si j'enlève le "digitalWrite(LED', LOW);" au début du loop, la LED s'allume lorsque la distance est inférieure à 25 cm (ou plus grande que 2 mètres), et ensuite elle ne s'éteint plus, puisqu'on ne lui dit nulle part de s'éteindre.

Avec une très légère modification à ton code (j'ai ajouté un "else" à la fin), la LED s'allume (sans clignoter) à 25 cm et moins, et s'éteint entre 25 et 200 cm:

// ---------------------------------------------------------------------------
// Example NewPing library sketch that does a ping about 20 times per second.
// ---------------------------------------------------------------------------

#include <NewPing.h>

// LED
int LED = 7;

// Ultrason Sensor
#define ALERT 20
const int TOTAL = 0;

#define TRIGGER_PIN  12  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     11  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 200 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

void setup() {
  Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.
  pinMode(LED, OUTPUT);
}

void loop() {
  delay(50);                     // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
  unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS).
  Serial.print("Ping: ");
  uS = uS / US_ROUNDTRIP_CM; // Convert ping time to distance and print result (0 = outside set distance range, no ping echo)
  Serial.print(uS); 
  Serial.println("cm");
  
  if(uS < ALERT){ // If Distance ( Cm ) is smaller than ALERT
    Serial.println("Danger!!!");
    digitalWrite(LED, HIGH);
  }
  else{
    digitalWrite(LED, LOW);
  }

}

Hum.... avec votre code, tout marche à merveille, sauf pour une chose...
C'est le contraire qui se passe. Haha. La lumière est allumer lorsque les Centimètres se situe entre 20 et 200

Es-ce la version de l'Uno R3?
Es-ce ma LED qui n'est pas connecter du bon bord? elle aurait brûler..
Es-ce parce que c'est celui du ground qui est relié au digital..
Le positif sur le 5v... Donc HIGH = Fermer LED, LOW = Ouvrir LED ?

Le code de mon problème ne marche toujours pas.. MAIS le votre oui.
Bizarre.. Étrange, je vais appeler Skully et Mulder.

Oui, merci de ton aide.. C'est exactement cela qui arrive..

Ma LED doit être à l'état LOW pour allumer, et HIGH pour fermer..

Comme si tu le sens du circuit serait à l'envers.

Voici le code : ( LED Allume en bas de 20 et en haut de 200 )

// ---------------------------------------------------------------------------
// Example NewPing library sketch that does a ping about 20 times per second.
// ---------------------------------------------------------------------------

#include <NewPing.h>

// LED
int LED = 7;

// Ultrason Sensor
#define ALERT 20
const int TOTAL = 0;

#define TRIGGER_PIN  12  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     11  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 200 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

void setup() {
  Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.
  pinMode(LED, OUTPUT);
}

void loop() {
  delay(50);                     // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
  unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS).
  Serial.print("Ping: ");
  uS = uS / US_ROUNDTRIP_CM; // Convert ping time to distance and print result (0 = outside set distance range, no ping echo)
  Serial.print(uS); 
  Serial.println("cm");
  
  if(uS < ALERT){ // If Distance ( Cm ) is smaller than ALERT
    Serial.println("Danger!!!");
    digitalWrite(LED, LOW);
  }
  else{
    digitalWrite(LED, HIGH);
  }

}

Ho, j'avais lu trop vite ta description du branchement de la LED.

J'ai branché la LED de cette façon: D7 ---> résistance ---> LED ( +- ) ---> GND
Donc quand D7 est à LOW, c'est 0 volt de part et d'autre de la LED, elle ne s'allume pas.
Quand D7 est à HIGH, c'est 5 V d'un côté et 0 volt de l'autre, la LED s'allume.

Avec ta façon de brancher la LED (D7 ---> résistance ( 180ohm ) ---> LED ( - + ) ---> 5v):
Quand D7 est à LOW, c'est 0 V d'un côté, 5 V de l'autre et la LED s'allume.
Quand D7 est à HIGH, c'est 5 volts des deux côtés, donc aucune différence de potentiel et la LED reste éteinte.

(Il n'y a pas de risque de brûler ta LED en la branchant à l'envers).

Ahhhhh, ça change tout. Merci haha

Je vais me coucher moins ignorant pour la le sens d'une LED,

Donc, c'est juste lorsque la résistance est trop faible qu'on peut brûler une LED....

Je ne savais même pas que cela se pouvait. dire que j'ai plein de petit montage avec se principe. XD : :roll_eyes:

Merci de ton aide. ( Sujet Résolus )