ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Johnny-Five 数字微波传感器接入指南:基于 Sensor.Digital 的移动侦测实战

Johnny-Five 数字微波传感器接入指南:基于 Sensor.Digital 的移动侦测实战 Johnny-Five 数字微波传感器接入指南基于 Sensor.Digital 的移动侦测实战【免费下载链接】johnny-fiveJavaScript Robotics and IoT programming framework, developed at Bocoup.项目地址: https://gitcode.com/gh_mirrors/jo/johnny-five导读本篇以 johnny-five 官方文档 docs/sensor-digital-microwave.md 为核心讲解如何用 JavaScript 通过 Johnny-Five 框架在 Arduino 上读取数字微波传感器Digital Microwave Sensor的输出信号。此类传感器常用于人体移动侦测输出数字高低电平非常适合用 johnny-five 的Sensor.Digital组件处理。读完本文你将掌握数字微波传感器的硬件接线方法、new five.Sensor.Digital(pin)的构造方式、data与change事件的使用、以及数字传感器在 lib/sensor.js 中的底层读取与事件分发机制并能在此基础上扩展出报警、灯光联动等实际应用。文档示例总览读取微波传感器的数字输出原文档给出的示例完整且可直接运行其核心逻辑是在板卡ready事件后为连接在数字引脚 7 上的微波传感器创建一个数字传感器实例并监听其change事件把最新的值打印到控制台。var five require(johnny-five); var board new five.Board(); board.on(ready, () { var microwave new five.Sensor.Digital(7); microwave.on(change, () { console.log(microwave.value); }); });对应的完整可运行示例代码位于 eg/sensor-digital-microwave.js在项目根目录执行以下命令即可运行node eg/sensor-digital-microwave.js提示示例中的require(johnny-five)在直接运行eg/目录下的脚本时应改为相对路径require(../lib/johnny-five.js)示例文件 eg/sensor-digital-microwave.js 即采用此写法。若你的项目通过npm install johnny-five安装依赖则保持require(johnny-five)即可。硬件接线数字微波传感器与 Arduino接线图与 Fritzing 文件原文档提供了对应的面包板接线图与 Fritzing 设计文件可在仓库中直接查看接线图docs/breadboard/sensor-digital-microwave.pngFritzing 源文件docs/breadboard/sensor-digital-microwave.fzz三线连接说明数字微波传感器模块通常只有三个引脚与 Arduino UNO 的接线方式如下表所示传感器引脚导线颜色连接至 Arduino UNO说明VCC红色5V 引脚为传感器供电典型工作电压为 5VGND黑色GND 引脚共地连接OUT数字输出黄色数字引脚示例使用 D7输出高/低电平高电平通常表示检测到移动目标接线要点将传感器的 VCC 与 GND 接到 Arduino 的 5V 与 GND为传感器提供稳定供电将传感器 OUT 引脚接到 Arduino 的数字引脚示例程序使用数字引脚 7因此new five.Sensor.Digital(7)中的数字7与硬件接线必须一一对应部分微波传感器模块如 RCWL-0516 等常见人体感应模块输出为数字电平可直接接入 GPIO 读取无需分压电路。核心 APISensor.Digital的构造与底层实现构造器从快捷工厂到通用 Sensorfive.Sensor.Digital并不是一个独立的类而是 johnny-five 在 lib/johnny-five.js 中定义的快捷构造器。它的作用是把用户传入的引脚号或配置对象包装成type: digital再交给通用的Sensor类module.exports.Sensor.Digital function(options) { let pin; let type digital; if (typeof options number || typeof options string) { pin options; options { type, pin }; } else { options.type type; } return new module.exports.Sensor(options); };从源码结构看这意味着你可以用两种等价的方式创建实例// 方式一直接传引脚号示例文档所用 var microwave new five.Sensor.Digital(7); // 方式二传配置对象可附加 freq、threshold 等选项 var microwave new five.Sensor.Digital({ pin: 7, freq: 50, // 采样/事件处理间隔单位 ms默认 25 threshold: 1 // 变化阈值数字模式下固定为 ±1 });同时Sensor.Analog被定义为Sensor本身lib/johnny-five.jsSensor.Digital只是对通用Sensor的数字模式封装。两个快捷构造器最终都会进入同一个 lib/sensor.js 构造器。数字模式的关键分支逻辑在 lib/sensor.js 中构造器根据options.type决定引脚模式与读取方式if (!options.type) { options.type analog; } // Set the pin to ANALOG (INPUT) mode this.mode options.type digital ? this.io.MODES.INPUT : this.io.MODES.ANALOG; this.io.pinMode(this.pin, this.mode);type: digital→ 引脚设为MODES.INPUT并调用io.digitalRead(pin, callback)读取数字电平默认的type: analog→ 引脚设为MODES.ANALOG调用io.analogRead(pin, callback)读取 ADC 值。数字模式还影响噪声过滤行为构造器中只有非数字类型才把原始读数累积到samples数组lib/sensor.js数字信号本身就是稳定的 0/1无需中位数滤波。state.booleanBarrier在数字模式下初始化为0lib/sensor.js这也决定了后面boolean属性的判定基准。事件处理data 与 change 的触发规则Sensor构造器内部通过setInterval周期性执行事件处理函数eventProcessinglib/sensor.js。对数字模式其流程非常直接if (options.type digital) { this.emit(data, raw); if (last ! raw) { this.emit(change, raw); last raw; } return; }由此可以总结数字微波传感器的两个事件语义data事件每个采样周期freq默认 25ms都会触发一次携带当次读取到的原始电平值0 或 1。适合持续轮询场景如周期性刷新状态显示change事件仅当读取到的电平与上一次不同即last ! raw时才触发携带新的电平值。适合边沿触发场景如检测到有人进入或目标离开。示例程序正是监听change事件因此每当微波传感器检测到移动状态翻转如无目标 → 有目标或有目标 → 无目标时控制台就会打印microwave.value。该行为也由测试用例验证在 test/sensor.js 的 Sensor - Digital 测试中模拟digitalRead回调先传入1、再传入0断言data事件分别携带1与0change事件同样分别触发且携带对应值test/sensor.js 的change用例进一步确认两次电平不同才触发的边沿语义。采样频率 freq 与事件节流数字传感器的采样频率由freq选项控制默认值为 25mslib/sensor.js。在构造器末尾若state.enabled为真则设置this.freq state.freqlib/sensor.jsfreq的 setter 会创建对应周期的setIntervallib/sensor.js。这意味着若微波模块的移动检测响应较慢可将freq调大如 100以降低事件处理频率、减少 CPU 占用若需要更灵敏的响应可将freq调小但需注意底层 IO 的digitalRead推送能力与事件循环开销。数字模式下change事件要求电平与上一次不同才触发因此即使调小freq同一个电平状态也不会产生重复的change事件这正是文档示例可以放心使用change的原因。属性与扩展能力从裸电平到业务状态Sensor.Digital实例除了value之外还暴露了多个常用属性与方法对数字微波传感器尤其有意义属性/方法说明数字模式下的行为value当前读取值直接返回原始电平 0/1未设置 scale 时raw原始读数与value一致均为数字电平boolean布尔化状态与默认booleanBarrier 0比较value 0即true等价于电平为 1booleanAt(barrier)自定义布尔判定阈值可手动设置判定基准scale(low, high)值域映射数字模式按电平值作索引scale(0, 100)后低电平 → 0、高电平 → 100scaleTo(low, high)/fscaleTo(low, high)即时数值映射把原始电平映射到目标范围enable()/disable()启停采样关闭/恢复内部定时器其中boolean属性的实现位于 lib/sensor.js数字模式下的booleanBarrier初始为0因此只要读到电平 1 即返回true非常适合直接表达是否有目标进入感应区。scale方法在数字模式下的行为可以从测试用例 test/sensor.js 中确认调用this.sensor.scale(50, 100)后电平1被映射为100电平0被映射为50。这一特性可用来把微波传感器的裸电平直接映射为业务含义明确的数值如置信度百分比。实战扩展从打印电平到完整的移动侦测方案以下示例在官方示例基础上扩展组合change事件、boolean属性与 LED 输出实现检测到移动 → 点亮 LED的完整回路并演示freq与scale的配合var five require(johnny-five); var board new five.Board(); board.on(ready, () { // 微波传感器接数字引脚 7LED 接数字引脚 13 var microwave new five.Sensor.Digital({ pin: 7, freq: 50 }); var led new five.Led(13); // 监听电平变化0 → 1 或 1 → 0 microwave.on(change, () { console.log(Motion state:, microwave.boolean, | value:, microwave.value); }); // 使用 boolean 属性直接驱动动作 microwave.on(data, () { if (microwave.boolean) { led.on(); } else { led.off(); } }); });注意eg/目录下已有大量可直接运行的示例如 eg/sensor.js、eg/led-blink.js 等开发时可将它们作为拼接模块的参考。本扩展示例仅供学习运行前请根据实际接线调整引脚号。运行上述代码后当有人体或其他移动目标进入微波传感器的感应范围时控制台会打印电平从0变为1的状态变化板载 LED 点亮目标离开后电平恢复0LED 熄灭。总结与进阶阅读数字微波传感器接入 johnny-five 的核心流程可以概括为四步接线VCC → 5V、GND → GND、OUT → 数字引脚参考 docs/breadboard/sensor-digital-microwave.png构造new five.Sensor.Digital(pin)或传入包含pin、freq、threshold的配置对象监听用data事件周期性取电平用change事件响应电平翻转扩展利用boolean、scale等属性把电平转换为业务状态联动 LED、蜂鸣器等执行器。相关源码与测试文件可进一步深入研读组件核心实现lib/sensor.js数字/模拟分支、事件处理、属性定义快捷构造器定义lib/johnny-five.js官方示例eg/sensor-digital-microwave.js数字模式测试test/sensor.js通用 Sensor 文档docs/sensor.md常用数值工具函数lib/fn.jsmap、fmap、constrain等如果你需要同时读取多个传感器johnny-five 还提供了Sensor.Collection即five.Sensors定义于 lib/sensor.js别名注册于 lib/johnny-five.js可一次性管理多个微波传感器或混合传感器阵列适合多区域同时侦测的场景。【免费下载链接】johnny-fiveJavaScript Robotics and IoT programming framework, developed at Bocoup.项目地址: https://gitcode.com/gh_mirrors/jo/johnny-five创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表