所有分类
主题 主题
平台 平台
我的工作台
userHead
注册时间 [[userInfo.create_time]]
创造力 [[userInfo.creativity]]
[[userInfo.remark]]
[[d.project_title]]
articleThumb
[[d.material_name]]
timelineThumb
进入工作台
折叠
所有分类 我的工作台
展开

建党百年 | 教你用esp32点亮10片亚克力重温百年党史

Mr Guo Mr Guo 2021-06-20 00:37:05

#故事起源#

恰逢今年是建党100周年,为了用行动证明我心向党,旺仔爸爸计划以建党百年为主题设计一个作品,之前看到过拟辉光管的时钟非常有意思,不如借用一下这个创意,正好让我们跟随作品一起回顾党的百年历程,先通过演示视频来全面了解一下这个作品

#方案介绍#

1921年建党至今,祖国发生了翻天覆地的变化。我们脚下的这片热土,如今拥有世界第一公路里程,拥有世界第一高铁里程,拥有世界第一的架桥技术,拥有世界第一的巨型水电站建设技术,从“嫦娥”探月到“天问”着陆火星,从神舟一号到神舟十二号,从北斗组网到5G商用,从和谐号到复兴号,当今的中国,彰显出了大国的实力和魄力,那个曾背负落后腐朽枷锁的中国早已苏醒,那个曾被各国垄断技术的中国已然一去不复返,中国已然傲立于世界的东方

projectImage

在建党百年之际旺仔爸爸选取了建党百年来具有典型代表性的10件大事,将其刻制在10片40mm*60mm大小的亚克力上,使用了WS2812灯珠点亮每片亚克力

亚克力图案的选择十分关键,既要有代表性又不能太复杂,最好还能体现一下科技感,接下来我们一起跟随这十件大事重温百年党史

projectImage
projectImage

当然可以展示的内容远远不止这些,比如我国的跨海大桥,水电站,空间站,5G,蛟龙号,体育竞赛成就等都可以体现在上面,也可以展示一些为祖国做出巨大贡献的国之栋梁,感兴趣的伙伴可以去尝试一下

projectImage
projectImage

为了压缩体积和减少接线,这次我们特意设计了一款带有20颗WS2812灯珠的PCB板,上一期旺仔爸爸用电熨斗改造了一个回流焊加热台,这次正好可以小试牛刀

projectImage

此次作品的主控采用了ESP32mini的控制板,ESP32自带的蓝牙和Wi-Fi功能可能让我们更加随心所欲的远程操控,后续如果想要设计拟辉光管时钟也不需要做大的改动

projectImage

方案确定好后就可以展开设计了,首先我们来看一下都用到了哪些硬件材料

#硬件清单#

材料清单 材料清单
1x
ESP32mini
1x
RGB灯板
1x
200mah501230锂电池(5mm高30mm长12mm宽)
1x
200mm*200mm黑色和透明亚克力(2mm、3mm、4mm厚度的各一块)
1x
滚花铜柱、螺丝等五金若干
1x
导线及下载线
projectImage

#图纸设计#

使用Fusion360计算机辅助设计软件设计图纸,材料选用1-4mm厚度的亚克力板各一张,旺仔爸爸将固定的通孔以圆弧的形式放置在了四个角,为了方便下载程序和使用开关,中间层的亚克力设计成了半开放的状态,设计图纸如下

projectImage

十件比较典型的大事通过雕刻描线的工艺加工,还可以根据自己的喜好换成其他事件,或者在其他节日主题时换成对应风格的图案

将设计图进行装配、渲染检查无误后即可进行加工

projectImage

使用激光切割机加工出来后的效果如下

projectImage

十片亚克力雕刻图案

projectImage

除了旺仔爸爸选择的这十件典型的时间外还可以设计其他画面

projectImage

#电路设计#

这次我们将电路设计分为RGB灯板PCB设计和电路接线两部分

RGB灯板设计

RGB灯板的原理图如下所示,主要部件有WS2812灯珠,无声轻触按键和几个电容电阻组成,通过级联的方式将20颗WS2812灯珠串联在一起,电源采用并联的方式,而信号采用串联的方式

projectImage

每颗灯珠具体的引脚功能可以通过下图查看

projectImage

而无声轻触按键在电路中设计了一个上拉电阻让其信号变得稳定

projectImage

原理图绘制完成后就可以将原理图生成PCB文件了,紧接着我们根据原理图进行布线

projectImage

PCB设计完成后切换至三维模式查看3D效果

projectImage

最后检查没有问题后就可以送去打样了

projectImage

RGB灯板用到的焊接元件可以和打样同步进行准备,焊接材料如下:

 

材料清单 材料清单
20x
WS2812灯珠
3x
100nF电容
1x
无声轻触按键
1x
10K电阻
projectImage

元件准备齐全后,我们使用电熨斗回流焊加热平台进行焊接

projectImage

焊接完成效果如下

projectImage

电路接线设计

RGB灯板焊接完成后,我们需要将主控与RGB灯板接线然后进行功能测试,接线图如下

从接线图中我们可以看出在RGB灯板的OUT输出端增加了一颗RGB灯,其作用是作为氛围灯安装在底部位置

projectImage

电路设计完成后就可以进入激动人心的组装环节了

#组装#

此次作品的组装非常的简单,只需几步即可完成

第一步按照电路图将电源、RGB灯板与控制器焊接在一起

projectImage
projectImage
projectImage

第二步组装灯片上顶板和下底板以及滚花铜柱

projectImage

第三步安装亚克力灯片

projectImage

第四步将控制器、RGB灯板与亚克力外壳组装在一起

projectImage
projectImage

第五步将安装好的控制器部分与亚克力灯片部分组合,用4颗螺丝固定

projectImage

最后我们来看一下成品效果

projectImage
projectImage

不同颜色展示

projectImage
projectImage

组装完成后,最后就是程序设计了,开始程序设计前,我们需要先理清楚思路

#程序设计#

这是我们本次作品程序设计的思路,分按键和“Blynk”两种控制方式,每种控制方式都有三种运行模式

projectImage

程序设计主要涉及到两部分,一部分为Blynk移动端的控制程序的编写,另一部分为按键控制的程序编写,我们先来编写按键控制的程序

编写本次作品程序可以选择的编程环境有mind+,mixly,arduino

由于mind+编程环境esp32板卡下不支持Blynk,arduino ide对于大多数人来说还是比较晦涩难懂,所以本次的程序设计旺仔爸爸采用Mixly编程环境,没有安装编程环境的伙伴可以在官网下载最新版本的mixly软件

mixly程序设计
 

第一步,我们先来测试板载按键,通过串口打印的方式来查看按键的状态,下载如下程序,观察串口监视器中输出的数据可以发现,当按键按下时输出低电平也就是“0”,当松开按键是输出高电平也就是“1”,由此可知,我们的按键是低电平有效,查看电路原理图也可以发现这个按键其实接的是一个上拉电阻

projectImage

掌握了按键的状态后,我们就可以通过判断按键是否按下,按了几次或者是否长按来执行相应的任务了

不过磨刀不误砍柴工,将亚克力点亮的实质其实就是对RGB灯的控制,我们再学习了一下RGB灯的编程方法,再将RGB灯与按键结合起来应该会碰撞出意想不到的火花

第二步,RGB灯的控制,编写RGB灯的程序需要用到下面的程序块

projectImage

要想让RGB灯亮起来,我们需要对RGB灯进行初始化设置,需要设置控制RGB的管脚,灯珠的数量以及RGB灯的亮度,我们设计的灯板中有20颗灯珠,亮度的调节范围是0-255,如果设置的数值大于255,Mixly中默认会将输入的数值除以255的余数作为灯珠的亮度

关于RGB灯初始化的程序设计完成后,我们一起编写一个简单的程序来控制RGB灯点亮,编写下方的程序下载后会看到RGB灯隔1秒点亮一次然后隔1秒熄灭一次,如此循环往复,需要注意的是每次点亮或者熄灭RGB灯都需要增加的程序块才达到预期的效果

projectImage

如果单颗RGB灯可以控制,控制全部的RGB灯也是没有问题的,最简单的方法就是将上面的程序块多重复几次,当然还有更加简单的方法,比如我们可以使用一个"for"循环来实现20颗灯全部点亮成黄色

projectImage

事实上,我们除了可以使用程序块内置的颜色以外,还可以通过调节RGB的数值来调节出更加丰富的颜色,比如将"R"和"G"的值都设置为255时将会显示黄色,其中"R"、"G"、"B"的数值可以在0-255之间调节,理论上可以调节出256*256*256种颜色,如果将RGB的数值都设置为0则显示黑色,也就是全部灯珠熄灭,如果将RGB的数值都设置为255则显示白色

projectImage

掌握了基本用法后,就可以设计一些函数,让我们随心所欲的调用了

下面我们设置一个显示黑色的函数,这样在需要熄灭RGB灯时就可以直接使用这个函数

projectImage

接下来,我们将按键和RGB灯结合做一些有趣的案例

因为我们只有一个按键,所以为了让它尽可能增加更多的功能,我们需要使用多功能按键程序块,这样我们就可以设置单击、双击、长按等功能了

projectImage

我们设置按键为4号管脚,低电平触发,当单击按键时1号灯珠亮黄色,当双击按键时,先将所有灯熄灭,接着再将所有灯依次点亮为白色,这里我们调用了前面封装好的函数,当长按按键时所有灯珠熄灭

projectImage

现在我们学会了多功能按键的使用方法,观察RGB灯板可以看出,RGB灯板中20颗灯珠有序排列的,在PCB板设计时为了走线方便,单数列按照由上往下顺序排列,双数列按照由下往上的顺序排列,而我们有10片亚克力板,也就是每2颗RGB灯点亮一篇亚克力板,点亮的组合方式为单数列1-11、2-12、3-13、4-14、5-15;双数列6-16、7-17、8-18、9-19、10-20

projectImage

我们假设按键的朝向为正前方,而如果要让亚克力板由前往后点亮的话,则需要先点亮双数列的第一个组合6-16,接着点亮单数列的第一个组合5-15,以此类推

projectImage

那么对应的程序该如何设置呢,因为是单数列和双数列的切换,这时候我们可以采用判断奇偶数的方法来切换

我们设置一个“count”变量作为按键按下的计数器,同时判断其奇偶性,奇数就点亮单数列,偶数就点亮双数列

projectImage

为了让RGB灯珠的颜色能够变换,还可以继续改进,我们增加“R、G、B”三个变量来切换颜色,由于不同的颜色显示的效果不同,我们这里只选用显示效果比较明显的红、绿、黄三种颜色,使用“count”变量除以3取余数的方法来实现颜色的切换

projectImage

程序下载后我们来看一下按键单击的效果

projectImage

当RGB灯可以实现单击控制后,双击和长按也将不再是什么难事,我们可以分别设置单击,双击,长按几种模式的函数,前面已经讲解过的函数,由于篇幅原因这里就不展示了

projectImage

按键双击后的效果

projectImage

按键长按后RGB灯会从前往后依次点亮

projectImage

从上面的演示中可以看出我们增加了氛围灯的效果,是如何实现的呢

其实非常的简单,只需要增加第21号灯即可

projectImage

到此为止我们已经实现了通过按键手动和自动控制RGB灯的方法,当然如果我们有足够多的RGB灯板,修改部分程序即可实现单个IO管脚控制多个RGB灯板,相信拟辉光时钟也能轻松实现了

接下来我们只需要做简单的改进就可以实现移动端控制RGB灯,我们需要用到Blynk APP来实现远程控制

Blynk控制程序
 

编写程序前,我们需要对Blynk App做一些设置

第一步登陆账号,如果是第一次使用需要先进行注册,如下图所示“Login”为登陆,"Create New Account ”为注册

projectImage

输入账号密码进行登陆

projectImage

点击中间的三个点可以选择blynk的服务器,可以选择系统默认的服务器,也可以自行输入服务器地址,比如,这样组件可以随便使用,不受额度限制

projectImage

登陆成功后,点击“New Project”上面的+号新建项目

projectImage

点击右上角的感叹号可以看到关于本账号的基本信息

projectImage

接着选择主控为ESP32 Dev Board

点击“CONNECTION TYPE”选择连接方式

本次任务,我们可以选择“Wi-Fi”和蓝牙两种方式,在操控响应速度方面蓝牙模式会更快一点,基本没有延迟,本次作品我们以蓝牙方式进行讲解,这里我们选择“BLE”模式

projectImage

选择完成后,点击“Create Project”按钮,会询问是否向邮箱发送一封包含授权码的邮件,点击OK即可创建项目并收到这份邮件,当然你也可以在项目中找到该授权码,这个授权码是blynk移动端与ESP32控制板蓝牙连接的关键,在编程时会使用到

projectImage

点击右上角的六边形可以进入项目设置界面,在最下方也可以看到授权码的信息,如下图所示

projectImage

上述步骤完成后,我们可以看到如下界面,你可以把它理解为一个画布,接着可以在这个界面设置我们想要的组件了

projectImage

APP向左滑动可以添加组件,组件列表如下图所示,我们本次需要使用3个按键“Button”、1个蓝牙“BLE”组件

projectImage

加载好的组件,如下图所示

projectImage

接着我们需要在Blynk APP中对按键“Button进行设置,3个按键分别对应为V0、V1和V2虚拟引脚,按键设置有“PUSH”“SWITCH”两种模式可选

“PUSH”模式下,按键按下响应相应动作,松开时复位,“SWITCH”模式下,按键按下锁定当前动作,直到再次按下按键才会复位

三个按键我们统一设置成为“PUSH”模式即可

projectImage

最后还需要设置一下蓝牙模块准备工作就完成了,点击蓝牙模块会看到如下图所示的界面,接着点击“Connect BLE Device”

projectImage

选择搜寻到的蓝牙名称,这里的名称是在程序里设定好的,找到你自己设定的名字即可,比如我们使用的默认蓝牙名称为“Blynk”,

projectImage

选择好后之后点击“ok”,等待连接成功

projectImage

最后我们点击右上角的“三角形”就可以用运行这个程序了

projectImage

Blynk移动端的组件设置完成后,接着我们在Mixly中编写程序

projectImage

首先需要在邮箱中找到自己的授权码

projectImage

将授权码填写到程序块中,随后编写下面的程序

projectImage

通过测试得知,虚拟引脚按键按下时的状态为“1”,我们在程序中设置V0、V1、V2三个虚拟引脚分别触发三种不同的模式,当ESP32主控板接收到移动端发来的消息后就可以实现远程控制RGB灯了,我们来看下一下演示效果

单张画面切换

projectImage

多张画面自动切换

projectImage

流水灯模式

projectImage

至此,所有程序功能都已介绍完毕

最后奉上完整程序

projectImage

#总结#

本次作品的创意来源于拟辉光管时钟,向提供创意的前辈致敬

本次作品,我们学会了亚克力雕刻的技巧,PCB制版的技巧

多功能按键和RGB灯的编程方法

学会了Blynk的设置以及程序编写

不足之处是,亚克力板子增多后,显示效果会有所影响

写文章之时,正值神舟十二号发射成功之际,我们预祝他们圆满完成任务,平安归来!

 

projectImage

最后,在建党百年之际,我们回顾过去,在科技强国的探索之路上我们一直砥砺前行,我们开始有机会可以见证,见证开启时代的研精覃思,见证飞跃梦想的孜孜不倦,见证科技智能的突飞猛进,科技强则国强,科技兴则国兴。前途似海,来日方长,而如今由新一代的我们砌成的钢铁中华,必将实现祖国科技强国梦想,祖国也将长久傲立于东方

造物让生活更美好,我们下期见

Makelog作者原创文章,未经授权禁止转载。
8
1
评论
[[c.user_name]] [[c.create_time]]
[[c.parent_comment.count]]
|
[[c.comment_content]]