
Arduino & Pi
Большой таймер 555 на транзисторах
Вдохновившись довольно древним примером команды Evil Mad Scienist мы записали коротенькое видео по трассировке платы таймера 555 по схеме из даташита от ST.
В схеме есть небольшие отличия от документации. Многоколлекторные транзисторы, а так же диоды заменены на типовые транзисторы. В резистивном делителе применены резисторы 4.7к как более стандартные.
Платы уже отправлены в печать, и скоро мы подготовим таймлапс сборки, настройки, тестирования и сравнения работы с настоящей интегральной схемой.
Как всегда ссылка на проект
Сделал самый крутой самодельный светильник!
Представляю вашему вниманию продолжение полюбившегося вам огненного светильника из этого поста. Эта версия имеет метр в высоту и выглядит очень эпично! Схема не претерпела изменений и всё ещё очень простая: платка Wemos, сенсорная кнопка и светодиодная лента.
На борту лампы около двух десятков крутых эффектов, возможность настроить "избранные", а также будильник-рассвет.
Основа лампы - водосточная труба, которая идеально подходит для наматывания ленты в матрицу и позволяет максимально эффективно отводить тепло от светодиодов.
Все подробности в видео выше и на странице проекта у меня на сайте.
Разработка IoT-шлюза на базе Raspberry CM3+
Рисунок 1 — Плата устройства
Большой опыт работы в сфере промышленной автоматизации и АСУТП, казалось бы, должен способствовать тому, что со временем уже много всего видел и много всего знаешь. Но не тут-то было. Оказывается, иногда могут возникать задачи и проекты, которые трудно реализовать стандартными средствами. Так под один крупный проект по мониторингу и управлению в «облаке» одного небезызвестного завода N требовалось найти подходящее железо. Однако оказалось, что в России по требованиям помехозащищенности устройства и открытости системы ничего подходящего не существует. Попытка заказать идеально подходящее нам устройство из-за рубежа провалилась, поскольку на территорию нашей страны оборудование с пометкой «IoT» весьма трудно ввести в промышленных масштабах. Другие же поставщики не устроили сроками доставки в 12 недель при небольших объемах и ценой. Поэтому в голове родилась и плотно осела мысль о создании своего устройства. Причем такого, чтобы оно было универсальным и подходило не только конкретно под этот один проект, а под множество других. В итоге от момента зарождения идеи, подбора поставщиков и корпуса, разработки платы, её отладки и тестирования, написания инструкций и технической документации прошло весьма много времени. Но зато теперь я держу с легким трепетом в руках полностью законченное и рабочее устройство, и могу заявлять, что мы это сделали!
Почему именно Raspberry?
Raspberry Pi – это небольшой и дешевый универсальный микрокомпьютер, гибко настраиваемый под любые задачи. С 2014 года он выпускается как самостоятельный вычислительный модуль Compute Module, то есть из привычной платы с различными интерфейсами и разъемами осталось только самое важное: процессор, ПЗУ и ОЗУ. Такое исполнение позволяет использовать это устройство для любых мыслимых и немыслимых задач, все лишь упирается в возможности фантазии для создания обвязки вокруг модуля. Стоит также заметить, что с момента выхода в свет первой версии устройства вышло уже три версии модулей, а после выхода Raspberry Pi 4, вероятно, стоит ожидать еще и четвертую версию в скором времени. Всё это говорит о том, что разработчики активно развивают свой продукт, увеличивают его мощность и быстродействие, и что их устройство пользуется определенной популярностью у людей. Эта популярность не беспочвенна: за всё это время они зарекомендовали себя как надежные устройства, способные решать задачи различного уровня в любых условиях, даже в космосе. Также программировать на Raspberry Pi условно просто, они обладают большим количеством интеграторов по всему миру.
Открытая операционная система Linux позволяет устанавливать на устройство абсолютно любое программное обеспечение в зависимости от требуемой задачи. Например для решений в области умного дома возможны стыковки с OpenHab, Home Assistant, iRidiumMobile, NodeRed и др. Для промышленности возможна установка SCADA-систем, таких как CODESYS, Rapid SCADA, OpenSCADA с возможностью использовать устройство как шлюз для передачи данных на верхний уровень по протоколам MQTT, http, REST API или CoAP. Также возможна интеграция с различными облачными сервисами.
Что по интерфейсам?
Рисунок 2 — Вид платы сверху и снизу
Устройство в минимальном исполнение поддерживает следующие интерфейсы:
- RS485 х 2;
- RS232 х 1;
- CanBus х 1;
- 1-Wire х 1;
- USB х 1;
- Ethernet х 1;
- SMA x 2;
- SIM х 1;
- miniPCIe х 2;
- HDMI 4k х 1;
- MicroUSB х 1;
- MicroSD х 1;
- GPIO х 1.
- LED х 1 (программируемый);
Вышеописанные интерфейсы позволяют внедрить устройство практический в любой проект. А дополнительные аппаратные модули для установки в слоты Mini PCI-e от сторонних производителей решают проблему с наличием связи и интернета у устройства. Такой путь с установкой модулей связи нами был выбран не случайно, поскольку наличие USB-адаптеров (так называемых «свистков») является не очень надежным и качественным вариантом, а установка промышленных роутеров по типу Robustel R2000-3P является дорогостоящим (около 12 т.р.). Поэтому мы остановились на установке двух разъемов под модули Mini PCI-e, которые можно использовать по собственному желанию:
3G, LTE, GPRS модуль (HUAWEI MU709s-2, цена: 2,5 т.р.);
Wi-Fi модуль с возможностью подключения к нему направленной антенны;
NB-IoT модуль;
LoraWan модуль для построения сети «интернет вещей».
Таким образом, появляется некая вариативность и гибкость в выборе нужных интерфейсов связи под конкретную задачу.
Дополнительные решения
- Аппаратный watchdog;
- Аппаратные часы реального времени;
- Энергонезависимая память EEPROM;
- Металлический корпус и крышки (алюминий 3 мм);
- Диапазон питания 9-36 В;
- Температурный диапазон -25...+80°C (по документам, тесты еще не проводились).
Рисунок 3 — Устройство AntexGate в корпусе
Сенсорная скрипка на Arduino
Когда много полезных вещей люди делают на микроконтроллерах, хочется и самому сделать что-то бесполезное. Особенно когда не умел, да ещё и не знал. Итак, детская игрушка - скрипка с сенсорными струнами для юных Паганини.
В одном китайском интернет-магазине была куплена детская игрушка - электрическая скрипка на трех батарейках АА. Скрипка и пластиковый смычок с резинкой от трусов вместо тетивы. Алгоритм работы был такой. Смычок используется лишь для вида, а звуки извлекаются второй рукой. При зажимании струн пальцами левой руки воспроизводилась мелодия. Одно нажимание на струны - одна нота. В памяти микросхемы около 4 или 5 мелодий. Звук теоретически напоминал скрипку, но слишком громко и резко.
Через некоторое время было решено переделать вот это вот всё в более приемлемый вид для окружающих.
Новый алгоритм такой. При зажимании рукой струн начинает воспроизводиться mp3 мелодия. В момент отпускания струны мелодия ставится на паузу. При повторном нажимании воспроизведение продолжается. Чтобы мелодия не заикалась, пауза включается не сразу, а через полсекунды или секунду. То есть, пока держишь или перебираешь струны, мелодия воспроизводится. Остается только в такт водить смычком второй рукой. Убираешь пальцы со струн, все замолкает. Аплодисменты.
P.S. К сожалению китайский алгоритм понотного воспроизведения реализовать не удалось, а в принципе он тоже прикольный (кроме звука).
Используемые детали:
- Arduino Nano, а лучше Pro Mini (для энергосбережения);
- mp3 плеер DFPlayer (китайский аналог);
- сенсорная кнопка ttp223;
- тактовые кнопки с длинными кнопками (чтоб длины хватило с учетом толщины корпуса) 2 шт;
- Движковый (ползунковый) выключатель с длинным рычагом (чтоб длины хватило с учетом толщины корпуса) 1 шт;
- резисторы 1кОм и 10 кОм;
- конденсаторы SMD разных номиналов в диапазоне 0~50 пФ, для настройки чувствительности струн;
- провода, термоусадка, изолента и т.п.
Примечание: Динамик и батарейный отсек были уже в корпусе игрушки, поэтому я их не приобретал отдельно.
Схема:
Реализация:
Подключаем модуль кнопки TTP223 к пину D2, а сенсор припаиваем к струнам дополнительным проводом.
Подключаем кнопки 2 и 3 с подтягивающими к земле (pull-down) резисторами 10 кОм к пинам D3 и D4.
Подключаем DFPlayer к питанию, а также RX и TX через резисторы 1кОм к пинам D10 и D11: TX от плеера к RX Arduino, а RX плеера к TX Arduino.
Динамик подключаем к выводам DFPlayer SPK1 и SPK2 не более 3Вт. Возможно, потребуется установить резистор 1кОм, чтобы звук был лучше.
Ставим движковый выключатель на разрыв минусового провода от батарейного отсека.
В корпусе были просверлены отверстия под кнопки и переключатели, а одна кнопка задействована из старой схемы. Также было сделано отверстие под microSD/TF Card сбоку.
Крепление Arduino и DFPlayer’а было сделано из куска разъема PCI старой материнской платы. Я его распилил вдоль ножовкой, вытащил контакты. Нарезал по размеру. Получилась пластиковая планка с отверстиями для ножек модулей с нужным шагом. Ее на проволоку припаял к корпусу, залил термоклеем. Получился разъем, куда удобно вставлять модули. Но, поскольку в разобранном PCI разъеме контактов уже нет, немного переделал выводы плат. Перепаял ножки таким образом, чтобы снизу была достаточная длина для вставки в импровизированный разъем, а сверху ножка тоже торчала для подпайки навесным монтажом.
То же самое сделал с кнопками: на проволоку припаял к корпусу, залил термоклеем.
Кнопка на пине 3 - это перемотка трека вперед ( короткое нажатие) и назад (длинное нажатие).
Кнопка на пине 4 - это громкость. Короткое нажатие - увеличение громкости на единицу, длинное нажатие - уменьшение сразу на 3 единицы (чтоб не маяться с длинными нажатиями).
Остальные кнопки в процессе разработки и переделки девайса самовыпилились.
Энергосбережение:
После полной отладки и тройной перепроверки выпаял светодиоды RX, TX, LED13 и питания с Arduino.
Подключил питание через VIN в обход стабилизатора напряжения.
Стандартные батарейки заменил на первые попавшиеся аккумуляторы размера AA. Плата питается от 4,5В. Этого достаточно.
Также в скетч добавлена функция увода Arduino в сон. DFPlayer победить не удалось. После ухода в сон, он отказывался возвращаться в нормальный режим, а лишь полностью перезагружался, что не подошло мне. Поэтому отказался от этого.
Подводные камни:
Это был мой первый проект, поэтому я не стал делать печатную плату, а все сделано навесным монтажом с максимальным колхозингом. При этом проект несколько раз переделывался.
Основная сложность была с сенсорными струнами. Сначала сенсор был реализован силами самой Arduino через библиотеку CapacitiveSensor. Срабатывания сенсора были не предсказуемыми. В какой-то момент подвернулась красная сенсорная кнопка TTP223. Удобство заключается в том, что на плате сразу распаяна микросхема с автоподстройкой сенсора и возможностью за счет добавления конденсатора регулировать чувствительность сенсора. Также можно подпаяться к сенсору со специальной площадки или сразу на конденсатор.
Кстати, с автоподстройкой есть один неприятный момент. Кнопка самокалибруется при подаче питания. В даташите написано, что первые 0,5 секунды нельзя касаться кнопки. Если включаешь питание игрушки, при этом держась рукой за струны - струны перестают работать до следующей автокалибровки. Надо просто отпустить струны и подождать пару секунд. Та же история, когда на пластиковом корпусе накапливается статика. Но вообще в реальной жизни это не сильно портит удовольствие и случается редко.
Еще один нюанс, это при подборе конденсатора для кнопки TTP223 необходимо тестировать чувствительность сенсорных струн именно в собранном корпусе. Иначе может быть такая ситуация, что струны начнут срабатывать на расстоянии нескольких сантиметров от руки или наоборот, только если браться за них двумя руками. На чувствительность влияет всё. И корпус и длина струн, и длина провода от сенсорной кнопки, припаянной к струнам. Поэтому я и не указал емкость конденсатора. На фотографии видно, что у меня запаяны два конденсатора в параллель, потому что не оказалось нужной емкости. Кстати конденсаторы были выпаяны из старой материнской платы компьютера. Проблема smd конденсаторов, что по ним никак не определить номинал. Благо нашелся правильный мультиметр. С какой-то не нужной платы нашел два подходящих, и то пришлось запараллелить. Диапазон конденсаторов настройки из даташита на TTP223 0~50пФ.
Mp3 модуль DFPlayer также оказался с особенностями. Поскольку у меня был китайский аналог, то возникали проблемы с управлением. В итоге реализована самая простая схема без обратной связи и энергосбережения. Просто отдаем команды плееру от Arduino без обратной связи. Библиотека DFRobotDFPlayerMini не во всех версиях оказалась совместима с модулем плеера. В итоге методом тыка подошла версия 1.0.5 с ограничениями. Ну и еще неприятный момент, связанный с невнимательностью – ошибка полярности или подача напряжения на неправильные пины убивают модуль плеера сразу без возможности восстановления. В Ардуине можно хотя-бы диод шоттки заменить или регулятор напряжения.



















