stm32实现智能垃圾桶
智能垃圾桶需要的模块:
超声波模块:
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实现智能垃圾桶相关推荐
- stm32的语音识别_免费开源基于STM32的智能垃圾桶之舵机控制(HAL库)
大家好,我是『芯知识学堂』的SingleYork,前面给大家简单介绍了<基于STM32的智能垃圾桶之成员简介>.<基于STM32的智能垃圾桶之语音识别>和<基于STM32 ...
- python3语音识别模块_『开源项目』基于STM32的智能垃圾桶之语音识别
大家好,我是『芯知识学堂』的SingleYork,前面给大家简单介绍了『开源项目』基于STM32的智能垃圾桶之成员简介,相信有很多小伙伴都已经忍不住跃跃欲试了,别着急,从这一篇开始,笔者将会带领大家一 ...
- stm32语音识别文字显示_『开源项目』基于STM32的智能垃圾桶之语音识别
大家好,我是『芯知识学堂』的SingleYork,前面给大家简单介绍了『开源项目』基于STM32的智能垃圾桶之成员简介,相信有很多小伙伴都已经忍不住跃跃欲试了,别着急,从这一篇开始,笔者将会带领大家一 ...
- 智能垃圾桶c语言程序,『免费开源』基于STM32的智能垃圾桶之语音播报
大家好,我是『芯知识学堂』的SingleYork,前面给大家简单介绍了<基于STM32的智能垃圾桶之成员简介>和<基于STM32的智能垃圾桶之语音识别>,今天笔者将要给大家介绍 ...
- 『开源项目』基于STM32的智能垃圾桶之语音识别
大家好,我是『芯知识学堂』的SingleYork,前面给大家简单介绍了『免费开源』基于STM32的之成员简介,相信有很多小伙伴都已经忍不住跃跃欲试了,别着急,从这一篇开始,笔者将会带领大家一步一步来完 ...
- stm32舵机控制程序_免费开源基于STM32的lt;智能垃圾桶gt;之语音播报
大家好,我是『芯知识学堂』的SingleYork,前面给大家简单介绍了和,今天笔者将要给大家介绍我们这个DIY智能垃圾桶套件中"语音播报模块"的详细使用. 这个"语音播报 ...
- 单片机设计_语音识别分类智能垃圾桶(STM32 ESP8266 LD3320)
想要更多项目私wo!!! 一.电路设计 离线语音识别识别垃圾种类并且垃圾桶自动翻盖:说出唤醒词"垃圾桶"后,再说一句垃圾名称,语音识别模块端识别到相应关键词,便会将 ...
- 基于STM32的智能垃圾车系统
基于STM32的智能导盲系统 闲来无事,用手头STM32做个项目. 成品功能: 1.垃圾车可以可以按照规定的路线自动行驶,当红外传感器检测到有人靠近后可以自动停车,电机驱动打开垃圾桶盖: 2.垃圾桶内 ...
- 基于视觉与板球系统的智能垃圾桶
沈阳航空航天大学 创新能力训练报告 2019.12.29 题目 基于视觉与板球系统的智能垃圾桶设计 班 级 学 号 学 生 姓 名 刘一博 指 导 教 师 基于视觉与板球系统的智能垃圾桶 刘一博 沈阳 ...
- 智能手环功能模块设计_基于STM32实现智能手环设计
龙源期刊网 http://www.qikan.com.cn 基于 STM32 实现智能手环设计 作者:付海生 陈婷婷 韩百科 涂曾兵 来源:<科学导报 · 学术> 2017 年第 10 期 ...
最新文章
- cat在MATLAB中的应用
- 几个C++问题提示的莫名其妙,附录解决方法
- Yii中缓存依赖的处理
- WCF创建到使用到发布
- nginx tomcat集群实现session共享
- oracle insert 数组,oracle 数组 批量insert
- java 监听本地端口_Java-在本地端口上侦听RTP数据包
- String.format() 方法用法解说
- Python学习笔记简单数据类型之字符串
- 【hive】hive(hive cli)中显示列名,不带表名
- Android 沉浸式状态栏完美解决方案
- qnx 镜像文件_QNX OS镜像
- 平面标定(Homography变换)
- 【原创】SWOT分析思维的一些基本思考与见解
- mysql查看被锁住的表
- 物联网应用开发实践案例-智慧农业
- 修改内存卡里linux系统文件怎么恢复,EMMC转SD卡做成内存卡恢复数据教程
- 指数函数和正弦函数相乘
- 数控编程G71的使用方法
- 北京积分落户数据分析