Styra riktning och hastighet av DC-Motor med Raspberry Pi (1 / 1 steg)
Steg 1: Kontrollera riktningen av DC-motor via RPi
Styra DC-motor användande RPi
Vår nästa uppgift är att styra en DC-motor med python skript och GPIO headers på raspberry pi och detta kommer att skapa en bild av "hur roboten fungerar" i vårt sinne. (Som ni vet användning av sensorer med rpi) kan du styra fan av ditt rum enligt vädret utanför. Gör alla dessa kommer att få dig att förstå de grundläggande reglerna för robotteknik.
Vi kontrollerar en DC motor som kommer att behöva åtminstone 400mA av strömmen att fungera ordentligt men vår RPi kan leverera nästan 20mA bara. Det innebär att vi har att ansluta en DC strömkälla externt. Det är inte ett problem! Vi har små batterier 6V och 9V tillgängliga på marknaden.
Varning: Anslut inte en motor direkt till Raspberry Pi, det kommer att skada din Raspberry Pi.
Uppenbarligen behöver vi en motor controller IC att kontrollera funktionaliteten i motorn (att rotera bilden medurs eller moturs). Det är bättre att börja med L293D motor controller IC.
Krav:
· Raspberry Pi med SD-kort förinstallerat med Raspbian
· En skärbräda
· En L293D motor driver IC
· Hoppare ledningar (hane till hane) och hona till hane
· En likströmsmotor fått för 6v
· Ett 6V eller 9V batteri.
L293D
Det är en motor driver IC vi kan styra 2 motorer i taget från den. Dess pin-konfiguration visas nedan. Det är en 16 pin IC som inkluderar (på ena sidan) en Vcc (att driva upp), en GND pin, en aktivera pin (på on och off en motor), två ingångar motsvarar två utgångar.
Anslutningar:
· Anslut först den Vcc pin av L293D till 5V (3.3V kan också användas)
· Nu ansluta i trädgården
· Vi använder GPIO-2,3,4 för att styra IC. (GPIO-02 & GPIO-03 som ingång 1 & 2 respektive)
· Anslut GPIO-04 till respektive aktivera pin av IC.
· Nu slutligen ansluta utgång 1 & 2 både på anslutningen av motorn som visas i figur.
Python-koden:-
importera RPi.GPIO som GPIO
från att importera sömn
GPIO.setmode (GPIO. BCM)
Motor1A = 02
Motor1B = 03
Motor1E = 04
GPIO.setup (Motor1A, GPIO. OUT)
GPIO.setup (Motor1B, GPIO. OUT)
GPIO.setup (Motor1E, GPIO. OUT)
skriva ut "Motor kommer att börja"
GPIO.output (Motor1A, GPIO. HÖG) # att köra motorn medurs
GPIO.output (Motor1B, GPIO. LÅGA) # sätta det högt att rotera motor i moturs riktning
GPIO.output (Motor1E, GPIO. HÖG) # bör alltid hög att starta motor
Sleep(5)
skriva ut "Stoppa motor"
GPIO.output (Motor1E, GPIO. LÅGA) # att stoppa motorn
GPIO.cleanup()
Efter att ha kört ovanstående kod börjar din motor Rotera medurs i 5 sekunder. Genom att ändra ovanstående kod kan ni vända på det. Nu kan vi göra en bil med två eller fyra motorer.
Kontrollera hastigheten på DC-motor användande RPi
Som ni vet på några av de platser vi måste också kontrollera hastigheten på motorer. Från avsnittet ovan du förstått ON-OFF kontroll av motorerna men det är inte tillräckligt rätt?? Nu bör du har en fråga i ditt sinne att hur vi kan producera analog spänning från GPIO stift av RPi. Inga problem eftersom vi kan producera spänning pulser från det via PWM (pulse bredd modulering) och kontrollera utspänning av GPIO pin.
Pulse bredd Modulation
Det är en mycket enkel process från vilken vi kan kontrollera spänning frekvensen av källan. PWM modulen är tillgänglig för GPIO i RPi & som vi vet
Tid = 1/frekvens
Så om jag väljer en frekvens på 100Hz än det innebär tidsperioden är 10m SEK (spänningen är triged till "Hög" för 10m s). Vår batteri levererar 9V till motor och minska hastigheten vi måste minska denna spänning. Så om vi vill minska hastigheten till hälften än vi måste ändra dutycycle (det är andelen den tidsperiod för vilken spänning är hög) till 50.
Som spänning tillförs kontrollerar motorn av aktivera pin motor förarens IC - L293N så vi behöver bara gälla PWM aktivera pin att variera hastigheten. Nedan är python koden att förstå PWM och som behöver anslutningen ovan i föregående tråd (kontroll likströmsmotor via RPi).
>>> importerar RPi.GPIO som GPIO # import GPIO bibliotek
>>> från att importera sömn
>>> GPIO.setmode (GPIO. BCM)
>>> Motor1A = 02 # ange GPIO-02 som ingång 1 registeransvariges IC
>>> Motor1B = 03 # ange GPIO-03 som Input 2 registeransvarige IC
>>> Motor1E = 04 # ange GPIO-04 som aktivera pin 1 registeransvariges IC
>>> GPIO.setup (Motor1A, GPIO. OUT)
>>> GPIO.setup (Motor1B, GPIO. OUT)
>>> GPIO.setup (Motor1E, GPIO. OUT)
>>> pwm = GPIO. PWM(04,100) # Konfigurera aktivera pin: GPIO-04 för PWM
>>> pwm.start(50) # start den med 50% dutycycle
>>> skriva ut "Gå vidare"
>>> GPIO.output (Motor1A, GPIO. HÖG)
>>> GPIO.output (Motor1B, GPIO. LÅG)
>>> GPIO.output (Motor1E, GPIO. HÖG)
>>> sleep(2)
# Detta kör din motor i riktning framåt i 2 sekunder med 50% fart.
>>> pwm. ChangeDutyCycle(80) # ökande dutycycle till 80
>>> skriva ut "Gå bakåt"
>>> GPIO.output (Motor1A, GPIO. HÖG)
>>> GPIO.output (Motor1B, GPIO. LÅG)
>>> GPIO.output (Motor1E, GPIO. HÖG)
>>> sleep(2)
# Detta kör din motor i omvänd riktning för 2 sekunder med 80% snabbare genom att leverera 80% av batteriets spänning
>>> skriva ut "Sluta nu"
>>> GPIO.output (Motor1E, GPIO. LÅG)
>>> pwm.stop() # stop PWM från GPIO utgång är det nödvändigt
>>> GPIO.cleanup()
Hoppas det fungerar för dig!