在这篇文章中,我们将构建一个有趣的基于Arduino的微型气象站项目,它可以向你展示环境温度、湿度、压力、空气质量以及更多来自你周围环境的数据,这些数据可以用于在家预测天气。
如果您对气象感兴趣,这项项目可能会派上友好地学习当地天气条件和短期变化。所提出的项目是固态设计,这意味着没有存在运动部件。
该项目可以放置在室内或半室内条件下,电路远离阳光直射或大风力或水分,这可以使电路板上的传感器劣化。
设计:
这个微型气象站电路项目是围绕Arduino建造的,Arduino是气象站的大脑,它从各种传感器收集大量数据,并进行处理,并在16x2液晶屏幕上显示。
您可以为此项目选择您最喜欢的Arduino Board。电路由三个传感器MQ-135,BMP180和DHT11组成。让我们看看每个传感器的详细情况。
mq - 135传感器:
MQ-135是空气质量测量传感器,可检测二氧化碳、酒精、苯、烟雾、丁烷、丙烷等。如果这些气体的化学浓度在空气中很高,那么我们可以说空气被污染了。
传感器可以检测空气中污染物浓度的变化,并提供适当的电压水平。传感器的输出电压与空气中的化学浓度水平成正比。
传感器产生的电压变化反馈给Arduino;我们在程序中预先确定了阈值水平。当它超过阈值水平时,微控制器告诉我们空气是否安全。
线路图
上图显示了布线图。该传感器需要外部5V电源,因为它具有传感器内的加热元件,可消耗大约1瓦特。来自Arduino的电源引脚的电源无法提供更高的电流。
加热元件保持传感器温暖,有助于在空气中进行适当的化学浓度。传感器需要几分钟才能达到最佳温度。
DHT11传感器:
DHT11传感器俗称温湿度传感器。顾名思义,它可以测量周围的温度和湿度。
它是4个引脚设备,但仅使用其中3个。它可能看起来像一个非常简单的组件,但它在传感器内部有一个微控制器,它将数据以数字形式传递给Arduino板。
它每秒发送8位数据到Arduino,以解码接收的信号,我们需要在旨在处理它的代码中包含库。图书馆的链接是稍后的文章的一部分。
线路图:

从传感器到arduino的电路连接非常简单。传感器的输出连接到arduino的A1引脚。电源Vcc和GND连接arduino的电源引脚。
注意:如果没有上拉电阻,请确保传感器内置上拉电阻;在DHT11传感器的输出引脚连接一个4.7K的上拉电阻。
BMP180传感器:
BMP180是气压传感器;它可以测量大气压,高度和温度。当我们具有用于测量环境温度的专用传感器时,从该传感器的温度测量被忽略。
传感器从海平面测量装置的高度,也是气象学中使用的参数之一。
线路图:

它使用I2C通信协议,SDA引脚转到Arduino的A4,SCL转到A5的Arduino。VCC和GND连接到Arduino的电源销。
LCD连接:

LCD显示屏显示传感器的所有数据。LCD显示器和Arduino之间的连接是标准的;我们可以在许多基于LCD的项目中找到类似的连接。调整10K电位器,可从LCD显示屏上获得最佳的可见性。
作者的原型:

这是作者的迷你天气监视器电路的原型,其中原理图中所示的所有传感器连接到Arduino板。
注:每个传感器和液晶显示器的电路连接应连接到单个arduino板上。我们在每个原理图上都给出了离散的传感器连接,以避免在复制电路时产生混淆。
在上传代码之前下载库文件:
DHT11库:https://arduino-info.wikispaces.com/file/detail/DHT-lib.zip
BMP180库:GitHub.com/Adafruit/Adafruit_BMP085_UNIFied.git
程序代码:
# include < LiquidCrystal.h >
# include < dht.h >
# include < Wire.h >
# include < Adafruit_BMP085.h >
#定义DHTxxPIN A1
液晶LCD(12,11,5,4,3,2);
DHT DHT;
Adafruit_BMP085 bmp;
int ack;
int输入= a0;
unsigned long A = 1000L;
unsigned long B = A * 60;
unsigned long C = B * 2;
int low = 300;
Int med = 500;
int high = 700;
Int x = 4000;
无效的设置()
{
Serial.Begin(9600);
LCD.BEGIN(16,2);
lcd.setCursor (0,0);
lcd.print(“传感器是”);
lcd.setCursor (0,1);
lcd.print(“准备好”);
延迟(c);
}
void循环()
{
ack = 0;
int chk = dht.read11(dhtxxpin);
开关(CHK)
{
案例dhtlib_error_connect:
ACK = 1;
休息;
}
if(ack == 0)
{
lcd.clear ();
lcd.setCursor (0,0);
lcd.print(“temp(* c)=”);
lcd.print (DHT.temperature);
lcd.setCursor (0,1);
lcd.print("湿度(%)= ");
lcd.print (DHT.humidity);
延迟(x);
}
if(ack == 1)
{
lcd.clear ();
lcd.setCursor (0,0);
液晶显示器。打印(没有数据);
lcd.setCursor (0,1);
lcd.print(“检查传感器”);
延迟(x);
}
如果(!bmp.begin())
{
lcd.clear ();
lcd.setCursor (0,0);
LCD.Print(“BMP180传感器”);
lcd.setCursor (0,1);
lcd.print(“未找到”);
虽然(1){}
}
lcd.clear ();
lcd.setCursor (0,0);
lcd.print(“----压力----”);
lcd.setCursor (0,1);
lcd.print (bmp.readPressure ());
lcd.print(“Pascal”);
延迟(x);
lcd.clear ();
lcd.setCursor (0,0);
lcd.print(“——高度”);
lcd.setCursor (0,1);
lcd.print (bmp.readAltitude (101500));
lcd.print(“仪表”);
延迟(x);
lcd.clear ();
lcd.setCursor (0,0);
液晶显示器。打印(“空气质量:”);
如果(analogRead(输入)= = 0)
{
lcd.setCursor (0,1);
液晶显示器。打印(“传感器错误”);
延迟(x);
}
如果(analogRead(输入)< =低& & analogRead(输入)> 0)
{
lcd.setCursor (0,1);
液晶显示器。打印(“好”);
延迟(x);
}
如果(analogRead(输入)>低& & analogRead(输入)<地中海)
{
lcd.setCursor (0,1);
液晶显示器。打印(“坏”);
延迟(x);
}
如果(analogRead地中海(输入)> = & & analogRead(输入)<高)
{
lcd.setCursor (0,1);
lcd.print(“非常糟糕”);
延迟(x);
}
if(analogread(输入)> =高)
{
lcd.setCursor (0,1);
lcd.print(“最差”);
延迟(x);
}
}
注意:
解释的微型气象站电路需要2分钟来显示传感器的读数,在此之前,它会显示“传感器准备好了”。这是因为MQ-135传感器需要2分钟才能达到最佳工作温度。
不错的计划,斯瓦格先生…
我的问题是,在arduino编程之后。我可以只是移除IC和焊接它与其他组件?
谢谢
谢谢奥因库勒,是的,这是可能的,但你必须非常小心连接……
谢谢Mr.Swag…写在电路板上的IC的连接和支腿编号与拔出电路板时的编号一致?
是的,编号对应于IC的pinout…
爵士说没有找到bmp180
我不明白这个问题,请再解释一下!!