开源方案:基于ESP32的纯中文翻页时钟
来源:芯片大师发布时间:2023-07-193335浏览
询问 AI
工程名称:单体翻页时钟
工程作者:DaqoLee
前言
谁懂啊家人们……我竟然在有生之年看到了开源的纯中文时钟,还是翻页版本的!
一起围观一下~
全文导航
工程描述、结构描述、安装过程、注意事项、电路设计图、器件说明、程序源码、视频演示、开源资料下载

工程描述
我做了一个基于ESP32-PICO-D4设计的单体翻页时钟。

设计过程中,还顺便搞懂了二十四时辰……

这算不算是是纯正滴国风设计呢?

然而!这个时钟最大的亮点,其实是它的结构设计……
结构设计描述
本时钟的结构特点就是用PCB做框架,电机内置,把叶片滚轮设计成滑环,实现电机360度旋转。

3D模型
这种设计空间利用率高,能使结构更加紧凑。但成本也较高,不易装配和维护。

结构零件
本时钟的结构特点就是用PCB做框架,电机内置,把叶片滚轮设计成滑环,实现电机360度旋转。

3D模型
这种设计空间利用率高,能使结构更加紧凑。但成本也较高,不易装配和维护。

结构零件
安装过程
首先,准备好所有PCB和零件。

叶片、主控、底板、侧板
然后,就可以开始安装了:







上下滑动查看更多

DIY注意事项
本章节会说明一下:彩色丝印、叶片厚度、SMT的注意事项,以及后续的更新事项。
如果你想复刻,我个人会建议大家使用彩色丝印或双面面板打印。彩色丝印图示如下:

如果你想复刻,我个人会建议大家使用彩色丝印或双面面板打印。彩色丝印图示如下:

有需要的话,彩色丝印教程可戳下方图片查看:
这个时钟的叶片滚轮(滑环)有24/60两种。

24片的使用PCB打样,厚度建议是0.8mm。
60片的使用面板打印,厚度建议是≤0.5mm。
我的主控和底板已经在嘉立创SMT贴好。


需要说明的是——弹簧顶针不要贴在表面,最好是从PCB背部穿过来。这样做可以提高容错率。

目前的单体版我做了两个,一个显示二十四时辰,一个显示天气。
但其实这都是为了双体版在做铺垫!
双体版时钟长这样,可以期待一下~

电路设计图
这是主控、底板、挡板、电机转接、滑环的原理图。
主控原理图戳图可放大查看
底板原理图
其他原理图这是叶片、主控、底板、侧板的PCB图。



器件说明
| 名称 | 参数 |
|---|---|
| 主控芯片 | ESP32-PICO-D4 |
| 电机驱动 | TMC2209 |
| 锂电池充电 | TP4065 |
| 5V稳压芯片 | TPS63002 |

程序源码
网上有很多网络时钟的开源代码,因此程序部分也比较简单,把显示部分改成控制步进电机就可以了。
void ClockTask(void *arg)
{
EventBits_t uxBits;
Clock_config_t clockConfig = {
.wifiConfig = {
.sta = {
"ssid", //ssid
"password", // password
.bssid_set = false,
}
},
.ntpUrl = "ntp.aliyun.com",
.userKey = "userKey", //心之天气userKey
.location = "guangzhou",
.powerPin = GPIO_NUM_4,
.pages = 24, //叶片数
.ntpInterval = 30,//网络校准时间间隔/分钟
.speed = 2000, // 电机速度
.compensation = 1000, //步进数误差补偿
.stepperConfig = {
.stepPin = 27,
.dirPin = 26,
.enPin = 25,
.ms1Pin = 14, // 细分控制
.ms2Pin = 12, //
.timer_group = TIMER_GROUP_0,
.timer_idx = TIMER_1,
.miStep = MICROSTEP_16, //电机驱动细分
.stepAngle = 0.086//0.086 0.12 步进电机减速后的步进角
}
};
Clock1.config(clockConfig);
Clock1.init();
vTaskDelay(1000/portTICK_PERIOD_MS);
Clock1.runPages(Clock1.getTimeHour());
//Clock1.runPages(Clock1.getWeatherCode());
while (1)
{
uxBits = xEventGroupWaitBits(
clock_event_group,
SNTP_BIT | BTNJUMP_BIT | BTNLONG_BIT,
pdTRUE,
pdFALSE,
60000/portTICK_PERIOD_MS );//60000/portTICK_PERIOD_MS portMAX_DELAY
if(uxBits SNTP_BIT)//时间校准事件
{
//Clock1.runPages(Clock1.getWeatherCode());
//Clock1.runPages(Clock1.getTimeHour());
}
else if (uxBits BTNJUMP_BIT)//按键短按跳变/松开
{
Clock1.runInf(200); //短按微调时间
}
else if (uxBits BTNLONG_BIT)//按键长按
{
Clock1.powerOFF();//长按关机
}
else //最大等待时间,这里是一分钟刷新一次。
{
Clock1.runPages(Clock1.getTimeHour());
}
}
}视频演示
开源资料下载
如果你需要【电路、3D打印、程序、BOM表】等开源资料,请戳文末“阅读原文”获取!



*本文转载了「立创开源硬件平台」的用户创作,如有侵权,请联系删除
在看你就赞赞我!
点击这里查看原工程新闻来源:芯片大师,文中所述为作者独立观点,不代表icspec立场。更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj。


