Nota

Ciao, benvenuto nella Community di appassionati di Raspberry Pi, Arduino e ESP32 di SunFounder su Facebook! Approfondisci il tuo viaggio con 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 community e del nostro team.

  • Impara e condividi: Scambia consigli e tutorial per migliorare le tue competenze.

  • Anteprime esclusive: Ottieni accesso anticipato ai nuovi annunci di prodotti e anteprime.

  • Sconti speciali: Godi di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni e concorsi festivi: Partecipa a concorsi e promozioni durante le festività.

👉 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 L293D per pilotare un motore DC e farlo ruotare in senso orario e antiorario. Poiché il motore DC richiede 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.

../_images/list_1.3.1.png

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

Nome

OGGETTI IN QUESTO KIT

LINK

Raphael Kit

337

Raphael Kit

Puoi anche acquistarli separatamente dai link sottostanti.

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 ponticello nel pin da 5V, in modo che eroghi una tensione di 5V. Collega il pin 1 del L293D a GPIO22 e impostalo su alto livello. Collega il pin 2 a GPIO27 e il pin 7 a 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/image117.png

Nota

Il modulo di alimentazione può essere alimentato da una batteria da 9V con la clip per batteria inclusa nel kit. Inserisci il ponticello del modulo di alimentazione nella striscia di bus a 5V della breadboard.

../_images/image118.jpeg

Passo 2: Vai alla cartella del codice.

cd ~/raphael-kit/nodejs/

Passo 4: Esegui il codice.

sudo node motor.js

Quando il codice viene eseguito, il motore ruota prima in senso orario per 1s, poi si ferma per 1s, successivamente ruota in senso antiorario per 1s; successivamente il motore si ferma per 1s. Questa serie di azioni sarà ripetuta continuamente.

Codice

const Gpio = require('pigpio').Gpio;

MotorPin1 = new Gpio(17, { mode: Gpio.OUTPUT });
MotorPin2 = new Gpio(27, { mode: Gpio.OUTPUT });
MotorEnable = new Gpio(22, { mode: Gpio.OUTPUT });


// Define a motor function to spin the motor
// direction should be
// 2(clockwise), 1(counterclockwise), 0(stop)
function motor(direction) {
    switch (direction) {
        case 2: // Clockwise
            // Set direction
            MotorPin1.digitalWrite(1)
            MotorPin2.digitalWrite(0)
            // Enable the motor
            MotorEnable.digitalWrite(1)
            console.log('Clockwise')
            break;
        case 1:  // Counterclockwise
            // Set direction
            MotorPin1.digitalWrite(0)
            MotorPin2.digitalWrite(1)
            // Enable the motor
            MotorEnable.digitalWrite(1)
            console.log('Counterclockwise')
            break;
        case 0: // Stop
            // Disable the motor
            MotorEnable.digitalWrite(0)
            console.log('Stop')

    }
}

process.on('SIGINT', function () {
    MotorEnable.digitalWrite(0)
    process.exit();
})

let index=-1
setInterval(() => {
    index=(index+1)%3
    motor(index)
}, 1000)

Spiegazione del Codice

MotorPin1 = new Gpio(17, { mode: Gpio.OUTPUT });
MotorPin2 = new Gpio(27, { mode: Gpio.OUTPUT });
MotorEnable = new Gpio(22, { mode: Gpio.OUTPUT });

Importa il modulo pigpio e crea tre oggetti della classe Gpio per controllare le tre porte IO Gpio17, Gpio27 e Gpio22.

function motor(direction) {
    switch (direction) {
        case 2: // Clockwise
            // Set direction
            MotorPin1.digitalWrite(1)
            MotorPin2.digitalWrite(0)
            // Enable the motor
            MotorEnable.digitalWrite(1)
            console.log('Clockwise')
            break;
        case 1:  // Counterclockwise
            // Set direction
            MotorPin1.digitalWrite(0)
            MotorPin2.digitalWrite(1)
            // Enable the motor
            MotorEnable.digitalWrite(1)
            console.log('Counterclockwise')
            break;
        case 0: // Stop
            // Disable the motor
            MotorEnable.digitalWrite(0)
            console.log('Stop')

    }
}

Definisci una funzione motor() per controllare il motore,

  1. Quando la direzione è uguale a 2, la porta MotorPin1 scrive un livello alto, la porta MotorPin2 scrive un livello basso e la porta di abilitazione MotorEnable scrive un livello alto, facendo ruotare il motore in senso orario.

  2. Quando la direzione è uguale a 1, la porta MotorPin1 scrive un livello basso, la porta MotorPin2 scrive un livello alto e la porta di abilitazione MotorEnable scrive un livello alto, facendo ruotare il motore in senso antiorario.

  3. Quando la direzione è uguale a 0, la porta di abilitazione MotorEnable è scritta a livello basso, e il motore si ferma.

let index=-1
setInterval(() => {
    index=(index+1)%3
    motor(index)
}, 1000)

Fai ruotare il motore in senso orario e antiorario alternativamente, con un intervallo di 1 secondo.

process.on('SIGINT', function () {
    MotorEnable.digitalWrite(0)
    process.exit();
})

Quando viene rilevata la pressione di ctrl+c is, MotorEnable viene scritto su basso per fermare la rotazione del motore.

Immagine del fenomeno

../_images/image119.jpeg