基于STM32的智能垃圾桶控制系统设计

news2024/12/26 13:27:21

引言

本项目设计了一个基于STM32微控制器的智能垃圾桶控制系统,能够通过超声波传感器检测手部动作,自动打开或关闭垃圾桶盖,提升用户的便利性和卫生性。该项目展示了STM32微控制器在传感器检测、伺服电机控制和嵌入式智能控制中的应用。

环境准备

1. 硬件设备
  • STM32F103C8T6 开发板(或其他 STM32 系列)
  • 超声波传感器模块(如 HC-SR04)
  • 舵机(用于控制垃圾桶盖的开合)
  • 蜂鸣器(用于提示音)
  • LED 指示灯(用于显示状态)
  • 面包板和杜邦线
  • USB-TTL 串口调试工具
2. 软件工具
  • STM32CubeMX:用于初始化 STM32 外设。
  • Keil uVision 或 STM32CubeIDE:用于编写和下载代码。
  • ST-Link 驱动程序:用于下载程序到 STM32。

项目实现

1. 硬件连接
  • 超声波传感器连接:将超声波传感器的 Trig 引脚连接到 STM32 的 GPIO 引脚(如 PA0),Echo 引脚连接到另一个 GPIO 引脚(如 PA1)。
  • 舵机连接:将舵机的信号引脚连接到 STM32 的 PWM 引脚(如 PA8),用于控制垃圾桶盖的开合。
  • 蜂鸣器连接:将蜂鸣器的控制引脚连接到 STM32 的 GPIO 引脚(如 PA2),用于提示垃圾桶状态。
  • LED 指示灯连接:将 LED 的控制引脚连接到 STM32 的 GPIO 引脚(如 PA3),用于显示垃圾桶的工作状态。
2. STM32CubeMX 配置
  • 打开 STM32CubeMX,选择你的开发板型号。
  • 配置系统时钟为 HSI,确保系统稳定运行。
  • 配置 GPIO 引脚用于超声波传感器、蜂鸣器和 LED 的控制。
  • 配置 PWM 输出,用于控制舵机的开合。
  • 生成代码,选择 Keil 或 STM32CubeIDE 作为工具链。
3. 编写主程序

在生成的项目基础上,编写超声波传感器测距、垃圾桶开关控制、提示音和状态显示的代码。以下是智能垃圾桶控制系统的基本代码示例:

#include "stm32f1xx_hal.h"
#include "servo.h"
#include "ultrasonic.h"

// 定义引脚
#define BUZZER_PIN GPIO_PIN_2
#define LED_PIN GPIO_PIN_3
#define BUZZER_PORT GPIOA
#define LED_PORT GPIOA

// 定义超声波阈值
#define OPEN_DISTANCE 15 // 15cm内检测到手部时打开垃圾桶

// 函数声明
void Buzzer_Control(uint8_t state);
void LED_Control(uint8_t state);
uint32_t Measure_Distance(void);
void System_Init(void);
void Trash_Can_Open(void);
void Trash_Can_Close(void);

// 初始化系统
void System_Init(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_TIM1_Init();  // PWM 初始化
    
    Servo_Init();    // 初始化舵机
    Ultrasonic_Init(); // 初始化超声波传感器
}

// 控制蜂鸣器
void Buzzer_Control(uint8_t state)
{
    HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, state ? GPIO_PIN_SET : GPIO_PIN_RESET);
}

// 控制 LED
void LED_Control(uint8_t state)
{
    HAL_GPIO_WritePin(LED_PORT, LED_PIN, state ? GPIO_PIN_SET : GPIO_PIN_RESET);
}

// 打开垃圾桶
void Trash_Can_Open(void)
{
    Servo_Open();  // 旋转舵机打开垃圾桶
    LED_Control(1);  // 点亮 LED
    Buzzer_Control(1);  // 发出提示音
    HAL_Delay(100); // 提示音短暂响起
    Buzzer_Control(0);
}

// 关闭垃圾桶
void Trash_Can_Close(void)
{
    Servo_Close();  // 旋转舵机关闭垃圾桶
    LED_Control(0);  // 关闭 LED
}

// 测量距离并判断是否打开垃圾桶
void Trash_Can_Control(void)
{
    uint32_t distance = Measure_Distance();
    
    if (distance < OPEN_DISTANCE)
    {
        Trash_Can_Open();
        HAL_Delay(5000);  // 打开垃圾桶 5 秒后自动关闭
        Trash_Can_Close();
    }
}

int main(void)
{
    System_Init();
    
    while (1)
    {
        Trash_Can_Control();  // 控制垃圾桶开关
        HAL_Delay(1000);  // 每秒钟检查一次距离
    }
}
4. 超声波传感器测距

以下是超声波传感器测量距离的代码示例:

#include "ultrasonic.h"

// 初始化超声波传感器
void Ultrasonic_Init(void)
{
    // 配置 GPIO 引脚,设置 Trig 为输出,Echo 为输入
}

