IoT机器人嵌入式【免费下载链接】johnny-fiveJavaScript Robotics and IoT programming framework, developed at Bocoup.项目地址https://gitcode.com/gh_mirrors/jo/johnny-five点击查看免费下载导读本文基于 Johnny-Five 官方示例 docs/proximity-EVS_EV3_IR-alert.md讲解如何在 johnny-five 项目中通过 EVShield 扩展板接入 LEGO EV3 红外传感器控制器标识EVS_EV3_IR实现近距离触发红灯 / 远距离恢复绿灯的距离报警器。读完本文你将掌握 EV3 红外测距在 Johnny-Five 中的接线、Proximity组件初始化、cm/inches属性读取、change事件驱动逻辑以及Led/Leds组合控制 LED 的完整实战方案。示例概述距离阈值触发的双色 LED 报警器本示例的核心思路非常简单用一个 EV3 红外传感器持续测量前方物体距离当距离小于 35 厘米时点亮红灯报警否则保持绿灯常亮。代码分为三步初始化主板、创建Proximity传感器实例、在change事件中依据proximity.cm切换 LED 状态。const { Board, Led, Leds, Proximity } require(johnny-five); const board new Board(); board.on(ready, () { const proximity new Proximity({ controller: EVS_EV3_IR, pin: BAS1 }); const red new Led(10); const green new Led(11); const leds new Leds([red, green]); green.on(); proximity.on(change, () { if (proximity.cm 35) { if (!red.isOn) { leds.toggle(); } } else if (!green.isOn) { leds.toggle(); } }); });这段代码与示例文件 eg/proximity-EVS_EV3_IR-alert.js 完全一致可直接运行。从命令行运行示例该文档是 Johnny-Five 官方示例体系的一部分运行方式与仓库内其他示例一致在仓库根目录执行node eg/proximity-EVS_EV3_IR-alert.js运行前提已在本机安装并连接 EVShield 扩展板板载固件为支持 EV3 传感器的版本EVShield 上 BAS1 口接入 LEGO EV3 红外传感器本示例对应pin: BAS1Arduino 等主控通过 Firmata 固件与主机通信Johnny-Five 会通过Board自动建立连接数字引脚 10、11 分别连接红灯、绿灯示例中以Led(10)、Led(11)声明仓库依赖已安装即执行过npm install参考 package.json。与基础测距示例的对照仓库还提供了一份不带 LED 的纯日志版本 eg/proximity-EVS_EV3_IR.js其文档见 docs/proximity-EVS_EV3_IR.md。两者唯一差异在如何使用测量结果// 纯日志版每次距离变化时打印 cm / in proximity.on(change, () { const {centimeters, inches} proximity; console.log(Proximity: ); console.log( cm : , centimeters); console.log( in : , inches); console.log(-----------------); });对照学习可以更清楚EVS_EV3_IR控制器负责把原始红外数据换算成厘米而报警是应用层在change事件里自行实现的业务逻辑。Proximity 组件的控制器与参数说明Proximity是 Johnny-Five 中的测距组件通过controller指定具体传感器型号初始化时执行对应的数据采集与单位换算。在 lib/proximity.js 中可以看到完整控制器表包括GP2Y0A21YK、GP2Y0A02YK0F、HCSR04、LIDARLITE等其中与本文相关的两个 EV3 控制器为控制器名适用传感器底层实现要点EVS_EV3_IRLEGO EV3 红外传感器通过 EVShield 读取 Proximity 寄存器toCm直接返回原始值单位已为厘米EVS_EV3_USLEGO EV3 超声波传感器读取方式相同toCm将原始值除以 10 换算为厘米本示例使用EVS_EV3_IR。pin参数必须是 EVShield 的合法端口名支持BAS1、BAS2、BBS1、BBS2传感器口以及BAM1/BAM2/BBM1/BBM2电机口。端口解析逻辑在 lib/evshield.js 的EVS.shieldPort中实现以BA开头映射到 Bank AI2C 地址0x1A以BB开头映射到 Bank B地址0x1BS1/S2后缀决定使用哪一路传感器模式、模拟读取寄存器与偏移量S2偏移为 52见EVS.S2_OFFSET。底层原理EVS_EV3_IR 控制器如何读取红外距离EVS_EV3_IR控制器的实现位于 lib/proximity.js 的Controllers.EVS_EV3_IREVS_EV3_IR: { initialize: { value(options, callback) { const state priv.get(this); state.shield EVS.shieldPort(options.pin); state.ev3 new EVS(Object.assign(options, { io: this.io })); state.ev3.setup(state.shield, EVS.Type_EV3); state.ev3.read(state.shield, EVS.Proximity, EVS.Proximity_Bytes, data callback(data[0] | (data[1] 8))); } }, toCm: { value(value) { return value; } } }结合 lib/evshield.js 可还原完整调用链EVS.shieldPort(pin)解析端口名得到bank、mode、offset、sensor等字段new EVS({io})创建 EVShield 驱动实例。构造函数会把 Bank A0x1A与 Bank B0x1B两个 I2C Bank 都建立连接并通过模块级shared变量保证同一主板只实例化一次state.ev3.setup(...)向对应 Bank 的模式寄存器写入EVS.Type_EV30x13通知扩展板该端口接入了 EV3 类型传感器state.ev3.read(...)从EVS.Proximity寄存器0x83连续读取EVS.Proximity_Bytes2 字节回调中用data[0] | (data[1] 8)合成 16 位原始距离值原始值被写入Proximity内部状态随后toCm原样返回因为 EV3 红外传感器输出的已是厘米单位的整数值。数据刷新与事件Proximity构造器在 lib/proximity.js 中通过setInterval按freq默认 25 毫秒周期性地把当前距离封装为{ cm, centimeters, in, inches }并发出data事件只有当raw相对上次发生变化时才额外发出change事件。此外还通过Withinablemixin 提供within([min, max], unit, callback)区间回调能力。单元测试佐证test/proximity.js 中Proximity: EVS_EV3_IR测试套件exports[Proximity: EVS_EV3_IR]验证了该控制器的完整行为stub 掉EVS.prototype.setup、EVS.prototype.read与i2cRead模拟返回[15, 0]within测试断言this.inches 5.85即原始值 15 厘米 → 15 × 0.39 5.85 英寸与Proximity.prototype中inches centimeters * 0.39的换算完全吻合data/change测试使用假时钟tick(100)验证事件按freq触发。这从测试层面确认了EVS_EV3_IR的cm就是毫米级原始值的直接厘米表达in由cm乘以 0.39 得到。报警逻辑逐行拆解回到本示例的报警实现理解三处关键写法green.on(); // 启动时绿灯常亮表示安全proximity.on(change, () { if (proximity.cm 35) { // 距离小于 35cm进入报警区 if (!red.isOn) { // 仅当红灯未亮时才翻转 leds.toggle(); } } else if (!green.isOn) { // 距离 35cm离开报警区 leds.toggle(); } });阈值 35 厘米LEGO EV3 红外传感器官方有效测距范围约为 5–70 厘米35 厘米取中段误报少且响应灵敏。你可以根据实际场景调整这个数字也可以改用proximity.within([0, 35], cm, ...)表达同样的区间逻辑用red.isOn/green.isOn做状态判断是为了避免change高频触发时反复调用toggle()造成 LED 抖动只有当状态确实需要切换时才翻转leds红灯亮则绿灯灭反之亦然Led与Leds是 Johnny-Five 的 LED 组件与集合组件Led(10)、Led(11)分别控制数字引脚 10、11Leds([red, green])把两个灯聚合toggle()会整体翻转集合内每个灯的开关状态。扩展思路与注意事项改用超声波传感器仓库提供对应的EVS_EV3_US版本 eg/proximity-EVS_EV3_US-alert.js文档见 docs/proximity-EVS_EV3_US-alert.md除控制器名改为EVS_EV3_US、阈值改为 25 厘米外结构完全一致可对照移植端口选择示例使用BAS1如该口被占用可换BAS2、BBS1、BBS2只需同步修改pin事件粒度data事件按固定频率持续触发适合做平滑显示change仅在值变化时触发适合做阈值判断本示例正是利用这一点避免无效计算数据单位proximity.cm与proximity.centimeters等价proximity.in与proximity.inches等价二者由Proximity的只读属性统一提供见 lib/proximity.js。相关资源组件源码lib/proximity.jsEVShield 驱动与寄存器定义lib/evshield.js示例入口eg/proximity-EVS_EV3_IR-alert.js、eg/proximity-EVS_EV3_IR.js基础测距文档docs/proximity-EVS_EV3_IR.md、docs/proximity-EVS_EV3_US-alert.md测试用例test/proximity.jsProximity: EVS_EV3_IR套件赞分享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 模块驱动红外测距传感器GP2Y0A21YK 示例Johnny Five 距离传感实战用 Proximity 模块驱动红外测距传感器GP2Y0A21YK 示例 Johnny Five 是运行在 Node.IoT机器人嵌入式johnny-five 红外测距实战GP2Y0A710K0F 长距传感器接入与距离换算原理johnny five 红外测距实战GP2Y0A710K0F 长距传感器接入与距离换算原理 本指南以 johnny five 官方示例文档 docs/proxIoT机器人嵌入式上一篇当华硕笔记本性能失控时G-Helper如何成为你的轻量级控制中心下一篇MongoDB Join Optimization 之 $project 投影与字段重命名Golden 测试解析与执行计划解读创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
实习简历精选11篇:从样本库到工程化写作的完整拆解 1. 为什么“精选11篇”这个思路值得认真对待第一次看到“实习简历(精选11篇)”这个标题,很多人可能会觉得不过是一个普通的资料合集。但如果你真正在招聘季帮人改过简历、或者自己投过几十份实习申请,就会明白“精选”这两个字背后… · 2026/9/23 12:15:13
Excel原生函数生成随机字符串:零VBA、跨平台、可审计方案 1. 项目概述:用原生Excel函数批量生成可控随机字符串,不依赖VBA、不调用外部工具你有没有遇到过这种场景:要给一批测试账号生成唯一用户名,比如“USR_8K9M2P”“TEST_Q7XN4R”;要为问卷系统生成一次性防刷码࿰… · 2026/9/23 12:15:13
PocketFlow 聊天应用实战:用单节点自循环 Flow 构建带对话历史的终端 Chatbot PocketFlow 聊天应用实战:用单节点自循环 Flow 构建带对话历史的终端 Chatbot 【免费下载链接】PocketFlow Pocket Flow: 100-line LLM framework. Let Agents build Agents! 项目地址: https://gitcode.com/gh_mirrors/poc/PocketFlow
本篇技术指南以 cookb… · 2026/9/23 12:15:06
基于VMD排列熵与ELM的滚动轴承故障诊断Python实现 简介:这份资源面向机械故障诊断方向的研究人员、工程师及学生,提供基于VMD排列熵与ELM的滚动轴承故障诊断完整Python实现。项目将变分模态分解用于非平稳振动信号处理,分离故障特征频率,再以排列熵量化各模态分量的复杂度… · 2026/9/23 13:04:07
情商低的9种表现:新手避坑指南,别让沟通成为你的技术瓶颈 情商低的9种表现:新手避坑指南,别让沟通成为你的技术瓶颈 官方文档动辄几百页,新手往往在浩如烟海的文字中迷失,抓不住核心痛点,导致“新手避坑”变成了一句空话。很多技术人以为只要代码写得漂亮就能晋升,却忽略了职场中那些看不见的“软技能”陷阱。… · 2026/9/23 13:04:07
Apache Arrow Java 开发指南:日志、测试、基准与代码风格全解析 数据工程大数据序列化数据分析 【免费下载链接】arrow Apache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing 项目地址: https://gitcode.com/gh_mirrors/arrow13/arrow 点击查看 免费下载 Apache Arrow 的 Java … · 2026/9/23 13:04:07
App软件制作底层逻辑:3个高频面试题源码拆解 App软件制作底层逻辑:3个高频面试题源码拆解 复制来的代码跑不通,报错信息还一堆?别急,这往往是App软件制作中最容易踩的坑。很多人盯着UI界面看,却忽略了底层数据流的调度机制,导致功能看似正常,实则内存泄漏或状态不同步。… · 2026/9/23 13:04:00
Android老项目分层架构改造:端口与适配器模式实战 1. 老项目架构改造的起点与整体思路接手一个跑了三年多的 Android 项目,最让人头疼的不是代码量,而是那种“改一处、崩三处”的连锁反应。业务逻辑直接写在 Activity 里,网络请求、数据库操作、UI 更新搅在一起,一个页面动辄上千行… · 2026/9/23 13:03:54
360安全路由器配置实战:从入门到精通的完整示例 360安全路由器配置实战:从入门到精通的完整示例 你是不是也遇到过这种尴尬:背熟了TCP/IP协议,能默写三次握手过程,但真让你给家里那台360安全路由器配个VLAN或者做个端口转发,手就开始抖?很多学员卡在“知道原理”和“动手配置”中间的… · 2026/9/23 13:03:46
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29