通过上一篇你应该已经了解了基于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. io python 读取pdf_实用又好用,6 款 Python 特殊文本格式处理库推荐
  2. ClearCanvas DICOM 开发系列 一
  3. navicat远程连接mysql10060
  4. Dojo query 库
  5. 保25ms争10ms——Zenlayer如何保持出海业务的超低延时
  6. PHP中,json汉字编码
  7. 关于datagrid
  8. 好程序员前端分享使用JS开发简单的音乐播放器
  9. layui弹出框php,layui中使用的一些弹出框
  10. 第三次作业_201731062533
  11. 基于STC89C52的测速和超速报警系统设计
  12. qqxml代码天气预报qqxml代码跟url跳转的关系
  13. matlab傅里叶反变换举例,matlab傅里叶正逆变换详细说明+图例
  14. java幸运抽奖项目
  15. Python——集合运算
  16. mysql 求季度产量平均值
  17. 极进网络(Extreme Networks )Extreme VDX 6940 交换机光模块配置方案
  18. shiro学习一 (开涛的跟我学系列 ) 身份验证
  19. 伦敦国王学院计算机申请要求,伦敦大学国王学院高级计算机管理理学硕士研究生申请要求及申请材料要求清单...
  20. 微信小程序毕业设计——社区老人互助管理平台

热门文章

  1. 爱上文案——如何写出有销售力的广告文案
  2. 【破解手记】普利尼,破解手记[1]
  3. 阿诺医药C轮融资近1亿美元,快速推进肿瘤免疫创新药全球研发
  4. java 制作甘特图,看我如何用简单的步骤打造出复杂的web甘特图
  5. xml布局中实现文字下划线的效果
  6. 线性规划(LP)问题的Matlab求解
  7. WPF基础篇 作者:IT168 静水流深 2008-01-02
  8. blog放在 http://cunsh.ycool.com/
  9. 尚学堂1811期python视频_尚学堂1811期人工智能全套视频教程震撼发布,转型百万年薪工程师!...
  10. 希腊字母表(直接输入希腊字母的方法)