Погодная станция на BME280 (Arduino)

На датчике BME280 можно сделать очень простую, но достаточно информативную и точную погодную станцию.  Этот датчик предназначен для использования в помещении, для измерения температуры воздуха на улице будет использовать простой но надежный цифровой датчик DS18B20. Датчик BME280 позволяет измерять сразу три параметра — температуру, влажность и давление.

Технические характеристики датчика BME280:

  • Напряжение питания: 3.3 В – 5 В
  • Рабочий ток: 1 мA
  • Диапазон измерения давления: 300 гПа – 1100 гПа (точность ±1.0 гПа)
  • Диапазон измерения температуры: -40 °C до +85 °C (точность ±0.5 °C)
  • Диапазон измерения влажности: 20 % до 80 % (точность ±3 %)
  • Интерфейс: I2C
  • Обратите внимание на маркировку датчика BME280, существует две маркировки BME280-3.3V и BME280-5V, поэтому для питания используйте напряжение 3,3 В или 5 В соответственно.  

BME280-3.3V

BME280-5V

(имеет на плате стабилизатор 3,3 В)

Технические характеристики датчика DS18B20:

  • Погрешность измерения не больше 0,5 С (для температур от -10С до +85С).
  • Температурный диапазон измерений  от -55 С до +125 С.
  • Напряжение питания от 3,3 В до 5 В.
  • Программируемое разрешение от 9 до 12 bit.
  • Можно подключить сразу до 127 датчиков к одной линии связи.
  • Информация передается по протоколу 1-Wire.

Так же следует отметить что датчик DS18B20 выпускается в виде модуля и в различных корпусах, корпусное исполнение не имеет внешних элементов в отличии от модуля, поэтому для нормальной работы датчика необходимо подать +5В на цифровой выход через резистор номиналом 4,7 кОм.

Информация выводится LCD дисплей 84×48 Nokia 5110.

(Подключение подсветки LCD дисплея 84×48 Nokia 5110 может отличаться от указанной на схеме, контакт LIGHT нужно соединить с контактом GND перемычкой)

Плата Arduino Nano и датчик BME280 обмениваются данными на шине I2C по линиям SDA (data — данные) и SCL (clock — синхронизация).

Плата Пин SDA Пин SCL
Arduino Uno, Nano, Pro и Pro Mini A4 A5

Цифровой выход датчика DS18B20 подключается к аналоговому входу Arduino A0.

#include <Wire.h> 
#include <SPI.h>
#include <OneWire.h>          // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip
#include <DallasTemperature.h>// http://rcl-radio.ru/wp-content/uploads/2018/07/DallasTemperature.zip
#include <Adafruit_Sensor.h>  // https://github.com/adafruit/Adafruit_Sensor
#include <Adafruit_BME280.h>  // https://github.com/adafruit/Adafruit_BME280_Library
#include <PCD8544.h>          // http://rcl-radio.ru/wp-content/uploads/2019/01/pcd8544.zip
 PCD8544 lcd; // RST,CE,DC,DIN,CLK   VCC,BL,GND (3,4,5,6,7   +3.3V,200 OM +3.3V, GND)
 Adafruit_BME280 bme;
 OneWire oneWire(A0);// вход датчика 18b20
 DallasTemperature temp(&oneWire);
 static const byte gradus[] = { B00000110,B00001001,B00001001,B00000110,B00000000 };// градус
 float t1,t2,hpa,h;
 
 void setup() {
  Serial.begin(9600);                                  
 if (!bme.begin(0x76)) {Serial.println("Could not find a valid BME280!"); while (1);}
  temp.begin(); temp.setResolution(10);//10 бит   
  lcd.begin(84, 48); 
  lcd.createChar(0, gradus);
  lcd.setContrast(60);//  контрастность 0-127
 
 }
 
 void loop() {
    temp.requestTemperatures();// опрос 18b20
    t1 = temp.getTempCByIndex(0); // снятие показаний 18b20
    t2 = bme.readTemperature();  // снятие показаний температуры с bme280
    hpa = bme.readPressure() / 100.0F;                                      
    h = bme.readHumidity();                                                   
 
  lcd.setCursor(0,1);// вывод темп 18b20 на экран, первая строка
  lcd.print("Temp 1:");if(t1>=0){lcd.print(" ");}if(t1>0&&t1<10||t1<0&&t1>-10){lcd.print(" ");}lcd.print(t1,1); lcd.write(0);lcd.print("C");
  lcd.setCursor(0,2);
  lcd.print("Temp 2:");if(t2>=0){lcd.print(" ");}if(t2>0&&t2<10||t2<0&&t2>-10){lcd.print(" ");}lcd.print(t2,1); lcd.write(0);lcd.print("C");
  lcd.setCursor(0,3);
  lcd.print("P ");lcd.print(hpa*0.75,1);lcd.print(" mmHg"); // давление
  lcd.setCursor(0,4);
  lcd.print("H ");lcd.print(h,1);lcd.print(" %"); // влажность                               
 }

Как правило адрес датчика BME280 0x76, но он может отличаться, если возникнут сложности с запуском скетча, то необходимо определить верный адрес датчика при помощи I2C сканера — http://forum.rcl-radio.ru/viewtopic.php?id=64

Форум — http://forum.rcl-radio.ru/viewtopic.php?id=76

Добавить комментарий

Войти с помощью: