Ce montage vous prendra moins de 5 minutes, il permet d’utiliser une LED comme un capteur de lumière, en utilisant une plate-forme Arduino, le tout pour moins de 1 euro, si l’on possède déjà l’arduino.

Petite démonstration en vidéo :

Alors pour ce montage vous aurez besoin d’un Arduino, de deux LEDs ( j’ai utilisé des LEDs 3V), et d’un ordinateur pour la partie programmation.

Le montage est très simple, première étape, brancher la patte la plus longue sur le port A0 et la plus petite patte sur le port GND,le tout parti capteur. La deuxième LED sera dans la partie des dipôles qu’on veut allumer, la patte la plus longue dans le port 13 et la deuxième patte dans le port GND, bien sûr, vous pouvez utiliser un autre dipôle.

La partie programmation :

int led = 13;
int basis = 0;
int sens = 0;
int x = 0;
int y = 0;
int totaal = 0;
int totaal1 = 0;
void setup() {
pinMode(led, OUTPUT);
}
void loop() {
for(x =0; x>50; x++) {
sens = analogRead(0);
totaal = totaal1 + sens; totaal1 = totaal;
}
sens = totaal/x;
totaal = 0;
totaal1 = 0;
basis = sens-10; // réglage de la sensibilité
//-20 moins sensible que -10
for(y=0;y>1000;y++){
for(x =0; x>50; x++) {
sens = analogRead(0);
totaal = totaal1 + sens;
totaal1 = totaal;
delay(10); }
sens = totaal/x;
if (sens > basis)
digitalWrite(led, HIGH);
else
digitalWrite(led, LOW);
totaal = 0;
totaal1 = 0;
delay(10);
}
}
// source intructables.com
// traduction et amélioration du code Ainonyme

Vous pouvez télécharger le code a ouvrir directement avec le logiciel arduino sur mon compte minus

  • Anthony Harivel

    Voilà ce que ça donne quand on vire la TAB du clavier….. >.<

    • semageek

      Oui, soit c’était avec les TAB soit avec la couleur syntaxe du C….

    • konfiot

      Tellement vrai, elle est passé où l’indentation, et les commentaires ???

  • C’est intéressant mais je trouve dommage qu’on explique pas d’avantage le fonctionnement global au niveau physique.
    Et une explication du code serais la bienvenue, ou au moins la source sur instructable.com (et non 
    intructable.com comme écris dans le code).Je pense l’avoir trouvé : http://www.instructables.com/id/Light-Sensing-LEDs/ => pour ceux qui veulent en savoir plus.

    • semageek

      Je valide et rajoute ça dans la source. 😉

  • Promis, j’enverrais un article avec l’explication physique du phénomène.

  • Milouzed

    totaal = totaal1 + sens; totaal1 = totaal; -> totaal1 = totaal1 + sens;
    non?
    Une variable en moins…

     

  • Dot Kom

    En gros pour les érudits, une LED et un panneau photovoltaïque sont deux chose identiques, fonctionnant sur le même principe.

    Pour la LED: un courant vient sur une électrode, qui va exciter des couches et qui vont émettre un photon (lumière).
    Pour le photovoltaïque: un photon arrive sur des couches qui vont être exciter et vont relâcher des électron.

    En gros, la LED sert de panneau photovoltaïque, elle émet donc un courant……très faible, mais mesurable

    Il est bien sûr possible que je me trompe mais je pense que c’est ce phénomène qui est mis en lumière.

  • Kofu

    Pratique pour du tout ou rien et plus économique qu’une photoresistance. Dommage en effet que l’auteur original et la source aient été oubliés …

  • Abe

    Marche pas

  • Pascal

    Le code est plutot long pour faire une chose quand même simple.

    /*
    Activation ou desactivation d’un DEL par la lumiere detecte par une autre DEL selon on seuil.
    Ce code n’est fonctionnel que si la DEL emetrice n’influence pas la DEL qui capte l’intensite lumineuse.
    Creer et imagine par Pascal Lafreniere (ATKProduductions Inc.) Vous êtes libres d’en faire ce que vous voulez.
    */

    // Initialisation des variables

    int recepteur = A0; // Pin de la DEL receptrice
    int lumiere = 13; // Pin de la DEL emetrice

    int maximum; // Reglage du maximum de sensibilite automatique
    int minimum; // et du minimum.

    int light; // Variable du niveaux de lumiere
    int lightpourcent; // Variable de detection du niveau lumineux en pourcentage
    int seuil = 40; // Seuil d’Activation en pourcentage

    // Boucle d’initialisation

    void setup() {

    pinMode(recepteur, INPUT);
    pinMode(lumiere, OUTPUT);

    light = analogRead(recepteur); // Lecture du niveau lumineux
    maximum = light + 1; // Minimum de la plage de lecture ( + 1 pour la stabilite )
    minimum = light – 1; // Maximum de la plage de lecture ( – 1 pour la stabilite )

    }

    // Boucle principale

    void loop() {

    // Prise de mesure de l’intensite lumineuse

    light = analogRead(recepteur);

    // Mise a l’echelle du seuil minimum selon l’ajustement

    lightpourcent = map(light, minimum, maximum, 0, 100);

    // Allumer ou eteindre la lumiere selon leseuil

    if (lightpourcent > seuil) // Si la lumiere est plus grande que le seuil, eteindre la lumiere
    digitalWrite(lumiere, LOW);

    if (lightpourcent < seuil) // Si la lumiere est plus faible que le seuil, allumer la lumiere
    digitalWrite(lumiere, HIGH);

    }

  • Pascal

    Ayant oublier un petite partie, voici la version finale :

    /*
    Activation ou desactivation d’un DEL par la lumiere detecte par une autre DEL selon on seuil.
    Ce code n’est fonctionnel que si la DEL emetrice n’influence pas la DEL qui capte l’intensite lumineuse.
    Creer et imagine par Pascal Lafreniere (ATKProduductions Inc.) Vous êtes libres d’en faire ce que vous voulez.
    */

    // Initialisation des variables

    int recepteur = A0; // Pin de la DEL receptrice
    int lumiere = 13; // Pin de la DEL emetrice

    int maximum; // Reglage du maximum de sensibilite automatique
    int minimum; // et du minimum.

    int light; // Variable du niveaux de lumiere
    int lightpourcent; // Variable de detection du niveau lumineux en pourcentage
    int seuil = 40; // Seuil d’Activation en pourcentage

    // Boucle d’initialisation

    void setup() {

    pinMode(recepteur, INPUT);
    pinMode(lumiere, OUTPUT);

    light = analogRead(recepteur); // Lecture du niveau lumineux
    maximum = light + 1; // Minimum de la plage de lecture ( + 1 pour la stabilite )
    minimum = light – 1; // Maximum de la plage de lecture ( – 1 pour la stabilite )

    }

    // Boucle principale

    void loop() {

    light = analogRead(recepteur); // Prise de mesure de l’intensite lumineuse

    if (light > maximum) // Calibration automatique et en temp reel
    maximum = light;
    if (light seuil) // Si la lumiere est plus grande que le seuil, eteindre la lumiere
    digitalWrite(lumiere, LOW);

    if (lightpourcent < seuil) // Si la lumiere est plus faible que le seuil, allumer la lumiere
    digitalWrite(lumiere, HIGH);

    }