// 测量距离
uint32_t Measure_Distance(void)
{
    uint32_t distance = 0;
    uint32_t local_time = 0;
    
    // 发送 Trig 脉冲
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
    HAL_Delay(10);  // 10 微秒脉冲
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);
    
    // 等待 Echo 的高电平并计算时间
    while (!HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1));
    while (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1))
    {
        local_time++;
        HAL_Delay(1);  // 1 微秒
    }
    
    // 计算距离(声速340米/秒)
    distance = (local_time * 0.034) / 2;
    
    return distance;
}
5. 舵机控制垃圾桶开关

以下是舵机控制垃圾桶盖开关的代码示例:

#include "servo.h"

// 初始化舵机
void Servo_Init(void)
{
    // PWM 初始化代码
}

// 打开垃圾桶盖
void Servo_Open(void)
{
    // 通过 PWM 控制舵机旋转到打开的位置
}

// 关闭垃圾桶盖
void Servo_Close(void)
{
    // 通过 PWM 控制舵机旋转到关闭的位置
}

⬇帮大家整理了单片机的资料

包括stm32的项目合集【源码+开发文档】

点击下方蓝字即可领取,感谢支持!⬇

点击领取更多嵌入式详细资料

问题讨论,stm32的资料领取可以私信!

 

6. 系统工作原理
  • 距离检测:通过超声波传感器检测手部或物体的距离,当物体接近垃圾桶并进入设定的检测范围(如 15cm),系统会自动打开垃圾桶盖。
  • 舵机控制:使用舵机控制垃圾桶盖的开合,舵机通过 PWM 信号来调节转角。
  • 状态提示:当垃圾桶盖打开时,LED 指示灯亮起,同时蜂鸣器发出短促提示音,提示垃圾桶状态变化。
  • 自动关闭:垃圾桶盖打开一段时间后(如 5 秒),系统会自动关闭垃圾桶盖,防止长时间保持打开状态。

常见问题与解决方法

1. 超声波传感器测距不准确
  • 检查超声波传感器的连接是否正确,确保 Trig 和 Echo 引脚没有接反。
  • 确保测量环境没有过多干扰物,以免影响超声波的传播和反射。
2. 舵机无法正常控制垃圾桶盖
  • 检查舵机的 PWM 信号是否正常输出,确保 PWM 配置正确。
  • 检查舵机供电是否充足,确保舵机能够正常旋转。
3. 蜂鸣器和 LED 无反应
  • 确保蜂鸣器和 LED 的引脚连接正确,检查 GPIO 的初始化是否正确。
  • 确保蜂鸣器和 LED 的供电电压满足工作要求。

结论

通过本项目,我们设计了一个基于STM32的智能垃圾桶控制系统,实现了通过超声波检测自动控制垃圾桶盖的开关,同时结合了舵机、蜂鸣器和LED显示,提升了用户的交互体验和便利性。该系统可广泛应用于家庭、办公室等场景,展示了STM32在物联网和智能设备中的实际应用。

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

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

相关文章

在不支持WSL2的Windows环境下安装Redis并添加环境变量的方法

如果系统版本支持 WSL 2 可跳过本教程。使用官网提供的教程即可 官网教程 查看是否支持 WSL 2 如果不支持或者觉得麻烦可以按照下面的方式安装 下载 点击打开下载地址 下载 zip 文件即可 安装 将下载的 zip 文件解压到自己想要解压的地方即可。&#xff08;注意&#x…

毕业设计选题:基于ssm+vue+uniapp的模拟考试小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

2024最新 Navicat Premium 17 简体中文版安装图文详细教程

Navicat 17 引入了一系列新特性&#xff0c;旨在提升用户体验和工作效率。以下是一些值得关注的新功能&#xff1a; ‌模型工作区的全面重新设计‌&#xff1a;包含了增强的图表设计、更强大的同步工具、数据字典支持等多项功能。这有助于在一个工作区中创建多个模型&#xff0…

集合论基础 - 离散数学系列(一)

目录 1. 集合的基本概念 什么是集合&#xff1f; 集合的表示方法 常见的特殊集合 2. 子集与幂集 子集 幂集 3. 集合的运算 交集、并集与补集 集合运算规则 4. 笛卡尔积 5. 实际应用 6. 例题与练习 例题1 练习题 总结 引言 集合论是离散数学的基础之一&#xff…

HarmonyOS第一课 04 应用程序框架基础-习题分析

判断题 1.在基于Stage模型开发的应用项目中都存在一个app.json5配置文件、以及一个或多个module.json5配置文件。T 正确(True) 错误(False) 这个答案是T - AppScope > app.json5&#xff1a;app.json5配置文件&#xff0c;用于声明应用的全局配置信息&#xff0c;比如应用…

利用大规模语言模型提高生物医学 NER 性能的新方法

概述 论文地址&#xff1a;https://arxiv.org/pdf/2404.00152.pdf 大规模语言模型在零拍摄和四拍摄任务中表现出色&#xff0c;但在生物医学文本的独特表达识别&#xff08;NER&#xff09;方面仍有改进空间。例如&#xff0c;Gutirrez 等人&#xff08;2022 年&#xff09;的…

Chrome浏览器调用ActiveX控件--allWebOffice控件功能介绍

