总结:文章目录1.工作背景2.功能需求3.基本功能的实现1.首先材料选择2.方案设计2.第一版设计3.焊板4. 微机程序创建 5. 下载程序验证 4. 外壳设计 1. 图纸设计 2. 蒙砂亚克力板 5 重新设计 6 Android 设计 1 界面设计 2 程序设计 3 功能设计工作 Bilibili TV
文章目录 1.工作背景 2.功能需求 3.基本功能的实现 (1). 第一步:材料选择(2)、电路图设计(2)、初版PCB设计(3)、PCB板焊接(4)微机程序编写(5)程序下载验证4.外壳设计(1)CAD图纸设计(2)磨砂亚克力板 5.PCB重新设计 6.QT Android APP设计 (1)界面设计 (2)QT程序设计 (3)APP功能设计
Works Bilibili Mile 视频:【致
1.作品背景
在智能2021时代,我所有的年轻朋友都患有懒惰的症状,我也一样。 别睡了,开启王者荣耀。 你习惯玩手机时开灯,这样可以减少对眼睛的伤害。 我们最终赢得了一些比赛。 已经凌晨2点30分了,我开始感到困了。 当我放下手机,闭上眼睛准备睡觉时,灯光很亮,我很不安。 我本来很不想按那个必须下床走几步才能到达的开关,但房间的设计就是这样。 无法更改。 无奈,我挣扎着下床,扳动开关,轻松地睡着了。 作为电子专业的学生,我不会妥协。 我们必须设计一种无需起床即可关闭的灯。
2.功能需求
一旦有了想法,就需要大胆提供功能需求。 快点,这样你就不用起床关灯了! ! ! 蓝牙彩灯初步特点: 1.可以用手机控制灯的开/关。 2.您可以使用手机控制灯光的亮度。 3.您可以使用手机控制任何颜色的灯光。
3、实现基本功能
能不能实现功能需求取决于你公司的技术。
(1) 首先选择材质
1. LED 选择:WS2812 如果您想创建任何颜色的灯光,WS2812 是一个可靠的选择,因为它可以发出最流行的 24 位全彩 RGB 灯光。 2^24 = 16777215 种颜色。
2.单片机选择:STM32G0。 如今,MCU 如此稀有且昂贵,你显然必须考虑一下你的钱包。 WS2812的驱动时钟需要800KHZ左右,速度要求很高。 首先选择stm32。 考虑了价格,我选择了stm32g030c8t6那种6元包邮的。 3. 选择通讯模块:蓝牙模块 JDY-31 如果您想用手机控制灯光,首先考虑使用蓝牙模块。 考虑价格并为您的整个网络选择最便宜的蓝牙模块。 相对于JDY-31、HC-05来说体积小,但连接速度不是很快
使用这三种主要材料,就可以开始设计你的原理图了
(2 ) 电路图
1、单片机需要3.3V电源。 首先,我们将设计电源部分。 首先我们使用USB向ws2812提供5V,然后使用降压芯片将其降压至3.3V并提供给MCU。
2.设计一个最小的单片机系统,预留下载接口,方便使用ST-LINK下载程序。 3、然后连接蓝牙和按钮作为控件,保留LED作为指示灯。 4. RGB灯电路设计。 这里有两组LED,由两个IO口控制,防止LED过多导致信号失真。 这个原理图已经准备好了。
(2)、第一版PCB设计 1. 根据原理图,将相应的封装导入到PCB中,进行布局布线,设计出淘宝客服可以打印的PCB图。 2D:
3D:然后给淘宝。 在这里,我们推荐Kariso,价格便宜,质量高。 这是第一个打印的PCB:
(3)焊接PCB
1.当然,打印完PCB后,还需要将元件焊接到PCB上。 第一块板已焊接您不需要一次焊接所有东西。 首先焊接电源部分,检查电源芯片是否工作正常。 比如我画的板子上的USB母座封装与原理图不符,正负极直接接反了。 这很容易损坏零件。 确定电压正常后,焊接其他部件
(4)编写单片机程序
单片机程序包含很多知识 1.轻量级多任务系统 2.蓝牙数据自动定义 控制协议、蓝牙定义无线升级单片机 3、多种控制模式按键+蓝牙 4、多功能按键,单击、双击、长按 5、ws2812系列控制 6、呼吸灯算法 7、颜色渐变算法...
/* ****************************** ********** 函数名称:DIS_TASK()* 输入参数:无* 输出参数:无* 功能:任务显示 ****************** ****************** ** *****/void DIS_TASK(void){static u8 r=0,g=0,b=0,a=0, dir=0;static int i,cnt=0;static int color_rgb; ); //固定格式应该在(1)期间开始 {if(SysState.Dis_flag == 1)//显示可以更新{/******************** ** ***** **静态******************** ******************/if(SysState. Dismode == DisMode_Static)//静态{SysState.Dis_flag = 0;RGB_Refresh(SysState.StaticRgb,LED_NUM);//显示 RGB2_Refresh(SysState.StaticRgb,LED_NUM);//显示}/********* ********** ***呼吸************ *********************/else if(SysState.Dismode == DisMode_Breathe)//呼吸{SysState.Dedlay_Time=20;if(dir==0){a += (1+a*10/0xff);if(a > 0xf0)dir = 1;}else if(dir){a -= (1+a*10/0xff);if(a >16)%0x100 )*a/0xff;g = ((SysState.StaticRgb>>8)%0x100)*a/0xff;b = ((SysState.StaticRgb>>0)%0x100)*a/0xff;color_rgb = (rLabel_Init() ; this->PushButton_Init(); this->setFocus();}MainWindow::~MainWindow(){ bin_save(FileInfo); }// 启动代码 void MainWindow::Start_Init(){ //背景图像设置 this->setStyleSheet("QMainWindow{border-image: url(:/pic/btmenuv2.jpg);}"); //获取屏幕大小 QScreen *screen = QApplication::screens(). 0); src_w = 屏幕->size().width();
评论前必须登录!
注册