Conectando Sensores de Luz no Raspberry Pi

Neste post vamos apresentar como realizar a conexão, leitura e alguns exemplos de utilização de sensores de luminosidade LDR. Estou utilizando um módulo pronto, porém vamos tratar tanto do uso do módulo e sua saída digital e como obter a saída analógica.

Caso você ainda não saiba (e queira saber) sobre como o Raspberry Pi faz leituras analógicas de sensores, sugiro ler primeiro este post: Como conectar Entradas Analógicas no Raspberry Pi: MCP3008

Se a ansiedade é muita, seguimos daqui e depois complementa a leitura.

Sensor de Luz LDR

O sensor de luz LDR (Light Dependant Resistor) é um foto resistor que altera o valor de sua resistência de acordo com a intensidade da luminosidade captada.

No mercado é possível encontrar 3 soluções para utilização deste sensor com o Raspberry Pi:

  1. Comprar apenas o sensor LDR e um capacitor de 1uF polarizado para conexão direta na GPIO
  2. Comprar o módulo integrado com saída digital
  3. Utilizar um conversor Analógico-Digital (AD) como o MCP3008 para conectar este e outros sensores analógicos

Vamos passar uma por uma das soluções.

#1: Utilizando um LDR e Capacitor polarizado de 1uF

O sensor LDR e o capacitor de 1uF, são encontrados no mercado:

Como sabemos o RPi só possui entradas e saídas digitais e nenhum conversor AD de fábrica integrado em sua placa. Como é possível realizar a leitura analógica ligando estes componentes diretamente na GPIO?

É utilizado uma estratégia de software para que o RPi faça esta leitura, apesar de bastante eficiente no resultado ela consumirá poder de processamento e sabemos que em se tratando de soluções compactas precisamos ter cautela com este tipo de solução.

Mas enfim, a biblioteca GPIOZERO possui uma função especial chamada ‘LightSensor’ que se apropria deste método e vamos utilizá-la para fins de demonstração.

As ligações necessárias são as seguintes:

ldr_schematic.jpg

Sendo as ligações:

  • Vermelho (Vcc): +3.3V
  • Amarelo (Sinal Analógico): GPIO2
  • Cinza (GND): GND (pino 14)

Utilizei componentes de marcas genéricos encontrados no mercado:

  • LDR
  • Capacitor 1uF (este capacitor tem polaridade, portanto ligue o (-) negativo no GND)

It’s Coding Time (Parte 1)

Um exemplo de codificação utilizando a função ‘LightSensor’

#! usr/bin/python
#_*_ coding: utf-8 _*_

from gpiozero import LightSensor # Utilizando a saída Analógica com a GPIOZERO

ldr = LightSensor(2)    # altere a GPIO caso esteja utilizando outra


while True:
            print(ldr.value)   # valores fracionados (float) variande de 0 até 1

Para explorar um pouco esta estratégia e utilizações da funcionalidade: https://gpiozero.readthedocs.io/en/v1.3.1/api_input.html#light-sensor-ldr

#2: Módulo integrado: utilizando a saída digital

Por fim acabei comprando o módulo integrados LDR, composto do próprio sensores LDR mais um comparador de tensão LM393. A idéia deste módulo é que a leitura analógica do LDR seja comparado com um valor de tensão regulável (pelo trimpot acoplado no módulo) e produza um sinal lógico ‘0’ ou ‘1’ no caso de presença ou ausência de luz, dada esta regulagem de ‘sensibilidade’.

35
Módulo: LDR + LM 393

Este modelo possui a seguinte especificação:

  • D0: Saída Digital
  • GND: comum/GND
  • VCC: Alimentação entre 3V e 5V
  • Potênciometro para ajuste da sensibilidade: Totalmente no sentido horário máximo de sensibilidade.

 

It’s Coding Time (Part 2)

Para utilizar o módulo e apenas saber se tem ou não tem luz com base no nível configurado no trimpot, podemos apenas fazer as seguintes ligações – do RPi/GPIO para o Módulo LDR:

  • GPIO23 > D0
  • 3.3V > VCC
  • GND > GND

Para interpretar esta entrada digital, podemos utilizar uma classe base do tipo ‘Digital Input’ ou pedir licença e utilizar uma classe com mais ‘recheio’ de funcionalidades, como é o caso da classe ‘Button’.

O único detalhe é que para utilizá-la precisamos configurá-la para interpretar a entrada como ‘pull-down’, isto é a entrada poderá receber valores de GND ou +VCC ou invés de um botão comum que apenas envia o GND no caso de pressionado.

Um exemplo de código segue abaixo:

#! usr/bin/python
#_*_ coding: utf-8 _*_

from gpiozero import Button

button = Button(pin=4, pull_up=False)

while True:
          if(button.is_pressed):
                       print("LDR sentiu algo!")

 

#3: Módulo integrado: utilizando a saída analógica

Para utilizarmos a saída analógica do módulo é necessário 2 ajustes:

  1. Caso o seu módulo não possua a saída de analógico deveremos captá-la do ponto de solda com o sinal (+) ao lado do sensor LDR (veja abaixo como eu executei)

    whatsapp-image-2017-01-10-at-01-56-04
    Pino adicionado para leitura analógica
  2. Adquirir e conectar um conversor AD (ex: MCP3008) ao Raspberry Pi nas saídas específicas. Para saber mais sobre isso visite: Como conectar Entradas Analógicas no Raspberry Pi: MCP3008

 

picture1
Ligação Analógica do Módulo ao AD Raspberry Pi

Descrevendo as conexões temos (do sensor a GPIO):

  • A0 (Analógico) >> Channel 0 do MCP3008
  • VCC >> +3.3V
  • GND >> GDN

Para as conexões do MCP3008, veja o post: Como conectar Entradas Analógicas no Raspberry Pi: MCP3008

 

It’s Coding Time (Parte 3)

Seguindo esta conexão devemos utilizar os objetos da biblioteca GPIOZERO reservados ao conversor AD MCP3008. Segue abaixo um exemplo de como fazer estas leituras, crie o arquivo:

sudo nano ldr_analogico.py

Digite o código:

from gpiozero import MCP3008
from time import sleep
ldr = MCP3008(0)               # Atribui o canal 0 para esta leitura

while True:
      ldr_perc = (1 - ldr) * 100     # Resolve a escala de 0 a 1 para 0% a 100%
      print("Luminosidade {0}%".format(ldr_perc))
      sleep(1)

Salve o arquivo com CTRL+X e confirme.

Para executar, na linha de comando digite:

sudo python ldr_analogico.py

Teremos 1 leitura a cada segundo com uma escala de luminosidade ajustada variando de 0% onde 0% (ausência de luz) e 100% (completamente iluminado).

Caso interesse em aprender mais sobre como funciona o LDR segue referência aqui


DC

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s