匿名
未登录
登录
丢石头百科
搜索
查看“实验二十四:超声波传感器实验”的源代码
来自丢石头百科
名字空间
页面
讨论
更多
更多
页面选项
查看
查看源代码
历史
←
实验二十四:超声波传感器实验
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
*[[Basic Experiment Kits For Arduino]] *[[Basic Experiment Kits For Raspberry Pi]] == 模式选择 == *[[File:实验二十四:HC-SR04超声波传感器实验_模式选择.png|400px]] == 模式说明 == === GPIO模式 === *[[File:Ultrasonic Distance Sensor (HC-SR04)_GPIO.png|800px]] *工作模式同老版本HC-SR04。外部MCU给模块Trig脚一个大于10uS的高电平脉冲;模块会给出一个与距离等比的高电平脉冲信号, *可根据脉宽时间“T”算出:距离=T*C/2 (C为声速) *声速温度公式:c=(331.45+0.61t/℃)m•s-1 (其中330.45是在0℃) 其中: **0℃声速: 330.45M/S **20℃声速: 342.62M/S **40℃声速: 354.85M/S **0℃-40℃声速误差7%左右。实际应用,如果需要精确距离值,必需要考虑温度影响,做温度补偿。 === IIC模式 === **IIC地址: 0X57 **IIC传输格式: ***写数据:[[File:Ultrasonic Distance Sensor (HC-SR04)_IIC_1.png|600px]] ***读数据:[[File:Ultrasonic Distance Sensor (HC-SR04)_IIC_2.png|600px]] **命令格式:[[File:Ultrasonic Distance Sensor (HC-SR04)_IIC.jpg|600px]] **向模块写入0X01,模块开始测距;等待200mS(模块最大测距时间)以上。直接读出3个距离数据。BYTE_H,BYTE_M与BYTE_L。 **距离计算方式如下(单位mm): ***距离=((BYTE_H<<16)+(BYTE_M<<8)+ BYTE_L)/1000 ***距离=( BYTE_H*65536 + BYTE_M*256 + BYTE_L )/1000 === UART模式 === **UART模式:波特率9600,起始位1位,停止位1位,数据位8位,无奇偶校验位,无流控制 **连接串口。外部MCU或PC发命令0XA0,模块完成测距后发3个返回距离数据,BYTE_H,BYTE_M与BYTE_L。 **距离计算方式如下(单位mm): ***距离=((BYTE_H<<16)+(BYTE_M<<8)+ BYTE_L)/1000 ***距离=( BYTE_H*65536 + BYTE_M*256 + BYTE_L )/1000 === 1-Wire模式 === *[[File:实验二十四:HC-SR04超声波传感器实验_1-wire模式.png|800px]] *外部 MCU 初始设置为输出,给模块 I/O 脚一个大于 10uS 的高电平脉冲;输出脉冲信号后,MCU 设置 为输入模式,等待模块给出的一个与距离等比的高电平脉冲信号;测量结束后 MCU 设置为输出模式,进行下次测量。 *声速可根据脉宽时间“T”算出: 距离=T*C/2 (C 为声速) *声速温度公式:c=(331.45+0.61t/℃)m•s-1 (其中 330.45 是在 0℃) **0℃声速: 330.45M/S **20℃声速: 342.62M/S **40℃声速: 354.85M/S **0℃-40℃声速误差 7%左右。实际应用,如果需要精确距离值,必需要考虑温度影响,做温度补偿。 == Arduino == *'''以GPIO模式为例''' === 实验现象 === * 通过串口打印模块测量到的距离 === 电路连接 === *[[File:实验二十四:HC-SR04超声波传感器实验_接线.png|400px]] === 主要程序 === <pre> float distance; const int echo=A4; //echO接A4脚 const int trig=A5; //trig接A5脚 void setup() { Serial.begin(9600); //波特率9600 pinMode(echo,INPUT); //设置echo为输入脚 pinMode(trig,OUTPUT); //设置trig为输出脚 Serial.println(" RCWL-1XXX-TTL 测距开始:"); } void loop() { digitalWrite(trig,HIGH); delayMicroseconds(1); digitalWrite(trig,LOW); distance = pulseIn(echo,HIGH); //计数接收高电平时间 distance = distance*340/2/10000; //计算距离 1:声速:340M/S 2:实际距离为1/2声速距离 3:计数时钟为1US//温补公式:c=(331.45+0.61t/℃)m•s-1 (其中331.45是在0度) Serial.print("距离: "); Serial.print(distance); Serial.println("CM"); delay(30); //单次测离完成后加30mS的延时再进行下次测量。防止近距离测量时,测量到上次余波,导致测量不准确。 delay(100); //延时100mS再次测量,延时可不要 } </pre> == 树莓派 == *'''以GPIO模式为例''' === 电路连接 === *[[File:实验二十四:HC-SR04超声波传感器实验_接线1.png|600px]] === 程序运行 === ==== Python ==== * 安装gpiozero库 **可以使下面命令来安装该库 <pre> sudo apt update sudo apt install python3-gpiozero </pre> :*其它树莓派上的系统可以使下面命令来安装该库: <pre> sudo pip3 install gpiozero </pre> :*运行以下语句可以查看树莓派GPIO口定义 <pre> pinout </pre> *下载树莓派参考例程,将文件解压后拷贝放在用户名目录下,运行 <pre> cd raspberrypi/24/python_gpiozero python sensor.py </pre> *此时可看见树莓派在正确运行程序,若想退出,按ctrl+C即可 *指令说明:'''gpiozero.InputDevice(pin, pull_up, active_state)''' **主要参数: ***pin:GPIO口编号; ***pull_up: 内部上下拉电阻设置, ****设置为True时,GPIO引脚通过内部上拉电阻被拉高 ****设置为Flase(默认)时,GPIO引脚通过内部下拉电阻被拉低 ****设置为None时,GPIO引脚悬空,gpiozero无法猜测活动状态,必须设置active_state ***active_state: ****设置为True时,当硬件引脚状态为“高”,软件显示引脚状态也为“高” ****设置为False时,则输入的极性相反,当硬件引脚状态为“高”,软件显示引脚状态为“低” ****当pull_up设置为None时,使用该参数设置未知的引脚活动状态 ****当pull_up设置为True或者False时,引脚的活动状态被将自动赋值 *指令说明:'''gpiozero.OutputDevice(pin, active_high, initial_value)''' **主要参数: ***pin: GPIO口编号, *** active_high: 内部上下拉电阻设置, ****设置为True(默认)时,on()将引脚设置为High,off()将引脚设置为LOW。 ****设置为Flase时,on()将引脚设置为LOW,off()将引脚设置为High。 ***initial_value: ****如果为False(默认值),则所有LED初始状态为关闭。 ****如果为None,则所有LED初始状态不稳定。 ****如果为True,则所有LED初始状态为关闭打开。 *更多指令请查看[https://gpiozero.readthedocs.io/en/latest/installing.html gpiozero文档] == 例程下载 == *[[:File:Basic Experiment Kits For Arduino.zip|Arduino例程]] * [[:File:Basic Experiment Kits For Raspberry Pi.zip|树莓派5例程 python]] == 相关例程 == {{Arduino and Raspberry Pi Case}}
该页面使用的模板:
模板:Arduino and Raspberry Pi Case
(
查看源代码
)
模板:Study
(
查看源代码
)
返回至
实验二十四:超声波传感器实验
。
导航
导航
首页
最近更改
随机页面
MediaWiki帮助
首页
首页
树莓派
主机
配件包
外壳
键鼠
电源
扩展板
显示屏
墨水屏
摄像模块
通信模块
继电器
电机驱动板
游戏机
产品分类
树莓派
Arduino
micro:bit
STM32
Espressif
WiFi模块
蓝牙模块
无线模块
LoRa模块
4G模块
GSM
GPRS
以太网
导航模块
北斗卫星
GPS
LCD
墨水屏
OLED
摄像头
USB模块
串口模块
RS232
RS485
CAN
传感器
温度模块
湿度模块
气压模块
继电器
电机模块
指纹模块
电平转换
音频模块
编程器
Wiki工具
Wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志