Hallo Forum.
Nun möchte ich euch mein kleines Roboter-Projekt vorstellen. Realisiert habe ich es mit einem Pi B+ und Brickpi. Aus meinem Mindstorms-Paket habe ich ja genügend Teile, Sensoren,Motoren. Hier ein paar Bilder:
Der Roboter fährt geradeaus, bis er ein Hindernis sieht. Dann dreht er den Ultraschallsensor nach rechts und links, misst die Entfernung zum nächsten Hindernis und wo mehr Platz ist, wendet er sich hin. Die Idee ist ja nicht neu, habe ich von hier: http://www.nxtprograms.com/ An der Seite habe ich die RaspiCam angebaut, so kann ich einen Live-Stream empfangen. es gibt einen Touch-Sensor zum starten des Programmes und vorne ist eine Stoßstange an einem weiteren Touch-sensor, dieser stoppt den Bot, falls er gegen ein Hindernis fährt, dass der Sensor nicht sieht.
Zur Stromversorgung: Hier habe ich ein 8X Battery-Pack am BrickPi angeschlossen, welches ihn und den Pi mit Strom versorgt. Doch ganz zufrieden bin ich nicht, ich merke schon, wie der Pi manchmal schwächelt, wenn der Sensor plus die Cam und 3 Motoren im Einsatz sind. Ich überlege, mir zusätzlich noch eine Powerbank zu besorgen, um den Pi noch extra mit Strom zu versorgen. Vielleicht hat jemand eine Empfehlung?
Hier der Code:
#!/usr/bin/env python
from BrickPi import *
from time import sleep
BrickPiSetup()
BrickPi.MotorEnable[PORT_A] = 1 # Motor links
BrickPi.MotorEnable[PORT_D] = 1 # Motor rechts
BrickPi.MotorEnable[PORT_C] = 1 # Motor Kopf
BrickPi.SensorType[PORT_4] = TYPE_SENSOR_ULTRASONIC_CONT # Ultraschallsensor
BrickPi.SensorType[PORT_1] = TYPE_SENSOR_TOUCH # Startknopf
BrickPi.SensorType[PORT_3] = TYPE_SENSOR_TOUCH # Stossstange
BrickPiSetupSensors()
BrickPi.Timeout=3000
BrickPiUpdateValues()
# Motoren Stoppen
def stop():
BrickPi.MotorSpeed[PORT_A] = 0
BrickPi.MotorSpeed[PORT_D] = 0
BrickPi.MotorSpeed[PORT_C] = 0
# Links fahren
def links():
BrickPi.MotorSpeed[PORT_A] = -200
BrickPi.MotorSpeed[PORT_D] = 200
ot = time.time()
while(time.time() - ot < 0.5):
BrickPiUpdateValues()
time.sleep(.2)
# Rechts fahren
def rechts():
BrickPi.MotorSpeed[PORT_A] = 200
BrickPi.MotorSpeed[PORT_D] = -200
ot = time.time()
while(time.time() - ot < 0.5):
BrickPiUpdateValues()
time.sleep(.2)
# Messung Hindernis rechts
def wert1():
BrickPiUpdateValues()
return BrickPi.Sensor[PORT_4]
# Messung Hindernis Links
def wert2():
BrickPiUpdateValues()
return BrickPi.Sensor[PORT_4]
# Hauptprogramm
def run():
while True:
if BrickPi.Sensor[PORT_3]: # Stossstange
stop()
return stop()
if BrickPi.Sensor[PORT_4] < 35 : # Sensor sieht Hindernis
BrickPiUpdateValues()
stop()
sleep(0.5)
motorRotateDegree([150],[90],[PORT_C],0) # Kopf rechts
wert1()
wert_1 = wert1()
motorRotateDegree([150],[-180],[PORT_C],0) # Kopf links
wert2()
wert_2 = wert2()
motorRotateDegree([150],[90],[PORT_C],0) # Kopf geradeaus
BrickPi.MotorSpeed[PORT_C] = 0
time.sleep(.5)
if wert_1 < wert_2: # Vergleiche Werte
links()
else:
rechts()
time.sleep(0.5)
else:
BrickPiUpdateValues()
BrickPi.MotorSpeed[PORT_A] = 200 # fahre geradeaus
BrickPi.MotorSpeed[PORT_D] = 200
time.sleep(.2)
while True : # Starte Programm
BrickPiUpdateValues()
if BrickPi.Sensor[PORT_1]:
run()
time.sleep(.2)
Alles anzeigen
Für Verbesserungsvorschläge und weitere Ideen bin ich offen, ist bestimmt nicht perfekt