Nous allons utiliser une photorésistance (LDR en anglais, pour Light Dependent Resistor) pour mesurer la luminosité. On peut se servir de ce montage pour simplement mesurer l'intensité lumineuse ambiante, détecter s'il s'agit du jour ou de la nuit, orienter un dispositif vers une source de lumière, allumer ou éteindre un dispositif en fonction de la luminosité, faire un capteur détectant qu'un objet passe dans son “champ de vision”, et bien d'autres applications.
Nous aurons besoin d'un Raspberry Pi (A, A+, B, B+) configuré, ainsi que d'une breadboard, de câbles, d'une puce MCP3008, d'une photorésistance, ainsi que d'une résistance de 1 à 10KOhms (nous utiliserons ici un 4.7KOhms). Il faudra avoir déjà interfacé le Raspberry Pi et le MCP3008 comme nous l'avons vu dans le tutoriel sur l'utilisation d'un MCP3008 pour ajouter des entrées analogiques.
Le montage est le suivant : l'une des broches de la photorésistance sera connectée au +3.3V (en rouge), tandis que l'autre broche sera connectée à notre résistance de 4.7KOhms qui ira à la masse. Sur la broche de la photorésistance connectée à la résistance, nous ajouterons un câble partant vers la broche A0 du MCP3008 (câble brun). Nous obtenons alors le montage suivant : Vous pouvez également télécharger le schéma de montage de la photorésistance connectée au Raspberry pi via un MCP3008 en version PDF.
Nous utiliserons sensiblement le même code que pour la lecture du potentiomètre :
#!/usr/bin/env python import time import os import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) #fonction lisant les donnees SPI de la puce MCP3008, parmi 8 entrees, de 0 a 7 def readadc(adcnum, clockpin, mosipin, misopin, cspin): if ((adcnum > 7) or (adcnum < 0)): return -1 GPIO.output(cspin, True) GPIO.output(clockpin, False) # start clock low GPIO.output(cspin, False) # bring CS low commandout = adcnum commandout |= 0x18 # start bit + single-ended bit commandout <<= 3 # we only need to send 5 bits here for i in range(5): if (commandout & 0x80): GPIO.output(mosipin, True) else: GPIO.output(mosipin, False) commandout <<= 1 GPIO.output(clockpin, True) GPIO.output(clockpin, False) adcout = 0 # read in one empty bit, one null bit and 10 ADC bits for i in range(12): GPIO.output(clockpin, True) GPIO.output(clockpin, False) adcout <<= 1 if (GPIO.input(misopin)): adcout |= 0x1 GPIO.output(cspin, True) adcout /= 2 # first bit is 'null' so drop it return adcout # ces numeros de pins GPIO doivent etre modifies pour correspondre aux broches utilisées si vous avez utilisé un autre câblage que celui du tutoriel. SPICLK = 18 SPIMISO = 23 SPIMOSI = 24 SPICS = 25 # definition de l'interface SPI GPIO.setup(SPIMOSI, GPIO.OUT) GPIO.setup(SPIMISO, GPIO.IN) GPIO.setup(SPICLK, GPIO.OUT) GPIO.setup(SPICS, GPIO.OUT) #definition du ADC utilise (broche du MCP3008). Cette valeur peut aller de 0 à 7. adcnum = 0 # Lecture de la valeur brute du capteur read_adc0 = readadc(adcnum, SPICLK, SPIMOSI, SPIMISO, SPICS) # conversion de la valeur brute lue en milivolts = ADC * ( 3300 / 1024 ) millivolts = read_adc0 * ( 3300.0 / 1024.0) print "\tLuminosite - valeur brute : %s" % read_adc0 print "\ttension : %s millivolts" % millivolts
Nous pouvons par ce montage mesurer la luminosité en un lieu. La photorésistance n'est pas un composant particulièrement précis, ni calibré, ce qui fait que nous n'aurons pas de valeur ayant une grandeur physique. On utilisera plutôt ce composant économique pour mesurer des différences relatives, en prenant des valeurs de référence. Ce capteur permettra par exemple de distinguer le jour de la nuit, ou si un objet passe devant une source lumineuse.
La valeur de la résistance fixe permet d'ajuster la sensibilité du montage, de façon à pouvoir fonctionner dans une plage de plus ou moins fortes luminosités.