亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

$10 便携式 Arduino 气象站 (AWS)

组件和用品

Arduino Nano R3
× 1
DHT22 温度传感器
× 1
bmp180
× 1
Adafruit 标准 LCD - 16x2 蓝底白字
× 1

必要的工具和机器

烙铁(通用)

应用和在线服务

Arduino IDE

关于这个项目

最近我的大学有一个小型的科学展览。所以我的老师要求我在学院展示一个项目,教年轻学生电子学,所以基本上我有两天时间来做一些事情。

由于这里的气候条件变化很大,最近的温度在 34-40 摄氏度左右。所以我决定做一个气象站。

那么气象站的作用是什么?

气象站是一种使用多种传感器收集与天气和环境相关的数据的设备

这样的传感器
  • 湿度
  • 下雨
  • 温度
  • 压力
  • 海拔高度

目标是做一个便携式气象站

应有的功能

  • 温度
  • 湿度
  • 压力
  • 海拔

第 1 步:成分:是时候买东西了

所以这是我们项目需要的东西

我实际上是在 My UNO 上开始这个项目的,但后来我决定改用紧凑型解决方案。

那一刻我带着nano,所以不得不用它,很想用micro,因为它是最小的。

总之离开这些东西,谈论预算和零件这里是列表。

  • DHT22 温湿度传感器 -> 3.00 美元
  • BMP180 压力传感器(BMP280 在我所在的地区更便宜但更贵)> 2.00 美元
  • Arduino Nano> 1.89 美元
  • 焊接
  • 带 I2C 驱动程序的 LCD 显示器> 3.0 美元
  • Veroboard
  • 女头

对于工具端,您将需要

  • 烙铁
  • 鼻钳
  • 电线

还有一段时间

第 2 步:温度和湿度 - DHT22

可以使用不同的传感器进行温度测量。

流行的有 DHT22、DHT11、SHT1x

所以基本上,让我们了解一下这个传感器之间的不同之处,以及我为什么首先使用 DHT22。

AM2302 输出校准数字信号。采用独有的数字信号采集技术和湿度传感技术,确保其可靠性和稳定性。其传感元件与8位单片机相连。

该型号的每个传感器都在精确的校准室中进行温度补偿和校准,校准系数以程序类型保存在OTP内存中,当传感器检测时,它将引用内存中的系数。体积小、功耗低、传输距离长(100m)使AM2302适用于各种恶劣的应用场合。单排四针封装,连接非常方便。

让我们看看这三者的优缺点。

DHT11

优点:无需焊接。三款中最便宜的。快速获得稳定的输出。传输超过20m。强干扰。

缺点:图书馆!没有分辨率选项。误差:温度+/-2°C;湿度+/-5%RH。测量范围不足(0-50°C)。应用:园艺、农业。

DHT22

优点:无需焊接。向 DHT11 添加几美元并获得升级。流畅的曲线。最小的误差。范围大。传输超过20m。强干扰。

缺点:可以更敏感。缓慢的温度跟踪。需要图书馆。应用:环境监测。 SHT1x

优点:无需焊接。流畅的曲线。小错误。快速响应。低功耗。自动休眠。非凡的长期稳定性和一致性。

缺点:两个数字接口。湿度错误。与 DHT11 相同的测量范围。需要图书馆。应用:重型和长期安装。以下是三个相对便宜的选择。

连接

Vcc 至 5V 或 3.3V

地对地

数据到 arduino 的 pin 2

第 3 步:气压计和压力传感器 - BMP180

bmp180 气压传感器,带有 I2C(“Wire”)接口。

气压传感器测量周围空气的绝对压力。该压力随天气和海拔高度而变化。

这个 bmp180 模块带有一个 3.3 v 稳压器 662k,我把它吹到了一些愚蠢的地方,所以我连接了一根电线,将整个 vcc 直接旁路到芯片。

注意:这样做时,我限制自己只使用 3.3 v,使用高于它的电压会损坏设备。

其他型号可能没有 662k 稳压器。所以要彻底检查。

好的,回来让我们将传感器连接到 arduino。

传感器连接到arduino的i2c总线,nano和Uno是

SDA==>A4

SCL==>A5

VCC==>3.3V

地 ==> 地

让我们稍微谈谈压力以及压力如何测量高度和温度。

任何位置的大气压都不是恒定的。地球自转、地轴倾斜等诸多因素的复杂相互作用,导致高低气压的运动区域,进而导致我们每天看到的天气变化。通过观察压力变化,您可以预测天气的短期变化。

例如,压力下降通常意味着潮湿的天气或风暴即将来临(低压系统正在进入)。气压上升通常意味着晴朗的天气即将来临(高压系统正在通过)。

大气压力也随高度而变化。珠穆朗玛峰大本营绝对压力(5400)低于德里(216)

由于绝对压力很难直接比较从一个位置到另一个位置的压力测量值。我们使用相对压力。即海平面压力。

测量高度

海平面大气的平均压力为 1013.25 hPa(或 mbar)。当你爬向真空时,这个值会下降到零。由于此下降曲线很好理解,因此您可以使用以下等式计算两次压力测量值(p 和 p0)之间的高度差:

alti=44330*[1-(p/p0)^(1/5.255)]

如果您使用海平面压力 (1013.25 hPa) 作为基线压力 (p0),则方程的输出将是您当前的海拔高度。

注意事项

给它空气: 请记住,BMP180 需要接触环境空气来测量其压力,因此不要将其放在密封的情况下。提供一个小的通风孔就足够了。但空气不要太多 :另一方面,暴露在快速移动的空气或风中会导致瞬时压力变化,从而影响您的读数。保护设备免受强气流的影响。

保持冷静: 由于测量压力需要准确的温度读数,因此尽量不要将设备暴露在温度急剧变化的环境中,并使其远离附近的热部件和其他热源。

保持干燥 :BMP180 对湿气很敏感。请勿将其浸入水中或使其接触液态水。

不要盲目: 令人惊讶的是,BMP180 内的硅对光很敏感,光可以通过芯片顶部的孔进入设备。为获得最大精度,请将芯片与环境光屏蔽。

第 4 步:制作电路

因此,我们首先为 nano 制作标题。我们实际上切割了母头,然后将它们归档,使它们看起来好像它们原来是那个大小。然后我们焊接它。然后我们为 DHT22 传感器制作了标题

.它需要一个 10k 电阻将数据连接到地。然后我们焊接了所有东西。然后是 bmp180 的时候了,我们以类似的方式添加了接头。我们使用 3.3 V 作为电源。我们连接了所有的 i2c 总线。

我们最后添加了我们使用 i2c lcd 的显示器,所以我们使用了与 bmp180 模块相同的总线。

有第四个插槽,我想稍后在其中添加 rtc 模块,以便在机器中集成时钟)

第 5 步:代码时间

等一下.......

下载库

bmp180

https://github.com/sparkfun/BMP180_Breakout_Arduin...

BMP180_Breakout_Arduino_Library-master.zip

Dht22库

https://github.com/adafruit/DHT-sensor-library

要在 arduino 中安装库,请检查此链接

https://www.arduino.cc/en/Guide/Libraries

我使用了 arduino 1.6.5,所以代码肯定适用于这个版本,也可能更高,如果它不起作用,请使用 1.6.5 作为基础版本。

#include #include #include #include "DHT.h"#include

SFE_BMP180 压力;

#define ALTITUDE 20.56 #define I2C_ADDR 0x27 // <<- 添加你的地址在这里。#define Rs_pin 0#define Rw_pin 1#define En_pin 2#define BACKLIGHT_PIN 3#define D4_pin 4#define D5_pin 5#define D6_pin 6#define D7_pin 7

#define DHTPIN 2 // 什么数字我们连接的引脚

//取消注释您使用的任何类型!//#define DHTTYPE DHT11 // DHT 11#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321DHT dht(DHTPIN, DHTTYPE);LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);float t1,t2;

void setup(){ Serial.begin(9600);液晶显示器开始(16,2); // <<-- 我们的 LCD 是 20x4,如果需要,请更改您的 LCD // LCD 背光 ONlcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);lcd.setBacklight(HIGH); lcd.home(); // 回到 LCDlcd.print("Weather Station");delay(5000);dht.begin();压力。开始(); } void loop(){ 字符状态;双 T,P,p0,a;状态 =pressure.startTemperature(); if (status !=0) { delay(status);

status =pressure.getTemperature(T);如果(状态!=0){ Serial.print(“1”);液晶显示器(); lcd.setCursor(0,0); lcd.print("气压温度:"); lcd.setCursor(0,1);液晶打印(T,2); lcd.print(" 摄氏度 "); t1=T;延迟(3000);

状态=压力。开始压力(3); if (status !=0) { // 等待测量完成:delay(status);

status =pressure.getPressure(P,T);如果(状态!=0){lcd.clear(); lcd.setCursor(0,0); lcd.print("绝对压力:"); lcd.setCursor(0,1);液晶打印(P,2); lcd.print("mb");延迟(3000);

p0 =pressure.sealevel(P,ALTITUDE); // 我们在 1655 米(科罗拉多州博尔德)

a =pressure.altitude(P,p0);液晶显示器(); lcd.setCursor(0,0); lcd.print("海拔高度:"); lcd.setCursor(0,1);液晶打印(a,0); lcd.print("米");延迟(3000); } } } } float h =dht.readHumidity(); // 读取摄氏温度(默认) float t =dht.readTemperature(); t2=t;液晶显示器(); lcd.setCursor (0,0); // 转到第二行的开头 lcd.print("Humidity:"); lcd.setCursor(0,1);lcd.print(h); lcd.print("%");延迟(3000);液晶显示器(); lcd.setCursor (0,0); // 转到第二行的开头 lcd.print("DHT Tempurature:"); lcd.setCursor(0,1);液晶打印(t); lcd.print(" 摄氏度 ");延迟(3000);液晶显示器(); lcd.setCursor (0,0); // 转到第二行的开头 lcd.print("Mean Tempurature:"); lcd.setCursor(0,1);液晶打印((t1+t2)/2); lcd.print(" 摄氏度 ");延迟(3000);}

