Progetto 04: Parcheggio Intelligente

1. Panoramica

I parcheggi intelligenti sono ovunque. Possiamo anche creare un parcheggio intelligente? Certo. Possiamo usare un sensore a ultrasuoni per rilevare se ci sono veicoli davanti. Quando un veicolo (o un oggetto) viene rilevato in avvicinamento, controlliamo il servo per sollevare l’asta di sollevamento; se viene rilevato che si allontana, il servo abbasserà l’asta di sollevamento.

2. Componenti

Img

Img

Img

micro:bit board *1

micro:bit T-type expansion board *1

micro USB cable *1

Img

Img

Img

ultrasonic sensor *1

servo *1

DuPont wires

Img

Img

Img

breadboard *1

jump wires

battery holder *1
(batterie AA auto-fornite *2)

Img

Img

bat card *1

lift rod card *1

3. Conoscenza dei Componenti

Servo

Il servo è un attuatore di posizione. Possiamo usare il servo per controllare la posizione esatta o fornire alta coppia. Di solito viene usato in robot, automobili radiocomandate e persino modelli di aeroplani. Esistono molte specifiche, ma tutti i servi hanno tre fili: segnale (arancione), positivo (rosso) e negativo (marrone). Il colore può variare a seconda della marca del servo.

Img

Diagramma della struttura interna:

Img

① Segnale: riceve i segnali di controllo dal microcontrollore;

② potenziometro: può misurare la posizione dell’albero di uscita, fa parte del feedback dell’intero servo;

③ Controllore interno: la scheda embedded elabora i segnali di controllo esterni, aziona il motore e i segnali di feedback della posizione, è il cuore dell’intero servo;

④ Motore DC: funge da attuatore per fornire velocità, coppia e posizione;

⑤ Trasmissione / meccanismo del servo: il meccanismo amplifica la corsa fornita dal motore all’angolo finale di uscita secondo un certo rapporto di trasmissione.

Azionare il servo

Inviare segnali PWM alla linea del segnale del servo per controllarne l’uscita. Il duty cycle del PWM determina direttamente la posizione dell’albero di uscita. Il periodo è solitamente di 20 millisecondi e tipicamente impostato per generare impulsi a una frequenza di 50Hz.

Ad esempio (servo 180°):

Quando inviamo un impulso di larghezza 1,5 millisecondi (ms) al servo 180°, l’albero di uscita del servo si sposterà nella posizione centrale (90 gradi);

Se la larghezza dell’impulso è 0,5ms, l’albero di uscita si sposterà a 0 gradi;

Se la larghezza dell’impulso è 2,5ms, l’albero di uscita si sposterà a 180 gradi;

Img

Parametri:

  • Tensione di funzionamento: DC 3.3V~5V

  • Temperatura di funzionamento: -10°C ~ +50°C

  • Dimensioni: 32.25mm x 12.25mm x 30.42mm

  • Interfaccia: interfaccia a 3 pin con passo di 2.54mm

4. Schema di Collegamento

Img

Quando si utilizzano il sensore a ultrasuoni e il servo, dobbiamo collegare un’alimentazione esterna e impostare l’interruttore DIP su ON.

Img

Img

5. Flusso del Codice

Img

6. Codice di Test

Il file del codice è fornito nella cartella Progetto 04:Smart-Parking, file Project-04-Smart-Parking.py.

Img

Codice completo: La soglia nella condizione 10 può essere modificata in base alle condizioni reali.

'''
Function: smart parking
Compiling IDE: MU 1.2.0
Author: https://docs.keyestudio.com
'''
# import related libraries
from microbit import *
import ustruct
import machine
from time import sleep_us

distance = 0              # set variable distance initial value to 0
lastEchoDuration = 0      # set variable lastEchoDuration initial value to 0

val = Image("09990:""09090:""09990:""09000:""09000")  # set iamge
display.show(val)        # LED matrix shows image
pin0.write_analog(25.6)    # set P0 pin analog to 25.6, servo angle to 0°
sleep(200)

while True:
    pin0.set_analog_period(20) # set servo frequency
    # Ultrasonic sensor sends and receives signals
    pin1.write_digital(0)
    sleep_us(2)
    pin1.write_digital(1)
    sleep_us(15)
    pin1.write_digital(0)

    # measure the time interval between "when rising edge detected from the pin2" and "until the pin becomes low again"
    # unit is μs. Assign the interval to variable t.
    t = machine.time_pulse_us(pin2, 1, 35000)

    # a conditional statement, used to check whether the values of two variables t and lastechoduration satisfy specific conditions.
    # If both conditions are met, the block of code under the condition statement is executed.
    if (t <= 0 and lastEchoDuration >= 0):
        t = lastEchoDuration   # variable t = variable lastechoduration
    else:
        lastEchoDuration = t
    distance = int(t * 0.017)  # calculate distance
    if distance < 10:          # if distance < 10cm
       pin0.write_analog(77)   # servo rotate to 90°
       sleep(2000)
    else:  # or
       sleep(2000)
       pin0.write_analog(25.6)
       sleep(2000)

7. Risultato del Test

Clicca “Flash” per caricare il codice sulla scheda micro:bit.

Img

Dopo aver scaricato il codice sulla scheda, accendi tramite cavo micro USB o alimentazione esterna (imposta l’interruttore DIP su ON), e premi il pulsante di reset sulla scheda.

Img

Quando il sensore a ultrasuoni rileva un veicolo (o oggetto) in avvicinamento, il servo controlla l’asta di sollevamento per alzarla; se il sensore rileva che si allontana, il servo abbasserà l’asta di sollevamento.

ATTENZIONE: Se il cablaggio è corretto ma non vedi i risultati, premi il pulsante di reset sul retro della scheda.

Img