Table des matières

Mesure de la luminosité via une photorésistance connectée au MCP3008

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.

Prérequis

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.

Montage

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 : Schéma de montage d'une photorésistance connectée au Raspberry pi via un MCP3008 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.

Code en Python

Nous utiliserons sensiblement le même code que pour la lecture du potentiomètre :

readLDR.py
#!/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

Conclusions

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.

Retour à la liste des tutoriels

Retour à la l'accueil de la section