Accéder au contenu principal

clignoter une RGB / une barre LED RGB / capteur d’humidité analogique

 

Exercice 1

Faire clignoter une RGB (passage par 3 couleurs différentes) à fréquence variable (fréquence gérée via un capteur à Ultrason HC-SR04) et intensité variable (réglable par un potentiomètre).

Utiliser l’appel à une fonction pour déterminer la distance via le capteur à Ultrason.

Remarque : Pour le capteur à Ultrason, 1cm = délai de 100 msec. Loi linéaire.

solution :




#define trigPin 5

#define echoPin 6

#define ledR 10

#define ledG 12

#define ledB 11

#define pot A0

long duration;

int distanceCm;

void setup() {

  pinMode(trigPin, OUTPUT);

  pinMode(echoPin, INPUT);

  pinMode(ledR, OUTPUT);

  pinMode(ledG, OUTPUT);

  pinMode(ledB, OUTPUT);

  Serial.begin(9600);

}

void distance() {

  digitalWrite(trigPin, LOW);

  delayMicroseconds(2);

  digitalWrite(trigPin, HIGH);

  delayMicroseconds(10);

  digitalWrite(trigPin, LOW);

  duration = pulseIn(echoPin, HIGH);

  distanceCm = duration*0.034/2;

  Serial.print("Distance: ");

  Serial.print(distanceCm);

  Serial.println(" cm");

}

void loop() {

   float valeur = analogRead(pot);

  float valeurMap;

  valeurMap = map(valeur,0,1023,0,255);

  Serial.println(valeurMap);

  distance();

  analogWrite(ledB,LOW);

  analogWrite(ledR,valeurMap);

  delay(distanceCm*10);

  distance();

  analogWrite(ledR,LOW);

  analogWrite(ledG,valeurMap);

  delay(distanceCm*10);

  distance();

  analogWrite(ledG,LOW);

  analogWrite(ledB,valeurMap);

  delay(distanceCm*10);

}

 

 

 

Exercice 2:

Grâce à 3 BP, une barre LED RGB devra afficher le spectre des couleurs. Un BP réglera l’intensité du rouge, un second l’intensité du vert et un dernier l’intensité du bleu.

Lors d’un appui sur un BP, la sortie PWM correspondante s’incrémentera de 10. Une fois la valeur maximum atteinte, la PWM recommencera à 0.

Utiliser le moniteur série pour afficher les valeurs des PWM (cet affichage s’effectuera toutes les secondes.)

Attention : La barre LED s’alimente en 24 volts (courant 20 mA). Utiliser donc un transistor bipolaire (2N3904) pour commander les LEDs.

Modification possible : Lorsque le PWM atteint son maximum, il diminuera (plutôt que de repartir de 0)

solution :




int pot1=2;

int ledv=10;

int pot2=4;

int ledb=11;

int pot3=7;

int ledr=9;

int vert=0;

int rouge=0;

int blue=0;

int max;

char etatpot1;

char etatpot2;

char etatpot3;

void setup() {

  Serial.begin(9600);

  pinMode(pot1,INPUT);

  pinMode(ledr,OUTPUT);

  pinMode(pot2,INPUT);

  pinMode(ledb,OUTPUT);

  pinMode(pot3,INPUT);

  pinMode(ledv,OUTPUT);

   etatpot1= HIGH;

    etatpot2= HIGH;

     etatpot3= HIGH;

  max=80;

    

}

void loop(){

  etatpot1=digitalRead(pot1);

     etatpot2=digitalRead(pot2);

     etatpot3=digitalRead(pot3);

  if(etatpot1==LOW)

 {

  vert=vert+10;

  analogWrite(ledv,vert);

Serial.print(vert);

   Serial.print("-");

   etatpot1++;

   delay(50);

    while (vert==max){

      vert=0;

       etatpot1= HIGH;

      analogWrite(ledv,0);

      }  }

 if(etatpot2==LOW){

 blue=blue+10;

 analogWrite(ledb,blue);

    Serial.print(blue);

   Serial.print("-");

  etatpot2++;

   delay(50);

    while (blue==max){

      vert=0;

      etatpot2= HIGH;

      analogWrite(ledb,0);

    } }

  if(etatpot3==LOW){

   rouge=rouge+10;

   analogWrite(ledr,rouge);

   Serial.print(rouge);

    Serial.print("-");

    etatpot3++;

   delay(50);

    while (rouge==max){

      rouge=0;

       etatpot3= HIGH;

      analogWrite(ledr,0);

    }}

}

 

 

 

Exercice 3

Utiliser le capteur VMA 303 (capteur d’humidité analogique) pour réaliser une alarme pour plante. Au-delà d’un certain seuil (simulant la sècheresse de la plante), le buzzer commencera à émettre un son (choisir une fréquence audible) et une LED se mettra à clignoter (utiliser la fonction millis()).

Dès que la plante sera arrosée, le buzzer s’arrêtera et la LED s’éteindra.

solution :




const char captHumidity = A5;

const char LED = 8;

const char buzz = 5;

int humidity;

 

int preMillis=0;

int led_pin=LOW;

void setup()

{

Serial.begin(9600); // Moniteur Série

pinMode(LED,OUTPUT); //définir la const char en sortie OUTPUT

pinMode(buzz,OUTPUT);

noTone(buzz);

}

void loop()

{humidity = analogRead(captHumidity); // Lit la valeur du captHumidity qui sera = a humidity

 Serial.print("L'humidité est de : "); // On affiche l'humidité

 Serial.println(humidity);

 if (humidity <100) // Si humidity est plus grand que 100

 {

 digitalWrite(LED,HIGH); // Eteindre la lampe

 noTone(buzz); // Arrete le buzzer

 }

 else

 {

if( millis()-preMillis>100){

    preMillis=millis();

    if(led_pin==LOW)

    { led_pin=HIGH;}

      else

      { led_pin=LOW;}

    digitalWrite(LED,led_pin);

    tone(buzz,2000); // active le buzze

}}

 

}

 

 

Modification : Remplacer le son à fréquence fixe par un son composé de 5 fréquences différentes.

solution :

Modification : (on peu ajouter une resistence 220ohms ontre le+ et ele chiffre)

tone(buzz, 2093, 200);

  delay(200);

  tone(buzz, 1975, 200);

  delay(400);

  tone(buzz, 1975, 200);

  delay(200);

  tone(buzz, 2093, 200);

  delay(200);

  tone(buzz, 2349, 200);

  delay(400);

 

Commentaires