当前位置: 首页 > article >正文

树莓派AI视觉小车--5.机器人小车超声波避障

        通过超声波模块与小车结合,实现小车超声波避障。确保小车接线已安装,且安装正确。

        通过超声波来获取小车与障碍物的距离。当检测到小车与障碍物的距离小于我们的设置的距离时,小车左旋避开障碍物。

运行代码如下所示:

from LOBOROBOT import LOBOROBOT  # 载入机器人库
import RPi.GPIO as GPIO
import time

BtnPin  = 19
Gpin    = 5
Rpin    = 6

TRIG = 20
ECHO = 21

clbrobot = LOBOROBOT() # 实例化机器人对象
        
def keysacn():
    val = GPIO.input(BtnPin)
    while GPIO.input(BtnPin) == False:
        val = GPIO.input(BtnPin)
    while GPIO.input(BtnPin) == True:
        time.sleep(0.01)
        val = GPIO.input(BtnPin)
        if val == True:
            GPIO.output(Rpin,1)
            while GPIO.input(BtnPin) == False:
                GPIO.output(Rpin,0)
        else:
            GPIO.output(Rpin,0)
            
def setup():
        GPIO.setwarnings(False)
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(TRIG, GPIO.OUT)
        GPIO.setup(ECHO, GPIO.IN)
        
        GPIO.setup(Gpin, GPIO.OUT)     # Set Green Led Pin mode to output
        GPIO.setup(Rpin, GPIO.OUT)     # Set Red Led Pin mode to output
        GPIO.setup(BtnPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)    # Set BtnPin's mode is input, and pull up to high level(3.3V)


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    
    time.sleep(0.2)
    return round(during * 340 / 2 * 100)

def loop():
        while True:
            dis = distance()
            if (dis < 40) == True:
                while (dis < 40) == True:
                    clbrobot.t_down(50,0.5)
                    clbrobot.turnRight(50,0.1)
                    dis = distance()
            else:
                clbrobot.t_up(50,0)
            
            print(dis, 'cm')
            print('')

def destroy():
        clbrobot.t_stop(.1)
        GPIO.cleanup()

if __name__ == "__main__":
        setup()
        clbrobot.t_stop(.1)
        keysacn()
        try:
                loop()
        except KeyboardInterrupt:
                destroy()

        我们把小车放在地上,运行程序,小车会一直前进。当遇到前方有障碍物时且小于设置的距离时,小车会左旋避开障碍物。


http://www.kler.cn/a/388814.html

相关文章:

  • Springboot整合Prometheus+grafana实现系统监控
  • 【Linux】基础IO及文件描述符相关内容详细梳理
  • 手动实现h5移动端点击全屏按钮横屏展示图片,左右滑动切换,处理页面会随着手指滑动问题
  • Rust 中的 match 基本用法
  • 超详细:三大范式和反范式设计详解
  • Springboot应用的端口配置方法解析与优先级详解
  • Typora导出pdf手动分页和设置字体样式
  • 图像信号处理器(ISP,Image Signal Processor)详解
  • 如何让其他人连接到我们的数据库、进行项目前后端分离
  • Elasticsearch+kibana+filebeat的安装及使用
  • 刘卫国MATLAB程序设计与应用课后答案PDF第三版
  • SQL--查询连续三天登录数据详解
  • Windows命令行常用快捷指令
  • react 组件应用
  • 电子电气架构 --- 基于以太网的车载网络协议的描述
  • PHP字符串变量
  • 【ARM】MDK-E203 Undefined identifier
  • 青少年编程与数学 02-003 Go语言网络编程 14课题、Go语言Udp编程
  • MFC中Excel的导入以及使用步骤
  • 模型 用户画像
  • 原子操作 std::atomic
  • M芯片Mac构建Dockerfile - 注意事项
  • 华为OD机试 - 称砝码 (Java 2024 E卷 100分)
  • 利用Langchain构建网页内容摘要Agent
  • 【日记】总感觉搞这些才回到了自己的老本行……(1179 字)
  • IDE使用技巧与插件推荐:提升开发效率的秘籍