51项目——智能垃圾桶

51项目——智能垃圾桶

项目需求

人靠近,垃圾桶开盖,投放垃圾,人离开,垃圾桶自动关盖。
并屏幕显示距离,和垃圾桶开关的状态。

项目材料(实物图可以百度看一看)

垃圾桶一个
杜邦线若干
sg90舵机一个
超声波测距一个
Nokia5110LCD屏幕一个 (Nokia5110使用和实例
stc89c51最小系统单片机一个
USB转TTL(如果单片机已经集成可以忽略)

以上材料可更具自身模块条件更换使用,并不一定全部一样,例如:超声波可以用其他感应器件,比如人体感应模块,红外模块等等,当然可以用其他51开发板,亦可添加(删改)新的器件升级美化项目。

接线

P1^0——sg90舵机信号线
P1^1——超声波Trig端
P1^2——超声波Echo端
下面Nokia5110直接引用Nokia5110文章的接线

sbit SCLK = P2^5SCLK; // pin 2 header 5
sbit SDIN = P2^4; // pin 3 header 4
sbit LCD_DC = P2^3; // pin 4 header 3
sbit LCD_CE = P2^2; // pin 5 header 2
sbit LCD_RST = P2^1; // pin 9 header 1

实战编写

下面代码,没有设计到的可以看看,这俩篇文章
舵机使用
Nokia5110使用和实例
超声波太简单了,网上找找时序图声音的传播速度,对应我下面的超声波看应该就明白了。

部分代码(需要打包好的代码可以私我)

main.c

#include <reg51.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "nokia5110.h"
#include "ultrasonic.h"
#include "sg90.h"
#include "delay.h"

void judgment_angle(double dis)
{
    
    
	static char flag = 0;
	static unsigned int time;
	
	if(dis <= 5){
    
    
			flag = 1;
			time = 0;
//			sg90(3);				//90 angle
//			//DelayMS(1000);	
		}else{
    
    
			time++;
			if(time > 10){
    
    
				time = 0;
				flag = 0;
			}
		}
			
		if(flag) sg90(3);
		else sg90(1);
		
		if(flag)LCD_write_english_string(1,4," flag = ON  ");
		else LCD_write_english_string(1,4," flag = OFF  ");
}

int main()
{
    
    
	double dis;
	char buf[32];

	

	LCD_init();
	LCD_clear();
	sg90Init();
	InitUltrasonic();
//	LCD_write_chinese_string(0,0,12,7,0,0);
//	LCD_write_chinese_string(0,2,12,7,0,0);
//	LCD_write_chinese_string(0,4,12,7,0,0);
	
	LCD_write_english_string(1,0,"--ShunGe51--");
	LCD_write_english_string(1,1,"************");
//	LCD_write_english_string(1,2,"distance is ");
	LCD_write_english_string(1,3,"************");
//	LCD_write_english_string(1,4," flag = off ");
	while(1)
	{
    
    
		dis = GetDistance();						//get ultrasonic distance
		sprintf(buf,"dis= %02.2fcm ",dis);			
		LCD_write_english_string(1,2,buf);			//wirite for nokia5110
		judgment_angle(dis);						
		DelayMS(100);
	}
	
}

ultrasonic.c

#include <reg51.h>
#include "ultrasonic.h"
#include <delay.h>

#include "nokia5110.h"

sbit Trig = P1^1;
sbit Echo = P1^2;


void InitUltrasonic()
{
    
    
	//1. 配置定时器0工作模式位16位计时
	TMOD &= 0xF0; //设置定时器模式
	TMOD |= 0x01;
	
	TH0 = 0;
	TL0 = 0;
	
}

double GetDistance()
{
    
    
	double distance = 0;
	double time = 0;
	Trig = 0;
	Trig = 1;
	Delay10us();
	Trig = 0;
	while(!Echo);		//波发出的一瞬间开启定时
	TR0 = 1;
	while(Echo);		
	TR0 = 0;
	
	time = (TH0 * 256 + TL0)	* 1.085;		//单位us
	// 距离 = 速度 (340m/s)* 时间/2
	distance = time * 0.017;
	TH0 = 0;
	TL0 = 0;
	return distance;
}

效果

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

视频

上传中……

结束

有问题欢迎提出,共同进步

猜你喜欢

转载自blog.csdn.net/qq_52749711/article/details/132249377