一、基本介绍
项目名:
基于单片机的智能洗衣机系统设计
基于单片机的 多功能洗衣机系统设计
基于单片机的全自动洗衣机系统设计
项目名:智能洗衣机 | 多功能洗衣机 | 全自动洗衣机
单片机类型:STM32F103C8T6
具体功能:
1、通过模式按键可以选择不同模式(标准、浸洗、强洗、快洗),通过4个LED灯指示,模式不同,时间不同
2、通过水量按键可选择不同的水位(18L、32L、46L、62L),通过4个LED灯指示
3、通过4个LED灯显示当前所处过程(浸泡、洗涤、漂洗、脱水)
4、通过一个启动/暂停按键控制洗衣机的启动/暂停
5、洗衣结束后,蜂鸣器报警3次提醒洗衣结束
6、通过显示屏显示时间
7、通过一个继电器模拟进水、另一个继电器模拟出水、直流电机模拟洗涤
扩展功能:通过WIFI模块将所有状态发送到手机端,手机端可以控制洗衣机启停、选择各模式
二、资 料总览
实物资料
仿真资料
三、51单片机部分资料展示
1、实物图展示
单片机型号:STC89C52
供电接口:TYPE-C
板子类型:PCB集成板,厚度1.2,两层板(上下层覆铜接地)
器件类型:元器件基本上为插针式,个别降压芯片会使用贴片式。
2、仿真图展示
仿真软件版本:proteus8.9
电路连线方式:网络标号连线方式
注意:部分实物元器件仿真中没有,仿真中会用其他工作原理相似的元件代替,这样可能导致实物程序和仿真程序不一样
3、原理图展示
软件版本:AD2013
电路连线方式:网络标号连线方式
注意:原理图只是画出了模块的引脚图,而并不是模块的内部结构图
4、PCB图展示
由原理图导出,中间有一个项目编号,隐藏在单片机底座下,插入单片机后不会看到。
两层板,上下覆铜接地。
四、32单片机部分资料展示
1、实物图展示
单片机型号:STM32F103C8T6
供电接口:TYPE-C
板子类型:PCB集成板,厚度1.2,两层板(上下层覆铜接地)
器件类型:元器件基本上为插针式,个别降压芯片会使用贴片式。
2、原理图展示
软件版本:AD2013
电路连线方式:网络标号连线方式
注意:原理图只是画出了模块的引脚图,而并不是模块的内部结构原理图
3、PCB图展示
由原理图导出,中间有一个项目编号,隐藏在单片机底座下,插入单片机后不会看到。
两层板,上下覆铜接地。
五、系统框图
绘制软件:VISIO
此次设计的自动洗衣机,按照输入方式可以分为输入、输出和中控三部分。中控部分是使用了单片机,其以获取输入的部分数据为主要目的,再通过内部进行处理,把持输出部分。输入部分是由两部分构建,第一部分为按键模块,经过这一模块能够控制启停、切换模式、设置水位;第二部分为供电模块,整个控制系统的供电都是有该模块提供的。输出部分则是由四部分构建,第一部分为数码管的显示模块,可以显现出时间;第二部分为直流电机控制继电器正传和反转控制模块;第三部分为继电器,功能是加水和排水;第四部分报警模块,洗涤完成之后通过声光发出报警提醒;除此之外还有蓝牙模块,即作为输入,也作为输出,用户可以通过该模块接收当前的指令,也可以通过手机发送指令控制,洗衣机的启停。
六、部分程序展示
软件版本:keil5
注意:逻辑程序和驱动程序分开,分布于main.c和其他.c文件
******显示函数
*****/
void Display_function(void)
{
if(flag_timer_begin == 1) //倒计时开始,每1分钟总时间-1
{
if(flag_1m == 1)
{
flag_1m = 0;
if(time_all != 0)
time_all--;
}
}
if(flag_begin ==1)
Oled_ShowCHinese(1, 3, "启动");
else
Oled_ShowCHinese(1, 3, "停止");
Oled_ShowCHinese(2, 1, "时长:");
sprintf(display_buf,"%d ",time_all);
Oled_ShowString(2, 8, display_buf);
switch(flag_mode)
{
case 0: //模式0
Oled_ShowCHinese(3, 1,"模式:标准");
break;
case 1: //模式1
Oled_ShowCHinese(3, 1,"模式:浸洗");
break;
case 2: //模式2
Oled_ShowCHinese(3, 1,"模式:强洗");
break;
case 3: //模式3
Oled_ShowCHinese(3, 1,"模式:快洗");
break;
default:
break;
}
Oled_ShowCHinese(4, 1,"水位:");
switch(flag_level)
{
case 0: //水位0
Oled_ShowString(4, 8, "18L");
break;
case 1: //水位1
Oled_ShowString(4, 8, "32L");
break;
case 2: //水位2
Oled_ShowString(4, 8, "46L");
break;
case 3: //水位3
Oled_ShowString(4, 8, "62L");
break;
default:
break;
}
}
/****
*******处理函数
*****/
void Manage_function(void)
{
if(flag_begin == 1) //洗衣机开始
{
switch(flag_step)
{
case 0: //步骤0:浸泡,先加水,再浸泡
LEDG1 = 0;
LEDG2 = 1;
LEDG3 = 1;
LEDG4 = 1;
if(time_all > (time_mode + time_soak + time_level*5 + time_rinse + time_dehydration))
{
RELAY_JS = 1;
RELAY_PS = 0;
}
else if(time_all > (time_mode + time_level*5 + time_rinse + time_dehydration))
{
RELAY_JS = 0;
RELAY_PS = 0;
}
else
flag_step = 1;
break;
case 1: //步骤1:洗涤,电机正反转动
LEDG1 = 1;
LEDG2 = 0;
LEDG3 = 1;
LEDG4 = 1;
if(time_all > (time_level*5 + time_rinse + time_dehydration))
{
if(flag_10s == 1)
{
flag_exchange = !flag_exchange;
flag_10s = 0;
}
if(flag_exchange == 0)
{
MOTER_A = 1;
MOTER_B = 0;
}
else
{
MOTER_A = 0;
MOTER_B = 1;
}
}
else
{
MOTER_A = 0;
MOTER_B = 0;
flag_step = 2;
}
break;
case 2: //步骤2:漂洗,先放水,再加水,再漂洗,再放水,再加水,再漂洗,再放水
LEDG1 = 1;
LEDG2 = 1;
LEDG3 = 0;
LEDG4 = 1;
if(time_all > (time_level*4 + time_rinse + time_dehydration)) //放水
{
RELAY_JS = 0;
RELAY_PS = 1;
}
else if(time_all > (time_level*3 + time_rinse + time_dehydration)) //加水
{
RELAY_JS = 1;
RELAY_PS = 0;
}
else if(time_all > (time_level*3 + time_rinse/2 + time_dehydration)) //漂洗
{
RELAY_JS = 0;
RELAY_PS = 0;
if(flag_10s == 1)
{
flag_exchange = !flag_exchange;
flag_10s = 0;
}
if(flag_exchange == 0)
{
MOTER_A = 1;
MOTER_B = 0;
}
else
{
MOTER_A = 0;
MOTER_B = 1;
}
}
else if(time_all > (time_level*2 + time_rinse/2 + time_dehydration))//放水
{
MOTER_A = 0;
MOTER_B = 0;
RELAY_JS = 0;
RELAY_PS = 1;
}
else if(time_all > (time_level*1 + time_rinse/2 + time_dehydration))//加水
{
RELAY_JS = 1;
RELAY_PS = 0;
}
else if(time_all > (time_level*1 + time_dehydration)) //漂洗
{
RELAY_JS = 0;
RELAY_PS = 0;
if(flag_10s == 1)
{
flag_exchange = !flag_exchange;
flag_10s = 0;
}
if(flag_exchange == 0)
{
MOTER_A = 1;
MOTER_B = 0;
}
else
{
MOTER_A = 0;
MOTER_B = 1;
}
}
else if(time_all > time_dehydration) //放水
{
MOTER_A = 0;
MOTER_B = 0;
RELAY_JS = 0;
RELAY_PS = 1;
}
else
{
RELAY_JS = 0;
RELAY_PS = 0;
flag_step = 3;
}
break;
case 3: //步骤3:脱水,电机正转,脱水完成后,蜂鸣器响3次结束
LEDG1 = 1;
LEDG2 = 1;
LEDG3 = 1;
LEDG4 = 0;
if(time_all != 0)
{
MOTER_A = 1;
MOTER_B = 0;
}
else
{
MOTER_A = 0;
MOTER_B = 0;
BEEP = 1;
Delay_ms(500);
BEEP = 0;
Delay_ms(500);
BEEP = 1;
Delay_ms(500);
BEEP = 0;
Delay_ms(500);
BEEP = 1;
Delay_ms(500);
BEEP = 0;
Delay_ms(500);
flag_step = 0;
flag_begin = 0;
flag_timer_begin = 0;
flag_1m = 0;
}
break;
default:
break;
}
}
}