My raspberry pi reboots when I run the follow code using: sudo python robot.py My raspberry pi is attached to 4 motors, a pan and tilt assembly and an ultrasonic sensor through a robohat controller ( Robohat)
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)
Give your RPi a stronger AC adapter. It should have minimally 1.2 A.
Also, make sure your servoes aren't powered from RPi, the ground has to be the same and only servo command line connected to RPi pin. There is also a fact that RPi delivers 3.5V output to its GPIO, while most servoes require 5V on power and cmd lines. Although some of them will work correctly with lower voltage on cmd line.
If you're not connecting your motors directly to GPIO, you have to recheck grounding etc.
Sometimes will help adding big capacitor on power input, so that sudden transient will not shock your RPi into reboot.