520今天来DIY一个心动的

在北京治疗白癜风需要多少钱 http://baidianfeng.39.net/a_yqyy/220319/10461911.html

还记得上个情人节(2月14日),柴火菌给大家秀了秀柴火认证会员陈子平完成的“心动信号”情人节礼物吗?这个礼物可谓是酸哭一众小伙伴,纷纷攘攘着从哪里能够买到这个科技感十足又炫酷的礼物呢?

买一个总归不如做一个来得有诚意,这不柴火菌已将把教程奉上了,一起DIY起来吧!开源即爱?????感谢子平分享。有所启发,欢迎评论来唠~

(更多同作者项目:自制激光切割机、自动演奏钢片琴)

加入柴火圈子,成为认证会员:请戳这里

大家好,很高兴又跟大家见面了,这次我带来了有关情人节主题的作品“心动信号”。为什么叫心动信号呢?

图1心动信号完成图

一直想做一款酷炫、浪漫、有价值、有意义的情人节礼物送给爱人。忽然间来了灵感,能不能将自己的心跳实时显示出来,把它做成一个作品呢?

于是逐步完善想法,一颗跳动的爱心,寓意着全心全意,然后再结合千层镜的效果将心跳层层放大,如果把这颗真挚的“爱心”送给你的Ta,想想就够浪漫!

而跳动的信号展示的正是此时此刻自己的情境与心跳,还有一层的含义就是爱人内心的悸动,所以故名“心动信号”。

下面我将开始介绍“心动信号”的制作过程,希望这次的分享能给大家带来一些启发。

图2项目思维导图

项目介绍

这个项目整体呈现心形,正面不开电源的情况下是一面镜子,可以用于梳妆打扮。打开电源后,内部的灯带可以展示酷炫的灯光,透过半透镜和反射镜相结合产生无限空间的效果。

装置后置一个心跳传感器,将手指放上可以读取自己的心跳信号,并用灯带显示,在制作过程中陆续新增了可调RGB心跳颜色、十种光流模式和随机模式等功能,并且可以通过手机APP进行实时的控制。

整个项目一共分为4大部分:外观结构设计、电子部分、程序控制部分、APP部分。

01外观结构部分

构成项目的主体,包含半透镜、反射镜、WS灯带、3D打印壳体,整体采用紧凑设计。其中关键的地方是确定灯带的数量与心形的轮廓。

再通过Solidworks进行3D建模确定各个零部件的相对位置结构,用3D打印机制作出来。

02电子部分

控制部分采用Arduino  Pro  Mini,主要原因是比较小巧,整体尺寸只有拇指大小,节省内部空间。

显示部分采用WS灯带,每一颗灯珠都有独立的IC,控制灯带只需要一根数据线。

心跳传感器用的是PulseSensor,这款传感器迷你小巧,对比其他种类的有很多优势比如反应快速、尺寸小、稳定等,通讯部分用的是蓝牙HC-05模块。

03程序控制部分

总共分为两大块,一个是灯带显示,一个是心跳检测部分。

灯带控制需要加载Fastled库,通过此库可以非常轻松的驱动WS,并做出很多酷炫的效果。心跳检测部分最关键的要点在于检测出心率,而心率的检测需要分析心跳的波形并捕捉正确的峰值信号。

04APP部分

APP程序部分采用的开发工具是APP  Inventor,运用其图形化的编程方式可以非常轻松的设计出想要的APP。

先设计操作的界面,再增加相应的功能,其中的关键点在于读取色盘的彩色信息和反馈RGB值,手机APP发送RGB值,蓝牙接收,Arduino控制灯带改变颜色。

图3材料清单

制作过程

接下来开始介绍详细的制作过程,首先准备好项目的所要用到的电子模块和耗材。

附上材料清单(图3)还需要准备一些工具:3D打印机、电烙铁、螺丝刀、尖嘴钳等。

图4CAD绘制心形

01用CAD软件绘制心形轮廓

绘制过程中需要三点:

注意弧线之间的过渡要平缓

心形内部的空间要满足需求不能太小

轮廓要能够刚好放下偶数倍的灯带

如果不满足则需要反复修改,因为这个心形轮廓至关重要,会影响后续的步骤。

完成后将轮廓导出到激光切割机试切,留下内轮廓,用灯带进行放置测试,看尺寸是否合适。

还有一种方法是测算出单个灯珠的距离再除以轮廓的周长,使其达到偶数倍,再进行试切配合,这样可以缩短修改时间。

图5WS引脚图

02进行WS的测试

WS每个灯珠都有4个引脚分别是VDD、DOUT、VSS、DIN。VDD是电源供电,VSS是接地,DIN与DOUT是控制线。

所有灯珠都通过此线进行串联控制,头部灯珠DIN引脚连接Arduino数字引脚。

图6ArduinoProMini引脚图

控制器使用的是ArduinoProMini,最主要原因是小巧,总体尺寸为33mm*18mm,还有一点是尺寸小了但引脚完全够用。

14路数字引脚外加8路模拟引脚,唯一缺点就是烧写程序稍微麻烦一点,要焊接插针引出串口和DTR引脚来烧写。

图7用Fastled库驱动WS

驱动WS,可以使用Arduino的FastLED库,其中DATA_PIN为WS所接的3号数字引脚。NUM_LEDS这个参数设置灯珠的数量,由于是测试这个参数就采用默认的60。

使用此库需要注意的一点是在程序初始化的时候要加入一条delay语句,时间可以是-ms之内,保证其成功加载。

EVERY_N_MILLISECONDS控制定时执行的程序,一般用此语句执行颜色变化的作用“gHue++”,当然可以改变其执行的程序完成不同的功能。

为了方便改变灯带的色彩一般使用CHSV语句,使灯带采用HSV的色彩体系,只需要将色彩度的H用变量gHue替代就能很方便的控制其颜色。

还有一条比较关键的指令是fadeToBlackBy控制灯带降低亮度,有了这条语句就能够将这条灯带的亮度降低,省去了用for循环的烦恼,结合“

”运算就能很轻松的实现类似流星划过的光流效果。

图8灯带效果测试

把灯带嵌入切割好的心形轮廓内部,上传程序测试灯带(图8)。

图93D建模

03心形轮廓导入Solidworks进行建模

根据之前设计好的心形轮廓,将此轮廓导入Solidworks进行建模。测量出WS灯带尺寸和各传感器的大小,设计出外壳、分隔板、底盖、传感器安装孔等。

根据整体模型导出半透镜(第一面镜子)外形轮廓和反射镜(第二面镜子)的外形轮廓。

图D打印零部件

04制作外壳

将设计好的模型导入3D打印机,打印各零部件。

图11打印好的壳体

各部件已经打印好,进行组装测试,验证结构是否合理,配合间隙是否需要修改。

图12外壳喷漆

结构确定好后,下一步进行喷漆,因为作品主题是爱情,黑色并不符合,用黑色材料的原因是为了突出边框。

主体色彩采用白色,白色代表纯洁是爱情的象征,黑色材料内部形成心形内边框,黑白相间显得更有层次感,所以外壳采用白色喷漆工艺。

图13安装灯带

将灯带背胶撕去,贴合在心形外壳内部,手指轻轻按压使灯带贴合紧密。

图14激光切割镜片

从solidworks中导出半透镜(第一面镜子)外形轮廓和反射镜(第二面镜子)的外形轮廓。

导入激光切割机进行加工,切割时注意要将镜片悬空,以免激光的残余热量透过蜂窝板将镜片熔化。

图15加工好的镜片

加工完毕一共两块,左边的是半透镜,右边的是反射镜。加工好迫不及待撕下保护膜,查看切割效果,后面还要贴回去因为过程中镜面容易刮花。

图16固定镜片

正面的半透镜由于外观原因,就没有采用螺丝固定的方式,使用胶水固定。边框涂上AB胶半透镜放上面,当时没有找到合适的按压工具,于是就顺手拿了一瓶没喝完的矿泉水放在上面,等待胶水凝固。

图17测试千层镜效果

将反射镜装入,开启灯带,测试千层镜的效果。由于第一层是半透镜,正面的光可以射入内部同时内部的光也可以射出,所以可以看见内部效果。

内部灯带发光,在第二面反射镜的作用下,光源反射进入半透镜,由于半透镜的背面是半透反射镜,大部分光源发射回反射镜,形成不断叠加反射的效果。

另外一小部分光源向外射出使人眼可见,但每一次的反射都会有光源射出外部损耗,于是形成了重叠空间渐隐效果。

图18Pulsesensor脉搏传感器

测试心跳传感器

心跳传感器采用的是PulseSensor脉搏传感器,尺寸只有15mm的直径,非常小巧迷你。这款传感器开发的目的是用于穿戴式设备,所以应用于心动信号这个项目非常合适。

图19连接Arduino

连接Arduino,PulseSensor心跳传感器一共有三根引脚分别是:“S”端信号线连接Arduino模拟引脚A0,“+”端引脚连接3.3-5V正极,“-”端引脚连接电源负极。连接完成后传感器的探头会呈现绿光状态,代表正常工作。

图20测量原理

PulseSensor心跳传感器的测量原理,将其放置在手指处,利用人体组织在血管搏动时造成透光率不同来进行脉搏测量。

传感器对光电信号进行滤波、放大,最终输出模拟电压值。Arduino通过将采集到的模拟信号值转换为数字信号,再通过计算就可以得到心率数值。

图21示波器测量心跳信号

为了更好的分析心跳的波形,先用示波器连接PulseSensor对波形进行采集,方便后续的分析。

图22心跳波形图

每一次的心跳都存在两个高峰,先经过第一个小高峰,再产生第二个高峰,第二个高峰过后会产生一个下降的最低点,两个最低点的时间长度就是一个心跳周期,称为“IBI”。

把最高点标记为“P”,最低点标记为“T”。从波形图中可以看出第一个小高峰也会产生一个最高点和最低点,使一个周期产生两个高低峰,所以如何过滤第一个高峰是需要解决的问题。

下面将讲解如何通过算法解决这个采集心跳周期的问题。

图23定时器设置

设置定时器Timer2中断,TCCR2A寄存器用于设置定时器运行模式(CTC模式),TCCR2B寄存器用于设置分频器,0x06为16进制数,转化为二进制为,对应分频器为。

OCR2A为计数比较寄存器0x7c为十进制,等计数达到时,触发定时器中断。TIMSK2为中断屏蔽寄存器,用于开启定时器中断。sei函数是开启所有中断。

Arduino的晶振是16MHZ,也就是一秒钟发生次的震荡,每发生次震荡,计数器加一,等计数器达到时触发中断。中断时长计算公式:

中断时长=1/(//(+1))=0.S(2ms)

每2ms的时长采集一次数据并计算。

图24心跳检测算法

图25心跳检测算法

下面我讲解一下这个算法的核心思想:通过捕捉最高点P与最低点T,计算出中间点thresh过滤掉第一个小高峰,判断捕捉时长和传感器数值是否超过中间值,是则进入上坡阶段,当传感器低于中间值时则进入下坡阶段,刷新数据,进入下一次循环。

记录每次捕捉心跳的时间为N,当Nms的时长时,进入捕捉心跳环节,当N2ms时,则说明未有手指放入传感器,此时传感器时长刷新,第一心跳和第二心跳参数重置开启过滤,等待手指放入。

每次周期记录波形最高点P和最低点T,其中一个关键点是对第一次心跳的过滤firstBeat,对第二次心跳secondBeat进行IBI数值初始化,以修正传感器数值,计算出合适的中间值。

每次心跳周期将IBI时间记录在rate[]数组当中,runningTotal计算出IBI的平均值,最后ms/runningTotal求出心率BPM。

图26HC-05蓝牙模块

通讯模块采用HC-05蓝牙模块,连接蓝牙模块需要注意供电最好3.3V,蓝牙TXD引脚连接ArduinoRXD引脚,蓝牙RXD引脚连接ArduinoTXD引脚。

因为没有主从机就不需要设置AT参数,初始化波特率Serial.begin(),直接上串口通讯,发送数据即可。

图27焊接好全部电路

06焊接电路

将蓝模块、心跳传感器、ArduinoProMini、电源模块、开关、锂电池等焊接在一起,这时可以测试一下整个电路能否正常运行,最好再预留一个烧写程序接口方便后续调试参数。

图28准备组装

07组装部件

准备好之前打印的部件,下面开始组装。

图29安装隔板

隔板对反射镜起着固定的作用。

图30固定隔板

通过侧边的螺丝孔对隔板进行固定。

图31安装传感器

将心跳传感器放入安装孔中。

图32放置海绵

在传感器底部放置海绵,填充安装间隙,防止传感器使用过程中震动,提高稳定性。

图33安装传感器固定盖

用1.5mm自攻螺丝固定传感器。

图34传感器固定完成

翻过来查看传感器的固定效果。

图35电源开关

将电源开关放入预留的开关孔内。

图36固定电源开关

用1.5mm自攻螺丝固定电源开关。

图37锂电池贴上海绵双面胶

为了方便电子模块的摆放,用海绵双面胶进行固定。

图38固定锂电池

找准好锂电池放置的位置,注意要预留其他电子模块的空间,按压将其粘牢。

图39蓝牙模块贴上双面胶

蓝牙模块也用双面胶进行固定。

图40固定蓝牙模块

将蓝牙模块固定到最左边的位置,把中间的空间预留给ArduinoProMini。

图41ArduinoProMini贴上双面胶

双面胶尽量小一些,预留出引脚焊接口。

图42固定ArduinoProMini

这样主要的几个模块就已经固定完成了,剩下的空间已经不多,刚好够放电源模块。

图43电源模块贴上双面胶

给电源模块贴上双面胶。

图44固定电源模块

经过几次的测试,电源模块这样放置刚刚好。

图45盖上底盖

整理好连接线,盖上底盖。

图46固定底盖

用1.5mm自攻螺丝固定底盖。

图47-48正、背面完成图

图49撕下保护膜

撕下保护膜,这样心动信号的主体部分就已经完成了。

图50APP界面

08制作APP

APP程序部分采用的开发工具是APPInventor,其图形化的编程方式可以非常轻松的设计出想要的APP。

界面窗口采用水平布局:

第一行是蓝牙连接与断开功能

第二行是蓝牙连接状态显示

第三行是开启随机灯光效果

第四行是开启固定灯光循环模式

第五行是灯光模式选择列表

图51APP界面

第六行是调色盘,调色盘的素材可以通过搜索网上的图片进行下载

第七行是爱心颜色随机模式,第八行显示当前选择的RGB颜色的色值

图52蓝牙部分程序

完成界面部分,接下来是制作APP的功能部分,首先是蓝牙连接部分,包括蓝牙连接按钮、蓝牙连接错误提示、蓝牙设备列表、定时器检测等几个功能模块。

图54调色盘程序

其中比较关键的部分是调色盘获取色值,实现原理如下:当调色盘圆球被触动时,调用此程序,判断目前处于哪个运行模式。

然后合并字符串发送圆球所在位置的RGB值信息,同时根据RGB色值,显示标签的背景颜色和内容。

图55联机调试APP

将手机与电脑连接进行联机测试,调整界面的大小比例,最重要的是测试各个选项和模式能否正常工作。

图56整机测试

09整机测试

这时需要着重测试蓝牙连接功能、串口数据接收、RGB灯光效果、以及各种模式是否工作正常,还有一点是程序运行是否流畅。

对蓝牙数据解析是否完整,要注意蓝牙模块的数据接收不要用虚拟串口引脚,最好直接使用TXD和RXD引脚进行数据接收。

图57心跳模式

当手指没放传感器时,是自动光路模式,运行APP上设置的各种光路模式。当检测到有手指放入时,立刻进入心跳模式,实时捕捉心跳并显示,反应很灵敏,整体运行效果也非常nice。

总结

心动信号这个项目到这里就已经完成了,整体的效果还是很满意的,各种功能都和自己预想的效果完全吻合。

回顾制作过程,由于临近情人节才开始着手制作,在时间上比较赶,自己也不是很确定能否顺利完成。于是抱着试一试的心态全身心投入其中,在研发过程中虽然遇到了很多意想不到的问题,但都被一一解决。在这种沉浸式的研发过程中,收获还是非常大的,共花了三天时间制作。

滑动

转载请注明:http://www.abuoumao.com/hykz/396.html

网站简介| 发布优势| 服务条款| 隐私保护| 广告合作| 网站地图| 版权申明

当前时间: 冀ICP备19029570号-7