), подробности о работе АЦП в МК AVR см. главу 20 и книгу [21]). Потому коэффициент пересчета не вычисляется теоретически, а должен устанавливаться именно путем калибровки, причем с реальным источником питания (набором батареек), а не при подключении к USB или внешнему адаптеру.
Делитель напряжения R5/R6 (он добавляет к общему потреблению менее микроампера) нужен для «подгонки» измеряемого значения под опорное. Не стоит бояться, что входное сопротивление АЦП внесет погрешность при установке столь высокоомного делителя — в МК AVR оно измеряется десятками гигаом. В данном случае выходной код АЦП определяется формулой ADC = 1024V>in/V>ref (подробности см. в главах 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 АА-батареек должно хватить примерно на два месяца непрерывной работы.
Заметим, что если бы мы писали программу на ассемблере, то могли бы уменьшить время активного состояния в несколько десятков раз, и батарейки работали бы гораздо дольше.