MicroPython-Hack-LDR
Ce que nous faisons
.: 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). PyBoard ne peut pas directement percevoir la résistance (il perçoit la tension) donc nous utilisons un pont diviseur de tension pour créer une tension qui varie avec la résistance de la photo-résistance (résistance qui change avec l'intensité lumineuse).
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é.
Voir l'invite REPL
Une petite note complémentaire, ce montage affiche des information via connexion série disponible sur le port USB de la PyBoard.
Il sera nécessaire de maîtriser L'invite REPL pour voir le résultat de vos mesures de températures.
Le montage
Le matériel nécessaire
Photo-résistance
x1
Résistance de 100 Ohms (brun-noir-rbrun)
x1
Résistance de 10K Ohms (brun-noir-orange)
x1
LED (ou DEL)
x1
Tous ces éléments sont disponibles sur shop.mchobby.be.
Schéma
Montage
Le code
Explications
ldr = pyb.ADC( 'X19' ) while True: lecture = ldr.read() tension = (lecture * 3.3) / 4095 print( 'valeur = %s, tension = %s volts' % (lecture, tension) ) pyb.delay( 300 )
Code qui produit les résultats suivant:
valeur = 2728, tension = 2.198388 volts valeur = 2750, tension = 2.216117 volts valeur = 2762, tension = 2.225787 volts valeur = 2807, tension = 2.262051 volts valeur = 2795, tension = 2.252381 volts valeur = 2814, tension = 2.267692 volts valeur = 2799, tension = 2.255605 volts valeur = 2754, tension = 2.219341 volts valeur = 2287, tension = 1.843004 volts valeur = 1886, tension = 1.519853 volts valeur = 1919, tension = 1.546447 volts valeur = 1905, tension = 1.535165 volts valeur = 1910, tension = 1.539194 volts valeur = 1887, tension = 1.520659 volts valeur = 1815, tension = 1.462637 volts valeur = 1225, tension = 0.9871795 volts valeur = 680, tension = 0.5479854 volts valeur = 751, tension = 0.6052015 volts valeur = 819, tension = 0.6599999 volts valeur = 1766, tension = 1.42315 volts valeur = 1915, tension = 1.543223 volts valeur = 1903, tension = 1.533553 volts valeur = 1960, tension = 1.579487 volts valeur = 1976, tension = 1.592381 volts valeur = 1983, tension = 1.598022 volts valeur = 1988, tension = 1.602051 volts valeur = 1990, tension = 1.603663 volts valeur = 1991, tension = 1.604469 volts valeur = 1997, tension = 1.609304 volts
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
xxx
Internet
.:téléchargement:.
xxxx
Composé par Meurisse D. pour MCHobby.be - Translated by Meurisse D. for MCHobby.be
Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : « Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.
L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.