基于51单片机及NB-IoT的水箱水位监测系统原理图PCB

NB-Iot烟感04:BC26模块原理图设计 本章节给大家 介绍一下NB-Iot 部分的硬件设计电路: 一、NB-IOT无线通讯整体设计: NB-IOt 我们选择的移远的BC26模块,单片机选择的华大半导体的HC32F005C6PA。整体电路图如下: 从上图可以看到,全图放上来看不清楚,要原图的可以找华维单片机编程拿 二、BC26周边电路设计详解 1. BC26模块电路设计: 如上图,BC26模组的脚位共有44个,但我们实际用的不是很多。 2.电源设计: BC26的供电脚位:(截自BC26硬件设计手册) 电源设计要求:其电 阅读详情

功能简介:
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);
    }
    

    if (!err_num && lte_init_flag && lte_connect_flag && lte_net_flag) // 连接成功,数据交互处理
    {
        err_num = lte_send_process();
        DelayS(1);
        lte_receive_process();          // 处理TCP发送过来的数据
//        if (!err_num)                   // 未出错
//        {
//            lte_receive_process(); // 处理TCP发送过来的数据
//            // err_num = lte_send_process();
//            // err_num = heard_beat_process(); // 心跳包处理
//        }
        // 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_init_flag || lte_net_flag || lte_connect_flag) && err_num) // AT命令报错
    {
        err_process(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);
    }
    
}

/************************* 定时器0初始化 *************************/
void Timer0_Init(void)
{
    TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
    // TH0 = (65536 - 9216) / 256; //重新赋值 10ms
    // TL0 = (65536 - 9216) % 256;
    TH0 = 0;
    TL0 = 0;
    EA = 1;  //总中断打开
    ET0 = 1; //定时器中断打开
    TR0 = 0; //定时器开关打开
}

/************************* 定时器0中断 *************************/
void Timer0_Interrupt(void) interrupt 1
{
    // static unsigned int time10ms  = 0;
    // TH0 = (65536 - 9216) / 256; //重新赋值 10ms
    // TL0 = (65536 - 9216) % 256;
}


/************************* 定时器1初始化 *************************/
void Timer1_Init(void)
{
    TMOD |= 0x10; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
    TH1 = (65536 - 9216) / 256; //重新赋值 10ms
    TL1 = (65536 - 9216) % 256;
    //PT1 = 1; //高优先级
    EA = 1;  //总中断打开
    ET1 = 1; //定时器中断打开
    TR1 = 1; //定时器开关打开
}

/************************* 定时器1中断 *************************/
void Timer1_Interrupt(void) interrupt 3
{
    static unsigned int time10ms  = 0;
    static unsigned char key_cnt = 0; // 按键计时

    TH1 = (65536 - 9216) / 256; //重新赋值 10ms
    TL1 = (65536 - 9216) % 256;
    time10ms++;

    if (time10ms > 100) //1s测一次
    {
        flag = 1; 
        Measuring(&distance);
        Disp4Num(7, 1, (1050 - distance));
        time10ms = 0;
    }

    if (KEY_SET == 0) //设置键按下
    {
        key_cnt++;
        if (KEY_SET == 0 && key_cnt > 15)
        {
            setIndex++;
            if (setIndex > 2)
            {
                setIndex = 1;
            }
            if (setIndex == 1)
            {
                LCD_DispOneChar(0, 0, '>');
                LCD_DispOneChar(8, 0, ' ');
            }
            else if (setIndex == 2)
            {
                LCD_DispOneChar(0, 0, ' ');
                LCD_DispOneChar(8, 0, '>');
            }
            key_cnt = 0;
        }
    }
    
    if (KEY_ENTER == 0) //设置键按下
    {
        key_cnt++;
        if (KEY_ENTER == 0 && key_cnt > 15)
        {
            setIndex = 0;
            LCD_DispOneChar(0, 0, ' ');
            LCD_DispOneChar(8, 0, ' ');
            key_cnt = 0;
        }
    }

实物演示视频:

https://www.bilibili.com/video/BV1kd4y1q7oN/

51单片机NBIOT 51单片机NBIOT模块 一、NBIOT模块 1.基本功能 NB75-BA用于实现MCU与NB-IoT网络间的数据双向透传功能。 2.工作模式 NB75-BA支持CoAP、UDP、TCP透传,由于受到运营商限制,我使用的电信物联网卡仅支持CoAP透传模式,不过移动联通用户支持CoAP、UDP、TCP透传。 3.模块调试 我使用的模块为针插式并配有一根天线和一个物联网卡。特别注意一下就是,调试模... 阅读详情

相关推荐

【雕爷学编程】Arduino智能家居之Water Sensor液位(水浸水位)传感器

1、温度和湿度控制:通过连接温度传感器和湿度传感器,Arduino可以实时监测室内环境的温度和湿度,并通过控制空调、加热器或加湿器等执行器,实现室内温湿度的自动调节。设计用户友好的界面和操作方式,提供简单直观的控制和反馈机制,以及考虑用户习惯和需求,能够提升系统的整体用户体验。这意味着用户可以根据自己的需求和创意,自定义和定制智能家居系统的功能和外观。5、能源管理:Arduino可以与电能监测模块和智能插座等设备结合使用,实时监测家庭能源的使用情况,并通过自动控制电器设备的开关,实现能源的有效管理和节约。

雕爷学编程 3493

NB-IoT模块原理图.pdf

NB-IoT模块原理图.pdf

【雕爷学编程】Arduino动手做(24)---水位传感器模块2

雕爷学编程,Arduino动手做,开源硬件,创客传感器,水位传感器模块

雕爷学编程 4688

基于51单片机水位水质检测系统方案原理PCB设计

总体方案设计 (末尾附文件) 通过查阅大量相关技术资料,并结合自己的实际知识,我主要提出了两种技术方案来实现系统功能。下面我将首先对这两种种方案的组成框图和实现原理分别进行说明。 2.1 智能水位水质检测电路设计方案框图 两种方案的框图如下图: 方案1: 方案2: 2.2 方案论证 对于方案1和2按照理论来看做出来能够达到一定的预期效果,能达基本满足本次设计的基本要求。但是两种方案不同之处就在于传感器的选择和AD的选择,现就这两个方面来论述.为什么选择方案2。 方案1的传感器部分是利用应变片做的压力变送

weixin_47528066的博客 1万+

基于51单片机水位水质检测系统Proteus仿真原理图PCB

功能: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示水位、水质百分比 2.按键设置水位水质阈值并通过液晶显示 3.具备4个LED分别作为水位水质的上下限指示灯 4.具备声光报警功能 5.设置的阈值数据掉电不丢失 6.两组继电器可外接进水和出水设备,当水位超过上下限时对应的继电器会切换状态 7.采用DC002作为电源接口可直接输入5V给整个系统供电原理图PCB : 主程序: 仿真演示视频: https://www.bilibili.com/video/BV1o84y1C7ZN/

3062

物联网毕设 -- 水位监测(云+超声+STM32+APP)

该设备包含硬件端和APP端两部分。硬件端包括STM32F103C8T6用于中控和模块数据通信,0.96寸OLDE用于显示设备状态和实时温度,蜂鸣器与LED用于报警和状态提示,Wifi模块用于联网实现远程APP查看,超声波模块用于使用超声波测距,按键模块用于调整限值数据。APP端使用MQTT协议与设备进行信息交互,可采集到底层设备数据并展示到界面UI中,还可以设置水位阈值,超过阈值则弹出报警提示框。关注微信公众号--星之援工作室 发送关键字(项目清单)可获取项目清单资料➡️🫡🫡🫡🫡🫡🫡🫡🫡➡️。

herui的博客 2768

常用传感器讲解四--水位传感器(water sensor)

常用传感器讲解四–水位传感器(water sensor) 具体讲解 该传感器通过使用一系列五个连接到系统接地的裸露走线来工作。在每两个接地迹线之间交错插入一个感测迹线,五个接地迹线和总共五个感测迹线。感测走线连接到一个1兆欧的上拉电阻。感测迹线被拉高,直到一滴水或水平面使感测迹线接地。理论上,此传感器将输出0-1024之间的模拟信号,但随着PCB上的走线长度的增加,我发现可用范围在480至〜710之间。传感器未设计为完全浸入水中,请谨慎安装,以便仅PCB上裸露的走线会与水接触。传感器的输出电压为0-4.2

weixin_47567401的博客 4万+

物联网AI MicroPython传感器学习 之 水位监测传感器

水位监测传感器主要用于测量水位深度的传感器,该传感器测量范围在0cm-4cm,通过使用一系列五个连接到系统接地的裸露走线来工作。在每两个接地迹线之间交错插入一个感测迹线,五个接地迹线和总共五个感测迹线。GND:地VCC:5VNC:不接AO:模拟输出。

weixin_39363464的博客 1398

NB-IOT模块的讲解

模块采用移动物联网的 M5311 NB-Iot 模组为核心,板内自带降压 DCDC,给 M5311 模组供电,使得模块可以宽电压供电 4.5V~16V;对于外部系统(例如 ARM 单片机)也可以通过模块的 3.3V 输出进行供电,简化电源设计。模块天线输出为 SMA外螺纹带孔天线座输出,可以接胶棒天线或吸盘天线。M5311 是一款高性能、低功耗NB-IoT 无线通信模组,满足中国移动蜂窝物联网通用模组技术规范。

特纳斯电子官方博客站 5418

NB-IoT网络架构

一. NB总体网络架构 NB-IoT端到端系统架构如下图所示:终端:UE(User Equipment),通过空口连接到基站(eNodeB(evolved Node B , E-UTRAN 基站))。无线网侧:包括两种组网方式,一种是整体式无线接入网(Singel RAN),其中包括2G/3G/4G以及NB-IoT无线网,另一种是NB-IoT新建。主要承担空口接入处理,小区管理等相关功能,并通过S...

陈平凡 3万+

物联网竞赛——新大陆NB-IOT模块深入浅出,全网讲解新大陆NB-IOT模块最详细的文章,一文从硬件到程序贯通基于STM32L151C8T6对NB-IOT模组的开发,快速帮助竞赛新人扫盲

物联网竞赛中时常会出现用新大陆NB-IOT模块或LoRa模块进行程序开发的任务,尽管分值占比不大,但实际完成难度也比较低,在比赛中可以花很短时间便拿下,属于半个送分题(),我个人评价是比较这类任务做起来也比较死板,经典的公式化任务。而这篇文章会从硬件到程序较为全面地(相较于创作时网上已有的内容)对新大陆NB-IOT模块进行讲解,以便各个学习阶段的朋友都能对这个模块有更好的理解。

DC_RanAo的博客 3722

NB-IoT学习笔记 —— NB-IoT介绍

是指窄带物联网(Narrow Band Internet of Things)技术,是一种低功耗广域(LPWA)网络技术标准,基于蜂窝技术,用于连接使用无线蜂窝网络的各种智能传感器和设备,聚焦于低功耗广覆盖(LPWA)物联网(IoT)市场,是一种可在全球范围内广泛应用的新兴技术。NB-IoT 技术可以理解为是 LTE 技术的“简化版”,NB-IoT 网络是基于现有 LTE 网络进行改造得来的。LTE 网络为“人”服务,为手机服务,为消费互联网服务;

Leung的博客 4万+

水位传感器简单讲解

1.S:模拟量输出引脚(接单片机ADC引脚)2.+:电源正极(DC3-5V)3.-:电源负极Water Senso水位传感器是一款简单易用、性价比较高的水位/水滴识别检测传感器,其是通过具有一系列的暴露的平行导线线迹测量其水滴/水量大小从而判断水位。轻松完成水量到模拟信号的转换,输出的模拟值可以直接被单片机ADC引脚读取。

特纳斯电子官方博客站 1万+

51单片机项目(34)——基于51单片机和esp8266的智能农业检测系统

基于51单片机和esp8266的智慧农业系统

guangali的博客 2651

基于单片机液位检测系统设计

*单片机设计介绍,基于单片机液位检测系统设计。

QQ2193276455的博客 2316

基于51单片机水箱水位监测控制系统proteus仿真原理图PCB

1.通过传感器监测水位,当水位低于水位下限时,接通加水水泵,直到水位达到水位上限,停止加水。4.采用DC002作为电源接口可直接输入5V给整个系统供电。3.可按键手动加水,直到水位达到水位上限,停止加水。0.本系统采用STC89C52作为单片机。2.水位低于水位下限时,声光报警。

4286

51单片机与ESP8266轻松上手Onenet(二)--onenet AT指令测试

51单片机与ESP8266轻松上手Onenet

5635
下一篇: 基于51单片机的水温温度PID算法控制系统proteus仿真原理图PCB
极寒钛科技
博客等级 码龄6年 826粉丝 · 161原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值