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.

../_images/list_1.3.1.png

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

Nome

ARTICOLI IN QUESTO KIT

LINK

Kit Raphael

337

Raphael Kit

Puoi anche acquistarli separatamente dai link qui sotto.

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

../_images/image336.png

Procedure Sperimentali

Passo 1: Costruisci il circuito.

../_images/image117.png

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.

../_images/image118.jpeg

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

../_images/image119.jpeg