Luminosité et Orange Pi Zéro

Capteur de Luminosité analogique

Le LM393 acheté chez AliExpress, est un capteur de luminosité connectable à des nano ordinateurs comme les Orange PI. Il dispose d’une sortie numérique fournissant un 0 ou un 1 suivant la luminosité et le seuil réglable par une résistance variable. Ici nous nous intéresserons à la sortie analogique qui fournit une tension entre 0 et 3.3v (pour une alimentation en 3.3v) suivant le niveau de luminosité. En forte lumière on est près de 0v, en faible lumière près de 3.3v.

La difficulté avec les Orange Pi comme d’autres nano ordinateurs, il ne dispose pas d’une entrée analogique pour mesurer une tension mais uniquement d’entrées numériques. Nous allons convertir la mesure de tension analogique en mesure de temps de charge d’un condensateur en partant de 0v jusqu’au passage à 1 de l’entrée numérique.

Raccordement

Raccordez le LM393 au +3.3v de l’orange pi zéro et par exemple l’ensemble resistance, capacité sur la pin PA15 comme indiqué sur le schéma.

Sur ce schéma il manque la résistance de pull up à l’entrée PA15 de l’orange pi de quelques dizaines de kΩ . Elle fait un pont avec la 200kΩ qui même si A0 est à 0V, le niveau à l’entrée est vu comme un 1.

Dans un premier temps, la broche PA15 est mise à zéro durant 200ms pour vider le condensateur de 1µF. Puis la broche PA15 passe en entrée, le condensateur se charge avec la résistance de pull up et la résistance de 200kΩ qui est connecté à la sortie A0 du capteur de luminosité. En mesurant le temps T de chargement en ms, on a une valeur représentant le niveau d’éclairement.

Code

Pour l’installation du système Armbian, voir l’article suivant: https://f1atb.fr/index.php/fr/2020/03/27/mise-en-route-orange-pi-zero/

En premier pour python 3, il faut mettre à jour et rajouter l’installateur pip. Puis rajouter la bibliothèque d’accès au GPIO pyA20.

apt-get update
apt-get upgrade
apt install python3-pip
pip3 install pyA20

En accès root, créez le source test.py avec nano.

nano test.py

import time
import math
from pyA20.gpio import gpio
from pyA20.gpio import port

anal_in_out = port.PA15
gpio.init()

Offset=70


while True:
    gpio.setcfg(anal_in_out, gpio.OUTPUT) 
    gpio.output(anal_in_out, 0) 
    time.sleep(0.2)
    gpio.setcfg(anal_in_out, gpio.INPUT)
    gpio.pullup(anal_in_out, gpio.PULLUP)
    T0=time.time() * 1000                  # temps en ms
    T=T0
    Tmonte=0
    
    while T-T0<400:
        state = gpio.input(anal_in_out)
        T=time.time() * 1000
        if state==1:
            Tmonte=T-T0
            T=T0+400
    
    
    Lumi=math.floor(Tmonte-Offset)  
    print ("Lumi",Lumi)
    
    time.sleep(1)

Testez l’ensemble avec:

python3 test.py

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *