发作品签到
专业版

#第八届立创电赛#【立创电赛】基于瑞萨的桌面智能时钟设计

工程标签

1.2k
0
0
2

简介

基于瑞萨RA制作的一款桌面智能电子时钟,具有环境温湿度获取,数码管显示时间、温湿度,电位器调整电脑音量等功能。

简介:基于瑞萨RA制作的一款桌面智能电子时钟,具有环境温湿度获取,数码管显示时间、温湿度,电位器调整电脑音量等功能。

开源协议

LGPL 3.0

创建时间:2023-07-02 12:54:08更新时间:2023-08-04 03:03:03

描述

       本设计是参加嘉立创举办的2023暑期训练营设计出的一款智能时钟,给予在电脑前办公的小伙伴们一款桌面小助手,让你提升对时间的把握。
TF91E3nV9VGdVQjhzIPmTLv48LrX46Yn54L2VDiJ.png
 
Kf5GRcvKvPSHQrL4gqkeKEjayauviqfIUFz3pabY.jpeg
 
1.硬件架构说明
1.1 电源供电
      电源电路可由Type-C或锂电池为整个系统供电,接入USB供电的同时通过电池管理芯片给锂电池充电。
xLWzuGb9sNVRBMtB1JPQrlRGN0WszR88HLamCZ12.png
图1-1 电源输入部分
      Type-C接口选用USB-14p的常见型号,并使用其USB2.0部分与电脑进行通信,可进行串口烧写功能,CC1、CC2处外接5.1k下拉电阻作识别。
5koZBsyvO4LJHd0oflcRpfBwp7imCcvsYauP7GCW.png
图1-2 CCx说明
        Type-C协议的应用可参考这篇博文:
       锂电池部分:电源切换电路,通过一个P沟道的mos、一个下拉电阻以及一个二极管组成电源切换电路,当Type-C电源接入时,MOS管G极电压为5V,经过一个1N5819肖特基二极管,此时VCC电压是4.4V,也就是S极4.4V,不满足导通条件,电池电源截断。当Type-C接口断开,G极为低,S极由于体二极管的存在,会有将近3.5V左右的电压,满足条件,此时MOS管导通,由电池来给后续电路进行供电,由于1N5819肖特基二极管的存在,电流不会反向倒灌回去。
       通过一个TP4056锂电池充电芯片给电池进行充电,当Type-C接口接入时,同时会给锂电池充电,确保电量充足。Charge1作为充电状态指示灯,R6是充电电流反馈电阻,通过改变R6的阻值,可以改变整体的充电电流,R6阻值范围可参考图1-3。
NweLBtcT7WxJOnBE6VKMn852WXPGI2CMeP4egthU.png
图1-3 TP4056恒流充电电流与电阻关系
1.2 主控部分
       主控单片机使用的是R7FA2E1A72DFL,工作电压在1.6V到5.5V之间,最大时钟频率为48Mhz,最大支持128-KB的FLASH,16-KB的SRAM,12位的AD转换控制器。芯片内部集成有晶振,可以无需外部晶振,但是系统内部的晶振存在一定的精度误差,可惜本设计中没有加入外部晶振,也算以后的一个设计经验。
       芯片集成触摸功能,无需触摸芯片即可实现触摸功能。
       在电源输入部分加入100nf电容进行电源滤波,VCL引脚用于稳定内部电源的平滑电容,加入4.7uf的电容并连接到VSS引脚。
I8ZyVO2KpCgnezOkiBMwYDbqdOlgOfdJbTR5QBvj.png
图1-4 主控电路部分
1.3 独立按键
      采用四个按键作为时钟调节、键盘宏(有待实现)、切换显示内容的使用。
63McEkkZZEpXI0O70OyfsQCPmhXUcRSMvsN4kYSF.png
图1-5 独立按键电路
1.4 DHT11温湿度传感器
       采用DHT11温湿度传感器检测环境温湿度。
UYVyhQRMMqYvHiJgtKQNuGdXf0SJOetELduQJPJQ.png
图1-6 DHT11温湿度传感器电路
vasE6amEhCWYgHIiaNPUph1Zm0L105WEoIuPMCGj.png
图1-7 DHT11引脚图
      其驱动方法可参考下图,附件中也有DHT11的数据手册
PiWqPYqtOTCKOs91zAkwK3txgxjHm37YWHvNCGX0.png
图1-8 DHT11时序图
      数据格式为
i4rc7AThe0ISfUkf1MPQD0XtrlxMhOBYxODrdrUt.png
图1-9 DHT11数据包格式
      参考链接:DHT11温湿度传感器学习笔记_啦啦赛的博客-CSDN博客
1.5 四位数码管
       采用0.56寸共阴极数码管用于显示时间、温湿度等信息。
bJ0FqQToimXUZzapmgFNlRu9FWslzxtGcXrSIj2p.png
图1-10 0.56寸共阴级4位数码管电路
     驱动方法设计可参考图1-11电路图的引脚定义,共阳共阴的驱动方法大同小异,买对数码管拿到数据手册就很简单了。
FZLs386EXiRrH1yDQg23IXfpx4yTeBBOUoSLU1xt.png
图1-11 四位数码管引脚
1.6 电位器
      用到市面上较好买到的拨轮电位器,通过单片机芯片内置的ADC电位采集功能采集到对应的电位值,滤除低位数值的影响后可发送至电脑来调节电脑的音量大小。
