基于stm32智慧分拣系统

一、功能概述

        智慧分拣是为了实现垃圾分类更方便、更具体,也便捷人们丢垃圾。该分拣系统有厨余垃圾桶,有害垃圾桶、可回收垃圾桶。该系统具有当人员靠经垃圾桶时、就会打开对应的垃圾桶,该功能具有一定的人性化。当对应说出垃圾名称,分拣系统就会打开对应的垃圾桶,实现 垃圾分类。分拣系统也还具有,自我消毒的模式,这样能减少垃圾桶中细菌的滋生。分拣系统执行的动作,也会传输到蓝牙端、这样便于管理人员管理。工作人员也可以通过蓝牙APP,远程来控制分拣系统的动作。

二、项目模块

垃圾桶(三个)、超声波(三个)、舵机(四个)、继电器、消毒喷雾、su-03t(语音模块)、stm32f103c8t6、led(三个)

三、核心代码(需要代码可以联系)

5.main
#include "stm32f10x.h"
#include "main.h"
#include "led.h"
#include "bear.h"
#include "switch.h"
#include "exit.h"
#include "usart.h"
#include <stdio.h>
//#include "tim.h"
#include "motor.h"
#include "SystemTick.h"
#include "wave.h"
#include "spi.h"
#include "wave2.h"
#include "wave3.h"
#include "bluetooth.h"
#include "string.h"




//1是可回收,2是有害,3是厨余,消毒模式4,打开所有5
char buff;//存放语音模块的数据
char tmp;
int  main()
{
	float Wave_Len[3] = {0};//存放超声波的距离空间
	
	
	initSysTick();	//定时器初始化
	usart_init();	//串口初始化

	INIT_LED();
	switch_init();
	USART2_Init();//蓝牙初始化
	Confige_S90_Init();
	wave_config();		//超声波一的初始化
	wave2_config();
	
	//定时器1超声波的初始化
	GPIO_Config();
	TIM_Config();
	
	//舵机回到最初始状态
	S90_OC1_state_90;
	S90_OC2_state_90;
	S90_OC3_state_90;
	S90_OC4_state_0;
   while(1)
	 {


//		 printf("tmp == %c\r\n",tmp); 

		 Wave_Len[0] = getLen();		//获取超声波1的距离
		 Wave_Len[1] = getLen2();		//获取超声波2的距离
		 Wave_Len[2] = measure_distance();//获取超声波3的距离
		 //第一个垃圾桶
		 if((Wave_Len[0] < 15) || (tmp == 'A') || (buff == 'C'))
		 {
			tmp = 0;
			buff = 0;
			printf("打开可回收垃圾桶");
			USART2_SendString("打开可回收垃圾桶");
			S90_OC1_state_45;
			ms_delay(400);
			S90_OC1_state_0;
			while(getLen() < 15);//等待大于15
			ms_delay(1000);
			S90_OC1_state_90;
			USART2_SendString("关闭可回收垃圾桶");
		 }
		 
		 //第二个垃圾桶
		 else if((Wave_Len[1] < 15) || (tmp == 'B') || (buff == 'B'))//等待大于15
		 {
			buff = 0;
			tmp = 0;
			printf("打开第有害垃圾桶");
			USART2_SendString("打开有害垃圾桶");
			S90_OC2_state_45;
			ms_delay(400);
			S90_OC2_state_0;
			while(getLen2()<15);
			ms_delay(1000);
			S90_OC2_state_90;
			USART2_SendString("关闭有害垃圾桶");
		 }
		 
		 
		 //第三个垃圾桶
		 else if((Wave_Len[2] < 15) || (tmp == 'C') || (buff == 'D'))//等待大于15
		 {
			buff = 0;
			tmp = 0;
			printf("打开第厨余垃圾桶");
			USART2_SendString("打开厨余垃圾桶");
			S90_OC3_state_45  ;
			ms_delay(400);
			S90_OC3_state_0;
			while(measure_distance()<15);
			ms_delay(1000); 
			S90_OC3_state_90;
			USART2_SendString("关闭厨余垃圾桶");
		 }
		 
		  //开启灯光
		 else if((tmp == 'K') || (buff == 'H'))
		 {
			buff = 0;
			tmp = 0;
			GPIO_SetBits(GPIOB,GPIO_Pin_6);
			GPIO_SetBits(GPIOB,GPIO_Pin_7);
			GPIO_SetBits(GPIOB,GPIO_Pin_5);
			USART2_SendString("开启灯光");
		 }
		 
		 //关闭灯光
		 else if((tmp == 'G') || (buff == 'I'))
		 {
			buff = 0;
			tmp = 0;
			GPIO_ResetBits(GPIOB,GPIO_Pin_6);
			GPIO_ResetBits(GPIOB,GPIO_Pin_7);
			GPIO_ResetBits(GPIOB,GPIO_Pin_5);
			USART2_SendString("关闭灯光");
			
		 }
		 
		 else if((tmp == 'X') || (buff == 'A'))
		 {
			buff = 0;
			tmp = 0;
			USART2_SendString("开启消毒模式");
			S90_OC1_state_0;
			S90_OC2_state_0;
			S90_OC3_state_0;
			ms_delay(1000);
			GPIO_SetBits(GPIOA,GPIO_Pin_4);
			S90_4_180();
			ms_delay(200);
			S90_4_180();
			USART2_SendString("关闭消毒模式");
			GPIO_ResetBits(GPIOA,GPIO_Pin_4);
			ms_delay(1000);
			S90_OC1_state_90;
			S90_OC2_state_90;
			S90_OC3_state_90;
		 }
		 //打开所有垃圾桶
		else if(buff == 'E')
		{
			buff = 0;
			S90_OC1_state_45;
			S90_OC2_state_45;
			S90_OC3_state_45;
			ms_delay(1000);
			S90_OC1_state_0;
			S90_OC2_state_0;
			S90_OC3_state_0;
		}
		//关闭所有垃圾桶
		else if(buff == 'L')
		{
			S90_OC1_state_90;
			S90_OC2_state_90;
			S90_OC3_state_90;
		}
//		 
//		printf("kkkk\r\n");
		printf("len1 = %f\r\n",getLen());
		printf("len2 = %f\r\n",getLen2());		 
//		printf("len3 = %f\r\n",measure_distance());

		
	 }
	 
		 
   
}

/*
*功能:上位机通过串口1中断接收,之后发给串口2(蓝牙)
*参数:无
*返回值:无
*/

void USART1_IRQHandler(void)
{
	if(USART_GetITStatus(USART1, USART_IT_RXNE) ==SET )
	{

		USART_ClearITPendingBit(USART1, USART_IT_RXNE);
		buff = USART_ReceiveData(USART1);
		USART_SendData(USART2, buff);
		while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);//等待发送完成
	}

		
	
	
}

/*
*功能:蓝牙通过串口2中断接收,之后发给串口1(上位机)
*参数:无
*返回值:无
*/

void USART2_IRQHandler(void)
{
	if(USART_GetITStatus(USART2, USART_IT_RXNE) ==SET )
	{
		USART_ClearITPendingBit(USART2, USART_IT_RXNE);
		tmp = USART_ReceiveData(USART2);
//		USART_SendData(USART1, tmp);
//		while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);//等待发送完成
	}
	
}





四、图片/视频

需要源码加vYX_CFZ_3454

视频地址https://live.csdn.net/v/376432

                https://live.csdn.net/v/376441

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值