打印
[应用相关]

STM32小项目———感应垃圾桶

[复制链接]
137|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-6-28 07:57 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
一、超声波测距
1.超声波简介
超声波传感器模块上面通常有两个超声波元器件,
。一个用于发射,一个用于接收。
电路板上有四个引脚:VCC GND Trig(触发),Echo(回应)

主要参数:
工作电压与电流:5V,15mA
感应距离: 2~400cm
感测角度:不小于15°
被测物的面积不要小于50cm并且尽量平整
具备温度补偿电路



2.超声波测距原理
超声波模块的触发脚(Trig)输入10us以上的高电位,即可发射超声波,发射超声波后,与接收到传回的超声波之前,”响应”脚(Echo)位呈现高电平。因此,程序可以从”响应”脚位(Echo)的高电平脉冲持续时间,换算出被测物的距离。

距离公式:高电平持续时间 * 声速(340/秒)/2



2.超声波测距步骤
1.配置GPIO引脚结构体(Trig,Echo)。
2.配置定时器结构体
3.配置定时器中断结构体
4.开启时钟(定时器,GPIO)
5.Tria引脚输出高电平(10us以上),然后关闭
6.等待Echo引脚输入高电平开始,定时器打开–>开启计数器计数
7.等待Echo引脚输入高电平结束,定时器关闭—>停止计数器计数
8.通过计数器的值计算得出超声波测量距离

#include "HCSR04.h"
#include "stm32f10x.h"                  // Device header
#include "SysTick.h"
uint32_t ms_Count = 0;

#define Trig_Value_High  GPIO_SetBits(GPIOB,GPIO_Pin_11)
#define Trig_Value_LOW  GPIO_ResetBits(GPIOB,GPIO_Pin_11)

#define Echo_Read  GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)

void HCSR04_Config(void)
{
        GPIO_InitTypeDef  HCSR04_Structure;
        TIM_TimeBaseInitTypeDef  TIM4_Structure;
        NVIC_InitTypeDef nvic_Structure;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
       
        //Trig
        HCSR04_Structure.GPIO_Mode = GPIO_Mode_Out_PP;
        HCSR04_Structure.GPIO_Pin = GPIO_Pin_11;
        HCSR04_Structure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&HCSR04_Structure);
       
        //Echo
        HCSR04_Structure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        HCSR04_Structure.GPIO_Pin = GPIO_Pin_10;
        GPIO_Init(GPIOB,&HCSR04_Structure);
       
        TIM4_Structure.TIM_ClockDivision = TIM_CKD_DIV1;
        TIM4_Structure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM4_Structure.TIM_Period = 1000-1;
        TIM4_Structure.TIM_Prescaler =72-1;
        TIM4_Structure.TIM_RepetitionCounter = 0;
       
        TIM_TimeBaseInit(TIM4,&TIM4_Structure);
        TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);
        TIM_Cmd(TIM4,DISABLE);
       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
       
        nvic_Structure.NVIC_IRQChannel = TIM4_IRQn;
        nvic_Structure.NVIC_IRQChannelPreemptionPriority = 0;
        nvic_Structure.NVIC_IRQChannelSubPriority = 0;
        nvic_Structure.NVIC_IRQChannelCmd = ENABLE;
       
        NVIC_Init(&nvic_Structure);
       
}

void open_TIM4(void)
{
        TIM_SetCounter(TIM4,0);//初始化CNT = 0
        ms_Count = 0;//计时器 = 0
        TIM_Cmd(TIM4,ENABLE);
}

void close_TIM4(void)
{
        TIM_Cmd(TIM4,DISABLE);
}

int Get_timeCount(void)
{
        uint32_t t_Count;
        t_Count = ms_Count*1000;//毫秒化微妙
        t_Count += TIM_GetCounter(TIM4);//加上当前CNT值
        TIM4->CNT = 0;//CNT置0
        delay_ms(50);
        return t_Count;
}

float GetLenth(void)
{
        uint32_t time = 0;
        uint16_t i = 0;
        float lenth = 0;
        float sum = 0;
        while(i != 5)//取五次测距结果
        {
                Trig_Value_High;//发射20us超声波
                delay_us(20);
                Trig_Value_LOW;
                while(Echo_Read == 0);//等待Echo接收反射波
                open_TIM4();//接收到反射波打开定时器
                i = i+1;//记录次数
                while(Echo_Read == 1);等待Echo接收的反射波停止
                close_TIM4();//关闭定时器
                time = Get_timeCount();//获取反射波持续时间
                lenth = ((float)time/58.3);//计算距离cm/us
                sum += lenth;
        }
        lenth = sum/5.0;
        return lenth;
}



void TIM4_IRQHandler(void)
{
        if( TIM_GetITStatus(TIM4,TIM_IT_Update) != RESET)
        {
                ms_Count++;//每次中断代表1ms过去了
                TIM_ClearITPendingBit(TIM4,TIM_IT_Update);
        }
       
}




二、舵机的控制
本文讲述舵机控制电机方法点击直达

三、硬件搭建及功能展示
如图:





总结
局部变量初值一定不要忘记~~ 切记!!!
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_63556165/article/details/139868187

使用特权

评论回复
沙发
呐咯密密| | 2024-6-28 09:16 | 只看该作者
这玩意据说商用的时候挺不好用的

使用特权

评论回复
板凳
呐咯密密| | 2024-6-28 09:16 | 只看该作者
这玩意据说商用的时候挺不好用的

使用特权

评论回复
地板
suncat0504| | 2024-6-29 19:18 | 只看该作者
连小垃圾桶都智能化了啊?智能化无处不在,哈哈哈

使用特权

评论回复
5
szt1993| | 2024-6-30 08:58 | 只看该作者
非常不错的案例

使用特权

评论回复
6
hehhehee| | 2024-6-30 10:59 | 只看该作者
感觉还是挺好用的。但是实际应用时候很费电,挺麻烦的。

使用特权

评论回复
7
hehhehee| | 2024-6-30 10:59 | 只看该作者
卫生间有个感应的还可以,放电池的最不科学,有充电插口的还好点。

使用特权

评论回复
8
hehhehee| | 2024-6-30 11:01 | 只看该作者
放电池的总得去扣电池,嫌脏。。。整个充电的,充一次还能用一阵子,感应开关还好吧,反正家里安装电池的在闲置。变成普通翻盖的了。充电的还在工作

使用特权

评论回复
9
hehhehee| | 2024-6-30 11:01 | 只看该作者
用了两年多了,还算比较有感悟。

使用特权

评论回复
10
芯路例程| | 2024-6-30 11:58 | 只看该作者
这垃圾桶有点小呀,哈哈

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1521

主题

14473

帖子

9

粉丝