基于51单片机超声波测液位带无线传输(毕业设计)

实现功能
显示当前水位高度
水位到达警戒线之后可以自动启动水泵抽水,到达下限自动关闭
加入语音模块,在水位到达警戒线时进行语音报警
实现无线传输水位高度
按键调节阈值
为了更直观 我们直接整个视频

超声波测液位无线传输模块

物料准备以及成本

  1. 9*15万用板 (2块24元)

  2. AT89C52单片机模组 ( 2块 40元(带芯片))

  3. 超声波探头HCSR04 (1个10元)

  4. 铜柱*8 (做固定用 可有可无)

  5. 排针 (34根 2元 )

  6. 杜邦线x根 (x根 4元)

  7. 一路继电器模组5v低电平触发 (5元)

  8. LCD1602液晶 (2块 20元)

  9. 电位器 (从不用的小模块下的)

  10. 语言播报模块 +喇叭 (20元)

  11. 正点原子Lora通信模块 (接受发送各1个64元)

  12. 11.0592晶振 (从不用的小模块下的)

  13. 轻触按键*3 (30个一袋两元)

  14. 直流水泵 (1个10元)

共计 191元

重要焊接部分
(推荐自己焊最小系统组 这样会让飞线变得轻松)

LCD1602连接图
基于51单片机超声波测液位带无线传输(毕业设计)_第1张图片
按键部分接线图
基于51单片机超声波测液位带无线传输(毕业设计)_第2张图片
所有焊接部分评论区留邮箱

小贴士
因为元件过多 单片机组的VCC和GND根本不够用 所以我们可以各找一个VCC GND引出形成GND和VCC块 这样就完美解决了(用小排针最佳)

LORA调试注意事项
使用正点原子的LORA上位机软件修改 但是要注意硬件连接 如图
基于51单片机超声波测液位带无线传输(毕业设计)_第3张图片
和pc端连接的话 需要用到转串口模块
GND-GND
VCC-VCC
TXD-RXD
RXD-TXD
第一次需要配置模式 需要把MD0接3.3V电平
基于51单片机超声波测液位带无线传输(毕业设计)_第4张图片

代码部分 (贴出主函数 全部工程下方留邮箱)

void main(void)
{
     
	initIO();			//io口初始化
	delay500ms(); 		//延时
	initLCD1602(); 	//lcd初始化
	putLineCharsToLCD1602(lineOne, 8, 8, "D:000cm ");	
	putThreeCharToLCD1602(lineOne, 8 + 2, uiD);		
	putLineCharsToLCD1602(lineOne, 0, 8, "H:000cm ");	
	putThreeCharToLCD1602(lineOne, 0 + 2, uiH);		
	putLineCharsToLCD1602(lineTow, 8, 8, "C:000cm ");		
	initTimer0();//定时器123初始化		
	initTimer1();
	initTimer2();
while(1)
	{
     
		io_US_TX = 1;			        
		delay10us();
		io_US_TX = 0;
		
		while(io_US_RX == 0);			
		TR0 = 1;			    			
		IT1 = 1; 						
		EX1 = 1;                      		
		
		while(EX1 == 1 && g_flag == isNo)
		{
     
			uchar ucKeyValue = GetKey();					
			if(ucKeyValue) execute_key_task(ucKeyValue);		
		}
		
		if(CalculatedWaterLevel() == isNo) continue;			
		
		TR0 = 0;		
		TL0 = 0;		
		TH0 = 0;		
		g_flag = isNo;
		ucCount = 0;
		g_flag05s = isNo;
		
		TR0 = 1;					
		while(g_flag05s == isNo)	
		{
     			
			uchar ucKeyValue = GetKey();
			if(ucKeyValue) 
			{
     
				if(ucKeyValue == DATA_KEY_DEC)
				{
     
					g_flagBeepTimer = isNo;
				}

				execute_key_task(ucKeyValue);	
			}				

		}	
		TR0 = 0;	
		TL0 = 0;	
		TH0 = 0;	
		g_flag = isNo;		
		
		if(g_flagBeepTimer == isYes)
		{
     
			buzzerCall();		
			
		}
	
		
	}
}

写的比较简短 但是DIY成功并不容易
所有资料和工程评论区留邮箱免费分享 共同进步

你可能感兴趣的:(笔记,嵌入式,单片机,stm32)