nstorm

nstorm

Они убили Пикабу. С момента пробивания дна отключением минусов, я сюда почти не захожу.
Пикабушник
поставил 3767 плюсов и 4474 минуса
отредактировал 28 постов
проголосовал за 67 редактирований
Награды:
С Днем рождения, Пикабу!5 лет на Пикабу лучший длиннопост недели
71К рейтинг 114 подписчиков 19 подписок 66 постов 30 в горячем

"Умное" освещение на базе сенсора освещенности и расстояния APDS-9930. Часть 2, прошивка.

Продолжение 1ой части.

Ссылку на прошивку уже давал, повторю: https://github.com/N-Storm/autolight

В README.md описание есть, код более-менее прокомментировал. Но всё ес-но на английском.

В разделе Releases лежат скомпилированные прошивки с настройками по-умолчанию.


Прошивка написана под ATTiny10, который вписывается в эту задачу. В общем-то никаких особых сложностей, чтобы адаптировать прошивку под другой AVR нет. Кроме GPIO (ногодрыга) используется только прерывание INT0, Watchdog для сброса МК при ошибке, да и вроде всё.

Все настройки работы датчика и порогов срабатывания задаются жестко в прошивке. Все настройки в общем-то в файле autolight.h. Разберу их:


#define PROX_TH 30 - это порог срабатывания датчика приближения. В условных попугаях, потому что зависит от настроек ниже. Больше - ближе. При текущих настройках полностью прикрытый датчик вплотную пальцем выдает тут 1023. При снижении дальности ниже этого значения, считается сработало открытие. Выше - закрытие.


#define LIGHT_TH 100 - это порог срабатывания датчика освещения. Опять же в условных попугаях, да еще я использую жесткое округление при расчете. Потому что ДШ датчика приводит сложную формулу с делениями на дробные числа, это для тиньки 10 будет слишком много. Больше - ярче.


#define DELAY 600 - задержка в мс между проверками на уровень освещения и закрытие в рабочем состоянии (т.е. когда подсветка горит). Для экономии батарейки не слишком часто считаем, 600 мс реакция на такое событие для человеческого глаза вполне норм.


// #define RECHECK_AL - если раскомментировать эту строчку, слегка поменяется поведение прошивки. В рабочем состоянии помимо проверки на закрытие, будет также выполнятся проверка на изменение освещенности. Т.е. если подсветка работает, но вдруг включили свет в комнате, тогда подсветка выключится.


#define WTIME_DEFAULT 0xB6 - время ожидания между проверками расстояния датчиком в автономном режиме. Значение из ДШ и соответствует 202 мс между проверками. Потребление тока при этом будет копеечное. Порядка 66 мкА в среднем. Т.е. датчик раз в 202 мс "выстреливает" пульсами из ИК-светодиода и проверяет расстояние.


#define PPULSE_DEFAULT 4 - соб-но количество пульсов 4.


#define PERS_CON 0b00110000 - это то, о чем я говорил в прошлой части, настройка PERS. В ДШ даны значения, в данном случае это 3 раза подряд (202 мс * 3 + время на обработку) значение дальности должно быть ниже PROX_TH. Соб-но поэтому 3 и поставил, потому что 202 * 3 = 606, примерно тот же 600 мс отклик, как и на закрытие.


#define ATIME_DEFAULT 0xED, #define PTIME_DEFAULT 0xFF - время на обработку АЦП значений, тут взяты рекомендованные из ДШ на датчик.


Дальше всё уже идут определения констант адресов регистров датчика, битов и т.д.


I2C в Attiny10 нет аппаратного, используется софтовая либа, которую я чуть допилил. В i2csoft.h можно поменять пины SDA и SCL.


В autolight.c основная логика работы. Первым делом из main() вызывается функция init(), где мы вырубаем Watchdog и устанавливаем параметры МК. Включаем тактирование от внутреннего источника и ставим предделитель, чтобы получить итоговую тактовую частоту 250 кГц. Да, нам этого с головой тут, зато тайминги I2C можно делать просто одной инструкцией NOP.

Дальше вырубается не используемая аналоговая периферия для снижения потребления.  Ну и соб-но настраивается прерывание INT0.

После init() "инициализируется" I2C через SoftI2CInit() и через функцию apds_init() отправляем в датчик все описанные ранее настройки из .h. В случае ошибки тут и любой ошибки на I2C дальше, вызывается функция reset(), которая через Watchdog сбрасывает МК через 15 мс. Т.е. если связь с датчиком пропадет (отвалится линия или еще что), МК будет пытаться перезагружаться.


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


Я думаю он должен быть достаточно понятен, для человека более-менее понимающего в программировании для МК. Но если есть какие-то вопросы - отвечу в комментариях.


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

Показать полностью

"Умное" освещение на базе сенсора освещенности и расстояния APDS-9930. Часть 1, "железо".

Пост не совсем про Arduino, но про домашнюю поделку на микроконтроллере AVR. Об "умной" подсветке, которая включается только при открытии ящика и когда кругом темно.


