便携式测距仪
组件和用品
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 4 | |||
![]() |
| × | 2 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要的工具和机器
![]() |
| |||
![]() |
| |||
![]() |
| |||
|
应用和在线服务
![]() |
| |||
|
关于这个项目
简介
雷曼学院运动科学系正在进行有关重量训练的研究。重复的运动范围不一致,这可能会显着影响数据。我被要求创建一种设备,该设备可以识别使用机器或更大重量的锻炼的全方位运动。
设备需要满足以下条件 :
- 可调距离
- 不是永久固定在机器上。
- 兼容三脚架
- 没有电线
视频
零件
大多数零件如下所示,但有关完整列表,请参阅上面的物料清单。选择使用的零件不是因为它们是最佳的;这就是我必须使用的。使用定制 PCB、SMT 组件或 LiPo 电池可以大大减少占地面积。


代码
代码(在底部提供)编译需要NewPing库。
蜂鸣器频率和上限/下限是可以更改的全局变量。上限/下限是指传感器读取的最小和最大距离,映射到电位计的模拟值 [0,5]V。
int 频率 =700; //以Hz为单位的频率
int lower_bound =60; //以毫米为单位的距离
int upper_bound =200; //以毫米为单位的距离
开机时发出 3 声蜂鸣声表示启动成功(请参阅 setup()
环形)。接下来,loop()
不断向超声波传感器请求数据,并与电位器设置的阈值进行比较。
3D打印
所有文件都已上传到thingiverse,或者可以在页面底部找到一个压缩文件。 CAD的使用方法这里不做介绍。该模型的制作考虑了 3D 打印的局限性。通过使用 45 度倒角最大限度地减少了悬垂,从而减少了支撑材料。间隙很大,因此尽管零件是在不同校准的打印机上打印的,但仍应适合。


打印时间会有所不同,但我的打印时间 如下:
- 最佳影片:2 小时 40 分钟
- 最后部分:2 小时 20 分钟
- 旋钮:20 分钟
组装
底部提供了电路原理图 的页面。无需接线即可插入零件以确认配合。


打捞的 IDE 电缆提供了所有电线。电线组可以在保持相互连接的同时剥离,这提供了一些顺序。


大多数电子设备都安装在其中一个印刷部件上,因此必须考虑布线和管理。
TP4056 板上的 SMD 指示灯 LED 被拆焊。延长线和 3 毫米 THT LED 焊接到位。限流电阻仍与板集成。有一段视频显示有人执行此次搬迁。

arduino nano 只有 2 个可访问的接地垫,因此使用条板来扩大接地垫的数量。 5V 线也是如此,如下图所示。


断开带上的连接是必要的,这样 5V 就不会对地短路。红色的“X”表示断裂的位置。只需要破坏顶部的铜,而不是整个玻璃纤维板。
组件在外壳外接线。它们偶尔安装在外壳中以测量电线长度并检查电线干扰。

电位器被修剪了 6 毫米,这样它就不会突出那么多。

与 18650 的连接是直接焊接的,这是不好的做法。电池过热会损坏它并且随着时间的推移可能会失效。点焊铝条是18650s的正确连接方式。
热胶被可耻地用于固定电子设备。尽可能避免使用热胶。正确的机械设计和紧固件将比热胶更耐用。随着时间的推移,它必然会失败。原型是可以理解的,但生产零件永远不会使用热胶。

