Nota

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

Perché Unirsi?

  • Supporto Tecnico Esperto: Risolvi i problemi post-vendita e affronta le sfide tecniche con l’aiuto della nostra comunità e del nostro team.

  • Impara e Condividi: Scambia suggerimenti e tutorial per migliorare le tue competenze.

  • Anteprime Esclusive: Ottieni accesso anticipato agli annunci di nuovi prodotti e anteprime.

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

  • Promozioni Festive e Giveaway: Partecipa a giveaway e promozioni festive.

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

2.2.6 Modulo Sensore di Velocità

Introduzione

In questo progetto, impareremo ad usare il modulo sensore di velocità. Il sensore di velocità è un tipo di tachimetro utilizzato per misurare la velocità di un oggetto rotante come un motore.

Componenti Necessari

In questo progetto, abbiamo bisogno dei seguenti componenti.

../_images/2.2.6_photo_interrrupter_list.png

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

Nome

COMPONENTI NEL KIT

LINK

Raphael Kit

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

LED

ACQUISTA

Modulo Sensore di Velocità

-

Schema Elettrico

../_images/2.2.6_photo_interrrupter_schematic.png

Procedure Sperimentali

Passo 1: Costruisci il circuito.

../_images/2.2.6_photo_interrrupter_circuit.png

Passo 2: Cambia directory.

cd ~/raphael-kit/python-pi5

Passo 3: Esegui.

sudo python3 2.2.6_speed_sensor_module_zero.py

Dopo aver eseguito il codice, il LED verde si accenderà. Se posizioni un ostacolo nella fessura del modulo sensore di velocità, sullo schermo verrà stampato «luce bloccata» e il LED rosso si accenderà. Rimuovi l’ostacolo e il LED verde si riaccenderà.

Avvertimento

Se viene visualizzato l’errore RuntimeError: Cannot determine SOC peripheral base address, fare riferimento a If gpiozero doesn’t work..

Code

Nota

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

#!/usr/bin/env python3
from gpiozero import LED, Button
from signal import pause

# Inizializza i pin GPIO per il sensore di velocità e i LED utilizzando la libreria GPIO Zero
speed_sensor = Button(17, pull_up=False)  # Sensore di velocità collegato al pin GPIO 17 senza pull-up
green_led = LED(27)                      # LED verde collegato al pin GPIO 27
red_led = LED(22)                        # LED rosso collegato al pin GPIO 22

def update_leds():
    """
    Update the state of LEDs based on the speed sensor.
    - If the sensor is pressed (triggered), the red LED is turned on and a message is printed.
    - If the sensor is released (not triggered), the green LED is turned on.
    """
    if speed_sensor.is_pressed:
        green_led.off()  # Spegni il LED verde
        red_led.on()     # Accendi il LED rosso
        print('Light was blocked')  # Stampa il messaggio che indica che il sensore è attivato
    else:
        green_led.on()   # Accendi il LED verde
        red_led.off()    # Spegni il LED rosso

try:
    # Loop principale per controllare continuamente lo stato del sensore
    while True:
        # Aggiorna i LED in base ai cambiamenti dello stato del sensore
        speed_sensor.when_pressed = update_leds   # Aggiorna i LED quando il sensore è premuto
        speed_sensor.when_released = update_leds  # Aggiorna i LED quando il sensore è rilasciato

except KeyboardInterrupt:
    # Gestisce KeyboardInterrupt (Ctrl+C) per una terminazione pulita dello script
    pass

Spiegazione del Codice

  1. La libreria gpiozero viene importata per utilizzare le classi LED e Button per interagire con i pin GPIO. La libreria signal viene importata per la funzione pause, utilizzata per mantenere in esecuzione lo script.

    #!/usr/bin/env python3
    from gpiozero import LED, Button
    from signal import pause
    
  2. Il sensore di velocità viene impostato come Button sul pin GPIO 17. Il parametro pull_up=False indica che non viene utilizzata la resistenza di pull-up interna. green_led e red_led sono inizializzati come oggetti LED collegati rispettivamente ai pin GPIO 27 e 22.

    # Inizializza i pin GPIO per il sensore di velocità e i LED utilizzando la libreria GPIO Zero
    speed_sensor = Button(17, pull_up=False)  # Sensore di velocità collegato al pin GPIO 17 senza pull-up
    green_led = LED(27)                      # LED verde collegato al pin GPIO 27
    red_led = LED(22)                        # LED rosso collegato al pin GPIO 22
    
  3. La funzione update_leds controlla lo stato del sensore di velocità. Se il sensore è premuto (attivato), spegne il LED verde, accende il LED rosso e stampa un messaggio. Se il sensore è rilasciato, fa l’opposto.

    def update_leds():
        """
        Update the state of LEDs based on the speed sensor.
        - If the sensor is pressed (triggered), the red LED is turned on and a message is printed.
        - If the sensor is released (not triggered), the green LED is turned on.
        """
        if speed_sensor.is_pressed:
            green_led.off()  # Spegni il LED verde
            red_led.on()     # Accendi il LED rosso
            print('Light was blocked')  # Stampa il messaggio che indica che il sensore è attivato
        else:
            green_led.on()   # Accendi il LED verde
            red_led.off()    # Spegni il LED rosso
    
  4. Il loop principale controlla continuamente lo stato del sensore di velocità. Gli attributi when_pressed e when_released sono gestori di eventi che chiamano la funzione update_leds quando lo stato del sensore cambia. Il blocco try-except gestisce KeyboardInterrupt per una chiusura pulita.

    try:
        # Loop principale per controllare continuamente lo stato del sensore
        while True:
            # Aggiorna i LED in base ai cambiamenti dello stato del sensore
            speed_sensor.when_pressed = update_leds   # Aggiorna i LED quando il sensore è premuto
            speed_sensor.when_released = update_leds  # Aggiorna i LED quando il sensore è rilasciato
    
    except KeyboardInterrupt:
        # Gestisce KeyboardInterrupt (Ctrl+C) per una terminazione pulita dello script
        pass