收藏官网,优惠快人一步
您可以尝试通过快捷键 CTRL + D 加入收藏夹
“盛思锐传感器”第九届立创电子设计开源大赛火热报名中,现在点击报名立创电赛赢2万现金大奖,报名后全阶段可触发福利!
大赛网址:DIY.SZLCSC.COM
为了给大家些创作灵感,今天带来第八届立创电赛优胜奖项目《智能闹钟》案例分享!本文作者:瑞萨MCU杯第八届立创电子设计开源大赛选手@lsjl66,禁止商用,未经许可禁止转载。
1.时钟显示-----通过按键设置保存后可显示时钟
2.温湿度显示-----电路中设计了DHT11传感器,可实时显示所测环境温度,湿度,每5秒刷新一次数据
3.闹钟设定-----可设定一个任意时间的闹钟,闹钟状态支持开启和关闭
4.联网校时------为了解决走时不准确,以及不想手动调时的问题,在原基础上增加了联网校时(使用esp01s模块),每两分钟更新一次,时间的误差调整在1S之内
5.掉电保存数据-----在掉电之前,每分钟保存一次数据到flash;闹钟在每次设定完成之后都会保存到flash,避免突然断电导致每次上电都需要重新设置闹钟
6.内置电池,可独立工作-----内置500mah电池,可供时钟在外部电源断开后工作一段时间
7.充放电保护电路-----设计了TP4056进行小电流给电池充电,及DW01A和FS8205组成的电池保护电路,保证电池在充放电及工作的过程中不会出现问题
8.电源切换-----由于此时钟一般是由外部电源供电,为了避免外部电源供电和电池供电冲突,因此设计了电源切换电路,保证两者同时存在时,由外部电源供电,没有外部电源时,由电池进行供电
本项目来源于EDA暑期训练营2023,电路和软件设计参考官方方案,同时融入了自己的想法和设计,项目首次公开
项目使用GPL3.0协议
时钟主控芯片电路,控制时间显示,以及其他功能的进行。
电源切换电路,电路虽然简单,却能起到重要的作用;当VBUS(外部电源)没有供电时,Q2的栅极被下拉电阻拉低,Q2Mos管导通,切换为电池供电;当VBUS(外部电源)供电时,Q2的栅极电平被VBUS拉高,Q2Mos管关闭,切换为VBUS(外部电源)供电。
DHT11温湿度传感器电路图,5V供电,这个上拉电阻用于协助数据传输。因为DHT11的数据口是漏极开路,如果不接上拉电阻,则只能输出低电平和高阻态,不能输出高电平,因此需要外接上拉电阻,否则无法输出1。DHT11的工作电流约为1mA,VCC一般为5V,则电阻R=5V/1mA=5KΩ。一般3.3k~10k都可以。
ESP01S电路图,ESP01S和瑞萨单片机的通信方式使用串口通信的方式。这里本来设计的是和串口2通信的,但由于软件上没有调试出来,因此改为和串口9进行通信(串口9)是正常工作的,但是需要注意的是串口9是用来串口烧程序的,如果先焊接了esp01s,就会影响程序烧录,因此需要先用串口烧录好瑞萨芯片的程序,以及esp01s的程序,再焊接esp01s。
蜂鸣器电路电路图,用IO口控制mos管的开管,来控制蜂鸣器发声;这里使用无源蜂鸣器,因此使用IO输出PWM控制蜂鸣器发出声音。
3.3V降压电路,用于给esp01s供电,这款LDO具有低压降的特点,输入最低3.6V就可以输出3.3V的电压,刚好适合3.7V锂电池供电的降压电路。
功能按键电路,用于修改时钟的设定,以及查看设定等。通过将按键的一端接地,一端接瑞萨芯片的IO口,连接按键的IO口通过软件设置电平上拉;当按键按下时,对应的IO口电平被拉低,芯片可以读到对应IO口的电平并作出相应的工作。
复位,BOOT按键电路,用于串口程序烧录。
数码管电路图,直接连接主控芯片IO口,需要注意连接IO的各个数码管引脚字母顺序,以及网络名称,不然写出的程序可能达不到想要的效果。
电池充电电路图,TP4056作为经典的充电芯片,还是挺好用的,而且价格便宜。可以通过电阻设置充电电流,充电和满电都有指示灯提示。PROG设置充电电流大小,这里设置的10K,根据手册里公式计算,这里的充电电流大概是120ma。
充放电保护电路,DW01A和FS8205搭配,组成电池保护电路,当电压超过4.2V或者低于2.52V时,关闭FS8205mos管,避免电池过冲或者过放。
串口下载接口,用于下载程序。
写的头文件,及源程序主要程序在src中
主程序,对各个功能或引脚进行初始化,以及主函数的编写
串口回调函数,用于串口发送和接收数据
串口对接收到的数据进行处理,由于接收到的数据是ASCLL码,因此不能直接使用,需要进行转化。由于对时间的数据只需要0到9即可,因此只对ASCLL数据中为48到57的数字进行处理,得到需要的数字,其他的字符当做无用字符,等于0,避免干扰串口调节时间。再将数组中数据一一转化为需要的时间数据,便于后面校时。
串口校正时间,当串口接收数据完成后,判断是否是正确的时间,如果是,则进行校正。
将数据写入flash,避免数据丢失
在时间设定好后,时钟会一直运行此程序,获取RTC的时间,然后再显示。
闹钟程序,当到达设定的闹钟时间后,闹钟开启时,开始执行此程序,闹钟响起。在for循环里面有一个按键检测语句,如果闹钟响起,则进入for循环,此时按下按键3,就可以关闭闹钟。
蜂鸣器程序的编写,由于蜂鸣器是无源蜂鸣器,因此采用PWM驱动,先对PWM进行开启,再配置占空比,就可以进行驱动了,占空比大小决定声音大小,频率决定蜂鸣器音调。
定时器回调函数,用于数码管的显示,主要是时间显示,以及修改其他设定时的显示等,定时刷新数码管。
变量声明,方便后面使用,以及外部声明的使用,便于其他源文件里引用。
数码管显示库函数,对需要用到的数字和字母写好对应的函数,后面可直接引用对应的函数显示对应的数字或字母。
flash读取程序,在初始化中引用这个程序,就会在每次上电后,都会对flash里的数据进行读取。
flash写入程序,在对应的地址写入对应的数据。
对DHT11传感器进行初始化,每次接收数据前,向传感器发送高低电平信号,等待接收来自传感器的数据。
DHT11传感器数据读取函数,对从DHT11收到的数据进行处理。
注:以上是对瑞萨芯片程序的分析,下面是对esp01s模块程序的分析
由于esp01s只用于获取时间,因此程序很简单。使用Arduino进行编写,下图是对一些库文件的引用,以及变量声明
注:const char *ssid = " ";引号里填的是需要连接wifi的名称,const char *password = " ";引号里填的是wifi密码。
对串口初始化,以及需要执行的函数进行初始化(执行一次),先开启STA模式,连接需要连接的wifi,等待20S,如果20S未连接上设定的wifi,则开启AP模式,开启热点(智能时钟)供用户配置wifi,配置完成后连接用户配置的wifi
主函数,每两分钟向串口发送一次时间数据;小时,分钟,秒,输出的数据都是两位,便于瑞萨芯片收到数据后进行处理。
TPS5430DDAR/DC-DC电源芯片 | 1.11 | |
DS18B20+/温度传感器 | 4.39 | |
W25Q128JVSIQ/NOR FLASH | 2.1 | |
ADUM1201ARZ-RL7/数字隔离器 | 4.91 | |
STM32F030F4P6TR/单片机(MCU/MPU/SOC) | 2.24 | |
ADUM1201BRZ-RL7/数字隔离器 | 4.75 | |
STM32F103C8T6/单片机(MCU/MPU/SOC) | 4.23 | |
STM32F103RCT6/单片机(MCU/MPU/SOC) | 7.04 | |
STM32F103VCT6/单片机(MCU/MPU/SOC) | 7.8 | |
STM32F103CBT6/单片机(MCU/MPU/SOC) | 5.82 |
56万现货SKU
品类不断扩充中
科技智能大仓储
最快4小时发货
正品有保障
物料可追溯
明码标价节省时间
一站式采购元器件
您确定要删除此收货地址的吗?
您确定删除此收货地址吗?
content
content