Nota
Ciao, benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Approfondisci le tue conoscenze su 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 suggerimenti e tutorial per migliorare le tue competenze.
Anteprime esclusive: Ottieni accesso anticipato agli annunci di nuovi prodotti e anteprime esclusive.
Sconti speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
Promozioni festive e concorsi: Partecipa a concorsi e promozioni durante le festività.
👉 Sei 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 l’L293D per pilotare un motore CC e farlo ruotare in senso orario e antiorario. Poiché il motore CC necessita di 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 comodo acquistare un kit completo, ecco il link:
Nome |
ARTICOLI IN QUESTO KIT |
LINK |
|---|---|---|
Kit Raphael |
337 |
Puoi anche acquistarli separatamente dai link qui sotto.
INTRODUZIONE AI COMPONENTI |
LINK PER L’ACQUISTO |
|---|---|
- |
|
- |
|
Schema Elettrico
Collega il modulo di alimentazione alla breadboard e inserisci il cappuccio del ponticello sul pin da 5V, in modo che emetta una tensione di 5V. Collega il pin 1 di L293D a GPIO22 e impostalo ad alto livello. Collega il pin2 a GPIO27 e il pin7 a GPIO17, quindi imposta un pin alto e l’altro 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 utilizzato con una batteria da 9V grazie al connettore incluso nel kit. Inserisci il cappuccio del ponticello del modulo di alimentazione nelle strisce di alimentazione da 5V della breadboard.
Passo 2: Accedi alla cartella del codice.
cd ~/raphael-kit/python
Passo 3: Esegui.
sudo python3 1.3.1_Motor.py
All’avvio del codice, il motore ruota prima in senso orario per 5s, quindi 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.
Codice
Nota
Puoi Modificare/Reimpostare/Copiare/Eseguire/Interrompere il codice qui sotto.
Ma prima devi accedere al percorso del codice come raphael-kit/python. Dopo aver
modificato il codice, puoi eseguirlo direttamente per vedere l’effetto.
import RPi.GPIO as GPIO
import time
# Imposta i pin
MotorPin1 = 17
MotorPin2 = 27
MotorEnable = 22
def setup():
# Imposta il modo GPIO su BCM
GPIO.setmode(GPIO.BCM)
# Imposta i pin come output
GPIO.setup(MotorPin1, GPIO.OUT)
GPIO.setup(MotorPin2, GPIO.OUT)
GPIO.setup(MotorEnable, GPIO.OUT, initial=GPIO.LOW)
# Definisci una funzione per far girare il motore
# La direzione deve essere
# 1(senso orario), 0(fermo), -1(senso antiorario)
def motor(direction):
# Senso orario
if direction == 1:
# Imposta la direzione
GPIO.output(MotorPin1, GPIO.HIGH)
GPIO.output(MotorPin2, GPIO.LOW)
# Attiva il motore
GPIO.output(MotorEnable, GPIO.HIGH)
print ("Clockwise")
# Senso antiorario
if direction == -1:
# Imposta la direzione
GPIO.output(MotorPin1, GPIO.LOW)
GPIO.output(MotorPin2, GPIO.HIGH)
# Attiva il motore
GPIO.output(MotorEnable, GPIO.HIGH)
print ("Counterclockwise")
# Stop
if direction == 0:
# Disattiva il motore
GPIO.output(MotorEnable, GPIO.LOW)
print ("Stop")
def main():
# Definisci un dizionario per rendere lo script più leggibile
# CW per senso orario, CCW per senso antiorario, STOP per fermo
directions = {'CW': 1, 'CCW': -1, 'STOP': 0}
while True:
# Senso orario
motor(directions['CW'])
time.sleep(5)
# Fermo
motor(directions['STOP'])
time.sleep(5)
# Senso antiorario
motor(directions['CCW'])
time.sleep(5)
# Fermo
motor(directions['STOP'])
time.sleep(5)
def destroy():
# Ferma il motore
GPIO.output(MotorEnable, GPIO.LOW)
# Rilascia le risorse
GPIO.cleanup()
# Se esegui questo script direttamente, fai:
if __name__ == '__main__':
setup()
try:
main()
# Quando viene premuto 'Ctrl+C', il programma destroy() sarà eseguito.
except KeyboardInterrupt:
destroy()
Spiegazione del Codice
def motor(direction):
# Senso orario
if direction == 1:
# Imposta la direzione
GPIO.output(MotorPin1, GPIO.HIGH)
GPIO.output(MotorPin2, GPIO.LOW)
# Attiva il motore
GPIO.output(MotorEnable, GPIO.HIGH)
print ("Clockwise")
...
Crea una funzione, motor(), il cui parametro è la direzione. Quando la condizione
direction=1 è soddisfatta, il motore ruota in senso orario; quando direction=-1, il
motore ruota in senso antiorario; e con direction=0, si ferma.
def main():
# Definisci un dizionario per rendere lo script più leggibile
# CW per senso orario, CCW per senso antiorario, STOP per fermo
directions = {'CW': 1, 'CCW': -1, 'STOP': 0}
while True:
# Senso orario
motor(directions['CW'])
time.sleep(5)
# Fermo
motor(directions['STOP'])
time.sleep(5)
# Senso antiorario
motor(directions['CCW'])
time.sleep(5)
# Fermo
motor(directions['STOP'])
time.sleep(5)
Nella funzione main(), crea un array, directions[], in cui CW è uguale a 1, il valore di CCW è -1, e il numero 0 si riferisce a Fermo.
All’avvio del codice, il motore ruota prima in senso orario per 5s, quindi 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.
Ora dovresti vedere la pala del motore che ruota.
Immagine del Fenomeno