Мобильная метеостанция на основе Arduino ATtiny85 и BME280 своими руками
В Интернете можно найти немало проектов самодельных метеостанций на основе Arduino, ESP32, ESP8266 и Raspberry Pi, но не все они могут похвастаться компактностью и мобильностью. Некоторым, например, может быть интересно или полезно знать, как во время прогулки или поездки температура меняется между разными районами или даже населенными пунктами. Просто чтобы измерить температуру и влажность, можно создать небольшое удобное устройство, которое можно было бы носить с собой во время прогулки.

Главной сложностью проектирования такой метеостанции является электроснабжение. Многие, выходя на прогулку, носят с собой телефон, который можно использовать в качестве источника питания для данной конструкции. Поэтому эта метеорологическая станция может подключаться к порту USB C / Micro USB смартфона для получения необходимой мощности.
Схема миниатюрной погодной станции приведена далее. Эту схему очень легко воссоздать. Сначала припаяйте ATtiny85, OLED-дисплей и BME280 к печатной плате. Также припаяйте контактные разъемы типа «мама», чтобы прошить ATtiny после того, как этот микроконтроллер будет размещен на печатной плате. Затем можно паять провода согласно принципиальной схеме. Подготовьте на печатной плате два провода для VCC и GND Micro USB.

Чтобы смартфон работал у нас в качестве источника питания, нам нужно активировать OTG. Это означает, что наш смартфон может выступать в качестве хоста, если в USB-порт телефона вставлен штекер USB. Поэтому нам нужно соединить идентификатор адаптера Micro USB с его GND.


Чтобы запрограммировать ATtiny85 из Arduino IDE можно использовать плату Arduino, предварительно соединив все согласно следующей схеме.

Код программы миниатюрной метеостанции следующий.
#include <TinyWireM.h>
#include <Tiny4kOLED.h>
#include <MyBME280.h>
#define BME280_I2cAdd 0x76
MyBME280 BME(BME280_I2cAdd);
float t, d, f;
void setup() {
oled.begin();
oled.clear();
oled.on();
TinyWireM.begin();
BME.init();
}
void loop() {
t = BME.readTemp();
d = BME.readPress();
f = BME.readHumidity();
oled.setFont(FONT6X8);
oled.setCursor(0, 0);
oled.print("Temp.: ");
oled.print(t);
oled.println(" 'C");
oled.print("Druck: ");
oled.print(d);
oled.println(" mBar");
oled.print("Fcht.: ");
oled.print(f);
oled.println(" %");
oled.println(" . . . . . . . . . . ");
oled.println(". . . . . . . . . . .");
}
© digitrode.ru