Захотел я сделать в шкафу, да выдвижных ящиках комода себе подсветку. С утра собираюсь, в комнате темно, жена спит, дочь спит. Подсвечивать телефоном, чтобы найти шмотки задолбало. Тянуть провода для питания тоже не хотелось, надо было что-то на аккуме.
Взял LED модуль готовый. На Али такие COB LED называются, очень много разных вариантов, взял такой (83 рубля):

"Умное" освещение на базе сенсора освещенности и расстояния APDS-9930. Часть 1, "железо". Avr, Микроконтроллеры, Умный дом, Подсветка, Самоделки, Автоматизация, Длиннопост

Взял повышающий DC-DC преобразователь на MT3608 ($0.40):

"Умное" освещение на базе сенсора освещенности и расстояния APDS-9930. Часть 1, "железо". Avr, Микроконтроллеры, Умный дом, Подсветка, Самоделки, Автоматизация, Длиннопост

И из загашников у себя кнопку фиксируемую и акк Li-Ion на 500мАч. Всё прекрасно заработало и за пару месяцев редких включений акк просел чуть ниже половины заряда.
А дальше соб-но захотелось придать этому ума, чтобы не клацать кнопкой самому. Можно просто поставить геркон и свет будет включаться при открытии шкафа/выдвигании ящика. Но не охота, чтобы он включался, когда в комнате горит основной свет - батарею тратить почем зря. Поэтому берем датчик освещенности и расстояния (Proxmity & Ambient Light Sensor), такие, как стоят в телефонах. Недорогие и доступные на Али модули на базе APDS-9930, вот такие (60 рублей):

"Умное" освещение на базе сенсора освещенности и расстояния APDS-9930. Часть 1, "железо". Avr, Микроконтроллеры, Умный дом, Подсветка, Самоделки, Автоматизация, Длиннопост

Датчик цифровой, работает по I2C. На датчике ИК-светодиод и 2 фотодиода - один измеряет ИК диапазон, другой ИК + видимый спектр света. С помощью них датчик умеет измерять расстояние до объекта, посылая ИК импульсы и замеряя их отражение. И уровень освещенности фотодиодами (вычитаем из общей освещенности вместе с ИК отдельные показания ИК фотодиода). Далее расстояние - PS (proximity sensor), освещенность - ALS (ambient light sensor).
И приятная штука - прерывания. Датчик можно настроить так, чтобы при выходе определенных параметров PS или ALS выше или ниже заданного нами значения он "дернет ножкой" INT. Тем самым МК настроив датчик может уйти в сон (режим пониженного энергопотребления). плюс есть настройка PERS, которая отвечает за то, сколько раз подряд считанное значение должно выйти за границы заданных значений, чтобы сработало прерывание, чтобы исключить ложные срабатывания.
На модуле есть сам датчик и минимальная обвязка для него, включая конденсатор для ИК-светодиода и подтяжки линий.
Беру из загашников мелкие букашки - контроллеры ATTiny10 (фото из инета):

"Умное" освещение на базе сенсора освещенности и расстояния APDS-9930. Часть 1, "железо". Avr, Микроконтроллеры, Умный дом, Подсветка, Самоделки, Автоматизация, Длиннопост

Я покупал их под всякие мелкие задачи в довесок с заказом на DigiKey, но они есть и на Али. Я брал по $0.31 за штучку.
Контроллер может питаться от батарейки напрямую, но для APDS-9930 нужна напруга не выше 3.6В, поэтому берем стаб LDO на 2.7-3.3В. Я взял TPS78330, но можно что проще и дешевле достать, вроде XC6206P302MR. Контроллер и сенсор запитываем от LDO. LED модуль по прежнему от DC-DC модуля. Чтобы иметь возможность выключать свет, в разрыв входного минуса модуля ставим N-канальный MOSFET. Я взял IRLML6244TRPBF (пачка 100 шт на Али около $1). Минусовой выход DC-DC ес-но соединяется только с LED модулем, он общий с входным, мы его будем размыкать. Короче примерно такая схема:

"Умное" освещение на базе сенсора освещенности и расстояния APDS-9930. Часть 1, "железо". Avr, Микроконтроллеры, Умный дом, Подсветка, Самоделки, Автоматизация, Длиннопост

На схеме U3 - LDO MCP1810T стоит, это я задел на плату поставил.
Далее я написал прошивку для ATTiny10, которая это всё контролирует: https://github.com/N-Storm/autolight

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

"Умное" освещение на базе сенсора освещенности и расстояния APDS-9930. Часть 1, "железо". Avr, Микроконтроллеры, Умный дом, Подсветка, Самоделки, Автоматизация, Длиннопост

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


