Progetto 18:Sensore a ultrasuoni
Progetto 18.1:Rilevamento della distanza ad ultrasuoni
1. Descrizione

Il sensore a ultrasuoni usa il sonar per determinare la distanza di un oggetto, come fanno i pipistrelli. Offre un eccellente rilevamento della distanza senza contatto con alta precisione e letture stabili in un pacchetto facile da usare. Include moduli trasmettitore e ricevitore ultrasonico.
Il sensore a ultrasuoni viene utilizzato in una vasta gamma di progetti elettronici per creare applicazioni di rilevamento ostacoli e misurazione della distanza, oltre a varie altre applicazioni.

Il modulo ultrasonico emetterà le onde ultrasoniche dopo il segnale di trigger. Quando le onde ultrasoniche incontrano un oggetto e vengono riflesse, il modulo emette un segnale echo, quindi può determinare la distanza dell’oggetto dal tempo trascorso tra il segnale di trigger (TRIG) e il segnale di echo (ECHO).
Come mostra l’immagine, è come due occhi. Uno è l’estremità di trasmissione, l’altro è l’estremità di ricezione.
Secondo il diagramma di collegamento sopra, la porta integrata del modulo sensore a ultrasuoni è collegata alla porta 5V G P15 P16 sulla basetta driver motore micro:bit. Il pin Trig (T) è controllato da P15 del micro:bit e il pin Echo (E) da P16.

2. Principio di funzionamento

(1) Mettere a livello basso TRIG poi inviare un segnale di trigger a livello alto per almeno 10us;
(2) Dopo il trigger, il modulo invierà automaticamente otto impulsi ultrasonici a 40KHz e verificherà se c’è un segnale di ritorno;
(3) Se c’è un segnale di ritorno, quando ECHO (E) passa a livello alto, la durata del livello alto è il tempo dalla trasmissione alla ricezione delle onde ultrasoniche. Quindi distanza misurata = durata del livello alto * 340 m/s * 0.5.
3. Parametri
Tensione di lavoro: 3-5.5V (DC)
Corrente di lavoro: 15mA
Frequenza di lavoro: 40kHz
Distanza massima di rilevamento: circa 3m
Distanza minima di rilevamento: 2-3cm
Precisione: fino a 0.2cm
Angolo di rilevamento: inferiore a 15 gradi
Impulso di trigger in ingresso: 10us livello TTL
Segnale echo in uscita: segnale di livello TTL in uscita (alto), proporzionale alla distanza
4. Preparazione
Inserire la scheda micro:bit nello slot del keyestudio 4WD Mecanum Robot Car V2.0
Inserire le batterie nel portabatterie
Portare l’interruttore di alimentazione su ON
Collegare il micro:bit al computer tramite un cavo USB
Aprire la versione offline di Mu.
5. Codice di prova
Aprire il software Mu e aprire il file “Ultrasonic Ranging.py” per importare il codice. È anche possibile inserire il codice direttamente nella finestra di modifica.
(Nota: Tutte le parole e i simboli in inglese devono essere scritti in inglese.)
Cliccare “Files” per importare il file di libreria “keyes_mecanum_Car_V2.py” nel micro:bit.
Cliccare “Check” per verificare errori nel codice. Il programma è errato se appaiono sottolineature o cursori.
Se il codice è corretto, collegare il micro:bit al computer e cliccare “Flash” per scaricare il codice sulla scheda micro:bit.

from microbit import *
from keyes_mecanum_Car_V2 import *
mecanumCar = Mecanum_Car_Driver_V2()
import music
tune = ["C4:4"]
distance_val = 0
while True:
i = 0
distance_val = mecanumCar.get_distance()
print("distance:", distance_val)
if distance_val < 10:
while i < 1:
music.play(tune)
sleep(200)
music.play(tune)
sleep(200)
i += 1
6. Risultato del test
Dopo aver scaricato correttamente il codice sulla scheda, non scollegare il cavo USB. Cliccare “REPL” e poi premere il pulsante di reset.

Il valore della distanza dell’ostacolo verrà visualizzato, come mostrato sotto.
Quando la distanza è inferiore a 10cm, il buzzer passivo dello smart car emetterà un suono.

