Виникла потреба знати коливання температури в приміщенні за добу. Бігати, записувати з термометра – не варіант, WiFi нема, ба більше – навіть електрики нема, тож вирішив, що треба спаяти портативний температурний реєстратор. В ідеалі – запис значення температури на картку пам’яті, максимум – з реєстрацією часу, вологості і відправляти по GPRS на сервер. А оскільки треба “на вже”, паяння крутого пристрою з GPRS я відкинув на майбутнє.
Для живлення, класично, літій-іонний акумулятор формату 18650. Благо з ноутбучних акумуляторних збірок в мене назбиралось багацько цього добра. Пристрій має споживати небагато, тож одного елемента має бути достатньо. Але літій штука вибаглива, тому спершу берем тримач для 18650 (може бути і з дешевших, струми дуже малі), а йому до пари контролер на TP4056. Коштує така плата пару гривень, а забезпечує заряд акумулятора з дотриманням характерного йому CC-CV режиму, ба навіть струм заряду можна регулювати перепаюванням одного SMD-резистору. Плата вже має порт microUSB і термінали для підключення навантаження та акумулятора, і навіть розпаяний чіп DW01-P, який забезпечує захист від перезаряду і перерозряду – все, що необхідно для довгої служби. Вихід плати має від 3,0 до 4,2 вольта, але нам потрібно 3,3 або 5,0 вольт для мікроконтролерів. Тому використовуємо ще іншу плату – Step-Up Boost Converter. Вона піднімає напругу з 0,9(1,5) вольт до 5,0 зі стабілізацією. Існують готові “бутерброди” з цих двох плат – вони зачасту використовуються в дешевих павер-банках. Та за фактом наявності кільканадцяти плат контролера заряду і конвертера – використав цих двох, вони ще й ідеально приклеїлись до корпусу тримача для 18650.
Друга складова реєстратора – мікроконтролер. Хотів взяти плату Arduino Pro Mini 16MHz/5V на базі ATMega328, бо вона досить малих розмірів і я мав такі. Але як на зло, нові плати тільки на 3,3 вольти, а в єдиної вільної на 5-ть була відірвана Tx доріжка, яку прийшлось відновлювати, що забрало трохи часу.
Для замірів температури – Dallas DS18B20. Даний сенсор дешевий, точний, не вимагає калібрування, приєднується трьома дротами і “спілкується” з мікроконтролером по шині 1-Wire. Для роботи з цим протоколом в Arduino IDE без проблем встановлюється бібліотека OneWire, в прикладах наявний код для зчитування температури з відображенням в термінал послідовного порту.
Для запису використав готовий модуль microSD з підключенням по шині SPI. У вищезгаданому середовищі є бібліотека SD, а в ній приклад запису даних на карточку.
Спаяв це все до купи дротиками з розбірок, склеїв до купи термоклеєм, де можна впаяв конектори, мікроконтролер з модулем microSD карт теж склеїв в бутерброд і запхав в коробочку з TicTac. Все в кращих традиціях Ді-Ай-Ваю!
За пару хвилин написав код з вищезгаданих прикладів, тест показав що все працює. Далі додав важливу умову реєстрації – різниця між попереднім записаним і новим значенням температури повинна бути більше 0,05 градуси Цельсія (для зменшення кількості флуду).
Система в збірці з відключеним виведенням даних в послідовний порт споживала ~20мА, а це значить що акумулятор на 1300 мА*год дасть дві гарантовані доби роботи. Мало, треба мінімум чотири. Подумав, що було б круто використати Deep Sleep, що є в ATMega328 і продовжити термін служби пристрою. Часу було обмаль, але я нагуглив код що дозволяє включити вищезгаданий режим на 4,09 секунди. Адаптація коду під мої потреби зайняла ще 5 хвилин і ось воно – споживання протягом 4 секунд дорівнює 9мА (сон), на п’ятій секунді піднімається до 18мА (зчитування температури), тримається секунду (запис) і знову опускається до 9мА. Таким режим роботи може забезпечити до ~5 діб роботи – саме те, що потрібно.
Отак за вечір, на колінах і з дрібноти можна отримати цілком корисний агрегат.
Фото і матеріали: https://telegra.ph/Arduino-Temperature-Logger-01-02
Посилання на публікацію: https://t.me/maysternya_molphara/10