5.24 综合案例2.0-雷达避障系统(仅支持2.2以上版本)
综合案例2.0-雷达避障系统
- 简介
- AJ-SR04M- T-X超声波测距模块
- 准备
- 硬件连接图
- 代码流程
- 功能实现
- 1、物联网平台开发
- 2、设备端开发
- 3、调试
简介
近年来,随着智能汽车、智能机器人的发展,雷达避障技术得到了较快的发展。避障雷达是防撞设备的辅助装置,可以根据需要对避障距离和避障范围进行调整。避障雷达通常安装在物体可移动方向的前部位置,用于探测物体移动方向前方障碍物横截面与自身的距离,由此来判断是否让物体减速或停止移动,从而避免发生碰撞。
本系统检测前方障碍物,当距离小与设定安全距离会发出警报,并将当前距离上传云端,提示采取相应措施,以避免发生碰撞。安全距离可以通过云端进行更改。
AJ-SR04M- T-X超声波测距模块
功能说明
工作原理
用IO口Trig触发测距,至少给10us的高电平。模块自动发送8个40KHZ的方波,自动检测是否有信号返回。当有信号返回时,通过IO口Echo输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。常温下测试距离=(高电平时间*声速(348M/S))/2。
模块被触发测距后,如果接收不到回波(原因超过所测范围或是探头没有正对被测物),ECHO 口会在 40MS 后自动变为低电平,标志着此次测量结束,不论成功与否。
LED 上电时末亮,只有在给了 TRIG 引脚触发信号后才亮,灯闪频率与触发周期同步,说明此时模块接收到正确的指令进入工作状态。建议测量周期为 50ms 以上,以防止发射信号对回响信号的影响。
简单来说就是主板通过IO口Trig给个不小于10us的高电平,触发测距。测距成功,模块通过IO口Echo输出一个高电平给主板;测距失败,ECHO 口会在 40MS 后自动结束本次测量。
- 其他模式可以查看模块手册
准备
本案例需要的硬件
器材 | 数量 |
---|---|
HaaS506开发板 | 1 |
AJ-SR04M- T-X超声波测距模块 | 1 |
蜂鸣器 | 1 |
SIM卡 | 1 |
杜邦线 | 若干 |
硬件连接图
代码流程
1、连接阿里云平台。
2、开机将默认安全距离上传云端。
3、重复检测前方距离,当前方物体距离小与安全距离,蜂鸣器发出警报,并将数据上传阿里云。
4、传感器有效范围20cm-600cm,当超过这个范围无法检测正确距离。
5、可以通过云端自行设置蜂鸣器报警安全距离。
功能实现
1、物联网平台开发
第一次使用物联网平台的读者,需要开通实例后使用物联网平台功能。也可以使用免费的公共实例进行开发,在阿里云物联网平台中,左上角选择‘华东2-上海’,点击‘公共实例’,即可开通。
1、平台产品创建可参考haas506 2.0开发教程-aliyunIoT
2、创建产品属性(添加物模型)
选择产品功能定义–编辑草稿
1、添加自定义功能
2、添加标识符与数据类型(标识符要与代码一致)
3、点击发布上线
选择读写类型
- 发布上线,点击确定
2、设备端开发
- 第一次使用开发板的读者可以按照haas5062.0开发教程-导学篇搭建开发环境。
- 搭建完后复制以下代码到Visual Studio Code,复制产品证书到代码相应位置。
- 替换176行 productKey ,productSecret。(物联网平台开发添加设备时请使用IMEI号)
- 2.2版本获取IMEI号接口有更新,需要更改以下内容(Ctrl+F 查找modem)
# 获取设备的IMEI 作为deviceName 进行动态注册
deviceName = modem.info.getDevImei()
...
main.py
# coding=utf-8
from driver import GPIO
from driver import PWM
import network
import _thread
import ujson
import utime as time
import modem
from aliyunIoT import Device
import kv#当iot设备连接到物联网平台的时候触发'connect' 事件
def on_connect(data):global module_name,default_ver,productKey,deviceName,deviceSecret,on_trigger,on_download,on_verify,on_upgradeprint('***** connect lp succeed****')data_handle = {}data_handle['device_handle'] = device.getDeviceHandle()#当连接断开时,触发'disconnect'事件
def on_disconnect():print('linkkit is disconnected')#当iot云端下发属性设置时,触发'props'事件
def on_props(request):global safe_distanceparams=request['params']params=eval(params)if "safe_distance" in params:safe_distance = params["safe_distance"]print('safe_distance:',safe_distance)upload_safe_distance(safe_distance)#当iot云端调用设备service时,触发'service'事件
def on_service(id,request):print('clound req id is {} , req is {}'.format(id,request))
#当设备跟iot平台通信过程中遇到错误时,触发'error'事件
def on_error(err):print('err msg is {} '.format(err))#网络连接的回调函数
def on_4g_cb(args):global g_connect_statuspdp = args[0]netwk_sta = args[1]if netwk_sta == 1:g_connect_status = Trueelse:g_connect_status = False#网络连接
def connect_network():global net,on_4g_cb,g_connect_status#NetWorkClient该类是一个单例类,实现网络管理相关的功能,包括初始化,联网,状态信息等.net = network.NetWorkClient()g_register_network = Falseif net._stagecode is not None and net._stagecode == 3 and net._subcode == 1:g_register_network = Trueelse:g_register_network = Falseif g_register_network:#注册网络连接的回调函数on(self,id,func); 1代表连接,func 回调函数 ;return 0 成功net.on(1,on_4g_cb) net.connect(None)else:print('网络注册失败')while True:if g_connect_status:print('网络连接成功')breaktime.sleep_ms(20)#动态注册回调函数
def on_dynreg_cb(data):global deviceSecret,device_dyn_resigter_succeddeviceSecret = datadevice_dyn_resigter_succed = True# 连接物联网平台
def dyn_register_device(productKey,productSecret,deviceName):global on_dynreg_cb,device,deviceSecret,device_dyn_resigter_succedkey = '_amp_customer_devicesecret'deviceSecretdict = kv.get(key)print("deviceSecretdict:",deviceSecretdict)if isinstance(deviceSecretdict,str): deviceSecret = deviceSecretdict if deviceSecretdict is None or deviceSecret is None:key_info = {'productKey': productKey ,'productSecret': productSecret ,'deviceName': deviceName}# 动态注册一个设备,获取设备的deviceSecret#下面的if防止多次注册,当前若是注册过一次了,重启设备再次注册就会卡住,if not device_dyn_resigter_succed:device.register(key_info,on_dynreg_cb) distance_data = {}
def upload_distance(n):global distance_datadistance_data["distance"]= ndistance_data_str=ujson.dumps(distance_data)data={'params':distance_data_str} device.postProps(data)warn_data = {}
def upload_safe_distance(safe):global warn_datawarn_data["safe_distance"]= safewarn_data_str=ujson.dumps(warn_data)data1={'params':warn_data_str} device.postProps(data1)#蜂鸣器
buzzers = PWM()
buzzers.open("buzzer")
switch_buzzers = 0
buzzer = 0
def start_buzzers():global switch_buzzers,buzzerwhile True:time.sleep_ms(200)if switch_buzzers == 1 and buzzer == 0:param = {'freq':3000,'duty':50}buzzers.setOption(param)buzzer = 1if switch_buzzers == 0 and buzzer == 1:param = {'freq':3000,'duty':100}buzzers.setOption(param)buzzer = 0#超声波测距
def getData():TRIG.write(0)#set period,above 50mstime.sleep_ms(500)TRIG.write(1) #Set TRIG as LOW time.sleep_us(10) #Delay of 10usTRIG.write(0) #Set TRIG as HIGH while ECHO.read()==0: #Check if Echo is LOWpass pulse_start = time.ticks_us() #Time of the last LOW pulsewhile ECHO.read()==1: #Check whether Echo is HIGHpass pulse_end = time.ticks_us() #Time of the last HIGH pulse #print("pulse_duration",time.ticks_diff(pulse_end,pulse_start)) # uspulse_duration = time.ticks_diff(pulse_end,pulse_start)/10000 #pulse duration: sd=pulse_duration*340/2return dif __name__ == '__main__':ICCID=Noneg_connect_status = Falsenet = Nonedevice = NonedeviceSecret = NonedeviceName = None#替换下列产品信息###################################productKey = "a1laDtv9VrO"productSecret = "bPbyllJ80mRX5PPy"###################################device_dyn_resigter_succed = False# 连接网络connect_network()# 获取设备的IMEI 作为deviceName 进行动态注册#2.2版本改为#deviceName = modem.info.getDevImei()deviceName = modem.getDevImei()#获取设备的ICCIDICCID=modem.sim.getIccid()#初始化物联网平台Device类,获取device实例device = Device()if deviceName is not None and len(deviceName) > 0 :#动态注册一个设备dyn_register_device(productKey,productSecret,deviceName)else:print("获取设备IMEI失败,无法进行动态注册")while deviceSecret is None:time.sleep(0.2)print('动态注册成功:' + deviceSecret)key_info = {'region' : 'cn-shanghai' ,'productKey': productKey ,'deviceName': deviceName ,'deviceSecret': deviceSecret ,'keepaliveSec': 60,}#打印设备信息print(key_info)#device.ON_CONNECT 是事件,on_connect是事件处理函数/回调函数device.on(device.ON_CONNECT,on_connect)device.on(device.ON_DISCONNECT,on_disconnect)device.on(device.ON_PROPS,on_props)device.on(device.ON_SERVICE,on_service)device.on(device.ON_ERROR,on_error)device.connect(key_info)#主程序time.sleep(2)safe_distance = 50print('safe_distance:',safe_distance)upload_safe_distance(safe_distance)#creat instancesTRIG = GPIO() ECHO = GPIO() TRIG.open('trig') # Set pin as GPIO outECHO.open('echo') # Set pin as GPIO in_thread.start_new_thread(start_buzzers, ())try:while True:dis = getData()if dis > 20 and dis < 600:print ("distance:%0.2f cm" % dis) if dis < safe_distance:switch_buzzers = 1upload_distance(dis) else:switch_buzzers = 0 else:switch_buzzers = 0print ("Out Of Range") except KeyboardInterrupt:print("exit")
board.json
{"name": "haas506","version": "2.0.0","io": {"buzzer": {"type": "PWM","port": 39},"echo":{"type":"GPIO","port": 20,"dir": "input","pull":"pullup"}, "trig":{"type":"GPIO","port": 19,"dir": "output","pull":"pullup"} },"debugLevel": "ERROR","repl": "enable","replPort": 0
}
3、调试
1、串口调试工具log,网络连接成功–动态注册成功–打印安全距离–重复打印当前监测距离。
2、阿里云平台,打开实时刷新,物模型数值会即时改变。
3、通过在线调试更改安全距离
5.24 综合案例2.0-雷达避障系统(仅支持2.2以上版本)相关推荐
- 5.18 综合案例2.0-家庭入侵报警系统(仅支持2.2以上版本)
综合案例2.0-家庭入侵报警系统 简介 无源蜂鸣器 准备 硬件连接图 代码流程 功能实现 1.物联网平台开发 2.设备端开发 调试 3.物联网应用开发 3.1新建'普通项目' 3.2关联产品和设备 3 ...
- haas506 2.0开发教程-hota(仅支持2.2以上版本)
haas506 2.0开发教程-hota 1.hota.py升级 案例说明 (1)获取URL (2)功能代码 (3)输出log 2.hota.pac升级 案例说明 (1)获取URL (2)功能代码 ( ...
- 5.31 综合案例2.0 - 在线音乐盒
综合案例2.0 - 在线音乐盒 一.案例说明 二.准备器件 三.案例连线 四.代码 代码说明 复制 五.测试 一.案例说明 用python写一个在线音乐播放器,MP3云喇叭 本案例制作一个联网下载声音 ...
- 5.39 综合案例2.0 - STM32蓝牙遥控小车2(语音控制)
综合案例2.0 - 蓝牙遥控小车1- 语音控制 成品展示 案例说明 器件说明 小车连线 小车源码 语音模块遥控 语音遥控连线 模块使用说明 1.MLT-BT05 4.0 蓝牙模块 2.ASRPRO-2 ...
- 5.38 综合案例2.0 -语音助手(短信,蓝牙,M2M设备间通信)
综合案例2.0 - 语音助手 效果展示 案例说明 原理 器件 语音助手功能实现 1,ASRPRO-2m模块 下载代码连线 模块编程说明 2,模块与开发板接线 3,语音助手代码 功能1:语音发短信说明 ...
- 5.25 综合案例2.0-居家隔离监控系统(2.2版本接口有更新)
综合案例2.0-居家隔离监控系统 简介 AJ-SR04M- T-X超声波测距模块 准备 硬件连接图 代码流程 功能实现 1.物联网平台开发 2.设备端开发 3.调试 4.创建钉钉机器人 5.IoT S ...
- 5.20 综合案例2.0-甲醛浓度检测系统(2.2版本接口有更新)
综合案例2.0-甲醛浓度检测系统 简介 电化学甲醛模组 准备 硬件连接图 代码流程 1.物联网平台开发 2.设备端开发 调试 3.物联网应用开发 3.1新建'普通项目' 3.2关联设备 3.3创建we ...
- 5.8 综合案例2.0-智能刷卡门禁系统(仅支持2.2以上版本)
综合案例2.0-智能刷卡门禁系统 简介 准备 硬件连接图 代码流程 功能实现 1.物联网平台开发 2.设备端开发 调试 3.场景联动设定 刷卡测试 简介 使用MFRC522 RFID传感器与舵机制作的 ...
- 毫米波雷达在无人机避障系统中的应用
电子科技大学 格拉斯哥学院 2017级 郝逸嘉 摘要:近年来,无人机技术得到了快速的发展和广泛的应用,预计在未来将被应用到更多的领域.尽管日趋成熟,目前无人机技术在实际应用中仍然存在着很多安全问题,同 ...
最新文章
- 给定一个 n X n 的矩阵 和 R,求旋转 90 X R 度以后的矩阵
- opencv openpose
- DefaultSerializer requires a Serializable payload but received an object of type
- antlr 语言 库_关于ANTLR的通用库的需求:使用反射来构建元模型
- 转载——CVE-2019-0807
- 一个不错的局域网聊天工具之飞鸽传书下载地址
- 全民免费吃鸡,驱动人生带你玩转PUBG
- 打开量化交易的黑箱——note1
- android 免 root修改位置打卡
- 基于springBoot+MyBatis+Vue的前后端分离旅游管理系统
- 【图像超分辨率】Deep Learning for Image Super-resolution: A Survey
- 市场调研报告-全球与中国船用下水推车市场现状及未来发展趋势
- css 3d环形,CSS3 飞行的3D圆环
- 为什么百度搜索引擎优化比以前更难?
- 数字化转型导师坚鹏:数字化时代企业管理变革与创新营销
- Python打包出现 failed to execute script xxx解决方法
- chmod 777 修改文件权限
- 笔记本 续航测试软件,最低5小时起 这些超长续航笔记本你一定不知道
- 广东省工业和信息化厅关于组织开展2022年创新型中小企业评价、专精特新中小企业认定和复核工作的通知
- WordPress安装论坛插件
热门文章
- Win10官网原版安装
- ubuntu16.04安装GNU Radio
- IBM云对象存储Cleversafe 大力拓展全新战场
- Layui的eleTree树式选择器使用
- Elasticsearch6.4专题之16:Ingest Node
- linux下安装hadoop步骤
- XP系统添加网络打印机步骤
- python random.round 修约方法 4舍6入5看齐,奇进偶不进
- 计算机休眠后黑屏打不开,[电脑待机以后黑屏打不开怎么办]电脑睡眠后黑屏打不开...
- codeforces1194B Yet Another Crosses Problem 思维