4
树莓派二代买回来一年多了,本来是要做一个小的WEB服务器用的,做了几个月之后就没有用了。后来又想做一个台历,但是没有合适的屏。就又在淘宝上看了看小车想想做一个。【配件】
1、树莓派2代一张
2、无线网卡
3、扩展板
4、小车底盘+两电机+两轮子(淘宝的全套)
5、L298N
6、HC-SR04
7、四路红外感应
8、12v降5V电源板
9、电池是旧的笔记本电池拆下来的
10、10K电阻若干,螺丝若干
首先在网上都说要在HC-SR04的Echo口和树莓派的GPIO口之间要串一个电阻,以防返回的电压过高烧毁树莓派,所以我在红外感应的四个输出口和GPIO之间也串上电阻。
所有取电全从电源板上接的, HC-SR04接树莓板的第11、12接口。Trig接12,Echo接11。红外的分别接第13、15、16、18口,L298N接的第32、33、35、38接口
我把四个红外感应器分别在小车的前下方,左前,右前,和正后方。
简单的写了程序,跑起来还是不太理想。
# -*- coding:utf-8 -*-
import RPi.GPIO as gpio
import time
import sys
#L298N接口
def init_298():
gpio.setmode(gpio.BOARD)
gpio.setup(32,gpio.OUT)
gpio.setup(33,gpio.OUT)
gpio.setup(35,gpio.OUT)
gpio.setup(38,gpio.OUT)
#HC-SR04接口
def init_SR04():
gpio.setmode(gpio.BOARD)
gpio.setup(11,gpio.IN)
gpio.setup(12,gpio.OUT,initial=gpio.LOW)
#光感接口定义
def init_MH():
gpio.setmode(gpio.BOARD)
gpio.setup(13,gpio.IN)
gpio.setup(15,gpio.IN)
gpio.setup(16,gpio.IN)
gpio.setup(18,gpio.IN)
#前进
def forward(time_sleep):
init_298()
gpio.output(32,gpio.LOW)
gpio.output(33,gpio.HIGH)
gpio.output(35,gpio.LOW)
gpio.output(38,gpio.HIGH)
time.sleep(time_sleep)
gpio.cleanup()
#后退
def rever(time_sleep):
init_298()
gpio.output(32,gpio.HIGH)
gpio.output(33,gpio.LOW)
gpio.output(35,gpio.HIGH)
gpio.output(38,gpio.LOW)
time.sleep(time_sleep)
gpio.cleanup()
#左转
def left(time_sleep):
init_298()
gpio.output(32,True)
gpio.output(33,True)
gpio.output(35,gpio.LOW)
gpio.output(38,gpio.HIGH)
time.sleep(time_sleep)
gpio.cleanup()
#右转
def right(time_sleep):
init_298()
gpio.output(32,gpio.LOW)
gpio.output(33,gpio.HIGH)
gpio.output(35,True)
gpio.output(38,True)
time.sleep(time_sleep)
gpio.cleanup()
def left_r(time_sleep):
init_298()
gpio.output(32,gpio.HIGH)
gpio.output(33,gpio.LOW)
gpio.output(35,gpio.LOW)
gpio.output(38,gpio.HIGH)
time.sleep(time_sleep)
gpio.cleanup()
def right_r(time_sleep):
init_298()
gpio.output(32,gpio.LOW)
gpio.output(33,gpio.HIGH)
gpio.output(35,gpio.HIGH)
gpio.output(38,gpio.LOW)
time.sleep(time_sleep)
gpio.cleanup()
#
def CHSR04():
init_SR04()
gpio.output(12,gpio.HIGH)
time.sleep(0.000015)
gpio.output(12,gpio.LOW)
while gpio.input(11) == 0:
# pass
t1 = time.time()
while gpio.input(11) == 1:
# pass
t2 = time.time()
return (t2-t1)/0.000058
gpio.cleanup()
#
def check_front():
while True:
CHSR04()
dist = CHSR04()
init_MH()
if gpio.input(16) == 1 or dist < 30:
if gpio.input(18) == 0 and gpio.input(13) == 1 and gpio.input(15) == 1:
rever(0.3)
right(0.3)
# time.sleep(1)
init_MH()
elif gpio.input(13) == 0:
left(0.5)
# time.sleep(0.5)
else:
right(0.5)
# time.sleep(0.5)
else:
init_MH()
if gpio.input(13) == 1 and gpio.input(15) == 0:
right_r(0.5)
# time.sleep(0.5)
init_MH()
elif gpio.input(13) == 0 and gpio.input(15) == 1:
left_r(0.5)
# time.sleep(0.5)
else:
forward(0.3)
#
check_front()
等有时间了再改改……
|
评分
-
查看全部评分
|