Nota

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 [Qui] e unisciti oggi stesso!

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.

../_images/list_1.3.1.png

È sicuramente conveniente acquistare un kit completo, ecco il link:

Nome

COMPONENTI IN QUESTO KIT

LINK

Raphael Kit

337

Raphael Kit

Puoi anche acquistarli separatamente dai link sottostanti.

INTRODUZIONE COMPONENTI

LINK PER L’ACQUISTO

Scheda di estensione GPIO

ACQUISTA

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Modulo di Alimentazione

-

L293D

-

Motore DC

ACQUISTA

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.

../_images/image336.png

Procedure Sperimentali

Passo 1: Costruisci il circuito.

../_images/1.3.1.png

Nota

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.

../_images/image118.jpeg

Passo 2: Accedi alla cartella del codice.

cd ~/raphael-kit/c/1.3.1/

Passo 3: Compila il codice.

gcc 1.3.1_Motor.c -lwiringPi

Passo 4: Esegui il file eseguibile.

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.

Nota

Se non funziona dopo l’esecuzione o compare un messaggio di errore: "wiringPi.h: No such file or directory", consulta Installazione e verifica di WiringPi.

Codice

#include <wiringPi.h>
#include <stdio.h>

#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

digitalWrite(MotorEnable, HIGH);

Abilita il L239D.

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à.

for(i=0;i<3;i++){
    delay(1000);
}

Questo ciclo serve per ritardare di 3*1000ms.

digitalWrite(MotorEnable, LOW)

Se 1,2EN (pin 1) è su basso livello, il L293D non funziona. Il motore smette di ruotare.

digitalWrite(MotorPin1, LOW)
digitalWrite(MotorPin2, HIGH)

Inverte il flusso di corrente del motore, quindi il motore ruoterà in senso inverso.

Immagine del Fenomeno

../_images/image119.jpeg