智能垃圾桶需要的模块:

超声波模块:
Trig – PB6
Echo – PB7
sg90舵机:
PWM – PB9
按键:
KEY1 – PA0
LED灯:
LED1 – PB8
震动传感器:
D0 – PB5
VCC – 5V
蜂鸣器:
IO – PB4
VCC – 3V3

stm32CubeMX中断、timer配置图:



main.c代码如下:

#include "main.h"
#include "tim.h"
#include "gpio.h"
#define OPEN   1
#define CLOSE 0
uint8_t flag = CLOSE;//使用TIM2来做us级延时函数
void TIM2_Delay_us(uint16_t n_us)
{
/* 使能定时器2计数 */
__HAL_TIM_ENABLE(&htim2);
__HAL_TIM_SetCounter(&htim2, 0);
while(__HAL_TIM_GetCounter(&htim2) < ((1 * n_us)-1) );
/* 关闭定时器2计数 */
__HAL_TIM_DISABLE(&htim2);
}double get_distance()
{uint16_t cnt = 0;double dis = 0;//1. Trig ,给Trig端口至少10us的高电平HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET);//拉高TIM2_Delay_us(20);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET);//拉低//2. echo由低电平跳转到高电平,表示开始发送波//波发出去的那一下,开始启动定时器while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_7) == GPIO_PIN_RESET);//等待输入电平拉高HAL_TIM_Base_Start(&htim2);__HAL_TIM_SetCounter(&htim2,0);//3. 由高电平跳转回低电平,表示波回来了while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_7) == GPIO_PIN_SET);//等待输入电平变低//波回来的那一下,我们开始停止定时器HAL_TIM_Base_Stop(&htim2);//4. 计算出中间经过多少时间cnt = __HAL_TIM_GetCounter(&htim2);//5. 距离 = 速度 (340m/s)* 时间/2(计数1次表示1us)dis = cnt*340/2*0.000001*100; //单位:cmreturn dis;}void openStateLight()
{//点亮LED1HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);
}void closeStateLight()
{//关闭LED1HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET);
}void initSg90()
{HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);//启动定时器3的第一个通道用于产生pwm__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_4, 5);//将舵机置为0度
}void openDustbin()
{if(flag == CLOSE){flag = OPEN;__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1,15);//将舵机置为90度HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4, GPIO_PIN_RESET);//蜂鸣器响一声HAL_Delay(100);HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4, GPIO_PIN_SET);}HAL_Delay(2000);
}void closeDustbin()
{__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, 5);//将舵机置为0度flag = CLOSE;HAL_Delay(150);
}void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)//重写中断服务函数
{if(GPIO_Pin == GPIO_PIN_0 || GPIO_Pin == GPIO_PIN_5){//当中断源来自PA0,按键1被按下;来自PB5,震动传感器被震动if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_RESET || HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5) == GPIO_PIN_RESET){//检测是否为下降沿触发openStateLight();openDustbin();//开盖}}}int main(void)
{double distance = 0;//距离HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_TIM2_Init();MX_TIM3_Init();/* USER CODE BEGIN 2 */initSg90();HAL_NVIC_SetPriority(SysTick_IRQn, 0,0);//提高滴答计时器的中断优先级while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */distance = get_distance();if(distance < 10){//代开LED1openStateLight();//开盖openDustbin();}else{//关闭LED1closeStateLight();//关盖closeDustbin();}
}

stm32实现智能垃圾桶相关推荐

  1. stm32的语音识别_免费开源基于STM32的智能垃圾桶之舵机控制(HAL库)

    大家好,我是『芯知识学堂』的SingleYork,前面给大家简单介绍了<基于STM32的智能垃圾桶之成员简介>.<基于STM32的智能垃圾桶之语音识别>和<基于STM32 ...

  2. python3语音识别模块_『开源项目』基于STM32的智能垃圾桶之语音识别

    大家好,我是『芯知识学堂』的SingleYork,前面给大家简单介绍了『开源项目』基于STM32的智能垃圾桶之成员简介,相信有很多小伙伴都已经忍不住跃跃欲试了,别着急,从这一篇开始,笔者将会带领大家一 ...

  3. stm32语音识别文字显示_『开源项目』基于STM32的智能垃圾桶之语音识别

    大家好,我是『芯知识学堂』的SingleYork,前面给大家简单介绍了『开源项目』基于STM32的智能垃圾桶之成员简介,相信有很多小伙伴都已经忍不住跃跃欲试了,别着急,从这一篇开始,笔者将会带领大家一 ...

  4. 智能垃圾桶c语言程序,『免费开源』基于STM32的智能垃圾桶之语音播报

    大家好,我是『芯知识学堂』的SingleYork,前面给大家简单介绍了<基于STM32的智能垃圾桶之成员简介>和<基于STM32的智能垃圾桶之语音识别>,今天笔者将要给大家介绍 ...

  5. 『开源项目』基于STM32的智能垃圾桶之语音识别

    大家好,我是『芯知识学堂』的SingleYork,前面给大家简单介绍了『免费开源』基于STM32的之成员简介,相信有很多小伙伴都已经忍不住跃跃欲试了,别着急,从这一篇开始,笔者将会带领大家一步一步来完 ...

  6. stm32舵机控制程序_免费开源基于STM32的lt;智能垃圾桶gt;之语音播报

    大家好,我是『芯知识学堂』的SingleYork,前面给大家简单介绍了和,今天笔者将要给大家介绍我们这个DIY智能垃圾桶套件中"语音播报模块"的详细使用. 这个"语音播报 ...

  7. 单片机设计_语音识别分类智能垃圾桶(STM32 ESP8266 LD3320)

    想要更多项目私wo!!! 一.电路设计         离线语音识别识别垃圾种类并且垃圾桶自动翻盖:说出唤醒词"垃圾桶"后,再说一句垃圾名称,语音识别模块端识别到相应关键词,便会将 ...

  8. 基于STM32的智能垃圾车系统

    基于STM32的智能导盲系统 闲来无事,用手头STM32做个项目. 成品功能: 1.垃圾车可以可以按照规定的路线自动行驶,当红外传感器检测到有人靠近后可以自动停车,电机驱动打开垃圾桶盖: 2.垃圾桶内 ...

  9. 基于视觉与板球系统的智能垃圾桶

    沈阳航空航天大学 创新能力训练报告 2019.12.29 题目 基于视觉与板球系统的智能垃圾桶设计 班 级 学 号 学 生 姓 名 刘一博 指 导 教 师 基于视觉与板球系统的智能垃圾桶 刘一博 沈阳 ...

  10. 智能手环功能模块设计_基于STM32实现智能手环设计

    龙源期刊网 http://www.qikan.com.cn 基于 STM32 实现智能手环设计 作者:付海生 陈婷婷 韩百科 涂曾兵 来源:<科学导报 · 学术> 2017 年第 10 期 ...

最新文章

  1. cat在MATLAB中的应用
  2. 几个C++问题提示的莫名其妙,附录解决方法
  3. Yii中缓存依赖的处理
  4. WCF创建到使用到发布
  5. nginx tomcat集群实现session共享
  6. oracle insert 数组,oracle 数组 批量insert
  7. java 监听本地端口_Java-在本地端口上侦听RTP数据包
  8. String.format() 方法用法解说
  9. Python学习笔记简单数据类型之字符串
  10. 【hive】hive(hive cli)中显示列名,不带表名
  11. Android 沉浸式状态栏完美解决方案
  12. qnx 镜像文件_QNX OS镜像
  13. 平面标定(Homography变换)
  14. 【原创】SWOT分析思维的一些基本思考与见解
  15. mysql查看被锁住的表
  16. 物联网应用开发实践案例-智慧农业
  17. 修改内存卡里linux系统文件怎么恢复,EMMC转SD卡做成内存卡恢复数据教程
  18. 指数函数和正弦函数相乘
  19. 数控编程G71的使用方法
  20. 北京积分落户数据分析

热门文章

  1. knife4j nacos聚合 请求文档异常
  2. C8051 LaserBee Software Reset
  3. 延锋发布XiM21智能座舱,前瞻技术可在五年内落地
  4. 科猫网:2021年创业适合做什么行业?最具潜力的创业项目
  5. 小米路由作二级路由,挂在上级路由之下,samba能被上级访问(之二)
  6. Haas EDU K1_day1_硬件介绍及开发环境搭建
  7. android平台的视频编辑SDK
  8. MiniGPT-4:用高级大型语言模型增强视觉-语言理解
  9. 银行系统——线程案例
  10. 【软考-软件设计师】(六).信息安全