Mise en oeuvre : Chapitre 4 - Recherche de luminosité

Le forum du Snootlab Starter Kit

Mise en oeuvre : Chapitre 4 - Recherche de luminosité

Message non lude Stéphane » Ven 24 Juin 2011 14:39

[Presentation du montage]

Montage N°4 : Recherche de luminosité.


Dans le chapitre précédent, nous avions fait une petite pause. Désormais, il est temps de se remettre au travail ! Le but de ce chapitre sera de faire un détecteur de luminosité, essayant de toujours rester exposé à la plus grande luminosité, et qui quand il se retrouve plongé dans l'obscurité, allume une lampe le temps de retrouver l'angle le plus éclairé.
Notre montage sera composé d'un servo moteur, avec une baguette montée à l'horizontale sur l'axe, avec au bout, une photorésistance. Cela servira à orienter la photorésistance dans la direction la plus lumineuse. Ce montage comprendra également une pile type 9V, une ampoule 5V, un transistor de puissance, qui pilotera la distribution de puissance pour l'ampoule.


[Présentation des composants]

Les composants utilisés sont :

Résistance de 1kOhms (x1)
Résistance de 10kOhms (x1)
Résistance de puissance (4W) 22Ohms (x1) (Optionnelle, utilisée seulement à des fins didactiques)
Photorésistance (x1)
Servomoteur (x1)
Transistor de puissance TIP102 (x1)
Lampe 5v (x1)
Pile 9v (x1)
Arduino Uno (x1)
Fils
Breadboard (x1)

Pour cet exemple-ci, une fois n'est pas coutume, tous les éléments ne sont pas compris dans le StarterKit Snootlab. En effet, la lampe 5V peut-être une ampoule de frigo ou bien de mobylette, la résistance de 22Ohms, doit être une résistance de puissance, de l'ordre de 4W, pour la dissipation thermique. Elle n'est indiquée ici que dans un but didactique, essayez sans et vous verrez ! Quand à la pile 9V, pas la peine de préciser qu'on en trouve partout !

Allez, maintenant que nous avons toutes les billes, ne perdons pas de temps, assemblons les !

[Le Montage]

Voici comment relier les composants entre eux. Le logiciel utilisé ici est Fritzing, il permet de donner une vue claire à vos montages, à mi-chemin entre la photo et le schéma électronique, et nous, à Snootlab, on aime ça !


Donc, notre montage se présente ainsi :

Sketch_STK_basic_4_bb.png
Sketch_STK_basic_4_bb.png (55.35 Kio) Vu 4672 fois


Les couleurs ont été choisies de cette manière :
Les fils rouges représentent le Vcc(+5V)
Les fils noirs représentent le GND(0V)
Le fil bleu représente la commande du transistor
Le fil jaune représente la commande du servomoteur


Le schéma électronique du montage se présente ainsi :
Le servomoteur n'est pas représenté.

Appli_STK_basic_4_sch.png
Appli_STK_basic_4_sch.png (5.09 Kio) Vu 5079 fois


[Explications sur le montage]

La photorésistance va faire varier sa valeur et donc la tension à ses bornes en fonction de son éclairement. Nous allons détecter l'angle pour lequel elle reçoit le plus de lumière, et faire en sorte que le servomoteur la positionne dans cette direction. Si un changement de luminosité (obstacle, … ) est détecté, on allume l'ampoule. On vérifie si deux secondes plus tard si la luminosité est toujours inférieure à celle que l'on avait détectée. Si c'est le cas, on re-scanne l'horizon à 180 degrés pour se repositionner dans la direction de la luminosité maximale. Une fois le meilleur angle trouvé, on éteint la lampe. L'ampoule est alimentée via la pile 9V, pour lui fournir la puissance nécessaire, et commandée grâce à un transistor de puissance.

Transistor Bipolaire :

Un transistor bipolaire peut-être assimilé à un interrupteur commandé. Il est constitué de 3 couches de matériau semi-conducteur, respectivement dopées soit Négativement-Positivement-Négativement, soit Positivement-Négativement-Positivement (NPN/PNP).

Le transistor bipolaire est constitué de 3 broches. Une base, un collecteur, un émetteur.
Dans l'explication suivante nous ne prendrons en compte que les types NPN.

Un fonctionnement en interrupteur commandé, consiste à « activer » la base, pour qu'elle permette au courant présent dans le collecteur, de s'écouler jusqu'à l'émetteur. Par analogie, le collecteur est l'arrivée d'eau murale, la base est la molette du robinet, et l'émetteur la sortie du robinet, le transistor étant le robinet en entier.

Pour commander donc ce transistor, plusieurs paramètres sont importants
(Ib + Ic) = Ie
Cette relation signifie que le courant circulant dans la base plus le courant du collecteur, est égal au courant sortant de l'émetteur.
Ib * β = Ic
Cette relation signifie que le courant du collecteur est, jusqu'à une certaine limite (le débit d'eau maximum de votre arrivée murale)(*), directement proportionnel au courant présent dans la base. Le débit de votre robinet est proportionnel du nombre de tours que vous avez effectué avec la molette). Ce facteur β est appelé gain en courant.
La valeur de Vbe(on)
Ce paramètre, représente le voltage minimum qui doit être appliqué entre la base et l'émetteur, pour que le transistor devienne passant (pour que le robinet commence à s'ouvrir), et que les deux relations ci-dessus puissent se mettre en place. Ce paramètre est la clé de fonctionnement des transistors bipolaires. En général de l'ordre de 0.7V pour des transistors bipolaires, si il est inférieur à cette valeur, votre transistor sera bloqué (votre robinet sera fermé), et aucun courant ne passera.
Toutes ces informations se trouvent dans les datasheets constructeur des transistors que vous utiliserez.

(*) Un transistor bipolaire à deux mode de fonctionnement. Le mode linéaire et le mode bloqué/saturé. Quand vous commencez à ouvrir le robinet (Ib faible et Vbe(on) suffisant), les trois paramètres ci-dessus restent vrais, vous êtes en régime linéaire. Si vous continuez à tourner le robinet (à augmenter Ib), passé une certaine limite, votre arrivée d'eau (courant disponible sur le collecteur) ne pourra plus fournir de l'eau proportionnellement à vos tours de robinet. Vous continuerez à tourner le robinet, mais le débit n'augmentera plus, c'est ce que l'on nomme l'état saturé. Dans l'état saturé, la relation Ib * β = Ic n'est plus respectée, on à désormais Ib > (Ic/β).



[Go for Code]

Code: Tout sélectionner
/*
    Application BASIC pour le STK Snootlab : N°5
    Détecteur de source lumineuse motorisé, allumage d'une lampe avec alimentation externe
    Le convertisseur Analogique/Numérique de l'Arduino à une résolution de 2^10 bits = 1024 valeurs.
 */
 
 #include <Servo.h>
 
 //Déclaration des fonctions
  void rechercher_lumiere(void);
  unsigned int read_capteur_write_servo(unsigned char, char);
 
 
 // Déclaration des variables
 #define pas_servo 5         // le servomoteur aura un pas de 5degrés
 
 
 unsigned int R_valeur=0;
 Servo SnootServo;
 unsigned int position_servo=0, position_min=0;
 unsigned int value_capteur=0,value_min=4096;
 unsigned char angle_min=0, angle_max =180;
 

 // Déclaration des pins reliées aux éléments
 const char pin_lampe =2;
 const char pin_moteur =9;
 const char pin_capteur =A0;


 // Configuration
 void setup(void)
 {
    pinMode(pin_lampe,OUTPUT);
    pinMode(pin_capteur,INPUT);
    pinMode(pin_moteur,OUTPUT);
    SnootServo.attach(9);   
    delay(100);
    rechercher_lumiere();
    digitalWrite(pin_lampe,LOW);
 }
 
 // MAIN
 void loop(void)
 {
   // Faire une acquisition de 1 échantillon,
        // en déplacant le capteur de 0 pas
    value_capteur=read_capteur_write_servo(1,0);
        //Si la valeur mesurée est plus grande que la dernière valeur
    if(value_capteur>(value_min+20) )
       {
        //Allumer la lampe
          digitalWrite(pin_lampe,HIGH);
          delay(2000);
        //Refaire une nouvelle capture avec 2 échantillons 
          value_capteur=read_capteur_write_servo(2,0);
        //Si c'est toujours supérieur : rechercher le meilleur angle 
          if(value_capteur>(value_min+20) )
         {
           value_min=value_capteur;
      rechercher_lumiere();
         }
        }
        //Une fois l'angle trouvé : éteindre la lampe
  digitalWrite(pin_lampe,LOW);
 }
 
 
 
 //Sous-routines
 
 void rechercher_lumiere(void)
 {
     //Cette fonction sert à faire un balayage complet du servo,
     //en faisant l'acquisition des valeurs pour chaque angle,
     //et en déterminant si on vient de trouver la valeur max ou non
     //l'angle est incrémenté à chaque fois de la valeur du pas
   unsigned char maximum_lumiere;
   
   for(position_servo=angle_min; position_servo <angle_max;position_servo+=pas_servo)
      {
      
         value_capteur=read_capteur_write_servo(2,0);
         if(value_capteur<value_min)
            {
               value_min=value_capteur;
               maximum_lumiere=position_servo;
            }
      }
   position_servo=maximum_lumiere;
   read_capteur_write_servo(0,0);
   
}

