Johnny-Five 声呐测距实战:用 Proximity 控制器驱动 MaxBotix MB1010 超声波传感器

发布时间:2026/9/23 10:15:12
Johnny-Five 声呐测距实战:用 Proximity 控制器驱动 MaxBotix MB1010 超声波传感器 IoT机器人嵌入式【免费下载链接】johnny-fiveJavaScript Robotics and IoT programming framework, developed at Bocoup.项目地址https://gitcode.com/gh_mirrors/jo/johnny-five点击查看免费下载本篇技术指南聚焦于 Johnny-Five 框架中MB1010LV-MaxSonar-EZ1超声波声呐传感器的接入与距离测量方案。文章以官方示例文档 docs/proximity-mb1010.md 为主线结合 lib/proximity.js 的控制器实现与 test/proximity.js 的测试用例从硬件接线、可运行代码到底层换算原理逐层拆解。读完本文你将能够在 Arduino 兼容板上用几行 JavaScript 完成声呐测距、监听距离变化事件并掌握 Johnny-FiveProximity组件的核心工作方式。MB1010 是 MaxBotix 推出的 LV-MaxSonar-EZ1 系列声呐测距传感器通过超声波回波测距输出模拟电压信号可直接接入开发板的模拟输入引脚非常适合机器人避障、距离检测、水位或物位测量等 IoT 场景。上图原文档所配接线图展示了 MaxBotix LV/HRLV 系列声呐传感器接入面包板的模拟接线方式MB1010 与该系列接线方法一致传感器AN模拟输出引脚连接到开发板模拟输入引脚5V 与 GND与开发板共地供电。更精确的 Fritzing 布线工程文件见 docs/breadboard/proximity-mb1003.fzz可导入 Fritzing 查看详细连接。快速运行从命令行启动示例仓库在 eg/proximity-mb1010.js 提供了与本文档配套的完整可运行示例。接线完成后在仓库根目录执行node eg/proximity-mb1010.jsjohnny-five会在启动时自动枚举并连接 Arduino 开发板默认串口也可参考 docs/board-with-port.md 显式指定端口板子就绪后触发ready事件并开始采样。核心示例代码示例的完整代码如下与 docs/proximity-mb1010.md 保持一致可直接复制使用const { Board, Proximity } require(johnny-five); const board new Board(); board.on(ready, () { const proximity new Proximity({ controller: MB1010, pin: A0 }); proximity.on(change, () { const {centimeters, inches} proximity; console.log(Proximity: ); console.log( cm : , centimeters); console.log( in : , inches); console.log(-----------------); }); });配置项说明new Proximity(options)接受一个配置对象本例涉及三个关键字段配置项示例值说明controllerMB1010指定传感器控制器类型本例为 MaxBotix MB1010LV-MaxSonar-EZ1pinA0传感器 AN 输出所连接的模拟输入引脚Arduino 上写作A0freq默认25毫秒采样间隔控制data/change事件的触发频率如不设置则使用源码中的默认值从 lib/proximity.js 可以看到freq未指定时默认为25毫秒内部通过setInterval按该周期读取最新原始值并派发事件。事件与只读属性示例中的proximity实例向外暴露了以下事件与属性实现在 lib/proximity.jscentimeters别名cm只读由原始 ADC 读数换算出的厘米距离。inches别名in只读centimeters * 0.39换算出的英寸距离保留两位小数。data事件每个采样周期触发一次回调携带{ cm, centimeters, in, inches }数据对象。change事件仅当原始采样值与上一次不同时触发适合在距离发生变化时执行逻辑示例即用它驱动控制台打印。源码视角MB1010 控制器在底层如何工作要理解 MB1010 在 Johnny-Five 中的行为需要查看 lib/proximity.js 的控制器注册表。该文件顶部定义了各传感器的初始化逻辑与toCm换算函数其中声呐家族的关键代码如下// LV-MaxSonar-EZ // LV-MaxSonar-EZ0 // LV-MaxSonar-EZ1 MB1000: { initialize: { value: analogHandler }, toCm: { value(value) { // The LV-MaxSonar-EZ detects objects from 0-inches to 254-inches // (6.45-meters) and provides sonar range information from 6-inches // out to 254-inches with 1-inch resolution. // 1inch 2.54cm return toFixed((value / 2) * 2.54, 2); } } },随后在文件末尾的别名注册区MB1010 被直接关联到 MB1000 的实现// Sonar Controllers.MB1010 Controllers.MB1000; Controllers[LV-MaxSonar-EZ] Controllers.MB1000; Controllers[LV-MaxSonar-EZ0] Controllers.MB1000; Controllers[LV-MaxSonar-EZ1] Controllers.MB1010;这揭示了三条重要事实MB1010 与 MB1000 共享同一套实现controller: MB1010、MB1000、LV-MaxSonar-EZ、LV-MaxSonar-EZ0、LV-MaxSonar-EZ1均可等价使用该家族传感器通过模拟量输出AN 引脚工作因此初始化走的是analogHandlerlib/proximity.js先把引脚配置为ANALOG模式再用io.analogRead持续读取 ADC 原始值距离换算公式为centimeters (rawValue / 2) * 2.54含义是ADC 读数先除以 2 得到英寸MaxBotix 模拟输出为每英寸约 2 个 ADC 计数该换算关系见源码中引用的 MaxBotix 应用笔记再乘以2.54转为厘米。从源码注释可知LV-MaxSonar-EZ 系列可探测0254 英寸约 6.45 米范围内的物体并提供6 英寸254 英寸、1 英寸分辨率的有效距离信息。因此 MB1010 属于中等量程声呐适合室内机器人避障等场景。用测试用例验证换算与事件行为仓库 test/proximity.js 中Proximity: MB1010测试组通过 mock 固件验证了上述行为可以直接作为换算结果的参照向analogRead回调注入原始值500时断言centimeters四舍五入为635即(500 / 2) * 2.54 635inches四舍五入为248在freq: 100下推进定时器后data事件应恰好触发一次注入250后监听change断言事件被触发说明 raw 值变化即触发within([0, 120], inches, callback)范围检测用例注入11后断言回调内this.inches为5.45。进阶用 within() 实现距离范围检测除了监听change外Proximity还通过 lib/mixins/withinable.js 提供within(range, unit, callback)方法可以在指定距离区间内触发回调非常适合实现进入警戒区、太近了之类的阈值逻辑board.on(ready, () { const proximity new Proximity({ controller: MB1010, pin: A0 }); // 当距离落在 0120 英寸之间时回调 proximity.within([0, 120], inches, function() { console.log(Object within 120 inches:, this.inches); }); // 也可以只传一个数字等价于 [0, upper] proximity.within(50, cm, function() { console.log(Object within 50 cm!); }); });within的unit参数支持cm、centimeters、in、inches等实例属性名其底层实现是在data事件上注册监听当this[unit]落入[range[0], range[1]]区间时以实例为this调用回调见 lib/mixins/withinable.js。若省略unit默认取值为value。与其他 Proximity 控制器的差异速览Proximity在 lib/proximity.js 中注册了大量控制器从源码结构看大致分三类理解差异有助于选型类型典型控制器接线方式换算特点红外测距GP2Y0A21YK默认、GP2Y0A02YK0F、GP2Y0A710K0F模拟引脚各型号有独立非线性换算公式量程 4cm500cm 不等超声波声呐MB1010/MB1000、MB1003、MB1230、HCSR04模拟引脚MaxBotix或数字脉冲HC-SR04线性换算量程与分辨率因型号而异I2C 接口SRF10、LIDARLITE、HCSR04I2CBACKPACKI2C 总线走i2cReadOnce读取寄存器需配置address同家族的对比可参考 docs/proximity-mb1000.md、docs/proximity-mb1003.md 与 docs/proximity-mb1230.mdMB1003HRLV-MaxSonar-EZ0具有 1mm 分辨率、MB1230XL-MaxSonar-EZ3可直接把 ADC 读数当作厘米。MB1010 作为 1 英寸分辨率的 LV 系列量程与精度介于两者之间是成本与性能均衡的入门选择。小结本文以 docs/proximity-mb1010.md 为基础完整覆盖了 MB1010 声呐传感器的硬件接线、命令行运行、示例代码与配置参数并通过 lib/proximity.js 源码厘清了MB1010等价于MB1000的实现细节、(raw / 2) * 2.54的厘米换算关系以及data/change事件模型最后以 test/proximity.js 的断言数据印证了换算与事件行为。你可以在 eg/proximity-mb1010.js 基础上继续扩展结合within()做避障阈值、把距离数据转发到Led或Servo实现联动或参考 docs/proximity.md 了解红外版本的使用方式。赞分享IoT机器人嵌入式【免费下载链接】johnny-fiveJavaScript Robotics and IoT programming framework, developed at Bocoup.项目地址https://gitcode.com/gh_mirrors/jo/johnny-five点击查看免费下载相关推荐Johnny-Five 实战用 EVShield 驱动 LEGO EV3 超声波测距传感器Proximity EVS_EV3_USJohnny Five 实战用 EVShield 驱动 LEGO EV3 超声波测距传感器Proximity EVS_EV3_US 本文是一份面向 JohIoT机器人嵌入式Johnny-Five 超声波声纳接近传感器实战用 Proximity 模块驱动 SRF10Johnny Five 超声波声纳接近传感器实战用 Proximity 模块驱动 SRF10 本文以 Johnny Five 官方示例文档 docs/proxIoT机器人嵌入式Johnny-Five 声纳测距实战使用 Proximity 驱动 MB1230XL-MaxSonar-EZ3传感器Johnny Five 声纳测距实战使用 Proximity 驱动 MB1230XL MaxSonar EZ3传感器 MB1230XL MaxSonarIoT机器人嵌入式上一篇superpowers Visual Companion 最终安全加固修复设计根路由文件收容、回退令牌隔离与进程所有权证明下一篇用 OpenCore Legacy Patcher 给老 Mac 装新系统2013 MacBook 升级 macOS Sequoia 完整教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考