allWebOffice控件概述 allWebOffice控件能够实现在浏览器窗口中在线操作文档的应用&#xff08;阅读、编辑、保存等&#xff09;&#xff0c;支持编辑文档时保留修改痕迹&#xff0c;支持书签位置内容动态填充&#xff0c;支持公文套红&#xff0c;支持文档保护控制等诸多办公功…

医院伤病员食堂批量打印—未来之窗行业应用跨平台架构

一、订单后厨打印批量 在医院伤员管理中&#xff0c;预约订单现场打印的方式往往不太合适。现场打印可能会导致效率低下&#xff0c;尤其在伤员较多、情况紧急的时候&#xff0c;容易造成混乱和延误。 采用统一打印的方式具有诸多优势。首先&#xff0c;能够集中处理打印任务&…

猴子吃桃-C语言

1.问题&#xff1a; 猴子第一天摘下若干个桃子&#xff0c;当即吃了一半&#xff0c;还不过瘾&#xff0c;又多吃了一个。 第二天早上又将剩下的桃子吃掉一半&#xff0c;又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时&#xff0c;见只剩下一个…

ctf.bugku - SOURCE

题目来源&#xff1a; source - Bugku CTF 首先&#xff0c;访问页面&#xff0c; 得到的是假的 flag &#xff0c; 查看前端页面、代码、response返回&#xff1b; 没有有用信息&#xff1b; 查后端&#xff1a; git泄露 下载git文件 # wget -r http://114.67.175.224:156…

SIE将使用AI和机器学习加速游戏开发

索尼在一份新的索尼公司报告中透露&#xff0c;PlayStation将利用人工智能和机器学习来加快游戏开发速度。在报告的第16页&#xff0c;索尼表示&#xff1a;“加强能够帮助创作者以高效、高质量的方式最大化其IP价值的技术&#xff0c;包括传感和捕捉以及实时3D处理、人工智能和…

IDM6.42免费安装破解注册(Internet Download Manager)

01 到官网或者网盘下载安装包 中文官网链接&#xff1a; https://souurl.cn/9nbWw2 优惠码&#xff1a;WMHRDIDM5 夸克网盘&#xff1a;https://pan.quark.cn/s/885c8a9e487e​​​​​​​ 02 Powershell脚本使用: 总的来说&#xff0c;这段代码的目的是通过管理员身份下…

Spring Boot助力医院数据管理

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常适…

SolidWorks零件图到工程图标记尺寸

SolidWorks零件图&#xff0c;生成工程图后&#xff0c;自动标注尺寸&#xff1b;&#xff08;在零件图中尺寸做了标注&#xff0c;导出成工程图后&#xff0c;尺寸不一定合适&#xff0c;需要手动挪一下位置&#xff09;

solidity中的函数详解

1.概念 在Solidity中&#xff0c;函数是智能合约的基本构建块&#xff0c;用于实现特定的业务逻辑。以下是Solidity函数的一些关键特性和详细解释&#xff1a; 函数定义; 函数由 function 关键字开始&#xff0c;后跟函数的名称、参数列表和返回值。函数可以是内部的&#xff…

PHP变量(第④篇)

本栏目教学是php零基础到精通&#xff0c;如果你还没有安装php开发工具请查看下方链接&#xff1a; Vscode、小皮面板安装-CSDN博客 今天来讲一讲php中的变量&#xff0c;变量是用于存储信息的"容器"&#xff0c;这些数据可以在程序执行期间被修改&#xff08;即其…

【自动驾驶】《Planning-oriented Autonomous Driving》UniAD论文阅读笔记

1.参考 论文&#xff1a;https://arxiv.org/pdf/2212.10156 代码&#xff1a;https://github.com/OpenDriveLab/UniAD 2.摘要 原来的自动驾驶任务都是分为模块化的&#xff0c;感知&#xff0c;预测&#xff0c;规划等。每个独立的任务可能都优化得很好&#xff0c;但可能会…

NR工作频段

NR定义了两个频率范围&#xff0c;FR1和FR2。在很多场景下&#xff0c;对于不同的频率范围&#xff08;FR&#xff09;&#xff0c;射频规范是单独定义的。NR可以工作的频率范围&#xff0c;即FR1和FR2的频率范围&#xff0c;如下表所示。 FR频率范围FR1410 MHz – 7125 MHzFR…

苍穹外卖学习笔记(十五)

文章目录 一. 缓存菜品缓存菜品DishController.java清除缓存数据 缓存套餐Spring Cachemaven坐标常用注解 入门案例springcachedemo.sqlpom.xmlapplication.ymlCacheDemoApplication.javaWebMvcConfiguration.javaUserController.javaUser.javaUserMapper.java 套餐管理SkyAppl…

大模型之大模型压缩(量化、剪枝、蒸馏、低秩分解),推理(vllm)

目录 前言 一、模型量化&#xff08;quantization&#xff09; 1. 量化概念 2. 模型量化优点 3. 什么情况下应该/不应该使用模型量化 4. 落地挑战 5. 量化方法 5.1 量化训练(Quant Aware Training, QAT) 原理 [伪量化节点&#xff08;fake quant&#xff09;](https://blog.csd…