In questo articolo, ti mostrerò come utilizzare un sensore a ultrasuoni HC-SR04 per misurare la distanza tra il tuo sensore e un oggetto a suo modo utilizzando Raspberry Pi. Iniziamo.
Componenti di cui hai bisogno:
Per misurare correttamente la distanza con il sensore Raspberry Pi e HC-SR04, è necessario,
- Un computer a scheda singola Raspberry Pi 2 o 3 con Raspbian installato.
- Un modulo sensore a ultrasuoni HC-SR04.
- Resistori 3x10kΩ.
- Una breadboard.
- Alcuni connettori maschio-femmina.
- Alcuni connettori maschio-maschio.
Ho scritto un articolo dedicato sull'installazione di Raspbian su Raspberry Pi, che puoi controllare su https://linuxhint.com/install_raspbian_raspberry_pi/ se necessario.
Piedinatura HC-SR04:
L'HC-SR04 ha 4 pin. VCC, TRIGGER, ECHO, GROUD.
Fig1: Piedinatura HC-SR04 (https://www.mouser.com/ds/2/813/HCSR04-1022824.PDF)
Il pin VCC deve essere collegato al pin +5V del Raspberry Pi, che è il pin 2. Il pin GROUND deve essere collegato al pin GND del Raspberry Pi, che è il pin 4.
I pin TRIGGER ed ECHO devono essere collegati ai pin GPIO del Raspberry Pi. Mentre il pin TRIGGER può essere collegato direttamente a uno dei pin GPIO del Raspberry Pi, il pin ECHO necessita di un circuito divisore di tensione.
Schema elettrico:
Collega il sensore a ultrasuoni HC-SR04 al tuo Raspberry Pi come segue:
Fig2: sensore a ultrasuoni HC-SR04 collegato a Raspberry Pi.
Una volta che tutto è collegato, ecco come appare:
Fig3: sensore a ultrasuoni HC-SR04 collegato a Raspberry Pi su breadboard.
Fig4: sensore a ultrasuoni HC-SR04 collegato a Raspberry Pi su breadboard.
Scrivere un programma Python per misurare la distanza con HC-SR04:
Innanzitutto, connettiti al tuo Raspberry Pi usando VNC o SSH. Quindi, apri un nuovo file (diciamo distanza.pi) e digitare le seguenti righe di codici:
Qui, la riga 1 importa la libreria GPIO di raspberry pi.
La riga 2 importa la libreria dei tempi.
Dentro il provare blocco, viene scritto il codice effettivo per misurare la distanza utilizzando HC-SR04.
Il finalmente blocco viene utilizzato per ripulire i pin GPIO con GPIO.ripulire() metodo all'uscita del programma.
Dentro il provare blocco, sulla linea 5, GPIO.setmode(GPIO.TAVOLA) è usato per rendere più facile la definizione dei pin. Ora puoi fare riferimento ai pin con i numeri fisici così com'è sulla scheda Raspberry Pi.
Sulla linea 7 e 8, pinTrigger è impostato per 7 e pinEcho è impostato per 11. Il TRIGGER il pin di HC-SR04 è collegato al pin 7, e ECO pin di HC-SR04 è collegato al pin 11 del Rapsberry Pi. Entrambi sono pin GPIO.
In linea 10, pinTrigger è configurato per OUTPUT utilizzando GPIO.impostare() metodo.
Sulla linea 11, pinEcho è configurato per INPUT usando GPIO.impostare() metodo.
Le righe 13-17 sono utilizzate per il ripristino pinTrigger (impostandolo a logico 0) e impostando il pinTrigger alla logica 1 per 10ms e poi alla logica 0. In 10 ms, il sensore HC-SR04 invia 8 impulsi da 40 KHz.
Le linee 19-24 vengono utilizzate per misurare il tempo necessario affinché gli impulsi a 40 KHz vengano riflessi su un oggetto e tornano al sensore HC-SR04.
Sulla riga 25, la distanza viene misurata utilizzando la formula,
Distanza = delta tempo * velocità (340M/S) / 2
=> Distanza = delta tempo * (170M/S)
Ho calcolato la distanza in centimetri invece che in metri, giusto per essere precisi. Anche la distanza calcolata è arrotondata a 2 decimali.
Alla fine, alla riga 27, viene stampato il risultato. Ecco, molto semplice.
Ora, esegui lo script Python con il seguente comando:
$ python3 distanza.piCome puoi vedere, la distanza misurata è 8.40 cm.
Fig5: oggetto posto a circa 8.40 cm di distanza dal sensore.
Mi sono spostato sull'oggetto un po' più lontano, la distanza misurata è 21.81 cm. Quindi, funziona come previsto.
Fig6: oggetto posto a circa 21.81 cm di distanza dal sensore.
Ecco come misurare la distanza con Raspberry Pi utilizzando il sensore a ultrasuoni HC-SR04. Vedi il codice per la distanza.pi sotto:
import RPi.GPIO come GPIOtempo di importazione
provare:
GPIO.setmode(GPIO.TAVOLA)
pinTrigger = 7
pinEcho = 11
GPIO.setup(pinTrigger, GPIO.SU)
GPIO.setup (pinEcho, GPIO.NEL)
GPIO.uscita (pinTrigger, GPIO.BASSO)
GPIO.uscita (pinTrigger, GPIO.ALTA)
tempo.dormire (0.00001)
GPIO.uscita (pinTrigger, GPIO.BASSO)
mentre GPIO.input(pinEcho)==0:
pulseStartTime = tempo.tempo()
mentre GPIO.input(pinEcho)==1:
pulseEndTime = tempo.tempo()
pulseDuration = pulseEndTime - pulseStartTime
distanza = round (pulseDuration * 17150, 2)
print("Distanza: %.2f cm" % (distanza))
finalmente:
GPIO.ripulire()