Microduino 姿态台灯/zh

来自Microduino Wikipedia
853387039@qq.com讨论 | 贡献2015年2月1日 (日) 09:31的版本 文档
跳转至: 导航搜索

概述

  • 项目名称:Microduino 体感台灯
  • 目的:通过Microduino姿态传感器(10DOF)体感控制自制的彩色台灯。
  • 难度:高级
  • 耗时:4小时
  • 制作者:Microduino Studio-YLB

原理

通过体感控制,那就必须用到无线通讯,Microduino无线通信方案非常多:nRF24、smartRF、Zigbee、BT等,这里,我们使用采用nRF24无线通讯方案。Microduino姿态传感器(10DOF)获取姿态数据,经过量化成颜色值(0-255)再发送给彩色台灯,台灯接收到数据后,点亮彩灯。台灯采用单总线WS2812彩灯,每个灯内置控制IC芯片,能自由、简单控制。

材料清单

  • Microduino设备
模块 数量 功能
Microduino-Core/zh 2 核心板
Microduino-USBTTL/zh 1 下载程序
Microduino-nRF24/zh 2 无线通信
Microduino-BM/zh 2 电源管理
Microduino-Lamp/zh 1 彩灯
  • 其他设备
USB数据线 1 连接
锂电池 2 供电
高酒杯 1 台灯骨架
灯罩 1 台灯外壳

文档

程序下载:mpu_ws2812 3D模型下载:文件:3D-Ball.zip

台灯制作

  • 步骤一:准备一个高酒杯和一张灯罩,把台灯外形搭建起来。
Table lamp cap.jpg
  • 步骤二:搭建硬件电路
    • 所需设备:
模块 数量 功能
Microduino-Core/zh 1 核心板
Microduino-USBTTL/zh 1 下载程序
Microduino-nRF24/zh 1 无线通信
Microduino-BM/zh 2 电源管理L
Microduino-Lamp/zh 1 彩灯
电池 1 供电

将所有模块无上下顺序叠加起来。

Table lamp module.jpg
  • 步骤三:程序测试

需要用到_99_LCD_NeoPixel库文件,参考安装Arduino IDE Microduino程序库支持包。安装好硬件支持包后,打开示例库中的strandtest程序。

  • 程序说明:
#define PIN 6

Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800);

PIN定义单总线灯的控制引脚,”60”定义了灯的数量,用户可根据自身情况更改。更改 编译通过后选择好板卡下载就行。下载成功后我们可以看到炫酷的效果。此时还没用到nRF24通讯模块。

体感遥控制作

因为考虑到姿态是全方位的,所以考虑给它做个球形外壳,采用3D打印机打印。

  • 步骤一:搭建硬件电路
    • 所需设备:
模块 数量 功能
Microduino-Core/zh 1 核心板
Microduino-nRF24/zh 1 无线通信
Microduino-BM/zh 2 电源管理L
Microduino-10DOF/zh 1 姿态检测
电池 1 供电

将所有模块无上下顺序叠加起来。

Table lamp 10dof module.jpg
  • 步骤二:构建3D模型

根据搭建硬件电路的规格尺寸,采用SketchUp构建3D模型。

Table lamp 3D.jpg
  • 步骤三:采用3D打印机打印出模型,确定尺寸是否合适。
Table lamp print.jpg

整体调试

  • 步骤一:下载程序

解压程序,分别打开两个程序,一个是发送,一个接收。

  • 程序说明:

发送端:"mpu.h"是姿态检测子程序,"nrf.h"是2.4G无线无线控制程序。 Microduino姿态传感器(10DOF)获取姿态数据,经过量化成颜色值(0-255)。

  //=以下三行是用加速度计算三个轴和水平面坐标系之间的夹角
  Angel_accX=atan(Ax/sqrt(Az*Az+Ay*Ay))*180/3.14;
  Angel_accY=atan(Ay/sqrt(Ax*Ax+Az*Az))*180/3.14;
  Angel_accZ=atan(Az/sqrt(Ax*Ax+Ay*Ay))*180/3.14;

  Angel_accX_send=map(abs(Angel_accX),0,90,0,255);
  Angel_accY_send=map(abs(Angel_accY),0,90,0,255);
  Angel_accZ_send=map(abs(Angel_accZ),0,90,0,255);

接收端:接收到数据后,点亮彩灯。

    Angel_accX=rec.rf_x;		//接收请求时序赋值
    Angel_accY=rec.rf_y;
    Angel_accZ=rec.rf_z;

    Serial.print(Angel_accX);
    Serial.print(",");
    Serial.print(Angel_accY);
    Serial.print(",");
    Serial.print(Angel_accZ);
    Serial.println("");

    colorWipe(strip.Color(Angel_accX, Angel_accY, Angel_accZ), 10);

2S内没接收到nrf的数据将关闭彩灯。

  if(safe_ms>millis()) safe_ms=millis();
  if(millis()-safe_ms>2000)
  {
    colorWipe(strip.Color(0, 0, 0), 50);
  }

分别将下载到对应的硬件。在BM模块中接上电池,打开BM上的电源开关,若电池没电,直接插上MicroUSB就可以给电池充电,注意:BM更换电池后若不能启动电源,需要插上USB启动BM。滚动小球观察台灯变化。

Table lamp ok.jpg

注意问题

  • 发送和接收端共用一个USBTTL模块,只是下载程序能用到。
  • BM更换电池后若不能启动电源,需要插上USB启动BM。