Nota

Ciao, benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.

Perché unirti a noi?

  • Supporto esperto: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra comunità e del nostro team.

  • Impara e condividi: Scambia consigli e tutorial per migliorare le tue competenze.

  • Anteprime esclusive: Ottieni accesso anticipato a nuovi annunci di prodotti e anteprime speciali.

  • Sconti speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni festive e omaggi: Partecipa a concorsi e promozioni durante le festività.

👉 Pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi stesso!

4.1.9 Allarme di Retromarcia

Introduzione

In questo progetto, utilizzeremo un display LCD, un buzzer e sensori a ultrasuoni per creare un sistema di assistenza alla retromarcia. Possiamo posizionarlo su un’auto telecomandata per simulare il processo reale di retromarcia in un garage.

Componenti necessari

In questo progetto, avremo bisogno dei seguenti componenti.

../_images/list_Reversing_Alarm.png

È sicuramente conveniente acquistare un kit completo, ecco il link:

Nome

ELEMENTI IN QUESTO KIT

LINK

Kit Raphael

337

Raphael Kit

Puoi anche acquistarli separatamente dai link sottostanti.

INTRODUZIONE AI COMPONENTI

LINK PER L’ACQUISTO

Scheda di estensione GPIO

ACQUISTA

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Resistore

ACQUISTA

Cicalino

-

Transistor

ACQUISTA

Modulo Ultrasuoni

ACQUISTA

I2C LCD1602

ACQUISTA

Schema elettrico

Il sensore a ultrasuoni rileva la distanza tra sé stesso e l’ostacolo, che viene visualizzata sul display LCD sotto forma di codice. Allo stesso tempo, il sensore a ultrasuoni fa emettere al buzzer un segnale acustico la cui frequenza varia in base alla distanza rilevata.

T-Board Name

physical

wiringPi

BCM

GPIO23

Pin 16

4

23

GPIO24

Pin 18

5

24

GPIO17

Pin 11

0

17

SDA1

Pin 3

SCL1

Pin 5

../_images/Schematic_three_one3.png

Procedure sperimentali

Passo 1: Costruisci il circuito.

../_images/image242.png

Passo 2: Cambia directory.

cd ~/raphael-kit/python/

Passo 3: Esegui.

sudo python3 4.1.9_ReversingAlarm.py

Una volta eseguito il codice, il modulo sensore a ultrasuoni rileverà la distanza dall’ostacolo e visualizzerà l’informazione sul display LCD1602. Inoltre, il buzzer emetterà un segnale acustico di avvertimento la cui frequenza cambierà in base alla distanza.

Nota

  • Se compare l’errore FileNotFoundError: [Errno 2] No such file or directory: '/dev/i2c-1', devi fare riferimento a Configurazione I²C per abilitare l’I2C.

  • Se compare l’errore ModuleNotFoundError: No module named 'smbus2', esegui il comando sudo apt install python3-smbus2.

  • Se compare l’errore OSError: [Errno 121] Remote I/O error, significa che il modulo è cablato male o danneggiato.

  • Se il codice e i collegamenti sono corretti ma il display LCD non mostra nulla, puoi regolare il contrasto ruotando il potenziometro sul retro del modulo.

Codice

Nota

Puoi Modificare/Resettare/Copiare/Eseguire/Fermare il codice qui sotto. Ma prima di farlo, devi accedere al percorso del codice sorgente come raphael-kit/python. Dopo aver modificato il codice, puoi eseguirlo direttamente per vedere l’effetto.

import LCD1602
import time
import RPi.GPIO as GPIO

TRIG = 16
ECHO = 18
BUZZER = 11

def lcdsetup():
LCD1602.init(0x27, 1)   # init(indirizzo slave, retroilluminazione)
LCD1602.clear()
LCD1602.write(0, 0, 'Ultrasonic Starting')
LCD1602.write(1, 1, 'By SunFounder')
time.sleep(2)

def setup():
GPIO.setmode(GPIO.BOARD)
GPIO.setup(TRIG, GPIO.OUT)
GPIO.setup(ECHO, GPIO.IN)
GPIO.setup(BUZZER, GPIO.OUT, initial=GPIO.LOW)
lcdsetup()

