Несмотря на «некоторую недоразвитость» Digispark его удобно использовать там, где требуются малые размеры и невысокая вычислительная мощность.
В качестве примера — высотомер/барограф для легкой модели ракеты, позволяющий регистрировать высоту ее полета. При использовании готового модуля датчика давления BMP280,
конструкция получается весьма компактной: в ней даже вообще отсутствует отдельная плата для радиоэлементов.
Принципиальная схема барографа показана на рисунке (извиняюсь за «мазню»).
Модуль А1 — это Digispark, на схеме условно показаны только микроконтроллер DD1 и разъемы c линиями портов X1 и питания X2. Благодаря программной реализации интерфейса SPI для связи микроконтроллера с датчиком, удалось избавиться от промежуточного кабеля между модулями: шестиконтактный штыревой разъем X3 модуля датчика давления А2 «втыкается» прямо в шестиконтактную гнездовую часть Digispark X1.
Четыре линии порта PB0..PB3 микроконтроллера (P0..P3 Digispark) использованы для программного SPI; PB4 (P4) — формирует общий провод питания для датчика давления, РВ5 (Р5) — питающее напряжение.
В случае самостоятельного изготовления Digispark часто «жертвуют» шестой линией Р5 (PB5, RESET) для сохранения возможности программирования микроконтроллера по SPI: для этого соответствующим образом программируются его fuses. В этом случае Р5 остается простой линией RESET микроконтроллера и для подачи по ней питания на модуль ВМР280 служит подтягивающий резистор R1 необычно малого номинала (его я напаял прямо на выводы разъемов Х1 и Х2).
Питание устройства осуществляется от LiPo аккумулятора GB1. Вопреки ожиданиям, Digispark корректно работает при таком пониженном для себя значении напряжения питания. Также был проверен вариант питания от элемента CR2032 — со свежими батарейками все работает нормально, при снижении напряжения ниже 3В работа нестабильна. Трехвольтовое (не превышающее 4В) питание позволило подключить датчик давления к ATtiny без специального согласования уровней.
Скетч для барографа представлен в файле Dig_Bmp_P_5.zip. Алгоритм программы во многом совпадает с описанным мной в статье в журнале «Радио». Отличия связаны с отсутствием в ATtiny85 аппаратной возможности управлять периферией по SPI. Также ресурсов ATtiny не хватило для реализации вычисления экспоненциальной функции при определении относительной высоты по измеренному значению давления, поэтому в EEPROM микроконтроллера записывается значение измеренного давления в Паскалях (со смещением -80000 для комфортной «упаковки» результата в двухбайтовую ячейку).
Аккумулятор GB1 подключается к 3х контактному разъему X2 Digispark непосредственно перед стартом ракеты. После инициализации датчика давления, программа микроконтроллера переходит к алгоритму определения старта: уменьшению значения давления более чем на 12 Па (что примерно соответствует одному метру увеличения высоты). После старта в EEPROM микроконтроллера с периодом 100 мс записываются измеренные значения давления. После заполнения памяти (512 байт хватает примерно на 25 секунд измерений), программа «останавливается» в бесконечном цикле с гашением контрольного светодиода модуля Digispark.
Для считывания данных из Digispark, его необходимо отключить от питания и от датчика давления, «залить» описанную выше программу с эмуляцией СОМ порта и по команде «Q» получить в мониторе Arduino IDE содержимое EEPROM ATtiny85.
Затем считанные данные сохраняются в текстовый файл с расширением CSV. Этот файл обрабатывается в Excel: по значениям давления вычисляется относительная высота ракеты по формуле (использованы функции из пакета MS Office — Microsoft Excel) H = 44330 * (1 — СТЕПЕНЬ((X + 80000)/101325;0,1903)) (где Х — значение ячейки с измеренным давлением) и строится график полета.
График одного из полетов ракеты приведен на рисунке:
здесь синим — высота в метрах, сиреневым — скорость в км/час; отсчеты времени — через 100 мс.
В начальные ячейки EEPROM микроконтроллера программа записывает «достартовые» значения некоторых параметров:
Адрес 000 — температура перед стартом в сотых долях градусов Цельсия (к измеренному значению добавлены 20С;
Адрес 002 — напряжение питания перед стартом (VCC в мВ);
Адрес 004 — начальное значение давления (в Па — 80000) (медиана из 3х замеров).
Тут приведена часть статьи из журнала «Радио»