通过上一篇你应该已经了解了基于ESP32与phyphox的DIS实验大概是个什么模样了,只是上一篇里仅仅使用了ESP32自带的模数转换(也就是电压传感器),程序也是用了它自带的示例,感觉还缺点意思。那么这一篇,我们将会让ESP32连接外接的传感器,通过编写程序驱动传感器测量数据并发送到手机上的phyphox。
好了,还是和之前一样,先来段视频:
(观看视频请关注微信公众号:宁中物理创新实验室)
想不想也来一个视频中的位移传感器呢,跟着下面的教程,一起动手来制作吧!

1、超声波测距模块

(下图来自某宝截屏)

要注意一点,大家购买的时候一定要买标注了宽电压的,因为常见的模块都是5V电压的,但是ESP32其实是一个工作在3.3V电压下的单片机,不要觉得我们用USB给它供电的时候用的是5V,那是因为里面有个降压模块将5V降低到了3.3V。所以切记,一定要买能支持3.3V的超声波测距模块(其实貌似更便宜,我买的才2.7元一个,自己某宝去搜了,免得我给别人打广告)
首先呢,我们来学习一下这个超声波测距模块的原理。
“超声波:人类耳朵能听到的声波频率为280HZ~20KHz。当声波的振动频率大于20KHz或小于20Hz时,我们便听不见了。因此,我们把频率高于20000赫兹的声波称为“超声波”。因其方向性好,穿透能力强,易于获得较集中的声能,在水中传播距离远,可用于测距、测速、清洗、焊接、碎石、杀菌消毒等。
最常用的超声测距的方法是回声探测法,如下图,超声波发射器向某一方向发射超声波,在发射的同时计数器开始计时,超声波在空气中传播,途中碰到障碍物阻挡就立即反射回来,超声波接收器收到反射回的超声波就立即停止计时。超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物面的距离s,即:s=340
t/2。*

超声波传感器HC-SR04上有4个针脚,分别是“VCC”、“Trig”、“Echo”和“GND”,“VCC”和“GND”不再解释,在“Trig”端施加一个10微秒高电压信号会触发超声波发射口发射8个超声波脉冲,当超声波接受口接收到超声波时“Echo”端会输出一段高电压,高电压持续的时间就是超声波从发射到接收的时间。”
以上内容来自我自己曾经写过的一本书(顺便做做书的广告了,有想买的同学自己去某宝或者某当,我手里的也是自己买来的,不过里面用的是Arduino,程序也是用图形化的,适合小学生或者刚入门者):

大概了解了这个模块的原理后,就可以想办法让ESP32来驱动它了,其实也很简单,就是让ESP32给模块的“Trig”端加一个10微秒的高电压信号,然后再读取一下模块"Echo”端口上高电压持续的时间就可以了。

2、ESP32驱动超声波测距模块

在做正式版之前我们先编一个小程序玩玩,让ESP32驱动超声波测距模块,然后将测得的时间转换成距离发送给电脑,最后在电脑上来显示这个距离值。下面便是程序:


int trig_pin=12,echo_pin=13;//将超声波模块的trig接P12端口,echo接P13
float dis;//定义一个用来记录距离的变量
float checkdistance() { //这里为带有返回值的自定义函数,用来完成超声波模块的测量digitalWrite(trig_pin, LOW);//将trig端拉低delayMicroseconds(2);//等待2微秒digitalWrite(trig_pin, HIGH);//将trig端拉高delayMicroseconds(10);//等待10微秒digitalWrite(trig_pin, LOW);//将trig端拉低float distance = pulseIn(echo_pin, HIGH) / 58.00;//测量echo高电平持续时间,并将它转化为距离值,单位厘米return distance;//返回距离值
}//自定义函数结束void setup() {//初始化函数pinMode(trig_pin,OUTPUT);//将trig端定义为输出端pinMode(echo_pin,INPUT);//将echo端定义为输入端Serial.begin(115200);//开启串口
}void loop() {//主函数dis=checkdistance();//调用自定义函数测距,并将距离值赋值给dis变量Serial.println(dis);//通过串口输出dis变量值delay(100);//等待100毫秒
}

具体的接线为:

超声波模块 ESP32
Vcc -------- 3V3
Gnd -------- GND
Trig -------- P12
Echo -------- P13
下图是我用一个面包板来帮助接线(不知道面包板是什么,请自行百度,或者买我的书来看),由于这块ESP32端口号都印在了背面,插到面包板后就看不到了,所以请先拍照保存,接线时请断开电源并仔细认真,不要接错了以免烧板!

接好线烧完程序后,点击Arduino IDE右上角的串口监视器,就像放大镜的那个图标。

点击后就可以打开串口监视器,注意将右下角的波特率设置为115200,之后就可以看到从ESP32发过来的距离数据了。

3、基于ESP32和phyphox的位移传感器

接下去进入今天的最后一段,开始来完成视频中的位移传感器制作。
其实接线已经不需要改变了,只要改一下程序就可以了,以下是程序,注意阅读程序里的注释部分来理解程序,开始学的时候可以抄别人的程序,读懂程序,并尝试做一些小的修改,例如改一下采样频率,在phyphox上显示的文字啦之类的。


