【小型物体测速仪】只有原理,无代码
时间:2022-11-04 14:30:00
项目来源: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 项目代码的版本没有复制或听沮丧!但是可以更改代码。
暂时不知道问题出在哪里,以后再看!
项目资料
后续放代码,先搞清楚为什么有问题。
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