Variation de l'intensité d'une Led en fonction d'une distance

Bonjour,

Alors en un premier temps, je vous préviens, je suis vraiment débutant dans ce milieu, et je raaaaaame.
Donc bonjour :slight_smile:

Je me suis lancé dans le projet de créer un système de lumière hallogéne mecanique régit par des capteur ultrasons afin d’évaluer les distances.

j’ai juste quelques problèmes concernant la liaison entre les distances évalué par le capteur ultrason, l’intensité que je voudrais attribuer à ma LED et les degrés que le servomoteur prendrait.
(en sachant que je souhaiterais que l’intensité de la led, se fasse progressivement, pas par des clignotements, je veux qu’elle devienne plus intense a chaque pas fait en sa direction.)

dans le code qui va suivre, je n’ai pas inclue le servomoteur, histoire que pour dans un début ça fasse simple et que je puisse en comprendre le fonctionnement pas par pas. (et puis j’ai pas encore compris comment je peux alimenter le capteur, la LED, et le servomoteur en méme temps, manque de tension je pense, j’ai acheté une pile 9v annexement en la branchant sur un régulateur de tension pour la relier au moteur, rien n’y fait. pas compris.)

Voici mes lignes de code

int trig = 12;      //send ultrason
int echo = 11;      //reception ultrason 
long lecture_echo;  //lecture de la reception ultrason
long cm;
const int LED=3;    //broche de la Led
int i=0;
void setup() {
  // put your setup code here, to run once:
pinMode(LED, OUTPUT);     //met la broche en sortie
pinMode(trig, OUTPUT);    //met la broche en sortie
digitalWrite(trig, LOW);  
pinMode(echo, INPUT); 
Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(trig, HIGH);           //mise sous tension du signal ultrason
  delayMicroseconds(10);               //Attente 10microseconds
  digitalWrite(trig, LOW);             //arret du signal ultrason
  lecture_echo = pulseIn(echo, HIGH);  //lecture de la reception du signal
  cm = lecture_echo; 
  Serial.print("Distancem : "); 
  Serial.println(cm); 
  delay(1000); 
//Partie Led///////////////////////////////////////////////////////  
 if (("Distancem :" > 12960)&&("Distancem :"<11000)){
                                                     analogWrite(LED, LOW);  
                            } 
 
 if (("Distancem :" > 11000)&&("Distancem :" <8800)){
                                                     for (i=0; i<=55;i++)
                                                     analogWrite(LED,i);
                             
 }
 if (("Distancem :" > 8800)&&("Distancem :" <6600)){
                                                    for (i=55; i<=110;i++)
                                                    analogWrite(LED,i);
 }
 if (("Distancem :" > 6600)&&("Distancem :" <4400)){
                                                     for (i=110; i<=165;i++)
                                                     analogWrite(LED,i); 
 }                          
 if (("Distancem :" > 4400)&&("Distancem :" <2200)){
                                                    for (i=165; i<=200;i++)
                                                    analogWrite(LED,i);
 }
 if (("Distancem :" >2200)&&("Distancem :" < 0)) {
                                                  for (i=200; i<=255;i++)
                                                  analogWrite(LED,i);
                       
 }
}

En vous remerciant par avance de vos éventuel réponses.

Jorund

if ((“Distancem :” > 12960)&&(“Distancem :”<11000))

bonjour,
tu compares un nombre à du texte …

Bonjour timarco, en un premier temps, merci pour ta réponse.

Et deuxio, je ne comprend pas ou est le problème, étant donné qu'il faut que je me référence à "Distancem :" pour avoir différentes évaluations et pouvoir faire varier l'intensité.

Enfin je ne comprend pas en quoi je compare du nombre à du texte...

Merci par avance.

Bonjour,

"Distancem :" -> ça c'est du texte 12960 -> ça c'est un nombre

Je suppose que ce que tu veux faire c'est cm > 12960 (bien que cm ne me semble pas être la distance en cm comme son nom pourrait l'indiquer).

oui en effet, j’ai changé
<cm = lecture_echo / 58; > par <cm = lecture echo>
Pour voir les valeurs initiales.

Donc en gros, si je comprend bien

Il me faudrait changer “Distancem :” par cm

Pardon si je suis un peu lent. j’en suis vraiment au tout début…

Merci kamill pour ta réponse.

Pour le capteur ultrason j’utilise la librairie newping, tu peux la télécharger et la copier dans le répertoire librairies de ton IDE arduino

#include <NewPing.h>
...

#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 400 // Maximum distance we want to ping for (in centimeters) 400-500cm.

float distance;

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

....

void loop(void) {

...
distance = sonar.ping_cm();
Serial.println(distance );
...
}

Merci pour ta proposition CelticLord Je vais regarder ça ^^

bon j'ai essayé quelques trucs de ce fait, 
J'ai réussit a convertir les résultats du moniteur en cm. 
ce qui est déja un grand pas pour moi ^^ 
Par contre la Led ne s'allume pas, se qui est trés génant, étant donné que c'est le but de ce programme...

int trig = 12; //send ultrason
int echo = 11; //reception ultrason
long lecture_echo; //lecture de la reception ultrason
long cm;
const int LED=3; //broche de la Led
int i=0;
void setup() {
// put your setup code here, to run once:
pinMode(LED, OUTPUT); //met la broche en sortie
pinMode(trig, OUTPUT); //met la broche en sortie
digitalWrite(trig, LOW);
pinMode(echo, INPUT);
Serial.begin(9600);
}

void loop() {
// put your main code here, to run repeatedly:
digitalWrite(trig, HIGH); //mise sous tension du signal ultrason
delayMicroseconds(10); //Attente 10microseconds
digitalWrite(trig, LOW); //arret du signal ultrason
lecture_echo = pulseIn(echo, HIGH); //lecture de la reception du signal
cm = lecture_echo /58 ;
Serial.print("Distancem : ");
Serial.println(cm);
delay(1000);
//Partie Led///////////////////////////////////////////////////////
if ((cm > 180)&&(cm <150)){
digitalWrite(LED, LOW);
}

if ((cm > 150)&&(cm <120)){
for (i=0; i<=55;i++)
digitalWrite(LED,i);

}
if ((cm > 120)&&(cm <90)){
for (i=55; i<=110;i++)
digitalWrite(LED,i);
}
if ((cm > 90)&&(cm <60)){
for (i=110; i<=165;i++)
digitalWrite(LED,i);
}
if ((cm > 60)&&(cm <30)){
for (i=165; i<=200;i++)
digitalWrite(LED,i);
}
if ((cm >30)&&(cm < 0)) {
for (i=200; i<=255;i++)
digitalWrite(LED,i);

}
}[/code]

Merci pour vos réponses.

bonjour,
ne pas confondre digitalWrite et analogWrite
digitalWrite===> on off 0 1 low high
analogWrite===> 0 à 255 sur une pin pwm