文章目录

  • 前言
  • 一、用到的模块
  • 二、软硬件电路
    • 1.硬件电路图
    • 2.软件代码
  • 总结

前言

本系统是基于Arduino开发板的水位监测系统,通过DS18b20模块检测水温,通过水位监测模块监测水位的变化。当水温超过了某一阈值或水位超过了某一阈值时,蜂鸣器报警。同时,蓝牙能将数据传输至手机上同步进行显示。


一、用到的模块

1、DS18B20温度传感器(1m长的探头型,防水措施)

2、水位检测模块(市面上普通的几块钱一个的,通过电阻变化而影响电压)

3、0.96寸OLED显示屏(4PIN引脚,IIC接口)

4、5V蜂鸣器(低电平蜂鸣器响)

5、蓝牙3.0模块(市面常用,优信电子选购)

6、乐鑫ESP32开发板,搭载WROOM-32E模块

二、软硬件电路

1.硬件电路图


2.软件代码

#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <OneWire.h>
#include <DallasTemperature.h>//定义引脚
#define ONE_WIRE_BUS 15       //定义DS18B20的data引脚
#define scl 22               //定义OLED的SCL引脚
#define sda 21               //定义OLED的SDA引脚
#define beep 4               //定义BEEP的驱动引脚
#define choice    27         //定义切换模式引脚
#define jia       32         //定义加信号引脚
#define jian      33         //定义减信号引脚//新建DS18B20对象以及显示数据
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);//新建iic对象以及显示屏对象
TwoWire I2Cone = TwoWire(0);
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &I2Cone); //定义中间变量
int choiceState = 0;         //定义选择信号状态
int jia_State    = 0;         //定义加信号状态
int jian_State   = 0;         //定义减信号状态
int work_mode   = 0;         //定义工作模式状态
float wendu_shangxian =31.00f;//定义水温报警上限
float wendu_xiaxian   =16.00f;//定义水温报警下限
double number,data2;
int data1=0;
//初始化主函数
void setup() {Serial.begin(9600);Serial.println("Hello Goouuu");sensors.begin();pinMode(beep  , OUTPUT);pinMode(choice, INPUT_PULLUP);pinMode(jia   , INPUT_PULLUP);pinMode(jian  , INPUT_PULLUP); /*初始化显示屏参数*/I2Cone.begin(sda, scl, 400000);             //初始化显示屏的IIC接口display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  //初始化显示屏参数 display.clearDisplay();                     //屏幕清屏display.setTextSize(2);                     //设置字体大小为2display.setTextColor(INVERSE);              //设定字体的颜色
}void loop() {//数据获取number=(long)analogRead(34);sensors.requestTemperatures();     // 发送命令获取温度choiceState = digitalRead(choice);jia_State    = digitalRead(jia);jian_State   = digitalRead(jian);//数据处理data1 = (int)((float)number/2048*100);data2 = sensors.getTempCByIndex(0); //获取索引号0的传感器摄氏温度数据//工作模式切换if (choiceState == LOW){work_mode+=1;if(work_mode == 3){work_mode = 0;}delay(100);}else if (jia_State == LOW){if(work_mode == 1)wendu_shangxian+=0.1f;else if(work_mode ==2)wendu_xiaxian+=0.1f; delay(100);   }else if (jian_State == LOW){if(work_mode == 1)wendu_shangxian-=0.1f;else if(work_mode ==2)wendu_xiaxian-=0.1f; delay(100);   }//串口显示验证Serial.print("temp:");Serial.print(data2);Serial.print("*C");  //Serial.println(val);Serial.print("%\n"); //显示读取的数值    delay(1000);     Serial.print("hight:");Serial.print(data1);Serial.println("%"); //OLED显示上下限if(work_mode==0){drawDHT11(data1,data2);     }else if(work_mode==1){drawshangxian(wendu_shangxian);   }else if(work_mode==2){drawxiaxian(wendu_xiaxian);   } if(sensors.getTempCByIndex(0)>wendu_shangxian||data1>90)                           //若大于32°,则蜂鸣器鸣叫,电机开转{digitalWrite(beep,LOW);}else if(sensors.getTempCByIndex(0)<wendu_xiaxian||data1>90)                                     //否则不转{digitalWrite(beep,LOW);}else{digitalWrite(beep,HIGH);}
}void drawDHT11(int H,float T){ display.clearDisplay();display.setTextColor(INVERSE);display.setTextSize(1);//设置光标位置显示display.setCursor(0, 0);display.print("water_duty:");display.setCursor(30, 11);  display.print(H);  display.print("%");  display.setCursor(0, 22);display.print("water_status:");display.setCursor(30,33);if(data1<90){display.print("ok");}else {display.print("not ok");} display.setCursor(0, 44);display.print("temp_value :");display.setCursor(30, 55);  display.print(T);  display.print("*C"); display.display();
}void drawshangxian(float A){display.clearDisplay();display.setTextColor(INVERSE);display.setTextSize(2);display.setCursor(0, 0);display.print("HIGH_Limit"); display.setCursor(18, 34);display.print(A);  display.print("*C"); display.display();
}void drawxiaxian(float A){display.clearDisplay();display.setTextColor(INVERSE);display.setTextSize(2);display.setCursor(12,0);display.print("LOW_Limit"); display.setCursor(18,34);display.print(A);  display.print("*C");  display.display();
}

代码引入了五个头文件,分别用来控制模块的驱动运行。

定义的引脚如图所示:

购买了ESP32开发板的可直接按照上述引脚的连线方式连接,其中27,32,33均是模拟输入引脚,外接一个轻触按键,按键的另一端接向地。当外部轻触按键按下的时候,由程序判断是否接收到了按键按下信号。


此处建立了DS18B20和IIC的面向对象,可通过此函数调用其内部相关的函数。IIC主要是为了驱动0.96寸的OLED屏幕,调用内部的显示函数即可在屏幕上显示特定的数据和图像


这里定义了在程序中需要使用的中间变量,其中前三个定义的变量关系到外部输入的引脚状态。work_mode的值关系到OLED屏幕的显示,在整体的设计中OLED屏幕将会有三种不同的显示界面。第一个界面显示各种参数的大小,第二个第三个界面分别通过按键可以改变温度上限和下限的大小。double数据用来存储获得的温度传感器数据。


初始化驱动的四个引脚,其中控制蜂鸣器为输出引脚,控制按键的为输入引脚。此处输入按键被设置为上拉是必要的,博主尝试过只将按键设置为输入的话,当按键按下就会一直执行按键的程序。当设置为上拉以后,按键没有按下时IO口的输出电平为高电平。


在数据获取那一块将获取到的数据全部赋值给我们定义的中间变量,以方便后续的数据处理。其中number数据是通过外部ADC的采集采集到的水位检测模块输出的模拟电压,从而判断水位到达了某一程度。工作模式切换函数原理即为检测按键按下的电平为低电平时,则将工作的模式+1,从而OLED显示屏上显示不同的界面。


此处在工作模式为1和2的时候对两个外部输入按键进行判断,若外部按键为低电平,则执行相对应的程序。下方还有串口显示的程序,由于在定义中蓝牙的输入端直接连接的主电路开发板的TX和RX,故串口发送的数据可同步在蓝牙上进行显示。

余下的就是一些显示界面和达到阈值进行一些判断,比如达到了温度上限阈值或低于温度下限阈值时,蜂鸣器进行报警。当水位检测模块检测到水位到了一定程度时,也同样进行报警。


总结

稍后AD文件会发到资源里,有需要的可以下载支持一下,5积分固定。

基于Arduino的水位检测系统相关推荐

  1. 基于单片机的水塔水位检测系统

    设计简介: 本设计是基于单片机的水塔水位检测系统,主要实现以下功能: 可通过LCD1602显示水位阈值.水塔高度和水位: 可通过按键调整水位阈值和水塔高度: 可通过超声波测距模块测水位: 标签:51单 ...

  2. 智能水位检测系统proteus_基于亏单片机的水塔水位检测控制系统仿真设计

    摘要:设计一种基于单片机水塔水位检测控制系统.该系统能实现水位检测.电机故障检测.处理和报警等功能,实现超高.低警戒水位报警,超高警戒水位处理.介绍电路接口原理图,给出相应的软件设计流程图和汇编程序, ...

  3. 【毕业设计】基于Arduino的智能灌溉系统 - 嵌入式 单片机 物联网

    文章目录 1 简介 1 硬件要求 2 项目背景 3 实现功能 4 OLDE显示屏 5 IO扩展器 6 系统构建 7 完整代码 8 最后 1 简介 Hi,大家好,这里是丹成学长,今天向大家介绍一个 单片 ...

  4. 基于Arduino的土壤湿度检测

    基于Arduino的土壤湿度检测 目录 1.总体设计框图 2.系统的硬件设计 2.1系统硬件的简述 2.2单片机模块的设计 2.3温度采集系统的设计 3.附录 附录1总体电路图 附录2 效果图(3张) ...

  5. 【基于Arduino RFID门禁系统】

    基于Arduino RFID门禁系统 介绍 射频识别或RFID(Radio-Frequency Identification)是一种通过无线电信号进行自动识别,通过RFID标签检索和存储数据的方法. ...

  6. linux arm关闭光栅,基于Linux的光栅检测系统的软件设计与实现.pdf

    基于Linux的光栅检测系统的软件设计与实现.pdf - - - - - - - - - - 一 竣 应 ((_- 基 于 Linux 系 统 的 软 件 设 计 与 实 现 东北大学信息科学与工程学 ...

  7. 电量监测程序 c语言,基于单片机的电量检测系统设计方案.doc

    基于单片机的电量检测系统设计方案 1绪论 自第一个微处理器问世以来,以微处理器为核心构成的计算机以各种各样的形式,无孔不入的渗入到人们的生产.生活.科研等各个领域,为人类带来了渗透到各个领域的&quo ...

  8. (毕业设计资料)基于单片机的水位检测系统仿真设计

    031[毕设课设]基于单片机的水位检测系统仿真设计,通过传感器检测水位液位大小,设定范围,当超过范围则报警,并有出水阀和进水阀.以保持水位在某个范围自动调节.包括的电路有传感器电路.液晶显示电路.单片 ...

  9. 基于MATLAB的疲劳检测系统

    基于MATLAB的疲劳检测系统 一.课题介绍 随着汽车工业的不断发展,随之而来的社会问题也愈加严重.交通事故给人们造成巨大伤害的同时,也给社会带来沉重的负担和影响.由于疲劳驾驶是引起交通事故的一个主要 ...

最新文章

  1. 数学建模太难?做到这三件事,让你事半功倍
  2. sqrt()函数的详解和用法
  3. 【后缀数组】【poj2774】【 Long Long Message】
  4. SAP Spartacus user form去除嵌套label的side effect之一
  5. Python非递归实现二叉树的后续遍历
  6. 2021.08.28-MMsegmentation0.16.0+Cuda10.1+Ubuntu16.04+Pytorch1.8环境安装
  7. android rxjava 多线程,你真的了解RxJava的线程切换吗?
  8. 联名款Redmi K40游戏增强版今日揭晓:神秘女主粉色头发吸睛
  9. SAP License:雾里看花系列——SAP顾问应该脱离”保姆”的角色
  10. css就近原则_CSS常用总结 - div-import-border - ItBoth
  11. python中tensor与variable_TensorFlow中Variable和get_variable之间的区别
  12. 8、技术分析fastJson使用
  13. 消费滚动滴log日志文件(flume监听,kafka消费,zookeeper协同)
  14. 如何下载一个屏幕画笔软件pointofix
  15. 【今日CV 计算机视觉论文速览 第144期】Wed, 17 Jul 2019
  16. 主流计算机戴尔笔记本电脑,2017年50款笔记本电脑排行榜
  17. 《构建高可用Linux服务器 第3版》—— 1.5 Linux服务器的优化
  18. php error reporting,php error_reporting
  19. WordPress手动开启WP错误调试
  20. 美术资源检测 — 让你的网格无可挑剔

热门文章

  1. HTML+CSS(持续更新中)
  2. 中国移动gprs上网设置
  3. hive:函数:greatest和least函数
  4. kali linux 2020-2 安装中文输入法
  5. 51、基于51单片机洗衣机控制系统(带水位)系统设计(程序+原理图+PCB源文件+Proteus仿真+参考论文+开题报告+任务书+流程图+元器件清单等)
  6. 火车票软件哪个好用_买火车票用什么软件好?方便好用的。
  7. [书籍].Pong P. Chu - FPGA Prototyping By Verilog Examples
  8. 使用GROOVY脚本语言发送get和post请求
  9. windows远程登录linux方法之putty的使用
  10. java延时_Java 延时常见的几种方法