站内搜索
更多
#第十届立创电赛#stm32语音机械时钟
专业版

#第十届立创电赛#stm32语音机械时钟

工程标签

32位单片机

4.6k
0
0
2

简介

stm32语音机械时钟

简介:stm32语音机械时钟
第十届立创电子设计开源大赛

开源协议

GPL 3.0

创建时间:2025-10-07 20:34:35更新时间:2025-10-24 09:21:08

描述

注:* 为必填项

请在报名阶段填写 ↓

 

* 1、项目功能介绍


该语音机械时钟是一款创新型时钟,通过“机械动态显示+语音智能交互”的结合,重新定义了时钟的形态。该时钟具备多个模式,可通过语音控制实时显示时间,日期,年份,还可显示世界个别地区时间,如美国时间,另外还可显示个性化小表情,语音也可实现自定义,具有很强的可玩性。

该项目使用stm32作为主控,将两个PCA9685舵机驱动板级联,通过I2C通信与单片机通信,从而实现同时控制30个舵机,通过时钟芯片实时获取时间,通过语音模块实现人机交互。

实物图:

 

*2、项目属性


本项目首次公开,未参加其他比赛,未在学校进行答辩。

* 3、开源协议


GPL3.0开源协议

请在竞赛阶段填写 ↓

 

*4、硬件部分


4.1 系统组成及工作流程
 

 

通过观察上图可知该语音机械时钟的具体工作流程以及大致工作原理。

其中:

主控:STM32F103C8T6,价格低廉,资源广泛,易于开发,且性能足够。

语音模块:ASRPRO2.0,操作简单,识别率高,是进行语音控制的理想选择。

舵机驱动板:PCA9685,具有16路舵机驱动,非常适合需要同时控制多个舵机的项目,且相较于其他舵机驱动板而言,价格较低,性价比很高。

时钟芯片:DS1302,价格便宜,计时精准。

MG90S舵机30个

 

4.2 机械结构

定制一张70*30的亚克力板,作为表盘,上面切割出可以装上舵机的卡槽,然后将舵机按照下图所示进行编号并安装,然后将舵机按照编号插到舵机驱动板的对应引脚。(表盘CAD图纸见附件)

 

 

将两块PCA9685舵机驱动板级联,右边那块驱动板上控制通信地址的两个引脚按下图所示焊接到一起,这样做的目的是改变其I2C通信地址

 

组成数字的色块是3D打印的,将色块按照如图装到舵机上,色块表面贴上白色贴纸,与黑色表盘形成反差。(3D打印文件见附件)

 

 

舵机供电是用一个5V10A的开关电源,因为30个舵机同时运转所产生的瞬时电流还是很大的,引出正负极接到舵机驱动板的V+和V-。

 

4.3 原理图

电路板基本都是靠各个模块堆出来的,所以没有什么电路设计,只画了个拓展版,大佬勿喷。

 

PCB

语音模块需5V供电,我当时图方便直接引出两个引脚,各位可以搞个DC口。

 

*5、软件部分

5.1 主体程序流程


 

5.2 STM32端

  5.2.1 主体文件

5.2.1 核心代码(完整见附件)

PCA9685舵机驱动板代码:

stm32通过I2C通信控制PCA9685舵机驱动板。

// 初始化PCA9685
void PCA9685_M_Init(void)
{
    MyI2C_Init();
    
    // 复位PCA9685
    PCA9685_M_WriteReg(MODE1, 0x00);
    Delay_ms(10);
    
    // 设置为正常模式,不响应子地址,使用寄存器自动增量
    PCA9685_M_WriteReg(MODE1, 0x01);
    Delay_ms(10);
    
    // 设置输出模式为推挽输出,无反向
    PCA9685_M_WriteReg(MODE2, 0x04);
    Delay_ms(10);
    
    // 设置PWM频率为50Hz,适合舵机控制
    PCA9685_M_SetPWMFreq(50);
}

// 向PCA9685寄存器写入数据
void PCA9685_M_WriteReg(uint8_t reg, uint8_t data)
{
    MyI2C_Start();
    MyI2C_SendByte(PCA9685_ADDR_M 8) & 0x0F);
    // 写入OFF值的低8位
    PCA9685_M_WriteReg(reg + 2, off & 0xFF);
    // 写入OFF值的高4位
    PCA9685_M_WriteReg(reg + 3, (off >> 8) & 0x0F);
}

// 设置舵机角度(0-180度)
void PCA9685_M_SetAngle(uint8_t channel, uint8_t angle)
{
    uint16_t pulse;
    
    // 限制角度范围
    if (angle > 180) angle = 180;
    
    // 计算脉冲宽度对应的PWM值
    // SG90舵机: 0.5ms对应0度, 2.5ms对应180度
    // 50Hz频率下, 周期为20ms, 4096个刻度
    // 0.5ms = 2.5% of 20ms = 4096 * 0.025 = 102
    // 2.5ms = 12.5% of 20ms = 4096 * 0.125 = 512
    pulse = 102 + (uint16_t)((angle / 180.0f) * 410);
    
    // 设置PWM: on=0, off=pulse
    PCA9685_M_SetPWM(channel, 0, pulse);

 

语音模块代码:

语音编程软件为为天问51,该软件为图形化编程软件,即使不会编程的人也可快速上手操作。

 

 

*6、BOM清单


 

*7、大赛LOGO验证


该图为电路板背面

 

* 8、演示您的项目并录制成视频上传


 

 

 

前往查看更多详情 >

 

设计图

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

BOM

暂无BOM

3D模型

序号文件名称下载次数
暂无数据

附件

序号文件名称下载次数
1
语音机械时钟stm32源码.zip
28
2
语音控制代码.zip
26
3
表盘CAD文件以及色块3D打印文件.zip
34
4
物料清单.zip
32
克隆工程
添加到专辑
0
0
分享
侵权投诉
知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

底部导航