unsigned int read_capteur_write_servo(unsigned char nombre_lecture, char angle_servo)
{
      //Cette fonction sert à faire tourner le servo d'un multiple de son pas
      //Elle sert également à faire des relevés de la photorésistance
      //Elle permet de faire la moyenne sur 1, 10 jusqu'à 64 relevés,
      //le nombre de relevés maximum possible est divisé par l'amplification capteur
unsigned int valeur =0;
unsigned char indice;
unsigned char amplification_capteur=4;

   SnootServo.write(position_servo+angle_servo);
   delay(100);
   
   for(indice=1;indice <= nombre_lecture; indice++)
      {
         valeur+=(analogRead(pin_capteur)*amplification_capteur);
      }
   valeur/=nombre_lecture;
   
   return (valeur);
}
 
 


[Conclusion]

Et voici, c'est terminé pour aujourd'hui !
Désormais, vous êtes capable de réaliser des montages asservis mécaniquement, avec de la puissance provenant d'une source externe ! Vous pouvez désormais faire un panneau solaire qui suivrai la course du soleil, une lampe qui éclaire en direction de la zone la plus sombre, etc
Imaginez ! Explorez ! Nous vous donnons les briques et les explications, à vous de faire votre maison ! Surtout, faites partager vos expériences à notre communauté, posez des questions, échangez vos travaux, vivez open-hardware !
Fichiers joints
Sketch_STK_basic_4.fz
(130.01 Kio) Téléchargé 139 fois
Avatar de l’utilisateur
Stéphane
 
Messages: 179
Inscription: Lun 2 Mai 2011 09:40

Re: Mise en oeuvre : Chapitre 4

Message non lude lapiin » Lun 8 Aoû 2011 22:37

hello hello.
Hum je veux loin de la faire mon relou :P (quoi que ....) mais impossible d'enfoncer le transistor dans la breadbord sans péter 2 pâtes :/
je vais peut etre me rabattre sur un model plus grand .. peut être que les trous seront un peu plus larges. :lol:
lapiin
 
Messages: 12
Inscription: Mer 27 Juil 2011 21:01
Localisation: Baziège (31)

Re: Mise en oeuvre : Chapitre 4

Message non lude Stéphane » Mar 16 Aoû 2011 14:23

Bonjour,

Premièrement, désolé pour le temps de réponse, ce fut exceptionnellement long...

Deuxièmement, les trous de breadboard sont des trous standardisés dans l'industrie, donc même en prenant une breadboard plus grosse, les trous ne changeront pas :)

Tu es le premier retour que j'entends depuis 10ans sur le fait qu'il est IMPOSSIBLE d'enfoncer un transistor dans une breadboard sans tordre les pattes.
Essaye d'enfoncer le transistor le plus verticalement possible, sans trop forcer. Si tu penses qu'il y a un problème avec ta breadboard après avoir testé d'y enfoncer d'autres composants, envoie moi un mail via notre formulaire de contact, on va trouver une solution !

Bonne journée !
Avatar de l’utilisateur
Stéphane
 
Messages: 179
Inscription: Lun 2 Mai 2011 09:40


Retourner vers Starter Kit

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron