.. note::
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 [|link_sf_facebook|] e unisciti oggi stesso!
.. _1.3.1_py_pi5:
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.
.. image:: ../python_pi5/img/1.3.1_motor_list.png
È decisamente conveniente acquistare un kit completo, ecco il link:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Nome
- COMPONENTI NEL KIT
- LINK
* - Raphael Kit
- 337
- |link_Raphael_kit|
Puoi anche acquistarli separatamente dai link sottostanti.
.. list-table::
:widths: 30 20
:header-rows: 1
* - INTRODUZIONE AI COMPONENTI
- LINK D'ACQUISTO
* - :ref:`cpn_gpio_extension_board`
- |link_gpio_board_buy|
* - :ref:`cpn_breadboard`
- |link_breadboard_buy|
* - :ref:`cpn_wires`
- |link_wires_buy|
* - :ref:`cpn_power_module`
- \-
* - :ref:`cpn_l293d`
- \-
* - :ref:`cpn_motor`
- |link_motor_buy|
Schema Elettrico
-----------------------
.. image:: ../python_pi5/img/1.3.1_motor_schematic.png
Procedure Sperimentali
---------------------------
**Passo 1:** Costruisci il circuito.
.. image:: ../python_pi5/img/1.3.1_motor_circuit.png
.. note::
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.
.. image:: ../python_pi5/img/1.3.1_motor_battery.jpeg
**Passo 2:** Accedi alla cartella del codice.
.. raw:: html
.. code-block::
cd ~/raphael-kit/python-pi5
**Passo 3:** Esegui.
.. raw:: html
.. code-block::
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.
.. warning::
Se viene visualizzato l'errore ``RuntimeError: Cannot determine SOC peripheral base address``, fare riferimento a :ref:`faq_soc`.
**Code**
.. note::
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.
.. raw:: html
.. code-block:: python
#!/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**
#. Questi importano la classe ``Motor`` dalla libreria ``gpiozero`` e la funzione ``sleep`` dal modulo ``time``.
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import Motor
from time import sleep
#. Questa linea inizializza un oggetto ``Motor``, specificando i pin GPIO per avanti (17), indietro (27) e abilitazione (22).
.. code-block:: python
# 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)
#. 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.
.. code-block:: python
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
#. Questo segmento consente al programma di essere terminato in sicurezza utilizzando un'interruzione da tastiera (Ctrl+C) senza causare errori.
.. code-block:: python
except KeyboardInterrupt:
# Gestisce in modo sicuro l'interruzione da tastiera (es. Ctrl+C) per fermare il programma
pass