C51之智能感应垃圾桶

前期准备:

超声波模块

简介:
超声波传感器模块上面通常有两个超声波元器件,一个用于发射,一个用于接收。

硬件
电路板上有4个引脚:

VCC(正级)
Trig(触发)
Echo(回应)
GND(接地-负极)

主要参数:

工作电压与电流:5V、15mA
感测距离:2~400cm
感测角度:不大于15°
被测物体的面积:不要小于50cm²,且尽量平整
具备温度补偿电路
在超声波模块的触发脚位输入10微秒以上的高电位,即可发射超声波,发射超声波之后,与接收到传回的超声波之前,“响应”脚位呈现高电位。因此,程序可以从“响应”脚位的高位脉冲持续时间,换算出被测物的距离。
超声波模块工作原理
超声波时序图

在这里插入图片描述

T(发波)

R(接受)

先给 Trig 引脚发送一个 10uS(微秒)的 TTL(高电平)

T就可以发波了

发出的是循环 8 个 40KHz 的脉冲

波发出去后,Echo 引脚就会一直维持高电平,也就是说波在空中传播的过程是一直维持高电平

那么就可以根据Echo 引脚的高电平维持时间,超声波在空气中的物理性质的传输速度,就可以算出障碍物跟发波点的距离

即超声波能在空气中1秒能跑多远,那么就可以通过Echo 引脚的高电平维持时间,换算距离了
在这里插入图片描述
代码测试(D5D6灯亮灭):

#include	"reg52.h"

sbit D5 = P3^7;
sbit D6 = P3^6;
sbit Trig = P1^5;
sbit Echo = P1^6;


void Delay10us()		//@11.0592MHz
{
   
   
	unsigned char i;

	i = 2;
	while (--i);
}

//配置定时器1
void Timer1Init(void)		
{
   
   
	TMOD &= 0xF0;
	TMOD |= 0x10;
	TH1 = 0;
	TL1 = 0;
}

void startHc()
{
   
   
	Trig = 0;
	Trig = 1;
	Delay10us();
	Trig = 0;
}


double get_distance()
{
   
   
		double time;
		//定时器数据清零,以便下一次测距
		TH1 = 0;
		TL1 = 0;
	  //1.Trig,给Trig端口至少10us的高电平
		startHc();
		//2.echo由低电平跳转到高电平,表示开始发送波
		while(Echo == 0);
		//波发出去的那一下,开启定时器
		TR1 = 1;
		//3.由高电平跳转回店店铺,表示波回来了
		while(Echo == 1);
		//波回来的那一下,我们开始停止定时器
		TR1 = 0;
		//4.计算出中间经过多少时间
		time=(TH1 *256 +TL1)*1.085;//us为单位
		//5.距离=速度(340m/s)*时间/2
		return (time*0.017);

	
}


void openStatusLight()
{
   
   
		D5 = 0;
		D6 = 1;
	
}

void closeStatusLight()
{
   
   
		D5 = 1;
		D6 = 0;
	
}



void main()
{
   
   
	
	double dis;
	
	Timer1Init();
	
	while(1){
   
   
		
		dis = get_distance();
		
		if(dis < 10)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈学弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值