TDI0KETUxuN1quOkcjpYnd7TO33gSxz9xZP2qSdT.png
图1-12 电位器
1.7 调试接口
       共有2种调试接口,一种通过FPC插座引出SWD调试端口,可用Jlink调试与下载(可惜身上没有,导致添加不了触摸方案),另一种串口部分则是板载一颗CH340N芯片,可用作串口烧写和上位机通信。
wz8jCFWeMTgzPl1v6HkNnC1ZQuu4dppXDcItpTfX.png
图1-13 调试接口
2.软件部分
     使用QT制作的简易上位机,上位机往下发送的数据格式为十六进制,而单片机往上发送则是Ascii码,也就是字符型数据,两者不统一也不影响,重要的是定义好上下通信数据包的接收与发送方法,例如十六进制就根据十六进制的数据含义来处理数据。
K4Plpf7VvNVA0md64DnWO9ceFuhx659aFC26oI8A.png
图2-1 上位机
     下面提供上下通信的数据包格式供大家参考,附件中也提供上位机软件。
控制位
包1
包2
包3
包4
解析
0xFF
0xCA
Hour
Minute
Second
NoThing
0xFF
同步时间
图2-2 十六进制的数据包格式(上位机往下发送)
完整数据
字符判断
数据内容
解析
"Volume=xx"
Volume=
xx
电脑音量
"temp=xx.x"
temp=
xx.x
温度
"hum=xx"
hum=
xx
湿度
图2-3 字符型数据包
2.1同步时间
     QT中定义一个时间系统时间类currentTime,再定义一个定时器,关联定时器溢出信号到定时器处理函数,在定时器处理函数中获取系统时间并保存到数组中:

// 获取当前时间

QDateTime currentTime = QDateTime::currentDateTime();

timer.start(10);

connect(&timer,SIGNAL(timeout()),this,SLOT(showTime()));

     然后就可以添加按钮"同步"的槽函数,发送时间同步信息到单片机了。

Get_year   = currentTime.date().year();
Get_month  = currentTime.date().month();
Get_day    = currentTime.date().day();
Get_hour   = currentTime.time().hour();
Get_minute = currentTime.time().minute();
Get_second = currentTime.time().second();
QDate date = currentTime.date();

QString timeString = QString("%1%2%3").arg(Get_hour, 2, 16, QChar('0')).arg(Get_minute, 2, 16, QChar('0')).arg(Get_second, 2, 16, QChar('0'));

serial.write(QByteArray::fromHex(HearData.toLatin1()));
serial.write(QByteArray::fromHex(QString("ca").toLatin1()));
serial.write(QByteArray::fromHex(timeString.toLatin1()));
serial.write(QByteArray::fromHex(HearData.toLatin1()));
serial.write(QByteArray::fromHex(HearData.toLatin1()));
qDebug()<<"时间"+timeString;
2.2获取单片机采集的温湿度信息
     根据温湿度传感器DHT11的数据手册,测量速率大于2s为佳,所以在单片机的rtc更新事件中每隔5秒发送一次:

//隔5秒读一次温湿度

if(rtc_second%5==0){//5S读⼀次

DHT11_Read();

printf("hum=%d.%d temp=%d.%d\n",humdity_integer,humdity_decimal,temp_integer,temp_decimal);

}

     上位机接收方法为:

if(buf.contains("hum=",Qt::CaseSensitive)){

QString hum =buf.mid(buf.indexOf("hum=")+4,2);

ui->Hum_Show->setText(hum+"°RH");

}

if(buf.contains("temp=",Qt::CaseSensitive)){

QString temp =buf.mid(buf.indexOf("temp=")+5,4);

ui->Temp_Show->setText(temp+"°C");

}

 
2.3调节电脑音量
      同理,单片机在ADC更新事件中获取电位值,映射到音量范围取值(0-100)发送到上位机,瑞萨内置的ADC精度为12位,也就是0-4095,滤除个位十位即对应0-4000,这样子有助于提升抗干扰。
N3gLEKVzmhL9Uz3ZjjQpeV6K1lvabJKd1RVfX8Ze.png
图2-4 电位转换公式
      这里的ADCValue就是滤除个位十位所获取的电位值,Data即为要设置的电脑音量值,这样子就可以将Data按照数据包格式发送到电脑上了,这里4000-ADC_Value是因为电位器往上转是电位小的方向,“与&”上0xfffe保证为偶数。

printf("Volume=%3d\n ",(4000-ADC_Value)/40&0xfffe);

 
       查阅了很多资料发现好像QT没有自带调整音量的功能,说是有什么调用window的API来完成,不过有一个B站博主的视频(虽然该视频的声音有点呃)提到可以用window自带的虚拟键码实现音量调整,经测试确实可以调整音量,并实现了音量调节功能。
       写在最后:本次训练营我觉得收获到很多东西,开发单片机的方法,查阅资料的途径,电子设计中常见到的问题,小窍门等等很多,当然本设计也出现了许多很可惜的地方,1个是嘉立创提供的3D打印劵2张劵没有及时激活导致过期,还有是蜂鸣器的引脚选到了P200,这个引脚没有输出功能,可惜了。
 
 

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
1
DesktopClock.zip
22
2
调节音量.mp4
1
3
基础功能演示.mp4
1
4
DHT11温湿度数据.pdf
2
5
同步时间.mp4
1
6
RA2E1数据手册(中英).pdf
2
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

评论

全部评论(1)
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航