//本程序由宁中物理创新实验室所有,如需使用请注明出自宁中物理创新实验室!
#include <phyphoxBle.h>     //加载phyphoxBle库函数
int trig_pin=12,echo_pin=13;//将超声波模块的trig接P12端口,echo接P13
float dis;//定义一个用来记录距离的变量
float checkdistance() { //这里为带有返回值的自定义函数,用来完成超声波模块的测量digitalWrite(trig_pin, LOW);//将trig端拉低delayMicroseconds(2);//等待2微秒digitalWrite(trig_pin, HIGH);//将trig端拉高delayMicroseconds(10);//等待10微秒digitalWrite(trig_pin, LOW);//将trig端拉低float distance = pulseIn(echo_pin, HIGH) / 58.00;//测量echo高电平持续时间,并将它转化为距离值,单位厘米return distance;//返回距离值
}//自定义函数结束void setup() {  //初始化函数从“{”开始到“}”结束// setup是初始化函数,也就是esp32刚通电时会运行一遍pinMode(trig_pin,OUTPUT);//将trig端定义为输出端pinMode(echo_pin,INPUT);//将echo端定义为输入端Serial.begin(115200);  //开启esp32的串口,用来发数据给电脑,这里可以不用PhyphoxBLE::start("位移传感器");//开启蓝牙,引号内的文字会出现在phyphox搜索蓝牙设备时PhyphoxBleExperiment Voltmeter;//开启一个实验,取名为VoltmeterVoltmeter.setTitle("超声波位移传感器实验");//会显示在phyphox主页面上的实验名称Voltmeter.setCategory("宁中物理创新实验室");//会显示在phyphox的实验类别Voltmeter.setDescription("用来测位移的!");//会显示在phyphox的实验介绍里PhyphoxBleExperiment::View firstView;//在实验界面里添加一个显示界面firstView.setLabel("位移"); //界面上显示的标签PhyphoxBleExperiment::Graph firstGraph; //在phyphox里添加一个图像firstGraph.setLabel("位移-时间图像");//图像的名称firstGraph.setUnitX("s");//x轴坐标单位firstGraph.setUnitY("cm");//y轴坐标单位firstGraph.setLabelX("时间");//x轴物理量名称firstGraph.setLabelY("位移");//y轴物理量名称firstGraph.setChannel(0, 1);//开启一个蓝牙数据通道firstView.addElement(firstGraph);            //将图像添加到显示界面上Voltmeter.addView(firstView);                //将显示界面添加到实验PhyphoxBLE::addExperiment(Voltmeter);        //将实验设置通过蓝牙发送到phyphox
}//初始化函数结束,在初始化函数里其实设置了一些phyphox中要显示的元素
//以下为主程序,esp32在运行时主程序内的程序是循环运行的
//也就是第一遍结束第二遍又开始,周而复始,直到断电void loop() {//主程序开始dis=checkdistance();//调用自定义函数测距,并将距离值赋值给dis变量delay(1);  //运行暂停1毫秒,让蓝牙模块准备好PhyphoxBLE::write(dis);//将voltage通过蓝牙发送到手机端的phyphoxdelay(18);//暂停18毫秒,这里经测试最小可以填4,再小esp32就会卡死,也就是差不多50Hz
}//主程序结束

将程序上传到ESP32后,打开手机上的phyphox,用上一篇中的方法添加实验:

然后打开超声波位移传感器实验,连接名为“位移传感器”的蓝牙设备,测试一下吧:

如果你想用它来研究弹簧振子的运动,请参照第二篇中的内容,将数据共享到电脑端,然后用excel进行数据拟合处理。
由于超声波测距仪的原理所致,因为声速会受到温度、风速、湿度、气压等等各种因素的影响,所以为了更精确的测量距离还需要测量这些值,并都声速进行修正,当然除了这些因素外,ESP32本身的计时精度也会影响距离的测量,所以超声波测距模块其实精度并不高,一般情况下只能精确到1cm左右,所以用它来做物理的位移传感器其实并不是很好,当然也有贵点的超声波测距模块可以选用,可以适当的增加精度。在之后的篇章中,我会为大家带来更精确的位移测量模块,敬请期待吧!
这篇到这里就结束了,回顾一下这篇的内容:
(1)认识了超声波测距模块。
(2)使用ESP32读取超声波测距模块的小实验。
(3)基于ESP32和phyphox的超声波位移传感器制作。

