基于51单片机及NB-IoT的水箱水位监测系统原理图PCB
2025-10-28 来源:bilibili
功能简介:
1.基于C51单片机作为控制器
2.LCD1602作为系统的显示器
3.NB通信模块采用SIM7020C
4.HC-SR04超声波模块实现水箱水位的检测
5.利用继电器可控制水阀的关断与闭合
6.电源采用dc002直接输入5V供电

PCB:

代码:
#include "main.h"
/*******************变量定义*********************/
enum _MODE_DF_ dispMode;
bit modeFlag = AUTO; //模式标记
uchar setIndex = 0;
bit flag = 1;
float distance = 0;//水位距离
xdata int distance_H = 500;//水位上限
xdata int distance_L = 50;//水位下限
bit drawFlag1 = 0; //抽水标志1
bit buzzerFlag1 = 0; //蜂鸣器标志1
/********************************************************
函数名称:void mian()
函数作用:主函数
参数说明:
********************************************************/
void main()
{
TRIG = 0;
LCD_Init(); //初始化液晶
DelayMs(200); //延时有助于稳定
LCD_DispStr(4, 0, "Welcome!");
Uart_Init(); //初始化串口
lte_reset();
LTE_Process();
Timer0_Init();
Timer1_Init(); //初始化定时器0
LCD_Clear(); //清屏
LCD_DispStr(0, 0," H: L: ");
LCD_DispStr(0, 1," Now: mm ");
Disp4Num(3, 0, (int)distance_H);
Disp4Num(11, 0, (int)distance_L);
while (1) //死循环
{
if (flag == 1)
{
flag = 0;
if (distance > (1050 - distance_L)) //达到水位下限,1050是因为要除去超声波的盲区50mm
{
drawFlag1 = 1; //开启抽水
buzzerFlag1 = 1;
}
else if (distance < (1050 - distance_H)) //达到水位上限
{
drawFlag1 = 0; //停止抽水
buzzerFlag1 = 0;
}
else
{
buzzerFlag1 = 0;
}
if (buzzerFlag1) //蜂鸣器报警
{
BUZZER = ON;
}
else
{
BUZZER = OFF;
}
if (drawFlag1) //抽水
{
RELAY_DRAW_WATER = ON;
}
else
{
RELAY_DRAW_WATER = OFF;
}
}
else
{
LTE_Process();
}
}
}
void LTE_Process(void)
{
if (!(lte_init_flag && lte_net_flag && lte_connect_flag)) // 如果核心板未初始化、未网络配置、未连接则进行初始化
{
err_num = lte_init(); // 核心板初始化,并将初始化结果保存在 err_num
// sprintf(dis, "%1d %1d %1d %5d", (int)lte_init_flag ,(int)lte_net_flag, (int)lte_connect_flag, (int)err_num);
// LCD_DispStr(0, 1, dis);
}
if (!(lte_net_flag && lte_connect_flag) && lte_init_flag) // 初始化完成,未网络配置,未连接
{
err_num = lte_net_config(); // 进行核心板网络配置
// sprintf(dis, "%1d %1d %1d %5d", (int)lte_init_flag ,(int)lte_net_flag, (int)lte_connect_flag, (int)err_num);
// LCD_DispStr(0, 1, dis);
}
if (!lte_connect_flag && lte_init_flag && lte_net_flag) // 完成初始化和网络配置,开始连接服务器
{
err_num = lte_connect(); // 开始 TCP 连接
// sprintf(dis, "%1d %1d %1d %5d", (int)lte_init_flag ,(int)lte_net_flag, (int)lte_connect_flag, (int)err_num);
// LCD_DispStr(0, 1, dis);
}
实物演示视频:
https://www.bilibili.com/video/BV1kd4y1q7oN/
下一篇:51单片机矩阵键盘.代码
- 六大全新产品系列推出,MCX A微控制器家族迎来创新
- 意法半导体全新STM32C5系列,重新定义入门级微控制器性能与价值,赋能万千智能设备
- 模组复用与整机重测在SRRC、CCC、CTA/NAL认证中的实践操作指南
- 有源晶振与无源晶振的六大区别详解
- 从控制到系统:TI利用边缘AI重塑嵌入式MCU的边界
- 英飞凌持续巩固全球微控制器市场领导地位
- 使用 Keil Studio for Visual Studio Code开发 STM32 设备
- 蓝牙信道探测技术原理与开发套件实践
- Microchip 推出生产就绪型全栈边缘 AI 解决方案,赋能MCU和MPU实现 智能实时决策
- LoRa、LoRaWAN、NB-IoT与4G DTU技术对比及工业无线方案选型分析




