基于树莓派的简单超声波测距智障车

基于树莓派的简单超声波测距智障车

第一次写博客
第一次用树莓派做项目
第一次写python正式的写代码

网上查了很多资料总算成功一次(非常粗糙待改进),不喜勿喷哦

预备材料
超声波测距模块
树莓派3B+
杜邦线若干
L298N驱动(作为下行机控制轮子转动)
车架什么的自备了hhhh
充电宝(给树莓派供电)(推荐用小米的那种(没收小米的广告费),部分充电宝不适用(主要原因是会逆向充电))
电池盒(其实6V或者9V的就可以了,电压太高容易撞车)

一切准备就绪,就可以快乐的开车了…
(预备知识,了解一下L298N的运行原理和树莓派的GPIO口使用就可以了,具体的也可以边看代码边学)

功能分析:
1.探测距离
2.当距离小于一定的值时左转或右转
3.当距离特别小的时候直接倒车
废话不多说,直接上代码,在树莓派里运行就可以了

import RPi.GPIO as GPIO
import time

TRIG = 11
ECHO = 12
ENA = 29
ENB = 36
IN1 = 31
IN2 = 33
IN3 = 38
IN4 = 40


def stop():
    GPIO.output(ENA, 1)
    GPIO.output(ENB, 1)
    GPIO.output(IN4, 0)
    GPIO.output(IN3, 0)
    GPIO.output(IN2, 0)
    GPIO.output(IN1, 0)
    print 'stop'


def left():
    GPIO.output(ENA, 1)
    GPIO.output(ENB, 1)
    GPIO.output(IN4, 0)
    GPIO.output(IN3, 1)
    GPIO.output(IN2, 0)
    GPIO.output(IN1, 1)
    print  'left'


def right():
    GPIO.output(ENA, 1)
    GPIO.output(ENB, 1)
    GPIO.output(IN4, 1)
    GPIO.output(IN3, 0)
    GPIO.output(IN2, 1)
    GPIO.output(IN1, 0)
    print 'right'


def forward():
    GPIO.output(ENA, 1)
    GPIO.output(ENB, 1)
    GPIO.output(IN4, 0)
    GPIO.output(IN3, 1)
    GPIO.output(IN2, 1)
    GPIO.output(IN1, 0)
    print 'foward'


def backward():
    GPIO.output(ENA, 1)
    GPIO.output(ENB, 1)
    GPIO.output(IN4, 1)
    GPIO.output(IN3, 0)
    GPIO.output(IN2, 0)
    GPIO.output(IN1, 1)
    print 'backward'


def setup():
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(TRIG, GPIO.OUT)
    GPIO.setup(ECHO, GPIO.IN)
    GPIO.setup(ENA, GPIO.OUT)
    GPIO.setup(ENB, GPIO.OUT)
    GPIO.setup(IN1, GPIO.OUT)
    GPIO.setup(IN2, GPIO.OUT)
    GPIO.setup(IN3, GPIO.OUT)
    GPIO.setup(IN4, GPIO.OUT)
    print 'setup'


def distance():
    GPIO.output(TRIG, 0)
    time.sleep(0.000002)

    GPIO.output(TRIG, 1)
    time.sleep(0.00001)
    GPIO.output(TRIG, 0)

    while GPIO.input(ECHO) == 0:
        a = 0
    time1 = time.time()
    while GPIO.input(ECHO) == 1:
        a = 1
    time2 = time.time()

    during = time2 - time1
    return during * 340 / 2 * 100


def loop():
    while True:
        dis = distance()
        print dis, 'cm'
        print ''
        time.sleep(0.3)


def destroy():
    GPIO.cleanup()


if __name__ == "__main__":
    setup()
    try:
        loop()
        a = distance()
        while a <= 20 & a >= 5:
            left()
        while a > 20:
            forward()
        while a < 5:
            backward()
    except KeyboardInterrupt:
        destroy()

树莓派笔记(一)
OVER!
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值