STM32项目分享:智能洗碗机
目录
一、前言
二、项目简介
1.功能详解
2.主要器件
三、原理图设计
四、PCB硬件设计
PCB图
五、程序设计
六、实验效果
七、资料内容
项目分享
一、前言
项目成品图片:
哔哩哔哩视频链接:
STM32智能洗碗机
(资料分享见文末)
二、项目简介
1.功能详解
基于STM32的智能洗碗机
功能如下:
- STM32F103C8T6单片机作为主控单元
- 检测功能:系统检测水位数据、检测温度数据。
- 显示功能:将检测到的数据显示在oled屏幕上。
- 控制功能:通过按键控制洗碗机的开始/暂停/取消。
- 洗碗流程:继电器1(模拟加水)→检测水位是否超出阈值→加热片加热到预定温度→直流电机启动(模拟洗碗)→继电器2闭合(模拟排水)→检测水是否排空→风扇烘干→消毒灯消毒。
- 阈值调节:系统传感器阈值大小可以通过按键设置调节。
- 机智云APP:通过WIFI模块连接网络,可以通过APP查看数据与控制下发
2.主要器件
- STM32F103C8T6单片机
- OLED 屏幕
- DS18B20温度传感器
- 水位传感器
- TB6612电机驱动模块
- ESP8266模块(WIFI)
- 风扇模块
- 直流电机
- 水泵模块
- 紫外线消毒灯
- PTC加热片
三、原理图设计
四、PCB硬件设计
PCB图
五、程序设计
#include "stm32f10x.h" // Device header
#include "oled.h"
#include "menu.h"
#include "delay.h"
#include "tb6612.h"
#include "adcx.h"
#include "pwm.h"
#include "watersensor.h"
#include "ds18b20.h"
#include "relay.h"
#include "key.h"
#include "tim2.h"
#include "tim3.h"
#include "usart.h"
#include "flash.h"
#include "led.h"
#include "heater.h"
#include "buzzer.h"
#include "myrtc.h"
#include "iwdg.h"
#include "gizwits_product.h" #define FLASH_START_ADDR 0x0801f000 u8 Menu = 1;
u8 select = 1; u16 Water_level_value;
u8 Temp_value;
u8 Dishwashing_time;
u16 Dishwashing_dynamics;
u8 Drying_time, Disinfection_time; u8 Dishwashing_Flag;
u8 Dishwashing_time_Flag;
u8 Drying_time_Flag;
u8 Disinfection_time_Flag; u8 hour,minute,second;
u8 i;void Dishwashing_process(void)
{switch(Dishwashing_Flag){case 1:Relay_ON(1);Heater_ON(); if(Water_level_value < system_data_buff[1]){Dishwashing_Flag = 2;Relay_OFF(1);}break;case 2:Heater_ON();if(Temp_value < system_data_buff[2]){Heater_OFF();Dishwashing_Flag = 3;}break;case 3:Motor_Direction(1,Dishwashing_dynamics);if(Dishwashing_time_Flag > Dishwashing_time){Motor_STOP();Dishwashing_time_Flag = 0;Dishwashing_Flag = 4;} break;case 4:Relay_ON(0); if(system_data_buff[1] < 15) {Relay_OFF(0);Dishwashing_Flag = 5;}break;case 5:Fan_ON();if(Drying_time_Flag > Drying_time){Fan_OFF();Drying_time_Flag = 0;Dishwashing_Flag = 6;}break;case 6:LED_ON();if(Disinfection_time_Flag > Disinfection_time){LED_OFF();Disinfection_time_Flag = 0;Dishwashing_Flag = 0;Buzzer_ON();Delay_ms(500);Buzzer_OFF();}break;case 7: Relay_OFF(1);Heater_OFF();Motor_STOP();Relay_OFF(0);Fan_OFF();LED_OFF();break;case 8: Relay_OFF(1);Heater_OFF();Motor_STOP();Relay_OFF(0);Fan_OFF();LED_OFF();Dishwashing_Flag = 0;break;default:break;}}void value_adjust(void)
{if(KeyNum == 3){switch(select){case 1: KeyNum = 0;Menu = 4;break;case 2: KeyNum = 0;Water_level_value += 100;if(Water_level_value >= 4000){Water_level_value = 100;}break;case 3: KeyNum = 0;Temp_value++;if(Temp_value >= 100){Temp_value = 1;}break;case 4: KeyNum = 0;Dishwashing_time++;if(Dishwashing_time >= 100){Dishwashing_time = 1;} break;case 5: KeyNum = 0;Dishwashing_time++;if(Dishwashing_time >= 100){Dishwashing_time = 1;}break;case 6: KeyNum = 0;Dishwashing_dynamics++;if(Dishwashing_dynamics >= 1000){Dishwashing_dynamics = 500;}break;case 7: KeyNum = 0;Drying_time++;if(Drying_time >= 100){Drying_time = 1;}break;case 8: KeyNum = 0;Disinfection_time++;if(Disinfection_time >= 100){Disinfection_time = 1;}break;default:break;}}if(KeyNum == 4){switch(select){case 1:KeyNum = 0;Menu = 4;break;case 2: KeyNum = 0;Water_level_value -= 100;if(Water_level_value >= 4000){Water_level_value = 4000;}break;case 3: KeyNum = 0;Temp_value--;if(Temp_value >= 100){Temp_value = 99;}break;case 4: KeyNum = 0;Dishwashing_time--;if(Dishwashing_time >= 100){Dishwashing_time = 99;} break;case 5: KeyNum = 0;Dishwashing_time--;if(Dishwashing_time >= 100){Dishwashing_time = 99;}break;case 6: KeyNum = 0;Dishwashing_dynamics--;if(Dishwashing_dynamics <= 500){Dishwashing_dynamics = 999;}break;case 7: KeyNum = 0;Drying_time--;if(Drying_time >= 100){Drying_time = 99;}break;case 8: KeyNum = 0;Disinfection_time--;if(Disinfection_time >= 100){Disinfection_time = 99;}break;default:break;}}
}void Time_adjust(void)
{if((KeyNum == 3) && (Menu == 5)){KeyNum = 0;switch(select){case 1:hour++;if(hour > 24){hour = 0;}break;case 2:minute++;if(minute > 60){minute = 0;} break;case 3:second++;if(second > 60){second = 0;} break;}}if((KeyNum == 4) && (Menu == 5)){KeyNum = 0;switch(select){case 1:hour--;if(hour > 24){hour = 24;}break;case 2:minute--;if(minute > 60){minute = 60;} break;case 3:second--;if(second > 60){second = 60;} break;}}
}int main(void)
{OLED_Init();PWM_Init(1000 - 1,72 -1);ADCX_Init();Timer2_Init(9,14398);uart2_init(9600);uart1_init(115200);MyRTC_Init();LED_Init(); DS18B20_Init();Motor_Init();Fan_Init();Relay_Init();Key_Init();Heater_Init(); Buzzer_Init();IWDG_Init();GENERAL_TIM_Init();userInit(); gizwitsInit(); Water_level_value = FLASH_R(FLASH_START_ADDR); Temp_value = FLASH_R(FLASH_START_ADDR+2); Dishwashing_time = FLASH_R(FLASH_START_ADDR+4); Dishwashing_dynamics = FLASH_R(FLASH_START_ADDR+6); Drying_time = FLASH_R(FLASH_START_ADDR+8); Disinfection_time = FLASH_R(FLASH_START_ADDR+10); Delay_ms(1000);gizwitsSetMode(WIFI_AIRLINK_MODE);Delay_ms(1000);while (1){MyRTC_ReadTime(); IWDG_Init(); switch(Menu){case 1:Menu1(); System_data_state(); if(KeyNum == 2){KeyNum = 0;Dishwashing_Flag = 1; }Dishwashing_process(); break;case 2:OLED_Clear(); Menu = 3; break;case 3:if(KeyNum == 1){KeyNum = 0;select++;if(select == 5){OLED_Clear();}if(select > 8){select = 1;OLED_Clear();}} if(select >= 5){OLED_Option(select-4);Menu3(); Data_Menu2();}else{OLED_Option(select);Menu2();Data_Menu1();}value_adjust(); if(KeyNum == 2){KeyNum = 0;FLASH_W(FLASH_START_ADDR,Water_level_value,Temp_value,Dishwashing_time,Dishwashing_dynamics,Drying_time,Disinfection_time);Menu = 1; select = 1; OLED_Clear(); }break;case 4: OLED_Clear();Menu = 5;hour = MyRTC_Time[3];minute = MyRTC_Time[4];second = MyRTC_Time[5];break; case 5: Menu_Time(); if((KeyNum == 1) && (Menu == 5)){KeyNum = 0;select++;if(select > 3){select = 1;}}OLED_Time_Option(select); Time_adjust(); if((KeyNum == 2) && (Menu == 5)){KeyNum = 0;MyRTC_Time[3] = hour;MyRTC_Time[4] = minute;MyRTC_Time[5] = second; MyRTC_SetTime();select = 1;Menu = 2;}default:break;}userHandle(); gizwitsHandle((dataPoint_t *)¤tDataPoint);}
}
六、实验效果
七、资料内容