7. Spiegazione del codice

Progetto 18.2:Evitamento Ultrasonico

1. Descrizione
In questo progetto integreremo un sensore a ultrasuoni e un’auto per realizzare un’auto ad evitamento ultrasonico.
Il principio è rilevare la distanza tra l’auto e l’ostacolo tramite il sensore a ultrasuoni per controllare il movimento dello smart car.
2. Preparazione
Inserire la scheda micro:bit nello slot del keyestudio 4WD Mecanum Robot Car V2.0
Inserire le batterie nel portabatterie
Portare l’interruttore di alimentazione su ON
Collegare il micro:bit al computer tramite un cavo USB
Aprire la versione offline di Mu.
3. Diagramma di flusso

4. Codice di prova
Aprire il software Mu e aprire il file “Ultrasonic Avoid Smart Car.py” per importare il codice. È anche possibile inserire il codice direttamente nella finestra di modifica.
(Nota: Tutte le parole e i simboli in inglese devono essere scritti in inglese.)
Cliccare “Files” per importare il file di libreria “keyes_mecanum_Car_V2.py” nel micro:bit.
Cliccare “Check” per verificare errori nel codice. Il programma è errato se appaiono sottolineature o cursori.
Se il codice è corretto, collegare il micro:bit al computer e cliccare “Flash” per scaricare il codice sulla scheda micro:bit.

