资讯详情

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

通过最后一篇文章,你应该已经理解了基于ESP32与phyphox的DIS实验大概是什么样子的,只是上一篇文章只用了。ESP32自带模数转换(即电压传感器),程序也使用自带示例,感觉有缺点。所以这篇文章,我们会让,ESP32连接外部传感器,通过编写程序驱动传感器测量数据并发送到手机上phyphox。 好了,就像以前一样,先来看视频: (观看视频请关注微信微信官方账号:宁中物理创新实验室) 你想在视频中找到位移传感器吗?跟随下面的教程,一起制作!

1.超声波测距模块

(下图来自某宝截图) 在这里插入图片描述 需要注意的是,购买时必须购买标有宽电压的模块,因为常见模块为5V但是ESP32上,332是一份工作.3V不要认为我们使用电压下的单片机USB供电时使用5V,那是因为里面有一个降压模块,将是5V降低到了3.3V。所以记住,一定要买能支持3的.3V超声测距模块(其实好像比较便宜,我买的才2.7元一个,我搜了一个宝藏,以免我给别人做广告。 首先,让我们学习这个超声波测距模块的原理。 超声波:人耳能听到的声波频率为280HZ~20KHz。当声波的振动频率大于20时KHz或小于20Hz时,我们便听不见了。因此,我们把频率高于20000赫兹的声波称为“超声波”。因其方向性好,穿透能力强,易于获得较集中的声能,在水中传播距离远,可用于测距、测速、清洗、焊接、碎石、杀菌消毒等。 最常用的超声测距方法是回声探测方法,如下图所示,超声发射器向某个方向发射超声波,计数器开始计时,超声波在空气中传播,遇到障碍物立即反射,超声接收器立即停止计时。空气中超声波的传播速度为340m/s,根据计时器记录的时间t,发射点与障碍物表面的距离可以计算s,即:s=340t/2。* 超声传感器HC-SR04上有四个针脚,分别是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);//等微秒   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;//开启一个实验,取名为Voltmeter
  Voltmeter.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通过蓝牙发送到手机端的phyphox
  delay(18);//暂停18毫秒,这里经测试最小可以填4,再小esp32就会卡死,也就是差不多50Hz
}//主程序结束

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

标签: 常用高精度位移传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台