Serial.print(bmp.readPressure());

Serial.println(" Pa");

// Барометрическая высота относительно “нулевой” отметки

Serial.print(F("Approx altitude = "));

Serial.print(bmp.readAltitude(1013.25)); // Давление на “нулевой” отметке

Serial.println(" m");

Serial.println();

delay(2000);

}

Разумеется, атмосферное давление не меняется столь же быстро, как показания акселерометра. Оставив программу работать некоторое время, можно получить график изменения атмосферного давления. Барометрическая высота кстати, активно используется в авиации, т.к. позволяет получать довольно-таки точную высоту над уровнем моря относительно нулевой отметки. Точность цифровых датчиков весьма высока, и позволяет улавливать даже разницу в высоте менее 1м. Это используется например, в квадрокоптерах для удержания заданной высоты полета.

Самостоятельная работа #1: Вывести на графике изменение атмосферного давления за ночь. Т.к. давление изменяется медленно, паузу в коде можно увеличить, это уменьшит требуемое количество сохраняемых данных.

Самостоятельная работа #2: Создать устройство “тревожной сигнализации”, которое будет мигать светодиодом и включать звук, если кто-то сдвинул прибор с места. Для этого при включении устройства стоит запоминать текущее значение акселерометра или компаса, и если значения вышли за заданные пределы, значит устройство было сдвинуто. Также можно предусмотреть отдельную кнопку “сброс” для запоминания новых значений. Разместив такой прибор в компактном корпусе, его можно использовать например, для охраны чемодана.

2.10 Подключаем часы реального времени (RTC)

Мы уже знаем, как подключить к Arduino внешнюю нагрузку через полевой транзистор или реле, как запрограммировать паузы и считывать температуру с внешнего сенсора. Допустим, мы решили сделать полив цветов по расписанию - утром и вечером. Но как Arduino узнает, какое сейчас время суток? Для этого может использоваться специальная микросхема - модуль часов реального времени (Real Time Clock). Данный модуль передает данные по I2C, время хранится в специальной микросхеме DS1307, на плате также есть батарейка, обеспечивающая работу модуля когда питание отключено.

Цифровая электроника для начинающих _92.jpg

Подключение модуля к Arduino весьма просто.

Цифровая электроника для начинающих _93.jpg

Для использования модуля, необходимо скачать и установить библиотеку https://github.com/Makuna/Rtc.

Пример использования DS1707 показан ниже.

#include <Wire.h>

#include <RtcDS1307.h>

RtcDS1307<TwoWire> Rtc(Wire);

void setup ()

{

Serial.begin(57600);

Rtc.Begin();

// Если время не было установлено, установить его

if (!Rtc.IsDateTimeValid()) {

RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__);

Rtc.SetDateTime(compiled);

}

// Запустить отсчет времени, если не запущен

if (!Rtc.GetIsRunning()) {

Rtc.SetIsRunning(true);

}

// Выход square wave не используется

Rtc.SetSquareWavePin(DS1307SquareWaveOut_Low);

}

void loop ()

{

if (!Rtc.IsDateTimeValid()) {

// Ошибка, возможно, пропадание питания при отсутствии батареи

Serial.println("RTC Error!");

return;

}

RtcDateTime now = Rtc.GetDateTime();

Serial.println(now.Year());

Serial.println(now.Month());

Serial.println(now.Day());

Serial.println(now.Hour());

Serial.println(now.Minute());

Serial.println(now.Second());

Serial.println();

// 10с пауза

delay(10000);

}

Код довольно-таки прост. Если часы DS1307 не установлены (функция IsDateTimeValid возвращает FALSE), то они устанавливаются с помощью констант __DATE__ и __TIME__ - они содержат время компиляции программы. Таким образом, при первом запуске в таймер будет автоматически занесено текущее время. Затем с помощью функции GetDateTime мы получаем время и дату, из которой можно узнать год, месяц, день, часы, минуты и секунды.

Теперь, загрузив программу в Arduino, мы можем отключить устройство. При последующем включении программа всегда будет “знать” текущее время.

Самостоятельная работа #1: сделать “вечернее освещение” с помощью Arduino и таймера, например, настроить зажигание светодиода с 23 вечера до 7 часов утра.

Самостоятельная работа #2: сделать “настольный будильник”, подключив к Arduino модуль RTC, “пищалку” и кнопку. Задать в коде срабатывание будильника в определенный час и минуту, кнопку использовать для остановки звучания.

2.11 Подключаем ультразвуковой дальномер HC-SR04

Еще одним популярным в любительской электронике прибором, является дальномер HC-SR04. Это недорогой прибор, стоимостью 2-4$ на eBay, позволяющий измерять расстояние до препятствий с помощью ультразвука.

Цифровая электроника для начинающих _94.jpg

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

Принцип использования HC-SR04 показан на рисунке.

Цифровая электроника для начинающих _95.jpg

Когда активируется запускающий импульс (trigger signal), устройство посылает серию ультразвуковых импульсов, и в завершении формирует импульс, длина которого пропорциональна расстоянию. Таким образом, для подключения достаточно всего двух проводов, для выходного и для входного импульсов.

Использование датчика весьма просто - для Arduino уже написаны готовые библиотеки, позволяющие получить расстояние. Вначале нужно скачать библиотеку по адресу https://github.com/JRodrigoTech/Ultrasonic-HC-SR04, ее необходимо распаковать в уже знакомую нам папку Документы\Arduino\libraries.

Сам код, считывающий показания сенсора и отправляющий их в serial port, весьма прост.

#include <Ultrasonic.h>

Ultrasonic ultrasonic(4,2); // (Trig,Echo)

void setup() {

Serial.begin(9600);

}

void loop()

{

Serial.print(ultrasonic.Ranging(CM));

Serial.println(" cm" );

delay(100);

}

Как можно видеть, создается объект Ultrasonic, в качестве параметров которого указываются номера выводов. Дальше функция ultrasonic.Ranging(CM) делает всю работу.

Само подключение сенсора тоже не вызывает сложностей.

Цифровая электроника для начинающих _96.jpg

Самостоятельная работа: подключить к данной схеме LCD-дисплей и сделать вывод на экран расстояния до объектов. Опционально, можно подключить светодиод и зажигать его, если расстояние до объекта меньше критического.

2.12 Подключаем плату управления моторами

Мы уже можем подключить к Arduino практически все необходимое - датчики, светодиоды, индикаторы. Остался последний шаг, после которого можно собрать вполне полноценного робота - это научиться управлять моторами.

Как уже говорилось в предыдущей главе, любой микроконтроллер не может управлять мотором напрямую, у вывода не хватит мощности. Существуют специальные микросхемы, называемые “драйверами”, которые и выполняют эту работу. Разумеется, мотор можно подключить и через транзистор, но полноценный драйвер имеет больше возможностей, например возможность смены направления вращения мотора.

Для примера рассмотрим драйвер на микросхеме L298N, его можно купить в виде готовой платы ценой 2-5$.

Цифровая электроника для начинающих _97.jpg

Плата имеет вполне неплохие для своей цены возможности. Левые и правые разъемы используются для подключения моторов. Плата также имеет стабилизатор напряжения, что позволяет использовать для питания моторов 12В, а выход 5В использовать для питания Arduino.

Описание комбинаций управляющих импульсов приведено в документации на микросхему (С и D - входы каждого канала).