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);
}
读取引脚状态
int pushButton = 2;
void setup() {
Serial.begin(9600);//串口通信
pinMode(pushButton, INPUT);//红外检测
}
void loop() {
//红外
int redState = digitalRead(pushButton);
String msg=String("")+"-redState-"+String(redState);
Serial.println(msg);
delay(10);
}
获取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);
}
浙公网安备 33010602011771号