简易超声波雷达的arduino实现

  • 项目背景
  • 所用材料
  • 实现效果
  • 初始化设置
  • 超声波的控制
  • 舵机的控制
  • 扫描与旋转的整体代码

项目背景

很久以前博主参加了一个DIY小车实现抓取等功能的比赛,但是后来由于疫情等原因没赶上参赛时间,当时就留下了一些小零件。
博主自己的一个研究方向是与点云相关的,就想用手头的超声波传感器加上舵机做一个超声波雷达的小玩具。
某宝上有很多卖支架的,但是提供的代码比较乱,因此博主整理了代码,希望能帮到需要的人。

所用材料

arduino UNO
超声波传感器HC-SR04
舵机SG90
舵机支架

实现效果

舵机载着超声波模块转了180°,然后舵机复位,不断重复。串口以“距离,角度”的格式打印结果

初始化设置

//超声波模块,两个任意端口即可
#define Trig 2
#define Echo 4
#define servopin 7    //定义舵机信号引脚接数字7脚
float dist; //记录超声波得到的距离
float tmp;  //记录超声波返回的原始数据
float delta = 0.0; //超声波结果可能需要微调
int delay_time = 20;   //void setup() {// put your setup code here, to run once:Serial.begin(115200);pinMode(Trig, OUTPUT);pinMode(Echo, INPUT);pinMode(servopin, OUTPUT);
}

超声波的控制

超声波模块的具体原理可参考1
这里直接上代码

//给Trig发送一个低高低的短时间脉冲,触发测距digitalWrite(Trig, LOW); //给Trig发送一个低电平delayMicroseconds(2);    //等待 2微妙digitalWrite(Trig,HIGH); //给Trig发送一个高电平delayMicroseconds(10);    //等待 10微妙digitalWrite(Trig, LOW); //给Trig发送一个低电平tmp = float(pulseIn(Echo, HIGH)); //存储回波等待时间,//pulseIn函数会等待引脚变为HIGH,开始计算时间,再等待变为LOW并停止计时//返回脉冲的长度//声速是:340m/1s 换算成 34000cm / 1000000μs => 34 / 1000//因为发送到接收,实际是相同距离走了2回,所以要除以2//距离(厘米)  =  (回波时间 * (34 / 1000)) / 2//简化后的计算公式为 (回波时间 * 17)/ 1000//可能存在一定的误差,所以引入修正量deltadist = (tmp * 17 )/1000 + delta; //把回波时间换算成cm

舵机的控制

要注意的是,这款舵机产生周期为20ms,宽度为1.5ms的基准信号,通过改变信号宽度,可以实现对角度的控制

void servopulse(int angle)  //PWM型号产生函数
{// Microseconds 为纳秒// 该舵机产生周期为20ms,因此需要调整使一个周期为20000ns// 调整使得高频信号为0.5ms-2.5ms 对应顺时针至逆时针// 本函数的输入是0-180,对应顺时针-逆时针,输入值控制角度int pulsewidth = (angle * 11) + 500;  // 角度换算到脉冲宽度digitalWrite(servopin, HIGH);   delayMicroseconds(pulsewidth); digitalWrite(servopin, LOW);    delayMicroseconds(20000 - pulsewidth);
}

扫描与旋转的整体代码

把函数run()放进loop里就好啦

void run(){// 先初始化角度// 在我的使用过程中,直接让舵机转到0度时实际上好像并没有真正转到0度,所以我这里写了两个servopulse(0),确保他真的复位了。应该是舵机太廉价了偏差大,如果你的实践中一切正常那可以只保留一个。servopulse(0);delay(1000);servopulse(0);delay(1000);for(int i = 0; i < 180; i=i+1){//旋转到需要的角度servopulse(i);//给程序一点时间让舵机转到需要的角度。这个delay和这个for循环最后的那个delay设的小一点其实没关系,但在后续的处理中可能会出问题,下一篇blog可能就会涉及到这个问题。这个值不建议设的很小delay(30); //给Trig发送一个低高低的短时间脉冲,触发测距digitalWrite(Trig, LOW); //给Trig发送一个低电平delayMicroseconds(2);    //等待 2微妙digitalWrite(Trig,HIGH); //给Trig发送一个高电平delayMicroseconds(10);    //等待 10微妙digitalWrite(Trig, LOW); //给Trig发送一个低电平tmp = float(pulseIn(Echo, HIGH)); //存储回波等待时间,//pulseIn函数会等待引脚变为HIGH,开始计算时间,再等待变为LOW并停止计时//返回脉冲的长度//声速是:340m/1s 换算成 34000cm / 1000000μs => 34 / 1000//因为发送到接收,实际是相同距离走了2回,所以要除以2//距离(厘米)  =  (回波时间 * (34 / 1000)) / 2//简化后的计算公式为 (回波时间 * 17)/ 1000//可能存在一定的误差,所以引入修正量deltadist = (tmp * 17 )/1000 + delta; //把回波时间换算成cm//打印结果Serial.print(dist);//串口输出距离换算成cm的结果Serial.print(",");Serial.println(i);//测距时间间隔,毫秒为单位delay(delay_time);  }
}

  1. HC-SR04超声波模块 ↩︎

简易超声波雷达的arduino实现相关推荐

  1. Python与Arduino绘制超声波雷达扫描

    视频连接:https://m.bilibili.com/video/BV1xf4y1X79p 前段时间看到一位发烧友制作的超声波雷达扫描神器,用到了Arduino和Processing,可惜啊,我不会 ...

  2. 【 RCWL 0516 微波雷达传感器 Arduino使用教程 】

    RCWL 0516 微波雷达传感器 Arduino使用教程 前言 RCWL 0516 模块 RCWL 0516 模块组成 RCWL 0516模块电路图 常见问题 Arduino RCWL 0516雷达 ...

  3. 汽车电子传感器科普:激光雷达 毫米波雷达 超声波雷达

    参考: 1. 一文读懂毫米波/激光/超声波雷达的区别 | 搜狐科技 2. 毫米波雷达为何还未被激光雷达取代? | OFweek激光网 各种汽车测距传感器比较 传感器 频段 带宽 工作原理 特点 缺点 ...

  4. stm32超声波测距代码_干货!特斯拉Autopilot核心传感器解读超声波雷达篇

    加入高工智能汽车行业群(自动驾驶行业4群,车联网智能座舱3群,智能商用车行业群),加微信:15818636852,并出示名片,仅限智能网联汽车零部件及OEM厂商. 目前为止,特斯拉的Autopilot ...

  5. 2.1.4 超声波雷达

    更多内容,请关注: github:Autopilot-Updating-Notes gitee: Autopilot-Updating-Notes 超声波雷达,是一种利用超声波测算距离的雷达传感器装置 ...

  6. 自动驾驶专题介绍 ———— 超声波雷达

    文章目录 介绍 工作原理 特点 常见参数 探测时序 介绍  在汽车碰撞事故中,有大约15%的事故是因为倒车时汽车的后视能力不足引起的,因为增加汽车的后视能力的超声波雷达的研究成为了当下的热点之一.安全 ...

  7. 预告:年度乘用车前装超声波雷达市场,哪些供应商表现抢眼

    随着从APA到AVP的升级,技术方案也逐步从基于纯超声波到视觉融合泊车.行泊域控一体化方案的演进,功能将从半自动到自动,再到RPA.HPA以及AVP终局功能的落地. 但作为其中传感器组件之一的超声波传 ...

  8. 自动驾驶(四十七)---------超声波雷达简介

    超声波雷达听着很陌生,但其实一直被广泛使用在倒车上,与毫米波雷达不同的是:超声波能被任何材质的障碍物反射,毫米波只能被金属物体反射,超声波雷达的探测距离又很近,到底工作原理是什么,下面我带大家一起来来 ...

  9. 【自动驾驶】超声波雷达障碍物检测

    超声波(Ultrasound,又称超声波雷达)定位,即使用发射探头发出频率大于20KHz的声波和计算飞行时间来探测距离.常用的超声波频率有40KHz.48KHz和58KHz,其中最常用的频率是40KH ...

最新文章

  1. NYOJ 366 D的小L
  2. Java 20年:JVM虚拟化技术的发展
  3. [HEOI2014]平衡(整数划分数)
  4. Google Maps API v2 android版本开发 国内手机不支持google play Service相关问题解决--图文教程
  5. React-native 环境配置过程与搭建项目问题汇总
  6. 计算机视觉与深度学习 | SLAM之傻瓜书《 SLAM for Dummies》
  7. OD逆向调试程序的笔记
  8. D - Counting Stars HDU - 7059
  9. 2020蓝桥杯省赛---java---B---8(数字三角形)
  10. 分数DRL:在OptaPlanner中更快,更轻松
  11. python案例数据集_Python数据集切分实例
  12. 坯子库无法一键安装插件没用_坯子插件库的下载地址、安装以及运用办法
  13. 北京交通大学计算机学院复试名单2021,北京交通大学2021年硕士研究生复试公告...
  14. SVG_16_defs标签_use标签_style标签_红绿灯效果
  15. 基于Open vSwitch搭建虚拟路由器
  16. 2017 ACM - ICPC Asia Ho Chi Minh City Regional Contest
  17. 3D打印肝模型抢救生命
  18. 关于联想笔记本无线网老是掉线的解决方法
  19. Java学生成绩处理
  20. 消除Word文档被加密、限制编辑的解决方法

热门文章

  1. bootloader的两种启动模式
  2. python 矩阵转置
  3. GAN相关模型和论文
  4. 高数-(01)函数与极限
  5. RK3588(自带NPU)的环境搭建和体验(一)
  6. 微软 AutoML 框架之 FLAML | 环境配置、安装、分类/回归测试
  7. IOS开发—— 获取AppDelegate的属性或字段
  8. JVM内存模型JVM内存模型
  9. VS2013写的程序在Win XP下运行的完美解决方案(百分百成功)
  10. svg+js鼠标悬停卡片充满动画js特效