本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页
最热资讯


亲,“电路城”已合并升级到更全、更大、更强的「新与非网」。点击查看「新与非网」
该设计是一种天气监控系统,该系统使用传感器显示温度,湿度和空气质量。该系统新颖的原因在于它的简单性和用户友好性。它可以放在您的手掌中。它可以帮助预测,并且预测结果更加准确。
硬件组件:
软件应用程序:
电路原理图:
代码:
1)氩气天气监控代码
#include "Adafruit_DHT.h"
#define DHTPIN 2 //连接那个引脚
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
SYSTEM_MODE(AUTOMATIC);
void setup() {
pinMode(A0,INPUT); //LDR 引脚
pinMode(A1,INPUT); //MQ2 引脚
pinMode(A2,INPUT); //MQ135 引脚
Serial.begin(115200);
dht.begin();
}
void loop() {
// 在测量之间等待几秒钟。
delay(2000);
// 极慢传感器)
float h = dht.getHumidity();
// 温度读数为摄氏度
float t = dht.getTempCelcius();
//获取灯光级别
float LDR=analogRead(A0);
//读取MQ2级别
float MQ2=analogRead(A1);
//读取MQ135级别
float MQ135=analogRead(A2);
// 检查是否有读取失败并提前退出(以重试)。
// if (isnan(h) || isnan(t) || isnan(f)) {
if (isnan(h)) {
Serial.println("Failed to read from DHT sensor!");
h=t=0;
}
//将传感器数据转换为JSON响应 Webhooks将数据发送到ThingSpeak&Zapier进行进一步处理
String Data="{\"field1\":\""+String(t)+"\","; //Temp
Data+="\"field2\":\""+String(h)+"\","; //Humdity
Data+="\"field3\":\""+String(LDR)+"\","; //LDR
Data+="\"field4\":\""+String(MQ135)+"\","; //MQ135
Data+="\"field5\":\""+String(MQ2)+"\"}"; //MQ2
Particle.publish("WeatherData", Data, PUBLIC);
Serial.print("Humid: ");
Serial.print(h);
Serial.print("% - ");
Serial.print("Temp: ");
Serial.print(t);
Serial.println("*C");
Serial.print("LDR: ");
Serial.println(LDR);
Serial.print("MQ2: ");
Serial.println(MQ2);
Serial.print("MQ135: ");
Serial.println(MQ135);
Serial.println(Time.timeStr());
// 测量之间等待30秒
delay(300000);
}
2)氩气天气监控器子代码1
#include "Adafruit_DHT.h"
DHT::DHT(uint8_t pin, uint8_t type, uint8_t count) {
_pin = pin;
_type = type;
_count = count;
firstreading = true;
}
void DHT::begin(void) {
//装上别针
pinMode(_pin, INPUT);
pinSetFast(_pin);
_lastreadtime = 0;
}
float DHT::readTemperature() {
float f;
if (read()) {
switch (_type) {
case DHT11:
f = data[2];
return f;
case DHT22:
case DHT21:
f = data[2] & 0x7F;
f *= 256;
f += data[3];
f /= 10;
if (data[2] & 0x80)
f *= -1;
return f;
}
}
return NAN;
}
float DHT::getHumidity() {
return readHumidity();
}
float DHT::getTempCelcius() {
return readTemperature();
}
float DHT::getTempFarenheit() {
return convertCtoF(readTemperature());
}
float DHT::getTempKelvin() {
return convertCtoK(readTemperature());
}
float DHT::getHeatIndex() {
return convertFtoC(computeHeatIndex(convertCtoF(readTemperature()), readHumidity()));
}
float DHT::getDewPoint() {
return computeDewPoint(readTemperature(), readHumidity());
}
float DHT::convertFtoC(float f) {
return (f - 32) * 5 / 9;
}
float DHT::convertCtoF(float c) {
return c * 9 / 5 + 32;
}
float DHT::convertCtoK(float c) {
return c + 273.15;
}
float DHT::readHumidity(void) {
float f;
if (read()) {
switch (_type) {
case DHT11:
f = data[0];
return f;
case DHT22:
case DHT21:
f = data[0];
f *= 256;
f += data[1];
f /= 10;
return f;
}
}
return NAN;
}
float DHT::computeHeatIndex(float tempFahrenheit, float percentHumidity) {
return -42.379 +
2.04901523 * tempFahrenheit +
10.14333127 * percentHumidity +
-0.22475541 * tempFahrenheit * percentHumidity +
-0.00683783 * pow(tempFahrenheit, 2) +
-0.05481717 * pow(percentHumidity, 2) +
0.00122874 * pow(tempFahrenheit, 2) * percentHumidity +
0.00085282 * tempFahrenheit * pow(percentHumidity, 2) +
-0.00000199 * pow(tempFahrenheit, 2) * pow(percentHumidity, 2);
}
float DHT::computeDewPoint(float tempCelcius, float percentHumidity) {
double a = 17.271;
double b = 237.7;
double tC = (a * (float) tempCelcius) / (b + (float) tempCelcius) + log( (float) percentHumidity / 100);
double Td = (b * tC) / (a - tC);
return Td;
}
boolean DHT::read(void) {
uint8_t laststate = HIGH;
uint8_t counter = 0;
uint8_t j = 0, i;
unsigned long currenttime;
// 检查传感器是否在两秒钟前读取并提前返回
// 使用最后的读数。
currenttime = millis();
if (currenttime < _lastreadtime) {
// ie there was a rollover
_lastreadtime = 0;
}
if (!firstreading && ((currenttime - _lastreadtime) < 2000)) {
return true; // return last correct measurement
// delay(2000 - (currenttime - _lastreadtime));
}
firstreading = false;
/*
Serial.print("Currtime: "); Serial.print(currenttime);
Serial.print(" Lasttime: "); Serial.print(_lastreadtime);
*/
_lastreadtime = millis();
data[0] = data[1] = data[2] = data[3] = data[4] = 0;
// 将销拉高并等待250毫秒
pinSetFast(_pin);
delay(250);
// 现在把它拉低20毫秒
pinMode(_pin, OUTPUT);
pinResetFast(_pin);
delay(20);
noInterrupts();
pinSetFast(_pin);
delayMicroseconds(40);
pinMode(_pin, INPUT);
// 读入计时
for ( i=0; i< MAXTIMINGS; i++) {
counter = 0;
while (pinReadFast(_pin) == laststate) {
counter++;
delayMicroseconds(1);
if (counter == 255) {
break;
}
}
laststate = pinReadFast(_pin);
if (counter == 255) break;
//忽略前3个过渡
if ((i >= 4) && (i%2 == 0)) {
// 将每个位放入存储字节
data[j/8] <<= 1;
if (counter > _count)
data[j/8] |= 1;
j++;
}
}
interrupts();
/*
Serial.println(j, DEC);
Serial.print(data[0], HEX); Serial.print(", ");
Serial.print(data[1], HEX); Serial.print(", ");
Serial.print(data[2], HEX); Serial.print(", ");
Serial.print(data[3], HEX); Serial.print(", ");
Serial.print(data[4], HEX); Serial.print(" =? ");
Serial.println(data[0] + data[1] + data[2] + data[3], HEX);
*/
// 检查我们读取了40位并且校验和匹配
if ((j >= 40) &&
(data[4] == ((data[0] + data[1] + data[2] + data[3]) & 0xFF)) ) {
return true;
}
return false;
}
3)氩气天气监控器子代码2
#ifndef DHT_H
#define DHT_H
#include "application.h"
#include "math.h"
// 我们需要跟踪多少时间转换。2*数字位+额外
#define MAXTIMINGS 85
#define DHT11 11
#define DHT22 22
#define DHT21 21
#define AM2301 21
class DHT {
private:
uint8_t data[6];
uint8_t _pin, _type, _count;
unsigned long _lastreadtime;
boolean firstreading;
float readTemperature();
float convertFtoC(float);
float convertCtoF(float);
float convertCtoK(float);
float computeHeatIndex(float tempFahrenheit, float percentHumidity);
float computeDewPoint(float tempCelcius, float percentHumidity);
float readHumidity(void);
boolean read(void);
public:
DHT(uint8_t pin, uint8_t type, uint8_t count=6);
void begin(void);
float getHumidity();
float getTempCelcius();
float getTempFarenheit();
float getTempKelvin();
float getHeatIndex();
float getDewPoint();
};
#endif
电路设计图片:
实时数据:
摄氏度
华氏度
开启“人工智能”——贝尔金WeMo智能插座套装拆解
2014-05-23
iPhone 6 plus最专业传感器深入解析
2014-10-22
智能手机里面都装着哪些传感器?它们都记录了你的什么?
2016-04-11
NXP开发板不知道选什么,看这里就对了!
2016-07-28
盘点全球知名传感器芯片巨头Top10
2015-08-21
这套工业物联网解决方案把乐高变成了一座智慧城市
2019-06-24
[项目实录]全流程LoRaWAN开发
2019-07-22
【视频秀】用STM32和光传感器控制电机马达开关窗户
2019-06-12
一款小尺寸、高性能的智能家居设备
2019-06-21
无线传感器网络——传感器原理与应用系列课程
2019-07-24
讨论