• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MKT-porter
博客园    首页    新随笔    联系   管理    订阅  订阅
Arduino读取温湿度dh11+烟雾气体MQ2+彩灯ws2812

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

原理

https://blog.csdn.net/qq_40276310/article/details/80766166?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1

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);
}

  

posted on 2020-04-03 20:53  MKT-porter  阅读(886)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3