Nota

Ciao, benvenuto nella community di SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.

Perché unirti a noi?

  • Supporto Esperto: Risolvi i problemi post-vendita e le 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 alle anteprime.

  • Sconti Speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni Festive e Giveaway: Partecipa a concorsi e promozioni festive.

👉 Pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti subito!

1.3.1 Motore

Introduzione

In questo progetto, impareremo come utilizzare 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 qui il modulo di alimentazione per alimentare i 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 NEL KIT

LINK

Raphael Kit

337

Raphael Kit

Puoi anche acquistarli separatamente dai link seguenti.

INTRODUZIONE AI COMPONENTI

LINK PER L’ACQUISTO

Scheda di estensione GPIO

ACQUISTA

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Modulo di Alimentazione

-

L293D

-

Motore DC

ACQUISTA

Schema Elettrico

Collega il modulo di alimentazione alla breadboard e inserisci il jumper nel pin da 5V, quindi questo erogherà una tensione di 5V. Collega il pin 1 dell’L293D a GPIO22 e impostalo ad alto livello. Collega il pin 2 a GPIO27 e il pin 7 a GPIO17, quindi imposta un pin ad alto livello e l’altro a 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ò essere utilizzato con una batteria da 9V tramite il supporto per batteria incluso nel kit. Inserisci il jumper del modulo di alimentazione nelle strisce bus da 5V della breadboard.

../_images/image118.jpeg

Passo 2: Entra nella cartella del codice.

cd ~/raphael-kit/c/1.3.1/

Passo 3: Compila.

gcc 1.3.1_Motor.c -lwiringPi

Passo 4: Esegui il file eseguibile.

sudo ./a.out

Quando il codice viene eseguito, il motore prima ruota in senso orario per 5s, quindi si ferma per 5s. Successivamente, ruota in senso antiorario per 5s, quindi si ferma nuovamente per 5s. Questa serie di azioni viene ripetuta ciclicamente.

Nota

Se il codice non funziona o appare un errore come: "wiringPi.h: No such file or directory", fai riferimento a Installa e Controlla 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){ //quando l'inizializzazione di wiring fallisce, stampa 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 su 2A(pin 7); poiché 1,2EN(pin 1) è ad alto livello, 2Y emetterà un livello alto.

Imposta un livello basso su 1A, quindi 1Y emetterà un livello basso e il motore inizierà a ruotare.

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

Questo ciclo serve a ritardare di 3*1000ms.

digitalWrite(MotorEnable, LOW)

Se 1,2EN (pin1) è a livello basso, L293D non funziona. Il motore smette di ruotare.

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

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

Immagine del Fenomeno

../_images/image119.jpeg