C语言使用STM32开发板手搓高端家居洗衣机

news2024/12/24 2:12:41

目录

概要

成品效果

背景概述

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中,任务的优先级规则如下:

  1. 优先级分配:每个任务都可以被分配一个唯一的优先级。在FreeRTOS中,优先级编号通常是一个无符号整数,优先级的范围可以从0到configMAX_PRIORITIES-1,其中configMAX_PRIORITIES是在FreeRTOS配置文件中定义的。

  2. 最高优先级规则:FreeRTOS是一个基于优先级的抢占式调度器。当多个任务处于就绪状态时,调度器将选择优先级最高的任务来执行。如果有两个或多个任务具有相同的优先级,调度器将根据任务的就绪态切换(round-robin)来决定执行哪个任务。

  3. 优先级继承:当高优先级任务试图访问一个已经被低优先级任务占用的资源(如互斥量)时,低优先级任务将临时继承高优先级任务的任务优先级,以防止高优先级任务发生优先级反转(priority inversion)。一旦低优先级任务释放了资源,它的优先级将恢复到原来的值。

  4. 优先级天花板协议:这是一种可选的优先级继承的变种,它可以减少优先级反转的发生。在天花板协议中,当任务获取互斥量时,它会将自己的优先级提升到该互斥量的天花板优先级(一个预先定义的最高优先级),从而防止更高优先级的任务被阻塞。

  5. 中断和临界区:中断服务例程(ISR)的执行优先级高于所有任务。在ISR中,可以调用中断安全的API来执行一些操作。为了保护共享资源,任务可以使用临界区,在临界区中,调度器会被暂时禁用,以防止其他任务执行。

  6. 时间片调度:尽管FreeRTOS是抢占式的,但它也支持时间片(time-slicing)的概念。如果启用了时间片,具有相同优先级的任务将轮流执行,每个任务运行一个时间片(quantum)后,调度器将切换到下一个就绪的任务。

小结

        以上就是部分项目难点和实现过程,实际开发过程绝不像现在述说般的云淡风轻。例如硬件上:线路繁多,要考虑板子有限的IO口和ADC转换器安排分配;机体空间不大,考虑水泵、滚筒等传感器位置和协调;传感器众多,板子电压不足等等情况。

        而在软件上,考虑各模块的通信,熟系不同时序图后,最起码的延时要通过计算总线频率、设置预分频寄存器、重载寄存器来计数达到。而上了操作系统后又要考虑非阻塞延时和阻塞延时等设计;要查看各个传感器数据手册、原理图进行控制和通信...

        项目的各模块代码累积几千行,成品出来后让人心里生成慢慢成就感。本产品也有市场上其他产品所不具备的功能,比如可燃气检测,部分家庭仍然是使用煤气或天然气热水器,而这些可燃气都有泄露的风险。本产品可实时检测可燃气浓度,在超过指定值后蜂鸣器报警并在APP提醒用户,避免发送意外。而本产品设计之初是加装了语言模块,用户通过关键词唤醒智能管家后。可语言选择洗衣模式。后面考虑到可能有儿童误触发语言条件,如果进入机体,容易发生意外,最后移除掉语言功能。

        这次的项目让我对嵌入式产品开发有了更深入的认识,知道了和传感器通信的IIC、SPI、UART等协议,开拓了视野。我对嵌入式开发信心更胜。源码已经开源,希望道友们都能乘风破浪,到达彼岸!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1558227.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

物联网学习1、什么是 MQTT?

MQTT(Message Queuing Telemetry Transport)是一种轻量级、基于发布-订阅模式的消息传输协议,适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境。它在物联网应用中广受欢迎,能够实现传感器、执行器和其它设备之间的高效通…

【Monero】Wallet RPC | Wallet CLI | 门罗币命令行查询余额、种子、地址等命令方法教程

ubuntu22.04 首先在运行daemon,详细安装运行教程可参考:The Monero daemon (monerod) ./monerodWallet CLI run ./monero-wallet-cli如果还没有钱包就根据提示创建钱包即可 输入密码 查询余额 balance查询种子 seed其他可执行命令操作&#xff1…

Linux:查看系统各个组件性能的方法

查看cpu top 还有更为直观的 htop 可以同时看到,内存占用,cpu占用,交换内存的占用 vmstat 是比较综合的可以看到内存,交换内存,io吞吐,系统,cpu 查看内存 free -h 可以看懂内存的使用情况 …

企业知识库搭建不再是难题,靠这几个软件就可以了

在当今知识为王的时代,具备一套强大且实用的企业知识库(Knowledge Base)已成为提升工作效率、促进团队合作不可或缺的工具。那么,问题来了,我们该如何搭建一套属于自己的知识库呢?今天,我就给大…

Spring IoCDI(3)

DI详解 接下来学习一下依赖注入DI的细节. 依赖注入是一个过程, 是指IoC容器在创建Bean时, 去提供运行时所依赖的资源, 而资源指的就是对象. 在之前的案例中, 使用了Autowired这个注解, 完成了依赖注入这个操作. 简单来说, 就是把对象取出来放到某个类的属性中. 在一些文章中…

C++学习随笔(8)——模板初阶

