Занимательная электроника — страница 122 из 128

применяет не аппаратный интерфейс 12С, а его программную реализацию (подробнее о том, как это делается, рассказано в моей книге [21]). Модуль подключается к любым цифровым выводам — на схеме рис. 22.1 в этом качестве выступают выводы А2 и A3 (что соответствует цифровым выводам 16 и 17). В программе в секции определений их надо указать:

#include

#define dataPin 16

#define clockPin 17

SHT1x sht1x(dataPin, clockPin);

Особенность подключения SHT1x, как мы видим на схеме, — наличие двух разъемов, где выводы питания дублируются (рассмотрев плату, я не обнаружил между ними разницы), а сигнальные линии Data и SCK пространственно разделены. Это не доставляет никаких проблем при создании конструкции (все равно задействовано лишь два вывода Arduino), но если вы хотите уменьшить число проводов, то в «Амперке», кроме SHT1x, предлагается и другой подобный датчик — DHT11 (имеющий, впрочем, как утверждается, меньшую точность).

Тестовые программы для обоих модулей прилагаются к соответствующим библиотекам. В скетче для SHT1x следует только не забыть заменить номера выводов на указанные на схеме рис. 22.1.


Подключение радиомодулей ХЬее

Подключение Xbee-модулей, возможно, самая сложная часть проекта. Трудность тут заключается в том, что для коммуникации с контроллером они используют тот же последовательный порт, что и USB-соединение с компьютером (собственно, Xbee-модуль представляет собой как бы продолжение UART в замену проводному кабелю). Поэтому Xbee-модуль будет мешать не только коммуникации с компьютером, но и процессу программирования платы, отчего перед каждой модификацией программы его придется извлекать из схемы и вставлять заново. Опыт показал, что это делать необязательно, если ХЬее-модуль не участвует в коммуникации (т. е. не осуществляет приема или передачи), но в общем случае на это полагаться не стоит — проще отключить его и подключить заново.

Xbee-модули не требуют для своей работы каких-либо библиотек — serial-коммуникация через них осуществляется совершенно прозрачно для программиста, с применением стандартных функций последовательного порта. Это, как мы говорили, позволит нам через один и тот же порт осуществлять и прием данных от внешнего датчика, и установку часов из компьютера. Правда, тогда при подключении к компьютеру ХЬее-модуль придется извлекать из устройства точно так же, как это делается при программировании контроллера. Но делать это придется очень редко — только для подстройки времени, если часы DS-1307 сильно убегут, т. е. не чаще, чем где-то раз в полгода), ну и, разумеется, при смене батарейки, которой, как обещают производители, должно хватить на несколько лет.

* * *

Подробности

Если мы не хотим озадачивать пользователя извлечением Xbee-модуля, то пришлось бы использовать как минимум Arduino Mega, где UART-портов несколько. На мой взгляд, как и в случае применения GPS-модуля для полностью автоматической установки часов, это слишком большая цена за функцию, которая будет применяться лишь изредка.

Кстати, подкину еще одну идею: если приобрести третий ХЬее-модуль, настроить его на совместную работу с остальными и подключать его к компьютеру через специальный Xbee-адаптер, то через него можно не только устанавливать часы, как через обычный UART, но даже и программировать контроллер. Программу станции при этом можно использовать ту же, что приведена далее, только тогда перед обращением к часам извлекать ХЬее-модуль не придется. Предлагаю вам заняться на досуге такой доработкой — базовый материал для нее есть в статье о настройке ХЬее на сайте «Амперки», которая упомянута в разд. «Подключение и настройка ХЬее-модулей» этой главы.

Из этой ситуации можно вывернуться и еще одним способом — попросту организовать программный UART на свободных выводах Arduino Uno (правда, в случае ЖК-дисплея для этого может не хватить контактов платы). О том, как это делается, см. http://arduino.ua/ru/prog/SoftwareSerial. Вариант этого способа — применить для общения датчика со станцией не ХЬее, а, например, беспроводной модуль на основе nRF24L01+[48]. Он предназначен в принципе для тех же целей, но управляется не через UART, а через SPI, и его можно использовать параллельно с записью на SD-карточку. Как видите, платформа Arduino дает большое разнообразие способов решения для любых пришедших в голову идей.


Подключение и настройка ХЬее-модулей

Здесь придется повозиться: настройка пары ХЬее-модулей для совместной работы — не самое простое занятие. Мы применим для их прошивки не отдельную плату XBee-USB адаптера (который один раз используется, а затем оказывается ненужным), а универсальную Wireless Shield, которую потом приспособим и в схеме станции, причем в варианте с разъемом для SD-карты (Wireless Shield SD[49]). Ее подробное описание можно найти на украинском сайте Arduino[50]. Там же имеются рекомендации по подключению Xbee-модулей фирмы Digi. Обычно контроллер из платы Arduino перед прошивкой Xbee-модулей через Wireless Shield рекомендуют извлекать, но мы поступим иначе — в упомянутом разделе украинского сайта приведена программа-заглушка, которую перед настройкой следует закачать в Arduino, чтобы контроллер не мешал прошивке модулей. Программа очень проста и состоит из двух строк:

void setup() { }

void loop () { }

Отметим, что в обратной ситуации (т. е. при прошивке Arduino в присутствии ХЬее-модуля) столь простого решения не существует — при необходимости изменить программу Xbee-модуль придется извлекать каждый раз.

Скомпилируйте эту программу в новом файле и загрузите в Arduino. Затем подсоедините Wireless Shield к плате Arduino Uno, установите в него Xbee-модуль (не забудьте про соответствие номеров контактов на модуле и «шилде»!) и переключите на плате Wireless Shield микропереключатель в положение «USB». Не забывайте, что для нормальной работы Xbee-модуля с контроллером переключатель надо возвращать в положение «Micro».

При подключении USB-кабеля к Arduino Uno теперь должен загореться красный светодиод PWR в углу платы Wireless Shield. При работе с модулем следует обращать внимание на этот светодиод — его ровное и яркое свечение сигнализирует о том, что модуль вставлен правильно. В этом неудобство применения таких модулей — они-то прошиваются один раз, а рабочую программу приходится долго отлаживать. Потому стоит постараться отладить все возможное до установки ХЬее-модуля, и напоследок оставить только беспроводные функции.

Теперь отвлечемся от украинского сайта — на нем рекомендуют настраивать мо- дуль руками с помощью посылки команд. Мы пойдем более простым путем и обратимся к статье на сайте Amperka.ru «Настройка пары модулей ХВее Series 2 для коммуникации друг с другом»[51]. Учтите, что все сказанное далее относится к модулям Series 2 (на плате помечены буковками S2), а встречающиеся в некоторых магазинах более дешевые модули Series 1 (они не помечены никак) настраиваются несколько иначе и несовместимы с Series 2.

Пропускаем там все, касающееся подключения модуля к XBee-USB адаптеру, и далее узнаем, что надо скачать специальную программу X–CTU с сайта производителя. Отправившись по ссылке, даже подготовленный человек растеряется, — только для Windows там представлены три варианта указанной программы. Скачиваем наугад самую верхнюю (на момент написания этих строк это XCTU ver. 5.2.8.6) и устанавливаем. Ура! Мы попали как раз на то, что надо.

Запускаем X–CTU, первым делом выбираем СОМ-порт, соответствующий Arduino, и для проверки жмем кнопку Test/Query (напоминаю, что в Arduino перед этим уже должна быть загружена программа-заглушка или контроллер извлечен из платы). Далее переходим на вкладку Modem Configuration и скачиваем свежие версии прошивок через кнопку Download new versions (что будет выполняться довольно долго — программа скачивает обновления для всех устройств, которые в ней предусмотрены).

И, наконец, выполняем собственно прошивку, как описывается в статье, для двух Xbee-модулей: одного в режиме «координатора», другого — «роутера». Сначала выбираем тип модема, определенный программой через Test/Query (в нашем случае ХВ24-В), затем в поле Function Set находим пункт ZNET 2.5 COORDINATOR AT (не ошибитесь! Там много пунктов с похожими названиями). Кроме этого, устанавливаем идентификатор сети в графе PAN ID (рис. 22.2).



Рис. 22.2.Установка параметров Xbee-модуля в программе X–CTU


Он должен быть одинаковый для обоих модулей, пусть у нас он будет равен 0FFF. Можно установить скорость обмена в пункте Serial interfacing/BD-BaudRate, однако по умолчанию там и без того установлено значение 3 (9600). Потом на всякий случай поставьте отметку в пункте Always update firmware (при повторной прошивке этого можно не делать) и, наконец, нажмите кнопку Write.

Для второго модуля в поле Function Set находим ZNET 2.5 ROUTER/END DEVICE AT и делаем все то же самое, только еще в пункте Sleep Modes/SM-Sleep Mode выбираем значение 1 — PIN HIBERNATE (это нам понадобится для установки режима энергосбережения в выносном датчике). Кроме этого, советуют в пункте Serial Interfacing/D7-DIO7 Configuration установить значение 0 (CTS flow control disabled). После этого устройство конфигурируется именно как END DEVICE, и нам станет доступен Sleep-режим, который активируется установкой логической 1 на выводе 9 модуля.

Обязательно сохраните обе конфигурации (Profile | Save). При повторном подключении модулей можно прочесть зашитую в них конфигурацию, нажав кнопку