气象站实验概述 本实验,我们利用arduinoUNO R3板以及外围传感器,搭建一个DIY气象站。 气压传感器模块介绍BMP280是一种专为移动应用设计的绝对气压传感器。该传感器模块采用极其紧凑的封装。得益于小尺寸和低功耗特性,这种器件可用在如移动电话、GPS模块或手表等电池供电型设备中。 特性l 工作范围 300 hPa 至 100 hPa l 工作温度范围:-40°C 至 +85°C l 相对的绝对精度 ±0.12 hPa(典型值) l 平均测量时间 5.5 ms l 电源电压 VDD 1.71V 至 3.6 V l 电源电压 VDDIO1.2 V 至 3.6 V l I²C 和串行外设接口 (SPI) l 2.0 mm x 2.5 mm x 0.95 mm、8 引脚 LGA,金属封装 应用l GPS 导航增强(例如改进初次定位时间、航位推算、斜率检测) l 室内导航(室内检测、电梯检测) l 户外导航,休闲和运动应用 l 天气预报 l 健康保健应用(如肺活量测定) l 垂直速度指示(如上升/下沉速度) 大气压强传感器模块原理图 大气压测量原理 Arduino UNO R3的SPI引脚分别是: 需要注意的是这块气压传感器板子的额定电压是3.3v,且同时支持两种连接方式:I²C和SPI ,以SPI的连接方式和程序为例,连线如下。 备注:不要使用5V,可能会损坏BMP280传感器。 实验器件清单1. UNO R3 主板*1 2. Sensor 扩展板*1 3. USB 数据线*1 4. 气压传感器模块*1 5. LCD1602模块 接线 实验一 测试BPM280模块实验原理Arduino UNO R3板和气压传感器模块连接,测量温度,气压等大气数据。 ArduinoIDE 编程程序 #include <SPI.h> #include "Adafruit_Sensor.h" #include "Adafruit_BMP280.h" #define BMP_SCK 13 #define BMP_MISO 12 #define BMP_MOSI 11 #define BMP_CS 10 Adafruit_BMP280 bme(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK); void setup() { Serial.begin(9600); Serial.println(F("BMP280 test")); if (!bme.begin()) { Serial.println("Could not find a valid BMP280 sensor, check wiring!"); while (1); } } void loop() { Serial.print("Temperature = "); Serial.print(bme.readTemperature()); Serial.println(" *C"); Serial.print("Pressure = "); Serial.print(bme.readPressure()); Serial.println(" Pa"); Serial.println(); delay(2000); } |
实验结果 实验一测试BPM280模块实验目的Arduino UNO R3板和气压传感器模块连接,测量温度,气压等大气数据并显示在LCD上。 ArduinoIDE 编程程序 #include <Wire.h> #include <SPI.h> #include "Adafruit_Sensor.h" #include "Adafruit_BMP280.h" #include "LiquidCrystal_I2C.h" #define BMP_SCK 13 #define BMP_MISO 12 #define BMP_MOSI 11 #define BMP_CS 10 //Adafruit_BMP280 bme; // I2C //Adafruit_BMP280 bme(BMP_CS); // hardware SPI Adafruit_BMP280 bme(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK); LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display void setup() { Serial.begin(9600); Serial.println("BMP280 test"); if (!bme.begin()) { Serial.println("Could not find a valid BMP280 sensor, check wiring!"); while (1); } lcd.init(); lcd.backlight(); } void loop() { Serial.print("Tep: "); Serial.print(bme.readTemperature()); Serial.println("'C"); lcd.setCursor(0, 0); lcd.print("Tep: "); lcd.print(bme.readTemperature()); lcd.print("'C"); lcd.setCursor(0, 1); lcd.print("Pre:"); lcd.print(bme.readPressure()); lcd.print(" Pa"); Serial.print("Pressure = "); Serial.print(bme.readPressure()); Serial.println(" Pa"); delay(5000); } | 实验结果
|