CNK Arduino 教程(八)

智能变色头箍

材料准备

1. CurieNano 开发板

2. 3.7V 锂电池

3. 16 位 LED 灯盘 * 2

4. 3D 打印灯罩 * 2

5. 魔术贴扎带

6. 发箍

7. 热熔胶枪

硬件组装

焊接灯盘

将第一个灯盘上的 DIN、VCC、GND 接口,一次焊接至第二个灯盘上的 DOUT、VCC、GND,再将第二个灯盘上的 DIN、VCC、GND 分别焊接上杜邦线。

=====================

第一个灯盘    第二个灯盘
DIN                DOUT
VCC                VCC
GND               GND
=====================
第二个灯盘     杜邦线
DIN                 绿色
VCC                 红色
GND                 黑色

=====================

打印灯罩(*可选)

3D 打印文件在这里下载:banqiu_stl.zip

你可以选择好合适的大小,适当单独调整模型高度以适应灯盘。

我这里选择的常宽为灯盘的直径,高度单独调整为了 2 cm。

整体组装

首先,将热熔胶枪开启预热。

拿出 CurieNano 开发板

在 CurieNano 开发板上装上魔术贴(注意要露出 MicroUSB 接口)

然后准备将发箍和 LED 灯盘用热熔胶粘结起来

安装 3D 打印灯罩

用热熔胶在灯罩边缘加固一下

 

在电池上加一圈魔术贴

再用魔术贴将电池固定再头箍上

 

将 CurieNano 开发板固定在上面,并将 LED 的绿色信号接线连接至开发板上的 D2 接口,红色 VCC 接线连接至 5V 接口,黑色 GND 接线连接至 GND 接口;电池正极连接至 BAT 接口,电池负极连接至 GND 接口。

到这里就组装完成了

开发板程序上传

下载和安装库文件

首先我们下载和安装好相应的库文件:

— CurieNeurons Pro
—- 可以在 CurieNeurons Kit 中找到,或者在创客大爆炸单独购买。
— Adafruit_NeoPixel
—- 可以在 Arduino IDE 的库文件管理器中搜索到,请下载并安装。

程序上传

程序源文件请在这里下载:CurieNeuronsPro_andIMU_tougu.zip
在库文件都安装好的情况下直接将程序上传至 CurieNano 开发板即可。

Curie 学习

首先我们需要知道我们希望在不同动作的情况下怎么亮起 LED。
程序中我们默认定义了以下几种方式:
识别为动作 1 的时候,彩色色谱闪烁亮灯;
识别为动作 2 的时候,关闭所有的灯;
识别为动作 3 的时候,白色圆盘旋转亮灯。
进一步地,我们让:
向右摆头为动作 1 ;
向左摆头为动作 3 ;
正放头部为动作 2 ;
理清楚我们要的效果的识别分类后,我们就可以开始进行学习了。

开始学习

首先,我们将电脑链接至 CurieNano,并在 Arduino 中打开串口监视器。

这里显示正在校准,当如下图所示,显示校准完成时我们就可以进行下一步操作了

注意在下方的波特率左边一栏,选择换行符:

接下来,找一个模特,当头部放正时,输入 2 并发送

 

然后向左歪着脑袋,这时输入 1 并发送

然后向右歪着脑袋,输入 3 并发送:

到这里我们基本就完成第一遍学习了。每次学习完毕后都会立刻反馈效果。

建议反复多学习 3 遍以上。就可以完成啦。

效果测试

让模特带着头箍跟着音乐做些动作吧~

 

 

效果还是很不错的!完成!

技术解析

CurieNano 为什么可以识别动作?

CurieNano 开发板上的 Curie 芯片中内置了 加速度计和陀螺仪 ,使得我们可以使用这些数据对 CurieNano 当前的姿态进行学习和识别。

关于加速度计和陀螺仪

加速度计和陀螺仪一般被称为 “Motion Sensor” 也就是运动传感器,在 Genuino 101 中,加速度计和陀螺仪被内嵌在 Curie 模组的一个单元中,不需要另外连接。有个特别的名字,叫做 Inertia Measurement Unit(IMU)惯性测量单元,也叫姿态传感器。

Curie 的运动是三维的,所以需要三个轴来感知 Curie 三个轴上的运动。注意,这里的三轴是指以 Curie 为基准,也就是传感器的三轴是和物体的 Curie 平行的。

加速度计测量的是三轴的加速大小,不光光是重力加速度,还有运动的加速度,不过我们常常在静止的时候测量加速度,此时测量出来的就是重力加速度。这里的加速度不仅是个有大小的量,而且是个有方向的量的,也就是矢量。通过对这个矢量的测量,可以判断 Curie 是否是静止或者匀速直线运动,判断条件是其大小(模)是否为 9.8m/s^2 也就是重力加速度 g 的大小,如果其大小为 9.8m/s^2,则表示 Genuino 101 处于静止或者匀速直线运动状态,而此时通过对其方向的判断,便可知道 Curie 的姿态。

而三轴陀螺仪测量的 Curie 三个轴的角速度,也就是 Curie 绕自身的三个轴的角度变化的快慢,单位一般为 dps(度每秒)或者 rad/s(弧度每秒)。如果手机静止三轴的角速度均为 0。

简单来说,我们可以通过 Curie 中的姿态传感器数据来判断,当前 Curie 的运动情况和姿态,从而对特定的运动情况和姿态触发相应的程序指令。

进阶的,我们还可以使用 Curie 中的神经网络对姿态传感器的数据进行学习和识别,从而出发特定的程序指令。免去对姿态识别的繁琐编程步骤

在哪里可以修改灯光效果?

在代码中我们定义了一个专门用来对识别到的分类进行反馈的函数,你可以在其中进行修改:

 


void OOLED()
{
  if(prevcat==1)
  theaterChase(strip.Color(127, 127, 127), 50); // White
  
  if(prevcat==2)
    for(int i=0; i<strip.numpixels(); i=””>       strip.setPixelColor(i, 0);
    }
    strip.show();

  if(prevcat==3)
    rainbowRCycle(3);
}</strip.numpixels();>

 

发布者:Cara,转载请注明出处:http://www.makercollider.com/curie/1065

发表评论

登录后才能评论
QR code