1获取温湿度
D4-x信号线
#include <TroykaDHT.h> // типы сенсоров: DHT11, DHT21, DHT22 DHT dht(4, DHT11); void setup() { Serial.begin(9600); dht.begin(); } void loop() { dht.read(); if(dht.getState()==DHT_OK) { String msg=String("")+String("Temperature-")+String(dht.getTemperatureC())+String("-Humidity-")+String(dht.getHumidity()); Serial.println(msg); } //delay(2000); }
获取mq2
原理
MQ-2传感器对可燃气、烟雾等气体灵敏度高,基于MQ-2的烟雾传感器模块通过电路设计,提供了两种输出方式:
数字量输出:通过板载电位器设定浓度阈值,当检测到环境气体浓度超过阈值时,通过数字引脚DO输出低电平。
模拟量输出:浓度越高,AO引脚输出的电压值越高,通过ADC采集的模拟值越高。
#define Sensor_AO A0 #define Sensor_DO 2 unsigned int sensorValue = 0; void setup() { pinMode(Sensor_DO, INPUT); Serial.begin(9600); } void loop() { sensorValue = analogRead(Sensor_AO); Serial.print("Sensor AD Value = "); Serial.println(sensorValue); if (digitalRead(Sensor_DO) == LOW) { Serial.println("Alarm!"); } //delay(1000); }
光照传感器
/* Name: Sketch1.ino Created: 2019/2/10 20:33:27 Author: Administrator */ uint8_t PinLed = 3; //led正极 uint8_t PinLightsensor = A0; //光传感模块模拟数据接收引脚 //注意:我是用的光传感器模块是随着光照增加输出减小的。 int MaxLight = 850; //光传感器模块完全遮蔽时的输出值(实际值比这个略小) int MinLight = 300; //光传感模块在灯光下完全裸露时的输出值(实际值比这个值略大) // the setup function runs once when you press reset or power the board void setup() { pinMode(PinLed, OUTPUT); pinMode(PinLightsensor, INPUT); } // the loop function runs over and over again until power down or reset void loop() { int curLight = analogRead(PinLightsensor); //读取光传感器当前值 int outVal = map(curLight, MinLight, MaxLight, 0, 255); //把光传感器的值映射到0-255(PWM输出范围),需要注意的是Map函数不会强制结果在0-255范围内(当curLight超出map函数的第二三两参数的范围时出现超出0-255的情况)。 outVal = constrain(outVal, 0, 255); //强制映射后的值在0-255范围内 analogWrite(PinLed,outVal ); //输出亮度,当光传感器得到的光照越少,那么LED就越亮 delay(100); //延时 }
获取温度 18b20
#include<OneWire.h> #include<DallasTemperature.h> #define BUS 2 OneWire onewire(BUS); DallasTemperature sensors(&onewire); void setup() { Serial.begin(9600); sensors.begin(); } void loop() { sensors.requestTemperatures(); String temp= String(sensors.getTempCByIndex(0)); Serial.println(temp); }
综合例程
、mq2
#include <TroykaDHT.h> // типы сенсоров: DHT11, DHT21, DHT22 DHT dht(4, DHT11); #define Sensor_AO A0 unsigned int sensorValue = 0; void setup() { Serial.begin(9600); dht.begin(); } void loop() { dht.read(); if(dht.getState()==DHT_OK) { sensorValue = analogRead(Sensor_AO);//5000-20000PPM 对应 0-1023 String msg=String("")+String("Temperature-")+String(dht.getTemperatureC())+String("-Humidity-")+String(dht.getHumidity())+"-MQ2-"+String(sensorValue)+"-"; Serial.println(msg); } //delay(2000); }
光照+温湿度 dh11
#include <TroykaDHT.h> // типы сенсоров: DHT11, DHT21, DHT22 DHT dht(4, DHT11); //光传感模块模拟数据接收引脚 #define Sensor_A7 A7 unsigned int sensorValue = 0; //注意:我是用的光传感器模块是随着光照增加输出减小的。 int MaxLight = 850; //光传感器模块完全遮蔽时的输出值(实际值比这个略小) int MinLight = 10; //光传感模块在灯光下完全裸露时的输出值(实际值比这个值略大) // 主函数执行一次 void setup() { Serial.begin(9600);//串口初始化 dht.begin(); //温湿度传感器初始化 //Serial.println('go'); } void loop() { dht.read();//读取温湿度 if(dht.getState()==DHT_OK) { sensorValue = analogRead(Sensor_A7);//5000-20000PPM 对应 0-1023 int outVal = map(sensorValue, MinLight, MaxLight, 0, 255); //把光传感器的值映射到0-255(PWM输出范围),需要注意的是Map函数不会强制结果在0-255范围内(当curLight超出map函数的第二三两参数的范围时出现超出0-255的情况)。 outVal = constrain(outVal, 0, 255); //constrain是一个宏,它把一个值强制限定在一个范围内,省去了我们使用一组IF语句 outVal=255-outVal; //数据打包 String msg=String("")+String("Temperature-")+String(dht.getTemperatureC())+String("-Humidity-")+String(dht.getHumidity())+"-Light-"+String(outVal)+"-"; //串口发给树莓派 Serial.println(msg); } delay(200); }
光照+mq2+温湿度
#include <TroykaDHT.h> //获取温湿度 DHT11, DHT21, DHT22 DHT dht(4, DHT11); //光传感模块模拟数据接收引脚 #define Sensor_light A1 unsigned int sensorValue_light = 0; //注意:我是用的光传感器模块是随着光照增加输出减小的。 int MaxLight = 850; //光传感器模块完全遮蔽时的输出值(实际值比这个略小) int MinLight = 0; //光传感模块在灯光下完全裸露时的输出值(实际值比这个值略大) //燃气烟雾浓度 #define Sensor_mq2 A2 unsigned int sensorValue_mq2 = 0; void setup() { Serial.begin(9600);//串口通信 dht.begin();//温湿度采集开始 } void loop() { dht.read();// 温湿度 if(dht.getState()==DHT_OK) { //光照 sensorValue_light = analogRead(Sensor_light);//5000-20000PPM 对应 0-1023 int light_outVal = map(sensorValue_light, MinLight, MaxLight, 0, 255); //把光传感器的值映射到0-255(PWM输出范围),需要注意的是Map函数不会强制结果在0-255范围内(当curLight超出map函数的第二三两参数的范围时出现超出0-255的情况)。 light_outVal = constrain(light_outVal, 0, 255); //constrain是一个宏,它把一个值强制限定在一个范围内,省去了我们使用一组IF语句 light_outVal=255-light_outVal; //烟雾燃气 sensorValue_mq2 = analogRead(Sensor_mq2); //数据打包 String msg=String("")+String("Temperature-")+String(dht.getTemperatureC())+String("-Humidity-")+String(dht.getHumidity())+"-Light-"+String(light_outVal)+"-MQ2-"+String(sensorValue_mq2); Serial.println(msg); } //delay(2000); }
MQ2+雨滴传感器+温湿度
数值映射0-1023 ~ 0-255
串口打包输出
#include <TroykaDHT.h> //获取温湿度 DHT11, DHT21, DHT22 DHT dht(4, DHT11); //水滴传感模块模拟数据接收引脚 #define Sensor_water A1 unsigned int sensorValue_water = 0; //燃气烟雾浓度 #define Sensor_mq2 A2 unsigned int sensorValue_mq2 = 0; // 将数据映射过去 int GuiyiValue(int Real_Value=0,int Real_Min=0 , int Real_Max=1024 ,int tager_min=0,int tager_max=255) { int outVal = map(Real_Value, Real_Min, Real_Max, tager_min, tager_max); //(Real_Min-Real_Max)映射数据到范围 (tager_min-tager_max) outVal = constrain(outVal, tager_min, tager_max); // 判断数据是否在范围内并限定上下限 return outVal; } void setup() { Serial.begin(9600);//串口通信 dht.begin();//温湿度采集开始 } void loop() { dht.read();// 温湿度 if(dht.getState()==DHT_OK) { //水滴 sensorValue_water = 1024-analogRead(Sensor_water);//水滴越多值越小 所以取反 sensorValue_water=GuiyiValue(sensorValue_water,0 , 1024 ,0,255); //烟雾燃气 sensorValue_mq2 = analogRead(Sensor_mq2); //手捂着哈气实际最大620 最大应该带是1023 //数据打包 String msg=String("")+String("Temperature-")+String(dht.getTemperatureC())+String("-Humidity-")+String(dht.getHumidity())+"-Water-"+String(sensorValue_water)+"-MQ2-"+String(sensorValue_mq2)+"-"; Serial.println(msg); } //delay(2000); }