系列文章目录
第一题 基于单片机的超声波测距器设计
第二题 基于51单片机的自动浇花器设计
第三题 基于51单片机的红外遥控自动风扇设计
第四题 基于STM32的条形码识别器
0 前言
🔥近几年随着人工智能等新技术的不断火热,带动了嵌入式等的传统行业的进一步发展。最近带过的几届同学反馈:以往的毕设题目缺乏创新性和亮点,不能满足学校的答辩要求。为了方便毕业生们顺利、省心、高效的通过毕设,这里分享一些真实、优质的毕业设计。
今天给大家分享一个比较经典且有一定创新力的题目
🚩基于51单片机的红外遥控自动风扇设计
🥇首先对这道题目给出一个量化的评价(每项满分5⭐):
- 难度:⭐⭐⭐⭐
- 工作量:⭐⭐⭐
- 创新性:⭐⭐⭐⭐
1 题目
我们分析一下题目要求,提取如下功能点:
1、支持红外遥控,控制风扇的启停、加减速;
2、可以设定运行时间,选择风型;
3、上述功能可以在全自动和手动间切换;
4、可根据环境温度,自动调解风扇转速(自动模式下)。
2 方案设计
2.1 方案框图
分析题目功能点,结合以往的开发经验,初步构思整体方案,形成整体方案框图
2.2 器件选型
根据市售器件,进一步确定所用器件的具体型号:
单片机最小系统:主控为51系列单片机及外围电路(复位电路、晶振电路、供电电路),型号ST89C52;
红外收发模块:采用NEC协议的红外光通信模块,负责接受遥控器发来的信号,并交由主控解析,型号HX1838;
温度传感器模块:采用串行单总线协议的温度传感器,负责采集环境温度,主控读取数据并解析,并根据温度调节风力大小,型号DS18B20;
实时时钟模块:采用厂商自定协议的时钟芯片,维持一套独立运行的时钟源,主控读取时钟数据,用于定时功能,型号DS1302;
LED指示灯:用于显示工作模式及风力,用于人机交互;
控制按键:系统调试或无遥控情况下的控制;
电机驱动模块:采用LM298N电机驱动模块,接受主控信号,并控制风扇电机的转动。
风扇部分供电采用220V交流转9V(或12V)直流电源适配器,使用LM2596S降压稳压模块进一步将电源降至5V,为控制系统供电。
2.3 小结-设计要点、难点解析
1、红外遥控的NEC协议的驱动、解析;
2、温度传感器单总线协议的解析,环境温度与风力的关系(在不同温度下,使用多大风力是适宜的);
3、时钟芯片的驱动与数据读取,定时功能的逻辑设计;
3、操作逻辑设定,具备良好的人机交互体验;
4、系统软件的控制流程设计,具备高效、高鲁棒性的架构。
3 硬件设计
使用 Altium Designer 软件进行硬件原理图和PCB绘制
4 软件设计
使用 Keil-C51建立工程
工程文件树
主程序源码局部展示:
void main(void)
{
/* 初始化 */
uchar cycle_cnt = 0;
Sys_Mode = LED_MODE_OFF;
Fan_Level = LED_LEVEL_0;
Time_Frame_Cnt = LED_TIME_0;
LED_mode_flush(Sys_Mode);
LED_level_flush(Fan_Level);
LED_time_flush(Time_Frame_Cnt);
init_ds1302();
Time_Convert();
Set_RTC();
//UART_init();
EX0init(); //初始化外部中断
TIM0init();//初始化定时器
get_ds18b20_level(); /* 将初始不稳定的温度值get出来 */
/* 主循环 */
while(1)
{
if(irok) //如果接收好了进行红外处理
{
Ircordpro();
irok=0;
}
if(irpro_ok) //如果处理好后进行工作处理,如按对应的按键后显示对应的数字等
{
Ir_work();
}
#if 0
/* 仅调试使用 */
Time_Convert();
sendByte(hour);
sendByte(minute);
sendByte(second);
Cur_Temptr = get_ds18b20_level();
sendByte(Cur_Temptr%10 + 0x30);
main_delayms(500);
#endif
Key_Scan();
/* 自动模式 */
if (LED_MODE_AUTO == Sys_Mode)
{
Key_Scan();
if (30 <= cycle_cnt)
{
cycle_cnt = 0;
}
if (0 == cycle_cnt)
{
Fan_Level = get_ds18b20_level();
}
speed_level_conctrl(Fan_Level);
LED_level_flush(Fan_Level);
/* 若开启了定时功能 */
if (LED_TIME_0 != Time_Frame_Cnt && 0 == cycle_cnt)
{
remain_time_judge();
}
}
/* 手动模式 */
cycle_cnt++;
}
}
5 实现效果
6 PCB工程及源代码
想获取工程文件及源码、相关问题、其他毕设题目解答,欢迎私信。
或关注微信公众号“电子设计万事屋”
总结
提示:这里对文章进行总结: