Мои вкусняхи

Сводный список записей блога

--->>>> Сводный список записей блога <<<<---

27 ноября 2024

Часы-метеорегистратор


 

Мне понадобилось отслеживать температуру на даче - в помещении и на улице.
Что для этого нужно?
2 датчика температуры, какой  то контроллер, что б их опрашивать и сохранять данные, и дисплей, что  б это все красиво показать. 

В качестве контроллера была взята ATMEGA32, термодатчики – DS18B20. Дисплей….

У меня завалялся дисплей на контроллере ST7920. Мало того, что система команд и протокол обмена дурной, так еще и дисплей прикручен к огромной плате, которую особо и обрезать нельзя. А еще у некоторых экземпляров дисплея нормальный контраст получается только при питании от 5 вольт… 

И лежал этот дисплей у меня достаточно долго, но настал и его черед.

А дальше я вспомнил, что у меня в закромах валяется датчик BME280 еще со времен часов  TouchClock2. И, взяв этот датчик, можно получить не только температуру, а еще влажность и давление. Но BME280 не рассчитан на длинную линию между контроллером и самим датчиком. В результате параллельно родился проект OneWire-интерфейса для датчика BME280.

Прошу прощения за не совсем качественные фото дисплея здесь и далее.

Что устройство умеет:

  • Часы со счетчиком дня недели
  • Автоматическая коррекция хода часов
  • 5 будильников с гибкой настройкой и поддержкой отложенного будильника (snooze)
  • Ежечасный звуковой сигнал (отключаемый)
  • Опрос OneWire-датчиков (встроенного и удаленного) 2 раза в минуту с обесточиванием датчиков между опросами
  • Поддержка DS18B20 и OneWire BME280/BMP280 в качестве внешнего и внутреннего датчиков*
  • Ежечасное сохранение усредненных показаний за последние 96 часов (4 суток)*
  • Диапазон измерения и отображения температуры -40..+85°С, шаг 0,5°С
  • Диапазон измерения и отображения  давления 350..850 мм рт.ст. с шагом 1 мм
  • Диапазон измерения и отображения  влажности 0..100%, шаг 1%
  • Настройка коррекции показаний температуры для внутреннего и внешнего датчиков в пределах  ±5°С
  • Построение графиков температуры, влажности, давления
  • Поддержка работы от литиевого аккумулятора (заряд, отключение дисплея, полное отключение при низком напряжении)
  • Автоматическая регулировка яркости подсветки дисплея
  • Ограничение максимальной яркости дисплея при работе от батареи
  • Автоотключение дисплея по таймауту при работе от батареи
  • Потребление в активном режиме (без учета датчиков) – до 35 мА при напряжении 4 вольта
  • Потребление в спящем режиме – 30 мкА (без учета датчиков)
  • Потребление в выключенном режиме – до 10 мкА.

*Поддерживается подключение одного датчика BME280 и одного DS18B20 или двух датчиков DS18B20. Если подключить 2 датчика BME280 – данные о влажности и давлении от внутреннего датчика будут игнорироваться.

22 ноября 2024

Эмулятор домофонных ключей

 

Картинка из интернета


Эта статья 2020 года,
была опубликована 
на РадиоКоте.

Если долго смотреть на дверь с домофоном - она откроется.

Так сложилось, что в моем подъезде появился домофон. Вещь хорошая. Удобная. Создающая иллюзию безопасности. Препятствующая (иногда) проникновению бомжей и асоциальных элементов. Что, в общем, не мешает рекламщикам распихивать свой спам по ящикам, пользуясь мантрой "Откройте, это сантехник....".

О плюсах и минусах домофона можно спорить долго. Но факт - на ключах появилась еще одна синенькая висюлька бесконтактной таблетки.

Всё было бы хорошо, но через некоторое время было принято решение вход во двор дома закрыть воротами. И проход во двор возможен только через 2 калитки - одна с улицы, вторая из соседнего двора. При этом никто не озаботился тем, что бы прописать в замок на воротах ключи от подъездных домофонов. Просто выдали всем еще ключей-брелков. Мне перепал еще и ключик от второй калитки (Ибо мы ходим в соседний двор кормить местных котов). В результате на ключах появилось 2 дополнительные висюльки, аналогичные первой. Одна синяя, как и от подъезда, вторая желтая. Надписи маркером с брелков стирались. Приклеенные скотчем этикеточки отклеивались. Брелоки мешались. Вообщем одни неудобства. Хорошо хоть, что все ключи оказались одного стандарта - EMMarine EM-4100.

В результате, после поиска в сети и чтения теории была нарисована тестовая схема, намотана катушка колебательного контура - и начались эксперименты. Сначала это были попытки чтения наличествующих ключиков. Потом дошло дело и до попыток скормить прочитанный из ключа код домофону. И если чтение получилось далеко не с первого раза, то эмуляция ключика сработала с первого раза, легко и непринужденно. Домофон проглотил посылку от эмулятора, как котик рыбку.

Данные исследования привели к появлению на свет нижеописанного устройства.

Внимание! Описанные в данной статье устройства не предназначены для взлома домофонных и иных замков, систем контроля доступа, несанкционированного прохода в зоны с ограниченным доступом и т.д.! Устройства позволяют всего лишь заменить имеющиеся в наличии горсти ключей одним мультиключом, эмулирующим данные ключи.

Ну и отмазка - если кто то применит описанные ниже устройства не по прямому назначению и ему за это будет больно - я не виноват.

10 ноября 2024

BME280 и 1-Wire

 

Есть очень хороший (если не поддельный) датчик BME280. Он умеет мерять температуру, давление и влажность  (есть его собрат в "бомж"-комплектации - BMP280 - он влажность не умеет).

Датчик - 8-ногая букашка, умеет общаться с внешним миром как по SPI-интерфейсу, так и по I2C.
Сам датчик мелкий, не очень паябельный. Но китайские бизнесмены просекли фишку и продают этот датчик уже припаянный к плате. Причем в двух вариантах:


Платка об 6 выводах - там сразу 2 интерфейса доступны - SPI и I2C. Но нет стабилизатора напряжения. А у датчика напряжение питания - 3.3 вольта.
А на 4-выводной плате выведен только I2C-интерфейс. Но на плате сразу есть подтягивающие резисторы, LDO и преобразователь уровней для I2C. Т.е. его можно гонять при любом напряжении питания от 3 до 5 вольт.

Очень удобный датчик для построения всяких термометров, барометров и прочих показометров.
Но используемые интерфейсы не предусматривают вынос датчика от управляющего микроконтроллера на сколь-либо значимое расстояние. 

Соответственно, возле датчика нужно поставить свой небольшой микроконтроллер, считывающий показания датчика и отправляющий эти данные на головное устройство по какому-либо каналу связи.

Вариант такого датчика я уже делал, там используется радиоканал на капризных JDY-40. И памятуя пляски с бубном вокруг этого радиоканала, в этот раз я остановился на варианте 1-Wire.

1-Wire - или OneWire - достаточно прикольный протокол подключения устройств, в т.ч. и отнесенных от головного устройства на значительное расстояние - десятки метров.

Вопреки названию минимально для работы 1-Wire-устройства нужно два провода: сигнальный и общий. "Один Провод" тут означает, что и питание, и данные могут передаваться по одному и тому же проводу. 

Хотя часть 1-Wire-устройств поддерживает трехпроводное подключение - питание, данные и общий провод. 

К таким устройствам относится и термометр DS18B20, а так же его клоны. DS18B20 прекрасно общается с головным устройством по двум проводам, однако для непосредственного измерения температуры (и для еще пары операций) ему не хватает того паразитного питания, которое он может получить от линии питания/данных. И термометр требует либо усиленную подтяжку к питанию линии питания/данных, либо питание по отдельному проводу - трехпроводная схема.

Вот, взяв за основу принцип DS18B20, я сделал на ATMEGA8A "обертку" для ВМЕ/ВМР280, реализующую общение с головным устройством по 2/3-проводному интерфейсу 1-Wire.

  • 4-проводной модуль BME/BMP280 (со встроенным LDO)
  • Потребление в ждущем режиме до 10 мка
  • 256 вариантов адреса 
  • необходимость усиленной подтяжки в 2-проводном режиме на время преобразования
  • время преобразования - не менее 200 мс
  • контрольный светодиод (работает только в трехпроводном режиме)
  • Температура -40..+85°С, при этом наилучшая точность обеспечивается в диапазоне 0..60°С
  • Давление 225..825 мм рт.ст.
  • Влажность 0..100%

09 ноября 2024

Недельный таймер, версия 2

Ранее я уже публиковал описание недельного таймера. Тот таймер был представлен в двух вариантах - в большом корпусе с вилкой и розеткой и в корпусе на DIN-рейку.

Как показал опыт его эксплуатации - половина функционала там не используется. И таймер может быть гораздо проще. Установить с интервалом в час периоды для каждого дня недели, настроить время и день недели - и ... всё... 

И решение в корпусе вилка-розетка не самое удобное. 

Соответственно, был разработан и изготовлен новый вариант таймера, на ATMEGA8, размещенный в корпусе двухрозеточной колодки. Вот такой:

В пространстве одной из розеток и места для кабельного ввода ставятся 2 платы - одна с дисплеем, МК и кнопками, вторая отдельно - силовая с реле, симистором и блоком питания.



Что таймер умеет:

  • отсчет времени
  • учет дней недели
  • автоматическая коррекция точности хода часов
  • встроенная литиевая батарейка (CR2032) для резервирования хода часов
  • включение и отключение нагрузки по графику с дискретностью 1 час
  • отключение нагрузки по сигналу от датчика внешней нагрузки (предусмотрена точка для подключения трансформатора тока)
  • максимальный коммутируемый ток - 10А
  • комбинированное управление нагрузкой - симистор + реле
  • светодиодная индикация включенной нагрузки

В данной версии отключение нагрузки по приоритету было оставлено, поскольку оно мне будет нужно в одном из применений. Там у меня уже другая колодка, с большим числом розеток будет.

15 марта 2024

Блок питания с функцией записи

Картинка из интернета

Характеристики

  • Входное напряжение 12 В
  • Выходное напряжение 1,5 - 5,5 В
  • Выходной ток до 250 мА*
  • Дискретность измерения выходного напряжения 5мВ
  • Дискретность измерения тока 1 мкА в диапазоне 0 - 1,1 мА, 0.1 мА в диапазоне выше 1,1 мА**
  • Количество измерений/сек - 1000/500/250
  • Буфер - 50 000 измерений
  • Отображение графика потребления на дисплее
  • 2 варианта масштаба графика - абсолютный (от 0 и до максимума) и с адаптивным нижним пределом.
  • 2 варианта отображения каждой экранной точки графика - среднее или минимальное+максимальное значение
  • Приостановка записи в буфер и просмотр сохраненных в буфере данных с возможностью увеличения масштаба и перемещения по графику
  • Сохранение измерений на SD(TF)-карту.
  • Усреднение данных при записи на SD(TF)-карту - 1, 10 или 50 измерений
  • Часы реального времени (для файловой системы)

*Программное ограничение, при превышении тока выход БП отключается в течении секунды. Долговременный выходной ток устройства определяется рассеиваемой мощностью микросхемы стабилизатора. При рассеиваемой мощности 500 мВт рекомендуемый средний ток не должен превышать 65мА при выходном напряжении 1.5 вольт, при напряжении 5 вольт - 125мА. 

**Данное устройство не является точным измерительным прибором и предназначено прежде всего для оценки потребляемого нагрузкой тока в динамике. Погрешность измерений может колебаться в пределах 1-2 дискретных единиц.

История создания и маленький кусочек теории

Иногда мне приходится разрабатывать и тестировать различные автономные устройства. А одно из основных требований к автономному устройству - низкое энергопотребление.

Соответственно, возникает необходимость как то померять потребляемый устройством ток. Если это какое то устройство, которое потребляет энергию постоянно - можно взять мультиметр и просто измерить потребляемый ток. 

А если устройство большую часть времени находится в энергосберегающем режиме и только изредка включается в активный режим на короткое время? Тогда мультиметр не поможет, поскольку не сможет нормально измерить кратковременное повышение потребления.

Как вариант, в цепь питания устройства можно включить шунт и через соответствующий усилитель его подключить к АЦП. Преобразователь будет оцифровывать значения потребляемого тока, например, каждую миллисекунду. И далее эти значения будут где то сохраняться. Потом сохраненные значения можно будет просмотреть и проанализировать.

А что бы падение напряжения на шунте не влияло на выходное напряжение, шунт нужно включить в цепь обратной связи стабилизатора напряжения.


Это пример простейшего стабилизатора напряжения. Здесь выходное напряжение через делитель сравнивается с опорным напряжением и операционный усилитель вырабатывает управляющий сигнал для регулирующего транзистора. Поскольку шунт находится перед делителем - падение напряжения на нем на выходное напряжение не влияет.
Напряжение с шунта усиливается и передается на АЦП.

Выглядит все очень красиво. но первые вопросы возникают при выборе сопротивления шунта. Ведь тестируемое устройство в режиме ожидания может потреблять 1-2-5 мкА, а в активном - до 50-100-200 мА. 
Если взять шунт с низким сопротивлением, то падение напряжения на нем при малых токах будет низкое. Это напряжение будет сложно усилить без влияния помех и шумов. Если взять шунт с высоким сопротивлением - то при больших токах на шунте будет достаточно большое напряжение. Что потребует достаточно высокого входного напряжения. Кроме того, на шунте будет выделяться достаточно большая мощность. А нагрев шунта может вызвать изменение его сопротивления, что негативно скажется на точности измерений.

12 января 2024

MicroMenu и его настройка


 Когда функционал устройства становится большим и разнообразным, и для взаимодействия устройства с пользователем уже не хватает светодиодов и 7-сегментных цифровых дисплеев, на помощь приходят более продвинутые текстовые или графические дисплеи.
И зачастую логика работы устройства требует организовать кучку интерфейсных элементов в какую то однотипную структуру типа меню. Это может быть какое то простое одноуровневое меню из нескольких пунктов, а может быть и достаточно сложной многоуровневой структурой.

И возникает вопрос - как это все организовать малой кровью с небольшими затратами ресурсов МК. Когда то на easyelectronics я встретил статейку Steel.ne про организацию древовидного меню. Steel.ne использовал MicroMenu, допилив его под себя.

Идея меню проста. Каждый элемент меню - это запись с четырьмя ссылками - на предыдущую и последующую запись, на своего родителя и на потомка. Если записи по ссылке нет (например, это первый или последний элемент), соответствующая ссылка оставляется пустая (точнее там вставляется ссылка на фиктивный пустой элемент).

Составляя меню из таких кубиков, получаем четырехсвязный список. Логически он является избыточным - ссылки дублируются. Т.е. предыдущий элемент содержит ссылку на следующий, а следующий - ссылку на предыдущий. Но  такая избыточность позволяет легко перемещаться по меню в любую сторону без дополнительных программных телодвижений.

Так же в каждом элементе меню, кроме ссылок на соседние элементы, есть еще текстовая строка - текст элемента меню и 1 байт данных. В этот байт сохраняется номер команды, которая должна выполниться при выборе данного пункта меню.

Элементы меню сохраняются во флеше, не используя оперативную память микроконтроллера.
Каждый элемент меню хранит 4 ссылки, 1 байт команды и нуль-терминированную строку. Минимальная строка - это один байт 0x00.
Итого для семейства AVR, где адрес умещается в 2 байта, элемент меню минимально занимает 4 * 2 + 1 + 1 = 10 байт. Для STM-ок, где адресация 32-битная - 4 * 4 + 1 + 1 = 18 байт. 

Идея меню мне понравилась и я взял проект Steel.ne и допилил, соответственно, уже под себя. 
Достаточно долгое время я просто таскал код меню из проекта в проект методом Ctrl+C - Ctrl+V... Но потом надоело. И в 2020 году я оформил наконец то это меню в виде отдельной библиотечки.
Стало легче подключать меню в свои проекты. Заодно библиотека обрела некоторую универсальность - для семейства AVR, например, там автоматически подставляется модификатор PROGMEM хранения во флеше, процедуры чтения данных из флеша (pgm_read_xxxx).