Nota

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

Perché unirti a noi?

  • Supporto tecnico 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 agli annunci di nuovi prodotti e alle anteprime.

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

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

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

1.3.1 Motore

Introduzione

In questo progetto, impareremo a utilizzare il L293D per guidare un motore DC e farlo ruotare in senso orario e antiorario. Poiché il motore DC richiede una corrente maggiore, per motivi di sicurezza utilizziamo il Modulo di Alimentazione per alimentare i motori.

Componenti Necessari

Per questo progetto, avremo bisogno dei seguenti componenti.

../_images/1.3.1_motor_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 D’ACQUISTO

Scheda di estensione GPIO

ACQUISTA

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Modulo di Alimentazione

-

L293D

-

Motore DC

ACQUISTA

Schema Elettrico

../_images/1.3.1_motor_schematic.png

Procedure Sperimentali

Passo 1: Costruisci il circuito.

../_images/1.3.1_motor_circuit.png

Nota

Il modulo di alimentazione può essere collegato a una batteria da 9V utilizzando il connettore per batteria da 9V presente nel kit. Inserisci il cappuccio jumper del modulo di alimentazione nelle strisce bus da 5V della breadboard.

../_images/1.3.1_motor_battery.jpeg

Passo 2: Accedi alla cartella del codice.

cd ~/raphael-kit/python-pi5

Passo 3: Esegui.

sudo python3 1.3.1_Motor_zero.py

Quando il codice viene eseguito, il motore ruota prima in senso orario per 5 secondi, poi si ferma per 5 secondi, successivamente ruota in senso antiorario per 5 secondi e poi si ferma di nuovo per 5 secondi. Questa serie di azioni verrà ripetuta continuamente.

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 nella directory 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 Motor
from time import sleep

# Inizializza il motore con GPIO Zero, specificando i pin GPIO per avanti (17), indietro (27) e abilitazione (22)
motor = Motor(forward=17, backward=27, enable=22)

try:
    # Funzione principale per controllare la direzione e il movimento del motore.
    # Alterna la rotazione del motore tra senso orario e antiorario con pause intermedie.
    actions = {'CW': motor.forward, 'CCW': motor.backward, 'STOP': motor.stop}  # Definisce le azioni del motore per chiarezza

    while True:
        # Ciclo attraverso le azioni definite per controllare la direzione del motore
        for action in ['CW', 'STOP', 'CCW', 'STOP']:
            actions[action]()  # Esegui l'azione corrente (avanti, fermo, indietro, fermo)
            print(f"{action}")  # Visualizza l'azione corrente nella console
            sleep(5)  # Pausa di 5 secondi prima di passare alla prossima azione

except KeyboardInterrupt:
    # Gestisce in modo sicuro l'interruzione da tastiera (es. Ctrl+C) per fermare il programma
    pass

Spiegazione del Codice

  1. Questi importano la classe Motor dalla libreria gpiozero e la funzione sleep dal modulo time.

    #!/usr/bin/env python3
    from gpiozero import Motor
    from time import sleep
    
  2. Questa linea inizializza un oggetto Motor, specificando i pin GPIO per avanti (17), indietro (27) e abilitazione (22).

    # Inizializza il motore con GPIO Zero, specificando i pin GPIO per avanti (17), indietro (27) e abilitazione (22)
    motor = Motor(forward=17, backward=27, enable=22)
    
  3. Le azioni per il controllo del motore sono definite in un dizionario per chiarezza. Un ciclo infinito (while True) itera attraverso queste azioni, eseguendo ciascuna per 5 secondi.

    try:
        # Funzione principale per controllare la direzione e il movimento del motore.
        # Alterna la rotazione del motore tra senso orario e antiorario con pause intermedie.
        actions = {'CW': motor.forward, 'CCW': motor.backward, 'STOP': motor.stop}  # Definisce le azioni del motore per chiarezza
    
        while True:
            # Ciclo attraverso le azioni definite per controllare la direzione del motore
            for action in ['CW', 'STOP', 'CCW', 'STOP']:
                actions[action]()  # Esegui l'azione corrente (avanti, fermo, indietro, fermo)
                print(f"{action}")  # Visualizza l'azione corrente nella console
                sleep(5)  # Pausa di 5 secondi prima di passare alla prossima azione
    
  4. Questo segmento consente al programma di essere terminato in sicurezza utilizzando un’interruzione da tastiera (Ctrl+C) senza causare errori.

    except KeyboardInterrupt:
    # Gestisce in modo sicuro l'interruzione da tastiera (es. Ctrl+C) per fermare il programma
    pass