from time import sleep_us, sleep # Importa funzioni per la gestione delle pause in microsecondi e secondi
from machine import Pin, time_pulse_us, I2C # Importa classi per gestire i pin, misurare impulsi e comunicare via I2C
from pico_i2c_lcd import I2cLcd # Libreria per gestire un display LCD via I2C
# Definizione dei pin per il sensore ultrasonico HC-SR04
pin_trig = Pin(16, Pin.OUT) # Pin di trigger (uscita)
pin_echo = Pin(17, Pin.IN) # Pin di echo (ingresso)
# Definizione dei pin per i LED (array di sei LED)
led = (
Pin(6, Pin.OUT), Pin(7, Pin.OUT), Pin(8, Pin.OUT),
Pin(9, Pin.OUT), Pin(10, Pin.OUT), Pin(11, Pin.OUT)
)
# Definizione del pin per il buzzer
pin_bazzer = Pin(28, Pin.OUT)
# Configurazione dell'I2C per il display LCD
I2C_Led = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000) # Inizializza l'I2C con SDA su pin 0 e SCL su pin 1
Indirizzo_LCD = I2C_Led.scan()[0] # Rileva l'indirizzo del display LCD
lcd0 = I2cLcd(I2C_Led, Indirizzo_LCD, 2, 16) # Inizializza il display LCD con 2 righe e 16 colonne
sleep(0.1) # Breve pausa prima di iniziare il loop principale
while True:
# Invio impulso di trigger per il sensore ultrasonico
pin_trig.value(1)
sleep_us(10) # Aspetta 10 microsecondi
pin_trig.value(0)
# Misura il tempo dell'impulso di ritorno
tempous = time_pulse_us(pin_echo, 1)
# Calcolo della distanza in centimetri
distanza = (0.0343 * tempous) / 2
# Aggiorna il display LCD con la distanza rilevata
lcd0.clear()
lcd0.putstr(str(round(distanza)))
# Stampa la distanza nel terminale
print("distanza: " + str(distanza) + " cm")
# Accensione progressiva dei LED in base alla distanza rilevata
if distanza <= 200:
led[0].value(1)
else:
led[0].value(0)
if distanza <= 150:
led[1].value(1)
else:
led[1].value(0)
if distanza <= 100:
led[2].value(1)
else:
led[2].value(0)
if distanza <= 50:
led[3].value(1)
else:
led[3].value(0)
if distanza <= 30:
led[4].value(1)
else:
led[4].value(0)
if distanza <= 15:
led[5].value(1)
else:
led[5].value(0)
# Effetto lampeggiante dei LED quando la distanza è minore di 10 cm
if distanza <= 10:
for i in range(6):
led[i].value(0)
sleep(0.1)
for j in range(6):
led[j].value(1)
# Attivazione del buzzer se la distanza è inferiore o uguale a 50 cm
if distanza <= 50:
pin_bazzer.value(1)
else:
pin_bazzer.value(0)
sleep(0.1) # Breve pausa prima di ripetere il ciclo