.. note:: 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 Esperto**: Risolvi problematiche 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 a nuovi annunci di prodotti e anticipazioni. - **Sconti Speciali**: Goditi sconti esclusivi sui nostri ultimi prodotti. - **Promozioni Festive e Giveaway**: Partecipa a giveaway e promozioni speciali durante le festività. 👉 Pronto per esplorare e creare con noi? Clicca [|link_sf_facebook|] e unisciti oggi stesso! 1.3.1 Motore =============== Introduzione ------------------ In questa lezione, impareremo come utilizzare il driver L293D per controllare un motore CC e farlo ruotare in senso orario e antiorario. Poiché il motore CC richiede una corrente maggiore, per motivi di sicurezza, utilizziamo il modulo di alimentazione per fornire energia ai motori. Componenti -------------- .. image:: img/list_1.3.1.png Principio ------------ **L293D** L293D è un driver per motori a 4 canali con alta tensione e alta corrente integrato in un chip. È progettato per connettersi a livelli logici standard DTL, TTL e per pilotare carichi induttivi (come bobine di relè, motori CC, motori passo-passo) e transistor di commutazione di potenza. I motori CC sono dispositivi che trasformano l'energia elettrica CC in energia meccanica e sono ampiamente utilizzati per la loro elevata precisione nella regolazione della velocità. Vedi la figura dei pin qui sotto. L293D ha due pin (Vcc1 e Vcc2) per l’alimentazione. Vcc2 alimenta il motore, mentre Vcc1 alimenta il chip. Dato che qui viene utilizzato un motore CC di piccole dimensioni, collega entrambi i pin a +5V. .. image:: img/image111.png Di seguito è riportata la struttura interna di L293D. Il pin EN è un pin di abilitazione che funziona solo con livello alto; A indica l’ingresso e Y l’uscita. Puoi vedere la relazione tra di loro in basso a destra. Quando il pin EN è a livello alto, se A è alto, Y fornisce un livello alto; se A è basso, Y fornisce un livello basso. Quando il pin EN è a livello basso, l’L293D non funziona. .. image:: img/image334.png **Motore CC** .. image:: img/image114.jpeg Questo è un motore CC a 5V. Ruoterà quando si applicano un livello alto e uno basso ai due terminali della lamina di rame. Per comodità, puoi saldare i pin. .. image:: img/image335.png **Modulo di Alimentazione** In questo esperimento, sono necessarie grandi correnti per pilotare il motore, specialmente durante l’avvio e l’arresto, il che può interferire gravemente con il normale funzionamento del Raspberry Pi. Perciò, alimentiamo il motore separatamente con questo modulo per garantire un funzionamento sicuro e stabile. Puoi inserirlo direttamente nella breadboard per fornire alimentazione. Fornisce una tensione di 3,3V e 5V, a cui puoi collegarti tramite un ponticello incluso. .. image:: img/image115.png Schema Elettrico ------------------ Inserisci il modulo di alimentazione nella breadboard e collega il ponticello al pin da 5V per ottenere un’uscita a 5V. Collega il pin 1 dell’L293D a GPIO22 e impostalo a livello alto. Collega il pin2 a GPIO27 e il pin7 a GPIO17, quindi imposta uno dei pin a livello alto e l’altro a livello basso per cambiare la direzione di rotazione del motore. .. image:: img/image336.png Procedure Sperimentali -------------------------- **Step 1:** Costruisci il circuito. .. image:: img/1.3.1.png :width: 800 .. note:: Il modulo di alimentazione può essere alimentato da una batteria da 9V con la clip per batteria da 9V inclusa nel kit. Inserisci il ponticello del modulo di alimentazione nella striscia da 5V della breadboard. .. image:: img/image118.jpeg **Step 2**: Entra nella cartella del codice. .. raw:: html .. code-block:: cd ~/davinci-kit-for-raspberry-pi/c/1.3.1/ **Step 3**: Compila. .. raw:: html .. code-block:: gcc 1.3.1_Motor.c -lwiringPi **Step 4**: Esegui il file eseguibile sopra. .. raw:: html .. code-block:: sudo ./a.out Durante l'esecuzione del codice, il motore ruota inizialmente 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 sequenza si ripeterà ciclicamente. .. note:: Se non funziona dopo l'esecuzione o compare un messaggio di errore come : \"wiringPi.h: No such file or directory", consulta :ref:`faq_c_nowork`. **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 printf("setup wiringPi failed !"); return 1; } pinMode(MotorPin1, OUTPUT); pinMode(MotorPin2, OUTPUT); pinMode(MotorEnable, OUTPUT); while(1){ printf("Clockwise\n"); delay(100); digitalWrite(MotorEnable, HIGH); digitalWrite(MotorPin1, HIGH); digitalWrite(MotorPin2, LOW); for(i=0;i<3;i++){ delay(1000); } printf("Stop\n"); delay(100); digitalWrite(MotorEnable, LOW); for(i=0;i<3;i++){ delay(1000); } printf("Anti-clockwise\n"); delay(100); digitalWrite(MotorEnable, HIGH); digitalWrite(MotorPin1, LOW); digitalWrite(MotorPin2, HIGH); for(i=0;i<3;i++){ delay(1000); } printf("Stop\n"); delay(100); digitalWrite(MotorEnable, LOW); for(i=0;i<3;i++){ delay(1000); } } return 0; } **Spiegazione del Codice** .. code-block:: c digitalWrite(MotorEnable, HIGH); Abilita l’L293D. .. code-block:: c digitalWrite(MotorPin1, HIGH); digitalWrite(MotorPin2, LOW); Imposta un livello alto per 2A (pin 7); poiché 1,2EN (pin 1) è a livello alto, 2Y uscirà a livello alto. Imposta un livello basso per 1A, quindi 1Y uscirà a livello basso e il motore inizierà a ruotare. .. code-block:: c for(i=0;i<3;i++){ delay(1000); } questo ciclo è per un ritardo di 3*1000ms. .. code-block:: c digitalWrite(MotorEnable, LOW) Se 1,2EN (pin1) è a livello basso, l’L293D non funziona e il motore si ferma. .. code-block:: c digitalWrite(MotorPin1, LOW) digitalWrite(MotorPin2, HIGH) Inverti la direzione della corrente nel motore, e il motore ruoterà in senso opposto.