Arduino+GPRS 的环境监控方案
LCD1602,本次采用4数据线连接法,RS 接Arduino D12,Enable接Arduino D11, LCD D4接Arduino
D4,LCD D5接Arduino D5,LCD D6接Arduino D6,LCD D7接Arduino D7,LCD R/W 接地,LCD
V0接10k可调电阻,LCD使用5伏供电,背景灯可设开关。
- #include<string.h>
 - //#include <SoftwareSerial.h>
 - #include <Wire.h>
 - #include <math.h>
 - //#include <MsTimer2.h>
 - #include <LiquidCrystal.h>
 - LiquidCrystal lcd(12, 11, 4, 5, 6, 7);
 - //* LCD RS pin to digital pin 12
 - // * LCD Enable pin to digital pin 11
 - // * LCD D4 pin to digital pin 4
 - // * LCD D5 pin to digital pin 5
 - // * LCD D6 pin to digital pin 6
 - // * LCD D7 pin to digital pin 7
 - // * LCD R/W pin to ground
 - // * 10K resistor:
 - // * ends to +5V and ground
 - // * wiper to LCD VO pin (pin 3)
 - //SoftwareSerial mySerial(9, 10); // RX, TX
 - //String inputString = "";
 - const int buttonPin = 10; //the number of the jiangyu input pin
 - int buttonState = 0; // variable for reading the jiangyu status
 - int Rain = 1;
 - int BH1750address = 0x23;//BH1750 I2C地址
 - byte buff[2];
 - float BH = 0;
 - const int analogInPin = A0; // Analog input pin that the potentiometer is attached to//*//Freqinput pin D2
 - int pin = 8;//DSM501A input D8
 - float wuchaxiuzheng = 0;
 - unsigned long duration;
 - unsigned long starttime;
 - unsigned long endtime;
 - unsigned long sampletime_ms = 30000;
 - unsigned long lowpulseoccupancy = 0;
 - float ratio = 0;
 - float concentration = 0;
 - float tempconcentration=0;
 - int sensorValue = 0; // value read from the NTC
 - int TEMPRATURE=0;
 - int i=0;
 - float R_Data=0;
 - float U_data [111]={4.67,4.65,4.64,4.62,4.60,4.57,4.55,4.53,4.51,4.48,4.46,4.43,4.40,4.38,4.35,4.32,4.28,4.25,4.22,4.19,4.15,4.11,4.08,4.04,4.00,3.96,3.92,3.88,3.83,3.79,3.75,3.70,3.65,3.61,3.56,3.51,3.47,3.42,3.37,3.32,3.27,3.22,3.17,3.11,3.06,3.01,2.96,2.91,2.86,2.81,2.75,2.70,2.65,2.60,2.54,2.50,2.44,2.39,2.34,2.29,2.24,2.20,2.15,2.10,2.06,2.01,1.96,1.92,1.87,1.83,1.78,1.74,1.70,1.66,1.62,1.58,1.54,1.50,1.47,1.43,1.39,1.36,1.32,1.29,1.25,1.22,1.19,1.15,1.12,1.09,1.06,1.04,1.01,0.98,0.96,0.93,0.91,0.88,0.86,0.84,0.81,0.79,0.77,0.75,0.73,0.713,0.69,0.67,0.66,0.64,0.62};//温度对应NTC电表格
 - int divider[6] = {0, 1, 8, 64, 256, 1024};//read RH use interrupt get F
 - int prescaler = 5;
 - double count = 0;
 - double middle = 0;
 - char x = 0;
 - int Fout=0;
 - int RH=0;
 - byte du[8]={
 - B00111,
 - B00101,
 - B00111,
 - B00000,
 - B00000,
 - B00000,
 - B00000,
 - };//define 1602 char
 - ISR(TIMER1_OVF_vect)
 - {
 - if (prescaler < 4)
 - {
 - prescaler++;
 - }
 - }
 - void interrupt()
 - {
 - if (!x)
 - {
 - count = TCNT1;
 - TCNT1 = 0x000;
 - TCCR1B = prescaler;
 - attachInterrupt(0, interrupt, FALLING);
 - }
 - else
 - {
 - middle = TCNT1;
 - attachInterrupt(0, interrupt, RISING);
 - }
 - x = ~x;
 - }
 - void setup()
 - {
 - Wire.begin();
 - Serial.begin(9600);
 - // mySerial.begin(9600);
 - // inputString.reserve(200);
 - // MsTimer2::set(2000, timer); //定时器设置,每2秒触发一次timer函数操作
 - // MsTimer2::start();
 - // pinMode(buttonPin, INPUT);
 - analogReference(DEFAULT);//INTERNAL
 - lcd.createChar(1,du);
 - lcd.begin(16, 2);
 - lcd.clear();
 - // lcd.setCursor(0, 0);
 - // lcd.print("PM2.5=");
 - // lcd.setCursor(0, 1);
 - // lcd.print("T= ");
 - // //lcd.write(1);
 - // lcd.print(" RH= %");
 - // Serial.begin(9600);
 - pinMode(buttonPin, INPUT);
 - pinMode(8,INPUT);
 - TIMSK1 = 0x01;
 - TCCR1A = 0x00;
 - attachInterrupt(0, interrupt, RISING);
 - starttime = millis();
 - }
 - void loop()
 - {
 - duration = pulseIn(pin, LOW);
 - lowpulseoccupancy += duration;
 - endtime = millis();
 - if ((endtime-starttime) > sampletime_ms)
 - {
 - ratio = (lowpulseoccupancy-endtime+starttime + sampletime_ms)/(sampletime_ms*10.0); // Integer percentage 0=>100
 - concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // using spec sheet curve
 - //Serial.print(lowpulseoccupancy);
 - // Serial.print(",");
 - //Serial.print(ratio);
 - // Serial.print("DSM501A:");
 - // Serial.println(concentration);
 - // Serial.print(";");
 - //Serial.println(endtime-starttime);
 - wuchaxiuzheng = (endtime-starttime-30000)/30000.0;
 - //Serial.println(wuchaxiuzheng);
 - concentration = (1.00-wuchaxiuzheng)*concentration;
 - //Serial.println(concentration);
 - lcd.setCursor(6, 0);
 - lcd.print(concentration);
 - lcd.print("pcs/0.01cf");
 - // lowpulseoccupancy = 0;
 - // starttime = millis();
 - }
 - sensorValue = analogRead(analogInPin); // read the analog in value:
 - delay(10);
 - R_Data=sensorValue*5/1024.0;
 - //Serial.print("R_Data = " );
 - //Serial.print(R_Data);
 - for(i=0;i<111;i++){
 - if(R_Data>4.67)
 - {
 - TEMPRATURE =-30;//对应-30℃
 - }
 - else if(R_Data<0.62)
 - {
 - TEMPRATURE=80; //对应80℃
 - }
 - else if(R_Data<U_data[i]&&R_Data>U_data[i+1])
 - {
 - TEMPRATURE=int(i-30-3);
 - }
 - }
 - // Serial.print("T:" );
 - // Serial.print(TEMPRATURE);
 - // Serial.print(";" );
 - delay(10);
 - lcd.setCursor(0, 0);
 - lcd.print("PM2.5=");
 - lcd.setCursor(0, 1);
 - lcd.print("T= ");
 - //lcd.write(1);
 - lcd.print(" RH= %");
 - // lcd.setCursor(0, 1);
 - // lcd.print("T= ");
 - // //lcd.write(1);
 - // lcd.print(" RH= %");
 - lcd.setCursor(2, 1);
 - lcd.print(TEMPRATURE);
 - lcd.write(1);
 - lcd.print("C");
 - Fout=(16000000.0 / divider[prescaler] / count);
 - //Serial.print("Vsensor=" );
 - //Serial.print(sensorValue);
 - //Serial.print(", " );
 - //Serial.print("Freq=");
 - //Serial.print(Fout);
 - // Serial.print(" ");
 - // Serial.print(int(divider));
 - // Serial.print(" ");
 - // Serial.print(prescaler);
 - // Serial.print(" ");
 - // Serial.println(count);
 - if (Fout<8115)
 - {
 - RH=100;
 - // Serial.print("RH:100");
 - // Serial.println(";");
 - lcd.setCursor(13, 1);
 - lcd.print("H.");
 - }
 - else if(Fout>9595)
 - {
 - RH=0;
 - // Serial.print("RH:0");
 - // Serial.println(";");
 - lcd.setCursor(13, 1);
 - lcd.print("L.");
 - }
 - else
 - {
 - RH=(9595-Fout)/14.8;
 - // Serial.print("RH:");
 - // Serial.print(RH);
 - // Serial.println(";");
 - lcd.setCursor(13, 1);
 - lcd.print(RH);
 - }
 - if (prescaler > 1)
 - {
 - prescaler--;
 - delay(200);
 - }
 - //if( flag )//
 - // {
 - // Serial.print( BH1750() );
 - // Serial.println("[lux]");
 - //
 - // flag = 0;//归零,等着定时中断重新赋值
 - // }
 - delay(2000);
 - if(tempconcentration!=concentration)
 - {
 - tempconcentration=concentration;
 - BH=BH1750();
 - // read the state of the jiangyu value:
 - buttonState = digitalRead(buttonPin);
 - // check if the jiangyu is low.
 - // if it is, the buttonState is LOW:
 - if (buttonState == LOW) {
 - Rain=0;
 - }
 - else {
 - Rain=1;
 - }
 - //lewei ouput by computer tools
 - // Serial.print("D:");
 - // Serial.print(concentration);
 - // Serial.print(";");
 - // Serial.print("T:" );
 - // Serial.print(TEMPRATURE);
 - // Serial.print(";" );
 - // Serial.print("R:");
 - // Serial.print(RH);
 - // Serial.print(";" );
 - // Serial.print("B:" );
 - // Serial.print(BH);
 - // Serial.print(";" );
 - // Serial.print("W:");
 - // Serial.print(Rain);
 - // Serial.println(";");
 - //lewei ouput by GPRS
 - lcd.setCursor(0, 1);
 - lcd.print(" ");
 - lcd.setCursor(0, 1);
 - lcd.print(BH);
 - lcd.print("LUX");
 - //delay(5000);
 - String tempstring="@uploading(01,D,";
 - String tempstring1=")";
 - Serial.print(tempstring);
 - Serial.print(int(concentration));
 - Serial.println(tempstring1);
 - // delay(12000); min transtime
 - delay(30000);
 - String tempstring2="@uploading(01,T,";
 - String tempstring3=")";
 - Serial.print(tempstring2);
 - Serial.print(TEMPRATURE);
 - Serial.println(tempstring3);
 - // delay(12000);
 - delay(30000);
 - String tempstring4="@uploading(01,R,";
 - String tempstring5=")";
 - Serial.print(tempstring4);
 - Serial.print(RH);
 - Serial.println(tempstring5);
 - // delay(15000);
 - delay(30000);
 - String tempstring6="@uploading(01,B,";
 - String tempstring7=")";
 - Serial.print(tempstring6);
 - Serial.print(int(BH));
 - Serial.println(tempstring7);
 - // delay(2000);
 - delay(30000);
 - String tempstring8="@uploading(01,W,";
 - String tempstring9=")";
 - Serial.print(tempstring8);
 - Serial.print(Rain);
 - Serial.println(tempstring9);
 - delay(30000);
 - lowpulseoccupancy = 0;
 - starttime = millis();
 - }
 - }
 - double BH1750() //BH1750设备操作
 - {
 - int i=0;
 - double val=0;
 - //开始I2C读写操作
 - Wire.beginTransmission(BH1750address);
 - Wire.write(0x10);//1lx reolution 120ms//发送命令
 - Wire.endTransmission();
 - delay(200);
 - //读取数据
 - Wire.beginTransmission(BH1750address);
 - Wire.requestFrom(BH1750address, 2);
 - while(Wire.available()) //
 - {
 - buff[i] = Wire.read(); // receive one byte
 - i++;
 - }
 - Wire.endTransmission();
 - if(2==i)
 - {
 - val=((buff[0]<<8)|buff[1])/1.2;
 - }
 - if(val<0) val=56134+val;
 - return val;
 - }
 
