当前位置: 首页 > news >正文

STM32项目分享:智能洗碗机

目录

一、前言

二、项目简介

1.功能详解

2.主要器件

三、原理图设计

四、PCB硬件设计

PCB图 

五、程序设计 

六、实验效果 

七、资料内容

项目分享


一、前言

项目成品图片:

哔哩哔哩视频链接:

STM32智能洗碗机

(资料分享见文末) 

二、项目简介

1.功能详解

基于STM32的智能洗碗机

功能如下:

  1. STM32F103C8T6单片机作为主控单元
  2. 检测功能:系统检测水位数据、检测温度数据。
  3. 显示功能:将检测到的数据显示在oled屏幕上。
  4. 控制功能:通过按键控制洗碗机的开始/暂停/取消。
  5. 洗碗流程:继电器1(模拟加水)→检测水位是否超出阈值→加热片加热到预定温度→直流电机启动(模拟洗碗)→继电器2闭合(模拟排水)→检测水是否排空→风扇烘干→消毒灯消毒。
  6. 阈值调节:系统传感器阈值大小可以通过按键设置调节。
  7. 机智云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 *)&currentDataPoint);}
}

六、实验效果 

七、资料内容

项目分享

http://www.dtcms.com/a/292423.html

相关文章:

  • Java并发编程:JUC核心组件全解析
  • 牛客NC16625 [NOIP2009]分数线划定(排序)
  • 矿用支架电液控配件3针3孔钢丝编织橡胶护套连接器
  • 基于深度学习的语音情感识别系统的设计与实现【BiLSTM、多层感知神经网络、Emotion2Vec、与CustomFeature】
  • 对随机生成的html文件做标签简析
  • RPA软件机器人如何提高工作效率?
  • python 中什么是作用域(Scope)?为什么函数内部的变量在外部无法访问?
  • 【华为机试】547. 省份数量
  • How script location, CWD, and relative imports interact
  • TIM定时中断
  • 操作系统:系统调用(System Calls)
  • 风险识别清单:构建动态化的风险管理体系
  • 从 0 到 1 搞定 Intel 核显推流:硬件视频编码环境安装完整学习笔记
  • UE5 UI 水平框
  • GoLand 部署第一个项目
  • 智慧制造合同解决方案
  • 外网访问内部私有局域网方案,解决运营商只分配内网IP不给公网IP问题
  • 【Docker】Docker的初步认识以及Ubuntu下的Docker环境安装、配置
  • iOS加固工具有哪些?从零源码到深度混淆的全景解读
  • 【Spring Boot】Spring Boot循环依赖破解:@Lazy与Setter注入的取舍指南(流程图修复版)
  • p5.js 圆弧的用法
  • 一键生成流程图,省时省力!
  • 网络安全基础作业三
  • ubuntu24.04安装CUDA、VLLM、Pytorch等并部署Qwen3-8B-AWQ【50系显卡通用】
  • pytorch 演示 “变分状态空间模型(Variational State-Space Model, VSSM)“ 基于 MINIST数据集
  • CSS中的transform
  • 算法笔记之堆排序
  • Oracle数据恢复—Oracle数据库所在分区被删除后报错的数据恢复案例
  • Oracle 12c 创建数据库初级教程
  • sqli-labs通关笔记-第14关 POST报错型注入(双引号闭合 手工注入+脚本注入两种方法)