一、功能概述
智慧分拣是为了实现垃圾分类更方便、更具体,也便捷人们丢垃圾。该分拣系统有厨余垃圾桶,有害垃圾桶、可回收垃圾桶。该系统具有当人员靠经垃圾桶时、就会打开对应的垃圾桶,该功能具有一定的人性化。当对应说出垃圾名称,分拣系统就会打开对应的垃圾桶,实现 垃圾分类。分拣系统也还具有,自我消毒的模式,这样能减少垃圾桶中细菌的滋生。分拣系统执行的动作,也会传输到蓝牙端、这样便于管理人员管理。工作人员也可以通过蓝牙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);//等待发送完成
}
}
四、图片/视频
需要源码加v:YX_CFZ_3454
视频地址:https://live.csdn.net/v/376432
https://live.csdn.net/v/376441