.. note:: Ciao, benvenuto nella Community di appassionati di SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Approfondisci 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 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 omaggi**: Partecipa a omaggi e promozioni festive. 👉 Pronto a esplorare e creare con noi? Clicca su [|link_sf_facebook|] e unisciti oggi stesso! .. _1.3.1_c_pi5: 1.3.1 Motore ================= Introduzione ----------------- In questo progetto impareremo a utilizzare il L293D per pilotare un motore DC e farlo ruotare in senso orario e antiorario. Poiché il motore DC richiede una corrente maggiore, per 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 conveniente acquistare un kit completo, ecco il link: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nome - COMPONENTI IN QUESTO KIT - LINK * - Raphael Kit - 337 - |link_Raphael_kit| Puoi anche acquistarli separatamente dai link sottostanti. .. list-table:: :widths: 30 20 :header-rows: 1 * - INTRODUZIONE 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 di Collegamento ------------------------ Inserisci il modulo di alimentazione nel breadboard e collega il ponticello al pin di 5V, così emetterà una tensione di 5V. Collega il pin 1 del L293D al GPIO22, e impostalo su alto livello. Collega il pin 2 al GPIO27 e il pin 7 al GPIO17, quindi imposta un pin su alto e l'altro su 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/1.3.1.png .. note:: Il modulo di alimentazione può utilizzare una batteria da 9V con l'apposito connettore fornito nel kit. Inserisci il ponticello del modulo di alimentazione nelle strisce del bus da 5V del breadboard. .. image:: ../img/image118.jpeg **Passo 2**: Accedi alla cartella del codice. .. raw:: html .. code-block:: cd ~/raphael-kit/c/1.3.1/ **Passo 3**: Compila il codice. .. raw:: html .. code-block:: gcc 1.3.1_Motor.c -lwiringPi **Passo 4**: Esegui il file eseguibile. .. raw:: html .. code-block:: sudo ./a.out Mentre il codice viene eseguito, il motore prima ruota in senso orario per 5s, poi 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. .. note:: Se non funziona dopo l'esecuzione o compare un messaggio di errore: \"wiringPi.h: No such file or directory\", consulta :ref:`install_wiringpi_pi5`. **Codice** .. code-block:: c #include #include #define MotorPin1 0 #define MotorPin2 2 #define MotorEnable 3 int main(void){ int i; if(wiringPiSetup() == -1){ //se l'inizializzazione di wiring fallisce, stampa un messaggio a schermo printf("setup wiringPi failed !"); return 1; } pinMode(MotorPin1, OUTPUT); pinMode(MotorPin2, OUTPUT); pinMode(MotorEnable, OUTPUT); while(1){ printf("Clockwise\n"); digitalWrite(MotorEnable, HIGH); digitalWrite(MotorPin1, HIGH); digitalWrite(MotorPin2, LOW); for(i=0;i<3;i++){ delay(1000); } printf("Stop\n"); digitalWrite(MotorEnable, LOW); for(i=0;i<3;i++){ delay(1000); } printf("Anti-clockwise\n"); digitalWrite(MotorEnable, HIGH); digitalWrite(MotorPin1, LOW); digitalWrite(MotorPin2, HIGH); for(i=0;i<3;i++){ delay(1000); } printf("Stop\n"); digitalWrite(MotorEnable, LOW); for(i=0;i<3;i++){ delay(1000); } } return 0; } **Spiegazione del Codice** .. code-block:: c digitalWrite(MotorEnable, HIGH); Abilita il L239D. .. code-block:: c digitalWrite(MotorPin1, HIGH); digitalWrite(MotorPin2, LOW); Imposta un livello alto per 2A (pin 7); poiché 1,2EN (pin 1) è impostato su alto livello, 2Y emetterà un livello alto. Imposta un livello basso per 1A, quindi 1Y emetterà un livello basso, e il motore ruoterà. .. code-block:: c for(i=0;i<3;i++){ delay(1000); } Questo ciclo serve per ritardare di 3*1000ms. .. code-block:: c digitalWrite(MotorEnable, LOW) Se 1,2EN (pin 1) è su basso livello, il L293D non funziona. Il motore smette di ruotare. .. code-block:: c digitalWrite(MotorPin1, LOW) digitalWrite(MotorPin2, HIGH) Inverte il flusso di corrente del motore, quindi il motore ruoterà in senso inverso. Immagine del Fenomeno ------------------------- .. image:: ../img/image119.jpeg