总结
回想起来,我更喜欢使用 IR 传感器而不是超声波,但在我开始试验超声波传感器之前,我不可能知道这一点。 IR 传感器的 FOV 更窄,但最大距离要小得多(~3 英尺)。
如果有第二个版本,LiPo 将取代 18650。大滚花适配器螺母很重,占用空间。三脚架安装的标准螺纹是 1/4",所以从五金店买一个简单的 1/4" 螺母就足够了。定制 PCB 将使体积减少一半。
对于一个从概念构思到两周内交付的原型,我很满意。
项目的未来
当我试验超声波传感器时,我对它的局限性有了更多的了解。首先是其 FOV 的角度为 ~±15°(总共 30°)。这意味着物体可以在传感器正上方之前触发蜂鸣器。这会产生不准确和不良读数。此外,如果物体的平面与传输的声波不垂直(或在容差角度内),传感器将不会接收到反射波,也无法处理距离值。
我最初的计划是将设备放在地面上,并让重量训练杆上的盘子在低于阈值时触发蜂鸣器。该系统由一个固定传感器和一个移动触发器组成。我的工程伙伴提出了一个替代解决方案,其中包括反转系统。他建议将传感器安装到移动杆上,同时将其指向地面。这样,地面就成了触发器。它还消除了由于前面提到的宽 FOV 导致的不准确。
该提案不仅是对给定问题的一个很好的解决方案,而且也很容易实施。 1/4" 三脚架螺母适配器的订单随附一个 1/4" -> 3/8" 适配器和一个 3/8" -> 1/4" 适配器。第二个将实际投入使用!>
由于我第一次开始制作 3D 模型时无法使用我的 Dremel,这迫使我考虑整个三脚架适配器。这与 18650 电池相结合,显着增加了重量。我不想增加超过我需要的重量,因此我将在为安装座建模之前减少第二个三脚架适配器。我将在一周内返回该项目以完成此替代安装解决方案。在那之前,它仍然有效!
代码
- RangeDetectionDevice.ino
RangeDetectionDevice.inoArduino
/** Viktor Silivanov 3/22/2018 使用 HC-SR04 超声波传感器的便携式距离检测设备,可调节距离以触发蜂鸣器。**///************* ******* 图书馆 ******************************************** ****************************************************** ****************************************************** ****************************************************** ****************#include//******************** 引脚 **** ****************************************************** ****************************************************** ****************************************************** ****************************************************** ********//模拟引脚#definewiper A5//数字引脚#define echo 2#define trig 3#define ON_LED 7#define buzzer 8#define buzzer_LED 9//******** ************ 全局变量 ************************************ ****************************************************** ****************************************************** ******************************************** **************************//用户修改允许int频率=700; //频率在Hzint lower_bound =60; //以mmint为单位的距离upper_bound =200; //以毫米为单位的距离//不要修改int buzz_time =250; //启动时蜂鸣器的时间(以毫秒为单位)int buzz_delay =280; //启动时蜂鸣器延迟的时间(以毫秒为单位)int max_distance =400; //NewPing库中对象的参数int i =0;int distance;int threshold; NewPing声纳(触发,回声,max_distance); //对象“声纳”的实例化//******************** 设置 ******************* ****************************************************** ****************************************************** ****************************************************** ********************************************//该函数只运行一次void设置(){ Serial.begin(9600); //允许使用波特率为 9600 的串行监视器 //引脚 I/O 类型声明 pinMode(trig, OUTPUT); pinMode(回声,输入); pinMode(蜂鸣器,输出); pinMode(蜂鸣器_LED,输出); pinMode(ON_LED,输出);数字写入(ON_LED,高); //打开绿色LED;设备开启时保持开启 //打开设备时蜂鸣器发出 3 次哔声 while(i <3){ digitalWrite(buzzer_LED, HIGH);音调(蜂鸣器,频率,buzz_time);延迟(嗡嗡声延迟);我++; } digitalWrite(buzzer_LED, LOW);}//******************** 无休止地运行******************** ****************************************************** ****************************************************** ****************************************************** ****************************************void loop() { distance =sonar.ping_cm(); //对象“声纳”利用库中的 ping_cm() 函数,它返回一个以厘米为单位的值。距离然后取那个值阈值 =模拟读取(雨刷); //从电位器的游标中获取模拟值 threshold =map(threshold, 0, 1023, lower_bound, upper_bound); //将模拟读数转换为触发范围。更新阈值 if(distance !=0 &&distance
定制零件和外壳
所有 3 个部分都保存到一个文件中示意图

制造工艺