2016-07-05 9 views
2

ausgeführt wird Mein raspberry pi startet neu, wenn ich den folgenden Code benutze: sudo python robot.py Mein Raspberry Pi ist an 4 Motoren, einer Schwenk- und Neigeeinheit und einem Ultraschallsensor über einen Robohat Controller angeschlossen (Robohat)Rasperry pi startet neu, wenn Programm

import robohat, time, random 
dist_l = 0 
dist_r = 0 
speed = 80 
pan = 1 
tilt = 0 
tVal = 25 # 20 degrees is centre 
pVal = 20 # 25 degrees is centre 

robohat.init() 
def doServos():# Set servo to wanted degrees 
    robohat.setServo(pan, pVal) 
    robohat.setServo(tilt, tVal) 

end = "False" 
while end == "False": 

    def dist_check(): #gets distance 
     pVal = 20 
     tVal = 25 
    doServos() #Centre the servos  
def servoPosGo(): 
    pVal2 = (90) 
    robohat.setServo(pan, pVal2) 
    robohat.setServo(tilt, tVal) 
    dist_l = robohat.getDistance() 
servoPosGo() 
#Take right reading at 90 degrees 


def servoPosGo2(): 
    pVal3 = (-60) 
    robohat.setServo(pan, pVal3) 
    robohat.setServo(tilt, tVal) 
    dist_r = robohat.getDistance() 
servoPosGo2() 

doServos() #Centres the servos 
dist_check() 
if dist_r < 100 or dist_l < 100: #Is the distance greater than 100, and go which is greater but less than 100 
    if dist_l > dist_r: 
     robohat.spinLeft(speed) 
     robohat.forward(speed) 
     time.sleep(dist_l - 10) 
     robohat.stop() 
    elif dist_r > dist_l: 
     robohat.spinRight(speed) 
     robohat.forward(speed) 
     time.sleep(dist_r - 10) 
     robohat.stop() 
    elif dist_l == dist_r: #If the two distnaces are the same, choose a random one 
     ran = random.randrange(1, 2) 
     if ran == (1): 
      robohat.spinLeft(speed) 
      robohat.forward(speed) 
      time.sleep(dist_l - 10) 
      robohat.stop() 
     elif ran = (2): 
      robohat.spinRight(speed) 
      robohat.forward(speed) 
      time.sleep(dist_r - 10) 
      robohat.stop() 
elif dist_l > 100 or dist_r > 100: #If distance IS greater than 100, go forward and set end to true 
    end = "True" 
    robohat.forward(speed) 
    if dist_r > dist_l: 
     time.sleep(dist_r - 10) 
    elif dist_l > dist_r: 
     time.sleep(dist_l - 10) 
+0

Was verwenden Sie, um Ihre Himbeere mit Strom zu versorgen? Es ist möglich, dass der Zugriff auf die externen Motoren und/oder Sensoren mehr Energie verbraucht, als Ihre Quelle liefern kann, was zu einem Neustart führt, da Ihr Raspberry für eine Sekunde nicht genug Energie bekommt. – Heinrich

+0

Ein Neustart kann durch einen Stromausfall verursacht werden. Erfolgt der Neustart ohne angeschlossene Geräte? –

+0

Es sieht so aus, als ob Ihre dist_check-Funktion niemals definiert ist. Alles, was Sie haben, ist dist_check(), aber def nicht dist_check(). – David

Antwort

0

Geben Sie Ihrem RPi einen stärkeren Netzadapter. Es sollte mindestens 1,2 A haben.

Auch sicherstellen, dass Ihre Servos nicht von RPi angetrieben werden, die Masse muss die gleiche sein und nur Servo-Befehlsleitung mit RPi-Pin verbunden. Es gibt auch eine Tatsache, dass RPi 3,5V-Ausgabe zu seinem GPIO liefert, während die meisten Servo 5V auf Energie und cmd Linien benötigen. Obwohl einige von ihnen mit niedrigerer Spannung auf cmd Linie richtig arbeiten werden.

Wenn Sie nicht Ihre Motoren direkt an GPIO verbinden, müssen Sie erneut prüfen usw. Erdung

wird Manchmal helfen großen Kondensator auf Stromeingang Zugabe, so dass plötzliche transiente nicht Ihre RPi in Neustart schocken.