.. note:: Ciao, benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati. **Perché unirti a noi?** - **Supporto esperto**: Risolvi problemi post-vendita e 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 esclusive. - **Sconti speciali**: Approfitta di sconti esclusivi sui nostri prodotti più recenti. - **Promozioni festive e concorsi**: Partecipa a concorsi e promozioni durante le festività. 👉 Sei pronto a esplorare e creare con noi? Clicca su [|link_sf_facebook|] e unisciti oggi stesso! .. _1.3.1_py: 1.3.1 Motore ================ Introduzione ----------------- In questo progetto, impareremo a utilizzare l'L293D per pilotare un motore CC e farlo ruotare in senso orario e antiorario. Poiché il motore CC necessita di una corrente maggiore, per motivi di sicurezza, utilizziamo il modulo di alimentazione per fornire energia ai motori. Componenti Necessari ------------------------------ In questo progetto, abbiamo bisogno dei seguenti componenti. .. image:: ../img/list_1.3.1.png È sicuramente comodo acquistare un kit completo, ecco il link: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nome - ARTICOLI IN QUESTO KIT - LINK * - Kit Raphael - 337 - |link_Raphael_kit| Puoi anche acquistarli separatamente dai link qui sotto. .. list-table:: :widths: 30 20 :header-rows: 1 * - INTRODUZIONE AI COMPONENTI - LINK PER L'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 --------------------- Collega il modulo di alimentazione alla breadboard e inserisci il cappuccio del ponticello sul pin da 5V, in modo che emetta una tensione di 5V. Collega il pin 1 di L293D a GPIO22 e impostalo ad alto livello. Collega il pin2 a GPIO27 e il pin7 a GPIO17, quindi imposta un pin alto e l'altro basso. In questo modo, puoi cambiare la direzione di rotazione del motore. .. image:: ../img/image336.png **Procedure Sperimentali** **Passo 1:** Costruisci il circuito. .. image:: ../img/image117.png .. note:: Il modulo di alimentazione può essere utilizzato con una batteria da 9V grazie al connettore incluso nel kit. Inserisci il cappuccio del ponticello del modulo di alimentazione nelle strisce di alimentazione da 5V della breadboard. .. image:: ../img/image118.jpeg **Passo 2:** Accedi alla cartella del codice. .. raw:: html .. code-block:: cd ~/raphael-kit/python **Passo 3:** Esegui. .. raw:: html .. code-block:: sudo python3 1.3.1_Motor.py All'avvio del codice, il motore ruota prima in senso orario per 5s, quindi si ferma per 5s, dopodiché ruota in senso antiorario per 5s; successivamente, il motore si ferma per 5s. Questa serie di azioni verrà eseguita ripetutamente. **Codice** .. note:: Puoi **Modificare/Reimpostare/Copiare/Eseguire/Interrompere** il codice qui sotto. Ma prima devi accedere al percorso del codice come ``raphael-kit/python``. Dopo aver modificato il codice, puoi eseguirlo direttamente per vedere l'effetto. .. raw:: html .. code-block:: python import RPi.GPIO as GPIO import time # Imposta i pin MotorPin1 = 17 MotorPin2 = 27 MotorEnable = 22 def setup(): # Imposta il modo GPIO su BCM GPIO.setmode(GPIO.BCM) # Imposta i pin come output GPIO.setup(MotorPin1, GPIO.OUT) GPIO.setup(MotorPin2, GPIO.OUT) GPIO.setup(MotorEnable, GPIO.OUT, initial=GPIO.LOW) # Definisci una funzione per far girare il motore # La direzione deve essere # 1(senso orario), 0(fermo), -1(senso antiorario) def motor(direction): # Senso orario if direction == 1: # Imposta la direzione GPIO.output(MotorPin1, GPIO.HIGH) GPIO.output(MotorPin2, GPIO.LOW) # Attiva il motore GPIO.output(MotorEnable, GPIO.HIGH) print ("Clockwise") # Senso antiorario if direction == -1: # Imposta la direzione GPIO.output(MotorPin1, GPIO.LOW) GPIO.output(MotorPin2, GPIO.HIGH) # Attiva il motore GPIO.output(MotorEnable, GPIO.HIGH) print ("Counterclockwise") # Stop if direction == 0: # Disattiva il motore GPIO.output(MotorEnable, GPIO.LOW) print ("Stop") def main(): # Definisci un dizionario per rendere lo script più leggibile # CW per senso orario, CCW per senso antiorario, STOP per fermo directions = {'CW': 1, 'CCW': -1, 'STOP': 0} while True: # Senso orario motor(directions['CW']) time.sleep(5) # Fermo motor(directions['STOP']) time.sleep(5) # Senso antiorario motor(directions['CCW']) time.sleep(5) # Fermo motor(directions['STOP']) time.sleep(5) def destroy(): # Ferma il motore GPIO.output(MotorEnable, GPIO.LOW) # Rilascia le risorse GPIO.cleanup() # Se esegui questo script direttamente, fai: if __name__ == '__main__': setup() try: main() # Quando viene premuto 'Ctrl+C', il programma destroy() sarà eseguito. except KeyboardInterrupt: destroy() **Spiegazione del Codice** .. code-block:: python def motor(direction): # Senso orario if direction == 1: # Imposta la direzione GPIO.output(MotorPin1, GPIO.HIGH) GPIO.output(MotorPin2, GPIO.LOW) # Attiva il motore GPIO.output(MotorEnable, GPIO.HIGH) print ("Clockwise") ... Crea una funzione, ``motor()``, il cui parametro è la direzione. Quando la condizione direction=1 è soddisfatta, il motore ruota in senso orario; quando direction=-1, il motore ruota in senso antiorario; e con direction=0, si ferma. .. code-block:: python def main(): # Definisci un dizionario per rendere lo script più leggibile # CW per senso orario, CCW per senso antiorario, STOP per fermo directions = {'CW': 1, 'CCW': -1, 'STOP': 0} while True: # Senso orario motor(directions['CW']) time.sleep(5) # Fermo motor(directions['STOP']) time.sleep(5) # Senso antiorario motor(directions['CCW']) time.sleep(5) # Fermo motor(directions['STOP']) time.sleep(5) Nella funzione main(), crea un array, directions[], in cui CW è uguale a 1, il valore di CCW è -1, e il numero 0 si riferisce a Fermo. All'avvio del codice, il motore ruota prima in senso orario per 5s, quindi si ferma per 5s, dopodiché ruota in senso antiorario per 5s; successivamente, il motore si ferma per 5s. Questa serie di azioni verrà eseguita ripetutamente. Ora dovresti vedere la pala del motore che ruota. Immagine del Fenomeno ------------------------- .. image:: ../img/image119.jpeg