基于单片机的全自动洗衣机控制器设计

点击链接下载资料:https://download.csdn.net/download/qq_39020934/92091286


1. 系统功能概述

本设计的“基于单片机的全自动洗衣机控制器系统”是一种以单片机为核心的智能化控制系统,旨在实现家庭洗衣机的自动化运行与智能控制。系统以STC89C52单片机为控制核心,结合按键输入、LCD/数码管显示、电机控制、继电器驱动、蜂鸣器报警等模块,实现从进水—洗涤—放水—脱水的全自动控制流程。该系统不仅具备传统洗衣机的基本功能,还能通过程序控制实现时间分配、正反转交替、阶段提示与自动结束报警,具有较高的智能化与实用性。

其主要功能包括:

  1. 全自动控制:系统通过程序控制实现洗衣机全过程自动运行,从进水、洗涤、放水到脱水自动完成,无需人工干预。
  2. 可预置洗涤时间:用户可通过按键设置洗涤时间(10~30分钟),系统实时显示剩余时间,倒计时精确到1分钟。
  3. 三次洗涤循环:系统将整个洗涤过程分为三次循环,每次洗涤结束后系统自动蜂鸣提示。
  4. 洗涤时间合理分配:三次洗涤时间依次为总时间的1/2、1/3和1/6,确保衣物洗涤充分且节能。
  5. 正反转交替运行:洗涤阶段电机正反转交替工作,防止衣物缠绕,提升清洗效率。

系统设计遵循“模块化、可扩展、易操作”的原则,具备结构简单、成本低廉、可靠性高的优点,适合嵌入式系统与家电自动化课程设计及应用。


2. 系统电路设计

整个系统电路以STC89C52单片机为核心,配合输入与输出电路共同实现洗衣机自动控制。系统主要由以下几个部分构成:

  • 单片机主控模块
  • 按键输入模块
  • 显示模块(LCD或数码管)
  • 电机驱动与继电器控制模块
  • 蜂鸣器报警模块
  • 电源模块

2.1 单片机主控模块

主控模块采用STC89C52单片机,该芯片为兼容MCS-51指令系统的高性能单片机,内部集成8KB Flash程序存储器、512B RAM、4个8位I/O口、3个定时器/计数器以及多路中断系统。
主控模块的功能包括:

  • 控制洗衣流程的自动顺序执行;
  • 采集按键信息并进行逻辑判断;
  • 计时与分配各阶段洗涤时间;
  • 控制电机正反转输出;
  • 驱动显示模块显示当前状态与时间。

单片机P0口连接LCD或数码管用于数据显示,P1口部分引脚连接按键输入,P2口与P3口用于电机与蜂鸣器驱动。

2.2 按键输入模块

按键输入模块用于用户交互,主要包括**“启动/暂停”键、“加时间”键和“减时间”**键。

  • “启动/暂停”键:用于开始或暂停洗衣程序;
  • “加时间”“减时间”键:用于设置洗涤总时间(10~30分钟范围内调整)。

按键采用独立式结构,通过上拉电阻接入单片机端口。当按键被按下时,对应输入端检测到低电平信号。为防止按键抖动,软件端加入10~20ms延时处理,提高系统稳定性。

2.3 显示模块设计

显示部分采用两位共阴极数码管LCD1602液晶显示器

  • 若使用数码管,可实时显示剩余洗涤时间(分钟为单位);
  • 若使用LCD1602,可同时显示“当前模式”“剩余时间”“当前阶段”等信息,使人机交互更加友好。

显示模块通过单片机的P0口与控制口信号线连接,采用动态扫描方式或并行控制方式驱动。

2.4 电机驱动与继电器控制模块

电机控制是本系统的核心部分。洗衣机的执行装置主要是电机,其需要实现正反转与启停控制。
控制方式采用继电器控制交流电机方向,电路设计如下逻辑:

  • 继电器K1控制电机正转;
  • 继电器K2控制电机反转;
  • 继电器K3用于脱水高速运转控制;
  • 继电器线圈由单片机控制,通过NPN三极管(如9013或8050)驱动。

当单片机输出高电平时,三极管导通,继电器吸合,从而控制电机通断与方向。
为避免正反转切换时冲击电流,程序中加入延时保护,使电机在切换方向前先停止0.5~1秒。

2.5 蜂鸣器报警模块

蜂鸣器模块用于洗涤结束或异常状态提示。
采用有源蜂鸣器,由单片机GPIO口直接控制。系统在每个洗涤阶段结束后蜂鸣三声提示用户;整个洗涤流程结束时蜂鸣长响3秒。

2.6 电源模块设计

电源模块采用12V直流电源输入,通过7805稳压芯片输出稳定的5V直流电压供给单片机及外围电路。为防止电压波动,电源端加入100μF电解电容和104电容进行滤波。


3. 系统程序设计

程序设计采用C语言编写,基于Keil开发环境。程序结构分为主控程序时间设置与倒计时模块电机控制模块显示模块蜂鸣器提示模块等部分。

3.1 程序总体设计思路