基于ESP32与phyphox的DIS实验制作(4)-使用超声波位移传感器研究弹簧振子的运动相关推荐

  1. 基于ESP32与phyphox的DIS实验制作(5)-基于无线光电门的速度传感器制作

    上两篇我们讲到了基于ESP32自带的电压传感器,以及外接创客常用的超声波测距模块.实验本身没有什么创意,仅仅是用自制的传感器来实现普通的DIS设备都能实现的功能.但是在这一篇,我们将会在自制DIS实验 ...

  2. 基于ESP32的蓝牙刷屏器自动点击器的制作

    ESP32模块的选型: 这里是利用蓝牙连接手机来做点击器或刷屏器,ESP8266只有WIFI而ESP32有WIFI和蓝牙,所以选择ESP32模块. ESP32模块可以选择ESP32-NodeMCU: ...

  3. AI视觉组基于ESP32的裁判系统第一版本设计要求

    简 介: 面对第十六届全国大学生智能车竞赛中新增加的一些组别的要求,比如室内AI组,对于车模任务增加的检测任务,设计了基于ESP32为核心的比赛系统.本文给出了对于比赛系统功能的要求. 关键词: 比赛 ...

  4. 基于ESP32做低功耗墨水屏时钟

    基于ESP32做低功耗墨水屏时钟 电子墨水屏 概述 ESP32 实验 低功耗电子时钟功能描述 接线 开发 实验结果 电子墨水屏 概述 电子墨水是一种革新信息显示的新方法和技术.和传统纸差异是电子墨水在 ...

  5. ESP32,ESP8266之间WiFi互联实验

    ▌ESP32,ESP8266模块互联 ESP32,ESP8266 模块具有很丰富的功能,便于设计一些现场需要联网的场合.基于此在AI视觉组基于ESP32的裁判系统第一版本设计要求 就使用了ESP32进 ...

  6. 基于ESP32智能车竞赛裁判系统第二版硬件调试-6-26

    简 介: 对于新版的比赛裁判系统进行硬件测试,验证了新版的硬件满足比赛的要求.对于感光板的不同区域灵敏度不同的问题,最后验证是由于LED的分布电容所引起的时间常数不同造成了.对于单条串联的LED修改成 ...

  7. 基于ESP32的竞赛裁判系统功能调试-激光信号调试

    简 介: 通过揣进测试了新版的基于ESP32的裁判系统对于激光信号的检测能力. 关键词: 智能车竞赛,125Hz,激光信号 §01 智能车竞赛裁判系统   对于 基于ESP32的智能车竞赛裁判系统 中 ...

  8. 基于ESP32的竞赛裁判系统功能调试-光电条检测板

    简 介: 通过实验验证量光电检测板在比赛系统中用于检测车模通过是的功能.前面给出了对于主控板以及光电板上的参数修改内容. 关键词: 比赛系统,智能车竞赛,光电检测板 §01 竞赛裁判系统   在刚刚调 ...

  9. 基于ESP32的竞赛裁判系统功能调试-计时线圈功能

    简 介: 对于智能车竞赛比赛系统中的电磁检测功能进行了调试,设置了程序运行的主要框架. 关键词: 智能车竞赛,比赛系统,计时系统,ESP32,电磁检测 §01 智能车竞赛裁判系统   中间间隔了一段时 ...

  10. 基于ESP32智能车竞赛比赛系统硬件初步调试-5-6

    简 介: 给出了对于基于ESP32设计的智能车竞赛的の比赛系统的硬件调试过程.基本上验证了硬件设计的合理与正确性.在第一部分的"修改建议"中也给出了硬件电路的修改意见. 关键词: ...

最新文章

  1. AWS — 重塑混合云
  2. android 日期相减得天数_Excel日期计算方法大全
  3. JAVA程序员面试题集合
  4. java servlet+oracle 新手可看
  5. redmi airdots左右耳不串联怎么办_小米AirDots二代4小时售罄,告诉你戴狂卖3500万的耳机是什么感受...
  6. python查找一段字符串中是否包含指定字符串
  7. [转]Linux下用gcc/g++生成静态库和动态库(Z)
  8. cxgrid 行合并单元格_Excel合并单元格无法筛选和排序,你必须掌握这3个小技巧...
  9. 在小米R1D 中,为 Advanced Tomato 添加菜单
  10. 什么是短连接,如何用 Python 生成短连接?
  11. 计算机系统系统时间不准,windows7系统时间不对怎么办_windows7系统时间不准如何恢复-win7之家...
  12. 如何在Google表格中直接使用Google翻译
  13. declare 简单用法
  14. Android 画中画(图片)
  15. 挑战用五行代码轻松集成登录系统,实现单点登录
  16. 如何下载安装ubuntu系统
  17. 第四十二次总结:json模块与pickle模块
  18. 货币竞争,不是货币战争
  19. 火狐浏览器如何设置默认打开网页
  20. 成都七中高考成绩2021年查询,2021年成都高考各高中成绩及本科升学率数据排名及分析...

热门文章

  1. 计算机启动黑屏时间很长,win10开机后黑屏时间很长且进不了安全模式怎么解决?...
  2. Vscode 配置默认浏览器打开
  3. 低代码技巧:甘特图制作步骤
  4. NH2-UiO-66,CAS:1260119-00-3
  5. nginx企业级优化
  6. c /c++语法之extern关键字
  7. ASP.NET DATETIME
  8. 金彩教育:如何提升自然流量
  9. 关于博文的禁止评论和允许评论
  10. 【基于IPD的产品开发体系】推行实践