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.
È sicuramente conveniente acquistare un kit completo, ecco il link:
Nome |
OGGETTI IN QUESTO KIT |
LINK |
|---|---|---|
Raphael Kit |
337 |
Puoi anche acquistarli separatamente dai link sottostanti.
INTRODUZIONE AI COMPONENTI |
LINK PER L’ACQUISTO |
|---|---|
- |
|
- |
|
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.
Procedure Sperimentali
Passo 1: Costruisci il circuito.
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.
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,
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.
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.
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