Sensor de luminosidade + LCD + LED
Fala galera!
Hoje vou demonstrar um sensor bem interessante para usos gerais e infinitos! O sensor de luminosidade ou photo resistor é capaz de mensurar a quantidade de luz que está sendo direcionado a ele por meio dos filamentos que se encontram em sua parte superior, como na imagem abaixo (em inglês)

O funcionamento do sensor é simples:
Acionaremos o sensor em estado HIGH , e fica aguardando ele ficar LOW . esse tempo de espera entre ficar HIGH e LOW é o que iremos utilizar para mensurar a luminosidade já que o Raspberry não possui leituras analógicas.
Para isso funcionar realmente precisamos de um capacitor de 1uF para fazer o ciclo de 1ms entre as leituras, lembrando sempre da posição que os pinos devem ser (maior positivo , menor negativo), no meu caso eu fiz a solda de dois fios para poder trabalhar com o capacitor fora da protoboard com espaço para movimentação.

Utilizaremos para esse post o LCD que fizemos funcionar no post anterior para mostrar o nível de luminosidade, além de um LED que irá acender proporcionalmente à falta de luz, porém o LCD não é obrigatório podendo ser tirado do código.
![]() |
Primeiramente iremos fazer a montagem do sensor na protobard da seguinte forma:
- conexão do negativo do Raspberry (GPIO6)
- o capacitor conectando o negativo em um espaço da protobard
- o GPIO7 (4) logo acima da conexão do capacitor
- A parte de conexão menor do sensor conectada logo acima
___________________________ - conexão do GPIO1 (3.3v) na parte de conexão maior do sensor
Caso tenha feito a conexão corretamente o seu protoboard ficará parecido com isso:
Agora no código inicialmente iremos executá-lo para efetuar a medição da luminosidade “Default” do seu ambiente e ai sim iremos configurar o script.
usaremos o seguinte código com base na imagem dos GPIO abaixo:
#!/usr/bin/env python
import RPi.GPIO as GPIO, time, os
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
while (True):
ciclos = 0
GPIO.setup(7, GPIO.OUT)
GPIO.output(7, GPIO.LOW)
time.sleep(0.1)
GPIO.setup(7, GPIO.IN)
#Tempo do capacitor de 1ms
while (GPIO.input(7) == GPIO.LOW):
ciclos += 1
print ciclos
O código acima irá enviar para a tela o valor de ciclos atuais, sendo maior mais escuro e menor mais claro.
Com isso poderemos identificar qual é o nosso valor padrão de luminosidade para que o nosso sistema não se perca com uma luminosidade diferente da minha no caso.
Feito esse ajuste e captura de um valor médio de luminosidade padrão, iremos colocar isso em nosso aplicativo.
Iremos fazer a conexão com o LED, nesse caso utilizei uma outra protobard menor que eu tinha para separar a conexão, porém pode ser feito na mesma sem problema nenhum.
A conexão é a mesma que utilizamos normalmente, o negativo com o resistor e uma conexão de GPIO que colocaremos na GPIO8 (14).
Um teste que eu sempre faço para testar se a conexão do LED está OK é ao invés de ligar o GPIO eu conecto direto no 3.3V, se ligar é porque a conexão está funcional
Faremos o código com o LCD abaixo, porém o script do LCD está como pinagem BCM ao invés do BOARD que estamos acostumados, relembrando que BOARD é a numeração física do pino GPIO, que nunca muda indiferente da versão do Raspberry e a BCM é a numeração representativa, que pode variar de versão do Raspberry, caso não tenha ou não queria utilizar o LCD somente exclua as menções do LCD
#!/usr/bin/env python
import RPi.GPIO as GPIO, time, os
GPIO.setwarnings(False)
#LCD INICIO
from lcd import raspibrLCD;
raspi = raspibrLCD();
raspi.inicializar();
#LCD FIM
GPIO.setmode(GPIO.BCM)
GPIO.setup(14,GPIO.OUT)
GPIO.output(14,GPIO.LOW);
luzPadrao = 5000;
p = GPIO.PWM(14,100);
p.start(0)
while (True):
ciclos = 0
GPIO.setup(4, GPIO.OUT)
GPIO.output(4, GPIO.LOW)
time.sleep(0.1)
GPIO.setup(4, GPIO.IN)
#Tempo do capacitor de 1ms
while (GPIO.input(4) == GPIO.LOW):
ciclos += 1
if(ciclos <= luzPadrao):
cycle = 0.0 ;
else:
cycle = (100*ciclos)/22000;
if(cycle > 100):
cycle = 100 ;
p.ChangeDutyCycle(cycle);
#Daqui pra baixo são informacoes do LCD
if(cycle >= 0 and cycle <= 30):
strLuz = "Luz ALTA";
if(cycle > 30 and cycle < 60):
strLuz = "Luz Media";
if(cycle > 60 and cycle < 80):
strLuz = "Luz Baixa";
if(cycle > 80 ):
strLuz = "SEM LUZ!!";
raspi.escrever(strLuz,1);
Caso a conexão seja feita corretamente o resultado será parecido com esse:
espero que tenham gostado e até a próxima!