Всё работает. Датчик отрабатывает как положено. При запуске он инициализирует сенсор и ждет. Сенсор заводится проверять расстояние каждые 202 мс. Как только расстояние увеличивается выше порога (3 раза подряд через PERS, чтобы не было ложных срабатываний) - значит дверца открыта. Проверяем уровень внешнего освещения. Если оно ниже порога - подаем высокий уровень уровень на PB3 (затвор мосфета), тем самым включая подсветку. Как только расстояние до препятствия сенсора опять станет ниже порога - значит дверца закрыта, свет выключается и снова МК уходит в сон, "заведя" датчик опять выстрелить прерыванием когда снова откроется дверца.

Есть один нюанс. МК всего 6 ног имеет, 2 из которых - питание, 2 мы используем под I2C, 1 под прерывание и еще 1 нужна для управления подсветкой. Т.е. задействованы все, включая ножку сброса. После прошивки FUSE битов, обычным образом прошить МК нельзя будет, т.к. сброс отключен. Но можно просто подать +12В на ножку RESET (не подключая это дело к программатору ес-но!) и он снова войдет в режим программирования.


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

Показать полностью 6

Когда старая шутка в тему

Когда старая шутка в тему Скриншот, Комментарии на Пикабу, Комментарии, Знаменитости, Анджелина Джоли, Брэд Питт

#comment_137259738

Показать полностью 1

Эх, Олег!

Эх, Олег! Скриншот, Комментарии, Сиськи, Комментарии на Пикабу

Комментарий: #comment_127941955

О повышении цен на дизельное топливо

О повышении цен на дизельное топливо Скриншот, Солярка, Цены, Топливо, Юмор, Комментарии на Пикабу

#comment_123015388

Не мультиварка...

Не мультиварка... Комментарии на Пикабу, Комментарии, Скриншот, Пикабу, Мат, Обнимашки, Эрекция

#comment_112505602

Почта России в очередной раз врет.

Едет мне посылочка из Китая. Доставка типа ePacket, трек на буквы LZ. Это характеризуется как экспресс-доставка. О которой Почта России и администрация Китая договорились. Да по требованиям к трек-номерам Международного Почтового Союза (UPU) S10 треки на букву L являются экспресс-почтой. А конкретно LZ - вообще требует двухстороннего соглашения между почтовыми администрациями! О чем соб-но выше и написано, что такое соглашение есть.

Но у операторов Почты России другая позиция. Т.к. моя посылка с 15го апреля выпущена таможней и никакого движения до сих пор. При попытке на сайте почты подать заявление на розыск, после заполнения всех пунктов, меня просто возвращает назад в меню выбора типа претензии! Никакой ошибки, просто молчаливый игнор от сайта.

Связываюсь с оператором. И выслушиваю поток некомпетентного вранья:

Почта России в очередной раз врет. Почта России, Почта, Epacket, Обман
Почта России в очередной раз врет. Почта России, Почта, Epacket, Обман

Сорри, в виде текста не сохранил. Если кратко то мне поведали следующее:

- У международных почтовых отправлений сроки доставки не регламентируются (нет), т.к. срок складывается из сроков прохождения по стране-отправителю (да) и контрольным срокам по стране-получателю (да, т.е. России)

- Контрольные сроки по России считаются от момента "Покинуло место международного почтового обмена" (нет, считается с момента "Прибыло на территорию России", даже после долгих споров и судов "народ" затребовал от почты ставить этот статус, т.к. обязаны по соб-но той же Всемирной Почтовой Конвенции, на которую они так любят ссылаться)

- Отправление "простое", т.е. нерегистрируемое (нет)

- За данные отправление ответственность Почта России не несет (нет)

- Предложили мне получить возмещение у продавца (сами не можете доставить, а продавец должен платить?!)


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


@DmitriyMarkin, почему Почта России во всех СМИ трубят о такой двухсторонней договоренности про экспресс доставки с Китая, а на деле операторы врут что это отправление даже неотслеживаемое? Почему pochta.ru/claim молча не принимает заявление на розыск?

Показать полностью 2

"Клиентоориентированность" от Макдональдс

Заказывал давеча в "макдаке" поесть, "на вынос". Домой, т.к. готовить некогда было. В т.ч. бургер "Вестерн гурмэ". На картинке он выглядит так:

"Клиентоориентированность" от Макдональдс Макдоналдс, Бургер, Сервис, Плохое качество, Длиннопост

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

"Клиентоориентированность" от Макдональдс Макдоналдс, Бургер, Сервис, Плохое качество, Длиннопост

Кучкой всё свалено в одном месте, а 70% "площади" бургера тупо котлета и сухая булка. Думаю ну компания же западная. Должны же быть какие-то стандарты качества. На западе вообще такое переделывают молча и бесплатно, если и случается. Ради интереса решил написать им. Сначала в Facebook. И вот какой ответ получил:

"Клиентоориентированность" от Макдональдс Макдоналдс, Бургер, Сервис, Плохое качество, Длиннопост
Т.е. главное чтобы "все было на месте"? А че не через блендер пропустить и выдать? Написал на почту, но и там ответ:
"Клиентоориентированность" от Макдональдс Макдоналдс, Бургер, Сервис, Плохое качество, Длиннопост

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

Показать полностью 4
Отличная работа, все прочитано!