Комнатная метеостанция

Сегодня попробуем собрать небольшую, комнатную  метеостанцию с часами.
Основная задача данного проекта проверить работоспособность только что полученного датчика давления и по совместительству датчика температуры BMP085
Как и ранее нам понадобится небольшое количество железячек:
1. Arduino UNO
Arduino UNO
2.Часы реального времени 1307
DS1307
3. Датчик давления и температуры BMP085
BMP085
4.ЖК индикатор 1602 с интерфейсом I2C
Все вышеперечисленные устройства удачно уживаются на шине I2C, и занимают только 2 пина на Ардуино.
Линии интерфейса  SDA и SCL это 4 и 5 пины соответственно.
Соединяем все вышеперечисленные элементы:
meteo_bb
Особое внимание для питания BMP085 необходимо напряжение 3,3V
Если возникнут проблемы с экраном проверьте адрес интерфейса I2C дисплея, как это сделать смотрим здесь I2C scaner
Заливаем скетч:

 

//Подключаем библиотеки
#include <Wire.h>
//Часы
#include <DS1307RTC.h>
#include <Time.h>
//Дисплей
#include <LiquidCrystal_I2C.h>
//Барометр
#include <Adafruit_BMP085.h>

LiquidCrystal_I2C lcd(0X27,16,2);
Adafruit_BMP085 bmp;
//———————————————————
void setup()
{
//Инициализируем устройства

bmp.begin();
lcd.init();
lcd.begin(16, 2);
lcd.backlight();
}
//———————————————————

void loop()
{

//Запрос к часам
tmElements_t tm;
RTC.read(tm);
//Устанавливаем курсор в нулевую позицию, выводим время и дату
lcd.setCursor(0, 0);
//для корректного вывода отсутствующих 0 обращаемся к процедуре
print2digits(tm.Hour);
lcd.print(":");
print2digits(tm.Minute);
lcd.print(" ");
print2digits(tm.Day);
lcd.print("/");
print2digits(tm.Month);
lcd.print("/");
lcd.print(tmYearToCalendar(tm.Year));

// Переставляем курсор во 2 строку
lcd.setCursor(0, 1);
// Запрашиваем и печатаем температуру
lcd.print("T=");
lcd.print(bmp.readTemperature());
// запрашиваем давление и делим его на коэффициент перевода из Па в мм.рт.столба, выводим полученное значение на экран

lcd.print(" P=");
lcd.print(bmp.readPressure()/133.322);

delay(1000); //ждем 1 секунду

}
//———————————————————-
void print2digits(int number) {
if (number >= 0 && number < 10) {
lcd.print('0');
}
lcd.print(number);
}

meteo

Комнатная метеостанция: 7 комментариев

  1. Александр

    при компелирование кода выдаёт ошибку на эту строкуLiquidCrystal_I2C lcd(0×27,16,2); что нужно сделать чтобы было всё без ошибок

    1. sagis Автор записи

      Спасибо за найденную опечатку, к сожалению при вставке на сайт его движок внес небольшие ошибки, все поправил

  2. Максим

    int h1 = (h-(int)h)*100;
    int t1 = (t-(int)t)*100;
    //Формируем буфер
    sprintf(dataString, «/%1d.%1d/%1d.%1d»,int(t),t1,int(h),h1);
    Тут есть проблема. При переходе на отрицательную температуру показывает: -1.-23
    И при отрицательной температуре ниже ноля показывает: 0.-16

  3. Dennis

    Не работает код!

    sketch_jan22b.ino: In function ‘void loop()’:
    sketch_jan22b:29: error: ‘tmElements_t’ was not declared in this scope
    sketch_jan22b:29: error: expected `;’ before ‘tm’
    sketch_jan22b:30: error: ‘RTC’ was not declared in this scope
    sketch_jan22b:30: error: ‘tm’ was not declared in this scope
    sketch_jan22b:42: error: ‘tmYearToCalendar’ was not declared in this scope

    Все библиотеки есть. Среда 1.0.6

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *