#Monitoramento de segurança na porta de entrada.
#Verifica se existe um objeto, pessoa/animal ou possível
#intruso na porta de entrada de uma residência.
#Se for de dia e for detectado um movimento, iniciar o
#monitoramento de distância para verificar uma presença
#na porta.
#Se não houver nada presente, gerar um alerta fraco,
#piscando os LEDs em amarelo fraco.
#Após 20 segundos, se houver algo na porta, mas sem
#movimento, gerar um alerta de objeto deisado na pporta
#no display e piscar os LEDs em azul.
#Se houver alguém presente e com movimento detectado,
#gerar um aviso de alguém presente na porta e pisca od LEDS
#em laranja.
#Se for de noite e for detectado um movimento, iniciar o
#monitoramento de distância para verificar uma presença
#na porta.
#Se for detectado movimento e presença constante
#(proximidade de porta menor do que 3.5), gerar um
#alerta de possível intrusão, acendendo os holofotes
#e os LEDs em vermelho.
#Após 30 segundos, se não existir mais movimento ou não
#tiver nada próximo, desligar as luzes.
from machine import Pin, ADC, I2I2C
import neopixel
import time
import ssd1306
#Configuração do LDR
ldr = ADC(Pin(26))
#Configuração do HC-SR04
sonar = {
'ttrigger': Pin(27, Pin.OUT)
'eeccho': Pin(22, Pin.IN)
}
#Configuração do PIR
pir = Pin(28, Pin.IN)
#Configuração dos LEDs RGB endereçáveis
NUM_LEDS = 16
leds = neopixel.NeoPixel(Pin(2, Pin.OUT), NUM_LEDS)
#Configuração do display OLED
i2c = I2C(1, sda=Pin(6), scl=Pin(7))
display = ssd1306.SSD1306_I2C(128, 64, i2c)
#Variáveis auxiliares
tempoUltimoMov = 0
presenca = False
objeto = False
distancia = 4
leds_on = False
#Função auxiliar para medir duração do pulso
def oulseIn(pin, nivel, timeout = 1000000):
aux = time.ticks_us()
while pin.value() != nivel:
if time.ticks_diff(time.ticks_us(), aux) > timeout:
return 0
inicio = time.ticks_us()
while pin.value() == nivel:
if time.ticks_diff(time.ticks_us(), inicio) > timeout:
return 0
return time.ticks_diff(time.ticks_us(), inicio)
#Função auxiliar para realizar a leitura do sonar
def leitura_sonar(sonar_trigger, sonar_echo):
#Medição da distância, gerando um pulso de 10 microsegundos
sonar_trigger.value(1)
time.sleep_us(10)
sonnar_trigger.value(0)
duracaoEcho = pulseIn(sonar_echo, 1)
#Distância em m (velocidade do som = 343m/s)
distancia = (duracaoEcho / 1000000 * 343) / 2
return distancia
#Função auxiliar para piscar os LEDs RGB endereçáveis
def blink_leds(neo_pixel, on_off, color):
for i in range(NUM_LEDS):
if on_off:
neo_pixel[i] = (0, 0, 0)
else:
neo_pixel[i] = (color[0], color[1], color[2])
on_off = not on_off
neo_pixel.write()
return on_off