C语言使用STM32开发板手搓高端家居洗衣机
目录
概要
成品效果
背景概述
1.开发环境
2.主要传感器。
技术细节
1. 用户如何知道选择了何种功能
2.启动后如何进行洗衣
3.如何将洗衣机状态上传至服务器并通过APP查看
4.洗衣过程、可燃气检测、OLED屏显示、服务器通信如何并发进行
小结
概要
本文章主要是讲解如何基入STM32开发板,来做一个智能洗衣机,该洗衣机有16种洗衣功能、有模式选择LED灯、检测可燃气浓度功能、OLED显示时间功能、手机APP查看状态功能。具体工作流程看下图

成品效果
本产品在启动后,外部的电磁锁会自动上锁。模拟市面上的侧开式滚筒洗衣机,通过开发板上的按键来选择功能和开关机,下面是实物成品图:
视频链接:手搓家用智能洗衣机_哔哩哔哩_bilibili

侧面图(带板子)

正面图(带入水池)

机体内部1

机体内部2
背景概述
如果看到这里已经开始感兴趣的道友,本文现在正式简绍产品所有所需材料及开发环境等背景
1.开发环境
板子:STM32F4系列
软件:keil5
机体:自行焊接的外壳
2.主要传感器。
WIFI模块、OLED屏、水位检测模块、可燃气检测模块、直流电机、抽水泵、电池锁、继电器、电池组、LED流水灯
具体完整模块清单已上传资源
技术细节
因为不想长篇大论,这里就说部分项目的难点、解决方法和其中模块、板子、服务器直接的链接和规划。
1. 用户如何知道选择了何种功能
使用两排8灯的LED流水灯,将其连接到开发板的16个IO口上。通过板子上的4个按键电平变化来知道按下的键位。设定:按键1长按2s开机,按键2和按键3可以选择模块,按下后对应的LED灯电平设为低电平使其亮灯,并且记录模式标志位。按键4可启动程序
2.启动后如何进行洗衣
先将继电器模块分别连接开发板和直流电机、抽水泵、电热片、水位检测等传感器。收到启动信号后,通过ADC转换判断当前水位高度,到达指定高度后打开入水泵继电器开关,开始抽水,同时自动上锁。
同理,水位到达指定高度后,抽水泵关闭,电机滚筒开始工作。时间到后,启动排水泵。通过程序设计可实现洗涤、漂洗、甩干功能。而选择特定模式如:烘干、标准洗。可在指定时间打开电热片,并同过风扇将热风穿过送风口到达滚筒内部进行烘干。
启动后,板子和OLED屏通过IIC协议进行通信,将剩余时间实时更新至屏幕
3.如何将洗衣机状态上传至服务器并通过APP查看
板子连接Esp8266WIFI模块,通过UART协议发送AT指令,连上热点后可开启透传模式。这时即可通过MQTT协议同阿里云服务器的物联网平台进行通信。这里需要注意发布和订阅的处理和设定。成功上传服务器后可通过阿里云应用开发平台进行APP界面设计,阿里云平台的步骤我已上传,下载查看即可。
4.洗衣过程、可燃气检测、OLED屏显示、服务器通信如何并发进行
这里就要用到操作系统了,因为裸机开发只能做到简单的洗衣功能。本产品用的是FreeRots实时操作系统,将各步骤分为了5个一级任务,部分任务里面也会创建二级任务来达到需求。其中通过任务优先级的大小来决定其任务顺序:
1.硬件初始化任务 2.链接服务器任务
3.可燃气检测任务 4.程序主入口任务
5.数据上报任务
补充:
FreeRTOS是一个开源的实时操作系统内核,它支持优先级继承和优先级天花板协议,以确保系统的实时性能和任务的响应时间。在FreeRTOS中,任务的优先级规则如下:
优先级分配:每个任务都可以被分配一个唯一的优先级。在FreeRTOS中,优先级编号通常是一个无符号整数,优先级的范围可以从0到configMAX_PRIORITIES-1,其中configMAX_PRIORITIES是在FreeRTOS配置文件中定义的。
最高优先级规则:FreeRTOS是一个基于优先级的抢占式调度器。当多个任务处于就绪状态时,调度器将选择优先级最高的任务来执行。如果有两个或多个任务具有相同的优先级,调度器将根据任务的就绪态切换(round-robin)来决定执行哪个任务。
优先级继承:当高优先级任务试图访问一个已经被低优先级任务占用的资源(如互斥量)时,低优先级任务将临时继承高优先级任务的任务优先级,以防止高优先级任务发生优先级反转(priority inversion)。一旦低优先级任务释放了资源,它的优先级将恢复到原来的值。
优先级天花板协议:这是一种可选的优先级继承的变种,它可以减少优先级反转的发生。在天花板协议中,当任务获取互斥量时,它会将自己的优先级提升到该互斥量的天花板优先级(一个预先定义的最高优先级),从而防止更高优先级的任务被阻塞。
中断和临界区:中断服务例程(ISR)的执行优先级高于所有任务。在ISR中,可以调用中断安全的API来执行一些操作。为了保护共享资源,任务可以使用临界区,在临界区中,调度器会被暂时禁用,以防止其他任务执行。
时间片调度:尽管FreeRTOS是抢占式的,但它也支持时间片(time-slicing)的概念。如果启用了时间片,具有相同优先级的任务将轮流执行,每个任务运行一个时间片(quantum)后,调度器将切换到下一个就绪的任务。
小结
以上就是部分项目难点和实现过程,实际开发过程绝不像现在述说般的云淡风轻。例如硬件上:线路繁多,要考虑板子有限的IO口和ADC转换器安排分配;机体空间不大,考虑水泵、滚筒等传感器位置和协调;传感器众多,板子电压不足等等情况。
而在软件上,考虑各模块的通信,熟系不同时序图后,最起码的延时要通过计算总线频率、设置预分频寄存器、重载寄存器来计数达到。而上了操作系统后又要考虑非阻塞延时和阻塞延时等设计;要查看各个传感器数据手册、原理图进行控制和通信...
项目的各模块代码累积几千行,成品出来后让人心里生成慢慢成就感。本产品也有市场上其他产品所不具备的功能,比如可燃气检测,部分家庭仍然是使用煤气或天然气热水器,而这些可燃气都有泄露的风险。本产品可实时检测可燃气浓度,在超过指定值后蜂鸣器报警并在APP提醒用户,避免发送意外。而本产品设计之初是加装了语言模块,用户通过关键词唤醒智能管家后。可语言选择洗衣模式。后面考虑到可能有儿童误触发语言条件,如果进入机体,容易发生意外,最后移除掉语言功能。
这次的项目让我对嵌入式产品开发有了更深入的认识,知道了和传感器通信的IIC、SPI、UART等协议,开拓了视野。我对嵌入式开发信心更胜。源码已经开源,希望道友们都能乘风破浪,到达彼岸!
相关文章:
C语言使用STM32开发板手搓高端家居洗衣机
目录 概要 成品效果 背景概述 1.开发环境 2.主要传感器。 技术细节 1. 用户如何知道选择了何种功能 2.启动后如何进行洗衣 3.如何将洗衣机状态上传至服务器并通过APP查看 4.洗衣过程、可燃气检测、OLED屏显示、服务器通信如何并发进行 小结 概要 本文章主要是讲解如…...
【Hello,PyQt】QTextEdit和QSplider
PyQt5 是一个强大的Python库,用于创建图形用户界面(GUI)。其中,QTextEdit 控件作为一个灵活多用的组件,常用于显示和编辑多行文本内容,支持丰富的格式设置和文本操作功能。另外,QSlider 控件是一…...
【力扣】191.位 1 的个数、485.最大连续 1 的个数
191.位 1 的个数 题目描述 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中 设置位 的个数(也被称为汉明重量)。 示例 1: 输入:n 11 输出࿱…...
蓝桥杯 java 承压计算
题目: 思路: 1:其中的数字代表金属块的重量(计量单位较大) 说明每个数字后面不一定有多少个0 2:假设每块原料的重量都十分精确地平均落在下方的两个金属块上,最后,所有的金属块的重量都严格精确地平分落在最底层的电子…...
leetcode268-Missing Number
这道题目要求缺失的数字,一般解决数组的问题,要么往排序数组,要么往双指针遍历这些方向上靠,要么往异或方向上靠,总之落点无非就只有这几个。我们要求缺失的数字,可以依次让1~n和数组元素进行异…...
【jenkins+cmake+svn管理c++项目】jenkins回传文件到svn(windows)
书接上文:创建一个项目 在经过cmakemsbuild顺利生成动态库之后,考虑到我一个项目可能会生成多个动态库,它们分散在build内的不同文件夹,我希望能将它们收拢到一个文件夹下,并将其回传到svn。 一、动态库移位—cmake实…...
数据结构·二叉树(2)
目录 1 堆的概念 2 堆的实现 2.1 堆的初始化和销毁 2.2 获取堆顶数据和堆的判空 2.3 堆的向上调整算法 2.4 堆的向下调整算法 2.4 堆的插入 2.5 删除堆顶数据 2.6 建堆 3 建堆的时间复杂度 3.1 向上建堆的时间复杂度 3.2向下建堆的时间复杂度 4 堆的排序 前言&…...
MATLAB算法实战应用案例精讲-【毕业季论文专用】人工智能视觉检测技术及其在实际应用中的挑战与前景
目录 摘要: 第一章:引言 1.1 研究背景 1.2 研究目的与意义...
Linux虚拟机环境搭建spark
Linux环境搭建Spark分为两个版本,分别是Scala版本和Python版本。 一、 安装Pyspark 本环境以 Python 环境为例。 1、下载spark 下载网址:https://archive.apache.org/dist/spark 下载安装包:根据自己环境选择合适版本,本环境…...
STL的string容器
string基本概念 string是C风格的字符串,本质上是一个类。 string 和 char* 的区别 char* 是一个指针; string是一个类,内部封装了 char* ,用来管理字符串,是一个 char* 型的容器。 特点 string内部封装了很多成员…...
半导体工艺技术
完整内容点击:【半导体工艺技术】...
acwing算法提高之图论--单源最短路的扩展应用
目录 1 介绍2 训练 1 介绍 本专题用来记录使用。。。。 2 训练 题目1:1137选择最佳线路 C代码如下, #include <iostream> #include <cstring> #include <algorithm> #include <queue>using namespace std;const int N 101…...
SQLServer数据库使用Function实现根据字段内容的拼音首字母进行数据查询
实现SQL首字母查询分两步,第一步建Function,第二步引用新建的Function。 1. 首先需要自定义一个查询的Function,详细SQL如下: ALTER function [dbo].[GetDataByPY](str nvarchar(4000)) returns nvarchar(4000) as begin decla…...
Linux——信号概念与信号产生方式
目录 一、概念 二、前台进程与后台进程 1.ctrlc 2.ctrlz 三、信号的产生方式 1.键盘输入产生信号 2.系统调用发送信号 2.1 kill()函数 2.2 raise()函数 2.3 abort()函数 3.异常导致信号产生 3.1 除0异常 3.2 段错误异常 4.软件条件产生信号 4.1 管道 4.2 闹钟…...
赋值语句还能当判断条件?涨芝士了!
赋值和条件看似是C语言中毫不相关的两个概念,虽然实际过程中我猜测不会有太多这种不太符合常理的情况出现,但是现在在学习的过程中,为了出题而出题总是会整出一些花活出来.....这很难不让人联想起高中时一些大佬为了彰显自己的数学天赋而自己…...
数据结构 - 算法效率|时间复杂度|空间复杂度
目录 1.算法效率 2.时间复杂度 2.1定义 2.2大O渐近表示法 2.3常见时间复杂度计算举例 3.空间复杂度 3.1定义 3.2常见空间复杂度计算举例 1.算法效率 算法的效率常用算法复杂度来衡量,算法复杂度描述了算法在输入数据规模变化时,其运行时间和空间…...
接口自动化之 + Jenkins + Allure报告生成 + 企微消息通知推送
接口自动化之 Jenkins Allure报告生成 企微消息通知推送 在jenkins上部署好项目,构建成功后,希望可以把生成的报告,以及结果统计发送至企微。 效果图: 实现如下。 1、生成allure报告 a. 首先在Jenkins插件管理中&#x…...
『Apisix安全篇』探索Apache APISIX身份认证插件:从基础到实战
🚀『Apisix系列文章』探索新一代微服务体系下的API管理新范式与最佳实践 【点击此跳转】 📣读完这篇文章里你能收获到 🛠️ 了解APISIX身份认证的重要性和基本概念,以及如何在微服务架构中实施API安全。🔑 学习如何使…...
【01-20】计算机网络基础知识(非常详细)从零基础入门到精通,看完这一篇就够了
【01-20】计算机网络基础知识(非常详细)从零基础入门到精通,看完这一篇就够了 以下是本文参考的资料 欢迎大家查收原版 本版本仅作个人笔记使用1、OSI 的七层模型分别是?各自的功能是什么?2、说一下一次完整的HTTP请求…...
『大模型笔记』常见的分布式并行策略(分布式训练)
常见的分布式并行策略(分布式训练) 文章目录 一. 为什么分布式训练越来越流行二. 常见的并行策略2.1 数据并行2.2 模型并行2.3 流水并行2.4 混合并行二. 参考文献一. 为什么分布式训练越来越流行 近年来,深度学习被广泛应用到各个领域,包括计算机视觉、语言理解、语音识别、广…...
2025届毕业生推荐的六大AI学术助手解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于内容创作进程里,要减低AI生成文本的可检测比率,得从语义、结构以及…...
保障线上服务高可用借助 Taotoken 的容灾与路由能力
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 保障线上服务高可用借助 Taotoken 的容灾与路由能力 对于依赖大模型 API 的线上应用而言,服务的持续可用性是核心诉求之…...
专业指南:Anno 1800 Mod Loader完整使用教程与架构解析
专业指南:Anno 1800 Mod Loader完整使用教程与架构解析 【免费下载链接】anno1800-mod-loader The one and only mod loader for Anno 1800, supports loading of unpacked RDA files, XML merging and Python mods. 项目地址: https://gitcode.com/gh_mirrors/an…...
HoRain云--Lua table核心机制与高效实践
🎬 HoRain云小助手:个人主页 🔥 个人专栏: 《Linux 系列教程》《c语言教程》 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!…...
卸载软件后右键菜单残留?用PowerShell精准清理注册表(附一键备份脚本)
彻底告别右键菜单残留:PowerShell注册表清理实战指南 刚卸载完某款压缩软件,却发现右键菜单里依然顽固地留着它的选项——这种经历恐怕不少Windows用户都遇到过。上周帮同事处理电脑时,就遇到了一个典型案例:卸载"可牛压缩&q…...
STM32F103C6/RC + HC-SR04超声波测距:Proteus 8.9仿真避坑与LCD1602显示实战
STM32F103C6/RC HC-SR04超声波测距:Proteus 8.9仿真避坑与LCD1602显示实战 在嵌入式开发的学习过程中,仿真工具为我们提供了极大的便利,尤其是对于资源有限或硬件条件不足的开发者来说,Proteus仿真软件无疑是一把利器。然而&…...
从入门到精通:Python开发在Web后端的实战应用
在当今快速发展的互联网时代,Web后端开发作为连接前端界面与数据库的核心,其重要性不言而喻。Python,凭借其简洁的语法、强大的库支持以及活跃的社区,已成为Web后端开发的热门选择。本文将带你从零开始,逐步掌握Python…...
电子测试安全:示波器浮地测量与隔离变压器应用全解析
1. 项目概述:一次关于测试测量安全的深度探讨又到了周五,对于很多工程师来说,这可能是最想摸鱼但又不得不处理手头棘手问题的一天。想象一下这个场景:你面前摆着一台直接从市电取电的设备,它的某个测试点对地可能有高达…...
UAssetGUI终极指南:深度解析虚幻引擎资源文件转换技术
UAssetGUI终极指南:深度解析虚幻引擎资源文件转换技术 【免费下载链接】UAssetGUI A tool designed for low-level examination and modification of Unreal Engine game assets by hand. 项目地址: https://gitcode.com/gh_mirrors/ua/UAssetGUI UAssetGUI是…...
GIS制图必备:GlobalMapper 20制作1:100万标准图幅的完整指南与命名规则详解
GIS制图实战:GlobalMapper 20标准图幅生成与命名规范全解析 在测绘与地理信息行业,标准图幅不仅是数据管理的基石,更是跨部门协作的通用语言。当我们面对1:100万比例尺的地形图分幅时,每一个经纬网格的划分、每一组编号的生成&…...
