体感控制彩灯

来自Microduino Wikipedia
跳转至: 导航搜索
Language English

目的

做一个根据体感来控制彩色led灯的颜色。

原理

通过姿态传感器检测姿态变化(X,Y,Z三个方向相对水平位置的夹角),将三个值量化到彩灯颜色对应的R,G,B值上,即可实现体感来变幻颜色。

设备

模块 数量 功能
Microduino-CoreUSB/zh 1 核心板
Microduino-Sensorhub/zh 1 传感器转接板
Microduino-Motion/zh 1 姿态检测模块
Microduino-BM/zh 1 电池管理
Microduino-Colorled/zh 1 蜂鸣器
  • 其他设备:
    • 电池1个
    • 乐高外壳

搭建硬件

  • Setup 1:将CoreUSB接到电脑。打开示例程序,选择好板卡和串口下载程序。

Colorled_motion

  • Setup2:将CoreUSB、Motion和Sensorhub叠加。
  • Setup3:将彩色灯接到接到Sensorhub的A0的引脚上。
Microduino-sensorhub rule.JPG
  • Setup4:将电池接到BM上

软件调试

  • 函数说明
    • “colorWipe ()”彩灯颜色控制函数。
  • 姿态数据获取并量化到颜色上
  accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
  ax = map(abs(ax / 180), 0, 100, 0, 255);
  ay = map(abs(ay / 180), 0, 100, 0, 255);
  az = map(abs(az / 180), 0, 100, 0, 255);
  • 大于一定范围的动作变化将改变颜色
  if (ax - cx >= 10 || ay - cy >= 10 || az - cz >= 10)
  {
    cx = ax;
    cy = ay;
    cz = az;
    safe_ms = millis();
    colorWipe(strip.Color(ax, ay, az));
    /*
        Serial.print("color:\t");
        Serial.print(ax); Serial.print("\t");
        Serial.print(ay); Serial.print("\t");
        Serial.print(az); Serial.println("\t");

        */
  }
  • 一定时间内没有动作变化,关闭彩灯,删除语句,彩灯一直处于亮的状态。
  else if (millis() - safe_ms > timer)
  {
    colorWipe(strip.Color(0, 0, 0));
    safe_ms = millis();
  }
  • 时间长度用户可自己定义
  #define timer 10000

结果

转动搭好的系统,可以看到彩灯在不停的变幻颜色,当保持不动时,10S之后彩灯将关闭。

视频