Можно ли сделать автоматическую светодиодную подсветку ступенек, загорающихся по очереди? Да. Идея не нова, есть куча реализаций в интернете. А чтобы затратить минимум денег, или даже бесплатно? А вот с этим – проблемы… Купить готовый контроллер – сегодня не проблема, но достаточно дорого. Таков бизнес. Действительно ли предлагаемые контроллеры стоят своих денег? Далеко не факт, но проводить эксперименты за свой счёт я не хочу. Запасайтесь терпением, решение под катом. Будет много букв.
Предупреждение.
Обозреваемый проект затевался мною давно, он скорее имеет статус «хоббийного». В совокупности от решения создать свой проект до его реализации прошел год. Сказывается занятость на других работах, плюс долгое ожидание компонентов из Китая, разработка печатной платы с последующим изготовлением в том же Китае. Также хочу сказать, что это первый опыт конструирования устройства на Arduino, впрочем, как и первый опыт написания скетча (кода) под Arduino.
Предыстория.
Понравилась идейно система подсветки лестницы. На реализацию много денег тратить не хотелось, очень тяжело нынче достаются деньги.
Корень вопроса в русскоязычной части интернета лежит, по всей вероятности, в одной статье на Хабре (нынче Geektimes). Специально не привожу ссылку, дабы не сочли за рекламу. Некто Владимир ****ов предложил своё видение вопроса об автоматическом освещении лестницы. Несмотря на то, что идея была «копипастой» с instructables, всё же это была своя реализация «на практике». Однако это был всего лишь «первый блин» у Владимира. Это «блин» не лишен недостатков, как, например, весьма упрощённая модель поведения людей на лестнице, специфичность алгоритма работы контроллера (подробнее об этом – позже), упрощённая схемотехника, которая может сыграть злую шутку (и об этом позже) и неоптимальные финансовые траты. Но, повторюсь, идея была озвучена.
Как и полагается любому интересному проекту, он не «загнулся». Он начал развиваться, поскольку автор и сам прекрасно понимал недостатки первой версии своего контроллера. Однако в последствии проект трансформировался и «переехал» на свой сайт. Думаю, не нужно объяснять, что он стал вполне коммерческим. В бесплатном доступе осталась только схемотехника. Разумеется, «прошивка» коммерциализировалась, ввиду чего очень сложно судить о том, насколько алгоритм работы «вырос из детских штанишек». Суть свелась к тому, что можно купить готовое решение, эффективность и адекватность работы которого неизвестна.
Мотивы для разработки своего контроллера, со *****ми и блек-джеком.
Пример готового решения указанного автора является лишь одним из тех вариантов, которые легко доступны в интернете и мало чем отличаются друг от друга. Поэтому все эти варианты для удобства я в дальнейшем буду обобщать выражением «готовое решение». Это будет собирательным образом.
Если сформулировать недостатки (на мой взгляд) готового решения более конкретно, то вот они:
не учитывается возможность движения нескольких человек ни в попутном, ни во встречном направлении;
насколько я понял, готовое решение работает не в «realtime» (точнее, даже не в «приближении к нему»), что автоматически означает, если контроллер занят «освещением по одной» ступенек в заданном направлении, он абсолютно игнорирует всё происходящее вокруг в этот период;
отсутствие в большинстве случаев возможности коммутации сколь-нибудь мощной нагрузки, то есть кроме маломощных светодиодных лент никакие, например, rigid panel с типовым потреблением около 1 ампера, неприменимы;
неплавное «загорание» светодиодных лент, влияет на общее восприятие световой картины;
коммерческий статус большинства из них или относительно высокая стоимость реализации в случае некоммерческого проекта.
Исходя их недостатков (для меня), перечисленных выше, а также нескольких других причин, я решил разработать свой проект со своим видением вопроса. Немаловажной частью является желание попробовать себя, наконец, в Arduino, ведь до этого мне не приходилось сталкиваться с языком Си (ну и, разумеется, языком Wiring, «выросшим» из него специально для Arduino). Другой важной причиной послужило желание разработать нечто полезное, открытое и бесплатное для людей, в надежде, что это может стать отправной точкой для новичков в программировании и проектировании хотя бы простых устройств на микроконтроллерах. Другими словами, я хотел сделать свой вклад в развитие общества, потому что лишь развитие имеет смысл.
Аппаратная часть.
С причиной появления этого проекта разобрались, пора двигаться дальше. Вот список деталей, минимально необходимых для реализации предлагаемого проекта.
Предлагаемые ссылки представлены лишь для примера, а также для оценки приблизительных денежных затрат. Как видим, список невелик. Уложились в сумму менее $15. Уже неплохо.
Вкратце рассмотрим каждый из компонентов. Контроллер Arduino Nano был выбран исходя из минимальных габаритов без потери возможности его прошивки «здесь и сейчас». То есть габариты меньше есть, например, Arduino Pro Mini, но в нем уже не будет разъёма Mini-USB, и для его программирования нужно покупать отдельные «переходники». В данном случае это не целесообразно.
Преобразователь DC-DC. Много обзоров похожих преобразователей есть на MySKU, якобы они супер маленькие и «удаленькие». Не спорю, но конкретно этот преобразователь меньше их ровно в 2 раза – шедевр миниатюризации! Чтобы нагляднее показать, насколько он мал, приведу вот такую фотографию.
Данный преобразователь нужен для питания схемы управления силовыми транзисторами. То есть для питания Arduino, драйвера TLC5940NT, трёх инвертеров сигнала и двух сонаров. Не задавался целью узнать, каково их суммарное потребление, но искренне полагаю, что вряд ли даже пол-ампера. Такой ток предлагаемый преобразователь обеспечит, абсолютно не напрягаясь.
Отдельно нужно рассказать, что собой представляют сонары HC-SR04. В момент, когда я их исследовал на предмет возможности использования в данном проекте, с ними возникали проблемы. А информации о проблемах, с которыми я столкнулся, нигде не было. Суть в том, что эти сонары «подвисали», тем самым за собой «подвешивая» сам контроллер. Причина этого в принципе работы сонаров: один из «колодцев» излучает ультразвук, который, отражаясь, улавливается вторым «колодцем». При неудачном стечении обстоятельств (физически закрыт второй колодец из-за очень близкого препятствия, звук «потерялся» в поглощающем материале и т.д.) датчик повисал в логической единице (а контроллер ждал спадания этой единицы) до сброса питания. Причем только при отсоединении плюса питания сброса датчика не происходило, требовалось сбрасывать питание и Arduino тоже. А вот при кратковременном обрыве минуса датчик оживал. Именно поэтому пришлось применить маломощные ключи по линии питания сонаров. Пару слов о причине такого поведения сонаров. На сегодня уже есть обсуждение данной проблемы на сайте Arduino.cc. Итак, некоторые грешат на некачественные компоненты сонаров. Некоторые считают, что схема «немного упрощена» ради минимальной цены. Я пробовал покупать у нескольких продавцов на ebay, в том числе весьма надёжных, но результат тот же. Некоторые, как и я, «забили», и тоже аппаратно сбрасывают питание сонаров, правда, по плюсу. Для меня это не работало в своё время. А у некоторых всё прекрасно – сонары работают без проблем вообще. Так или иначе, сонары эти весьма загадочны. Возможно, стоило бы попробовать другие сонары, или вообще использовать инфракрасные дальномеры. В общем случае, любое из решений имеет свои достоинства и недостатки. Я всё же использовал сонары.
По прошествии времени стало понятно, что люди продолжают сталкиваться с проблемами при использовании HC-SR04. Качество их изготовления упало — ниже некуда. Теперь эти сонары — просто мусор. Поэтому я настаиваю на использовании только SRF05!
Инвертер 74LS04. Ввиду того, что основной драйвер, TLC5940, использует схему с общим плюсом (анодом), то есть управляет минусом при постоянно присутствующем плюсе, а нам требуется инвертировать логику работы, то есть получать управление плюсом, а не минусом, был применён этот инвертер. В результате при появлении минуса на выходе драйвера всегда получается плюс на выходе инвертера. Это позволяет применить, как в сделано данном случае, силовой транзистор NPN, который, по иронии, будет опять же управлять минусом, но уже непосредственно нагрузки (светодиодных лент).
Силовые транзисторы TIP122. Почему именно они? Можно ведь легко использовать и TIP121, и TIP120 и т.д. или даже MOSFETы. Ответ прост – цена. TIP122 очень дёшевы. И они типа Дарлингтон (минимальным током можно коммутировать большие токи). Данные конкретные транзисторы способны коммутировать до 5 ампер. Однако, при сильном желании коммутировать весьма большие токи или снизить любой возможный нагрев силовой части до самого возможного минимума, есть возможность использовать и MOSFET. Например, IRLZ44N. Это по-настоящему прекрасные полевые транзисторы, с сопротивлением канала 22 миллиОма и способностью коммутировать по даташиту до 47 ампер (!). Ими можно заменить TIP122 даже без внесения изменений в схему – прямая замена. Даже цоколёвка совпадает. Только вот цена ощутимо выше. Также хочу предостеречь: на корпусе и тех, и других находится «выход» (сток, коллектор). В моём случае применение радиаторов с изоляцией не приводит к коротким замыканиям между выходами. Осторожно!
Транзисторы BC547. Дешевые и простые транзисторы типа NPN. Они нужны для «ресета» зависших сонаров. Подробнее о «зависании» написано в пункте про сами сонары.
Резисторы 10кОм и 1кОм, резисторные матрицы на 10кОм. Все 10 кОм резисторы и матрицы нужны для подтяжки к «плюсам» и «минусам» питания. Их точность маловажна. Однако хочу уточнить, что матрицы бывают разных типов по расположению сопротивлений. В данном случае это от первой ножки к любой другой будет сопротивление 10кОм. Все 1кОм резисторы нужны для ограничения тока базы силовых транзисторов.
Драйвер TLC5940. До последнего был уверен, что на MySKU был их обзор, но правда жестока. Обзора нет. Если читатели посчитают нужным – сделаю отдельный обзор и на него. Но а тут вкратце опишу, что это такое и зачем это нужно. Итак, TLC5940 – драйвер светодиодов. Может управлять 16-ю и меньше светодиодами, поддерживает аппаратный ШИМ с 4096 ступенями (градациями яркости) для каждого канала независимо, способен «протаскивать» до 120 мА на канал (в теории). На практике, правда, люди пишут, что при таких токах драйвер серьёзно греется. Максимальный ток светодиодов задаётся внешним резистором. В данном случае это резистор 2кОм, что соответствует уставке тока в 20 мА (ориентировочно). Управляется драйвер пятью проводами от Arduino. Драйверы можно объединять в последовательные цепочки для увеличения количества светодиодов. Теоретически длина цепочек не ограничена, практически же будут сказываться скорость обновления яркости светодиодов и потери в проводах. Для Arduino есть специальная библиотека для управления этим драйвером, и она исключительно проста, что делает применение этих драйверов предельно простым. Предельно. Также будет доступна ссылка на архив в конце обзора. Из минусов же в данном случае можно назвать использование схемы с общим анодом. Однако, как я уже сообщил выше, проблема решаема.
Вкратце рассказал, теперь посмотрите на общий вид деталей, которые я использовал.
Как видно из картинки, там много «лишних» запчастей. Всё верно, имеется список «опций», которые также можно применить. Для людей, которые хоть изредка собирают какие-либо схемы, я уверен, есть какие-то детали «про запас». Следовательно, кое-что из «опционального» списка у Вас уже может иметься, и дополнительные деньги тратить не придётся. А может, и ничего нет. Приведу список опций полностью.
Итого ещё около $10. Самая заметная по цене позиция – это алюминиевые радиаторы для силовых транзисторов TIP-122 (в корпусе TO-220). Поскольку транзисторы выбраны с некоторым запасом и способны без радиатора выдержать некоторую нагрузку (скажем, 0,5 ампера) без «посторонней помощи», Вам решать, целесообразно ли использовать радиаторы. Я использовал. В том числе, для электрической изоляции между коллекторами, поскольку в комплекте к радиаторам идут теплопроводящие диэлектрические «резинки» и пластиковые втулки для винтов.
Пин хедеры нужны для подключения сонаров и более «культурного» подключения Arduino. Искать уже нарезанные по 15 контактов хедеры конкретно под Arduino крайне нецелесообразно в финансовом плане – реально очень дорого. Необоснованно дорого. Поэтому один 40-контактный хедер при помощи ножа и надфиля легко превращается в два 15-контактных хедера и остаётся ещё небольшой кусочек. Такая же история и про хедеры для сонаров: ножик – «наше всё».
Резистор на 2 кОм нужен только для уставки тока драйвера TLC5940. Два последовательно соединённых резистора по 1кОм из предыдущего, «основного» списка, прекрасно могут справиться с этой проблемой.
Конденсаторы на 100нФ и 47мкФ нужны для более стабильного питания драйвера. На практике они не обязательны, но крайне желательны, поскольку их отсутствие может спровоцировать стробоскопическое мигание нагрузки. У меня такое было на брэд-борде. На готовой плате – не было. Но в готовый вариант конденсаторы я всё же добавил.
В панелях острой необходимости нет, но внутреннее чувство прекрасного, подсказывающее, что без них будет выглядеть депрессивно-дёшево, заставило эти панели добавить. Другими словами, причина их использования глубоко субъективна.
Что ж, с деталями почти закончили, осталась только печатная плата.
Печатная плата.
Первая версия печатной платы, сделанной самостоятельно, была 150 мм на 110 мм. Односторонняя. Я использовал фоторезист, получилось на первый взгляд неплохо. Но когда я понял, сколько отверстий мне придётся сверлить, едва не психанул. Но просверлил. Получилось «так себе» — угол сверления «гулял», сверло слегка «сползало». Результат глаз не радовал вообще. Дальше хуже: я заметил, что «накосячил» со всеми 74LS04 – неправильно развёл входы и выходы на вторых сторонах микросхем. И вот тут я психанул. Радикально.
Вторая версия платы уложилась в размер 100 мм на 100 мм, была двусторонней, с паяльной маской и металлизацией между сторонами. Красота! :) Изготовлена, разумеется, не самостоятельно, а фирмой из Айовы (США). С подрядчиком в Гонконге. Так как на MySKU было несколько обзоров на заказы плат в Китае, решил и я вынести заказ платы в отдельный обзор – реально очень много информации. Если бы я начал рассказывать все подробности здесь, в этом обзоре, то закончили бы Вы его читать еще очень, очень не скоро. Поэтому здесь я приведу только фотографии.
Надписи о производителе наверняка кого-нибудь позабавят. Что ж, сначала хотел иронично написать «Made in Belarus», но не стал этого делать по личным мотивам. Про производство самой платы я написал умышленно, дабы акцентировать на этом внимание читателей MySKU. Подробнее об этом – в обзоре про печатные платы.
Хочу добавить, что при желании можно заказать точно такие же платы себе, если нет желания что-либо в них изменять или добавлять/убавлять. Но перед заказом, чтобы понять, как это сделать и зачем, почему будет с десяток плат в посылке, и по иным причинам, настоятельно (!) рекомендую ознакомиться со смежным обзором, где я подробно рассказываю про заказ этих плат. Ну и, разумеется, в духе последних, немного огорчающих, трендов на MySKU, специально хочу сообщить, что с такого рода заказов я не получу абсолютно ничего, хотя такая возможность предусмотрена. Таким образом, надеюсь, все сомнения в бескорыстности сего обзора указанный факт рассеет.
Схема проекта.
Представленная схема подразумевает 12 каналов. Так изначально требовалось. В связи с этим, а также в связи с нежеланием визуально усложнять схему решил оставить, как есть. Уверен, что Вы разберётесь, как задействовать все 16, а то и 32, 48, 64 и т.д. каналов.
Поскольку, как оказалось, всё же требуется помощь для организации 16 каналов, вот схема:
Вместо HC-SR04 используем только SRF05!
Ну и схема с использованием PIR датчиков вместо сонаров (по многочисленным просьбам).
Имейте ввиду, что изначально использование PIR датчиков не планировалось, следовательно, нужны некоторые изменения. В первую очередь, нужно отказаться от использования механизма reset'a — здесь это очень сильно навредит, а не поможет. Также PIR должен выдавать очень небольшой импульс при появлении в «поле зрения» человека. Также необходим резистор подтяжки на самом PIR сенсоре согласно приведенной выше схемы.
Скетч для Arduino («прошивка»).
Как я уже упоминал, Wiring, основанный на Си(++) – не мой «родной» язык. Поэтому частенько приходилось «наступать на грабли» самостоятельно. А иногда даже и «прыгать на них с разбегу». Именно поэтому прошу не злиться на меня за, возможно, отсутствие простых решений в некоторых ситуациях, специфичных для опыта тех людей, у кого Си – язык «родной». Так или иначе, я старался максимально подробно комментировать весь код, вплоть до нудных и очевидных вещей. Думаю, только так можно доступно пояснить всю суть даже не программистам. Возможно, это станет отправной точкой для потенциального новичка в программировании.
Итак, сначала на словах постараюсь объяснить алгоритм работы контроллера, а также объяснить, что же такого принципиально иного в моём подходе к написанию «прошивки», что это даже послужило одним из самых важных мотивов к сознанию своего, альтернативного проекта.
В первую очередь, нужно понимать, что Arduino (в дальнейшем «контроллер») – это лишь «с большего окультуренная», упрощённая реализация контроллеров AtMega, со всеми «вытекающими». Но, со своей средой написания прошивок («скетчей»), где всё значительно (!) упрощено для программиста. Вплоть даже до потери части функционала по сравнению с «родными» средами программирования ATMEL в угоду простоте. Но работа постоянно идёт, проект Arduino развивается, и дополнительный, в том числе «потерянный», функционал добавляется. Не буду обсуждать перспективы проекта Arduino, поскольку вокруг много «противников» проекта в силу разных причин, но хочу поделиться впечатлениями по поводу IDE Arduino (средой программирования). На мой взгляд, она ужасна. Просто немного «доработанный» блокнот с функцией монитора COM-порта. Начав писать свой проект, уже через час я понял, что пользоваться этим «блокнотом» практически невозможно. Именно поэтому я отвлёкся и занялся поиском нормальной среды, в которой можно комфортно писать код. Критериями поиска были наличие Autocomplete (автозавершение «фраз»), наличие всплывающих подсказок по требуемым аргументам функций (подсказывает, какие аргументы вводить), наглядное форматирование, возможность «схлопнуть» тело функций для удобства навигации по коду, отсутствие «тяжеловесности» среды (очень не хотелось «монструозных, неповоротливых» продуктов). Рассмотрел несколько вариантов, доступных в интернете. Больше всего устроила среда Code::Blocks for Arduino (также доступно в архиве в конце обзора).
После стандартной Arduino IDE, это – словно откровение. Эта среда бесплатна, практически полностью устраивает по функционалу. Единственное, чем не занимался, так это настройкой среды для компиляции готового кода. Вроде, это возможно. Но я использую «копи-пейст» готового кода в стандартную среду Arduino и уже в ней компилирую код и прошиваю контроллер. Профит :).
Ну и во-вторых, непосредственно о логике работы контроллера.
К сожалению, о полном «риал-тайме» говорить сложно ввиду крайне малой производительности контроллера (по сравнению, например, с ПК). Сделать несколько независимых логических потоков при приемлемой производительности крайне затруднительно. Именно поэтому я решил использовать просто приближение к «риал-тайму».
Центральной идеей является использование быстрых операций с флагами (переменными) и очень скорой дальнейшей работы контроллера «дальше по списку» вместо непосредственных операций, которые я и заменил этими флагами. И только когда будет «удобное» время, порциями выполнять требуемые действия в соответствии с флагами. Именно порциями. Так удалось достигнуть относительной плавности «загорания» светодиодных лент. Второй причиной использования флагов и «порционности» стала необходимость как-то отслеживать состояние сонаров уже в процессе «загорания» ступенек. В моём случае порция, а следовательно, и время реакции, составляет 400 мс – 4 операции по 100 мс. За синхронизацию состояния флагов (а также буфера со значениями яркости каждой ступеньки) с «реальной жизнью» (фактическим требуемым состоянием яркостей на каждой из ступенек) отвечает функция sync2RealLife. Все дополнительные, отдельные функции (процедуры) старался называть максимально логично. Следовательно, разобраться в коде должно быть нетрудно. Но думаю, нужно хотя бы вкратце поговорить о каждой из них:
startBottomTop() – процедура поочерёдного включения ступенек (точнее, манипуляции с флагами) по направлению снизу вверх.
stopBottomTop() – процедура поочерёдного отключения ступенек по направлению снизу вверх.
startTopBottom() – процедура поочерёдного включения ступенек по направлению сверху вниз.
stopTopBottom() – процедура поочерёдного отключения ступенек по направлению сверху вниз.
sync2RealLife() – процедура, обеспечивающая синхронизацию данных из каждой ячейки массива с реальной яркостью каждой ступеньки.
sonarPrepare(byte sonarNo) – процедура первоначальной "инициализации" сонаров. Служебная процедура, выполняется один раз, при старте. Код вынесен в отдельную процедуру для улучшения «читабельности» остального кода.
sonarTrigged(byte sonarNo) – функция проверки, сработал ли сонар, с отслеживанием "подвисания" сонаров. Так же, как и в предыдущем случае, код вынесен в отдельную процедуру для улучшения «читабельности» остального кода.
sonarReset(byte sonarNo) – процедура переинициализации подвисшего сонара. На практике "отбирает" у него питание на 100 мс. Вынужденная мера для борьбы с не особо качественными сонарами.
sonarDisable(byte sonarNo) – процедура погружения сонара «в анабиоз» на некоторое время. Нужно, в том числе, для реализации режима встречного и попутного движения нескольких людей по лестнице.
sonarEnabled(byte sonarNo) – функция, проверяющая, можно ли уже пользоваться данными с сонара. Работает в связке с предыдущей процедурой.
Также хочу обратить Ваше внимание, что, имея всего 2 сонара по краям лестницы, очень сложно симулировать и предсказать модель поведения людей на лестнице. Очень сложно. Поэтому приходилось постоянно упрощать модель до допущений. Именно поэтому так важно правильно подобрать и настроить значение констант в самом начале кода. Даже так: жизненно необходимо, иначе работать будет «криво». Это ещё одна из причин, по которой я отказался от готового решения, поскольку в том случае я буду зависеть от «пряморукости» программиста, написавшего прошивку, и/или от установщика, который «за меня» будет решать, «как правильно», не вдаваясь в подробности.
Итак, вкратце назначение всех процедур пояснил, про нюансы рассказал. Напомню, более конкретные комментарии к ним доступны в теле кода. Ну и сам код.
Скетч для контроллера
//Actualized March 2017
#include "Tlc5940.h"
#define sensorType 2 //1=SRF05 сонар 2=PIR сенсоры
#define useResetMechanism true //использовать ли механизм reset (имеет смысл только при использовании СОНАРОВ)
#define sonar1trig 8 //имеет смысл только при использовании СОНАРОВ
#define sonar1echo 2 //имеет смысл только при использовании СОНАРОВ
#define sonar1resetpin 4 //имеет смысл только при использовании СОНАРОВ
#define sonar2trig 6 //имеет смысл только при использовании СОНАРОВ
#define sonar2echo 7 //имеет смысл только при использовании СОНАРОВ
#define sonar2resetpin 5 //имеет смысл только при использовании СОНАРОВ
#define pir1SignalPin 8 //не менять, если не уверены на 100%, что ИМЕННО делаете!
#define pir2SignalPin 6 //не менять, если не уверены на 100%, что ИМЕННО делаете!
#define sonar1minLimit 30 //см, если обнаружена дистанция меньше, чем это число, то сонар считается сработавшим
#define sonar2minLimit 30 //см, если обнаружена дистанция меньше, чем это число, то сонар считается сработавшим
#define sensorInactiveTime 1500 //мс, время после срабатывания сенвора, в течение которого сенсор игнорит следующие срабатывания
#define stairsCount 12 //количество ступенек
#define initialPWMvalue 2 // only 0...5 (яркость первой и последней ступенек в ожидании)
#define waitForTurnOff 7000 //мс, время задержки подсветки во вкл состоянии после включения последней ступеньки
byte stairsArray[stairsCount]; //массив, где каждый элемент соответствует ступеньке. Все операции только с ним, далее sync2realLife
byte direction = 0; //0 = снизу вверх, 1 = сверху вниз
byte ignoreSensor1Count = 0; //счетчик-флаг, сколько раз игнорировать срабатывание сенсора 1
byte ignoreSensor2Count = 0; //счетчик-флаг, сколько раз игнорировать срабатывание сенсора 2
boolean sensor1trigged = false; //флаг, участвующий в реакциях на срабатывание сенсора в разных условиях
boolean sensor2trigged = false; //флаг, участвующий в реакциях на срабатывание сенсора в разных условиях
boolean allLEDsAreOn = false; //флаг, все светодиоды включены, требуется ожидание в таком состоянии
boolean need2LightOnBottomTop = false; //флаг, требуется включение ступеней снизу вверх
boolean need2LightOffBottomTop = false; //флаг, требуется выключение ступеней снизу вверх
boolean need2LightOnTopBottom = false; //флаг, требуется включение ступеней сверху вниз
boolean need2LightOffTopBottom = false; //флаг, требуется выключение ступеней сверху вниз
boolean nothingHappening = true; //флаг, указывающий на "дежурный" режим лестницы, т.н. исходное состояние
unsigned long sensor1previousTime; //время начала блокировки сенсора 1 на sensorInactiveTime миллисекунд
unsigned long sensor2previousTime; //время начала блокировки сенсора 2 на sensorInactiveTime миллисекунд
unsigned long allLEDsAreOnTime; //время начала горения ВСЕХ ступенек
void setup(){ //подготовка
for (byte i = 1; i <= stairsCount-2; i++) stairsArray[i] = 0; //забить массив начальными значениями яркости ступенек
stairsArray[0] = initialPWMvalue; //выставление дефолтной яркости первой ступеньки
stairsArray[stairsCount-1] = initialPWMvalue; //выставление дефолтной яркости последней ступеньки
Tlc.init(); //инициализация TLC-шки
delay(500); //нужно, чтобы предыдущая процедура (инициализация) не "подвесила" контроллер
sync2RealLife(); //"пропихнуть" начальные значения яркости ступенек в "реальную жизнь"
sensorPrepare(1); //подготавливаем сенсора 1
sensorPrepare(2); //подготавливаем сенсора 2
}
void loop(){//бесконечный цикл
sensor1trigged = sensorTrigged(1); //выставление флага сонара 1 для последующих манипуляций с ним
sensor2trigged = sensorTrigged(2); //выставление флага сонара 2 для последующих манипуляций с ним
nothingHappening = !((need2LightOnTopBottom)||(need2LightOffTopBottom)||(need2LightOnBottomTop)||(need2LightOffBottomTop)||(allLEDsAreOn));
if (nothingHappening){ //если лестница находится в исходном (выключенном) состоянии, можно сбросить флаги-"потеряшки" на всякий случай
ignoreSensor1Count = 0; //сколько раз игнорировать сенсора 1
ignoreSensor2Count = 0; //сколько раз игнорировать сенсора 2
}
//процесс включения относительно сложен, нужно проверять кучу условий
//процесс ВКЛючения: сначала - снизу вверх (выставление флагов и счетчиков)
if ((sensor1trigged) && (nothingHappening)){ //простое включение ступенек снизу вверх из исходного состояния лестницы
need2LightOnBottomTop = true; //начать освение ступенек снизу вверх
ignoreSensor2Count++; //игнорить противоположный сенсора, чтобы при его срабатывании не запустилось "загорание" сверху вниз
}
else if ((sensor1trigged) && ((need2LightOnBottomTop)||(allLEDsAreOn))){ //если ступеньки уже загоряются в нужном направлении или уже горят
sensorDisable(1); //просто увеличить время ожидания полностью включенной лестницы снизу вверх
allLEDsAreOnTime = millis();
ignoreSensor2Count++; //игнорить противоположный сенсора, чтобы при его срабатывании не запустилось "загорание" сверху вниз
direction = 0; //направление - снизу вверх
}
else if ((sensor1trigged) && (need2LightOffBottomTop)){ //а уже происходит гашение снизу вверх
need2LightOffBottomTop = false; //прекратить гашение ступенек снизу вверх
need2LightOnBottomTop = true; //начать освещение ступенек снизу вверх
ignoreSensor2Count++; //игнорить противоположный сенсора, чтобы при его срабатывании не запустилось "загорание" сверху вниз
}
else if ((sensor1trigged) && (need2LightOnTopBottom)){ //а уже происходит освещение сверху вниз
need2LightOnTopBottom = false; //прекратить освещение ступенек сверху вниз
need2LightOnBottomTop = true; //начать освение ступенек снизу вверх
ignoreSensor2Count++; //игнорить противоположный сенсора, чтобы при его срабатывании не запустилось "загорание" сверху вниз
}
else if ((sensor1trigged) && (need2LightOffTopBottom)){ //а уже происходит гашение сверху вниз
need2LightOffTopBottom = false; //прекратить гашение ступенек сверху вниз
need2LightOnBottomTop = true; //начать освение ступенек снизу вверх
ignoreSensor2Count++; //игнорить противоположный сенсора, чтобы при его срабатывании не запустилось "загорание" сверху вниз
}
//процесс ВКЛючения: теперь - сверху вниз (выставление флагов и счетчиков)
if ((sensor2trigged) && (nothingHappening)){ //простое включение ступенек сверху вниз из исходного состояния лестницы
need2LightOnTopBottom = true; //начать освещение ступенек сверху вниз
ignoreSensor1Count++; //игнорить противоположный сенсора, чтобы при его срабатывании не запустилось "загорание" снизу вверх
}
else if ((sensor2trigged) && ((need2LightOnTopBottom)||(allLEDsAreOn))){//если ступеньки уже загоряются в нужном направлении или уже горят
sensorDisable(2); //обновить отсчет времени для освещения ступенек сверху вниз
allLEDsAreOnTime = millis();
ignoreSensor1Count++; //игнорить противоположный сенсора, чтобы при его срабатывании не запустилось "загорание" снизу вверх
direction = 1; //направление - сверху вниз
}
else if ((sensor2trigged) && (need2LightOffTopBottom)){ //а уже происходит гашение сверху вниз
need2LightOffTopBottom = false; //прекратить гашение ступенек сверху вниз
need2LightOnTopBottom = true; //начать освещение ступенек сверху вниз
ignoreSensor1Count++; //игнорить противоположный сенсора, чтобы при его срабатывании не запустилось "загорание" снизу вверх
}
else if ((sensor2trigged) && (need2LightOnBottomTop)){ //а уже происходит освещение снизу вверх
need2LightOnBottomTop = false; //прекратить освещение ступенек снизу вверх
need2LightOnTopBottom = true; //начать освение ступенек сверху вних
ignoreSensor1Count++; //игнорить противоположный сенсора, чтобы при его срабатывании не запустилось "загорание" снизу вверх
}
else if ((sensor2trigged) && (need2LightOffBottomTop)){ //а уже происходит гашение снизу вверх
need2LightOffBottomTop = false; //прекратить гашение ступенек снизу вверх
need2LightOnTopBottom = true; //начать освение ступенек сверху вниз
ignoreSensor1Count++; //игнорить противоположный сенсора, чтобы при его срабатывании не запустилось "загорание" снизу вверх
}
//процесс ВЫКлючения относительно прост - нужно только знать направление, и выставлять флаги
if ((allLEDsAreOn)&&((allLEDsAreOnTime + waitForTurnOff) <= millis())){ //пора гасить ступеньки в указанном направлении
if (direction == 0) need2LightOffBottomTop = true; //снизу вверх
else if (direction == 1) need2LightOffTopBottom = true; //сверху вниз
}
//непосредственная обработка флагов с "пропихиванием" массива ступенек в "реальность"
if (need2LightOnBottomTop){ //увеличим яркость за 4 итерации, уложившись в 400мс (BottomTop - снизу вверх)
for (byte i=0; i<=3;i++){
startBottomTop();
sync2RealLife();
delay(100);
}//for
}//if
if (need2LightOffBottomTop){ //уменьшим яркость за 4 итерации, уложившись в 400мс (BottomTop - снизу вверх)
for (byte i=0; i<=3;i++){
stopBottomTop();
sync2RealLife();
delay(100);
}//for
}//if
if (need2LightOnTopBottom){ //увеличим яркость за 4 итерации, уложившись в 400мс (TopBottom - сверху вниз)
for (byte i=0; i<=3;i++){
startTopBottom();
sync2RealLife();
delay(100);
}//for
}//if
if (need2LightOffTopBottom){ //уменьшим яркость за 4 итерации, уложившись в 400мс (TopBottom - сверху вниз)
for (byte i=0; i<=3;i++){
stopTopBottom();
sync2RealLife();
delay(100);
}//for
}//if
}//procedure
void startBottomTop(){ //процедура ВКЛючения снизу вверх
for (byte i=1; i<=stairsCount; i++){ //обработка всех ступенек по очереди, добавление по "1" яркости для одной ступеньки за раз
if (stairsArray[i-1] <=4){ //узнать, какой ступенькой сейчас заниматься
stairsArray[i-1]++; //увеличить на ней яркость
return; //прямо сейчас "свалить" из процедуры
}//if
else if ((i == stairsCount)&&(stairsArray[stairsCount-1] == 5)&&(!allLEDsAreOn)){ //если полностью включена последняя требуемая ступенька
allLEDsAreOnTime = millis(); //сохраним время начала состояния "все ступеньки включены"
allLEDsAreOn = true; //флаг, все ступеньки включены
direction = 0; //для последующего гашения ступенек снизу вверх
need2LightOnBottomTop = false; //поскольку шаг - последний, сбрасываем за собой флаг необходимости
return; //прямо сейчас "свалить" из процедуры
}//if
}//for
}//procedure
void stopBottomTop(){ //процедура ВЫКЛючения снизу вверх
if (allLEDsAreOn) allLEDsAreOn = false; //уже Не все светодиоды включены, очевидно
for (byte i=0; i<=stairsCount-1; i++){ //пытаемся перебрать все ступеньки по очереди
if ((i == 0)&&(stairsArray[i] > initialPWMvalue)){ //если ступенька первая, снижать яркость до "дежурного" уровня ШИМ, а не 0
stairsArray[0]--; //снизить яркость
return; //прямо сейчас "свалить" из процедуры
}
else if ((i == stairsCount-1)&&(stairsArray[i] > initialPWMvalue)){ //если последняя, то снижать яркость до дежурного уровня ШИМ, а не 0
stairsArray[i]--; //снизить яркость
if (stairsArray[stairsCount-1] == initialPWMvalue) need2LightOffBottomTop = false; //если это последняя ступенька и на ней достигнута минимальная яркость
return; //прямо сейчас "свалить" из процедуры
}
else if ((i != 0) && (i != (stairsCount-1)) && (stairsArray[i] >= 1)){ //обработка всех остальных ступенек
stairsArray[i]--; //снизить яркость
return; //прямо сейчас "свалить" из процедуры
}//if i == 0
}//for
}//procedure
void startTopBottom(){ //процедура ВКЛючения сверху вниз
for (byte i=stairsCount; i>=1; i--){ //обработка всех ступенек по очереди, добавление по "1" яркости для одной ступеньки за раз
if (stairsArray[i-1] <=4){ //узнать, какой ступенькой сейчас заниматься
stairsArray[i-1]++; //уменьшить на ней яркость
return; //прямо сейчас "свалить" из процедуры
}//if
else if ((i == 1)&&(stairsArray[0] == 5)&&(!allLEDsAreOn)){ //если полностью включена последняя требуемая ступенька
allLEDsAreOnTime = millis(); //сохраним время начала состояния "все ступеньки включены"
allLEDsAreOn = true; //флаг, все ступеньки включены
direction = 1; //для последующего гашения ступенек снизу вверх
need2LightOnTopBottom = false; //поскольку шаг - последний, сбрасываем за собой флаг необходимости
return; //прямо сейчас "свалить" из процедуры
}//if
}//for
}//procedure
void stopTopBottom(){ //процедура ВЫКЛючения сверху вниз
if (allLEDsAreOn) allLEDsAreOn = false; //уже Не все светодиоды включены, очевидно
for (byte i=stairsCount-1; i>=0; i--){ //пытаемся перебрать все ступеньки по очереди
if ((i == stairsCount-1)&&(stairsArray[i] > initialPWMvalue)){ //если ступенька последняя, то снижать яркость до дежурного уровня ШИМ, а не 0
stairsArray[i]--; //снизить яркость
return; //прямо сейчас "свалить" из процедуры
}
else if ((i == 0)&&(stairsArray[i] > initialPWMvalue)){ //если первая, то снижать яркость до дежурного уровня ШИМ, а не 0
stairsArray[0]--; //снизить яркость
if (stairsArray[0] == initialPWMvalue) need2LightOffTopBottom = false; //если это первая ступенька и на ней достигнута минимальная яркость
return; //прямо сейчас "свалить" из процедуры
}
else if ((i != 0) && (i != (stairsCount-1)) && (stairsArray[i] >= 1)){ //обработка всех остальных ступенек
stairsArray[i]--; //снизить яркость
return; //прямо сейчас "свалить" из процедуры
}//if i == 0
}//for
}//procedure
void sync2RealLife(){ //процедуры синхронизации "фантазий" массива с "реальной жизнью"
for (int i = 0; i < stairsCount; i++) Tlc.set(i, stairsArray[i]*800); //0...5 степени яркости * 800 = вкладываемся в 0...4096
Tlc.update();
}//procedure
void sensorPrepare(byte sensorNo){ //процедура первоначальной "инициализации" сенсора
#if (sensorType == 1)
if (sensorNo == 1){
pinMode(sonar1trig, OUTPUT);
pinMode(sonar1echo, INPUT);
pinMode(sonar1resetpin, OUTPUT);
digitalWrite(sonar1resetpin, HIGH); //всегда должен быть HIGH, для перезагрузки сонара кратковременно сбросить в LOW
}
else if (sensorNo == 2){
pinMode(sonar2trig, OUTPUT);
pinMode(sonar2echo, INPUT);
pinMode(sonar2resetpin, OUTPUT);
digitalWrite(sonar2resetpin, HIGH); //всегда должен быть HIGH, для перезагрузки сонара кратковременно сбросить в LOW
}
#elif (sensorType == 2)
pinMode(pir1SignalPin, INPUT);
pinMode(pir2SignalPin, INPUT);
#endif
}//procedure
void sonarReset(byte sonarNo){ //процедура ресета подвисшего сонара, на 100 мс "отбирает" у него питание
if (sonarNo == 1){
digitalWrite(sonar1resetpin, LOW);
delay(100);
digitalWrite(sonar1resetpin, HIGH);
}
else if (sonarNo == 2){
digitalWrite(sonar2resetpin, LOW);
delay(100);
digitalWrite(sonar2resetpin, HIGH);
}//if
}//procedure
void sensorDisable(byte sensorNo){ //процедура "запрета" сенсора
if (sensorNo == 1) sensor1previousTime = millis();
if (sensorNo == 2) sensor2previousTime = millis();
}
boolean sensorEnabled(byte sensorNo){ //функция, дающая знать, не "разрешен" ли уже сенсора
if ((sensorNo == 1)&&((sensor1previousTime + sensorInactiveTime) <= millis())) return true;
if ((sensorNo == 2)&&((sensor2previousTime + sensorInactiveTime) <= millis())) return true;
else return false;
}
boolean sensorTrigged(byte sensorNo){ //процедура проверки, сработал ли сенсора (с отслеживанием "подвисания" сонаров)
#if (sensorType == 2)
if (sensorNo == 1){
if (digitalRead(pir1SignalPin) == LOW) return true;
else return false;
}
if (sensorNo == 2){
if (digitalRead(pir2SignalPin) == LOW) return true;
else return false;
}
#elif (sensorType == 1)
if ((sensorNo == 1)&&(sensorEnabled(1))){
digitalWrite(sonar1trig, LOW);
delayMicroseconds(5);
digitalWrite(sonar1trig, HIGH);
delayMicroseconds(15);
digitalWrite(sonar1trig, LOW);
unsigned int time_us = pulseIn(sonar1echo, HIGH, 5000); //5000 - таймаут, то есть не ждать сигнала более 5мс
unsigned int distance = time_us / 58;
if ((distance != 0)&&(distance <= sonar1minLimit)){ //сонар считается сработавшим, принимаем "меры"
if (ignoreSensor1Count > 0) { //если требуется 1 раз проигнорить сонар 2
ignoreSensor1Count--; //проигнорили, сбрасываем за собой флаг необходимости
sensorDisable(1); //временно "запретить" сонар, ведь по факту он сработал (хотя и заигнорили), иначе каждые 400мс будут "ходить всё новые люди"
return false;
}
sensorDisable(1); //временно "запретить" сонар, иначе каждые 400мс будут "ходить всё новые люди"
return true;
}
else if (distance == 0){ //сонар 1 "завис"
#if (useResetMechanism)
sonarReset(1);
#endif
return false;
}//endelse
else return false;
}//if sensor 1
if ((sensorNo == 2)&&(sensorEnabled(2))){
digitalWrite(sonar2trig, LOW);
delayMicroseconds(5);
digitalWrite(sonar2trig, HIGH);
delayMicroseconds(15);
digitalWrite(sonar2trig, LOW);
unsigned int time_us = pulseIn(sonar2echo, HIGH, 5000); //5000 - таймаут, то есть не ждать сигнала более 5мс
unsigned int distance = time_us / 58;
if ((distance != 0)&&(distance <= sonar2minLimit)){ //сонар считается сработавшим, принимаем "меры"
if (ignoreSensor2Count > 0) { //если требуется 1 раз проигнорить сонар 2
ignoreSensor2Count--; //проигнорили, сбрасываем за собой флаг необходимости
sensorDisable(2); //временно "запретить" сонар, ведь по факту он сработал (хотя и заигнорили), иначе каждые 400мс будут "ходить всё новые люди"
return false;
}
sensorDisable(2); //временно "запретить" сонар, иначе каждые 400мс будут "ходить всё новые люди"
return true;
}
else if (distance == 0){ //сонар 2 "завис"
#if (useResetMechanism)
sonarReset(2);
#endif
return false;
}//endelse
else return false;
}//if sensor 2
#endif
}//procedure
Демонстрация работы.
Никто из Вас не отважится на повторение проекта, если не будет чётко себе представлять, что он получит «на выходе». К моему сожалению, мой проект пока не интегрирован в лестницу дома моей сестры в связи с вялотекущим ремонтом последнего. Следовательно, всё, что я могу предоставить в доказательство работоспособности и жизнеспособности проекта, это видео работы устройства, не интегрированного пока в лестницу. Другими словами, со светодиодными панелями, разложенными на столе. Извините за качество видео, снимать его пришлось на «тапок». Ленты на видео частично прикрыты для того, чтобы камера не «ослеплялась» и видео не становилось тёмным, потому что ленты очень яркие. Более того, для этого видео мне пришлось снизить питание до 10 вольт вместо 12, по той же причине.
Поскольку данный проект уже реализован одним из пользователей(Stanislav73) полностью, с его позволения я выкладываю видео результата:
Благодаря Станиславу и его другу Алексею, в коде была исправлена одна недоработка, которая могла проявляться в виде игнорирования сонарами «новых» людей, когда все ленты уже горят полностью. За это выражаю благодарность Станиславу и Алексею. Представленный под спойлером код актуализирован. По ссылке для скачивания с Dropbox — тоже.
Итого.
Своей цели – получить базовые навыки в Arduino – я добился. Равно как и удовлетворил желание реализовать проект по-своему. Разумеется, я применяю полученный опыт и в других проектах и намерен продолжать саморазвитие. А вот достиг ли я самой важной цели – привнёс ли что-то полезное в жизнь каждого из читателей – покажет только время. Цель обзора, как Вы понимаете, именно в этом.
Спрашивайте, что непонятно. Исправляйте, если что-то не так, ведь проект, как я уже упоминал, является моим первым «блином».
Всем добра. Сегодня это, как никогда, важно.
UPD:
1) Исправлена опечатка схемы электрической принципиальной. Тем, кто заказывал изготовление готовой платы по ссылке, переживать не о чем — на платах всё правильно и полностью работоспособно. Проблема могла возникнуть только у тех, кто решил проектировать и изготавливать печатную плату самостоятельно, положившись только на схему, без использования datasheet-ов. Один такой прецедент случился, за что приношу свои извинения.
2) Благодаря пользователям, решившимся повторить проект целиком, но с другим количеством ступенек, был уточнён код, где вместо одной позиции для указания количества ступеней требовалось уточнять в двух. Сейчас всё актуально, и под спойлером, и по ссылке.
3) Также немного изменил процедуры, касающиеся сонаров. По всей видимости, качество сонаров продолжает падать. Пришлось немного менять код для подстраховки от некоторых ситуаций. Опять же, сейчас всё актуально, и под спойлером, и по ссылке.
4) Нужно больше фотографий!
5) Небольшой FAQ (часто задаваемые вопросы)
Скетч не компилируется. Что делать?
Для того, чтобы скетч скомпилировался, нужно добавить библиотеку TLC5940 в папку библиотек программы (среды программирования) Arduino. Как правило, эта папка находится здесь: C:\Program Files (x86)\Arduino\Libraries (для Windows x64) и C:\Program Files\Arduino\Libraries (для Windows x86). Просто скопировать папку TLC5940 целиком в указанную папку Arduino. В остальном проблем нет, проверил, как компилируется в Arduino 1.6.7 – всё отлично. Как изменить количество ступеней?
В строке, где написано const byte stairsCount = 12; число «12» исправить на нужное Вам число. И всё. Можно ли у вас купить плату?
У меня свободных плат не осталось уже на следующий день после публикации обзора – всё раздал. Извините. Не закачивается скетч в контроллер Arduino. Что делать?
Проблема, вероятнее всего в том, что китайские клоны Arduino вместо микросхем FTDI используют более дешёвые аналоги. Как правило, это CH340. На работу контроллера в данном проекте это вообще никак не повлияет. Именно из-за другой микросхемы набор драйверов, который идёт в комплекте с программой (средой программирования) Arduino не подходит. Проблема решается скачиванием драйвера для CH340 самостоятельно. Драйвер бесплатен, его легко найти. Например, здесь. Нужно распаковать содержимое в любую папку, и при подключении контроллера Arduino к компьютеру для установки драйверов указать на эту самую папку. Таким образом в компьютер установится виртуальный COM порт и ему присвоится какой-то номер. Например, COM5. При прошивке скетча в программе (среде программирования) Arduino нужно выбрать этот самый COM порт (Инструменты – Порт – COMx, где х – номер порта). Если Вы не знаете, как посмотреть номер порта, не успели заметить, какой порт установился и так далее, не переживайте. В списке портов Arduino их будет совсем немного, выбирайте их по порядку и пробуйте. Для уверенности сначала подключите контроллер Arduino к компьютеру, и только после этого запускайте программу (среду программирования) Arduino – с большой вероятностью, нужный порт выберется сам. Нужно ли снимать контроллер Arduino с платы при заливке скетча?
Да, весьма желательно это сделать. Какой блок питания мне выбрать?
Блоки питания бывают очень разные по качеству, равно как бывает и разная нагрузка на него (разные типы светодиодных лент, панелей и т.д.). Стабильность работы подсветки, пожарная безопасность и много другого зависит от блока питания. Я попробую сделать посоветовать блок питания, сильно упрощая критерии и учитывая:
а)среднюю нагрузку на блок питания около 10…13 ампер для, в среднем, 16 ступенек;
б)ватты бывают «китайскими»;
в)при нагрузке от 50…70 процентов от номинала блока питания последний начинает греться, искажается форма напряжения на его выходе;
г)нагрузка на блок питания — эпизодическая;
д)блок питания может плохо вентилироваться (охлаждаться);
е)после определённого порога, цена блока питания не сильно увеличивается при увеличении его мощности;
ж) другие «сферические факты в вакууме»;
я вывожу «среднюю температуру по больнице» — не менее 20А (12 вольт 20 ампер). Да простит меня kirich. Куда подключать «плюс» и «минус» к лентам?
«Плюс» подключается напрямую ко всем лентам, «минусы» будет «выдавать» контроллер, к каждой ленте свой индивидуальный. Когда и как настраивать DC-DC преобразователь?
При помощи подстроечного резистора получить на выходе 5 вольт. «Запас» давать ни к чему. Настраивать его нужно как можно скорее, желательно даже перед запайкой на плату, потому как при первом же включении, когда все компоненты платы будут на своих местах, это делать будет уже поздно – «очень невкусно запахнут микросхемы». Также желательно зафиксировать положение подстроечного резистора в положении 5 вольт при помощи, например, лака для ногтей. Есть ли замена сонарам, чтобы они работали стабильно?
Да, я исследовал следующее поколение сонаров. Их полное название SRF05. Они работают намного стабильнее предыдущего поколения, мне не удалось их «зависнуть». Новое поколение сонаров имеет 5 контаков вместо четырёх у предыдущего поколения. 4 из этих пяти контактов полностью повторяют функционал сонаров предыдущего поколения, а пятый просто оставить «висеть в воздухе». Повод ли это избавляться от механизма ресета на транзисторах BC547? Кому как нравится, можно и избавиться. Но я бы оставил их на месте, потому как качество изготовления сонаров имеет свойство ухудшаться. Следовательно, не ровен час, и 5-ое поколение сонаров начнёт показывать чудеса экономии на производстве. Также это не нанесёт большого финансового ущерба при изготовлении готового продукта. Если всё же решено избавиться от транзисторов, то нужно (минимально) произвести следующие действия:
— не запаивать транзисторы BC547 и резисторы рядом с ними (1 кОм и 10 кОм);
— от «левого» отверстия посадочного места под транзистор запаять перемычку на «правое» отверстие посадочного места (перемычка от коллектора до эмиттера). Третье отверстие (базу) оставить, как есть.
6) Код в очередной раз актуализирован. Спасибо Stanislav73 и его другу Алексею.
7) Код снова актуализирован. Исправлена неочевидная проблема, которая проявлялась в виде непогасания последней ступеньки в случае, если количество ступенек — нечетное и/или значение «дежурной яркости» отличалось от значения «2».
8) В связи с переходом сайта заказа плат на новый дизайн перестала работать ссылка для заказа. Исправлено.
9) Добавлена схема для использования с PIR датчиками вместо сонаров. Переработан код скетча: теперь он стал универсальным для PIR и сонаров, выбор необходимого производится редактированием определения SensorType в заголовке скетча.
Планирую купить+217Добавить в избранноеОбзор понравился+144
+324
Автору респект) хочу повторить. но есть вопросы хочется добавить фоторезистор и один режим-
— вкл нагрузки LED например с (№1 СОНАРА ) после того как один из сонаров например (№2 СОНАРА ) зафиксировал что человек вышел из зоны. т.е человек поднялся по лестнице- за ним происходит плавное выключение led **суть автора, его хорошей идеи*** но хотелось бы добавить еще 1 режим т.е
Следующий поднимающийся или в тоже время спускающийся человек смогли бы попасть в освещенное место led светодиодами, т.е идущие друг к другу могли одновременно увидеть как подними загораются все пролеты лестниц, как бы не обидеть 2го человека))) на видео автора я такого режима не увидел, может и прописано в коде, но тоже не заметил беглым взглядом…
Кто может подсказать ?? придется весь алгоритм из-за этого менять? или просто есть возможность дописать?)))) Всем спасибо) тема реально очень актуальна!
Честно говоря, не понял, как должен работать фотодатчик.
По поводу встречного включения ступенек — ответ да :) Это уже реализовано. На видео это нет. Пусть будет бонусом.
Классная идея. Тащемта, думаю, на прямой лестнице можно поместить два дальномера так, что они будут сечь расстояние до объекта, и подсвечивать/тушить лестницу по мере его продвижения по оной.
А по поводу иде ардуиновской — аццки сложных проектов на ней не создашь, посему и такой функцинал, о мне так тулчейн гораздо геморнее себе делать начинающему. Я, при необходимости, и пользуюсь то ородруино иде, то мбедом, вообще не заморачиваясь с этими билдерами мейкерами компиляторами и др.
Очень понравилось!
Интересно, доживу ли я до того дня, когда хоть где нибудь объяснят как пользоваться ардуино, только на понятном языке? Для человека, не понимающего в программировании.
Или хотя бы с чего начинать.
Надо будет посмотреть, надеюсь это мое. Пытаюсь написать скеч, для слежения за солнцем СБ. Сперва было грустно (для меня это первый раз), потом «чем дольше, тем дальше». С программированием контроллеров: Альфа Mitsubishi и Siemens LOGO! проблем не было. Хотя в любом случае должна быть набросана блок-схема.
«До чего техника дошла». В восьмидесятые годы, у друга в под'езде при входе и на каждом этаже стояли кнопки. Нажимаешь, слышишь как ОООчень (вечером в под'езде) громко срабатывает магнитный пускатель и включается свет. Задержка бала на время, достаточное подняться среднему человеку до последнего (пятого) этажа.
Автор гениален, давно слежу за проектом с Хабра выросшим в коммерческий и уже пару раз чуть не купил, но жаба-жаба… Спасибо большое!
Но сходу вопрос. Всё повторить по этой подробнейшей инструкции у меня точно получится, собирал уже по мануалам различные подобные поделки, травил ЛУТом, шил программаторами и т.д. но вникнуть и разобраться как увеличить количество ступенек (в аппаратной части) — может быть затык. Может быть будет где-то гайд по этому поводу… Был бы очень благодарен!
Спасибо большое! Почитал, что заказ выходит минимум 10 плат. Но нужна только одна :-( бюджетность на этом порядком съедается. Делать на продажу, чтоб оправдать затраты конечно же менее прикольно.
Да, есть такой нюанс. Однако, для успокоения души могу сказать следующее. Есть китайские сайты, которые за эту же цену предлагают только 3 платы. Хоть утешение и слабое, но простая математика показывает, что 10 лучше 3. Как минимум на 7 :)
В качестве мозгового штурма: если есть необходимость в подсветке лестницы, то, вероятно, есть и дом с этой лестницей. А дом, вероятно, не среди небоскребов расположен, а в садовом участке / деревне / поселке и т.д.
Т.е. вокруг тоже окружен домами.
Идея: реализуем подсветку, хвалимся перед соседями, за разумную мзду (пиво / коньяк и т.д.) и оплату запчастей реализуем для них.
Разумеется я подумал об этом. И план рабочий, только вот одно но. В основном всем надо решение «под ключ», а не голая плата. А моя работа «под ключ» слишком дорого будет стоит, чтоб я стал её делать. Вот такой парадокс :-)
Ну и ещё беда, что был соблазн готовую плату, как у автора заказать, но 12 ступенек реально мало, надо хотя бы 16 или 18 (чтоб всем подошла-то) и была более универсальной. А это уже переделка проекта, переделка макетки, ловля граблей из-за своей криворукости и отсутствия практики и т.д. Так что так и останусь я мечтателем, похоже, пока кто-то не поделиться хотя бы рабочей разводкой платы на 18 ступенек…
Очень грамотные доводы. Понимая, что 12 каналов — мало, а драйвер позволяет подключать до 16 каналов, я и предусмотрел варианты на будущее. Предлагаемая плата как раз и разведена под 16 каналов :) Присмотритесь к плате внимательнее.
Про 12 каналов я упоминал именно в контексте «прошивки», где количество каналов я прописал в 12. Как Вы понимаете, поставить любое другое нужное число из диапазона 2...16 не составит труда.
Некоторые rigid panel (ленты на алюминиевой плате) легко просадят ампер-полтора. ULN-ки могут «протащить» лишь по пол-ампера на канал. И будут греться.
Безусловно, кому не нужны такие нагрузки, запросто могут использовать ULN.
Интересная задумка, но вот схемотехническое решение сильно усложнено.
Я бы предложил существенно сократить схему, убрав всю правую часть, начиная с инверторов. Судя, по даташиту, на выходе драйвера до 50ma на каждый канал — так что каждый выход притягиваем резистором не к 5В а к 12 и ставим в верхнее плечо P-канальный полевик. Даже при 1,5А сюда можно вполне поставить что-то в корпусе sot23. Хотя, я бы рекомендовал что-то чуть крупнее. И драйвер можно тоже смд посавить — плату тогда можно будет уместить в «стандартные» 50х50мм
Ради интереса, набросал такую реализацию выходов на полные 16 каналов
Размер платы можно значительно уменьшить, особенно если использовать полевики SOT23 (IRLML2244, IRLML9301 и т.п)
Ну и резистор, я бы рекомендовал хотя бы 1К. Чтоб фронты на закрытие были норм.
Также как развитие идеи упрощения для конкретной задачи — убрать и драйвер. По сути тут не надо независимое управление 12 каналами ШИМ. 1 канал — активный, оастальные либо включены на 100% либо выключены. Тут вполне подойдет программно-аппаратная реализация на той же меге. Ну и транзисторы тогда N-канальные — что выгоднее.
Также как развитие идеи упрощения для конкретной задачи — убрать и драйвер.
Что и было предложено ниже
Ну и резистор, я бы рекомендовал хотя бы 1К. Чтоб фронты на закрытие были норм.
Согласен, но тогда лучше 3,3-4,7кОм чтобы его не греть. Тем более у мелких полевиков входная ёмкость невелика (400пФ), и частота ШИМ не превышает 500Гц
Как первый проект — весьма неплохо.
Лично я бы схемотехнику сделал гораздо проще: на 12 каналов Arduino Micro + ключи IRF3205, IRFR3708 или подобные
При этом не нужны 74LS04, TLC5940, радиаторы
Если нужно больше каналов — использовать STM32F103C8T6 (хватит до 24 каналов)
В идеале — подробнейший отчет, как у автора, с более совершенной схемотехникой чтоб самому не бродить по граблям без должного опыта. Но я понимаю, что это нереально :-)
Заменчание принял. Я тоже рассматривал схожие варианты. Меня остановило отсутствие адекватной возможности использовать 12 каналов ШИМ на Arduino. А если понадобится больше? 16, например? А если ещё больше?
Если контроллер больше ничем не занят — да, неплохо. Но применительно к экономии $1 за 16-канальный драйвер с аппаратным ШИМом — сомневаюсь. Про STM-ы — вопросов нет. Они быстрее, но и писать «под них» сложнее. Я только вот первый проект Arduino выложил…
Если контроллер больше ничем не занят — да, неплохо
Можно сказать, что у Вас контроллер почти ничем больше не занят :)
Кстати, ШИМ лучше делать нелинейным, чтобы визуально яркость менялась плавно
Там зависимость квадратичная www.russianelectronics.ru/leader-r/review/2195/doc/57568/
Согласен и с этим. Даже больше — по-хорошему ШИМ нужно подбирать по эффективному значению тока в ленте для каждого уровня яркости, а не эффективного напряжения. Но в моём проекте всё упрощено с целью максимально простого восприятия кода. Код намеренно выложен в открытом виде, чтобы кто-то, при желании, мог его доработать «под себя». Если возникнет такая необходимость.
как раз данный тип диммирования дает линейную зависимость между коэффициентом заполнения ШИМ и средним током. Тут скорее вопрос в том что светодиоды в ленте нелинейно светят относительно тока. Могу только предположить, что линейный участок будет 0..(60-80)%, а дальше уже просто идет в нагрев
Проектов не то, чтобы много, но они есть. Некоторые — весьма узконаправленные. Некоторые — более универсальные. Искренне буду искать время и возможность поделиться последними с пользователями MySKU.
у меня вот в голове засела идея сделать управление отоплением по всему дому на ардуине т.к. все те проекты, что находил — не совсем подходят. оно и понятно — дом дело очень индивидуальное, а уж его СО так вообще )))
даже закупился всякой всячиной, но что-то никак не доберутся ни руки ни голова до этого моего ПЕРВОГО проекта :)
… а сложности есть — 2 этажа, 5 комнат, теплые полы, ванная, туалет, ГВС, и всего один насос и все это на допотопном АКГВ-29 без электроники вообще )))))
уж даже сомневаюсь — потянет ли ардуинка?
кстати о простых… Не попадались часом проекты мультиварок? Давно хочу самую мелкую и бестолковую вразумить. Понимая, что ничего сложного, но не хотелось бы топтаться по уже хоженым граблям. Да и алгоритмы готовки велосипедить. Я не про программную часть, а физиологическую — сами производители предпочитают умалчивать.
1. Я не собираюсь ничего изобретать, я планирую модернизировать имеющиеся.
2. Да, мультиварки управляемые по вайфай, с загрузкой рецептов действительно существуют и продаются. Но я бы не сказал, что давно и недорого.
3. Среди них однозначно нет мелких, на полтора литра. А мне нужна именно такая. Она у меня даже есть, но пользоваться ей из-за совершенно бредового софта практически нереально. И речь в каменте шла именно о о ней. Мало того, у остальных с алгоритмами — тоже беда-беда. Это я как владелец трех разных утверждаю( а еще парочка через мои руки мельком проходили).
И да, мне не нравится идея отдавать лишние 10-20 тысяч за сопливые бредни маркетологов… :)
управлять термоголовками клапанов в привязке к циркуляционнику. при срабатывании команды на открытие какой-либо термоголовки должен(с задержкой в 2-3 минуты, дабы не получить гидравлическое КЗ) включаться насос(если он еще не включен от другой команды)
в дальнем зАмысле — внедрить газовый клапан от термопушки в котел и управлять температурой теплоносителя в зависимости от температуры и ветра на улице(погодное регулирование).
это по отоплению
с ГВС сложнее. здесь зависимость от температуры котла, воды в контуре и накопителе гвс и наличия расхода воды.
Думаю, ничего принципиально сложного в Вашем будущем проекте нет. Уверен, производительности Arduino хватит «за глаза». Единственная потенциальная проблема, как я её вижу, заключается в том, что устройства «раскиданы» географически. Следовательно, Вам нужно решить, как Вы их будете подключать к контроллеру: будет ли это радиоканал, сеть (если сеть, то какая). Также ввиду высокой степени ответственности нужно продумать настройки по дефолту и действия контроллера на случай, если данных от нужных датчиков внезапно нет. То есть продумать устойчивость к аварийным ситуациям, отказоустойчивость.
А если человек остановится поговорить с другим около датчика перед лестницей. Разговаривая он может пошатываться или даже немного перемещаться отходя от зоны чувствительности датчик и возвращаясь к нему.
Как будет вести себя подсветка лестницы?
Также хочу обратить Ваше внимание, что, имея всего 2 сонара по краям лестницы, очень сложно симулировать и предсказать модель поведения людей на лестнице. Очень сложно. Поэтому приходилось постоянно упрощать модель до допущений.
Спасибо.
Рад, что кому-то обзоры нравятся. Полностью согласен с Вашим списком интересных авторов, но считаю, что многих в этом списке не хватает. Хотя понимаю, что всё субъективно.
К сожалению, редко нахожу время читать mysku, и не знаю всех достойных авторов. Но с давних времен читаю ksiman'a и kirich'a, и всегда точно знаю наперёд, что их обзоры будут интересны и познавающи ( хоть и не всегда понятны:-)), поэтому они в моем списке.
Здравствуйте.Собрал схему по Вашему описанию, всё работает, но с одним недочетом.При выключении сверху вниз, нижняя(первая) ступень остаётся гореть.Подскажите как это исправить.
Второй плюс подряд одному и тому же автору :)
Вообще идея «волновой» подсветки витала в воздухе — если припомнить старые фантастические фильмы, то там это встречалось довольно таки часто.
Я даже в каком то обзоре про подсветку не помню где даже написал, что так и ждал там «волны».
Но реализовать непротиворечивый алгоритм при использовании двух датчиков вряд ли удастся — хотя и хрен с ним.
Если в половине случаев все работает верно — а передвижение двух человек навстречу друг другу (про одиночного пешехода я вообще молчу) перекрывает заметно больше половины возможных случаев — не вариантов, а, скажем так, вариантов помноженных на вероятность их возникновения — то и хрен с ним.
Остальное — это уже просто если ради интересу делать, только усложнение и удорожание проекта.
А так — получилось довольно оптимально, на мой взгляд.
Кстати, о вероятностях…
Снял один математик даму, утром ей захотелось показаться поумнее, и задала она вопрос:
— Дорогой, а что такое теория вероятности?
— Ну, как тебе сказать… Вот подойди к окну — ты видишь пустую улицу. Наверняка скоро появится пешеход, это будет или мужчина, или женщина. Вероятности этого равны.
Может подряд появиться двое мужчин или две женщины — но вероятность этого намного меньше.
Конечно, может случиться и так, что подряд пройдут сто мужчин или сто женщин — но вероятность этого очень мала, и вряд ли такое случиться. Понятно?
— Ага. — сказала дама.
… в это время послышалась музыка и из за угла показался полковой оркестр…
Но не будем рассчитывать на то, что по лестнице в одну сторону (или встречно) пройдет полк :)
Кстати, я бы не сказал, что
без них будет выглядеть депрессивно-дёшево
это про панельки для микросхем.
Скорее все таки наоборот — панельки фактически используют только при отладке, иногда — если часто летит какя то микросхема, хотя если она летит — это просчет разработчика.
А без панелек плата принимает законченный, промышленный вид.
Я запомнил только одно «чудо», напичканное панельками: ЕС1845.
Там применялись как наши, цельнослизанные микросхемы, так и буржуинские, которые слизать не успели.
Наши были, как и положено, с шагом выводов 2,5 мм, буржуинские — 2,54 мм.
И колодки были двух видов — 2,5 и 2,54
Но я до сих пор не могу понять, почему микросхемы с шагом 2,54 стояли в колодках с шагом 2,5 и наоборот…
Приходилось примерно раз в неделю доставать платы и прожимать все мелкосхемы.
Кто помнит конструктив 1845, тот поймет — это куча винтов, крепящих платы в корзине, и куча прикрученных раземов с кабелями на торце каждой (почти) платы…
Скорее все таки наоборот — панельки фактически используют только при отладке
Во-первых, хочу Вас поблагодарить за столь полный и развёрнутый комментарий. Приятно читать: очень хорошо и аргументированно изложено.
Во-вторых, хочу пояснить, почему я так сказал по поводу панелей. Попал недавно ко мне в «поле зрения» старый компьютер. Западной сборки, к сожалению не обратил внимания на марку. Кстати, 286-ой. Ровесник ЕС-ок, так сказать.
И как же приятно было заглянуть вовнутрь! Панельки для видеопамяти (VGA!), панельки для двух микросхем биоса (с ультрафиолетовым стиранием, с позолоченными ножками, в керамическом корпусе), панельки ещё чего-то там… И я вспомнил, как делают нынешние компьютеры, особенно бюджетные. Сразу понимаешь, что тот 286-ой делали «на века», не экономя. Это настолько глубоко впечатляет! Тяжело забыть «ту» картинку, «тот» привет из конца восьмидесятых — начала девяностых…
Кстати, я действительно забыл упомянуть про такое использование панелек, как у Вас написано.
Действительно — там, где использовались ПЗУ — либо с УФ стиранием (незабвенные 573РФ..., 51-е микроконтроллеры, и не только они — были MSP430 с УФ, даже Altera в 90-х выпускала ПЛИС с УФ стиранием, 18хх какая то, уже не помню), либо и с электрическим — как тот же БИОС часто ставили в свое время на панельки, не всегда получалось прошить утилитами на плате — приходилось на программаторе (иногда приходилось и выпаивать).
Вполне оправдано.
С ОЗУ и прочим — скорее всего, модификации: можно в ту же разводку поставить другую микросхему с юольшим объемом памяти, к примеру — наклепали плат и потом продают по разной цене в зависимости от установленной микросхемы.
Но в этом случае все таки нет законченного вида, типа вот мы сделали полуфабрикат — а под Ваши требования можем по быстрому на его основе…
А насчет 286-ой делали на века…
Да, они были заметно надежнее.
У них были гигантские по нынешним меркам технологические нормы.
У них была тактовая частота… по сравнению с нонешней — постоянный ток :)
У них было мизерное количество вентилей на кристалле — опять же по сравнению с сегодняшним днем.
Сейчас мы имеем современный уровень миниатюризации, интеграции и прочих… ций, соответствующее быстродействие и соответствующую, к сожалению, надежность.
Когда то мне попалась такая фраза: программируемый калькулятор уровня Б3-21 можно было сделать на лампах.
Просто повторив всю схему один в один.
Только по той же теории вероятностей сразу при включении вылетит одна из ламп, и пока будут искать неисправную — вылетит еще несколько.
Так что за все приходится платить, в том числе за миниатюризацию и интеграцию — надежностью.
И вряд ли при нашей жизни что то измениться, да и после нашей…
если честно, видел мало домов(вернее не видел вовсе) по лестнице которого шли бы одновременно навстречу друг другу два человека(если только это не дети играют). обычно один ожидает, когда пройдет другой. А вариант дворцов с потемкинскими лестницами не для этой самоделки ;)
Максимальный ток цифровых пинов Arduino Nano (и других) — 40 мА. Рабочий ток HС-SR04 (по даташиту) — 15 мА. Только я не понимаю, зачем нужны транзисторные ключи?
Как я уже писал в теле обзора, они нужны для того, чтобы «ресетить» подвисающие сонары. С этими сонарами (HC-SR04) бывает, что возникают такого рода проблемы — качество изготовления у них «не торт».
UPD: вот подробности, если интересно: http://forum.arduino.cc/index.php?topic=55119.15. Читать за 2015 год.
Можно. Но часто зависают не оба, а один. К тому же контроллер допускает использование, например, PIR датчика. И не факт, что их будет 2: с одной стороны может быть, например, PIR, а с другой тот же HC-SR04. Ресетить PIR с его временем инициализации просто «заодно» — кощунство. Я предполагал наиболее универсальный вариант. К тому же при цене доллар за 50 штук экономить транзисторы не имело смысла.
Внешней подтяжки нет. Внутренняя в Arduino по дефолту не включается — её нужно включать отдельно записыванием в порт, являющегося в данный момент входом (пином).
Думаю, управлять каждым отдельным светодиодом каждой отдельной ступеньки — это чересчур. А если общее количество светодиодов будет большим, скорость обновления будет практически никакой. Если я правильно понял, какие именно ленты Вам предлагали. Но даже это всё — ерунда, по сравнению с общим током потребления всех этих светодиодов, причём при 5 вольтах. Будут гигантские потери в проводах…
всем привет!
Я с год назад тоже делал аналогичную подсветку (на столе, т.к. в доме еще ремонт) и помнится меня очень напрягало то, что во время режима ожидания, видимо от сонаров, слышны щелчки, в полной тишине достаточно навязчивые… Кошка тоже сидя рядом ушами водила — слышала…
Поэтому мне пришлось «уйти на оптику» — на ик-дальномеры.
А вас не раздражают щелчки от сонаров?
На видео от Лукьянова они тоже слышны…
На мой взгляд, это лучший (или один из лучших) обзор, который я читал на mysku.
Сам предмет обзора мне не очень интересен, но стиль изложения, обстоятельность, логика — однозначно лучшие.
Отмечу единственный минус — видео крайне неудачно, из-за того, что сонары ушли за левую границу кадра и потому пересекающую их руку почти не видно, а также потому, что поясняющий текст во второй половине видео почему-то не синхронен действиям.
Конечно, было бы здорово видео переснять.
Также, по просмотру видео у меня появились вопросы:
продемонстрированные реакции на пересекания — это все, что умеет контроллер, или там заложены и более сложные алгоритмы?
Например, если человек дошел до середины лестницы, но потом решил вернуться обратно?
Или, два человека шли навстречу друг-другу с небольшим сдвигом, т.е. сонары сработали так: верх-низ-пауза-низ-верх?
если человек дошел до середины лестницы, но потом решил вернуться обратно?
При пересечении нижнего датчика однократно будет игнорироваться только верхний, но в пределах таймаута (можно изменить, но только в «теле» кода). Далее, будет зависеть от времени, затраченного на подъём до середины и спуска обратно (настроить время задержки полностью включённой лестницы в «заголовке»). Нижний датчик вероятнее всего сработает, потому что вряд ли подъём до середины лестницы и спуск обратно займёт меньше 1500 мс (это таймаут блокировки сонара, настраивается в «заголовке»). Но это срабатывание нижнего датчика, не приведёт к новому циклу загорания снизу вверх, если человек «уложится» во время задержи полностью включённой лестницы (по дефолту, 7 сек, можно изменить в «заголовке»). Только погаснут ступеньки потом снизу вверх. Это ограничение, обусловленное использованием всего двух сонаров по краям лестницы.
А если сонары разместить под перила? И не 2, а скажем 1 на 2-3 ступеньки?.. Так получится подсвечивать отдельные зоны, проще будет предугадать положение следующее.
Автор супер!!! только ради этого зарегался )))
Дружище я в этом не бум бум, а если я оплачу ваши расходы и работу могли бы вы мне смастерить такую штуку ???
Спасибо за отзыв. Что касается Вашего вопроса — ответ Извините, но нет. Я объясню, почему.
Как я писал в обзоре, даже такой относительно простой проект я готовил около года. Он имеет статус хоббийного. У меня действительно мало свободного времени. К тому же я не планировал на проекте зарабатывать, «портить» его коммерческими рельсами. Именно поэтому я выложил все детали по нему в открытый доступ. Но я, понимая, что возможно кто-то захочет повторить проект, расписал всё по нему настолько подробно, насколько это было возможно.
Прошу меня понять.
Только сегодня увидел Ваш обзор. Очень впечатлило. Тоже заказал кое-что из Ардуино. Хочу сделать контроль температуры-влажности в серверной (для своего спокойствия) с выводом по Ehernet на гаджет на экране монитора. Пока жду железки.
По поводу алгоритма (логики) зажигания-гашения подсветки лестницы: Использование еще пары сонаров сильно упростило бы задачу — 2 вверху и 2 внизу. При анализе срабатывания пары сонаров вверху или пары внизу лестницы, расположенных последовательно, можно делать вывод о направлении движения человека. Тогда сделать счетчик людей на лестнице (растет при пересечении сонаров от края лестницы к середине и уменьшается при пересечении от центра лестницы к краям). Подсветку не гасить, пока на лестнице есть люди, начинать гашение при нулевом счетчике со стороны противоположной от последнего пересечения. Тогда должно правильно работать даже если человек зашел на лестницу, постоял, развернулся и ушел назад. Счетчик все равно обнулится и подсветка начнет гаситься.
Недостаток данного решения — если 2 человека будет пересекать пару сонаров параллельно (один скрывает другого), и сонары их посчитают за одного человека. Но это должна быть широкая лестница. Ну и удорожание проект на 3.36$
Спасибо за развёрнутый комментарий. Безусловно, рациональное зерно в Ваших словах есть. Приятно, что обзор стимулировал рождение новых мыслей и предложений.
При программировании Arduino лично я пользуюсь Sublime Text. Попробуй.
И еще вопрос в uno/nano и иже с ними при подаче питания через vin и т.д. на + в usb порту есть питание? Все забываю проверить.
Единственное я пока не нашел дерево функций/процедур/переменных, немного не удобно пеерзжать. А так же не нашел плагин который позволяет прыгать по Ctrl+ЛКМ на функцию/процедуру/переменную под мышкой. В делфях очень привык к этому и жить без этого не могу. Очень много времени во время отладки уходит на поиск функции.
А не подскажите, куда можно воткнуть в этой схеме фоторезистор с подстроечником, чтобы это устройство только вечером начинало работать? Сам в электронике не силён. Спасибо!
Просто охренеть можно, до чего довели людей эти ардуины!
Полистайте подшивки старых Радио или «В помощь радиолюбителю» — раньше, в 70-е годы, подобные «проекты» делали на транзисторах, реле или тиристорах.
А тут алгортимы, софт, микроконтролер — из пушки по воробьям!
Позорище, люди разучились делать вещи просто и со вкусом…
Немного не понимаю Ваших доводов.
По-моему, контроллер за 2 бакса позволяет как раз-таки избавиться от «вороха» запчастей, которые занимают немалый объём, стоят денег и потребляют немалый ток. Более того, в контроллере всегда можно изменить алгоритм под себя, а вот с «аппаратной» реализацией в куче деталей всё намного сложнее.
Человек застрял в 80-х, и не понимает преимуществ МК перед аналогом.
Или просто не хочет изучать программирование.
Естественно, есть задачи, с которыми дискретные схемы гораздо проще и надёжнее. Но чем больше проект, тем сложнее и дороже его реализовать таким образом.
Автор молодец! Удачи в дальнейших проектах:) Спасибо за баг HC-SR04, не знал о нем — на основе их (WinAVR, прототип на основе модулей arduino) скоро буду робот-косу собирать)))
на тему робокос с робофорума? или еще что придумали? Я тое давно мечтаю, особенно после покупки робота-пылесоса… но платить те деньги, что просят за робокосу та же макита меня душит жаба.
Наверное, было это давно… нашел все нужные моторы, сделал мотор-колеса, сделал деку для установки 2-х ножей, придумал как ее закрепить и как закрепить моторы, но так и не сделал шасси и не повесил весь придуманный обвес…
Собрал на основе модулей ардуино электронику (Mega2560, 8 шт. HC-SR04, несколько оптических датчиков для отслеживания возможных ям, несколько концевиков для подъезда к препятствию вплотную, LM386 для работы мотор-колес, полевик для работы моторов-кос, ИК датчик для дистанционного управления). Не все железо разместил на прототипе. Предусмотрел кнопку экстренного отключения.
Из софта — написано много всего. Обработка информации со всех 8-ми дальномеров, обработка ИК-команд с пульта управления, формирование ШИМ-команд управления для мотор-колес. Сделал меню, где задаются расстояния до препятствий при которых нужно отрабатывать алгоритм перемещения и что-то ещё… Написал алгоритм перемещения «змейка».
И… все забросил… поскольку времени на это больше нет(. Вот бы кто-нибудь доделал мой прототип — я бы софт по ночам писал бы)
подумалось тут: вот есть светодиоды со встроенным контроллером ws2811. если существуют такие контроллеры в виде микросхемы, а в идеале — с выводами для подключения транзисторов, а не светодиодов непосредственно, то вся конструкция сразу становится на порядок интереснее. то есть у нас идет два силовых провода и один управляющий, а на каждой ступеньке стоит контроллер фактически на одной микросхеме и транзисторе (ну или каком-нить мощном оптроне). при желании можно поставить три транзистора и замутить RGB — опять же, всего ТРИ провода, и индивидуальное управление каждой ступенькой. ну и управляет всем этим богатством та жа ардуина, только для управления используется всего один вывод. плюсы видятся в резком уменьшении числа проводов, что критично для лестниц с большим количеством ступенек и/или лестниц с «ажурной» конструкцией, где провода особо некуда прятать, ну и возможность простого апгрейда до RGB. минус — некоторое удорожание системы, ну и некоторое снижение надежности — обрыв управляющего провода в середине цепочки — отключит все последующие ступеньки. еще как вариант, конечно, на каждую ступеньку установить просто запараллеленные светодиоды со встроенным контроллером, что исключит наличие внешнего контроллера для каждой ступеньки, но вся система при этом уже заметно подорожает…
Доброго времени суток. Заинтересовался проектом, но как человеку далекому от электроники, объясните пожалуйста, какой толщины нужно использовать дорожки на печатной плате? Делаю на одностороннем текстолите, схему нарисовал в diptrace, толщину дорожек выбрал 0,75мм, нагружать по 5А на каждый транзистор естественно не собираюсь, для теста возьму небольшие отрезки светодиодной ленты, но вдруг придется…
Я пользуюсь Sprint Layout, при выделении дорожки в которой можно посмотреть предельно допустимый ток. Если кратко, то при «стандартной» толщине меди на текстолите и известной ширине дорожки можно посчитать сечение проводника. А зная сечение и материал (медь) — предельно допустимые токи. Это в идеале. Что касается Вашего вопроса — 0,75мм — предельно допустимый ток — 2 ампера, хотя больше одного я бы нагружать не стал. Для 5 ампер ширина дорожки — минимум 2мм. Следуя той же логике, я бы сделал миллиметра 3...4.
Чувак ты сильный!
ты меня вдохновил.
Буду своим двум мальцам светофор собирать! на рынке купил индикаторы 3х цветов — для промышленности сразу со светодиодами. купил ардуинку за 2,5 бакса и корпус пластиковый за 0,5 бакса. многое из обзора подчерпнул — спасибо.
Добрый день! Уже заказал платы (по Вашей ссылке, 10 шт.), сижу, заказываю комплектующие. Я вроде понимаю, но уточню на всякий случай: две дип-панели (DIP-14, DIP-28) ведь не обязательно нужны? Извините за столь наивный вопрос, электроникой занимался в далеком детстве и боюсь, что за столько лет может я что-то пропустил :-) Могу я без панелек просто микросхемы в плату запаять?
Друг строит дом с баней, рассказал ему про Ваш проект, буду экспериментировать на его банной лестнице в мансарду. У меня весной тоже планируется 2-х этажное строительство, если на бане эксперимент пройдет успешно, буду повторять!
Перечитал статью еще раз, увидел, что панельки не обязательны.
Подскажите пожалуйста для «особо талантливых» как «залить» программу в контроллер? Хотя бы направление — в какую сторону «копать»?
И, если это не будет сильной наглостью, сфотографируйте пожалуйста крупно готовую плату с впаянными деталями с разных ракурсов. Очень боюсь наделать ошибок при монтаже.
Он не обозначен. Он просто подразумевается, так как в схеме используется только 2 напряжения: 12 и 5.
5 как раз получается на выходе dc-dc, на его вход, соответственно, подается 12в.
Поправьте ошибку в схеме. Согласно даташиту на http://radio-hobby.org/uploads/datasheet/37/74ls/74ls04.pdf, а в моем случае к555лн1, входы должны быть 1,3,5,9,11,13. Не посмотрел сразу — собрал, стал проверять — половина каналов не работает.
Все верно. На руках была только ардуино уно и отсуствие опыта изготовления плат, так что решил начать с простого. Разделил схему на 2 части: блок управления (5940 и инверторы) в виде «шилда» для ардуино и блок с транзисторами. Все на одностороннем текстолите для простоты кустарного изготовления.
Отличный проект. И как раз вовремя. В доме делаем как раз лестницу. Попробую реализовывать. Заказал все по ссылкам. Платы уже пришли. Остальное в пути. Спасибо.
P/s Из 10 плат мне нужно только 5. Если кому то понадобится оставшиеся в Москве. Напишите в личку.
Схема приведена в обзоре. Проекта разведённой платы для одностороннего текстолита у меня нет. Свою первую попытку я сам же давно «забанил». Думаю, придётся самостоятельно её разводить в Sprint Layout, например.
Здравствуйте Виктор! Заинтересовался Вашим проектом, вытравил плату, собрал.
Вот только досада, не могу залить скетч!? Выдает ошибку компиляции.
В ардуино я новичек, прошивки заливал через программаторы без проблем, а вот с ардуино стопор.
Может, подскажете как правильно сделать? может до скетча нужно что-то еще проделать?
Заранее благодарен за любой ответ!
Виктор, огромное спасибо!!! Все получилось. Да действительно, нужно было скопировать скриншот прямо с сайта. А вот с архива ну ни как не получалось. Здоровья, удачи, всех благ, Вам и Вашим родным!!!
Дальше нужно установить драйверы на Arduino, залить скетч в Arduino и вставить его в готовую спаянную плату. Как заливать скетчи в Ардуино, лучше смотреть в видеоуроках на youtube.
Добрый вечер. Не подскажете как изменить программу что бы включить проверку датчик освещения (что бы когда светло подсветка не работала (впустую не работали сонары ))? В наличии есть аналоговый и цифровой датчик освещенности. Если программно трудно то может аппаратно? Спасибо.
Спасибо за ответ.
Пробовал данный вариант но не смог получить нужную чувствительность (срабатывает при прямом за свете датчика).
Подскажите пожалуйста:
1. Номинал подстроечного резистора?
2. Из Вашей оригинальной схемы нужно убирать резистор 10к (между BLANK и DCPRG) при использовании датчика освещенности?
Датчик освещенности такой arduino-ua.com/prod184-Datchik_osveshhennosti.
Так же заметил что при определенном уровне освещенности происходит частое («моргание»(дребезг)) включение-выключение подсветки. Как можно это устранить?
Спасибо.
Тоже не лишено недостатков.
А если я поднимался, но на середине лестницы решил вернуться?
А если я бабуля или маленький ребёнок, который медленно поднимается?
Я бы сделал датчик на каждой ступеньке и при срабатывании n-датчика зажигал бы n+1 и n-1 ступеньку. Не думаю, что поставив ногу на ступеньку, кому-то нужно продолжать её освещать. Освещаются только нижняя и верхняя от сработавшего датчика. И вопросы с двумя, тремя,… семью людьми на лестнице больше не возникают в каких направлениях они бы не шли.
Во-первых, ни кто вас не заставляет делать все «под копирку».
во-вторых, зачем на каждую ступень ставить сонар, можно сонар расположить продольно пролету ступеней и «играть» дистанцией, который выдаст сонар.
Добрый день Виктор.
Спасибо за замечательное описание.
Есть вопрос. А если всё-таки ставить IRLZ44N, то радиаторы на них тоже нужны или сами справятся, если в районе 5 Ватт на канал (1м. 3528/60 ленты)?
Не сильно хочется нагромождать. Если нет, то какой выход есть без радиаторов?
Ещё раз спасибо!
Виктор, здравствуйте! Спасибо за столь замечательный обзор! Хотел бы попросить помощи при переделывании скетча под PIR датчики, от каких переменных надо будет избавиться и какие части кода можно будет убрать, да и вообще реально ли это сделать на основе Вашего скетча:). Понимаю, что многое просто не нужно будет при использовании инфракрасников. Заранее спасибо!
Добрый день, собрал данный проект. Спасибо автору за его труды. Собрал на плате заказанной на заводе выкупленной у Lisk120, тоже отдельное спасибо. В процессе сборки столкнулся
с нехваткой питания на датчики вели себя некорректно(жили своей жизнью, ложные сработки иногда постоянно в сработке).Кабель который использовал для подсветки КСПВ 14х0,4 его сечения хватило только на ленты. (Использовал так как он был в наличии).НА датчики прокинул Кабель КВК-В-2 2х0,75 (остатки от видеонаблюдения). Запитал все от блока питания от компьютера.
Спасибо Автору за данную тему!
Решил себе «обновить» лестницу и давно была идея сделать с подсветкой. Сейчас делаю новые ступеньки вот и наткнулся на данный топик. Все подробно описано и выложен код. Покупать по 50$ уже хотел готовый, но сейчас задумался :) 10 штук мне не надо конечно, поэтому вопрос — мб кто покупал себе и есть лишние платы? Или может скооперируемся и закажем (из РБ)?
Добрый день! Очень интересный проект!!! Скажи пожалуйста, можно ли запитать ленты и ардуинку через соответствующие каналы компьютерного БП ATX? Или же необходимо вносить изменения в схему БП? Очень удобный вариант… также где-то читал, что для ардуинки нужно стабилизированное питание, кое, как я знаю и даёт БП.
И если можно, то какой вариант будет лучше… брать питания 12В, делать переходник (использую ардуино уно) dc jack, либо брать 5в и проводами цеплять к USB типа В…
и еще… вариант предложенный ранее… включать, к примеру по 3 ступеньки вперед/назад в зависимости от положения человека на лестнице… пока что только в виде алгоритма и мониторинга 8 датчиками 20 ступенчатой лестницы… в ПО не силен… быть может кто нибудь даст совет об оптимизации ибо даже алгоритм получается весьма не легкий..
также… что же придумать если ступенек больше 16? Как я понимаю ног драйвера уже не хватит… нужен еще один драйвер и еще одна ардуинка?? сильно ли изменится скетч в плане основного тела программы
по ссылке подключение идентичное с проектом.
вот подключение по ссылке
Подключите выводы драйвера к arduino в следующем порядке:
19 и 21 выводы подключаются к рельсе питания +5В (на фото жёлтые перемычки)
22 и 27 выводы подключаются к рельсе земли (белые перемычки)
18 вывод соединяется с 3 цифровым выводом Arduino (белая перемычка)
24 вывод соединяется с 9 цифровым выводом Arduino (белая перемычка)
23 вывод соединяется с 10 цифровым выводом Arduino (зелёный провод)
23 вывод дополнительно соединяется через подтягивающий резистор 10 кОм к рельсе питания, что бы при включении драйвера все светодиоды были погашены.
26 вывод соединяется с 11 цифровым выводом Arduino (оранжевый провод)
25 вывод соединяется с 13 цифровым выводом Arduino (синий провод)
20 вывод нужно через резистор 2 кОм соединить с землёй. Таким способом мы ограничим ток на выводах для подключения светодиодов 20 мА. Рассчитывается этот резистор по формуле: R = 39.06 / I (в Амперах). Максимальный ток составляет 120мА на канал.
а подключен в проекте, посмотрите выше. Схем и инфы предостаточно.
Только здесь (насколько мне, автору, это известно). Несколько дней назад проект очередной раз актуализировался (bugfix).
Однако не исключаю, что где-то появились моды.
Спасибо за интересный проект и очень детальное описание скетча. Собрал проект на меге328+TLC+IRF7314. Скетч прекрасно работает, но как то вяло реагирует сонар. Сейчас хочу добавить программное отключение лестницы по датчику света и сонары (HC-SR04) на отдельных МК(ATTiny13) или заменить на PIR или ИК датчик.
Спасибо за интересный проект!
Схема не очень понравилась — очень громоздка. Выходы заменил полевиками IRF7314. Получилось очень даже компактненько!
А вот за код — огромное спасибо! В нем учтено много вещей, которые на первый взгляд даже не приходят в голову:) Плюс ко всему этот код самый адекватный из тех, что нашлось на просторах интернета… Использовал его не 1 в 1 — почти полностью переписал. Но не смотря на это — в вашем коде нашел одну глюку, которая при некотором стечении обстоятельств может не гасить лестницу.
Приглядитесь к функции
boolean sonarTrigged(byte sonarNo)
В ней по сути 2 блока
if ((sonarNo == 1)&&(sonarEnabled(1)))
и
if ((sonarNo == 2)&&(sonarEnabled(2)))
Если так случится, что оба сонара не Enabled, то функция вернет не понятно чего — от этого поплывет весь остальной код…
Я думаю, что вы поймете о чем я. Есть несколько вариантов исправления. Самый примитивный — последней строчкой в эту функцию написать
return false;
Но по хорошему нужно слегка преобразить процедуру
boolean sonarTrigged(byte sonarNo){
if (sonarNo == 1){
if (sonarEnabled(1)){
...здесь ваш код
}
else return false;
}
if (sonarNo == 2){
if (sonarEnabled(2)){
...здесь ваш код
}
else return false;
}
}
unsigned int time_us = pulseIn(sonar1echo, HIGH, 5000)
Отсутствие ответа за 5мс не является однозначным признаком «зависшего» датчика. Если расстояние большое, то датчик просто не успевает получить отраженный сигнал и возвращается по таймауту 0… И дальнейший код зря ресетит датчик. Процедура ресета отбирает питание у датчика на 100мс, что существенно тормозит выполнение кода…
Проявляется, если перед датчиком на расстоянии более 80см ничего нет (а ширина лестницы часто бывает 1 метр). В этом случае датчики будут ресетиться каждый цикл опроса. Кроме тормозов мне кажется, что постоянное включение/отключение питания датчика ни к чему хорошему не приведет.
В общем как рекомендация — поставить таймаут побольше — хотябы 10мс.
Вот картинка из соседней темы mySKU.me/blog/aliexpress/39571.html
Но кондеры не нужны, а 33К заменить на 3,3К. В принципе в данной схеме «на глаз» ШИМ работает. Но, если ткнуться осциллом, то не очень красиво. Одну такую плату собрал. Полное решение по ШИМ отложил до сборки второй платы…
Весь баг заключается в том, что добиться очень-очень минимального свечения на данном ШИМ не получается. Но даже то, что получается глаз не особо коробит.
PS: OUT — к контроллеру, LOAD — диодная лента
Чем унл2008 не устраивает? 8каналов по 0.5ампер, планирую именно в дип корпузе в случае ошибки вылетит именно улн, вытащил и заменил на новую, стоит 10руб.
2штуки 16ступеней подсветить.☺ никакой обвески управление по минусы вкусняшка
Не хватает ног. Тогда сдвиговый регистр в помощь
Повторил проект на своей лестнице. Заказал такие-же платы. Собрал. Залил скетч.
Включаю, лестница загорается. И всё. Больше ничего не происходит.
Пробовал подключать сонар коротким проводом, мало ли питания не хватает. Результат тот же.
Добавил в скетч вывод дистанций и зависаний в ком порт, подключит ноутбук и обнаружил, что при питании от ноутбука сонары адекватно работают. То есть они получают дистанции (92 см первый и 204 второй) около минуты, а потом начинают получать 64 сантиметра оба и ардуино зависает.
Может кто-то подсказать в чём может быть проблема?
Лестница у меня открытая. Питание от компьютерного БП.
Зачем колхозить, тратить время и нервы? Можно ведь купить готовый вариант. Я лично не понимаю как по схемам данную автоматическую подсветку лестницы собрать. Вон в поиске если загуглить полно решений. За два дня все элементы подключили, настроили и всё супер гуд. Работает на ура.
Еще видел в магазине www.pleer.ru в продаже, на Митинском радиорынке рынке тоже видел. Вот другой вариант контроллера продается www.stairsled.ru
Повторил проект. На столе всё работает отлично. А на лестнице постоянно глючит. Думаю что тоже проблема получением дистанции с датчиков. То сработает правильно раза 3 и зависает. Проблему пока не решил. В видео попала только правильная работа www.youtube.com/watch?v=X6kBV4Crb9Y
Та же проблема, только еще на стадии макета. Два, три раза сработала нормально, а потом срабатывает, и не тухнет, будто на какой то из сонаров постоянно идет сигнал обнаружение. Вообщем зависает и помогает только перезагрузка контролера.
Да именно так! Я добавил пару строк в программу чтоб выводило расстояние с сонара. Когда сонар смотрит в потолок выдаёт расстояние до потолка а если воткнут в макетную плату параллельно столу то выдаёт ноль но если подставить руку между нолями проскакивает нормальная дистанция. Я изменил немного условия когда сонар считается сработавшим
if ((distance >= 15)&&(distance <= sonar2minLimit)){//сонар считается сработавшим, принимаем «меры»
Смысл что бы сработка начиналась не с ноля а например с 10- 15 см. На столе всё работает норм. Завтра попробую на установленном. Проверю сколько выдаёт датчик. Потом сообщу результаты удалось ли наладить.
А где Вы прописывали Serial.print что бы и себе прописать по смотреть что выдают эти сонары, а то я максимум нашел где прописать что бы выводили на какой дистанции сработали, а когда зависают ничего не выводится. И мне кажется что дело не в сонарах, а в чем то другом. Может добавить процедуру проверки на такой случай, если не выключилось по истечению такого то времени то выключить. Я бы написал, но мои познания в программировании нулевые.
Я оставил ссылку на программу. Пока он находится на модерации.Там всё прописано. Я уже минут пятнадцать пытаюсь повесит контроллер НЕ Получается.
это пока на столе. Даже специально наводил датчики в плотную к столу — не повисло.
Доброго времени суток! Для поржать справки: в славном городе Иваново согласились изготовить плату, в любом количестве, хоть 1 штучку, но… оплатив подготовку производства в размере 20к рублев (шаблоны, маски и т.п.), мдее. Китай нам не победить.
Тут пока занимаюсь анализом, ликбезом в предвкушении реализации данного проекта, поговорил с одним электронщиком, он прочел пост, заценил, плюсанул на словах автору и сразу сказал искать хороший БП. Его слова (а опыт у него реально большой) глюки у многих могут вылезать из за плохого питания, потому и сенсоры тупят и глючат в том числе!
В схеме проекта небольшая ошибка — эхо 1Botton подключено к 12 входу. Но так не работает. Если воткнуть во 2ой то работает норм. Возможно это просто описка, в программе он прописан нормально 2!
На вроде того.На плате всё правильно и в программе тоже. Я просто по схеме подключал к Ард. Уно и не работал сонар. Небольшая не точность в нарисованной схеме.
Отче, почем? Я заказал у дядьки тут с сайта, но он с Литвы, видимо я забадаюсь ждать нашу таможню. А в Нижнем я частенько бываю, Университет там один заканчиваю на Анкудиновском шоссе (заочно)
Дополнение к выше сказанному — Господа, кто не успеет или не сможет найти контакт для покупки 1 -2 плат на территории РФ — СМЕЛО обращайтесь к пользователю Аurimaspr!!! Он с Литвы, договорились о компенсации почтовых издержек, вкратце — 1 плата обошлась мне в 450р с пересылками, шло 12 дней до Иваново. Можно конечно и с сайта, но сейчас это занимает 24 американских рубля, а реализуете вы все остатки плат или нет, еще под вопросом. Так что каждый решает сам!
P/s: Аurimaspr подошел ответственно к упаковке отправления, запаковал так, что ее могли бы доставить аквалангисты держа в руках, и почта РФ даже не смогла ничего ей причинить, за что ему отдельное спасибо!
Всем добрый день или вечер. Реализовал проект. Спасибо Виктору за подробное описание. Правда заменил инверторы 74LS04 и силовые транзисторы Tip122 на IRF7314, но смысл этого не меняется (как мне кажется). Прошивку ставил без изменений и сначала пытался запустить контролер с датчиками HC-SR 04 (вопреки рекомендациям использовать SRF05). Но после трех-четырех срабатываний ардуинка зависала и все светодиоды просто оставались включенными. После того как пришли сонары SRF05, история повторилась. Все равно ардуинка зависала. Пытался менять параметры по рекомендациям из обсуждения, но безрезультатно. Что интересно, если заливал другую прошивку, без реал тайма, то зависания пропадали, ни с HC-SR 04, ни с SRF05 датчиками. Что же я делаю не так? Удалось ли кому-нибудь выяснить причины возникновения такой проблемы? Очень хочется запустить с прошивкой Виктора.
Тоже самое 2-3 раза и зависает. Может кто испробывал с pir или инфракрасные датчики? как работает? какую модель использовали? а может нашлось решение по зависанию?
Добрый день! Автору огромное спасибо за проделанную работу. И большой респект!
Прочитал статью и очень захотелось повторить этот интересный проект. В общем-то я в программировании ничего не смыслю, но ардуино меня так заинтересовал, что всё таки решился. Кстати, в радиоелектронике тоже не очень, когда-то в молодости занимался в радиокружке, ну в общем всё таки решился.
Да и автор всё так подробно описал, очень всё понятно.
Собрать решил сначала только управляющую часть, на бред борде. То есть до инвертеров.
Заказал этот минимум деталей, с целью испробовать, потяну ли я это и станет ли работать. А потом уже силовую часть доделать.
К выходам драйвера TLC подсоединил катодами 16 светодиодов, аноды на плюс. В качестве сенсоров решился на вариант попроще, чтобы снизить количество деталей на минимум и заказал HC-SR501 PIR. В скетче поставил sensorType 2, как автор и советовал при применении PIR. Всё тщательно проверил, перекинул скетч, библиотеку, включил и…
Работает, но не так, как должно.
На сенсорах есть по два подстроечника на каждом, один для чувствительности, другой — как долго сигнал держит. Так вот, чувствительность можно крутить хоть куда- результата ни какого.
А вот второй подстроечник- две третьих оборота не происходит ничего. То есть светодиоды просто молчат. Если крутить дальше по убавлению времени, светодиоды начинают работать, один за другим, как положено. Обе стороны. И после паузы в 1000 мс гаснут в обратном порядке. Если подстроечник накрутить на минимум, светодиоды загораются по очереди, пока все не засветятся и потом остаются в этом состоянии. Сенсоры не реагируют на движение руки в любом положении подстроечных резисторов.
Вопрос: может кто подскажет, что я неправильно сделал или делаю? Единственное несовпадение с авторской схемой это то, что на ПИРы я поставил подтягивающие резисторы на 5.1 ком вместо 4.7. Но я думаю это не проблема?
Может в скетче ещё что нибудь нужно добавить/исправить? Или может вообще ПИРы не подходящие для этой схемы купил?
До этого собирал маленькую сигнализацию на ардуино и этих же самых сенсорах, работало всё прекрасно, каждое движение руки улавливал.
Спасибо большое за помощь, надеюсь, что кто нибудь откликнется.
С уважением,
Update:
При среднем положении подстоечных резисторов, примерно каждые полторы минуты пробегает волна света то в одну сторону, то в другую. При этом направление случайное, но цикл повторяется постоянно. PIRы не реагируют на движения. Предполагаю, что-то со скетчем не в порядке. Но разобраться но могу что:) Может кто-нибудь уже реализовал схему с PIRами?
Та же проблема. не могу понять
Резистор подтяжен на + 4,7ком
а сенсор на логике выдает 3,3
а Ардуино даже не понимает этого.
Как решил проблему, если не жалко?
Добрый вечер! Понимаю, что вопрос покажется странным, но может ли кто-нибудь объяснить мне, каким образом подключается питание к плате и светодиодным лентам. Что-то я совсем запутался. Опыта нет, самостоятельно разобрался со схемой, разобрался со скетчем, а как подключается питание понять не могу. Заранее благодарен!
Решил собрать сабж по вашей схеме. Разводку переделал на односторонний текстолит, спаял, загрузил скетч и столкнулся с тем что ардуина зависает через пару включений-выключений. Видимо проблема в скетче. Поскольку я вообще не бум-бум в программировании то за неделю изучил азы программирования на си. Тогда обратил внимание на одну особенность в скетче, при выполнении процедуры зажигания или гашения ступенек, поскольку вы используете delay программа приостанавливается и не может считывать сигналы с ультразвуковых датчиков, соответственно прохождение встречных и попутных пешеходов не учитывается. Решил полностью переписывать скетч, возможно он получится индусским но я доведу его до победного конца. Если есть интересующиеся данным изделием предлагаю общими усилиями довести программную часть до совершенства.
Пока на макетке. Лестница только в чертежах. А это принципиально?
В отличии от оригинального скетча яркость нарастает плавно по степенной функции, а не линейно, что визуально приятнее, отсутствует вероятность сбоя программы через примерно 50 дней из-за переполнения переменной системного времени. Можно слегка доработать скетч и подключить сонары по 3-х проводной схеме, высвободив 2 (, а отказавшись от «Reset» — 4) разведенных на плате входа/выхода под другие нужды, например для подключения датчика освещенности.
Принцыпе без разницы, но много вариантов — на столе работает а на месте уже нет. По оригиналному скетчу у меня постояно зависает. Буду ваш заливать, толко всё обратно собиру, а то этот вариянт я ужэ похоронил.
Спасибо за скетч, но я уже переписал сам. В оригинальном скетче процедура проверки расстояния в сонаре возвращает не true и false как задумывалось а расстояние числом, поэтому и зависает. Но это я уже узнал только после того как полностью переписал весь скетч. Избавился от delay и сделал встречное зажигание ступенек лестницы. Смонтировал все на лесенку и все у меня работает не на макетке.
Яркость ступеней увеличивается/уменьшается в «Speed» раз в каждом цикле выполнения программы. Так же можете изменить минимальный уровень яркости ступеней, с которого начинается включение освещения ступеней и ниже которого освещение ступеней отключается. Сейчас он равен «5».
Отличный скетч, нужно к нему мануал для настройки и ваще агонь.
для тех кто хочет изменить количество ступенек меняем вот тут:
#define N 16 // 2...16 — установите количество подсвечиваемых ступеней
и вот тут:
void PWM_Output() {
for (int i = 0; i < 16; i++) Tlc.set(i, StairsPWMValue[i]); // яркость ступеней в диапазоне 0...4096
Tlc.update();
}
Если вам нужно установить датчик на срабатывание с расстоянием до препятствия больше чем 70см тогда вам не достаточно изменять расстояния в этих строчках:
#define Sonar1limit 90 // см, если обнаружена дистанция меньше, чем это число, то сонар считается сработавшим
#define Sonar2limit 90 // см, если обнаружена дистанция меньше, чем это число, то сонар считается сработавшим
всё упрётся в 70 см и всё тут )) дело в том что за 140 см (сигнал от датчика к препятствию и обратно) лучик преодолевать за 5мс если вы ставите больше чем 70 см до препятстия то адуинка прости ппроигнорирует это расстояние так как задержка вывставлена в 5мс вот в этих строках:
byte distance = pulseIn(Sonar1echo, HIGH, 5000) / 58; // расчет дистанции до препятствия (5000 — таймаут, то есть не ждать сигнала более 5мс)
byte distance = pulseIn(Sonar2echo, HIGH, 5000) / 58; // расчет дистанции до препятствия (5000 — таймаут, то есть не ждать сигнала более 5мс)
меняйте например на 7-8 мс и тогда ваш датчик будет видеть расстояния больше 70см. У меня полукруглая пригласительная ступенька и по всем замерам часть людей наступают в область в 110см ))) пришлось увеличить таймаут в 8мс и всё заработало ))
Огромное спасибо за скетч. Все работает как нужно. Но я не увидел настройки яркости, когда подсветка активирована, и это печально. Не ткнете носом, может она есть, а я не увидел? А то я подключил ленты, когда она в режиме ожидания, яркость отличная, а когда срабатывает сонар и лента начинает зажигаться, наступает в комнате день, что не хорошо. Вот хотел бы спросить как отрегулировать яркость рабочей ленты?
Уважаемый автор! Спасибо Вам за такой труд! И что поделились с нами.
Я попытался повторить Вашу схему, только на односторонней плате.
Если грузить скетч который идет с библиотекой (fades), то плавненько моргает.
А если Ваш скетч, то диоды загораются и гаснут как-то дискретно. Не плавно.
Подскажите пожалуйста, почему такое может быть?
Делаю подсветку на лентах ws2801 и PIR датчиках. Кто будет повторять, обратите внимание:
1. В функции sensorTrigged() нет игнорирования срабатывания датчика на выходе с лесницы в коде для PIR сенсоров. Есть только для ультразвуковых. Надо скопипастить.
2. Там же код
(digitalRead(pir1SignalPin) == LOW)
рассчитан, на PIR датчики, выдающие ноль при срабатывании на движение. Если у вас выдает 1, надо поменять в коде.
Всем добрый день, сделал такую подсветку по данному проекту. Получилось супер.
Спасибо большое автору, за полное описание проекта!!!
И спасибо LM-ku за рабочие скетч, с ним сонары не глючат, ну почти)
Еще я поставил датчик освещенности с регулировкой на улицу, что бы подсветка включалась только в темное время.
У кого есть вопросы, спрашивайте, что знаю отвечу.
Вот мое видео результата, если кому надо!
Добрый вечер, я не стал усложнять и подключил обычный датчик на 220в, что он отрубал все, типа такого
arlight.ru/catalog/fotorele-ac220v-599/fotorele-p02-10-100-lux-10a-020717.html
Есть те кто прям к ардуинке подключал, но в таком случае постоянно работает все, то есть ардуинка и трансформатор, а зачем оно))
В моем случает ничего не работает когда светло, на датчике есть регулировка порога освещенности)
Подключается он в разрыв питания 220в
С кодом ничего делать не надо, тк они не связанны вообще)
Провода питания на ленты многожильные 0.75 мм2?
У меня чет потери, на датчики не доходит питание, использовал правда плетёнку…
И еще вопросик, так как управление идет по минусу, не рассматривал ли кто вариант кинуть одну линию +12v а уже к ней подрубать каждую ступень(меньше проводки).??
Приветствую, смонтировал и столкнулся с проблемой следующей
Один датчик *верхний* срабатывает успешно, а нижний ни как не реагирует. Питание на него приходит, вроде все должно быть в норме… Прошивку залил товарища Lm-ku поправив ток кол-во ступеней 15 и скорость зажигания и освещенности). Если кто может -подсобите советом. Помниться был какой то баг с нечетным кол-вом ступеней, но его вроде правили…
Кароче проблема оказалась проще чем думал, паял мощным паяльником и видимо перегрел trig или echo от датчика, который у меня не работал… кинул перемычку и вуаля)) Спасибо всем причастным к проекту. Миссия сроком где-то в год — завершилась)))
Такая же история — отрабатывает только в одну сторону. Подскажите, пожалуйста, какую перемычку вы сделали. Я сонаты вообще не паял — подключал через те же разъемы, на которые ардуину сажал. Их и паял.
Здравствуйте! ( извините за гром. ошибки.)
С новым годом ВСЕХ!
Наткнулся на проект и очень обрадовался так как мне очень интересно стало сделать это. Заранее хочу поблагодарить Vipeg и всех остальных за интересные Коментарии. у меня один Вопрос, не как не могу понять как луче всего сделать, прошу помочь. Дело в том что мои ступеньки 18 шт. так как у ардуино с дрийвером 5940 задействованы 4 ШИМ пина — для 16 каналов (16 ступни), там еще остается 2 ШИМ пина. Возможно ли задействовать в скетч эти два пина (5 и 6) чтобы не поставить на схему другую 5940 последовательно. так как я новичок в ардуино прошу ткнуть мне.
Задумаюсь эти две пины прямо из ардуино сделать первое и последнее ступни по дежурному свету а остальные по умолчанию. Как вы на это смотрите?
Здравствуйте уважаемые. Давно хотел сделать такую подсветку уже даже купил некоторые детали. Может есть у кого лишняя плата приобрел бы. Нахожусь в Беларуси мой Вайбер +375297343804.
Кто собрал проект на ПИР датчиках?
Подскажите как подключить и настроить.
Не как не получается.
boolean sensorTrigged(byte sensorNo){ //процедура проверки, сработал ли сенсора (с отслеживанием «подвисания» сонаров)
#if (sensorType == 2)
if (sensorNo == 1){
if (digitalRead(pir1SignalPin) == LOW) return true;
else return false;
}
if (sensorNo == 2){
if (digitalRead(pir2SignalPin) == LOW) return true;
else return false;
}
Объясните пожалуйста зачем это так. Нельзя ли их сделать HIGH, и подтягивать пин резистором на минус. при Срабатыванием на пин поступит 3,3 В, и функция будет обрабатываться?
Уважаемые!
Кто делал на PIR датчиках поделитесь пожалуйста рабочим проектом.
А то не могу понять почему работает только в одну сторону(прошивка автора).
Добрый день, Собрал все согласно схеме, но есть проблема. ленты зажигаются и сонары отрабатывают, но через некоторое время ленты могут повиснуть в режиме всегда вкл… Были ли такие проблемы у кого нибудь? ТАк же могу продать пару плат. пишите [email protected]
Приветствую всех. Может ли кто-то помочь с увеличением количества ступеней в этом проекте до 22 штук? Насколько я понял в моем случае необходим еще один инвертор 74LS04. Нужно ли в таком случае изготавливать другую печатную плату?
И все-таки я не очень понимаю, зачем в авторской схеме нужны инверторы перед выходными транзисторами, объясните мне пожалуйста. ((
Схему еще не собирал, но думаю, можно вполне обойтись без них.
Добрый день, Зять показал видео подсветки лестницы, захотелось повторить. Сначала росматривался вариант покупки готового блока, но имея опыт в молодости работы с паяльником, захотелось сделать самому. Начал шерстить инет и увидел этот проект.Проект понравился но возникло несколько вопросов.Прошу помочь. 1. автор говорит что в схеме опечатка и надо смотреть даташиты — пересмотрел в схеме все правильно по крайне мере инверторы и драйвер светодиодов соответствует. 2. автор говорит что плата правильная пересмотрел чертеж платы, силовая часть соответствует схеме а вот обвязка ардуино другая. 3. посмотрел скетч, в программировании не силен это мое первое знакомство с ардуино, но на сколько я понял пины сонаров прописаны так как на схеме а не так как на плате. чему верить, какой вариант рабочий, подскажите! хочу начать разводить плату и не наделать косяков. Хотя для економии времени могу купить готовую плату, у кого есть лишняя в УКРАИНЕ отзовитесь.
наконец разобрался с проектом.На схеме не корректно указаны выхода ардуино, Нужно писать D1.D2. и т. д обычно цифры без индексов указывают номера ног а не выходов из за чего сначала немного запутался.Залил скетч автора заработало но недолго 4-5 срабатываний и виснет, не помогала даже ресетовка. Думал уже пробовать на pirах К тому же не понравился ступенчатый набор яркости, Попробовал скетч LM-ku. Работает без зависаний, яркость изменяется плавно. Датчики SR 04 но работают устойчиво Одно но, не учтен вариант если человек остановился на лестнице, после отработки таймера светодиоды начинают гаснуть.Придется увеличивать время работы схемы. Хотя у зятя лестница не большая ( 14 ступеней ) думаю что там топтаться никто не будет.В общем пока все устраивает буду монтировать на лестницу. Разработал плату под себя, на 14 ступеней, одностороннюю, могу выложить если подскажете как сюда забросить файл.
без обид но все это понты плата должна быть простая и безопасная с точки зрения пажарки.
кучу проектов пересмотрел, на макетке собирал как в этом проекте только не на ардуине а на pic контроллере но все то мельтишение ни к чему и пришел к выводу
— лестница должна вся загораться на 100% яркости при подходе человека к лектнице (особенно для взрослых людей)
— светиться должна всегда 1 и последние ступени хотя бы в 20%
— питание всех схемы от трансформатора 9вольт 800ma общая схема кушает до 400ma в полной нагрузке, лента использовалась самая дешевая на 12 вольт (белая и зеленая) — вечное решение
— для лестниц на которые освещение дневное падает лучше поставить датчик освещенности, я впаял фоторезистор и отстроил для ночного режима лестницу
использовал датчик движения, сам сенсор выпаял и установил где надо работает замечательно
Уже месяц пытаюсь все повторить, не получается хоть убейся. при подачи питания на плату загорается первый и 10-й канал, и больше ничего не срабатывает. ни датчики ни перезагрузка. могу снять видео показать. Кто может натолкнуть на мысли??
Если что — есть платы в Киеве, и по Украине доставка…
Спасибо большое, заработала с пол пинка ))) Захотел такую подсветку еще до строительства дома, не спеша начал собирать инструменты и детали, в наличии был паяльник для пайки топоров от деда )))) И вот дом построен, лестница была подготовлена для подсветки, заранее в ступеньках сняли фаску под профиль, лестницы из швеллера так что проблем куда спрятать провода не было.
Лестница из 18 ступенек, не стал мудрить, объединил 1 и 2 ступень в одну (один минус запараллелил на две ступени нижних ).Из косяков это заказал БП на али 20 Амп. пришел не рабочий, поставил какой нашел.По схеме неудобство в отсутствии клеймников для подключения минуса, но это мелочи. Еще раз спасибо все работает я в восторге, как и моя собака )))
Вот бы кто мне помог с моим проектиком, все уже готово, схема, плата, даже уже проверил на работоспособность, осталось чуть подправить скетч, а я не умею, предварительный скетч есть и работает, но не полностью, нужно дописать пару функций.
// ===== ПРОЦЕДУРА ПЕРЕДАЧИ УПРАВЛЯЮЩИХ СИГНАЛОВ В LED-ДРАЙВЕР TLC 5940 =======================================
void PWM_Output() {
for (int i = 0; i < 15; i++) Tlc.set(i, StairsPWMValue[i]); // яркость ступеней в диапазоне 0...4096
Tlc.update();
Скорее всего тут искать надо.
Спасибо автору за труды.
Кто-нибудь собрал подсветку на лестницу больше 16 ступеней? Может можно использовать стандартные пины ардуино (в нано их 6), если нет то как это можно реализовать? Заранее спасибо.
И ещё как в режиме ожидания сделать время от времени пробегающий огонек?
Наконец-то доделал подсветку, с платой автора и кодом LM-ku. Блок питания компьютерный 450 Вт. Лента 12 Втм, но такая не нужна, слишком яркая, хорошо что можно ограничить яркость программно.
Спасибо автору и всем кто помогал. Видео почему-то с Яндекса не подтягивается.
кто подскажет, нет 5v на сонарах. На понижайке они есть, а вот до сонаров не доходят. На 1 гнезде светодиода тоже нет. Что может быть?
74ls04 заменил на аналог К555ЛН1
мультиметром обнаружил что теряется земля. Платы заказаны с завода. Куда можно копать?
Добрый день. Подскажите. Все спаял, 11 ступеней. подключил. Но почему то 1 и 8 ступени горят на полную, это проблема видимо в транзисторах? пробиты?
как сделать, чтобы все ступени горели на минимальной яркости? где что поменять? пытался разобраться в программе, так и не получилось
Need help. Собрал проект. Заработало все с первого раза. После того, как изменил параметры яркости первой и последней ступени в режиме ожидания и уменьшил итерацию загорания ступеней, подсветка начала жить своей жизнью: ступени загораются сверху и снизу навстречу друг другу, после чего ступени светят постоянно, на сонары реакции никакой.
— вкл нагрузки LED например с (№1 СОНАРА ) после того как один из сонаров например (№2 СОНАРА ) зафиксировал что человек вышел из зоны. т.е человек поднялся по лестнице- за ним происходит плавное выключение led **суть автора, его хорошей идеи*** но хотелось бы добавить еще 1 режим т.е
Следующий поднимающийся или в тоже время спускающийся человек смогли бы попасть в освещенное место led светодиодами, т.е идущие друг к другу могли одновременно увидеть как подними загораются все пролеты лестниц, как бы не обидеть 2го человека))) на видео автора я такого режима не увидел, может и прописано в коде, но тоже не заметил беглым взглядом…
Кто может подсказать ?? придется весь алгоритм из-за этого менять? или просто есть возможность дописать?)))) Всем спасибо) тема реально очень актуальна!
По поводу встречного включения ступенек — ответ да :) Это уже реализовано. На видео это нет. Пусть будет бонусом.
А по поводу иде ардуиновской — аццки сложных проектов на ней не создашь, посему и такой функцинал, о мне так тулчейн гораздо геморнее себе делать начинающему. Я, при необходимости, и пользуюсь то ородруино иде, то мбедом, вообще не заморачиваясь с этими билдерами мейкерами компиляторами и др.
Интересно, доживу ли я до того дня, когда хоть где нибудь объяснят как пользоваться ардуино, только на понятном языке? Для человека, не понимающего в программировании.
Или хотя бы с чего начинать.
www.coursera.org/learn/roboty-arduino/home/welcome
Сам на него подсел основательно.
«До чего техника дошла». В восьмидесятые годы, у друга в под'езде при входе и на каждом этаже стояли кнопки. Нажимаешь, слышишь как ОООчень (вечером в под'езде) громко срабатывает магнитный пускатель и включается свет. Задержка бала на время, достаточное подняться среднему человеку до последнего (пятого) этажа.
Но сходу вопрос. Всё повторить по этой подробнейшей инструкции у меня точно получится, собирал уже по мануалам различные подобные поделки, травил ЛУТом, шил программаторами и т.д. но вникнуть и разобраться как увеличить количество ступенек (в аппаратной части) — может быть затык. Может быть будет где-то гайд по этому поводу… Был бы очень благодарен!
Пожалуй, добавлю ссылку в высоком разрешении…
Т.е. вокруг тоже окружен домами.
Идея: реализуем подсветку, хвалимся перед соседями, за разумную мзду (пиво / коньяк и т.д.) и оплату запчастей реализуем для них.
Ну и ещё беда, что был соблазн готовую плату, как у автора заказать, но 12 ступенек реально мало, надо хотя бы 16 или 18 (чтоб всем подошла-то) и была более универсальной. А это уже переделка проекта, переделка макетки, ловля граблей из-за своей криворукости и отсутствия практики и т.д. Так что так и останусь я мечтателем, похоже, пока кто-то не поделиться хотя бы рабочей разводкой платы на 18 ступенек…
Про 12 каналов я упоминал именно в контексте «прошивки», где количество каналов я прописал в 12. Как Вы понимаете, поставить любое другое нужное число из диапазона 2...16 не составит труда.
Безусловно, кому не нужны такие нагрузки, запросто могут использовать ULN.
Я бы предложил существенно сократить схему, убрав всю правую часть, начиная с инверторов. Судя, по даташиту, на выходе драйвера до 50ma на каждый канал — так что каждый выход притягиваем резистором не к 5В а к 12 и ставим в верхнее плечо P-канальный полевик. Даже при 1,5А сюда можно вполне поставить что-то в корпусе sot23. Хотя, я бы рекомендовал что-то чуть крупнее. И драйвер можно тоже смд посавить — плату тогда можно будет уместить в «стандартные» 50х50мм
Полевики подходят например IRFR9024 — до 2А без радиаторов вытянут
Размер платы можно значительно уменьшить, особенно если использовать полевики SOT23 (IRLML2244, IRLML9301 и т.п)
Или вот: www.irf.com/product-info/datasheets/data/irlml9301pbf.pdf — вообще копейки (10 центов в розницу, в одном из самых дорогих украинских магазинов)
Ну и резистор, я бы рекомендовал хотя бы 1К. Чтоб фронты на закрытие были норм.
Также как развитие идеи упрощения для конкретной задачи — убрать и драйвер. По сути тут не надо независимое управление 12 каналами ШИМ. 1 канал — активный, оастальные либо включены на 100% либо выключены. Тут вполне подойдет программно-аппаратная реализация на той же меге. Ну и транзисторы тогда N-канальные — что выгоднее.
Согласен, но тогда лучше 3,3-4,7кОм чтобы его не греть. Тем более у мелких полевиков входная ёмкость невелика (400пФ), и частота ШИМ не превышает 500Гц
Лично я бы схемотехнику сделал гораздо проще: на 12 каналов Arduino Micro + ключи IRF3205, IRFR3708 или подобные
При этом не нужны 74LS04, TLC5940, радиаторы
Если нужно больше каналов — использовать STM32F103C8T6 (хватит до 24 каналов)
STM32F103C8T6 — хватит до 24 каналов
Кстати, ШИМ лучше делать нелинейным, чтобы визуально яркость менялась плавно
Там зависимость квадратичная
www.russianelectronics.ru/leader-r/review/2195/doc/57568/
За такой проект плюс! Три плюса!
даже закупился всякой всячиной, но что-то никак не доберутся ни руки ни голова до этого моего ПЕРВОГО проекта :)
… а сложности есть — 2 этажа, 5 комнат, теплые полы, ванная, туалет, ГВС, и всего один насос и все это на допотопном АКГВ-29 без электроники вообще )))))
уж даже сомневаюсь — потянет ли ардуинка?
2. Да, мультиварки управляемые по вайфай, с загрузкой рецептов действительно существуют и продаются. Но я бы не сказал, что давно и недорого.
3. Среди них однозначно нет мелких, на полтора литра. А мне нужна именно такая. Она у меня даже есть, но пользоваться ей из-за совершенно бредового софта практически нереально. И речь в каменте шла именно о о ней. Мало того, у остальных с алгоритмами — тоже беда-беда. Это я как владелец трех разных утверждаю( а еще парочка через мои руки мельком проходили).
И да, мне не нравится идея отдавать лишние 10-20 тысяч за сопливые бредни маркетологов… :)
в дальнем зАмысле — внедрить газовый клапан от термопушки в котел и управлять температурой теплоносителя в зависимости от температуры и ветра на улице(погодное регулирование).
это по отоплению
с ГВС сложнее. здесь зависимость от температуры котла, воды в контуре и накопителе гвс и наличия расхода воды.
Как будет вести себя подсветка лестницы?
Спасибо за обзор! Приятно читать!
Вы третий, после ксимана и кирича, чьи обзоры меня так потрясают!
Рад, что кому-то обзоры нравятся. Полностью согласен с Вашим списком интересных авторов, но считаю, что многих в этом списке не хватает. Хотя понимаю, что всё субъективно.
Вообще идея «волновой» подсветки витала в воздухе — если припомнить старые фантастические фильмы, то там это встречалось довольно таки часто.
Я даже в каком то обзоре про подсветку не помню где даже написал, что так и ждал там «волны».
Но реализовать непротиворечивый алгоритм при использовании двух датчиков вряд ли удастся — хотя и хрен с ним.
Если в половине случаев все работает верно — а передвижение двух человек навстречу друг другу (про одиночного пешехода я вообще молчу) перекрывает заметно больше половины возможных случаев — не вариантов, а, скажем так, вариантов помноженных на вероятность их возникновения — то и хрен с ним.
Остальное — это уже просто если ради интересу делать, только усложнение и удорожание проекта.
А так — получилось довольно оптимально, на мой взгляд.
Кстати, о вероятностях…
Снял один математик даму, утром ей захотелось показаться поумнее, и задала она вопрос:
— Дорогой, а что такое теория вероятности?
— Ну, как тебе сказать… Вот подойди к окну — ты видишь пустую улицу. Наверняка скоро появится пешеход, это будет или мужчина, или женщина. Вероятности этого равны.
Может подряд появиться двое мужчин или две женщины — но вероятность этого намного меньше.
Конечно, может случиться и так, что подряд пройдут сто мужчин или сто женщин — но вероятность этого очень мала, и вряд ли такое случиться. Понятно?
— Ага. — сказала дама.
… в это время послышалась музыка и из за угла показался полковой оркестр…
Но не будем рассчитывать на то, что по лестнице в одну сторону (или встречно) пройдет полк :)
Кстати, я бы не сказал, что
это про панельки для микросхем.
Скорее все таки наоборот — панельки фактически используют только при отладке, иногда — если часто летит какя то микросхема, хотя если она летит — это просчет разработчика.
А без панелек плата принимает законченный, промышленный вид.
Я запомнил только одно «чудо», напичканное панельками: ЕС1845.
Там применялись как наши, цельнослизанные микросхемы, так и буржуинские, которые слизать не успели.
Наши были, как и положено, с шагом выводов 2,5 мм, буржуинские — 2,54 мм.
И колодки были двух видов — 2,5 и 2,54
Но я до сих пор не могу понять, почему микросхемы с шагом 2,54 стояли в колодках с шагом 2,5 и наоборот…
Приходилось примерно раз в неделю доставать платы и прожимать все мелкосхемы.
Кто помнит конструктив 1845, тот поймет — это куча винтов, крепящих платы в корзине, и куча прикрученных раземов с кабелями на торце каждой (почти) платы…
Во-вторых, хочу пояснить, почему я так сказал по поводу панелей. Попал недавно ко мне в «поле зрения» старый компьютер. Западной сборки, к сожалению не обратил внимания на марку. Кстати, 286-ой. Ровесник ЕС-ок, так сказать.
И как же приятно было заглянуть вовнутрь! Панельки для видеопамяти (VGA!), панельки для двух микросхем биоса (с ультрафиолетовым стиранием, с позолоченными ножками, в керамическом корпусе), панельки ещё чего-то там… И я вспомнил, как делают нынешние компьютеры, особенно бюджетные. Сразу понимаешь, что тот 286-ой делали «на века», не экономя. Это настолько глубоко впечатляет! Тяжело забыть «ту» картинку, «тот» привет из конца восьмидесятых — начала девяностых…
Действительно — там, где использовались ПЗУ — либо с УФ стиранием (незабвенные 573РФ..., 51-е микроконтроллеры, и не только они — были MSP430 с УФ, даже Altera в 90-х выпускала ПЛИС с УФ стиранием, 18хх какая то, уже не помню), либо и с электрическим — как тот же БИОС часто ставили в свое время на панельки, не всегда получалось прошить утилитами на плате — приходилось на программаторе (иногда приходилось и выпаивать).
Вполне оправдано.
С ОЗУ и прочим — скорее всего, модификации: можно в ту же разводку поставить другую микросхему с юольшим объемом памяти, к примеру — наклепали плат и потом продают по разной цене в зависимости от установленной микросхемы.
Но в этом случае все таки нет законченного вида, типа вот мы сделали полуфабрикат — а под Ваши требования можем по быстрому на его основе…
А насчет 286-ой делали на века…
Да, они были заметно надежнее.
У них были гигантские по нынешним меркам технологические нормы.
У них была тактовая частота… по сравнению с нонешней — постоянный ток :)
У них было мизерное количество вентилей на кристалле — опять же по сравнению с сегодняшним днем.
Сейчас мы имеем современный уровень миниатюризации, интеграции и прочих… ций, соответствующее быстродействие и соответствующую, к сожалению, надежность.
Когда то мне попалась такая фраза: программируемый калькулятор уровня Б3-21 можно было сделать на лампах.
Просто повторив всю схему один в один.
Только по той же теории вероятностей сразу при включении вылетит одна из ламп, и пока будут искать неисправную — вылетит еще несколько.
Так что за все приходится платить, в том числе за миниатюризацию и интеграцию — надежностью.
И вряд ли при нашей жизни что то измениться, да и после нашей…
UPD: вот подробности, если интересно: http://forum.arduino.cc/index.php?topic=55119.15. Читать за 2015 год.
Побольше бы таких рукастых и головастых :)
Предлагали мне проект сделать за 15тр. Тогда отказался, надо подумать может и взяться ))
Я с год назад тоже делал аналогичную подсветку (на столе, т.к. в доме еще ремонт) и помнится меня очень напрягало то, что во время режима ожидания, видимо от сонаров, слышны щелчки, в полной тишине достаточно навязчивые… Кошка тоже сидя рядом ушами водила — слышала…
Поэтому мне пришлось «уйти на оптику» — на ик-дальномеры.
А вас не раздражают щелчки от сонаров?
На видео от Лукьянова они тоже слышны…
Сам предмет обзора мне не очень интересен, но стиль изложения, обстоятельность, логика — однозначно лучшие.
Отмечу единственный минус — видео крайне неудачно, из-за того, что сонары ушли за левую границу кадра и потому пересекающую их руку почти не видно, а также потому, что поясняющий текст во второй половине видео почему-то не синхронен действиям.
Конечно, было бы здорово видео переснять.
Также, по просмотру видео у меня появились вопросы:
продемонстрированные реакции на пересекания — это все, что умеет контроллер, или там заложены и более сложные алгоритмы?
Например, если человек дошел до середины лестницы, но потом решил вернуться обратно?
Или, два человека шли навстречу друг-другу с небольшим сдвигом, т.е. сонары сработали так: верх-низ-пауза-низ-верх?
Дружище я в этом не бум бум, а если я оплачу ваши расходы и работу могли бы вы мне смастерить такую штуку ???
Как я писал в обзоре, даже такой относительно простой проект я готовил около года. Он имеет статус хоббийного. У меня действительно мало свободного времени. К тому же я не планировал на проекте зарабатывать, «портить» его коммерческими рельсами. Именно поэтому я выложил все детали по нему в открытый доступ. Но я, понимая, что возможно кто-то захочет повторить проект, расписал всё по нему настолько подробно, насколько это было возможно.
Прошу меня понять.
По поводу алгоритма (логики) зажигания-гашения подсветки лестницы: Использование еще пары сонаров сильно упростило бы задачу — 2 вверху и 2 внизу. При анализе срабатывания пары сонаров вверху или пары внизу лестницы, расположенных последовательно, можно делать вывод о направлении движения человека. Тогда сделать счетчик людей на лестнице (растет при пересечении сонаров от края лестницы к середине и уменьшается при пересечении от центра лестницы к краям). Подсветку не гасить, пока на лестнице есть люди, начинать гашение при нулевом счетчике со стороны противоположной от последнего пересечения. Тогда должно правильно работать даже если человек зашел на лестницу, постоял, развернулся и ушел назад. Счетчик все равно обнулится и подсветка начнет гаситься.
Недостаток данного решения — если 2 человека будет пересекать пару сонаров параллельно (один скрывает другого), и сонары их посчитают за одного человека. Но это должна быть широкая лестница. Ну и удорожание проект на 3.36$
И еще вопрос в uno/nano и иже с ними при подаче питания через vin и т.д. на + в usb порту есть питание? Все забываю проверить.
Полистайте подшивки старых Радио или «В помощь радиолюбителю» — раньше, в 70-е годы, подобные «проекты» делали на транзисторах, реле или тиристорах.
А тут алгортимы, софт, микроконтролер — из пушки по воробьям!
Позорище, люди разучились делать вещи просто и со вкусом…
По-моему, контроллер за 2 бакса позволяет как раз-таки избавиться от «вороха» запчастей, которые занимают немалый объём, стоят денег и потребляют немалый ток. Более того, в контроллере всегда можно изменить алгоритм под себя, а вот с «аппаратной» реализацией в куче деталей всё намного сложнее.
Или просто не хочет изучать программирование.
Естественно, есть задачи, с которыми дискретные схемы гораздо проще и надёжнее. Но чем больше проект, тем сложнее и дороже его реализовать таким образом.
Собрал на основе модулей ардуино электронику (Mega2560, 8 шт. HC-SR04, несколько оптических датчиков для отслеживания возможных ям, несколько концевиков для подъезда к препятствию вплотную, LM386 для работы мотор-колес, полевик для работы моторов-кос, ИК датчик для дистанционного управления). Не все железо разместил на прототипе. Предусмотрел кнопку экстренного отключения.
Из софта — написано много всего. Обработка информации со всех 8-ми дальномеров, обработка ИК-команд с пульта управления, формирование ШИМ-команд управления для мотор-колес. Сделал меню, где задаются расстояния до препятствий при которых нужно отрабатывать алгоритм перемещения и что-то ещё… Написал алгоритм перемещения «змейка».
И… все забросил… поскольку времени на это больше нет(. Вот бы кто-нибудь доделал мой прототип — я бы софт по ночам писал бы)
ты меня вдохновил.
Буду своим двум мальцам светофор собирать! на рынке купил индикаторы 3х цветов — для промышленности сразу со светодиодами. купил ардуинку за 2,5 бакса и корпус пластиковый за 0,5 бакса. многое из обзора подчерпнул — спасибо.
Друг строит дом с баней, рассказал ему про Ваш проект, буду экспериментировать на его банной лестнице в мансарду. У меня весной тоже планируется 2-х этажное строительство, если на бане эксперимент пройдет успешно, буду повторять!
Подскажите пожалуйста для «особо талантливых» как «залить» программу в контроллер? Хотя бы направление — в какую сторону «копать»?
И, если это не будет сильной наглостью, сфотографируйте пожалуйста крупно готовую плату с впаянными деталями с разных ракурсов. Очень боюсь наделать ошибок при монтаже.
5 как раз получается на выходе dc-dc, на его вход, соответственно, подается 12в.
А как же Ваша плата, она будет работоспособна?Прочитал Ваш ответ в личке, фу-уух плата рабочая, спасибо!
P/s Из 10 плат мне нужно только 5. Если кому то понадобится оставшиеся в Москве. Напишите в личку.
Есть ли еще возможность приобрести у Вас платы для подсветки лестницы (нужна 1 шт)?
Спасибо!
Вот только досада, не могу залить скетч!? Выдает ошибку компиляции.
В ардуино я новичек, прошивки заливал через программаторы без проблем, а вот с ардуино стопор.
Может, подскажете как правильно сделать? может до скетча нужно что-то еще проделать?
Заранее благодарен за любой ответ!
Пробовал данный вариант но не смог получить нужную чувствительность (срабатывает при прямом за свете датчика).
Подскажите пожалуйста:
1. Номинал подстроечного резистора?
2. Из Вашей оригинальной схемы нужно убирать резистор 10к (между BLANK и DCPRG) при использовании датчика освещенности?
Датчик освещенности такой arduino-ua.com/prod184-Datchik_osveshhennosti.
Так же заметил что при определенном уровне освещенности происходит частое («моргание»(дребезг)) включение-выключение подсветки. Как можно это устранить?
Спасибо.
А если я поднимался, но на середине лестницы решил вернуться?
А если я бабуля или маленький ребёнок, который медленно поднимается?
Я бы сделал датчик на каждой ступеньке и при срабатывании n-датчика зажигал бы n+1 и n-1 ступеньку. Не думаю, что поставив ногу на ступеньку, кому-то нужно продолжать её освещать. Освещаются только нижняя и верхняя от сработавшего датчика. И вопросы с двумя, тремя,… семью людьми на лестнице больше не возникают в каких направлениях они бы не шли.
во-вторых, зачем на каждую ступень ставить сонар, можно сонар расположить продольно пролету ступеней и «играть» дистанцией, который выдаст сонар.
Спасибо за замечательное описание.
Есть вопрос. А если всё-таки ставить IRLZ44N, то радиаторы на них тоже нужны или сами справятся, если в районе 5 Ватт на канал (1м. 3528/60 ленты)?
Не сильно хочется нагромождать. Если нет, то какой выход есть без радиаторов?
Ещё раз спасибо!
с нехваткой питания на датчики вели себя некорректно(жили своей жизнью, ложные сработки иногда постоянно в сработке).Кабель который использовал для подсветки КСПВ 14х0,4 его сечения хватило только на ленты. (Использовал так как он был в наличии).НА датчики прокинул Кабель КВК-В-2 2х0,75 (остатки от видеонаблюдения). Запитал все от блока питания от компьютера.
Решил себе «обновить» лестницу и давно была идея сделать с подсветкой. Сейчас делаю новые ступеньки вот и наткнулся на данный топик. Все подробно описано и выложен код. Покупать по 50$ уже хотел готовый, но сейчас задумался :) 10 штук мне не надо конечно, поэтому вопрос — мб кто покупал себе и есть лишние платы? Или может скооперируемся и закажем (из РБ)?
uscr.ru/kak-podklyuchit-drajver-svetodiodov-tlc5940-k-arduino/
вот подключение по ссылке
а подключен в проекте, посмотрите выше. Схем и инфы предостаточно.
Однако не исключаю, что где-то появились моды.
Схема не очень понравилась — очень громоздка. Выходы заменил полевиками IRF7314. Получилось очень даже компактненько!
А вот за код — огромное спасибо! В нем учтено много вещей, которые на первый взгляд даже не приходят в голову:) Плюс ко всему этот код самый адекватный из тех, что нашлось на просторах интернета… Использовал его не 1 в 1 — почти полностью переписал. Но не смотря на это — в вашем коде нашел одну глюку, которая при некотором стечении обстоятельств может не гасить лестницу.
Приглядитесь к функции
В ней по сути 2 блока и
Если так случится, что оба сонара не Enabled, то функция вернет не понятно чего — от этого поплывет весь остальной код…
Я думаю, что вы поймете о чем я. Есть несколько вариантов исправления. Самый примитивный — последней строчкой в эту функцию написать
Но по хорошему нужно слегка преобразить процедуру
Потенциальный баг в строчке Отсутствие ответа за 5мс не является однозначным признаком «зависшего» датчика. Если расстояние большое, то датчик просто не успевает получить отраженный сигнал и возвращается по таймауту 0… И дальнейший код зря ресетит датчик. Процедура ресета отбирает питание у датчика на 100мс, что существенно тормозит выполнение кода…
Проявляется, если перед датчиком на расстоянии более 80см ничего нет (а ширина лестницы часто бывает 1 метр). В этом случае датчики будут ресетиться каждый цикл опроса. Кроме тормозов мне кажется, что постоянное включение/отключение питания датчика ни к чему хорошему не приведет.
В общем как рекомендация — поставить таймаут побольше — хотябы 10мс.
Вот картинка из соседней темы mySKU.me/blog/aliexpress/39571.html
Но кондеры не нужны, а 33К заменить на 3,3К. В принципе в данной схеме «на глаз» ШИМ работает. Но, если ткнуться осциллом, то не очень красиво. Одну такую плату собрал. Полное решение по ШИМ отложил до сборки второй платы…
Весь баг заключается в том, что добиться очень-очень минимального свечения на данном ШИМ не получается. Но даже то, что получается глаз не особо коробит.
PS: OUT — к контроллеру, LOAD — диодная лента
2штуки 16ступеней подсветить.☺ никакой обвески управление по минусы вкусняшка
Не хватает ног. Тогда сдвиговый регистр в помощь
Включаю, лестница загорается. И всё. Больше ничего не происходит.
Пробовал подключать сонар коротким проводом, мало ли питания не хватает. Результат тот же.
Добавил в скетч вывод дистанций и зависаний в ком порт, подключит ноутбук и обнаружил, что при питании от ноутбука сонары адекватно работают. То есть они получают дистанции (92 см первый и 204 второй) около минуты, а потом начинают получать 64 сантиметра оба и ардуино зависает.
Может кто-то подсказать в чём может быть проблема?
Лестница у меня открытая. Питание от компьютерного БП.
Еще видел в магазине www.pleer.ru в продаже, на Митинском радиорынке рынке тоже видел. Вот другой вариант контроллера продается www.stairsled.ru
const byte button1pin = 12;
const byte button2pin = 7;
Что это значит, дайте ссылку где почитать. Больше всего меня интересует резисторная матрица, зачем она? Без неё небудет работать?
if ((distance >= 15)&&(distance <= sonar2minLimit)){//сонар считается сработавшим, принимаем «меры»
Смысл что бы сработка начиналась не с ноля а например с 10- 15 см. На столе всё работает норм. Завтра попробую на установленном. Проверю сколько выдаёт датчик. Потом сообщу результаты удалось ли наладить.
Включаете Оставляете подключенным к компу, потом монитор порта 9600 и должен выводить показания второго датчика
это пока на столе. Даже специально наводил датчики в плотную к столу — не повисло.
Извиняюсь, что влез, но видимо платы есть?
поржатьсправки: в славном городе Иваново согласились изготовить плату, в любом количестве, хоть 1 штучку, но… оплатив подготовку производства в размере 20к рублев (шаблоны, маски и т.п.), мдее. Китай нам не победить.Тут пока занимаюсь анализом, ликбезом в предвкушении реализации данного проекта, поговорил с одним электронщиком, он прочел пост, заценил, плюсанул на словах автору и сразу сказал искать хороший БП. Его слова (а опыт у него реально большой) глюки у многих могут вылезать из за плохого питания, потому и сенсоры тупят и глючат в том числе!
P/s: Аurimaspr подошел ответственно к упаковке отправления, запаковал так, что ее могли бы доставить аквалангисты держа в руках, и почта РФ даже не смогла ничего ей причинить, за что ему отдельное спасибо!
www.openhardware.io/view/366/Automatic-stairs-lighting-arduino-shield
Но больше реклама
У меня на четвёртый раз не выключается вся лестница. Зависает полностью включённая. Помогает только отключение питания.
Прочитал статью и очень захотелось повторить этот интересный проект. В общем-то я в программировании ничего не смыслю, но ардуино меня так заинтересовал, что всё таки решился. Кстати, в радиоелектронике тоже не очень, когда-то в молодости занимался в радиокружке, ну в общем всё таки решился.
Да и автор всё так подробно описал, очень всё понятно.
Собрать решил сначала только управляющую часть, на бред борде. То есть до инвертеров.
Заказал этот минимум деталей, с целью испробовать, потяну ли я это и станет ли работать. А потом уже силовую часть доделать.
К выходам драйвера TLC подсоединил катодами 16 светодиодов, аноды на плюс. В качестве сенсоров решился на вариант попроще, чтобы снизить количество деталей на минимум и заказал HC-SR501 PIR. В скетче поставил sensorType 2, как автор и советовал при применении PIR. Всё тщательно проверил, перекинул скетч, библиотеку, включил и…
Работает, но не так, как должно.
На сенсорах есть по два подстроечника на каждом, один для чувствительности, другой — как долго сигнал держит. Так вот, чувствительность можно крутить хоть куда- результата ни какого.
А вот второй подстроечник- две третьих оборота не происходит ничего. То есть светодиоды просто молчат. Если крутить дальше по убавлению времени, светодиоды начинают работать, один за другим, как положено. Обе стороны. И после паузы в 1000 мс гаснут в обратном порядке. Если подстроечник накрутить на минимум, светодиоды загораются по очереди, пока все не засветятся и потом остаются в этом состоянии. Сенсоры не реагируют на движение руки в любом положении подстроечных резисторов.
Вопрос: может кто подскажет, что я неправильно сделал или делаю? Единственное несовпадение с авторской схемой это то, что на ПИРы я поставил подтягивающие резисторы на 5.1 ком вместо 4.7. Но я думаю это не проблема?
Может в скетче ещё что нибудь нужно добавить/исправить? Или может вообще ПИРы не подходящие для этой схемы купил?
До этого собирал маленькую сигнализацию на ардуино и этих же самых сенсорах, работало всё прекрасно, каждое движение руки улавливал.
Спасибо большое за помощь, надеюсь, что кто нибудь откликнется.
С уважением,
При среднем положении подстоечных резисторов, примерно каждые полторы минуты пробегает волна света то в одну сторону, то в другую. При этом направление случайное, но цикл повторяется постоянно. PIRы не реагируют на движения. Предполагаю, что-то со скетчем не в порядке. Но разобраться но могу что:) Может кто-нибудь уже реализовал схему с PIRами?
Резистор подтяжен на + 4,7ком
а сенсор на логике выдает 3,3
а Ардуино даже не понимает этого.
Как решил проблему, если не жалко?
Мое мыло — [email protected]
В отличии от оригинального скетча яркость нарастает плавно по степенной функции, а не линейно, что визуально приятнее, отсутствует вероятность сбоя программы через примерно 50 дней из-за переполнения переменной системного времени. Можно слегка доработать скетч и подключить сонары по 3-х проводной схеме, высвободив 2 (, а отказавшись от «Reset» — 4) разведенных на плате входа/выхода под другие нужды, например для подключения датчика освещенности.
У Вас случаем нет плат,
Писать на почту — c t r l a l t 4 0 8 @yandex.ru (без пробелов)
Без обыды.
А как сделать плавнее розжиг, а то у меня рывками загорается.
Яркость ступеней увеличивается/уменьшается в «Speed» раз в каждом цикле выполнения программы. Так же можете изменить минимальный уровень яркости ступеней, с которого начинается включение освещения ступеней и ниже которого освещение ступеней отключается. Сейчас он равен «5».
для тех кто хочет изменить количество ступенек меняем вот тут:
#define N 16 // 2...16 — установите количество подсвечиваемых ступеней
и вот тут:
void PWM_Output() {
for (int i = 0; i < 16; i++) Tlc.set(i, StairsPWMValue[i]); // яркость ступеней в диапазоне 0...4096
Tlc.update();
}
Если вам нужно установить датчик на срабатывание с расстоянием до препятствия больше чем 70см тогда вам не достаточно изменять расстояния в этих строчках:
#define Sonar1limit 90 // см, если обнаружена дистанция меньше, чем это число, то сонар считается сработавшим
#define Sonar2limit 90 // см, если обнаружена дистанция меньше, чем это число, то сонар считается сработавшим
всё упрётся в 70 см и всё тут )) дело в том что за 140 см (сигнал от датчика к препятствию и обратно) лучик преодолевать за 5мс если вы ставите больше чем 70 см до препятстия то адуинка прости ппроигнорирует это расстояние так как задержка вывставлена в 5мс вот в этих строках:
byte distance = pulseIn(Sonar1echo, HIGH, 5000) / 58; // расчет дистанции до препятствия (5000 — таймаут, то есть не ждать сигнала более 5мс)
byte distance = pulseIn(Sonar2echo, HIGH, 5000) / 58; // расчет дистанции до препятствия (5000 — таймаут, то есть не ждать сигнала более 5мс)
меняйте например на 7-8 мс и тогда ваш датчик будет видеть расстояния больше 70см. У меня полукруглая пригласительная ступенька и по всем замерам часть людей наступают в область в 110см ))) пришлось увеличить таймаут в 8мс и всё заработало ))
Число 4095 — это и есть максимальное во всех смыслах значение яркости подсветки. Хотите уменьшить — уменьшайте это значение.
Нет ли, случаем, 2 лишних плат
Писать на почту — c t r l a l t 4 0 8 @yandex.ru (без пробелов)
Приобрету 2 платы подсветки лестницы.
Почта[email protected]
C ув.
Нужна одна плата. [email protected]
Я попытался повторить Вашу схему, только на односторонней плате.
Если грузить скетч который идет с библиотекой (fades), то плавненько моргает.
А если Ваш скетч, то диоды загораются и гаснут как-то дискретно. Не плавно.
Подскажите пожалуйста, почему такое может быть?
1. В функции sensorTrigged() нет игнорирования срабатывания датчика на выходе с лесницы в коде для PIR сенсоров. Есть только для ультразвуковых. Надо скопипастить.
2. Там же код рассчитан, на PIR датчики, выдающие ноль при срабатывании на движение. Если у вас выдает 1, надо поменять в коде.
[email protected]+79106209805
Спасибо большое автору, за полное описание проекта!!!
И спасибо LM-ku за рабочие скетч, с ним сонары не глючат, ну почти)
Еще я поставил датчик освещенности с регулировкой на улицу, что бы подсветка включалась только в темное время.
У кого есть вопросы, спрашивайте, что знаю отвечу.
Вот мое видео результата, если кому надо!
У меня три раза срабатывает хорошо, а на четвёртый раз включается вся лестница и не выключается.
Залит скетч Автора (Виктора) Actualized March 2017.
LM-ku
выше в комментах от 11 октября 2017, 20:22
Показал себя хорошо
arlight.ru/catalog/fotorele-ac220v-599/fotorele-p02-10-100-lux-10a-020717.html
Есть те кто прям к ардуинке подключал, но в таком случае постоянно работает все, то есть ардуинка и трансформатор, а зачем оно))
В моем случает ничего не работает когда светло, на датчике есть регулировка порога освещенности)
Подключается он в разрыв питания 220в
С кодом ничего делать не надо, тк они не связанны вообще)
У меня чет потери, на датчики не доходит питание, использовал правда плетёнку…
И еще вопросик, так как управление идет по минусу, не рассматривал ли кто вариант кинуть одну линию +12v а уже к ней подрубать каждую ступень(меньше проводки).??
на датчик провод КСПВ 4х0.4, это типа одножильной витой пары
я вот так и сделал, эта «расческа» справа, туда подключаются все плюсы, на плате тоже припаял под разьемы.
Думаю на выходных доделаю, отпишусь
Один датчик *верхний* срабатывает успешно, а нижний ни как не реагирует. Питание на него приходит, вроде все должно быть в норме… Прошивку залил товарища Lm-ku поправив ток кол-во ступеней 15 и скорость зажигания и освещенности). Если кто может -подсобите советом. Помниться был какой то баг с нечетным кол-вом ступеней, но его вроде правили…
С новым годом ВСЕХ!
Наткнулся на проект и очень обрадовался так как мне очень интересно стало сделать это. Заранее хочу поблагодарить Vipeg и всех остальных за интересные Коментарии. у меня один Вопрос, не как не могу понять как луче всего сделать, прошу помочь. Дело в том что мои ступеньки 18 шт. так как у ардуино с дрийвером 5940 задействованы 4 ШИМ пина — для 16 каналов (16 ступни), там еще остается 2 ШИМ пина. Возможно ли задействовать в скетч эти два пина (5 и 6) чтобы не поставить на схему другую 5940 последовательно. так как я новичок в ардуино прошу ткнуть мне.
Задумаюсь эти две пины прямо из ардуино сделать первое и последнее ступни по дежурному свету а остальные по умолчанию. Как вы на это смотрите?
Получил, наконец, платы. Могу продать 8 шт. Пишите на почту: [email protected]
Подскажите как подключить и настроить.
Не как не получается.
boolean sensorTrigged(byte sensorNo){ //процедура проверки, сработал ли сенсора (с отслеживанием «подвисания» сонаров)
#if (sensorType == 2)
if (sensorNo == 1){
if (digitalRead(pir1SignalPin) == LOW) return true;
else return false;
}
if (sensorNo == 2){
if (digitalRead(pir2SignalPin) == LOW) return true;
else return false;
}
Объясните пожалуйста зачем это так. Нельзя ли их сделать HIGH, и подтягивать пин резистором на минус. при Срабатыванием на пин поступит 3,3 В, и функция будет обрабатываться?
Кто делал на PIR датчиках поделитесь пожалуйста рабочим проектом.
А то не могу понять почему работает только в одну сторону(прошивка автора).
Схему еще не собирал, но думаю, можно вполне обойтись без них.
кучу проектов пересмотрел, на макетке собирал как в этом проекте только не на ардуине а на pic контроллере но все то мельтишение ни к чему и пришел к выводу
— лестница должна вся загораться на 100% яркости при подходе человека к лектнице (особенно для взрослых людей)
— светиться должна всегда 1 и последние ступени хотя бы в 20%
— питание всех схемы от трансформатора 9вольт 800ma общая схема кушает до 400ma в полной нагрузке, лента использовалась самая дешевая на 12 вольт (белая и зеленая) — вечное решение
— для лестниц на которые освещение дневное падает лучше поставить датчик освещенности, я впаял фоторезистор и отстроил для ночного режима лестницу
использовал датчик движения, сам сенсор выпаял и установил где надо работает замечательно
кому интересно посмотреть ссылка на видео там и фото 4шт
www.forumhouse.ru/threads/287255/page-12
старое видео но принцип простой
[email protected]
Кому надо в Новосибирске, пишите.
Подскажите а можно tip122 заменить на irf3205? А то последних куча еще осталась.
Если что — есть платы в Киеве, и по Украине доставка…
У кого можно приобрести плату. РБ.
[email protected]
Подскажите может кто имеет такую плату в Украине буду рад купить ?? +971568807825 Viber / WhatsApp
Заранее благодарен
[email protected]
Лестница из 18 ступенек, не стал мудрить, объединил 1 и 2 ступень в одну (один минус запараллелил на две ступени нижних ).Из косяков это заказал БП на али 20 Амп. пришел не рабочий, поставил какой нашел.По схеме неудобство в отсутствии клеймников для подключения минуса, но это мелочи. Еще раз спасибо все работает я в восторге, как и моя собака )))
void PWM_Output() {
for (int i = 0; i < 15; i++) Tlc.set(i, StairsPWMValue[i]); // яркость ступеней в диапазоне 0...4096
Tlc.update();
Скорее всего тут искать надо.
Кто-нибудь собрал подсветку на лестницу больше 16 ступеней? Может можно использовать стандартные пины ардуино (в нано их 6), если нет то как это можно реализовать? Заранее спасибо.
И ещё как в режиме ожидания сделать время от времени пробегающий огонек?
Спасибо автору и всем кто помогал. Видео почему-то с Яндекса не подтягивается.
На выходы планирую поставить p-канальний MOSFET.
Может кто-то переделать код без ШИМ регулировки?
Viber, Whatsapp, Телега: +380999181542
Куплю пару плат для PIR, Ярославль.
Зы а какие провода и ленты использовать?
74ls04 заменил на аналог К555ЛН1
мультиметром обнаружил что теряется земля. Платы заказаны с завода. Куда можно копать?
как сделать, чтобы все ступени горели на минимальной яркости? где что поменять? пытался разобраться в программе, так и не получилось
Сайт dirtypcbs.com маленько скурвился. После оплаты, попросил еще доплатить 9 $.