项目来源:Arduino ESP8266 电磁炮测速仪&OLED显示器
文章图片
本项目有几个问题不懂。
【开源小项目学习合集|【小型物体测速仪】只有原理,无代码】不知道作者为何引用 Adafruit_ssd1306syp 这个库。
- 没有在 Arduino 管理库中找到此库。
- 在 GitHub 上貌似是找到此库,但是没有说明:ssd1306syp
- 在本地引入此库后导致出现了 byte is ambiguous 错误
- 将 Adafruit_ssd1306syp 库更改为 Adafruit_ssd1306 库后错误没有了。
原理
文章图片
智能小车玩过没有?有个测速模块!就是那个东西。找了一个测速模块的图片(如下图)
文章图片
槽中无物体档光时,接收管导通,G14\G13 检测为低电平。而有物体遮挡光时,接收管不导通。此时,最希望单片机能够读到高电平。故 G14\G13 应该设置为上拉输入。在此逻辑下,才有无挡光物体检测为低电平,有挡光物体时检测为高电平。那这样,透明物体就不好检测了。
怎么判断速度呢? 由于物体要依次通过两个光电开关,那么就会有时间延时。通过两光电开关之间的距离即可求得速度。
设两光电开关距离(中心到中心的距离)为 L ,延时时间为 T ,那么速度 V = L÷T 。
由于 ESP32 for Arduino 有一个能读微妙单位时间的函数:micros() 。可记录下通过两光电开关的相对时间进行求速度。
要比较准确的计算,最好是用到中断函数,并且应该设置为上升沿触发!
因为有物体遮挡时 G14/G13 端口会检测到高电平,由低电平到高电平的瞬间记录比较准确。
算物体的动能也很简单,只要输入物体的质量就可以了。反正用的 ESP8266 ,直接网页输入。
动能: E = m×V×V×0.5
然后就是规定的比动能 1.8 焦耳每平方厘米!这就除面积就好了啊 ~
代码 下面写一个伪代码进行操作,仅仅写出计算时间、速度的部分
ICACHE_RAM_ATTR void G13_InterFunction()//中断函数
{
G13time = micros();
G13flag = 1;
}ICACHE_RAM_ATTR void G14_InterFunction()
{
G14time = micros();
G14flag = 1;
}void setup()
{
attachInterrupt(G13, G13_InterFunction, RISING);
// 上升沿触发
attachInterrupt(G14, G14_InterFunction, RISING);
// 上升沿触发
}void loop()
{
if(G13flag == 1 && G14flag == 1)
{
if(G13time>G14time)
time = G13time - G14time;
else
time = G14time - G13time;
G13flag = 0;
G14flag = 0;
}
}
总结 根据原作者的 ESP8266 版本的项目代码没复刻出来还是听沮丧的!但是更改代码可以做出来。
暂时还不知道哪里出来问题,后期再看吧!
项目资料
后续再放代码吧,先弄好为啥有问题。啊啊啊啊!遇到挫折好难过!!!
文章图片
推荐阅读
- Arduino|UNO/ESP8266 for TCA9548A模块双通道驱动2块SH1106 1.3“显示
- Arduino|Arduino框架下合宙ESP32C3 +1.8“TFT液晶屏通过TFT_eSPI库驱动显示
- Arduino|合宙ESP32C3基于VSCode PIO Arduino开发框架初探教程
- linux|I.MX6UL核心模块使用连载-USB接口测试 (六)
- 嵌入式周报|《安富莱嵌入式周报》第273期(2022.07.04--2022.07.10)
- H7-TOOL|H7-TOOL发布固件V2.17, 脱机烧录增加泰为,华大和复旦微新系列以及串口和CANFD接口脱机烧录,LUA小程序实现JSCope HSS模式波形
- 嵌入式周报|《安富莱嵌入式周报》第268期(2022.05.30--2022.06.05)
- 嵌入式周报|《安富莱嵌入式周报》第263期(2022.04.25--2022.05.01)
- 嵌入式周报|《安富莱嵌入式周报》第265期(2022.05.09--2022.05.15)