from microbit import *
from keyes_mecanum_Car_V2 import *
mecanumCar = Mecanum_Car_Driver_V2()
distance_val = 0
distance_l = 0
distance_r = 0
class Servo:
def __init__(self, pin, freq=50, min_us=600, max_us=2400, angle=180):
self.min_us = min_us
self.max_us = max_us
self.us = 0
self.freq = freq
self.angle = angle
self.analog_period = 0
self.pin = pin
analog_period = round((1/self.freq) * 1000) # hertz to miliseconds
self.pin.set_analog_period(analog_period)
def write_us(self, us):
us = min(self.max_us, max(self.min_us, us))
duty = round(us * 1024 * self.freq // 1000000)
self.pin.write_analog(duty)
sleep(100)
self.pin.write_analog(0)
def write_angle(self, degrees=None):
if degrees is None:
degrees = math.degrees(radians)
degrees = degrees % 360
total_range = self.max_us - self.min_us
us = self.min_us + total_range * degrees // self.angle
self.write_us(us)
Servo(pin14).write_angle(90)
while True:
distance_val = mecanumCar.get_distance()
if distance_val < 20:
mecanumCar.Motor_Upper_L(0, 0)
mecanumCar.Motor_Lower_L(0, 0)
mecanumCar.Motor_Upper_R(0, 0)
mecanumCar.Motor_Lower_R(0, 0)
sleep(500)
Servo(pin14).write_angle(180)
sleep(500)
distance_l = mecanumCar.get_distance()
sleep(500)
Servo(pin14).write_angle(0)
sleep(500)
distance_r = mecanumCar.get_distance()
sleep(500)
if distance_l > distance_r:
mecanumCar.Motor_Upper_L(0, 100)
mecanumCar.Motor_Lower_L(0, 100)
mecanumCar.Motor_Upper_R(1, 100)
mecanumCar.Motor_Lower_R(1, 100)
Servo(pin14).write_angle(90)
sleep(300)
else:
mecanumCar.Motor_Upper_L(1, 100)
mecanumCar.Motor_Lower_L(1, 100)
mecanumCar.Motor_Upper_R(0, 100)
mecanumCar.Motor_Lower_R(0, 100)
Servo(pin14).write_angle(90)
sleep(300)
else:
mecanumCar.Motor_Upper_L(1, 100)
mecanumCar.Motor_Lower_L(1, 100)
mecanumCar.Motor_Upper_R(1, 100)
mecanumCar.Motor_Lower_R(1, 100)
5. Risultato del test
Dopo aver scaricato correttamente il codice sulla scheda, alimentazione esterna (portare l’interruttore DIP su ON), e premere il pulsante di reset sul micro:bit.

Quando la distanza dall’ostacolo è maggiore di 20cm, l’auto procede in avanti; al contrario, lo smart car svolta a sinistra.
6. Spiegazione del codice


Progetto 18.3:Inseguimento Ultrasonico

1. Descrizione
Nella lezione precedente abbiamo imparato il principio base del sensore per il tracciamento della linea. Successivamente, combineremo il sensore a ultrasuoni con l’auto per realizzare un’auto ad inseguimento ultrasonico.
Il sensore a ultrasuoni rileva la distanza dall’ostacolo e controlla lo stato di movimento dell’auto.
2. Preparazione
Inserire la scheda micro:bit nello slot del keyestudio 4WD Mecanum Robot Car V2.0
Inserire le batterie nel portabatterie
Portare l’interruttore di alimentazione su ON
Collegare il micro:bit al computer tramite un cavo USB
Aprire la versione offline di Mu.
2. Diagramma di flusso

3. Codice di prova
Aprire il software Mu e aprire il file “Ultrasonic Follow Smart Car.py” per importare il codice. È anche possibile inserire il codice direttamente nella finestra di modifica.
(Nota: Tutte le parole e i simboli in inglese devono essere scritti in inglese.)
Cliccare “Files” per importare il file di libreria “keyes_mecanum_Car_V2.py” nel micro:bit.
Cliccare “Check” per verificare errori nel codice. Il programma è errato se appaiono sottolineature o cursori.
Se il codice è corretto, collegare il micro:bit al computer e cliccare “Flash” per scaricare il codice sulla scheda micro:bit.

from microbit import *
from keyes_mecanum_Car_V2 import *
import neopixel
display.off()
mecanumCar = Mecanum_Car_Driver_V2()
np = neopixel.NeoPixel(pin7, 4)
class Servo:
def __init__(self, pin, freq=50, min_us=600, max_us=2400, angle=180):
self.min_us = min_us
self.max_us = max_us
self.us = 0
self.freq = freq
self.angle = angle
self.analog_period = 0
self.pin = pin
analog_period = round((1/self.freq) * 1000) # hertz to miliseconds
self.pin.set_analog_period(analog_period)
def write_us(self, us):
us = min(self.max_us, max(self.min_us, us))
duty = round(us * 1024 * self.freq // 1000000)
self.pin.write_analog(duty)
sleep(100)
self.pin.write_analog(0)
def write_angle(self, degrees=None):
if degrees is None:
degrees = math.degrees(radians)
degrees = degrees % 360
total_range = self.max_us - self.min_us
us = self.min_us + total_range * degrees // self.angle
self.write_us(us)
Servo(pin14).write_angle(90)
while True:
distance_val = 0
distance_val = mecanumCar.get_distance()
if distance_val >= 20 and distance_val <= 40:
mecanumCar.Motor_Upper_L(1, 80)
mecanumCar.Motor_Lower_L(1, 80)
mecanumCar.Motor_Upper_R(1, 80)
mecanumCar.Motor_Lower_R(1, 80)
for pixel_id1 in range(0, len(np)):
np[pixel_id1] = (255, 0, 0)
np.show()
if distance_val <= 10:
mecanumCar.Motor_Upper_L(0, 80)
mecanumCar.Motor_Lower_L(0, 80)
mecanumCar.Motor_Upper_R(0, 80)
mecanumCar.Motor_Lower_R(0, 80)
for pixel_id1 in range(0, len(np)):
np[pixel_id1] = (255, 255, 0)
np.show()
if distance_val > 10 and distance_val < 20 or distance_val > 40:
mecanumCar.Motor_Upper_L(0, 0)
mecanumCar.Motor_Lower_L(0, 0)
mecanumCar.Motor_Upper_R(0, 0)
mecanumCar.Motor_Lower_R(0, 0)
for pixel_id1 in range(0, len(np)):
np[pixel_id1] = (255, 255, 255)
np.show()
4. Risultato del test
Dopo aver scaricato correttamente il codice sulla scheda, alimentazione esterna (portare l’interruttore DIP su ON), e premere il pulsante di reset sul micro:bit.

Lo smart car potrà seguire l’ostacolo nel movimento e le 4 luci RGB WS2812 mostreranno colori diversi.
Nota: l’ostacolo può muoversi solo davanti allo smart car.
5. Spiegazione del codice

