运行 程序时树莓派重启
Rasperry pi reboots when running program
当我 运行 使用以下代码时,我的 raspberry pi 重新启动:sudo python robot.py
我的 raspberry pi 通过机器人控制器 (Robohat)
连接到 4 个电机、一个平移和倾斜组件以及一个超声波传感器
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)
给你的树莓派一个更强大的交流适配器。它应该至少有 1.2 A.
此外,请确保您的伺服系统不是由 RPi 供电,接地必须相同,并且只有伺服指令线连接到 RPi 引脚。还有一个事实是,RPi 向其 GPIO 提供 3.5V 输出,而大多数伺服系统需要 5V 电源和 cmd 线路。虽然其中一些可以在 cmd 线上使用较低的电压正常工作。
如果您没有将电机直接连接到 GPIO,则必须重新检查接地等。
有时会有助于在电源输入上添加大电容,这样突然的瞬变就不会震动你的树莓派导致重启。
当我 运行 使用以下代码时,我的 raspberry pi 重新启动:sudo python robot.py 我的 raspberry pi 通过机器人控制器 (Robohat)
连接到 4 个电机、一个平移和倾斜组件以及一个超声波传感器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)
给你的树莓派一个更强大的交流适配器。它应该至少有 1.2 A.
此外,请确保您的伺服系统不是由 RPi 供电,接地必须相同,并且只有伺服指令线连接到 RPi 引脚。还有一个事实是,RPi 向其 GPIO 提供 3.5V 输出,而大多数伺服系统需要 5V 电源和 cmd 线路。虽然其中一些可以在 cmd 线上使用较低的电压正常工作。
如果您没有将电机直接连接到 GPIO,则必须重新检查接地等。
有时会有助于在电源输入上添加大电容,这样突然的瞬变就不会震动你的树莓派导致重启。