#申请原创#[url=home.php?mod=space&uid=760190]@21小跑堂 [/url]清理电脑文件时,发现了一个陪伴我度过宿舍生活的小制作。上传仅记录我的青葱岁月,免费分享程序和PCB(实在是不值钱的东西)
1、设计背景
在早晨时分,有一类人即使用手机设置了闹铃依旧无法正常起床。这是因为闹铃只提供声音与振动信号,在长期适应下,人体产生惰性。而本设计选择一种刺激更为强烈的光信号作为人体唤醒机制。光线会唤醒视觉系统,由它传递信号给潜意识,并叫醒脑部。
2、功能需求
使用RTC定时控制开灯
3、方案设计
MCU:APM32F103RET6
熄灯操作:使用SG90舵机对寝室灯开关进行“关”与“开”
定时功能:RTC模块
4、功能实现
4.1 MCU运行
上电之后使用PA7作为指示灯,闪烁2次。
系统时钟源:HSI
系统时钟:HSI 8MHz
APM32F103RET6引脚图:
4.2 熄灯操作
A、控制信号
暗灰——GND
红色——VDD
橙黄——脉冲输入。周期20ms,其中脉冲宽度从0.5ms~2.5ms,对应角度0°~180°,线性变化。
B、灯开关操作
关灯操作:配置60°转动,再转回松开灯开关。
关灯转动:60°脉冲宽度计算为1.16ms(0.66ms+0.5ms=1.16ms)
松开转动:0°脉冲宽度计算为0.5ms
操作之间延时500ms
开灯操作:与关灯操作相同,放灯开关的另一端进行控制
C、IO分配
关灯——PB5
开灯——PA5
注意点:舵机分为180度舵机和360度舵机,不要买错。
1)360度舵机
信号端只要输入一个50Hz(20ms)的方波信号,然后控制信号周期的高电平脉冲持续的时间就可以控制速度和正反转及停转。一个高电平脉冲持续的时间对应一个速度。
高电平为1毫秒~1.5毫秒时,舵机正转(1毫秒时正转速度最快,越版接近1.5毫秒越慢)
高电平为1.5毫秒时,舵机停转
高电平为1.5毫秒~2毫秒时舵机反转(1.5毫秒时舵机停转,越接近2毫秒反转的速度越快,2毫秒时以最快的速度反转)。
2)180度舵机
舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。以180度角度伺服为例,那么对应的控制关系是这样的:
0.5ms————–0度;
1.0ms————45度;
1.5ms————90度;
2.0ms———–135度;
2.5ms———–180度;
4.3 计时功能
使用MCU_RTC计时
闰年判断方法:四年一闰,百年不闰,四百年再闰
//输入:年份
//输出:该年份是不是闰年.1,是. 0,不是
u8 Is_Leap_Year(u16 year)
{
if(year%4==0) //必须能被4整除
{
if(year%100==0)
{
if(year%400==0)return 1;//如果以00结尾,还要能被400整除
else return 0;
}else return 1;
}else return 0;
}
| 时间与秒换算
时间
| 秒数
| 1分钟
| 60
| 1小时
| 3600
| 1天
| 86400
| 28天
| 2419200
| 29天
| 2505600
| 30天
| 2592000
| 31天
| 2678400
| 1平年
| 31536000
| 1闰年
| 31622400
|
4.4 串口通信修改RTC
串口指令分为10个,T0~T9
1)例如配置当前时间为2023年05年21日13点00分00秒,则依次输入如下串口指令:
2)例如配置闹钟时间为2023年05年21日8点30分00秒,则依次输入如下串口指令:
5、硬件说明
5.1 灯座
宽:
长:
PCB:
F、手册资料
|