Arduino+GPRS 的环境监控方案的更多相关文章
- 前端性能监控方案window.performance 调研(转)
		
1. 业界案例 目前前端性能监控系统大致为分两类:以GA为代表的代码监控和以webpagetest为代表的工具监控. 代码监控依托于js代码并部署到需监控的页面,手动计算时间差或者使用浏览器的的API ...
 - cassandra 监控方案评估
		
摘要 最开始做cassandra monitor 方案的选型时,主要是从cassandra 本身入手,后来发现cassandra运行在JVM上,所有的metrics都是通过JMX 暴露出来.所以又可以 ...
 - 关于Kafka监控方案的讨论
		
之前在知乎上尝试过回答这个问题,后来问的人挺多,干脆在博客里面保存一下. 目前Kafka监控方案看似很多,然而并没有一个"大而全"的通用解决方案.各家框架也是各有千秋,以下是我了解 ...
 - 第 10 章 容器监控 - 078 - Docker 最常用的监控方案
		
Docker 最常用的监控方案 当 Docker 部署规模逐步变大后,可视化监控容器环境的性能和健康状态将会变得越来越重要. Docker 自带的几个监控子命令: ps .top .stats 功能更 ...
 - Kafka设计解析(二十三)关于Kafka监控方案的讨论
		
转载自 huxihx,原文链接 关于Kafka监控方案的讨论 目前Kafka监控方案看似很多,然而并没有一个“大而全”的通用解决方案.各家框架也是各有千秋,以下是我了解到的一些内容: 一.Kafka ...
 - Linux云主机 监控方案浅析
		
1.为何需要监控 监控是运维工程师的眼睛,它可帮助运维工程师第一时间发现系统的问题. 对于服务器的整个生命周期,都要和监控打交道: 当有服务器上架,都需要加入比如CPU负载.内存.网络.磁盘等基础监控 ...
 - NET 的 ELK 监控方案
		
NET 的 ELK 监控方案 https://www.jianshu.com/p/3c26695cfc38 背景就不多说了,谁家没有个几个十系统在跑啊.如何监控这几十个系统的运行状况,对于非运营人员来 ...
 - 【译】Kubernetes监控实践(2):可行监控方案之Prometheus和Sensu
		
本文介绍两个可行的K8s监控方案:Prometheus和Sensu.两个方案都能全面提供系统级的监控数据,帮助开发人员跟踪K8s关键组件的性能.定位故障.接收预警. 拓展阅读:Kubernetes监控 ...
 - 移动端性能监控方案Hertz
		
移动端性能监控方案Hertz 吴凯 瑞利 富强 徐宏 ·2016-12-19 16:10 性能问题是造成App用户流失的罪魁祸首之一.App的性能问题包括崩溃.网络请求错误或超时.响应速度慢.列表滚动 ...
 
随机推荐
- Linux搭建JavaEE开发环境与Tomcat——(十)
			
服务器通过ip地址访问是不需要备案的,如果通过域名访问的话才需要备案. 1.安装Mysql 在CentOS7上安装MySQL时,出现了以下的提示: 原因是: CentOS7带有MariaDB而不是my ...
 - HTTP===如何理解网关
			
首先举个例子: 假设你的名字叫小不点(很小),你住在一个大院子里,你的邻居有很多小伙伴,父母是你的网关.当你想跟院子里的某个小伙伴玩,只要你在院子里大喊一声他的名字,他听到了就会回应你,并且跑出来跟你 ...
 - PL/SQL 03 流程控制
			
--IF语法IF condition THEN statements;[ELSIF condition THEN statements;][ELSE statements;]END IF; -- ...
 - PL/SQL 01 代码编写规则
			
1.标识符命名规则当在 PL/SQL 中使用标识符定义变量.常量时,标识符名称必须以字符开始,并且长度不能超过 30 个字符.另外,为了提高程序的可读性,Oracle 建议用户按照以下规则定义各种标识 ...
 - td中嵌套table,让table完全填充父元素td
			
<table width="100% " cellspacing=0 cellpadding=0 border=1 > <tr> <td style= ...
 - 记录一次lnmp故障报告
			
业务架构图: nginx 状态监控图: 本次故障的表现为:前端php页面无法打开,空白页或者502错误. nginx中php配置如下: location ~ \.php$ { root /xxx/xx ...
 - 《锋利的JQuery》读书要点笔记1——认识JQuery&&选择器
			
<锋利的jQuery>源码下载,包括了这本书中全部代码以及用到的CSS文件 第一章 认识jQuery jQuery是个Js库.首先该明确的一点是:在jQuery库中$就是jQuery的一个 ...
 - 准备开发开放API接口
			
准备开发APP开放接口,允许JQUERY直接调用http://blog.csdn.net/wuxiangege/article/details/52238968 SIGN的设计与实现http://bl ...
 - redis设置慢查询日志
			
Redis 的慢查询日志功能用于记录执行时间超过给定时长的命令请求, 用户可以通过这个功能产生的日志来监视和优化查询速度. 1.redis生命周期 慢查询发生在第3阶段 2.两个配置 2.1.slow ...
 - c# WinForm窗体编程中对窗体程序设置快捷键
			
c# WinForm窗体编程中对窗体程序设置快捷键http://www.cnblogs.com/bison1989/archive/2011/09/19/2180977.html /// <su ...