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!