Accéder au contenu principal

photorésistance / varier l’intensité d’une LED / clignoter une LED par la fonction millis().

 exercice 1:

Durant 5 secondes, mesurer la valeur d’une photorésistance (indiquer cette valeur toutes les 500 ms sur le moniteur série).

Câbler la photorésistance pour que la valeur augmente lorsque la luminosité augmente.

Indiquer ensuite les valeurs min, max et moyenne (précision 2 chiffres après la virgule) des 10 mesures obtenues.

Choisir la résistance pour obtenir une bonne variation de la tension analogique.

 







solution :

const int lumiere=A2;

int valeurmax=0;

int valeurmin=1023;

long somme=0;

int valeur=0;

float moyenne=0;

char nombremesure=0;

void setup() {

  Serial.begin(9600);

 while(millis()<5000)

 {

   valeur=analogRead(lumiere);

   Serial.print("la valeur photoresistence: \t");

Serial.println(valeur);

delay(500);

valeurmax=max(valeur,valeurmax);

valeurmin=min(valeur,valeurmin);

somme=+valeur;

nombremesure++;

}

moyenne=somme/nombremesure;

Serial.print("la valeur moyenne:");

Serial.println(moyenne);

Serial.print("la valeur max:");

Serial.println(valeurmax);

Serial.print("la valeur min:");

Serial.println(valeurmin);

}

void loop() {}

 


exercice 2: 

1.    Faire varier l’intensité d’une LED en fonction de la valeur d’un potentiomètre. Indiquer sur le moniteur série la valeur utilisée pour commander la LED. Utiliser la fonction map() pour commander la LED.

solution










     int Led = 8;

int pot = A2;

     int valeurLed;

int valeurpot;

void setup()

{Serial.begin(9600);

  pinMode(Led, OUTPUT);

  pinMode(pot, INPUT);

}

void loop() {

  valeurpot = analogRead(pot);

  valeurLed = map(valeurpot,0,1023,0,255);

  analogWrite(Led, valeurLed);

  Serial.print("valeurPOt:\t");

  Serial.println(valeurpot);

  delay(500);

}

1.    Remplacer le potentiomètre par un joystick (VMA315). La luminosité de la LED variera en fonction du déplacement selon l’axe des X si BP = 1 et en fonction de l’axe des Y si BP = 0.

const int led = 5;

const int joystickx = A0;

const int joysticky = A1;

int x;

int y;

int vled;

void setup(){

  Serial.begin(9600);

  pinMode(led, OUTPUT);

  pinMode(joystickx, INPUT_PULLUP);

  pinMode(joysticky, INPUT_PULLUP);

  pinMode(joysticksw, INPUT_PULLUP);

}

void loop(){

  x = analogRead(joystickx);

  vled = map(x, 0, 1023, 0, 255);

  analogWrite(led, vled);

  y = analogRead(joysticky);

  vled = map(y, 0, 1023, 0, 255);

  analogWrite(led, vled);

  Serial.print("___Valeur led:____");

  Serial.println(vled);

 

  }

Modification : Utiliser une LED RGB. La LED s’illuminera dans 4 couleurs différentes en fonction du déplacement du joystick (exemple : X positif : rouge ; Y négatif : jaune, … ) .

#define rouge 11

#define vert 10

#define bleu 9

#define Joy_X A0

#define Joy_Y A1

#define BP 13

const char led_1 = 8;

long previousMillis = 0;

long currentMillis = 0; //current signifie courant

bool etatLed = 0;

void setup()

{

  pinMode (rouge, OUTPUT);

  pinMode (vert, OUTPUT);

  pinMode (bleu, OUTPUT);

  pinMode (Joy_X,INPUT);

  pinMode (Joy_Y,INPUT);

  pinMode (BP, INPUT_PULLUP);

  Serial.begin(9600);

  pinMode(led_1, OUTPUT);

  digitalWrite(led_1, HIGH);

  delay(500); }

void loop (){

  currentMillis = millis();

  if((currentMillis - previousMillis)> 1000)

  {

    previousMillis = currentMillis;

    if (etatLed == LOW) {

      etatLed = HIGH;

    }

    else etatLed = LOW;

    digitalWrite(led_1, etatLed);

  }

  int BP_on = digitalRead(BP);

 

  float valeurX = analogRead(Joy_X);

  float valeurY = analogRead(Joy_Y);

  float output_valeurX = map (valeurX, 0,1023,-255,255);

  float output_valeurY = map (valeurY, 0,1023,-255,255);

 

  if (BP_on == LOW)

  {

    if(output_valeurX>0)

    {

     analogWrite(rouge,output_valeurX);

    }

    else

    {

      analogWrite(vert,output_valeurX);

    }

   Serial.println(output_valeurX);

     delay(50);

  }

  else

  {

   if (output_valeurY>0)

   {

     analogWrite(bleu,output_valeurY);

   }

   else

   {

    analogWrite(vert,output_valeurY);

    analogWrite(rouge,output_valeurY);

   }

   Serial.println(output_valeurY);

   delay(50);

  }

 }

 

 

3.     Remplacer le potentiomètre par la mesure de l’intensité lumineuse via une photodiode (réaliser une phase de calibration durant 5 secondes pour déterminer la plage de variation de l’entrée analogique). Pour vérifier l’intervalle de variation de la photodiode, indiquer la valeur de sortie de l’ampli op sur le moniteur série durant la phase de calibration.




int photo=A0;

const char led=3;

int valeurled;

int valeurphoto=LOW;

void setup()

{

  Serial.begin(9600);

 

  pinMode(led,OUTPUT);

  pinMode(photo,INPUT);

}

void loop()

{

  valeurphoto=analogRead(photo);

  valeurled=map(valeurphoto,0,1023,0,255);

  analogWrite(led,valeurled);

  Serial.write("valeur photodiode");

  Serial.println(valeurphoto);

  Serial.write("valeur led");

  Serial.println(valeurled);

 delay(500);

}

 


Exercice 6

Utilisation de la fonction millis().

Faire clignoter une LED à la fréquence de 1 Hz sans utiliser la fonction delay(), c’est-à-dire sans bloquer le programme dans une boucle !

int led=2;

int ledState=LOW;

long preMillis=0;

void setup()

{

  pinMode(led,OUTPUT);

}

void loop()

{

  if(millis()-preMillis>1000){

    preMillis=millis();

    if(ledState==LOW)

    { ledState=HIGH;}

      else

      { ledState=LOW;}

    digitalWrite(led,ledState);

  }}

 Intégrer ce clignotement à l’exercice précédent (version 1) c’est-à-dire clignotement de la LED + variation d’une autre LED en fonction du potentiomètre (ou du joystick).



int pot=A5;

int led1=2;

int valeurpot=0;

int valeurled=0;

int led_pin=LOW;

int led0=4;

long preMillis=0;

void setup()

{

  pinMode(led0,OUTPUT);

   Serial.begin(9600);

  pinMode(pot,INPUT);

  pinMode(led1,OUTPUT);

}

 

void loop()

{

  if( millis()-preMillis>1000){

    preMillis=millis();

    if(led_pin==LOW)

    { led_pin=HIGH;}

      else

      { led_pin=LOW;}

    digitalWrite(led0,led_pin);

  }

  valeurpot= analogRead(pot);

  valeurled=map(valeurpot,0,1023,0,255);

analogWrite(led1,valeurled);

Serial.print("la valeur de potentiometre :");

Serial.println(valeurpot);

Serial.print("la valeur de Led1 :");

Serial.println(valeurled);

delay(50);

  }

 





Commentaires