上两篇我们讲到了基于ESP32自带的电压传感器,以及外接创客常用的超声波测距模块。实验本身没有什么创意,仅仅是用自制的传感器来实现普通的DIS设备都能实现的功能。但是在这一篇,我们将会在自制DIS实验中引入创新的点子,所开发的实验也是普通的DIS设备无法完成的. 在使用传感器测量物理量时,位移是比较难测量的一个量,例如上一篇中的超声波测距仪,精度只有厘米级的,虽然改进后能勉强到毫米级,但是还是完全不够的;当然还有例如激光测距模块,虽然精度是提高了(其实还是不够高),但是采样率却很低,例如VL6180等,采样率只能达到10Hz左右,或许有更快更准的位移传感器,但是这价格不是我们普通老师所能承受的了。 既然位移很难测,我们能不能反过来呢?(注意,这就是创意诞生前的一刹那!)单片机测位移很弱,但是测时间却是个高手!那么我们岂不是可以先把位移确定下来,然后测物体经过特定位置时的时间,不是也照样能得到位移-时间图像啊!那如何做呢?答案很简单:用光电门,只是需要把光电门安装在小车上,然后在轨道上装上一列挡光片,所有挡光片的位置事先测量好,然后光电门就可以测出经过每个挡光片时的时间了,当然不是测挡光时间间隔,而是测经过一瞬间的时刻!这样,位移-时间图像是不是自动就出来了!当然今天我们索性就直接绘制速度-时间图像。 怎么样,是不是也挺简单的,但是简单中蕴含着创意啊!这在我最喜欢作品里排到第二,自我感觉还是不错的! 好了,还是和之前一样,先来段视频吧: (视频观看请关注微信公众号:宁中物理创新实验室。) 是不是很迫不及待的想要自己动手做一个了呢!跟着下面的教程,一起来动手吧!
1、自制光电门
本实验首先需要一个光电门,为了写这篇我专门从某宝买了一个回来,其实以前我都是自己做的,但是考虑到大家刚开始学,本想省略自制光电门这一步,直接买一个,没想到…直接看图吧,这货居然要17元一个,我还买了两个,心痛死我了,直接进垃圾桶了。里面居然只有两个5mm的红外二极管,而且通光孔开的贼大,并且最关键是没有电压比较器之类的芯片啊,不到1块钱成本卖我17块!!! 当然你也可以从学校已有的设备中拆几个来玩玩,但是要注意不同DIS实验设备中的光电门都不太一样,例如我校最早的GQY的DIS设备里的,它最简单,可以直接为我们所用,但是后来的朗威的就不能直接用了,当然Pascal的也可以直接用,但是因为这货太贵了,我舍不得拿来玩。 好了,其实自己做一个光电门也非常简单的,就一个红外发光二极管和红外接收二极管加上几个电阻就够了,当然最关键的是要设计一对正对着的小孔,孔径自然是越小越好,但是当孔径过小时,就需要三极管或者电压比较器之类的芯片来帮忙了。这篇就先来个简单的,不加芯片了。我用激光切割的薄木板设计了一个光电门,先测试发现当不挡光时接收管的电阻较小,挡光时电阻变大了很多。所以就可以设计个简单的电路,将这种电阻变化转换成电压的变化,我们设计了不挡光时电压为低,挡光时电压为高,具体电路问物理老师:)。具体制作请看视频: (视频观看请关注微信公众号:宁中物理创新实验室。)
2、ESP32与光电门的连接和对应的程序
连线只有一根,光电门输出端直接接在ESP32上的P14端口。下面是程序,本程序实现了发送速度和时间两个量,注意程序中双蓝牙通道的设置。
#include <phyphoxBle.h>
int IN_PIN = 14;
int i=0;
float tpi,tmb,tm0,tm,v;
void setup() {
Serial.begin(115200);
pinMode(14,INPUT);
PhyphoxBLE::start("速度传感器");
PhyphoxBleExperiment Voltmeter;
Voltmeter.setTitle("速度传感器实验");
Voltmeter.setCategory("宁中物理创新实验室");
Voltmeter.setDescription("这个实验会绘制速度-时间图像.");
PhyphoxBleExperiment::View firstView;
firstView.setLabel("Rawdata");
PhyphoxBleExperiment::Graph firstGraph;
firstGraph.setLabel("速度-时间图像");
firstGraph.setUnitX("s");
firstGraph.setUnitY("m/s");
firstGraph.setLabelX("时间");
firstGraph.setLabelY("速度");
firstGraph.setChannel(1, 2);
firstView.addElement(firstGraph);
Voltmeter.addView(firstView);
PhyphoxBLE::addExperiment(Voltmeter);
}
void loop() {
tpi=pulseIn(IN_PIN, HIGH);
if(tpi>50)
{
if(i==0)
{
v = 5000/tpi;
tmb=(millis()-tpi/2000)/1000;
tm=0;
delay(1);
PhyphoxBLE::write(v,tm);
i=1;
}
else if(i>0&&i<10)
{
v = 5000/tpi;
tm0=(millis()-tpi/2000)/1000;
tm=tm0-tmb;
delay(1);
PhyphoxBLE::write(v,tm);
i++;
}
else
{
delay(1000);
i=0;
}
}
}
3、ESP32的供电
由于整个设备都要安装在小车上,用充电宝供电就太大了,所以我直接使用了3.2V(注意不要买3.7V的普通锂电池哦!!)磷酸铁锂电池对ESP32进行供电,电池的正极接ESP32的3V3端口,负极接ESP32的GND端口即可,这里需要注意的是由于是非标准电压供电,所以此时的ADC(模数转换)误差较大,需要校准后使用,但是对于本篇的光电门计时影响不大。 将所有的设备固定在激光切割的木板上,然后再将设备安装到小车上,在轨道上安装一列5mm的挡光片就可以进行实验了。 速度传感器可以很方便的绘制出速度时间图像,也可以很快得出匀变速直线运动的加速度,在之后牛二定律实验中我们会继续用到。
|