亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

HomeBright:Leap Motion 手势控制智能家居灯光系统 (Arduino UNO)

项目概述

HomeBright 是一个基于 Leap Motion Controller 手势识别与 Arduino UNO 硬件控制的智能家居灯光演示系统。通过将家庭平面图映射到 Leap Motion 的三维坐标空间,用户只需伸手指向对应区域,手掌高度控制该区域灯光亮度,抓握手势开关灯。项目使用 Node.js + Cylon.js 机器人框架串联 Leap Motion 与 Arduino Firmata 协议,适合作为手势交互原型、智能家居教学或创客展示。

硬件架构

组件数量角色
Arduino UNO1运行 StandardFirmata,驱动 4 路 PWM LED
Leap Motion Controller1USB 连接电脑,捕获手部骨骼数据
LED (通用 5mm)4分别代表:客厅、餐厅、卧室、书房
220Ω 电阻4LED 限流
面包板 + 杜邦线若干搭建电路
电脑 (Windows/macOS/Linux)1运行 Node.js 宿主程序

电路连接

软件环境搭建

  1. 安装 Node.js (建议 LTS 版本)
  2. 安装 Leap Motion SDK (v2.3.1+),运行 Leap Motion 服务
  3. 初始化项目并安装依赖:
mkdir homebright && cd homebright
npm init -y
npm install cylon cylon-firmata cylon-gpio cylon-i2c cylon-leapmotion firmata serialport

或使用附件 package.json 直接 npm install。

核心代码解析 (homebright-console.js)

"use strict";
var cylon = require("cylon");

cylon.robot({
  connections: {
    leapmotion: { adaptor: "leapmotion" },
    arduino: { adaptor: "firmata", port: "COM7" }  // 修改为你的串口
  },
  devices: {
    leapmotion: { driver: "leapmotion" },
    livingroom: { driver: "led", pin: 6, connection: "arduino" },
    dininghall: { driver: "led", pin: 9, connection: "arduino" },
    bedroom: { driver: "led", pin: 10, connection: "arduino" },
    studyroom: { driver: "led", pin: 11, connection: "arduino" }
  },
  work: function(my) {
    my.leapmotion.on("hand", function(hand) {
      // 抓握强度 > 0.5 视为"关灯手势",否则开灯
      var on = hand.grabStrength > 0.5 ? false : true;
      // 手掌中心坐标 (mm) : x(左右), y(高度), z(前后)
      var x = hand.palmPosition[0];
      var z = hand.palmPosition[2];
      // 亮度映射:手掌高度 y (0~300mm) → PWM 0~255
      var value = on ? hand.palmPosition[1] : 0;

      console.log("Brightness:", value, "Zone:", x>0?"Right":"Left", z>0?"Front":"Back");

      // 简单四象限映射房间
      if (x > 0 && z > 0) {
        my.livingroom.brightness(value);   // 右前 → 客厅
      } else if (x > 0 && z < 0) {
        my.dininghall.brightness(value);   // 右后 → 餐厅
      } else if (x < 0 && z > 0) {
        my.studyroom.brightness(value);    // 左前 → 书房
      } else {
        my.bedroom.brightness(value);      // 左后 → 卧室
      }
    });
  }
}).start();

运行与测试

  1. 确认 Leap Motion 服务运行中 (系统托盘图标为绿色)
  2. 修改代码中 Arduino 串口号 (port: "COM7" 或 "/dev/ttyUSB0")
  3. 运行:node homebright-console.js
  4. 将 Leap Motion 放在桌面朝上,手掌悬停在设备上方:

坐标映射与房间划分优化

当前代码使用简单的四象限硬编码映射。实际部署时建议:

扩展方向

常见问题排查

资源链接

制造工艺

  1. DIY 蓝牙控制 Arduino 间谍小车
  2. FlickMote:基于手势的智能家居红外遥控器
  3. DIY Arduino TV-B-Gone:万能关机遥控器
  4. 自制大尺寸LED主时钟带闹钟功能 — 12米外清晰可见
  5. Find Me:基于 Arduino 与蓝牙的智能寻物器制作指南
  6. Arduino 项目优化供电方案:从按键开关到电池监测与数据记录
  7. Arduino 井字棋游戏:MAX7219 点阵屏 + 纸板外壳 DIY
  8. 从零构建智能 Arduino 四足机器人:完整指南
  9. DIY Arduino 手柄方向盘 - 游戏竞速模拟器自制指南
  10. 利用 Arduino Nano R3 自制全功能 CNC 雕刻机
  11. Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
  12. 基于 Arduino Mega 与物联网传感器的高级家庭监控系统

现象可能原因解决方法
Leap Motion 无数据服务未启动/USB 供电不足重启服务,换 USB 3.0 接口或带电源 Hub
Arduino 无响应串口号错误/未烧录 Firmata设备管理器确认端口,重新上传 StandardFirmata
LED 亮度不变引脚非 PWM/接线错误确认使用 6/9/10/11 引脚,检查电阻 LED 极性
Cylon 连接报错serialport 版本不兼容锁定 serialport@1.7.4 firmata@0.5.5 如 package.json