[项目]桌面彩色互动台灯 精华

5460浏览
查看: 5460|回复: 16

[项目] 桌面彩色互动台灯

[复制链接]
本帖最后由 神会找你 于 2020-5-14 15:15 编辑

桌面彩色互动台灯

你的桌面上会不会缺少这样一个机器人宠物呢?
在你工作时绝不会打扰你,你休息时它任你摆布
我就一直很想要一款这样的机器人,无奈市场上的那些小型互动机器人太贵了,买不起

最近发现了一款红外手势传感器,立马就想着是不是可以动手实现我想要的互动机器人了在经历了一番折腾之后

于是,它就诞生啦

桌面彩色互动台灯图1
桌面彩色互动台灯图2

接下来,揭秘一下制作过程吧!

制作材料

1、Arduino Nano V3        ×1
2、WS2812 RGB 全彩灯带        ×1
3、红外手势传感器(带RGB/环境光检测)        ×1
4、微型双路1.5A直流电机驱动模块                ×1
5、3.7V电池 新型锂子化学聚合充电锂电池        ×2
6、微型金属减速电机        ×2
7、杜邦线(母母头) ×20
8、3PI miniQ 小车橡胶轮        ×2
9、3PI miniQ 小车万向轮       ×2

硬件部分

3D建模

在Fusion 360中设计车主体、灯架和电机固定支架等部分,(后来知道有现成的固定支架,但模型已经画好打印出来了就不想改了)
桌面彩色互动台灯图29桌面彩色互动台灯图28桌面彩色互动台灯图27

从光神王市场上找到了一款月球灯模型,灯罩部分用3D Bulider挖了两个槽,让它可以和车主体部分的尺寸吻合起来

桌面彩色互动台灯图30

第一次建模,献丑了


下载附件桌面彩色互动小车.zip

主体部分组装

把打印好的车体和电机、轮子组装起来
桌面彩色互动台灯图31桌面彩色互动台灯图32桌面彩色互动台灯图4桌面彩色互动台灯图3

组装完成!
桌面彩色互动台灯图5桌面彩色互动台灯图6

电路焊制

根据连线图:
桌面彩色互动台灯图33
把电路焊制在洞洞板上,
桌面彩色互动台灯图8
桌面彩色互动台灯图7

用杜邦线将电机、红外手势传感器、灯带与电路连接起来。
要注意的是,Nano的GND引脚数量不满足所需,为了焊接的方便,Nano左侧一排引脚中的RST引脚由于未被使用,因此在焊制排针的时候,RST引脚没有与边上的排针焊在一起,而是将RST引脚浮空,排针引脚与相邻的GND连在了一起,解决了GND引脚不足的问题。
当然如果有其它办法可以将GND引脚拓展到足够的数量也是没有问题的。
红外手势传感器用螺丝和螺帽固定好,最后把电路塞到车里,整理一下线。
桌面彩色互动台灯图10桌面彩色互动台灯图11

电池

为了向电机提供足够的电流和电压,采用了两块3.7V锂电池串联,为什么没有直接用7.4V锂电池而用了两块电池串联呢?省空间。
串联方法:将电池的PH头去掉,改换为杜邦线的母头,再用热缩管将铜丝裸露部分包裹起来。

桌面彩色互动台灯图34

至此,硬件部分基本做完了,灯罩和灯架3D打印时间比较久,这段时间里我们可以先编写小灯的控制程序。

软件部分

在开始软件部分前,首先需要安装好Arduino IDE,
然后把下面两个压缩包解压出来的文件夹放到C:\Program Files (x86)\Arduino\libraries目录下(Arduino默认安装路径是这个)


下载附件APDS-9960红外手势传感器库文件.zip
下载附件DFRobot_NeoPixel库文件.zip

调教红外手势传感器:

先来研究一下这款红外手势传感器可以识别哪些手势
当手进入感应区域,进入方向将会被记录,同时中断会被触发,等待手离开感应区,离开方向被记录,然后计算输出对应的手势。总共可以识别的手势包括上、下、左、右、远、近六种。
那,感应区域有多大呢,其实是可以自己设置的
桌面彩色互动台灯图12

首先打开C:\Program Files (x86)\Arduino\libraries\SparkFun_APDS9960\SparkFun_APDS9960.h,然后在SparkFun_APDS9960.h文件里调整一下手进入感应范围的阈值DEFAULT_GPENTH,就能让识别区域处在期望的范围内了。

注意:DEFAULT_GPENTH值域为0-255,越接近0意味着距离越远。我将手进入阈值DEFAULT_GPENTH设为100,大约距离传感器15cm处触发手势识别中断

桌面彩色互动台灯图13

除了感应区域,我们还需要调整一下识别灵敏度,默认值下的灵敏度太低了,好多次都识别失败,因此我更改了灵敏度,大大提高了识别正确率。此处的识别正确率以习惯的挥手速度为准,灵敏度越低意味着挥手速度要越慢。

在SparkFun_APDS9960.h文件里找到#define GESTURE_THRESHOLD_OUT,将后面的数值改小,手势识别的灵敏度就会相应提高,这里我设置成5。
再找到SparkFun_APDS9960.h文件里的#define GESTURE_SENSITIVITY_1,将后面数值改小,对上、下、左、右手势的识别灵敏度会进一步提高,这里我设置成了30。

至于#define GESTURE_SENSITIVITY_2对应的远、近手势识别的灵敏度在测试时感觉已经足够,因此没有做调整。

桌面彩色互动台灯图14

我们可以在手势传感器例程里尝试一下效果:
打开刚才红外手势传感器库文件的位置,找到GestureTest.ino
默认路径C:\Program Files (x86)\Arduino\libraries\SparkFun_APDS9960\examples\GestureTest\GestureTest.ino
按照刚才的接线图,确认已经把红外手势传感器部分的电路接好了,就可以直接上传程序,打开串口查看打印信息,如果误识别次数较多可以再调节一下上述几个阈值,直到正确识别率大于90%以上。

桌面彩色互动台灯图15

调教电机驱动

两个N20电机都是通过HR8833电机驱动芯片来控制工作的,两个电机分别由IA1、IA2和IB1、IB2引脚来控制的。以IA1,IA2为例:当IA2置低电平,IA1输入PWM信号,则PWM信号的高电平部分的占空比可以控制转速,电机正转;当IA1置高电平,IA2输入PWM信号,则PWM信号的低电平部分的占空比可以控制转速,电机正转;当IA1置低电平,IA2输入PWM信号,则PWM信号的高电平部分的占空比可以控制转速,电机反转;当IA2置高电平,IA1输入PWM信号,则PWM信号的低电平部分的占空比可以控制转速,电机反转;
下表可以很清晰地反映这两者的关系:

Ix1 Ix2 功能 描述
PWM 0 Forward PWM,fast decay 正向PWM调速,采用电流快衰减方式,高电平占空比为调速比
1 PWM Forward PWM,slow decay 正向PWM调速,采用电流慢衰减方式,低电平占空比为调速比
0 PWM Reverse PWM,fast decay 反向PWM调速,采用电流快衰减方式,高电平占空比为调速比
PWM 1 Reverse PWM,slow decay 反向PWM调速,采用电流慢衰减方式,低电平占空比为调速比

以下是电机驱动芯片的控制例程,可以对照看一下安装在车主体上之后的电机运动方向,然后自行定义一下前进、后退、左转、右转四个指令对应的电机控制指令。

/*
* @file Motor driver HR8833-Test.ino
* @brief HR8833-Test.ino  Motor control program
*
* control motor positive inversion
*
* @author lei.wu@dfrobot.com
* @version  V1.0
* @date  2016-4-13
*/
const int IA1=10;
const int IA2=12;
const int IB1=11;
const int IB2=13;

void setup() {
     pinMode(IA1, OUTPUT);
     pinMode(IA2, OUTPUT);
     pinMode(IB1, OUTPUT);
     pinMode(IB2, OUTPUT);
}

void loop() {
MA1_Forward(200);//MA1路电机正转,PWM调速
delay(1000);
MA2_Backward(200);//MA2路电机反转,PWM调速
delay(1000);
MB1_Forward(200);//MB1路电机正转,PWM调速
delay(1000);
MB2_Backward(200);//MB2路电机反转,PWM调速
delay(1000);
}

void MA1_Forward(int Speed1) //正向快衰模式,Speed1值越大,电机转动越快
{
     analogWrite(IA1,Speed1);
     digitalWrite(IA2,LOW);  
  }

void MA2_Backward(int Speed1) //反向慢衰模式,Speed2值越小,电机转动越快
{   
    int Speed2=255-Speed1;
    analogWrite(IA1,Speed2);
    digitalWrite(IA2,HIGH);
}

void MB1_Forward(int Speed1)
{
     analogWrite(IB1,Speed1);
     digitalWrite(IB2,LOW);  
}

void MB2_Backward(int Speed1)
{   
    int Speed2=255-Speed1;
    analogWrite(IB1,Speed2);
    digitalWrite(IB2,HIGH);   
} 

编写控制程序

在传感器和电机驱动芯片都调试完成之后,我们就可以开始编写综合的逻辑控制程序了。以下是我根据所需要的功能以及逻辑关联而画出来的程序框图

桌面彩色互动台灯图16
下载附件colorful_interactive_lamp_nano.zip

烧写程序

选择开发板 Arduino Nano
桌面彩色互动台灯图22
点击上传
桌面彩色互动台灯图17
上传成功!
桌面彩色互动台灯图18
此时灯光已经点亮,红外手势传感器也已开始工作
桌面彩色互动台灯图19

合盖固定

自己想办法把灯带从盖子上的小洞里穿过去,卡在灯带槽里,要是固定不牢或者怕灯带掉出来,也可以适当抹点胶。用螺丝将车主体和灯架固定住,
桌面彩色互动台灯图9
桌面彩色互动台灯图20桌面彩色互动台灯图21

盖上脑阔,大功告成啦!






gray6666  初级技神

发表于 2020-5-14 16:46:51

很棒,建议批量上市众筹
回复

使用道具 举报

teu  高级技师

发表于 2020-5-14 11:46:02

学习了,顶一个。
回复

使用道具 举报

rzyzzxw  版主

发表于 2020-5-14 16:09:15

回帖奖励 +1 创造力

这个好,太优秀。
回复

使用道具 举报

DFByOXbISQB  学徒

发表于 2020-5-14 16:35:27

萌萌哒的白头发机器人
回复

使用道具 举报

hnyzcj  版主

发表于 2020-5-14 17:12:27

赞yi
回复

使用道具 举报

神会找你  初级技师
 楼主|

发表于 2020-5-14 22:29:16

哈哈哈哈感谢大家捧场
回复

使用道具 举报

rzegkly  版主

发表于 2020-5-15 07:02:52

互动彩灯的创意很棒
回复

使用道具 举报

DFrJ5KYVQaH  中级技匠

发表于 2020-5-15 09:08:57

很详细,想学习
回复

使用道具 举报

youjingisland  初级技师

发表于 2020-5-15 11:40:50

很可爱了
回复

使用道具 举报

DFBJkfQuocU  学徒

发表于 2020-5-15 14:22:55

学习学习
回复

使用道具 举报

gada888  版主

发表于 2020-5-16 18:01:55

萌萌的小灯
回复

使用道具 举报

DFHJM_IpFmV  中级技师

发表于 2020-5-20 19:49:56

gray6666 发表于 2020-5-14 16:46
很棒,建议批量上市众筹

嗯,是应该这样!
回复

使用道具 举报

793433466  见习技师

发表于 2020-6-2 11:28:04

加上一个蜂鸣器有音效搭配就更棒了
回复

使用道具 举报

面包板  初级技匠

发表于 2020-6-10 12:00:56

看到OZOBOT的宝莲灯机器人也想自己做一个
回复

使用道具 举报

DFS1w2cb8o8  中级技师

发表于 2020-6-11 21:53:23

厉害厉害
回复

使用道具 举报

20060606  高级技匠

发表于 2020-7-31 10:14:16

电池怎么充电
回复

使用道具 举报

神会找你  初级技师
 楼主|

发表于 2020-8-5 09:15:01


充电的话需要增加一个锂电池充电器,给外壳留一个USB孔位就好了

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
关于楼主

楼主的其它帖子

上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail