Вторым немаловажным шагом является подключение датчика BMP180 к плате Arduino, да и вообще к сборке часов этот датчик имеет самое непосредсвенное отношение. Ведь по сути это уже стало классикой - датчик температуры и ардуино, часовой модуль и ардуино. Да и вообще какие гиковские часы сейчас не содержат в себе термометр?

        От слов - к делу, для начала нам потребуется библиотека для работы с датчиком BMP180, эта библиотека называется SFE_BMP180.h, её можно скачать на GitHub. Подключается этот датчик еще проще чем часовой модуль, для общения с платой Arduino он использует шину I2C. Что ещё можно сказать? Питать датчик BMP180 необходимо напряжением 3,3 Вольта, при подаче на него потенциала в 5 Вольт скорее всего он будет выведен из строя. Сам датчик выглядит именно так как показано на фото, есть конечно много разных форм-факторов этого устройства, но мы использовали именно этот.

 

 

        Ниже показана небольшая таблица, в которой показаны задействуемые пины платы Arduino для подключения датчика.

 

 

        Как уже было заявлено, для работы с датчиком BMP180 нужно использовать библиотеку SFE_BMP180.h, в ней содержится весь необходимый функционал для измерений не только температуры, но и атмосферного давления в различных единицах. После установки библиотеки, вам станут доступны два примера, содержащих довольно таки исчерпывающую информацию для работы с датчиком BMP180. Нам же потребуется только самое на наш взгляд, важное измерение, это измерение температуры в градусах Цельсия. Поэтому, подредактировав скетч примера под себя, можно объединить его с предыдущим скетчем, из статьи о подключении модуля часов реального времени DS1302. Выводить измеренную температуру будем также в монитор порта, в одной строке с датой/временем. Также, в самом начале будет выводиться сообщение об успешной, либо безуспешной инициализации датчика BMB180. Итак, листинг скетча, вывод в монитор порта даты/времени и температуры.

 

#include "SFE_BMP180.h"
#include "iarduino_RTC.h"

//Определяем пины подключения модуля DS1302 к плате Arduino
#define DS_DAT 8
#define DS_CLK 7
#define SS_RST 6

//Создаём объект BMP180_Sensor класса SFE_BMP180
SFE_BMP180 BMP180_Sensor;

//Создаём объект time класса iarduino_RTC с указанием пинов подключения
iarduino_RTC time(RTC_DS1302, SS_RST, DS_CLK, DS_DAT);

void setup()
{
  //Открываем последовательное соединение на скорости 9600 бод
  Serial.begin(9600);

  //Проверка инициализации датчика BMP180
  if(BMP180_Sensor.begin())
  //Если всё в порядке выводим сообщение об успешной инициализации
  Serial.println("Инициализация датчика BMP180 успешна");
  else
  {
    //Внештатная ситуация - инициализация безуспешна
    Serial.println("Ошибка инициализации датчика BMP180\n\n");
    while(1);
  }
  //Запускаем модуль часов реального времени
  time.begin();
}

void loop()
{
  char status;
  double T;

  //Выполняем задержку чтобы не выводить данные слишком часто
  delay(500);
  //Получаем все значения времени
  time.gettime();
  //Выводим в монитор порта
  //Год
  Serial.print(20, DEC);
  Serial.print(time.year);
  Serial.print("-");
  //Месяц
  Serial.print(time.month / 10);
  Serial.print(time.month % 10);
  Serial.print("-");
  //День
  Serial.print(time.day / 10);
  Serial.print(time.day % 10);
  Serial.print(" ");
  //Час
  Serial.print(time.Hours / 10);
  Serial.print(time.Hours % 10);
  Serial.print(":");
  //Минуты
  Serial.print(time.minutes / 10);
  Serial.print(time.minutes % 10);
  Serial.print(":");
  //Секунды
  Serial.print(time.seconds / 10);
  Serial.print(time.seconds % 10);

  Serial.print(" ");

  //Работаем с датчиком BMP180
  status = BMP180_Sensor.startTemperature();
  if (status != 0)
  {
    //Выжидаем период для корректного замера
    delay(status);
    //Записываем в T значение замеренной температуры
    status = BMP180_Sensor.getTemperature(T);
    if (status != 0)
    {
      //Выводим в монитор порта результат замера
      Serial.print("Температура: ");
      Serial.print(T, 1);
      Serial.println(" по шкале Цельсия");
    }
    else Serial.println("Ошибка замера температуры\n");
  }
  else Serial.println("Ошибка первичного замера температуры\n");
}

 

        Как вы уже поняли, глядя на скетч, мы просто взяли и добавили в предыдущий скетч измерение температуры. Далее, ниже, на снимке экрана можно видеть работу скетча.

 

 

        В следующей статье, мы уже не будем использовать монитор порта для вывода измеренных величин. Если мы хотим построить полноценные часы, то нам очень нужно освободиться от привязки к монитору порта, создав так сказать полноценное автономное устройство. В этом нам поможет семисегментный дисплей на базе драйвера MAX7219. Для того что бы выводить эти три измеренные величины(дата, время и температура) на дисплей, мы конечно же рассмотрим несколько хороших примеров работы с ним. И уже на основании этих примеров, в дальнейшем будем выводить не только измеренные значения, но и управлять элементами меню наших часов.