ARDX-Montages-CIRC09
Ce que nous faisons
.: Lumière :.
.: Les photorésistances :.
Acquérir une valeur en provenance d'un potentiomètre peut être utile pour une expérience contrôlée par un humain. Mais que pouvons nous utiliser pour une expérience contrôlée par l'environnement lui-même? Nous gardons exactement les mêmes principes mais à la place du potentiomètre (résistance basée sur une torsion), nous utilisons une photorésistance (résistance basée sur la lumière). Arduino ne peut pas directement percevoir la résistance (il perçoit la tension) donc nous utilisons un pont diviseur de tension (ardx.org/VODI anglais). La tension exacte sur la broche du senseur peut être calculée mais pour notre usage (juste percevoir la lumière relative), nous pouvons tester les valeurs et retenir celles qui nous conviennent. Le senseur retourne une petite valeur lorsqu'il est bien éclairé et une grande valeur lorsqu'il est placé dans l'obscurité.
Le montage
Le matériel nécessaire
2 Pin header
x4
Photo-résistance
x1
Résistance de 560 Ohms (vert-bleu-brun)
x1
Résistance de 10K Ohms (brun-noir-orange)
x1
LED (ou DEL)
x1
Tous ces éléments sont disponibles dans le Kit Ardx proposé sur shop.mchobby.be.
Schéma
Montage
Le code
Pas besoin de copier tout le code, vous pouvez le télécharger depuis
/* * Un programme simple qui modifie l'intensité * d'une LED en fonction de la quantité de * lumière frappant la photorésistance */ // Pin de la photorésistance int lightPin = 0; // la broche analogique // sur laquelle la photorésistance est connectée n'est pas calibrée // pour une unité particulière . Il s'agit donc simplement de la valeur // brute du senseur (lumière relative) // Broche de la LED int ledPin = 9; //Pin sur laquelle la LED est // branchée. Comme nous contrôlons la luminosité nous utilisons une des // broches PWM (modulation de longueur d'impulsion) void setup() { // déclarer la pin de la LED comme sortie pinMode(ledPin, OUTPUT); } /* * loop() - cette fonction démarre après * l'initialisation puis se répète */ void loop() { // lecture du taux d'éclairage int lightLevel = analogRead(lightPin); // ajuste la valeur de 0 - 900 à 0 - 255 lightLevel = map(lightLevel, 0, 900, 0, 255); // Assure que la valeur est entre 0 - 255 lightLevel = constrain(lightLevel, 0, 255); // écrire la valeur analogWrite(ledPin, lightLevel); }
Cela ne fonctionne pas?
Voici 3 choses à essayer.
La LED reste éteinte
C'est une erreur que nous continuons à faire de temps à autre, si seulement ils savaient faire des LEDs qui fonctionne dans les deux sens!
Sortez la et retournez la.
Ne réagit pas au changement de lumière
Il est facile de mal placer la photorésistance parce que l'écartement des broches n'est pas standard.
Vérifiez si elle est bien à la bonne place.
Ne fonctionne toujours pas?
Vous êtes peut-être dans une pièce trop lumineuse ou trop sombre.
Essayez d'allumer et éteindre la lumière pour voir si cela aide.
Si vous avez une lampe de poche, tentez votre chance avec elle.
Faire encore mieux
Inverser la réponse
Vous voudriez peut-être une réponse inversée. Pas de problème nous pouvons facilement inverser cette réponse en changeant:
analogWrite(ledPin, lightLevel);
vers
analogWrite(ledPin, 255 - lightLevel);
Chargez le programme et notez la modification de la réponse.
La veilleuse
Plutôt que de contrôler la luminosité d'une LED en réponse à la lumière, essayons plutôt de l'allumer ou l'éteindre en fonction d'un seuil.
Changer le code de loop() avec....
void loop(){ int threshold = 300; // valeur du seuil if(analogRead(lightPin) > threshold) { digitalWrite(ledPin, HIGH); } else{ digitalWrite(ledPin, LOW); } }
Un servo contrôlé par la lumière
Utilisons notre toute nouvelle compétence sur les senseurs de lumière pour contrôler un servo (et en même temps en apprendre un peu plus sur la programmation Arduino).
Connectez un servo moteur sur la pin 9 (comme au CIRC-04).
Ouvrez ensuite l'exemple « Knob » (le même que nous avons utilisé dans CIRC-08)
Fichier > Exemples > Servo > Knob
Chargez le code sur la carte et regardez comment il fonctionne sans aucune modification supplémentaire.
Utiliser toute la portée angulaire du servo moteur
Vous noterez que le servo n'utilise qu'une partie limité de sa rotation angulaire.
C'est parce qu'avec le pont diviseur de tension que nous utilisons, la tension sur la pin 0 ne varie pas de 0 à 5 volts mais entre deux valeurs plus petites (valeurs qui dépendent de votre montage).
Pour corriger cela, modifiez et testez vos propres valeurs avec la ligne
val = map(val, 0, 1023, 0, 179);
Pour des astuces sur ce qu'il faut faire, visitez arduino.cc/en/Reference/Map (anglais)
Plus, plus et encore plus
Plus d'information, où poser vos autres questions:
ardx.org/CIRC09 (anglais)
Internet
.:téléchargement:.
LA fiche de montage est disponible sur ardx.org/BBLS09
.: Vidéo :.
La vidéo du montage est disponible sur ardx.org/VIDE09 (anglais)
Tutoriel/Manuel traduit par Meurisse D. pour MCHobby.be licence Creative Commons BY-SA.
Crédit de traduction
Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant :
« Traduction par MCHobby (shop.MCHobby.be) - Vente de kit et composants » et ce quelque soit le média utilisé.
Utilisation commerciale
L'utilisation commercial de cette traduction (y compris sur site produisant des revenus par l'intermédiaire de publicité), même partielle, est soumise à redevance (license fee).
Le présent manuel a été traduit et autorisé à la vente avec l'aimable autorisation conjointe de Oomlout (www.oomlout.com) et d'AdaFruit (www.adafruit.com).
Produit sous licence Creative Commons BY-SA License and available for download: ardx.org/src/