FSIULGKING9D7SD.ino


代码

  • 代码片段 #1
代码片段 #1纯文本

#include #include #include #include "DHT.h"#include

SFE_BMP180 压力;

#define ALTITUDE 20.56 #define I2C_ADDR 0x27 // <<- 在此处添加您的地址。 #define Rs_pin 0#define Rw_pin 1#define En_pin 2#define BACKLIGHT_PIN 3#define D4_pin 4#define D5_pin 5#define D6_pin 6#define D7_pin 7

#define DHTPIN 2 //我们是什么数字引脚重新连接到

//取消注释您正在使用的任何类型!//#define DHTTYPE DHT11 // DHT 11#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321DHT dht(DHTPIN, DHTTYPE); LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);float t1,t2;

void setup(){ Serial.begin(9600);液晶显示器开始(16,2); // <<-- 我们的 LCD 是 20x4,如果需要,请更改您的 LCD // LCD 背光 ONlcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);lcd.setBacklight(HIGH); lcd.home(); // 回到 LCDlcd.print("Weather Station");delay(5000);dht.begin();压力。开始(); } void loop(){ 字符状态;双 T,P,p0,a;状态 =pressure.startTemperature(); if (status !=0) { delay(status);

status =pressure.getTemperature(T);如果(状态!=0){ Serial.print(“1”);液晶显示器(); lcd.setCursor(0,0); lcd.print("气压温度:"); lcd.setCursor(0,1);液晶打印(T,2); lcd.print(" 摄氏度 "); t1=T;延迟(3000);

状态=压力。开始压力(3); if (status !=0) { // 等待测量完成:delay(status);

status =pressure.getPressure(P,T);如果(状态!=0){lcd.clear(); lcd.setCursor(0,0); lcd.print("绝对压力:"); lcd.setCursor(0,1);液晶打印(P,2); lcd.print("mb");延迟(3000);

p0 =pressure.sealevel(P,ALTITUDE); // 我们在 1655 米(科罗拉多州博尔德)

a =pressure.altitude(P,p0);液晶显示器(); lcd.setCursor(0,0); lcd.print("海拔高度:"); lcd.setCursor(0,1);液晶打印(a,0); lcd.print("米");延迟(3000); } } } } float h =dht.readHumidity(); // 读取摄氏温度(默认) float t =dht.readTemperature(); t2=t;液晶显示器(); lcd.setCursor (0,0); // 转到第二行的开头 lcd.print("Humidity:"); lcd.setCursor(0,1);lcd.print(h); lcd.print("%");延迟(3000);液晶显示器(); lcd.setCursor (0,0); // 转到第二行的开头 lcd.print("DHT Tempurature:"); lcd.setCursor(0,1);液晶打印(t); lcd.print(" 摄氏度 ");延迟(3000);液晶显示器(); lcd.setCursor (0,0); // 转到第二行的开头 lcd.print("Mean Tempurature:"); lcd.setCursor(0,1);液晶打印((t1+t2)/2); lcd.print(" 摄氏度 ");延迟(3000);}

Github
https://github.com/sparkfun/BMP180_Breakout_Arduino_Library/archive/master.ziphttps://github.com/sparkfun/BMP180_Breakout_Arduino_Library/archive/master.zip
Github
https://github.com/adafruit/DHT-sensor-libraryhttps://github.com/adafruit/DHT-sensor-library

示意图


制造工艺

  1. Raspberry Pi 2 气象站
  2. Raspberry Pi 气象站
  3. Weather Station V 2.0
  4. Model Rail Digital DCC Command Station Arduino 和免费应用程序
  5. 6-Shooter:Arduino 饮料混合站
  6. Arduino 数字骰子
  7. 便携式电容式触摸钢琴
  8. Arduino 游戏控制器
  9. 便携式测距仪
  10. 像素追逐游戏
  11. Arduino Powered Weather Balloon Datalogger
  12. eDOT - 基于 Arduino 的精密时钟和气象站