Stap 1: Controle richting van DC motor via de RPi
Controlerende gelijkstroommotor met behulp van de RPi
Onze volgende taak is om te controleren van een DC-motor met behulp van python script en GPIO kopteksten op raspberry pi en dit zal een beeld van 'hoe de robot werkt' in onze geest. U kunt fan van uw kamer volgens het weer buiten (als je weet dat het gebruik van sensoren met rpi). Doen al deze zal je het begrijpen van de basisregels van robotica.
We gaan controle een DC-motor die ten minste moeten 400mA van stroom te laten functioneren, maar onze RPi bijna 20mA alleen kan leveren. Het betekent dat we moeten een DC voedingsbron extern verbinding te maken. Het is geen probleem! We hebben kleine batterijen 6V en 9V beschikbaar in de markt.
Waarschuwing: Sluit een motor niet rechtstreeks aan de Raspberry Pi, het beschadigt je Raspberry Pi.
Uiteraard zijn we verplicht een motorcontroller IC waarmee de functionaliteit van de motor (om te roteren met de klok mee of tegen de klok). Het is beter om te starten met L293D motor controller IC.
Vereisten:
· Een Raspberry Pi met de SD-kaart voorgeïnstalleerde met Raspbian
· Een Breadboard
· Een L293D motor driver IC
· Jumper draden (man-man) en vrouw tot man
· Een gelijkstroommotor gewaardeerd voor 6v
· Een 6V of 9V batterij.
L293D
Het is een motor coureur IC kunnen we de controle van 2 motoren tegelijk uit. De pin-configuratie is hieronder weergegeven. Het is een 16 pins IC die omvat (aan één zijde) een Vcc (voor het aandrijven van) een GND pin, een pin inschakelen (om op en uit een motor), twee ingangen overeenkomt met twee uitgangen.
Verbindingen:
· Eerst de Vcc pin van L293D verbinden met 5V (3,3 v kan ook worden gebruikt)
· Sluit nu de gronden
· We zijn met behulp GPIO-2,3,4 de IC. (GPIO-02 & GPIO-03 als ingang 1 & 2 respectievelijk)
· GPIO-04 verbinden met respectieve inschakelen pin van de IC.
· Nu eindelijk uitgang 1 & 2 op zowel de verbinding van de motor zoals aangegeven in figuur.
Python Code:-
importeren van RPi.GPIO als GPIO
importeren van tijd slaap
GPIO.setmode (GPIO. BCM)
Motor1A = 02
Motor1B = 03
Motor1E = 04
GPIO.setup (Motor1A, GPIO. UIT)
GPIO.setup (Motor1B, GPIO. UIT)
GPIO.setup (Motor1E, GPIO. UIT)
afdrukken "Motor gonna Start"
GPIO.output (Motor1A, GPIO. HOOG) # te lopen motor in de richting van de klok
GPIO.output (Motor1B, GPIO. LAGE) # zet het hoge draaien van de motor in de richting van de anti-klok
GPIO.output (Motor1E, GPIO. HOOG) # moet altijd hoog zijn motor starten
Sleep(5)
Print "Stopping motor"
GPIO.output (Motor1E, GPIO. LAGE) # om te stoppen met de motor
GPIO.cleanup()
Na het uitvoeren van de bovenstaande code start uw motor zal draaien in de richting van de klok gedurende 5 seconden. Door de bovenstaande code wijzigen u kunt doen omkeren. Nu kunnen we een auto met behulp van twee of vier motoren.
Controle van de snelheid van de gelijkstroommotor met behulp van de RPi
Zoals u op een aantal van de plaatsen weet die we willen ook de controle van de snelheid van motoren. Uit het bovenstaande onderwerp u begrepen de ON / OFF-controle van de motoren, maar dat is niet voldoende recht?? Nu je een vraag in je geest dat hoe moet we kunnen produceren analoge spanning van de GPIO pinnen van RPi. Geen probleem want wij kunnen pulsen van de spanning van het via PWM (puls breedte modulatie produceren) en controle van de uitgangsspanning van GPIO pin.
Pulse Width Modulation
Het is een zeer eenvoudig proces waaruit kunnen we de controle van de frequentie van de spanning van de bron. PWM-module is beschikbaar voor GPIO in RPi & zoals we weten
Periode = 1/frequentie
Dus als ik Selecteer een frequentie van 100Hz dan betekent dit de periode is 10m sec. (spanning is triged op 'Hoog' voor 10m sec). Onze batterij leveren 9V aan motor en ter vermindering van de snelheid die wij hebben om deze spanning. Zo willen we de snelheid tot de helft te verlagen dan we moeten veranderen van de dutycycle (is het percentage van de periode voor welke spanning weetje zit) tot 50.
Zoals spanning geleverd aan controleren de motor door inschakelen pin van de motor driver IC - L293N zodat we slechts hoeft toe te passen van de PWM op inschakelen pin om de snelheid te variëren. Bellow is de python code te begrijpen PWM en die moet de verbinding hierboven in vorige onderwerp (control gelijkstroommotor via RPi).
>>> RPi.GPIO als GPIO # bibliotheek GPIO importeren importeren
>>> importeren uit tijd slaap
>>> GPIO.setmode (GPIO. BCM)
>>> Motor1A = 02 # GPIO-02 als Input 1 van de controller IC instellen
>>> Motor1B = 03 # GPIO-03 instellen als ingang 2 van de controller IC
>>> Motor1E = 04 # GPIO-04 als inschakelen pin 1 van de controller IC instellen
>>> GPIO.setup (Motor1A, GPIO. UIT)
>>> GPIO.setup (Motor1B, GPIO. UIT)
>>> GPIO.setup (Motor1E, GPIO. UIT)
>>> pwm = GPIO. PWM(04,100) # configureren inschakelen pin betekent GPIO-04 voor PWM
>>> pwm.start(50) # beginnen met 50% dutycycle
>>> afdrukken "Voorwaarts gaan"
>>> GPIO.output (Motor1A, GPIO. HOOG)
>>> GPIO.output (Motor1B, GPIO. LAAG)
>>> GPIO.output (Motor1E, GPIO. HOOG)
>>> sleep(2)
# wordt uitgevoerd uw motor in voorwaartse richting 2 seconden met een snelheid van 50%.
>>> pwm. ChangeDutyCycle(80) # steeds meer dutycycle aan 80
>>> afdrukken "GO achteruit"
>>> GPIO.output (Motor1A, GPIO. HOOG)
>>> GPIO.output (Motor1B, GPIO. LAAG)
>>> GPIO.output (Motor1E, GPIO. HOOG)
>>> sleep(2)
# Dit loopt uw motor in omgekeerde richting voor 2 seconden met 80% snelheid door het verstrekken van 80% van de accuspanning
>>> afdrukken "Nu stop"
>>> GPIO.output (Motor1E, GPIO. LAAG)
>>> pwm.stop() # stop PWM van GPIO output is het noodzakelijk
>>> GPIO.cleanup()
Hoop dat het zal werken voor u!