【32项目】基于stm32f103c8t6的智能垃圾桶设计(含完整代码)

发布时间:2024-11-12 06:25

目录

前言

设计背景

所需材料

1.全部材料:

2.舵机SG90:

3.蓝牙模块

4.红外对射管

描述

对射式光电开关工作原理

PCB及原理图

部分代码(完整代码见文章末尾)

经验总结

 硬件设计方面:

软件编程方面:

系统集成方面:

实际应用方面:

前言


智能垃圾桶设计是物联网技术在环保领域的重要应用之一。随着我国城市化进程的加快,垃圾处理问题日益凸显。传统的垃圾桶存在分类不明确、满载率高、清理不及时等问题,给城市管理带来了诸多困扰。基于此,本文旨在探讨基于STM32F103C8T6的智能垃圾桶设计。
STM32F103C8T6是一款高性能、低成本的32位ARM Cortex-M3微控制器,具有丰富的外设资源和强大的处理能力。将其应用于智能垃圾桶设计,具有以下优势:
1. 实现垃圾分类:通过搭载各类传感器,智能垃圾桶能够自动识别垃圾种类,引导用户进行正确投放,提高垃圾分类效果。
2. 智能满载检测:利用传感器实时监测垃圾桶内垃圾的满载程度,当达到设定阈值时,自动发送清运请求,提高清理效率。
3. 网络化管理:通过无线通信技术,将智能垃圾桶与城市管理平台连接,实现垃圾桶状态的实时监控和远程调度。
4. 节能环保:采用太阳能供电方式,降低能源消耗,符合绿色环保理念。
5. 互动性强:可通过人机交互界面与用户进行互动,提高用户参与垃圾分类的积极性。
本文将详细介绍基于STM32F103C8T6的智能垃圾桶的设计原理、硬件选型、软件编程及实际应用,为我国垃圾分类和城市管理提供一种新型、高效、智能的解决方案。希望通过本文的研究,能为推动我国环保事业的发展贡献力量。

设计背景


1. 城市化进程加速:随着我国经济的快速发展,城市化进程不断加快,城市人口日益增多,生活垃圾产量也随之增加。据统计,我国城市生活垃圾年产量已超过2亿吨,且每年以约10%的速度增长。
2. 垃圾分类政策推广:为了减轻垃圾处理压力,提高资源回收利用率,我国政府大力推广垃圾分类政策。许多城市已经实施了垃圾分类制度,要求居民对生活垃圾进行分类投放。
3. 生态环境保护需求:垃圾处理不当会导致严重的环境污染问题,如土壤污染、水体污染、空气污染等。生态环境保护已成为全球共识,减少垃圾污染,保护生态环境成为迫切需求。
4. 传统垃圾桶的局限性:传统垃圾桶存在分类不明确、满载率高、清理不及时等问题,导致垃圾处理效率低下,严重影响城市环境卫生和居民生活质量。
5. 物联网技术的发展:随着物联网技术的不断成熟,其在各个领域的应用日益广泛。将物联网技术应用于垃圾桶设计,可以实现垃圾桶的智能化、网络化管理,提高垃圾处理效率。
6. 智能硬件普及:近年来,智能硬件市场迅速发展,各类传感器、微控制器等硬件成本不断降低,为智能垃圾桶的设计提供了良好的硬件基础。
基于以上背景,设计一款基于STM32F103C8T6的智能垃圾桶具有以下意义:
- 符合国家政策导向,推动垃圾分类工作的实施;
- 提高垃圾处理效率,减轻城市环境卫生压力;
- 促进资源回收利用,实现绿色可持续发展;
- 提升城市智能化管理水平,为居民提供便捷服务;
- 推动物联网技术在环保领域的应用,具有广泛的市场前景。
因此,基于STM32F103C8T6的智能垃圾桶设计具有重要的现实意义和应用价值。

所需材料

1.全部材料: LEDLED红灯, LED红灯, LED红灯, LED绿灯, LED红灯LEDLED红灯DC_Socket电源插座220uF直插电解电容下载口下载口BUTTOM按键1k电阻KFT DIP-8X8自锁按键JS红外对射管--计数SG90舵机STM32F103STM32F103SNR8016语音识别模块JDY-31蓝牙 2.舵机SG90:

舵机可以在微机电系统和航模中作为基本的输 出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口。舵机是一种位置(角度)伺服的驱动器,适用于 那些需要角度不断变化并可以保持的控制系统。

控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽 度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机 驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。

源程序

#include "stm32f10x.h"

#include "stm32f10x_rcc.h"

#include "stm32f10x_gpio.h"

#include "stm32f10x_tim.h"

#define SERVO_TIM TIM2

#define SERVO_TIM_CHANNEL TIM_Channel_2

#define SERVO_GPIO_PORT GPIOA

#define SERVO_GPIO_PIN GPIO_Pin_1

#define SERVO_PWM_FREQ 50

#define SERVO_PWM_PERIOD (SystemCoreClock / (SERVO_PWM_FREQ * 2))

void Servo_Init(void) {

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = SERVO_GPIO_PIN;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(SERVO_GPIO_PORT, &GPIO_InitStructure);

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_TimeBaseStructure.TIM_Period = SERVO_PWM_PERIOD - 1;

TIM_TimeBaseStructure.TIM_Prescaler = 0;

TIM_TimeBaseStructure.TIM_ClockDivision = 0;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(SERVO_TIM, &TIM_TimeBaseStructure);

TIM_OCInitTypeDef TIM_OCInitStructure;

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

TIM_OCInitStructure.TIM_Pulse = 0;

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

TIM_OC2Init(SERVO_TIM, &TIM_OCInitStructure);

TIM_OC2PreloadConfig(SERVO_TIM, TIM_OCPreload_Enable);

TIM_Cmd(SERVO_TIM, ENABLE);

}

void Servo_SetAngle(float angle) {

int pulse_width = (int)((angle / 180.0) * (2000 - 1000) + 1000);

int duty_cycle = (int)((float)pulse_width / 20000.0 * SERVO_PWM_PERIOD);

TIM_SetCompare2(SERVO_TIM, duty_cycle);

}

int main(void) {

SystemInit();

Servo_Init();

Servo_SetAngle(90.0);

while (1) {

for (float angle = 0.0; angle <= 180.0; angle += 10.0) {

Servo_SetAngle(angle);

for (int i = 0; i < 1000000; i++);

}

}

}

3.蓝牙模块

JDY-31 蓝牙基于蓝牙 3.0 SPP 设计,这样可以支持 Windows、Linux、android 数据透传, 工作频段 2.4GHZ,调制方式 GFSK,最大发射功率 8db,最大发射距离 30 米,支持用户通过 AT 命令修改设备名、波特率等指令,方便快捷使用灵活。

4.红外对射管 描述

  对射型光电开关:由发射器和接收器组成,结构上是两者相互分离的,在光束被中断的情况下会产生一个开关信号变化,典型的方式是位于同一轴线上的光电开关可以相互分开达50米。

  特征:辨别不透明的反光物体;有效距离大,因为光束跨越感应距离的时间仅一次;不易受干扰,可以可靠合适的使用在野外或者有灰尘的环境中;装置的消耗高,两个单元都必须敷设电缆。

对射式光电开关工作原理

  对射式光电开关由发射器和接收器组成,其工作原理是:通过发射器发出的光线直接进入接收器,当被检测物体经过发射器和接收器之间阻断光线时,光电开关就产生开关信号。

  对射式光电开关包含在结构上相互分离且光轴相对放置的发射器和接收器,发射器发出的光线直接进入接收器。当被检测物体经过发射器和接收器之间且阻断光线时,光电开关就产生了开关信号。当检测物体是不透明时,对射式光电开关是最可靠的检测模式。

PCB及原理图

buf

部分代码(完整代码见文章末尾)

main.c

#include "sys.h"

#include "stdio.h"

#include "string.h"

#include "delay.h"

#include "gpio.h"

#include "key.h"

#include "usart.h"

#include "motor_duoji.h"

uint8_t key_num = 0;

uint32_t time_num = 0;

uint8_t flag_waste_1 = 0;

uint8_t flag_waste_2 = 0;

uint8_t flag_waste_3 = 0;

uint8_t flag_waste_4 = 0;

extern uint8_t usart2_buf[64];

void Key_function(void);

void Monitor_function(void);

void Manage_function(void);

int main()

{

Delay_Init();

Gpio_Init();

Key_Init();

Motor_Duoji_Init();

Motor_Duoji2_Init();

Usart1_Init(9600);

Usart2_Init(9600);

TIM_SetCompare1(TIM1,1850);

Delay_ms(100);

TIM_SetCompare4(TIM1,1850);

Delay_ms(100);

TIM_SetCompare1(TIM2,1850);

Delay_ms(100);

TIM_SetCompare2(TIM2,1850);

Delay_ms(100);

while(1)

{

Key_function();

Monitor_function();

Manage_function();

Delay_ms(10);

time_num++;

if(time_num >= 5000)

{

time_num = 0;

}

}

}

void Key_function(void)

{

key_num = Chiclet_Keyboard_Scan(0);

if(key_num != 0)

{

switch(key_num)

{

case 1:

TIM_SetCompare1(TIM2,1900);

Delay_ms(1000);

Delay_ms(1000);

TIM_SetCompare1(TIM2,1850);

break;

case 2:

TIM_SetCompare2(TIM2,1900);

Delay_ms(1000);

Delay_ms(1000);

TIM_SetCompare2(TIM2,1850);

break;

case 3:

TIM_SetCompare1(TIM1,1900);

Delay_ms(1000);

Delay_ms(1000);

TIM_SetCompare1(TIM1,1850);

break;

case 4:

TIM_SetCompare4(TIM1,1900);

Delay_ms(1000);

Delay_ms(1000);

TIM_SetCompare4(TIM1,1850);

break;

default:

break;

}

}

}

void Monitor_function(void)

{

if(USART2_WaitRecive() == 0)

{

if(usart2_buf[0] == 0x01)

{

TIM_SetCompare1(TIM2,1900);

Delay_ms(1000);

Delay_ms(1000);

TIM_SetCompare1(TIM2,1850);

USART2_Clear();

}

else if(usart2_buf[0] == 0x02)

{

TIM_SetCompare2(TIM2,1900);

Delay_ms(1000);

Delay_ms(1000);

TIM_SetCompare2(TIM2,1850);

USART2_Clear();

}

else if(usart2_buf[0] == 0x03)

{

TIM_SetCompare1(TIM1,1900);

Delay_ms(1000);

Delay_ms(1000);

TIM_SetCompare1(TIM1,1850);

USART2_Clear();

}

else if(usart2_buf[0] == 0x04)

{

TIM_SetCompare4(TIM1,1900);

Delay_ms(1000);

Delay_ms(1000);

TIM_SetCompare4(TIM1,1850);

USART2_Clear();

}

}

}

void Manage_function(void)

{

if(IR_1 == 1)

{

Delay_ms(1000);

if(IR_1 == 1)

{

LED1_G = 1;

LED1_R = 0;

if(flag_waste_1)

{

UsartPrintf(USART1,"可回收垃圾桶已满\r\n");

flag_waste_1 = 0;

}

}

}

else

{

LED1_G = 0;

LED1_R = 1;

flag_waste_1 = 1;

}

if(IR_2 == 1)

{

Delay_ms(1000);

if(IR_2 == 1)

{

LED2_G = 1;

LED2_R = 0;

if(flag_waste_2)

{

UsartPrintf(USART1,"厨余垃圾桶已满\r\n");

flag_waste_2 = 0;

}

}

}

else

{

LED2_G = 0;

LED2_R = 1;

flag_waste_2 = 1;

}

if(IR_3 == 1)

{

Delay_ms(1000);

if(IR_3 == 1)

{

LED3_G = 1;

LED3_R = 0;

if(flag_waste_3)

{

UsartPrintf(USART1,"有害垃圾桶已满\r\n");

flag_waste_3 = 0;

}

}

}

else

{

LED3_G = 0;

LED3_R = 1;

flag_waste_3 = 1;

}

if(IR_4 == 1)

{

Delay_ms(1000);

if(IR_4 == 1)

{

LED4_G = 1;

LED4_R = 0;

if(flag_waste_4)

{

UsartPrintf(USART1,"其他垃圾桶已满\r\n");

flag_waste_4 = 0;

}

}

}

else

{

LED4_G = 0;

LED4_R = 1;

flag_waste_4 = 1;

}

}

经验总结

基于STM32F103C8T6的智能垃圾桶设计是一个综合性的工程项目,涉及硬件设计、软件编程、系统集成和实际应用等多个方面。以下是一些设计经验总结,供参考:


 硬件设计方面:


1. 传感器选择:
   - 选择合适的传感器是关键。例如,对于重量检测,应选择高精度、高稳定性的重量传感器。
   - 考虑传感器的功耗、尺寸和接口兼容性。
2. 电源管理:
   - 由于智能垃圾桶可能部署在户外,电源管理非常重要。可以考虑使用太阳能电池板结合电池方案。
   - 设计电源管理系统时,要确保电源转换效率高,有过充过放保护。
3. 防护措施:
   - 垃圾桶的硬件部分需要有一定的防护措施,以适应各种恶劣环境,如防水、防尘、防腐蚀等。
4. 通信模块:
   - 根据应用场景选择合适的通信模块,如Wi-Fi、蓝牙、NB-IoT等,确保数据传输的稳定性和可靠性。


软件编程方面:


1. 固件优化:
   - 优化代码结构,减少资源占用,提高固件的执行效率。
   - 考虑使用状态机或事件驱动的方式来管理程序流程。
2. 算法精确性:
   - 对于垃圾分类和满载检测,算法的精确性至关重要。需要通过大量实验数据来训练和优化算法。
3. 错误处理:
   - 在软件中实现健壮的错误处理机制,确保系统在出现异常时能够自动恢复或报告错误。
4. 用户交互:
   - 设计直观易用的用户界面,提供清晰的指示和反馈。


系统集成方面:


1. 模块化设计:
   - 采用模块化设计,便于后期维护和升级。
2. 兼容性和扩展性:
   - 系统设计时考虑兼容性和扩展性,以便未来可以添加更多功能或与其他系统集成。
3. 测试验证:
   - 在系统集成后进行充分的测试,包括功能测试、性能测试、稳定性测试等。


实际应用方面:


1. 用户习惯培养:
   - 在实际部署时,需要考虑如何培养用户使用智能垃圾桶的习惯。
2. 维护和运营:
   - 设计易于维护的系统,并制定合理的运营策略。
3. 环境适应性:
   - 考虑智能垃圾桶在不同环境下的适应性,如温度、湿度、光照等。
4. 法规遵守:
   - 确保设计符合当地的法律法规和环保要求。
通过上述经验总结,可以在设计基于STM32F103C8T6的智能垃圾桶时避免一些常见问题,提高项目的成功率。
 

注:完整代码通过网盘分享的文件:3-实物程序
链接: https://pan.baidu.com/s/1Md9I4eNs7-ysFvFoZyGVJA?pwd=vjvu 提取码: vjvu

------------------------------每天不定时分享,大佬们点点关注吧!!!!!------------------------


 


 

网址:【32项目】基于stm32f103c8t6的智能垃圾桶设计(含完整代码) https://www.yuejiaxmz.com/news/view/47029

相关内容

32、基于51单片机红外智能垃圾桶系统设计(程序+原理图+仿真+元件清单+开题报告+参考论文等)
基于STM32的智能宠物看护喂养系统(程序源码+原理图+PCB+Boom表+实物操作说明)
【垃圾桶知识百科】垃圾桶的尺寸是多大 垃圾桶选购技巧
基于STM32的宠物远程投喂和监测系统设计
智能生活之垃圾桶篇:开盖打包换袋一气呵成,少不了的科技体验
环保美观 节省空间 隔绝臭气 宝安首个地埋式垃圾分类桶站在福永投用
渑池县城市管理局渑池县生活垃圾应急处置场建设项目
关于加强我市生活垃圾分类工作的建议
家里要备4个垃圾桶?垃圾分类的20个问题答疑
关于印发《上海市生活垃圾分类投放指引(2024版)》的通知

随便看看