本章我们来学习一下C的模版部分! 目录 1. 泛型编程 2. 函数模板 2.1 函数模板概念 2.1 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 3. 类模板 3.1 类模板的定义格式 3.2 类模板的实例化 1. 泛型编程 如何实现一个通…

【C++】为什么能实现函数重载

从C语言一路学到C的途中,C语言C语言相比,多了个函数重载,那么函数重载是如何实现的呢,为什么C语言无法支持,在本篇博客中,将会讲解C为何能实现函数重载。 一.编译过程 C能实现函数重载,而C语言不…

CloudFlare WARP+ 无限流量

Cloudflare WARP 是一种由 Cloudflare 提供的虚拟专用网络(VPN)服务,旨在提供更安全、更快速的互联网连接。WARP 的目标是通过使用 Cloudflare 的全球网络基础设施来加密和保护用户的互联网流量,并且通过优化路由和连接&#xff0…

012_control_flow_in_Matlab中的控制流

Matlab中的控制流 虽然,我们说Matlab中的计算是向量化的,但是在某些情况下,作为一个“程序设计语言”,Matlab也提供了一些控制流结构,来帮助我们实现一些复杂的逻辑。 我会在介绍控制流的时候,提醒如何用…

Spark源码(二)-Netty简介

一、Netty简介 Netty 是一个异步事件驱动的网络通信应用框架,用于快速开发可维护的高性能服务器和客户端。简单地说Netty封装了JDK的NIO,不用再写一大堆复杂的代码,从NIO各种繁复的细节中脱离出来,让开发者重点关心业务逻辑。 二…

新书速递——《可解释AI实战(PyTorch版)》

本书旨在帮助你实施最新的可解释AI技术,以构建公平且可解释的AI系统。可解释AI是当今AI研究中的热门话题,但只有少数资源和指南涵盖了所有重要技术,这些技术对实践者来说非常有价值。本书旨在填补这一空白。 本书读者对象 本书既适合那些有兴…

阿里云2核4G云服务器支持多少人同时在线?并发数计算?

阿里云2核4G服务器多少钱一年?2核4G配置1个月多少钱?2核4G服务器30元3个月、轻量应用服务器2核4G4M带宽165元一年、企业用户2核4G5M带宽199元一年。可以在阿里云CLUB中心查看 aliyun.club 当前最新2核4G服务器精准报价、优惠券和活动信息。 阿里云官方2…

04 | Swoole 源码分析之 epoll 多路复用模块

首发原文链接:Swoole 源码分析之 epoll 多路复用模块 大家好,我是码农先森。 引言 在传统的IO模型中,每个IO操作都需要创建一个单独的线程或进程来处理,这样的操作会导致系统资源的大量消耗和管理开销。 而IO多路复用技术通过…

第十四届蓝桥杯JavaA组省赛真题 - 棋盘

解题思路: 暴力 棋盘类题目取反操作: f[a][b]^1; 或者f[a][b] 1 - f[a][b]; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);int n scan.nextInt();int m scan.nex…

(南京观海微电子)——GOA介绍

GOA是Gate on Array的简写,简单可以理解为gate IC集成在玻璃上了,面板就可以不用gate ic了,是一种低成本的设计,窄边框面板大多数都用了GOA技术。还有一些公司叫GIP(Gate in Panel),GDM等等。 …

已上线项目,突然有一天网站虽进得去,但是接口拿不到数据,作为前端的你如何排查问题?

在开始写这篇博客之前,想说几句题外话哈,虽然自己的粉丝不多,但自己每篇博客都是用心在写,可能后面会针对部分文章开启只有VIP才能访问,原因你们也懂得(▽),无非是想赚点外块呗,不过主要现在也是知识付费时代,毕竟自己写出的东西也是本人亲身经历着,也是具有一定的价值…

针对pycharm打开新项目需要重新下载tensorflow的问题解决

目录 一、前提 二、原因 三、解决办法 一、前提 下载包之前,已经打开了,某个项目。 比如:我先打开了下面这个项目: 然后在terminal使用pip命令下载: 如果是这种情况,你下载的这个包一般都只能用在这一个…

【已解决】centos执行Hangfire任务时间隔八个小时

参数说明: centos系统是7.9版本的 hangfire是Hangfire 1.8.7 centos系统的目前设置时区是cts的东八时区,截图如下 原因: hangfire任务设定每天执行时间东八实际偏移的执行时间 比如:你设定的是早上6点执行东八实际下午两点执行 …

【web自动化】selenium的使用(二)

目录 复选框操作多层框架操作下拉框操作弹窗操作 复选框操作 示例&#xff1a;批量操作对象&#xff0c;比如将页面上所有的checkbox 都勾上 方法&#xff1a;先用标签选择器选择页面上所有的input&#xff0c;然后从中过滤出属性type是checkbox的 并勾选 List<WebElemen…

Debian linux版本下运行的openmediavault网盘 千兆网卡升级万兆

一、适用场景 1、使用vmware ESXi虚拟化平台运行多种不同应用服务器时&#xff0c;其中网盘服务器采用开源的openmediavault搭建&#xff1b; 2、将老专业服务器升级千兆网为万兆网&#xff1b; 3、需要转移的数据量大的企业或用户&#xff1b; 4、从服务器到服务器的数据转移…