def distance():
GPIO.output(TRIG, 0)
time.sleep(0.000002)

GPIO.output(TRIG, 1)
time.sleep(0.00001)
GPIO.output(TRIG, 0)

while GPIO.input(ECHO) == 0:
    a = 0
time1 = time.time()
while GPIO.input(ECHO) == 1:
    a = 1
time2 = time.time()

during = time2 - time1
return during * 340 / 2 * 100

def destroy():
GPIO.output(BUZZER, GPIO.LOW)
GPIO.cleanup()
LCD1602.clear()

def loop():
while True:
    dis = distance()
    print (dis, 'cm')
    print ('')
    GPIO.output(BUZZER, GPIO.LOW)
    if (dis > 400):
        LCD1602.clear()
        LCD1602.write(0, 0, 'Error')
        LCD1602.write(3, 1, 'Out of range')
        time.sleep(0.5)
    else:
        LCD1602.clear()
        LCD1602.write(0, 0, 'Distance is')
        LCD1602.write(5, 1, str(round(dis,2)) +' cm')
        if(dis>=50):
            time.sleep(0.5)
        elif(dis<50 and dis>20):
            for i in range(0,2,1):
                GPIO.output(BUZZER, GPIO.HIGH)
                time.sleep(0.05)
                GPIO.output(BUZZER, GPIO.LOW)
                time.sleep(0.2)
        elif(dis<=20):
            for i in range(0,5,1):
                GPIO.output(BUZZER, GPIO.HIGH)
                time.sleep(0.05)
                GPIO.output(BUZZER, GPIO.LOW)
                time.sleep(0.05)


if __name__ == "__main__":
    setup()
    try:
        loop()
    except KeyboardInterrupt:
        destroy()

Spiegazione del Codice

def lcdsetup():
    LCD1602.init(0x27, 1)   # init(indirizzo slave, retroilluminazione)

def setup():
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(TRIG, GPIO.OUT)
    GPIO.setup(ECHO, GPIO.IN)
    GPIO.setup(BUZZER, GPIO.OUT, initial=GPIO.LOW)
    lcdsetup()

In questo programma, utilizziamo componenti già impiegati precedentemente. Qui utilizziamo buzzer, LCD e sensore a ultrasuoni. Li possiamo inizializzare nello stesso modo già visto in precedenza.

dis = distance()
print (dis, 'cm')
print ('')
GPIO.output(BUZZER, GPIO.LOW)
if (dis > 400):
    LCD1602.clear()
    LCD1602.write(0, 0, 'Error')
    LCD1602.write(3, 1, 'Out of range')
    time.sleep(0.5)
else:
    LCD1602.clear()
    LCD1602.write(0, 0, 'Distance is')
    LCD1602.write(5, 1, str(round(dis,2)) +' cm')

Qui otteniamo i valori del sensore a ultrasuoni e calcoliamo la distanza. Se la distanza supera l’intervallo rilevabile, un messaggio di errore viene visualizzato sul display LCD. Se la distanza è all’interno dell’intervallo di lavoro, verranno visualizzati i risultati corrispondenti.

LCD1602.write(5, 1, str(round(dis,2)) +' cm')

Poiché l’LCD supporta solo caratteri, dobbiamo usare str() per convertire i valori numerici in stringhe. Applichiamo un arrotondamento a due decimali.

if(dis>=50):
    time.sleep(0.5)
elif(dis<50 and dis>20):
    for i in range(0,2,1):
        GPIO.output(BUZZER, GPIO.HIGH)
        time.sleep(0.05)
        GPIO.output(BUZZER, GPIO.LOW)
        time.sleep(0.2)
elif(dis<=20):
    for i in range(0,5,1):
        GPIO.output(BUZZER, GPIO.HIGH)
        time.sleep(0.05)
        GPIO.output(BUZZER, GPIO.LOW)
        time.sleep(0.05)

Questa condizione viene utilizzata per controllare il suono del buzzer. In base alla distanza rilevata, possiamo distinguere tre casi con frequenze sonore diverse. Tutti gli intervalli di ritardo totali sono di 500ms, sufficienti per permettere al sensore a ultrasuoni di funzionare correttamente.

Immagine del fenomeno

../_images/image243.jpeg