Луна и msp430

в 6:04, , рубрики: diy или сделай сам, Программинг микроконтроллеров

Доброго времени суток! Сразу хочу сказать, что не агитирую за msp430, но раз уж купил — должен, как говорится, применить. Опять же сообщество жаловалось на отсутствие конкретики в постах про эту платформу. История, значит, следующая. Была поставлена задача приобрести ночник в спальню. Сказано, что надо ехать в IKEA, там есть. Но легкие пути не для нас. Светильник подбирался с учётом последующей возможной модернизацией.
Итак, тушка:
Луна и msp430

Изначально заточена под патрон E14. Но в загашнике давно пылилась 5-тиметровая светодиодная лента. Патрон — долой. Ленту приклеил по периметру изнутри. Самоклеющийся слой высох, но зато, слава Богу, перестал ужасно вонять. Пришлось использовать суперклей. Получилось примерно следующее:
image
Излучатель готов.Управляющим микроконтроллером был выбран младший из поставляемых в комплекте с Launchpad-ом — msp430g2452. Использовать целиком отладочную плату не стал. Большая больно, да и на контроллер, который используется в программаторе/эмуляторе, глаз положил. Взял дохлый брелок от автосигнализации, вырезал под него из монтажки плату. Не стал снимать процесс сборки. В итоге получилось вот что:
image
поясню немного по деталям.
VT1 — ключ, управляющий ИК-светодиодом;
VT2 — полевик, коммутирующий светодиодную ленту;
HL1 — ИК — фототранзистор;
HL2 — ИК — светодиод;
HL3 — зеленый светодиод;
C1 — блокировочный электролит по питанию
DA1 — 3.3В стабилизатор. К нему, кстати, припаян небольшой радиатор.
обратная сторона платы:
image
куски проволоки снизу-справа — отладочно-программирующий разъем. К нему подключается отладчик/программатор с волшебным переходником:
image
Далее по конструкции:
В качестве бесконтактного сенсора был выбран опробованный ранее инфракрасный датчик расстояния на светодиоде L-34F3C и фототранзисторе L-53P3C. С этой парочкой ранее имел дело. Строил на них инфракрасные бампера для робота. Зарекомендовали себя хорошо. Принцип работы сенсора прост. Процессор сначала меряет через АЦП напряжение на фототранзисторе с выключенным ИК-светодиодом. После чего включает ИК-светодиод и снова меряет напряжение на фототранзисторе. Разница измерений будет зависеть от того, насколько сильно окружающие предметы отражают ИК излучение. Чем ближе предмет, тем больше отражённого света попадает в фототранзистор. Для надёжности, я проводил по 3 измерения каждого состояния. Результат усреднял.
Вот выключатель в корпусе:
image
в сборе:
image
Просто делать вкл/выкл — не спортивно. Для начала сделал FadeIn и FadeOut. Т.е. плавное нарастание яркости до максимума, и плавное выключение. Для регулировки яркости использовал аппаратный ШИМ. Под занавес добавил функцию ручного управления яркостью. Держишь руку долго — яркость плавно нарастает. Затем убывает.
Ссылка на исходник
Из особенностей программы.
Работаем с АЦП (измеряем напряжение на фотодиоде);
Работаем с timer0 (нужен для аппаратного ШИМ, еще мигаем светодиодом HL3);
Не работаем с WDT, хотя было бы не плохо спасаться от внезапных подвисаний. Пока не наблюдались, поэтому не трогал.
Используется экспоненциальная зависимость яркость-ШИМ, т.к. линейное изменение скважности не ведет к линейному изменению яркости.
Собственно, результат работы:

Автор: shtirlitsus

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js