Mise en oeuvre - Chapitre 4 (nouvelle version)

Le forum du Snootlab Starter Kit

Mise en oeuvre - Chapitre 4 (nouvelle version)

Message non lude Laetitia » Mar 12 Fév 2013 14:44

Bonjour,

Aujourd'hui nous allons nous attaquer à un montage un peu plus compliqué : un détecteur de luminosité qui allume une lampe quand il se retrouve dans le noir le temps de retrouver l'angle le plus éclairé. Une photorésistance sera montée au bout d'une baguette sur un servomoteur qui orientera cette dernière dans la direction la plus éclairée.

- MATÉRIEL -

- Arduino Uno (x1)
- Breadboard (x1)
- Photorésistance (x1)
- Résistance 1 kOhms (x1)
- Résistance 10 kOhms (x2)
- Transistor de puissance TIP102
- Servomoteur (x1)

/!\ Non compris dans le Starter Kit :
- Lampe 5V (x1) > lampe de mobylette, de frigo...
- Pile 9V (x1) > dispo dans le commerce

- SCHÉMA -

Schéma_STKch4_final.png
Schéma_STKch4_final.png (53.51 Kio) Vu 2748 fois


- CODE -

Code: Tout sélectionner
/*
    Application BASIC pour le STK Snootlab : N°4
    Détecteur de luminosité mobile et 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 de fonctions
void recherche_lumiere(void);
unsigned int lecture_capteur(void);

// déclaration des pins auxquelles sont reliées les différents composants
#define lampe 2
#define moteur 9
#define capteur 0

Servo myServo;

// déclaration des variables relatives à la photorésistance et au servomoteur
unsigned int valeur_capteur;
unsigned int ancienne_valeur = 0;
unsigned int position_servo;

void setup()
{
  pinMode(lampe, OUTPUT);
  pinMode(moteur, OUTPUT);
  // pas de pinMode() pour le capteur, les pins analogiques sont automatiquement configurées en entrée
 
  myServo.attach(moteur);
  digitalWrite(lampe, LOW);
  delay(100);
  recherche_lumiere();
}

void loop()
{
  // lecture photorésistance
  valeur_capteur = lecture_capteur();
  // si la luminosité a baissé depuis la dernière fois (+ sensibilité)
  if (valeur_capteur < ancienne_valeur-50)
  {
    // on allume la lampe
    digitalWrite(lampe, HIGH);
    delay(2000);
    // on refait une mesure
    valeur_capteur = lecture_capteur();
    // si la luminosité est toujours plus faible que la dernière fois
    if (valeur_capteur < ancienne_valeur-50)
    {
      // on recherche le meilleur angle
      recherche_lumiere();
    }
    // on éteint la lampe une fois celui-ci trouvé
    digitalWrite(lampe, LOW);
    delay(100);
    // et on enregistre la valeur de la luminosité pour le prochain tour
    ancienne_valeur = valeur_capteur;
  }
  // sinon
  else
  {
    // ne rien faire
    return;
  }
}

unsigned int lecture_capteur(void)
{
  int val = 0;
  val = analogRead(capteur);
  // remapping de la lecture pour avoir une valeur élevée correspondant à une luminosité élevée
  val = map(val, 0, 1023, 1023, 0);
  return (val);
}

void recherche_lumiere(void)
{
  unsigned int luminosite_max;
  // balayage à 180° pour les mesures
  for (position_servo=0; position_servo<180; position_servo+=3)
  {
    myServo.write(position_servo);
    delay(100);
    valeur_capteur = lecture_capteur();
    // si la valeur lue est supérieure à la précédente
    if (valeur_capteur > ancienne_valeur)
    {
      // on l'enregistre ainsi que la position du servo
      ancienne_valeur = valeur_capteur;
      luminosite_max = position_servo;
    }
  }
  // quand on a fini de faire le tour, on renvoie le servo à la position la plus éclairée
  myServo.write(luminosite_max);
  // attendre avant de refaire des mesures
  delay(500);
}


- EXPLICATIONS -

Nous utilisons ici un transistor de puissance pour la commande de la lampe :

Pourquoi ?
La lampe est alimentée via une pile 9V, elle resterait allumée tout le temps sans la présence du transistor qui agit comme un interrupteur : bloqué (interrupteur ouvert), aucun courant ne circule dans la circuit, la lampe reste éteinte ; passant (interrupteur fermé), la lampe s'allume.

Comment ?
Il existe plusieurs types de transistors (NPN, PNP, Darlington...) et plusieurs régimes de fonctionnement : bloqué, passant, et saturé.
Dans cet exemple nous ne prendrons en compte que les NPN, en régime linéaire (= passant).

Le transistor possède 3 broches: une base, un collecteur, et un émetteur.
Si l'on compare le transistor à un robinet, le collecteur est l'arrivée d'eau murale, la base est la molette du robinet et l'émetteur la sortie du robinet.
On comprend donc qu'il faut agir sur la base du transistor si l'on veut avoir un courant au niveau de l'émetteur (circuit fermé). On la relie donc à la pin D2 de l'Arduino qui, suivant l'information délivrée (HIGH ou LOW), commandera l'allumage de la lampe.

Pour plus de détails sur le fonctionnement des transistors (caractéristiques, exemples de montage...), vous pouvez aller sur Wikipedia et Sonelec ou consulter les datasheets pour les caractéristiques spécifiques à votre composant.

Pour plus de détails sur la photorésistance et son utilisation, voir le chapitre 2 nouvelle version !


C'est tout pour cette fois ! J'espère que ce tutoriel vous aura plu, et bonne bidouille en attendant le prochain !
"If it's itchy, scratch it !" - "DIY or die"

RTFM (À lire avant de poster) - ANDb (Arduino Noob Database)
Avatar de l’utilisateur
Laetitia
 
Messages: 296
Inscription: Mar 7 Aoû 2012 15:07
Localisation: Toulouse

Re: Mise en oeuvre - Chapitre 4 (nouvelle version)

Message non lude La_Case » Lun 11 Mar 2013 23:51

Bonsoir,

serait-il possible d'avoir de la documentation sur la librairie servo.h ?
Notamment les différentes fonctions existantes, ce qu'elles font, comment, etc..

Merci :)

Guillaume
La_Case
 
Messages: 1
Inscription: Ven 15 Fév 2013 13:23

Re: Mise en oeuvre - Chapitre 4 (nouvelle version)

Message non lude IndiAstro » Jeu 14 Mar 2013 19:46

Bonsoir,

Tu trouveras tout ce qu'il te faut là :
http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.LibrairieServo

Bonne Soirée
Indi
IndiAstro
 
Messages: 1
Inscription: Jeu 14 Mar 2013 19:42

Re: Mise en oeuvre - Chapitre 4 (nouvelle version)

Message non lude joan » Sam 13 Avr 2013 19:42

Bonjour,

Auriez-vous également le schéma du circuit au format standard ?
Fritzig fait des jolies images et rend le montage plus facile à mettre en œuvre, mais pour essayer d'analyser le circuit et comprendre le cheminement du courant ca rend les choses plus compliquées…

Merci
joan
 
Messages: 1
Inscription: Sam 13 Avr 2013 19:35


Retourner vers Starter Kit

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités