Skip to main content

Fotocélula

Introdução

Neste artigo, iremos demonstrar como criar um sistema que opera de forma semelhante ao funcionamento dos postes de luz. Utilizando um sensor de luminosidade (LDR), faremos o controle do acionamento do LED RGB da Franzininho WiFi Lab01.

Sensor LDR

O sensor LDR (Resistor Dependente de Luz), também conhecido como fotoresistor, é um dispositivo utilizado para medir a intensidade de luz presente no ambiente.

O funcionamento do sensor LDR é baseado no efeito fotocondutivo, que é a capacidade de alguns materiais semicondutores de alterarem sua condutividade elétrica quando expostos à luz. Quando a luz atinge o material do sensor LDR, mais elétrons são liberados, aumentando a condutividade do material e diminuindo sua resistência elétrica. Por outro lado, em ambientes escuros, o número de elétrons gerados é menor, resultando em uma maior resistência elétrica.

Eles são dispositivos simples e de baixo custo, então são muito acessíveis para diferentes projetos. No entanto, é importante destacar que os sensores LDR têm algumas limitações. Por exemplo, sua precisão pode variar com as condições de temperatura e umidade do ambiente.

Figura 1 – Sensor LDR

Figura 2 – Localização do sensor LDR na Franzininho WiFi Lab01

Recursos necessários

Para iniciar o trabalho com os GPIOs, é essencial possuir o diagrama de pinos da placa à disposição, pois isso vai permitir que você identifique tanto os nomes quanto as funções associadas a cada um deles.

PinoRecurso
IO1LDR
IO2BT6
IO3BT5
IO4BT4
IO5BT3
IO6BT2
IO7BT1
IO8OLED_SDA
IO9OLED_SCL
IO10TFT_DC
IO11TFT_RES
IO12LED AZUL
IO13LED VERDE
IO14LED VERMELHO
IO15DHT11
IO17BUZZER
IO35TFT_SDA
IO36TFT_SCL

Tabela 1 – Franzininho WiFi Lab01 pinout

Código

Com a Franzininho WiFi Lab01 conectada ao seu computador, abra o Thonny e crie um novo arquivo contendo o código a seguir:

import machine
import utime

led_red= machine.Pin(14,machine.Pin.OUT) #definindo o pino 16 como saída digital
ldr= machine.ADC(machine.Pin(1)) #definindo entrada analógica

fator_conversao = 3.3 / (65535)

while True:
leitura_LDR = ldr.read_u16() * fator_conversao
utime.sleep(1)
print(leitura_LDR)
if (leitura_LDR < 1):
led_red.value(1)
else:
led_red.value(0)

Explicação do código

Vamos começar com “import machine” e “import utime” para poder acessar os pinos da placa e para adicionar atrasos ao programa.

Em seguida, configuramos o LED e o LDR, onde o primeiro será uma saída digital e o segundo uma entrada analógica. A seleção dos pinos é feita de acordo com a tabela de pinagem.

Além disso, é feita a conversão do valor lido através do fator de correção. Isso é necessário pois o valor que é exibido no shell é uma representação decimal da saída bruta do conversor analógico-digital – mas não é a forma mais amigável de visualizá-lo. Então o fator de conversão será o resultado da divisão de dois valores: o primeiro número é a tensão máxima possível que o pino pode esperar: 3,3 V, da saída 3V3 do seu Pico; o segundo número é o valor máximo que a leitura de entrada analógica pode ter, que é 65535.

Feito isso, dentro de um loop realizamos a leitura do sensor, utilizando 16 bits de precisão e multiplicando pelo fator de correção. A coleta será feita a cada 1 segundo e será exibida no terminal.

Empiricamente, foi determinado que, caso o valor lido pelo sensor seja inferior a 1, o LED será ligado; caso contrário, ele será desligado. Mas recomendo que faça alguns testes com seu sensor para verificar qual faixa você considera adequada.

Conclusão

O programa que criamos neste artigo nos permitiu desenvolver um sistema que acende um LED de acordo com as condições de luminosidade do ambiente, replicando uma situação comum em residências automatizadas ou em postes de iluminação pública.

AutorSthefania Fernandes
Data:19/01/2023