Схема выносного датчика
Схема выносного датчика показана на рис. 22.4. Его мы будем вводить в режим энергосбережения, потому придется принять ряд схемотехнических мер.
Рис. 22.4. Схема выносного датчика метеостанции
Подключение Xbee‑модуля к Arduino Mini отличается от стандартного наличием линии Sleep (контакт 9 платы Xbee‑модуля). По этой линии мы будем загонять модуль в режим низкого потребления в паузах между измерениями. Обратите внимание, что выходы Arduino подключены к модулю через согласующие делители R1/R2 и R3/R4 с довольно большим сопротивлением, – без согласования, как мы говорили, ток через эти выводы резко возрастет. В этих же целях придется выпаять из платы Arduino Mini желтый неуправляемый светодиод, который сигнализирует о подаче питания (его не было в ранних релизах Arduino Mini). Этот светодиод мы заменим на красный, подключенный к стандартному 13‑му выводу платы и заставим его кратковременно включаться в момент считывания показаний и передачи их в станцию (напомним, что к 13‑му выводу на плате уже подключен балластный резистор 1 кОм).
Хитрое включение батарейного питания ориентировано на достижение энергосбережения в максимальной степени. От трех элементов АА (реальное напряжение около 4,5–4,8 В) питается плата Arduino, а от отвода между вторым и третьим – модуль ХЬее (напряжение 3,0–3,2 В). Диод D1 типа КД922 (с переходом Шоттки, т. е. с малым падением напряжения) развязывает источники питания 5 и 3,3 В, чтобы они по каким‑то причинам не начали работать друг на друга. Если бы мы подключили обычное питание 7–9 В к стабилизатору платы, а модуль ХЬее через какой‑нибудь из стандартных «шилдов» со встроенным стабилизатором 3,3 В, то теряли бы питание не только на самих стабилизаторах, но и за счет их собственного потребления.
* * *
Подробности
Правда, в Arduino Mini установлен малопотребляющий стабилизатор LP2985AIM5‑5.0 (в этом отличие Mini от Uno, где стоит стабилизатор NCP1117ST50T3G – более мощный, но совсем не экономичный). Однако его, во‑первых, может не хватить для питания Xbee‑модуля в случае, если мы выберем Pro‑версию (согласно документации фирмы Digi, модуль ХЬее Pro может потреблять в момент передачи почти 300 мА, а LP2985 допускает только 150). Во‑вторых, для получения 3,3 В все равно нужен дополнительный стабилизатор, а в нашем Wireless Shield установлен СХ1117‑3.3 – тоже не самый экономичный.
* * *
В результате при батарейном питании проще вообще обойтись без нагромождения стабилизаторов – до напряжения 1,1 В на каждый элемент схема должна работать надежно, а это практически 80 % емкости щелочных батарей (см. рис. 9.2). И раз уж мы применяем Arduino, который позволяет многое без особого напряжения сил, то для удобства станем измерять напряжение батареи датчика, передавать его в главный модуль вместе с данными и заставлять станцию сигнализировать, если элементы питания на исходе. В главном модуле для индикации того, что батарейки садятся, заставим строку с внешними данными мигать, если напряжение ниже установленного порога (пусть это будет 3,3 В – по 1,1 В на каждый элемент, возможно, по результатам эксплуатации эту величину придется подкорректировать). Мне неизвестны какие‑либо бытовые приборы, имеющие подобную функцию контроля за напряжением источников питания (кроме, разумеется, мобильников или фотокамер), – пусть это будет наше ноу‑хау.
Программу для выносного датчика можно скачать с сайта автора по ссылке http://revich.lib.ru/AVR/Extsens.zip. В программе используются встроенные возможности Arduino IDE для ввода контроллера в режим энергосбережения и пробуждения по встроенному таймеру WDT. О применении этих режимов можно прочесть на официальном сайте Arduino по ссылке http://playground.arduino.cc/Learning/ArduinoSleepCode (к сожалению, на английском языке). Поиском в Сети можно найти и русскоязычные примеры их использования.
* * *
Подробности
Заметим, что в этой конструкции применяется довольно несовершенный метод измерения аналоговой величины напряжения батарейки, когда в качестве опорного напряжения АЦП использован внутренний источник (см. строкуanalogReference (INTERNAL ), подробности о работе АЦП в МК AVR см. главу 20 и книгу [21]). Потому коэффициент пересчета не вычисляется теоретически, а должен устанавливаться именно путем калибровки, причем с реальным источником питания (набором батареек), а не при подключении к USB или внешнему адаптеру.
Делитель напряжения R5/R6 (он добавляет к общему потреблению менее микроампера) нужен для «подгонки» измеряемого значения под опорное. Не стоит бояться, что входное сопротивление АЦП внесет погрешность при установке столь высокоомного делителя – в МК AVR оно измеряется десятками гигаом. В данном случае выходной код АЦП определяется формулой ADC = 1024Vin /Vref (подробности см. в главах 17 и 20 ). При превышении входным напряжением опорного этот код «застынет» на максимальном значении 1023, так что нам необходимо иметь на входе АЦП напряжение, заведомо меньшее опорного. А опорное напряжение определяется в нашем случае внутренним источником и имеет величину примерно 1,2 В с довольно большим разбросом. Отсюда соотношение сопротивлений резисторов этого делителя должно быть около 5, а точное значение величины коэффициента в программе, с помощью которого вычисляется реальная величина напряжения (переменная voltage, см. строку 105 исходного текста скетча) и должно быть определено с помощью калибровки. Коэффициент будет равен частному от деления реального напряжения батареи в вольтах на величину кода АЦП (переменная val ) – у меня он получился равным 0,0059. Если задаться величиной опорного напряжения, равной 1,1 В, то теоретический расчет даст близкое значение.
Чтобы проверить и при надобности уточнить значение коэффициента, измерьте напряжение батарейки мультиметром во время работы датчика, затем сравните с тем, что запишется в файл на карте (см. далее). Поделив записанное значение на измеренное, вы получите поправку, на которую необходимо умножить значение коэффициента из программы. В случае ЖК‑индикатора без записи на карту, операция калибровки будет сложнее – вам придется временно подправить программу так, чтобы вывести на дисплей значение напряжения, получаемое с датчика.
* * *
Во время работы в соответствии с программой датчик основное время потребляет примерно 500 мкА, и каждые 8 секунд по WD‑таймеру включается примерно на 0,8 с – снимает показания с SHT‑модуля, измеряет напряжение батарейки и передает данные через Xbee‑модуль. Напряжение батарейки во избежание случайных выбросов усредняется за каждые 16 показаний. Измерения показали, что во включенном состоянии потребление всего выносного датчика в среднем составляет около 15 мА. Пиковое потребление обычного Xbee‑модуля в момент передачи может превышать 40 мА, но это происходит лишь в течение нескольких миллисекунд, и мы этими выбросами можем пренебречь в своих расчетах. Итого среднее потребление датчика составит приблизительно 2 мА – в соответствии с данными приложения 2 АА‑батареек должно хватить примерно на два месяца непрерывной работы.
Заметим, что если бы мы писали программу на ассемблере, то могли бы уменьшить время активного состояния в несколько десятков раз, и батарейки работали бы гораздо дольше.
Ресурс батареек можно увеличить, если задать снятие показаний и их передачу не каждое пробуждение по WD‑таймеру, а, например, каждое седьмое (т. е. примерно раз в минуту), но отладка такой медленной программы резко усложнится.
Дата добавления: 2016-05-11; просмотров: 1190;