Roboterbau mit RPi - Tutorial
Ich werde in diesem Threat (ist übrigens mein 700ster) den Aufbau meines "PinselBot" beschreiben, um anderen die Möglichkeiten den Bot nachzubauen bzw. Anregungen für Weiterentwicklungen zu geben. Es soll dargestellt werden, dass es im Grunde nicht besonders schwer ist, Module bzw. Sensoren direkt an die GPIO Schnittstelle des Raspberri Pi anzuschliessen und damit einen autonomen Roboter aufzubauen.
ACHTUNG: Die GPIO Pins dürfen mit einer Spannung von max 3,3 Volt im Eingang (Input) betrieben werden, höhere Spannung führt im schlimmsten Fall zur Zerstörung des RPi's!!! Ich übernehme keine Verantwortung, sollte jemand meiner Anleitung folgen und durch fehlerhafte Verkabelung sein Board zerstören.
Als Buch für den Anfänger empfehle ich "Durchstarten mit Raspberry Pi" von Erik Bartmann ISBN: 978-3-86899-410-0 (dies soll keine Werbung sein, aber ich finde das Buch sehr gut). Ich gehe davon aus, dass das RPi mit Raspian "Wheezy" vorbereitet ist und eine WLAN Verbindung zum Netzwerk besteht.
Beginnen möchte ich mit dem Antrieb:
Einkaufsliste:
Neben dem Raspbery Pi benötigst du
- RP5/6 Fahrgestell inkl. Motoren und Batteriehalter
- Motortreiber L298N fertig aufgebautes Modul
- Mobiles Ladegerät
- Female to Female Kabel
- USB Kabel Ladegerät-RPi
- 6 Stk. Akkus vom Typ AA
Weiters habe ich mir aus 2mm Plexiglas eine 220x100mm grosse "Plattform" geschnitten. Darauf kommen RPi und Motortreiber, befestigt mit z. B. Klettband. Aja, Distanzbolzen zur Besfestigung der Plattform am Fahrgestell braucht man auch noch.
Die Verkabelung ist relativ einfach, weil man in dieser Phase noch kein Steckbrett benötigt wird, siehe Fotos.
Zu beachten ist, dass das Massekabel vom RPi kommend an die Masse des L298N geklemmt wird, sonst funktioniert das Ganze nicht.
Noch die GPIO-Library installieren:
von http://pypi.python.org/pypi/RPi.GPIO herunterladen
in der Console
$ tar zxf RPi.GPIO-0.x.x.tar.gz
$ cd RPi.GPIO-0.x.x
$ sudo python setup.py install
Nachdem das erledigt ist, kann das Programm ins /pi/home Verzeichnis kopiert werden:
Code:
#Get the GPIO module
import RPi.GPIO as GPIO
#Get the time module
import time
#A routine to control a pair of pins
def ControlAPairOfPins(FirstPin,FirstState,SecondPin,SecondState):
if FirstState == "1":
GPIO.output(int(FirstPin),True)
else:
GPIO.output(int(FirstPin),False)
if SecondState == "1":
GPIO.output(int(SecondPin),True)
else:
GPIO.output(int(SecondPin),False)
#Just retur
return
####Main body of code
#Get rid of warnings
GPIO.setwarnings(False)
#Set the GPIO mode
GPIO.setmode(GPIO.BOARD)
#Set the pins to be outputs
GPIO.setup(19,GPIO.OUT)
GPIO.setup(21,GPIO.OUT)
GPIO.setup(23,GPIO.OUT)
GPIO.setup(24,GPIO.OUT)
while True:
ControlAPairOfPins("19","1","21","0")
ControlAPairOfPins("23","1","24","0")
print "Drehung nach rechts"
time.sleep(1)
ControlAPairOfPins("19","0","21","0")
ControlAPairOfPins("23","0","24","0")
print "Stop"
time.sleep(1)
ControlAPairOfPins("19","0","21","1")
ControlAPairOfPins("23","0","24","1")
print "Drehung nach Links"
time.sleep(1)
ControlAPairOfPins("19","0","21","0")
ControlAPairOfPins("23","0","24","0")
print "Stop"
time.sleep(1)
ControlAPairOfPins("19","1","21","0")
ControlAPairOfPins("23","0","24","1")
print "Geradeaus vorwaerts"
time.sleep(1)
ControlAPairOfPins("19","0","21","0")
ControlAPairOfPins("23","0","24","0")
print "Stop"
time.sleep(1)
ControlAPairOfPins("19","0","21","1")
ControlAPairOfPins("23","1","24","0")
print "Geradeaus rueckwaerts"
time.sleep(1)
ControlAPairOfPins("19","0","21","0")
ControlAPairOfPins("23","0","24","0")
print "Stop"
time.sleep(1)
Das Programm kennt nur Vollgas und Stop, die Geschwindigkeit kann nicht reguliert werden.
Gestartet wird mit dem Befehl
$sudo python motor.py
Achtung: Der Roboter bewegt sich, sofern alles richtig gemacht wurde!
Servosteuerung mit pizypwm
Nun ist es auch möglich, den Servo mittels Software - PWM anzusteuern.
Danke an kampi für das Programm!
Democode:
Code:
import RPi.GPIO as GPIO
import time
import signal
import os
from pizypwm import *
def endProcess(signalnum = None, handler = None):
servo.stop()
GPIO.cleanup()
exit(0)
signal.signal(signal.SIGTERM, endProcess)
signal.signal(signal.SIGINT, endProcess)
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(26, GPIO.OUT)
while True:
Servo = PiZyPwm(500, 26, GPIO.BOARD)
user_input = raw_input("Bitte treffen Sie Ihre Wahl: ")
if(user_input == "l"):
Servo.start(90)
print "Drehung nach Links"
time.sleep(1)
Servo.stop()
GPIO.cleanup()
elif(user_input == "m"):
Servo.start(50)
print "Drehung in die Mitte"
time.sleep(1)
Servo.stop()
GPIO.cleanup()
elif(user_input == "r"):
Servo.start(10)
print "Drehung nach Rechts"
time.sleep(1)
Servo.stop()
GPIO.cleanup()
elif(user_input == "q"):
print "Programm wird beendet......"
os._exit(1)
Servo.stop()
GPIO.cleanup()
else:
print "Ungueltige Eingabe!"
Die RPi Kamera Modul ist da!
Gekauft bei RS: http://raspberrypi.rsdelivers.com/pr...e/7757731.aspx
Installation und Bedienung wie folgt: http://www.raspberrypi.org/archives/3890
Online Stream via VLC ist auch möglich: http://raspi.tv/2013/how-to-stream-v...blet-using-vlc
Ich habe einen Schlitz in die Plexiglasplattform gemacht und die Kamera darin fixiert (sh. Foto).
Sobald es mir möglich ist, werde ich mich mit der Objektverfolgung auseinandersetzen.
*Fortsetzung folgt*