程序采用有限状态机控制思想,将洗衣机工作过程划分为多个状态:

  1. STATE_IDLE:待机状态;
  2. STATE_WASH:洗涤状态(分三次循环);
  3. STATE_DRAIN:放水状态;
  4. STATE_SPIN:脱水状态;
  5. STATE_END:结束状态。

主程序循环不断检测按键输入并根据状态机逻辑执行不同子程序,实现全过程自动控制。

程序总体结构如下:

void main()
{
    System_Init();   // 系统初始化
    while(1)
    {
        Key_Scan();       // 检测按键输入
        switch(State)
        {
            case STATE_IDLE: Idle_Mode(); break;
            case STATE_WASH: Wash_Process(); break;
            case STATE_DRAIN: Drain_Process(); break;
            case STATE_SPIN: Spin_Process(); break;
            case STATE_END: End_Process(); break;
        }
    }
}

3.2 时间设置与倒计时模块

用户可通过按键设置洗涤总时间(10~30分钟)。系统使用定时器中断每分钟更新一次显示并递减剩余时间。

void Timer0_ISR(void) interrupt 1
{
    static unsigned int count = 0;
    count++;
    if(count >= 60000) // 每分钟计数
    {
        count = 0;
        if(wash_time > 0)
            wash_time--;
    }
}

当剩余时间为0时,系统自动进入下一个工作阶段。

3.3 洗涤控制模块设计

洗涤过程采用三次循环,时间按比例分配:

  • 第一次洗涤:总时间×1/2
  • 第二次洗涤:总时间×1/3
  • 第三次洗涤:总时间×1/6

每次洗涤阶段,电机以正反转交替方式运行,延时控制如下:

void Wash_Process()
{
    for(uint8_t i=0; i<3; i++)
    {
        Set_Time(i);
        while(time_remain > 0)
        {
            Motor_Forward();
            Delay_ms(5000);
            Motor_Stop();
            Delay_ms(1000);
            Motor_Reverse();
            Delay_ms(5000);
            Motor_Stop();
            Delay_ms(1000);
        }
        Beep_Once();  // 一次洗涤结束提示
        Drain_Process();
    }
}

3.4 电机控制子程序

电机控制子程序用于实现正转、反转与停止,利用GPIO控制继电器吸合。

void Motor_Forward()
{
    RELAY1 = 1;
    RELAY2 = 0;
}

void Motor_Reverse()
{
    RELAY1 = 0;
    RELAY2 = 1;
}

void Motor_Stop()
{
    RELAY1 = 0;
    RELAY2 = 0;
}

脱水阶段调用高速运转函数:

void Spin_Process()
{
    RELAY3 = 1;
    Delay_ms(10000);
    RELAY3 = 0;
    Beep_Long();
}

3.5 显示模块程序设计

显示模块根据不同阶段显示不同内容。若使用LCD1602,可显示当前状态与剩余时间:

void Display_Update()
{
    LCD_SetCursor(0,0);
    LCD_WriteString("Mode:");
    switch(State)
    {
        case STATE_WASH: LCD_WriteString("Washing"); break;
        case STATE_DRAIN: LCD_WriteString("Draining"); break;
        case STATE_SPIN: LCD_WriteString("Spinning"); break;
        case STATE_END: LCD_WriteString("Finished"); break;
        default: LCD_WriteString("Idle"); break;
    }

    LCD_SetCursor(1,0);
    LCD_WriteString("Time:");
    LCD_WriteInt(wash_time);
}

若使用数码管,则采用动态扫描刷新,显示剩余时间的十位与个位。

3.6 蜂鸣器提示程序设计

蜂鸣器用于流程提示与错误报警。其控制逻辑如下:

void Beep_Once()
{
    BUZZER = 1;
    Delay_ms(300);
    BUZZER = 0;
}

void Beep_Long()
{
    BUZZER = 1;
    Delay_ms(2000);
    BUZZER = 0;
}

4. 系统运行与分析

当系统上电后,进入待机状态,LCD显示“Idle”。用户可通过按键设置洗涤时间,按“启动”键后系统自动执行洗衣流程:

  1. 自动进水(可扩展电磁阀控制);
  2. 按预设时间进行三次洗涤循环;
  3. 洗涤结束后自动放水;
  4. 启动脱水程序;
  5. 全流程完成后蜂鸣提示,LCD显示“Finished”。

系统测试结果表明:

  • 时间设定与倒计时精确可靠;
  • 正反转控制稳定,无切换干扰;
  • 声光提示及时清晰;
  • 整体工作流程自动化程度高。

该系统能够有效模拟实际全自动洗衣机控制逻辑,并具有良好的扩展性与教学示范价值。


5. 总结

本设计基于STC89C52单片机,成功实现了一个功能完善、逻辑清晰的全自动洗衣机控制系统。通过软硬件结合设计,实现了自动化控制、时间预置、三段洗涤、正反转控制、声音提示等功能。系统运行稳定、结构简单,适用于智能家电控制、自动控制系统课程设计及家电嵌入式控制领域的应用研究。

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