Авторизация
Зарегистрироваться

Автоматическая подсветка лестницы. Своими руками.

  • Цена: $15 - $25

Можно ли сделать автоматическую светодиодную подсветку ступенек, загорающихся по очереди? Да. Идея не нова, есть куча реализаций в интернете. А чтобы затратить минимум денег, или даже бесплатно? А вот с этим – проблемы… Купить готовый контроллер – сегодня не проблема, но достаточно дорого. Таков бизнес. Действительно ли предлагаемые контроллеры стоят своих денег? Далеко не факт, но проводить эксперименты за свой счёт я не хочу. Запасайтесь терпением, решение под катом. Будет много букв.

Предупреждение.

Обозреваемый проект затевался мною давно, он скорее имеет статус «хоббийного». В совокупности от решения создать свой проект до его реализации прошел год. Сказывается занятость на других работах, плюс долгое ожидание компонентов из Китая, разработка печатной платы с последующим изготовлением в том же Китае. Также хочу сказать, что это первый опыт конструирования устройства на 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 – я добился. Равно как и удовлетворил желание реализовать проект по-своему. Разумеется, я применяю полученный опыт и в других проектах и намерен продолжать саморазвитие. А вот достиг ли я самой важной цели – привнёс ли что-то полезное в жизнь каждого из читателей – покажет только время. Цель обзора, как Вы понимаете, именно в этом.

Ссылки Dropbox – (сам скетч, библиотека к нему, макет платы в Sprint Layout 6 и среда Code::Blocks).

Спрашивайте, что непонятно. Исправляйте, если что-то не так, ведь проект, как я уже упоминал, является моим первым «блином».

Всем добра. Сегодня это, как никогда, важно.


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 в заголовке скетча.
Планирую купить +173 Добавить в избранное +144 +324
свернуть развернуть
Комментарии (251)
RSS
+
avatar
+17
блин, хочется, а у меня дома нет лестницы…
+
avatar
  • Dru4
  • 20 ноября 2015, 18:51
+2
Дорожку в коридоре подсветить?
+
avatar
  • vanenzo
  • 20 ноября 2015, 18:52
+8
можно будет самолеты принимать. Одного человека в начале с флажками тока поставить.
+
avatar
  • Dru4
  • 20 ноября 2015, 19:04
+3
У меня такая подсветка есть, правда светится 24х7. Отлично ночью доветру ходить.
+
avatar
  • TuMka
  • 19 октября 2016, 12:12
0
Автору респект) хочу повторить. но есть вопросы хочется добавить фоторезистор и один режим-
— вкл нагрузки LED например с (№1 СОНАРА ) после того как один из сонаров например (№2 СОНАРА ) зафиксировал что человек вышел из зоны. т.е человек поднялся по лестнице- за ним происходит плавное выключение led **суть автора, его хорошей идеи*** но хотелось бы добавить еще 1 режим т.е
Следующий поднимающийся или в тоже время спускающийся человек смогли бы попасть в освещенное место led светодиодами, т.е идущие друг к другу могли одновременно увидеть как подними загораются все пролеты лестниц, как бы не обидеть 2го человека))) на видео автора я такого режима не увидел, может и прописано в коде, но тоже не заметил беглым взглядом…
Кто может подсказать ?? придется весь алгоритм из-за этого менять? или просто есть возможность дописать?)))) Всем спасибо) тема реально очень актуальна!
+
avatar
  • Vipeg
  • 23 октября 2016, 18:25
0
Честно говоря, не понял, как должен работать фотодатчик.
По поводу встречного включения ступенек — ответ да :) Это уже реализовано. На видео это нет. Пусть будет бонусом.
+
avatar
  • Dru4
  • 20 ноября 2015, 18:51
+7
Фундаментально! Спасибо за diy, прочитал с удовольствием!
+
avatar
  • vanenzo
  • 20 ноября 2015, 18:51
0
Классная идея. Тащемта, думаю, на прямой лестнице можно поместить два дальномера так, что они будут сечь расстояние до объекта, и подсвечивать/тушить лестницу по мере его продвижения по оной.
А по поводу иде ардуиновской — аццки сложных проектов на ней не создашь, посему и такой функцинал, о мне так тулчейн гораздо геморнее себе делать начинающему. Я, при необходимости, и пользуюсь то ородруино иде, то мбедом, вообще не заморачиваясь с этими билдерами мейкерами компиляторами и др.
+
avatar
  • KAVAlex
  • 20 ноября 2015, 19:01
+2
Чувак, ты нереально крут! Смотрю на свою лестницу…
+
avatar
+2
Очень понравилось!
Интересно, доживу ли я до того дня, когда хоть где нибудь объяснят как пользоваться ардуино, только на понятном языке? Для человека, не понимающего в программировании.
Или хотя бы с чего начинать.
+
avatar
  • mooni73
  • 20 ноября 2015, 19:57
+2
Есть такой бесплатный и понятный видеокурс:
www.coursera.org/learn/roboty-arduino/home/welcome
+
avatar
  • zerbino
  • 21 ноября 2015, 04:50
0
ой спасибо!)
+
avatar
+1
Есль Вы не понимаете в программировании, но понимаете в блок-схемах, то могу предложить этот проект:www.flprog.ru
Сам на него подсел основательно.
+
avatar
  • VLOD
  • 21 ноября 2015, 23:34
0
Надо будет посмотреть, надеюсь это мое. Пытаюсь написать скеч, для слежения за солнцем СБ. Сперва было грустно (для меня это первый раз), потом «чем дольше, тем дальше». С программированием контроллеров: Альфа Mitsubishi и Siemens LOGO! проблем не было. Хотя в любом случае должна быть набросана блок-схема.

«До чего техника дошла». В восьмидесятые годы, у друга в под'езде при входе и на каждом этаже стояли кнопки. Нажимаешь, слышишь как ОООчень (вечером в под'езде) громко срабатывает магнитный пускатель и включается свет. Задержка бала на время, достаточное подняться среднему человеку до последнего (пятого) этажа.
+
avatar
  • mr_om
  • 20 ноября 2015, 19:37
+1
Автор гениален, давно слежу за проектом с Хабра выросшим в коммерческий и уже пару раз чуть не купил, но жаба-жаба… Спасибо большое!

Но сходу вопрос. Всё повторить по этой подробнейшей инструкции у меня точно получится, собирал уже по мануалам различные подобные поделки, травил ЛУТом, шил программаторами и т.д. но вникнуть и разобраться как увеличить количество ступенек (в аппаратной части) — может быть затык. Может быть будет где-то гайд по этому поводу… Был бы очень благодарен!
+
avatar
  • Vipeg
  • 20 ноября 2015, 19:54
+2
Например, так. Понадобится дополнительная микросхема 74LS04. Ну и дополнительное кол-во «обвязки».

Пожалуй, добавлю ссылку в высоком разрешении…
+
avatar
  • mr_om
  • 20 ноября 2015, 20:20
0
Спасибо большое! Почитал, что заказ выходит минимум 10 плат. Но нужна только одна :-( бюджетность на этом порядком съедается. Делать на продажу, чтоб оправдать затраты конечно же менее прикольно.
+
avatar
  • Vipeg
  • 20 ноября 2015, 20:44
+5
Да, есть такой нюанс. Однако, для успокоения души могу сказать следующее. Есть китайские сайты, которые за эту же цену предлагают только 3 платы. Хоть утешение и слабое, но простая математика показывает, что 10 лучше 3. Как минимум на 7 :)
+
avatar
  • Alexx_B
  • 21 ноября 2015, 00:45
0
В качестве мозгового штурма: если есть необходимость в подсветке лестницы, то, вероятно, есть и дом с этой лестницей. А дом, вероятно, не среди небоскребов расположен, а в садовом участке / деревне / поселке и т.д.
Т.е. вокруг тоже окружен домами.
Идея: реализуем подсветку, хвалимся перед соседями, за разумную мзду (пиво / коньяк и т.д.) и оплату запчастей реализуем для них.
+
avatar
  • mr_om
  • 21 ноября 2015, 09:13
0
Разумеется я подумал об этом. И план рабочий, только вот одно но. В основном всем надо решение «под ключ», а не голая плата. А моя работа «под ключ» слишком дорого будет стоит, чтоб я стал её делать. Вот такой парадокс :-)

Ну и ещё беда, что был соблазн готовую плату, как у автора заказать, но 12 ступенек реально мало, надо хотя бы 16 или 18 (чтоб всем подошла-то) и была более универсальной. А это уже переделка проекта, переделка макетки, ловля граблей из-за своей криворукости и отсутствия практики и т.д. Так что так и останусь я мечтателем, похоже, пока кто-то не поделиться хотя бы рабочей разводкой платы на 18 ступенек…
+
avatar
  • Vipeg
  • 21 ноября 2015, 09:54
+3
надо хотя бы 16
Очень грамотные доводы. Понимая, что 12 каналов — мало, а драйвер позволяет подключать до 16 каналов, я и предусмотрел варианты на будущее. Предлагаемая плата как раз и разведена под 16 каналов :) Присмотритесь к плате внимательнее.
Про 12 каналов я упоминал именно в контексте «прошивки», где количество каналов я прописал в 12. Как Вы понимаете, поставить любое другое нужное число из диапазона 2...16 не составит труда.
+
avatar
  • mr_om
  • 21 ноября 2015, 11:06
0
И действительно! Спасибо, что предусмотрели ;-) Если будете ещё что-то модернизировать — заложите ещё больше, точно пригодится людям!
+
avatar
  • Aloha_
  • 20 ноября 2015, 19:47
0
Приятно видеть реализацию умных мыслей. Вопрос, а чего не стали использовать драйвера типа ULN2004? столько транзисторов...
+
avatar
  • Vipeg
  • 20 ноября 2015, 19:56
0
Некоторые rigid panel (ленты на алюминиевой плате) легко просадят ампер-полтора. ULN-ки могут «протащить» лишь по пол-ампера на канал. И будут греться.
Безусловно, кому не нужны такие нагрузки, запросто могут использовать ULN.
+
avatar
  • Aloha_
  • 20 ноября 2015, 19:59
0
Есть же драйвера и на 1.5А, 2004 я так, к случаю привел. В любом случае дешевле выйдет используя драйвер.
+
avatar
  • Vipeg
  • 20 ноября 2015, 20:03
0
Был бы признателен за пример такого драйвера (на будущее), если не сложно.
+
avatar
  • Aloha_
  • 20 ноября 2015, 20:47
0
HA13408 lib.chipdip.ru/076/DOC000076575.pdf на здоровье. Сам транзисторами пользуюсь, только из за того что у меня их килограмм (кт837)
+
avatar
  • Vipeg
  • 20 ноября 2015, 20:54
0
Спасибо, крутая штука! Дороговато, правда, но в некоторых проектах может пригодиться.
+
avatar
  • tklim
  • 21 ноября 2015, 15:01
+1
Интересная задумка, но вот схемотехническое решение сильно усложнено.
Я бы предложил существенно сократить схему, убрав всю правую часть, начиная с инверторов. Судя, по даташиту, на выходе драйвера до 50ma на каждый канал — так что каждый выход притягиваем резистором не к 5В а к 12 и ставим в верхнее плечо P-канальный полевик. Даже при 1,5А сюда можно вполне поставить что-то в корпусе sot23. Хотя, я бы рекомендовал что-то чуть крупнее. И драйвер можно тоже смд посавить — плату тогда можно будет уместить в «стандартные» 50х50мм
+
avatar
  • ksiman
  • 21 ноября 2015, 16:25
+1
Тоже вариант :)
Полевики подходят например IRFR9024 — до 2А без радиаторов вытянут
+
avatar
  • ksiman
  • 21 ноября 2015, 18:33
+1
Ради интереса, набросал такую реализацию выходов на полные 16 каналов
Размер платы можно значительно уменьшить, особенно если использовать полевики SOT23 (IRLML2244, IRLML9301 и т.п)
+
avatar
  • tklim
  • 22 ноября 2015, 01:34
0
что-то не очень у них параметры. Так, сходу: www.irf.com/product-info/datasheets/data/irf9362pbf.pdf — двойной.
Или вот: www.irf.com/product-info/datasheets/data/irlml9301pbf.pdf — вообще копейки (10 центов в розницу, в одном из самых дорогих украинских магазинов)

Ну и резистор, я бы рекомендовал хотя бы 1К. Чтоб фронты на закрытие были норм.

Также как развитие идеи упрощения для конкретной задачи — убрать и драйвер. По сути тут не надо независимое управление 12 каналами ШИМ. 1 канал — активный, оастальные либо включены на 100% либо выключены. Тут вполне подойдет программно-аппаратная реализация на той же меге. Ну и транзисторы тогда N-канальные — что выгоднее.
+
avatar
  • ksiman
  • 22 ноября 2015, 08:02
0
Также как развитие идеи упрощения для конкретной задачи — убрать и драйвер.
Что и было предложено ниже
Ну и резистор, я бы рекомендовал хотя бы 1К. Чтоб фронты на закрытие были норм.
Согласен, но тогда лучше 3,3-4,7кОм чтобы его не греть. Тем более у мелких полевиков входная ёмкость невелика (400пФ), и частота ШИМ не превышает 500Гц
+
avatar
  • nanak
  • 20 ноября 2015, 20:12
+10
" Другими словами, я хотел сделать свой вклад в развитие общества, потому что лишь развитие имеет смысл.". Даже только за эти слова большой плюс.
+
avatar
  • ksiman
  • 20 ноября 2015, 20:14
+2
Как первый проект — весьма неплохо.
Лично я бы схемотехнику сделал гораздо проще: на 12 каналов Arduino Micro + ключи IRF3205, IRFR3708 или подобные
При этом не нужны 74LS04, TLC5940, радиаторы
Если нужно больше каналов — использовать STM32F103C8T6 (хватит до 24 каналов)
+
avatar
  • mr_om
  • 20 ноября 2015, 20:19
0
А желание подробнее разжевать это всё у вас не возникнет случайно? ;-)
+
avatar
  • ksiman
  • 20 ноября 2015, 20:29
0
Что именно интересует?
+
avatar
  • mr_om
  • 20 ноября 2015, 20:34
0
В идеале — подробнейший отчет, как у автора, с более совершенной схемотехникой чтоб самому не бродить по граблям без должного опыта. Но я понимаю, что это нереально :-)
+
avatar
  • ksiman
  • 20 ноября 2015, 20:36
+1
Но я понимаю, что это нереально :-)
Проект подсветки лестницы точно делать не буду :)
+
avatar
  • Vipeg
  • 20 ноября 2015, 20:48
0
12 каналов Arduino Micro
Заменчание принял. Я тоже рассматривал схожие варианты. Меня остановило отсутствие адекватной возможности использовать 12 каналов ШИМ на Arduino. А если понадобится больше? 16, например? А если ещё больше?
+
avatar
  • ksiman
  • 20 ноября 2015, 21:04
+1
Меня остановило отсутствие адекватной возможности использовать 12 каналов ШИМ на Arduino.
Программное ШИМ нормально работает
А если понадобится больше?
STM32F103C8T6 — хватит до 24 каналов
+
avatar
  • Vipeg
  • 20 ноября 2015, 21:13
0
Программное ШИМ нормально работает
Если контроллер больше ничем не занят — да, неплохо. Но применительно к экономии $1 за 16-канальный драйвер с аппаратным ШИМом — сомневаюсь. Про STM-ы — вопросов нет. Они быстрее, но и писать «под них» сложнее. Я только вот первый проект Arduino выложил…
+
avatar
  • ksiman
  • 20 ноября 2015, 21:17
+2
Если контроллер больше ничем не занят — да, неплохо
Можно сказать, что у Вас контроллер почти ничем больше не занят :)
Кстати, ШИМ лучше делать нелинейным, чтобы визуально яркость менялась плавно
Там зависимость квадратичная
www.russianelectronics.ru/leader-r/review/2195/doc/57568/
+
avatar
  • Vipeg
  • 20 ноября 2015, 21:30
0
ШИМ лучше делать нелинейным
Согласен и с этим. Даже больше — по-хорошему ШИМ нужно подбирать по эффективному значению тока в ленте для каждого уровня яркости, а не эффективного напряжения. Но в моём проекте всё упрощено с целью максимально простого восприятия кода. Код намеренно выложен в открытом виде, чтобы кто-то, при желании, мог его доработать «под себя». Если возникнет такая необходимость.
+
avatar
  • tklim
  • 22 ноября 2015, 01:41
0
как раз данный тип диммирования дает линейную зависимость между коэффициентом заполнения ШИМ и средним током. Тут скорее вопрос в том что светодиоды в ленте нелинейно светят относительно тока. Могу только предположить, что линейный участок будет 0..(60-80)%, а дальше уже просто идет в нагрев
+
avatar
  • ksiman
  • 22 ноября 2015, 08:12
+1
Тут дело в восприятии яркости света глазом — она резко нелинейная
+
avatar
+1
Ардуино затягивает. Хочется сделать и то, и другое. И это здОрово! Ещё какие проекты реализовали? Показывайте.
За такой проект плюс! Три плюса!
+
avatar
  • Vipeg
  • 20 ноября 2015, 20:51
+3
Проектов не то, чтобы много, но они есть. Некоторые — весьма узконаправленные. Некоторые — более универсальные. Искренне буду искать время и возможность поделиться последними с пользователями MySKU.
+
avatar
+1
у меня вот в голове засела идея сделать управление отоплением по всему дому на ардуине т.к. все те проекты, что находил — не совсем подходят. оно и понятно — дом дело очень индивидуальное, а уж его СО так вообще )))
даже закупился всякой всячиной, но что-то никак не доберутся ни руки ни голова до этого моего ПЕРВОГО проекта :)
… а сложности есть — 2 этажа, 5 комнат, теплые полы, ванная, туалет, ГВС, и всего один насос и все это на допотопном АКГВ-29 без электроники вообще )))))
уж даже сомневаюсь — потянет ли ардуинка?
+
avatar
  • ksiman
  • 20 ноября 2015, 23:27
0
Начинать надо с более простых и менее ответственных проектов :)
+
avatar
+1
блинк? ))))))))))))))))))))))))))
+
avatar
  • ksiman
  • 21 ноября 2015, 00:24
0
Ага, встроенный
+
avatar
0
кстати о простых… Не попадались часом проекты мультиварок? Давно хочу самую мелкую и бестолковую вразумить. Понимая, что ничего сложного, но не хотелось бы топтаться по уже хоженым граблям. Да и алгоритмы готовки велосипедить. Я не про программную часть, а физиологическую — сами производители предпочитают умалчивать.
+
avatar
  • ksiman
  • 21 ноября 2015, 11:13
0
Изобретать то, что давно и недорого продаётся в любом магазине — неблагодарное дело…
+
avatar
0
1. Я не собираюсь ничего изобретать, я планирую модернизировать имеющиеся.
2. Да, мультиварки управляемые по вайфай, с загрузкой рецептов действительно существуют и продаются. Но я бы не сказал, что давно и недорого.
3. Среди них однозначно нет мелких, на полтора литра. А мне нужна именно такая. Она у меня даже есть, но пользоваться ей из-за совершенно бредового софта практически нереально. И речь в каменте шла именно о о ней. Мало того, у остальных с алгоритмами — тоже беда-беда. Это я как владелец трех разных утверждаю( а еще парочка через мои руки мельком проходили).

И да, мне не нравится идея отдавать лишние 10-20 тысяч за сопливые бредни маркетологов… :)
+
avatar
  • Vipeg
  • 20 ноября 2015, 23:51
0
сделать управление отоплением по всему дому на ардуине
А чем конкретно нужно управлять? Насосами, задвижками или чем? Ну, если не секрет, конечно.
+
avatar
0
управлять термоголовками клапанов в привязке к циркуляционнику. при срабатывании команды на открытие какой-либо термоголовки должен(с задержкой в 2-3 минуты, дабы не получить гидравлическое КЗ) включаться насос(если он еще не включен от другой команды)
в дальнем зАмысле — внедрить газовый клапан от термопушки в котел и управлять температурой теплоносителя в зависимости от температуры и ветра на улице(погодное регулирование).
это по отоплению
с ГВС сложнее. здесь зависимость от температуры котла, воды в контуре и накопителе гвс и наличия расхода воды.
+
avatar
  • Vipeg
  • 21 ноября 2015, 11:13
+5
Думаю, ничего принципиально сложного в Вашем будущем проекте нет. Уверен, производительности Arduino хватит «за глаза». Единственная потенциальная проблема, как я её вижу, заключается в том, что устройства «раскиданы» географически. Следовательно, Вам нужно решить, как Вы их будете подключать к контроллеру: будет ли это радиоканал, сеть (если сеть, то какая). Также ввиду высокой степени ответственности нужно продумать настройки по дефолту и действия контроллера на случай, если данных от нужных датчиков внезапно нет. То есть продумать устойчивость к аварийным ситуациям, отказоустойчивость.
+
avatar
0
спасибо за совет — Вы совершенно правильно видите ситуацию :)
+
avatar
  • Leonardo
  • 03 декабря 2015, 11:59
0
насчет радио нужно думать, а вот 485 вполне думаю подойдет как проводной
+
avatar
0
и всего один насос
ой! вру — второй насос стоит в контуре ГВС для приготовления воды в накопителе путем циркуляции через ТО котла.
+
avatar
  • ZaYAC
  • 20 ноября 2015, 21:14
0
А если человек остановится поговорить с другим около датчика перед лестницей. Разговаривая он может пошатываться или даже немного перемещаться отходя от зоны чувствительности датчик и возвращаясь к нему.
Как будет вести себя подсветка лестницы?
+
avatar
  • ZaYAC
  • 20 ноября 2015, 21:20
+1
Все, ответ нашел:
Также хочу обратить Ваше внимание, что, имея всего 2 сонара по краям лестницы, очень сложно симулировать и предсказать модель поведения людей на лестнице. Очень сложно. Поэтому приходилось постоянно упрощать модель до допущений.
+
avatar
0
акселерометр в каждую ступеньку встроить и развлекайся как хочешь. 8)
+
avatar
+1
Уважаемый Vipeg!
Спасибо за обзор! Приятно читать!
Вы третий, после ксимана и кирича, чьи обзоры меня так потрясают!
+
avatar
  • Vipeg
  • 20 ноября 2015, 21:34
+1
Спасибо.
Рад, что кому-то обзоры нравятся. Полностью согласен с Вашим списком интересных авторов, но считаю, что многих в этом списке не хватает. Хотя понимаю, что всё субъективно.
+
avatar
0
К сожалению, редко нахожу время читать mysku, и не знаю всех достойных авторов. Но с давних времен читаю ksiman'a и kirich'a, и всегда точно знаю наперёд, что их обзоры будут интересны и познавающи ( хоть и не всегда понятны:-)), поэтому они в моем списке.
+
avatar
  • M30
  • 26 июня 2016, 11:59
0
Здравствуйте.Собрал схему по Вашему описанию, всё работает, но с одним недочетом.При выключении сверху вниз, нижняя(первая) ступень остаётся гореть.Подскажите как это исправить.
+
avatar
  • DDimann
  • 20 ноября 2015, 21:28
+2
Второй плюс подряд одному и тому же автору :)
Вообще идея «волновой» подсветки витала в воздухе — если припомнить старые фантастические фильмы, то там это встречалось довольно таки часто.
Я даже в каком то обзоре про подсветку не помню где даже написал, что так и ждал там «волны».
Но реализовать непротиворечивый алгоритм при использовании двух датчиков вряд ли удастся — хотя и хрен с ним.
Если в половине случаев все работает верно — а передвижение двух человек навстречу друг другу (про одиночного пешехода я вообще молчу) перекрывает заметно больше половины возможных случаев — не вариантов, а, скажем так, вариантов помноженных на вероятность их возникновения — то и хрен с ним.
Остальное — это уже просто если ради интересу делать, только усложнение и удорожание проекта.
А так — получилось довольно оптимально, на мой взгляд.

Кстати, о вероятностях…
Снял один математик даму, утром ей захотелось показаться поумнее, и задала она вопрос:
— Дорогой, а что такое теория вероятности?
— Ну, как тебе сказать… Вот подойди к окну — ты видишь пустую улицу. Наверняка скоро появится пешеход, это будет или мужчина, или женщина. Вероятности этого равны.
Может подряд появиться двое мужчин или две женщины — но вероятность этого намного меньше.
Конечно, может случиться и так, что подряд пройдут сто мужчин или сто женщин — но вероятность этого очень мала, и вряд ли такое случиться. Понятно?
— Ага. — сказала дама.
… в это время послышалась музыка и из за угла показался полковой оркестр…

Но не будем рассчитывать на то, что по лестнице в одну сторону (или встречно) пройдет полк :)

Кстати, я бы не сказал, что
без них будет выглядеть депрессивно-дёшево
это про панельки для микросхем.
Скорее все таки наоборот — панельки фактически используют только при отладке, иногда — если часто летит какя то микросхема, хотя если она летит — это просчет разработчика.
А без панелек плата принимает законченный, промышленный вид.
Я запомнил только одно «чудо», напичканное панельками: ЕС1845.
Там применялись как наши, цельнослизанные микросхемы, так и буржуинские, которые слизать не успели.
Наши были, как и положено, с шагом выводов 2,5 мм, буржуинские — 2,54 мм.
И колодки были двух видов — 2,5 и 2,54
Но я до сих пор не могу понять, почему микросхемы с шагом 2,54 стояли в колодках с шагом 2,5 и наоборот…
Приходилось примерно раз в неделю доставать платы и прожимать все мелкосхемы.
Кто помнит конструктив 1845, тот поймет — это куча винтов, крепящих платы в корзине, и куча прикрученных раземов с кабелями на торце каждой (почти) платы…
+
avatar
  • Vipeg
  • 20 ноября 2015, 21:49
0
Скорее все таки наоборот — панельки фактически используют только при отладке
Во-первых, хочу Вас поблагодарить за столь полный и развёрнутый комментарий. Приятно читать: очень хорошо и аргументированно изложено.
Во-вторых, хочу пояснить, почему я так сказал по поводу панелей. Попал недавно ко мне в «поле зрения» старый компьютер. Западной сборки, к сожалению не обратил внимания на марку. Кстати, 286-ой. Ровесник ЕС-ок, так сказать.
И как же приятно было заглянуть вовнутрь! Панельки для видеопамяти (VGA!), панельки для двух микросхем биоса (с ультрафиолетовым стиранием, с позолоченными ножками, в керамическом корпусе), панельки ещё чего-то там… И я вспомнил, как делают нынешние компьютеры, особенно бюджетные. Сразу понимаешь, что тот 286-ой делали «на века», не экономя. Это настолько глубоко впечатляет! Тяжело забыть «ту» картинку, «тот» привет из конца восьмидесятых — начала девяностых…
+
avatar
  • DDimann
  • 20 ноября 2015, 22:22
0
Кстати, я действительно забыл упомянуть про такое использование панелек, как у Вас написано.
Действительно — там, где использовались ПЗУ — либо с УФ стиранием (незабвенные 573РФ..., 51-е микроконтроллеры, и не только они — были MSP430 с УФ, даже Altera в 90-х выпускала ПЛИС с УФ стиранием, 18хх какая то, уже не помню), либо и с электрическим — как тот же БИОС часто ставили в свое время на панельки, не всегда получалось прошить утилитами на плате — приходилось на программаторе (иногда приходилось и выпаивать).
Вполне оправдано.
С ОЗУ и прочим — скорее всего, модификации: можно в ту же разводку поставить другую микросхему с юольшим объемом памяти, к примеру — наклепали плат и потом продают по разной цене в зависимости от установленной микросхемы.
Но в этом случае все таки нет законченного вида, типа вот мы сделали полуфабрикат — а под Ваши требования можем по быстрому на его основе…

А насчет 286-ой делали на века…
Да, они были заметно надежнее.
У них были гигантские по нынешним меркам технологические нормы.
У них была тактовая частота… по сравнению с нонешней — постоянный ток :)
У них было мизерное количество вентилей на кристалле — опять же по сравнению с сегодняшним днем.

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

Когда то мне попалась такая фраза: программируемый калькулятор уровня Б3-21 можно было сделать на лампах.
Просто повторив всю схему один в один.
Только по той же теории вероятностей сразу при включении вылетит одна из ламп, и пока будут искать неисправную — вылетит еще несколько.
Так что за все приходится платить, в том числе за миниатюризацию и интеграцию — надежностью.
И вряд ли при нашей жизни что то измениться, да и после нашей…
+
avatar
0
У них была тактовая частота…
И была замечательная кнопка «Турбо» — для совместимости, позволяющая выставлять «эталонную».
+
avatar
  • DDimann
  • 21 ноября 2015, 15:12
0
… и в винде 3.11 был режим i386…
+
avatar
0
передвижение двух человек навстречу друг другу
если честно, видел мало домов(вернее не видел вовсе) по лестнице которого шли бы одновременно навстречу друг другу два человека(если только это не дети играют). обычно один ожидает, когда пройдет другой. А вариант дворцов с потемкинскими лестницами не для этой самоделки ;)
+
avatar
  • spc
  • 20 ноября 2015, 21:51
0
Максимальный ток цифровых пинов Arduino Nano (и других) — 40 мА. Рабочий ток HС-SR04 (по даташиту) — 15 мА. Только я не понимаю, зачем нужны транзисторные ключи?
+
avatar
  • Vipeg
  • 20 ноября 2015, 22:08
+1
Как я уже писал в теле обзора, они нужны для того, чтобы «ресетить» подвисающие сонары. С этими сонарами (HC-SR04) бывает, что возникают такого рода проблемы — качество изготовления у них «не торт».
UPD: вот подробности, если интересно: http://forum.arduino.cc/index.php?topic=55119.15. Читать за 2015 год.
+
avatar
  • ksiman
  • 20 ноября 2015, 22:25
0
они нужны для того, чтобы «ресетить» подвисающие сонары.
Можно было одним ключом обойтись и сбрасывать оба сразу
+
avatar
  • Vipeg
  • 20 ноября 2015, 22:40
0
Можно. Но часто зависают не оба, а один. К тому же контроллер допускает использование, например, PIR датчика. И не факт, что их будет 2: с одной стороны может быть, например, PIR, а с другой тот же HC-SR04. Ресетить PIR с его временем инициализации просто «заодно» — кощунство. Я предполагал наиболее универсальный вариант. К тому же при цене доллар за 50 штук экономить транзисторы не имело смысла.
+
avatar
  • spc
  • 20 ноября 2015, 22:26
0
А, например, не вдаваясь в теорию, выставить пин в input, а потом в output/low — не вариант?
+
avatar
  • ksiman
  • 20 ноября 2015, 22:28
0
Ключом надёжнее :)
+
avatar
  • Vipeg
  • 20 ноября 2015, 22:34
+2
выставить пин в input, а потом в output/low — не вариант?
К сожалению, нет. Это первое, что я проверил. При снятии low в связи с переходом обратно в режим input на входе всё равно висит high.
+
avatar
  • Leonardo
  • 03 декабря 2015, 12:05
0
может подтяжка срабатывала?
+
avatar
  • Vipeg
  • 03 декабря 2015, 19:55
0
Внешней подтяжки нет. Внутренняя в Arduino по дефолту не включается — её нужно включать отдельно записыванием в порт, являющегося в данный момент входом (пином).
+
avatar
+1
Просто замечательный обзор и отличный проект!!!+++++
Побольше бы таких рукастых и головастых :)
+
avatar
  • hummerr
  • 20 ноября 2015, 22:20
0
Вот это Обзор!!! Супер!!! Летом хотел ещё сделать на дачу, подъём на второй этаж. Буду делать по Вашему проекту на лето! Большое спасибо за Обзор!
+
avatar
0
сильно упростить железо можно если применить ленту на светодиодах ws2812.

Предлагали мне проект сделать за 15тр. Тогда отказался, надо подумать может и взяться ))
+
avatar
  • Vipeg
  • 21 ноября 2015, 00:00
0
Думаю, управлять каждым отдельным светодиодом каждой отдельной ступеньки — это чересчур. А если общее количество светодиодов будет большим, скорость обновления будет практически никакой. Если я правильно понял, какие именно ленты Вам предлагали. Но даже это всё — ерунда, по сравнению с общим током потребления всех этих светодиодов, причём при 5 вольтах. Будут гигантские потери в проводах…
+
avatar
0
в доме, обычно, живут мышки(не редко), кошка(почти всегда), собака(часто)… не «офигеют» ли они от сонаров?
+
avatar
  • ksiman
  • 20 ноября 2015, 23:29
0
Там частоты выше их диапазона восприятия
+
avatar
  • birdtlt
  • 01 февраля 2016, 11:06
0
всем привет!
Я с год назад тоже делал аналогичную подсветку (на столе, т.к. в доме еще ремонт) и помнится меня очень напрягало то, что во время режима ожидания, видимо от сонаров, слышны щелчки, в полной тишине достаточно навязчивые… Кошка тоже сидя рядом ушами водила — слышала…
Поэтому мне пришлось «уйти на оптику» — на ик-дальномеры.
А вас не раздражают щелчки от сонаров?
На видео от Лукьянова они тоже слышны…
+
avatar
  • Boriz
  • 21 ноября 2015, 01:34
0
Большое спасибо за проект!
+
avatar
+2
На мой взгляд, это лучший (или один из лучших) обзор, который я читал на mysku.
Сам предмет обзора мне не очень интересен, но стиль изложения, обстоятельность, логика — однозначно лучшие.

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

Также, по просмотру видео у меня появились вопросы:
продемонстрированные реакции на пересекания — это все, что умеет контроллер, или там заложены и более сложные алгоритмы?
Например, если человек дошел до середины лестницы, но потом решил вернуться обратно?
Или, два человека шли навстречу друг-другу с небольшим сдвигом, т.е. сонары сработали так: верх-низ-пауза-низ-верх?
+
avatar
  • Vipeg
  • 21 ноября 2015, 11:07
0
если человек дошел до середины лестницы, но потом решил вернуться обратно?
При пересечении нижнего датчика однократно будет игнорироваться только верхний, но в пределах таймаута (можно изменить, но только в «теле» кода). Далее, будет зависеть от времени, затраченного на подъём до середины и спуска обратно (настроить время задержки полностью включённой лестницы в «заголовке»). Нижний датчик вероятнее всего сработает, потому что вряд ли подъём до середины лестницы и спуск обратно займёт меньше 1500 мс (это таймаут блокировки сонара, настраивается в «заголовке»). Но это срабатывание нижнего датчика, не приведёт к новому циклу загорания снизу вверх, если человек «уложится» во время задержи полностью включённой лестницы (по дефолту, 7 сек, можно изменить в «заголовке»). Только погаснут ступеньки потом снизу вверх. Это ограничение, обусловленное использованием всего двух сонаров по краям лестницы.
+
avatar
  • sir0ta
  • 22 ноября 2015, 05:58
0
А если сонары разместить под перила? И не 2, а скажем 1 на 2-3 ступеньки?.. Так получится подсвечивать отдельные зоны, проще будет предугадать положение следующее.
+
avatar
  • ebook
  • 21 ноября 2015, 08:20
0
очень понравилось, молодец автор
+
avatar
0
Автор супер!!! только ради этого зарегался )))
Дружище я в этом не бум бум, а если я оплачу ваши расходы и работу могли бы вы мне смастерить такую штуку ???
+
avatar
  • Vipeg
  • 22 ноября 2015, 01:02
+1
Спасибо за отзыв. Что касается Вашего вопроса — ответ Извините, но нет. Я объясню, почему.
Как я писал в обзоре, даже такой относительно простой проект я готовил около года. Он имеет статус хоббийного. У меня действительно мало свободного времени. К тому же я не планировал на проекте зарабатывать, «портить» его коммерческими рельсами. Именно поэтому я выложил все детали по нему в открытый доступ. Но я, понимая, что возможно кто-то захочет повторить проект, расписал всё по нему настолько подробно, насколько это было возможно.
Прошу меня понять.
+
avatar
  • lvolod
  • 22 ноября 2015, 01:50
0
Только сегодня увидел Ваш обзор. Очень впечатлило. Тоже заказал кое-что из Ардуино. Хочу сделать контроль температуры-влажности в серверной (для своего спокойствия) с выводом по Ehernet на гаджет на экране монитора. Пока жду железки.
По поводу алгоритма (логики) зажигания-гашения подсветки лестницы: Использование еще пары сонаров сильно упростило бы задачу — 2 вверху и 2 внизу. При анализе срабатывания пары сонаров вверху или пары внизу лестницы, расположенных последовательно, можно делать вывод о направлении движения человека. Тогда сделать счетчик людей на лестнице (растет при пересечении сонаров от края лестницы к середине и уменьшается при пересечении от центра лестницы к краям). Подсветку не гасить, пока на лестнице есть люди, начинать гашение при нулевом счетчике со стороны противоположной от последнего пересечения. Тогда должно правильно работать даже если человек зашел на лестницу, постоял, развернулся и ушел назад. Счетчик все равно обнулится и подсветка начнет гаситься.
Недостаток данного решения — если 2 человека будет пересекать пару сонаров параллельно (один скрывает другого), и сонары их посчитают за одного человека. Но это должна быть широкая лестница. Ну и удорожание проект на 3.36$
+
avatar
  • Vipeg
  • 22 ноября 2015, 12:37
+1
Спасибо за развёрнутый комментарий. Безусловно, рациональное зерно в Ваших словах есть. Приятно, что обзор стимулировал рождение новых мыслей и предложений.
+
avatar
  • sir0ta
  • 22 ноября 2015, 05:55
0
При программировании Arduino лично я пользуюсь Sublime Text. Попробуй.
И еще вопрос в uno/nano и иже с ними при подаче питания через vin и т.д. на + в usb порту есть питание? Все забываю проверить.
+
avatar
  • Vipeg
  • 22 ноября 2015, 12:38
0
Sublime Text
Спасибо, действительно, выглядит интересно. Попробую рассмотреть поближе на досуге.
+
avatar
  • sir0ta
  • 22 ноября 2015, 13:52
0
Единственное я пока не нашел дерево функций/процедур/переменных, немного не удобно пеерзжать. А так же не нашел плагин который позволяет прыгать по Ctrl+ЛКМ на функцию/процедуру/переменную под мышкой. В делфях очень привык к этому и жить без этого не могу. Очень много времени во время отладки уходит на поиск функции.
+
avatar
0
А не подскажите, куда можно воткнуть в этой схеме фоторезистор с подстроечником, чтобы это устройство только вечером начинало работать? Сам в электронике не силён. Спасибо!
+
avatar
  • ksiman
  • 22 ноября 2015, 19:09
0
Простейшая реализация
+
avatar
  • MyAsk
  • 22 ноября 2015, 21:56
0
Просто охренеть можно, до чего довели людей эти ардуины!

Полистайте подшивки старых Радио или «В помощь радиолюбителю» — раньше, в 70-е годы, подобные «проекты» делали на транзисторах, реле или тиристорах.
А тут алгортимы, софт, микроконтролер — из пушки по воробьям!
Позорище, люди разучились делать вещи просто и со вкусом…
+
avatar
  • ksiman
  • 22 ноября 2015, 23:39
+2
раньше, в 70-е годы, подобные «проекты» делали на транзисторах, реле или тиристорах.
Ещё раньше — на электромеханике.
+
avatar
  • Vipeg
  • 23 ноября 2015, 10:15
+3
Немного не понимаю Ваших доводов.
По-моему, контроллер за 2 бакса позволяет как раз-таки избавиться от «вороха» запчастей, которые занимают немалый объём, стоят денег и потребляют немалый ток. Более того, в контроллере всегда можно изменить алгоритм под себя, а вот с «аппаратной» реализацией в куче деталей всё намного сложнее.
+
avatar
+1
Человек застрял в 80-х, и не понимает преимуществ МК перед аналогом.
Или просто не хочет изучать программирование.
Естественно, есть задачи, с которыми дискретные схемы гораздо проще и надёжнее. Но чем больше проект, тем сложнее и дороже его реализовать таким образом.
+
avatar
0
Автор молодец! Удачи в дальнейших проектах:) Спасибо за баг HC-SR04, не знал о нем — на основе их (WinAVR, прототип на основе модулей arduino) скоро буду робот-косу собирать)))
+
avatar
0
Первый шаг к восстанию роботов хотите сделать? :)
+
avatar
0
До меня уже все придумано, просто ценник не гуманный…
+
avatar
  • Graus
  • 23 ноября 2015, 21:40
0
У меня тоже нет лестницы, в подъезде сделаю!
+
avatar
0
подумалось тут: вот есть светодиоды со встроенным контроллером ws2811. если существуют такие контроллеры в виде микросхемы, а в идеале — с выводами для подключения транзисторов, а не светодиодов непосредственно, то вся конструкция сразу становится на порядок интереснее. то есть у нас идет два силовых провода и один управляющий, а на каждой ступеньке стоит контроллер фактически на одной микросхеме и транзисторе (ну или каком-нить мощном оптроне). при желании можно поставить три транзистора и замутить RGB — опять же, всего ТРИ провода, и индивидуальное управление каждой ступенькой. ну и управляет всем этим богатством та жа ардуина, только для управления используется всего один вывод. плюсы видятся в резком уменьшении числа проводов, что критично для лестниц с большим количеством ступенек и/или лестниц с «ажурной» конструкцией, где провода особо некуда прятать, ну и возможность простого апгрейда до RGB. минус — некоторое удорожание системы, ну и некоторое снижение надежности — обрыв управляющего провода в середине цепочки — отключит все последующие ступеньки. еще как вариант, конечно, на каждую ступеньку установить просто запараллеленные светодиоды со встроенным контроллером, что исключит наличие внешнего контроллера для каждой ступеньки, но вся система при этом уже заметно подорожает…
+
avatar
0
Доброго времени суток. Заинтересовался проектом, но как человеку далекому от электроники, объясните пожалуйста, какой толщины нужно использовать дорожки на печатной плате? Делаю на одностороннем текстолите, схему нарисовал в diptrace, толщину дорожек выбрал 0,75мм, нагружать по 5А на каждый транзистор естественно не собираюсь, для теста возьму небольшие отрезки светодиодной ленты, но вдруг придется…
+
avatar
  • Vipeg
  • 09 декабря 2015, 09:44
0
Я пользуюсь Sprint Layout, при выделении дорожки в которой можно посмотреть предельно допустимый ток. Если кратко, то при «стандартной» толщине меди на текстолите и известной ширине дорожки можно посчитать сечение проводника. А зная сечение и материал (медь) — предельно допустимые токи. Это в идеале. Что касается Вашего вопроса — 0,75мм — предельно допустимый ток — 2 ампера, хотя больше одного я бы нагружать не стал. Для 5 ампер ширина дорожки — минимум 2мм. Следуя той же логике, я бы сделал миллиметра 3...4.
+
avatar
  • vil2
  • 09 декабря 2015, 09:29
0
Чувак ты сильный!
ты меня вдохновил.
Буду своим двум мальцам светофор собирать! на рынке купил индикаторы 3х цветов — для промышленности сразу со светодиодами. купил ардуинку за 2,5 бакса и корпус пластиковый за 0,5 бакса. многое из обзора подчерпнул — спасибо.
+
avatar
0
Добрый день! Уже заказал платы (по Вашей ссылке, 10 шт.), сижу, заказываю комплектующие. Я вроде понимаю, но уточню на всякий случай: две дип-панели (DIP-14, DIP-28) ведь не обязательно нужны? Извините за столь наивный вопрос, электроникой занимался в далеком детстве и боюсь, что за столько лет может я что-то пропустил :-) Могу я без панелек просто микросхемы в плату запаять?
Друг строит дом с баней, рассказал ему про Ваш проект, буду экспериментировать на его банной лестнице в мансарду. У меня весной тоже планируется 2-х этажное строительство, если на бане эксперимент пройдет успешно, буду повторять!
+
avatar
0
Перечитал статью еще раз, увидел, что панельки не обязательны.
Подскажите пожалуйста для «особо талантливых» как «залить» программу в контроллер? Хотя бы направление — в какую сторону «копать»?
И, если это не будет сильной наглостью, сфотографируйте пожалуйста крупно готовую плату с впаянными деталями с разных ракурсов. Очень боюсь наделать ошибок при монтаже.
+
avatar
0
Извините еще раз. Не нашел на схеме DC-DC преобразователь.
+
avatar
  • Vipeg
  • 21 января 2016, 21:24
+1
Он не обозначен. Он просто подразумевается, так как в схеме используется только 2 напряжения: 12 и 5.
5 как раз получается на выходе dc-dc, на его вход, соответственно, подается 12в.
+
avatar
0
Поправьте ошибку в схеме. Согласно даташиту на http://radio-hobby.org/uploads/datasheet/37/74ls/74ls04.pdf, а в моем случае к555лн1, входы должны быть 1,3,5,9,11,13. Не посмотрел сразу — собрал, стал проверять — половина каналов не работает.
+
avatar
  • Vipeg
  • 20 января 2016, 15:24
0
Исправил, спасибо за замечание. Оставлял в схеме сноску «Note PIN config», и забыл её исправить. Вы, видимо, сами разводили плату, я так понимаю.
+
avatar
0
А как же Ваша плата, она будет работоспособна?
Прочитал Ваш ответ в личке, фу-уух плата рабочая, спасибо!
+
avatar
+1
Все верно. На руках была только ардуино уно и отсуствие опыта изготовления плат, так что решил начать с простого. Разделил схему на 2 части: блок управления (5940 и инверторы) в виде «шилда» для ардуино и блок с транзисторами. Все на одностороннем текстолите для простоты кустарного изготовления.
+
avatar
  • pogriban
  • 01 февраля 2016, 13:25
0
Добрый день моглибы Вы пожалуйста поставить проект одностороней платы. Спасибо
+
avatar
  • Lisk120
  • 28 января 2016, 17:19
+1
Отличный проект. И как раз вовремя. В доме делаем как раз лестницу. Попробую реализовывать. Заказал все по ссылкам. Платы уже пришли. Остальное в пути. Спасибо.
P/s Из 10 плат мне нужно только 5. Если кому то понадобится оставшиеся в Москве. Напишите в личку.
+
avatar
  • vili
  • 01 марта 2016, 15:56
0
можно приобрести платы
+
avatar
  • Lisk120
  • 01 марта 2016, 22:10
0
Да пока в силе. В личку написал. Всем кто купил спасибо.
+
avatar
  • tolzdol
  • 10 марта 2016, 18:23
0
Можно ли у вас купить плату?
+
avatar
  • Vipeg
  • 13 марта 2016, 21:15
0
Нет, у меня нет. Извините.
+
avatar
  • M30
  • 09 апреля 2016, 17:41
0
Остались ещё платы?
+
avatar
  • Lisk120
  • 10 апреля 2016, 00:27
0
Да. В личку написал
+
avatar
0
Добрый день!
Есть ли еще возможность приобрести у Вас платы для подсветки лестницы (нужна 1 шт)?

Спасибо!
+
avatar
0
добрый день Всем я начинаюший в этом деле можете дать схему на один слой потоьу что денег на 10 плат нету
+
avatar
  • Vipeg
  • 19 февраля 2016, 20:37
+1
Схема приведена в обзоре. Проекта разведённой платы для одностороннего текстолита у меня нет. Свою первую попытку я сам же давно «забанил». Думаю, придётся самостоятельно её разводить в Sprint Layout, например.
+
avatar
  • pogriban
  • 02 февраля 2016, 10:46
0
Многоуважаемый Vipeg поставьте пожалуйста фотографию готовым роектам
+
avatar
  • Vipeg
  • 19 февраля 2016, 20:43
0
Добавил. Смотрите UPD.
+
avatar
  • pogriban
  • 20 февраля 2016, 01:14
0
спосибо не заметил
+
avatar
0
Здравствуйте Виктор! Заинтересовался Вашим проектом, вытравил плату, собрал.
Вот только досада, не могу залить скетч!? Выдает ошибку компиляции.
В ардуино я новичек, прошивки заливал через программаторы без проблем, а вот с ардуино стопор.
Может, подскажете как правильно сделать? может до скетча нужно что-то еще проделать?
Заранее благодарен за любой ответ!
+
avatar
0
Загрузите библиотеку
+
avatar
0
Благодарю за ответ! Библиотеку загружаю, добавляю скетч и все равно выдает ошибку компиляции. Скетч пытаюсь залить программой Arduino-1.6.7
+
avatar
  • Vipeg
  • 01 марта 2016, 20:08
0
Требуется скриншот экрана. Объяснил всё в «личке».
+
avatar
0
Виктор, огромное спасибо!!! Все получилось. Да действительно, нужно было скопировать скриншот прямо с сайта. А вот с архива ну ни как не получалось. Здоровья, удачи, всех благ, Вам и Вашим родным!!!
+
avatar
  • vili
  • 01 марта 2016, 15:49
0
помогите собрать схему подсветки лестницы есть небольшой опыт но нужен консультант что нужно конкретно
+
avatar
  • Vipeg
  • 01 марта 2016, 20:13
0
Какие конкретно вопросы у Вас возникли?
+
avatar
  • vili
  • 02 марта 2016, 08:21
0
Вытравливаю плату пояю её что дальше
+
avatar
  • Vipeg
  • 02 марта 2016, 09:17
0
Дальше нужно установить драйверы на Arduino, залить скетч в Arduino и вставить его в готовую спаянную плату. Как заливать скетчи в Ардуино, лучше смотреть в видеоуроках на youtube.
+
avatar
  • vili
  • 09 марта 2016, 20:16
0
а есть плата на продажу я бы приобрел чтобы самому не травить
+
avatar
  • Vipeg
  • 13 марта 2016, 21:14
0
Нет, у меня нет. Извините.
+
avatar
0
У меня вопрос по поводу микросхемы hd74ls04p возможно ли заменить на российский аналог К555ЛН1.
+
avatar
  • Vipeg
  • 13 марта 2016, 21:16
0
Да, вполне. Это аналог.
+
avatar
  • RUSODUA
  • 15 марта 2016, 01:00
0
Добрый вечер. Не подскажете как изменить программу что бы включить проверку датчик освещения (что бы когда светло подсветка не работала (впустую не работали сонары ))? В наличии есть аналоговый и цифровой датчик освещенности. Если программно трудно то может аппаратно? Спасибо.
+
avatar
  • Vipeg
  • 18 марта 2016, 15:15
0
В начале комментариев товарищ ksiman предложил отличное аппаратное решение. Изменения скетча не требуется.
+
avatar
  • vili
  • 18 марта 2016, 15:59
0
а в схеме нужно что то менять если ступеней 16 шт.
+
avatar
  • RUSODUA
  • 18 марта 2016, 17:32
0
Спасибо за ответ.
Пробовал данный вариант но не смог получить нужную чувствительность (срабатывает при прямом за свете датчика).
Подскажите пожалуйста:
1. Номинал подстроечного резистора?
2. Из Вашей оригинальной схемы нужно убирать резистор 10к (между BLANK и DCPRG) при использовании датчика освещенности?
Датчик освещенности такой arduino-ua.com/prod184-Datchik_osveshhennosti.

Так же заметил что при определенном уровне освещенности происходит частое («моргание»(дребезг)) включение-выключение подсветки. Как можно это устранить?
Спасибо.
+
avatar
  • vili
  • 18 марта 2016, 14:20
0
нашел платы у Lisk120 кому надо
+
avatar
0
мне
+
avatar
  • M30
  • 07 апреля 2016, 21:04
0
Остались ещё платы?
+
avatar
  • shvak
  • 06 апреля 2016, 15:04
0
Тоже не лишено недостатков.
А если я поднимался, но на середине лестницы решил вернуться?
А если я бабуля или маленький ребёнок, который медленно поднимается?
Я бы сделал датчик на каждой ступеньке и при срабатывании n-датчика зажигал бы n+1 и n-1 ступеньку. Не думаю, что поставив ногу на ступеньку, кому-то нужно продолжать её освещать. Освещаются только нижняя и верхняя от сработавшего датчика. И вопросы с двумя, тремя,… семью людьми на лестнице больше не возникают в каких направлениях они бы не шли.
+
avatar
  • esa
  • 07 апреля 2016, 16:00
0
Во-первых, ни кто вас не заставляет делать все «под копирку».
во-вторых, зачем на каждую ступень ставить сонар, можно сонар расположить продольно пролету ступеней и «играть» дистанцией, который выдаст сонар.
+
avatar
  • serand
  • 02 июня 2016, 00:06
0
Или два сонара вверху и внизу.
+
avatar
  • l6l6l6l
  • 26 апреля 2016, 17:50
0
Добрый день Виктор.
Спасибо за замечательное описание.
Есть вопрос. А если всё-таки ставить IRLZ44N, то радиаторы на них тоже нужны или сами справятся, если в районе 5 Ватт на канал (1м. 3528/60 ленты)?
Не сильно хочется нагромождать. Если нет, то какой выход есть без радиаторов?
Ещё раз спасибо!
+
avatar
  • TViN
  • 11 мая 2016, 16:07
0
Виктор, здравствуйте! Спасибо за столь замечательный обзор! Хотел бы попросить помощи при переделывании скетча под PIR датчики, от каких переменных надо будет избавиться и какие части кода можно будет убрать, да и вообще реально ли это сделать на основе Вашего скетча:). Понимаю, что многое просто не нужно будет при использовании инфракрасников. Заранее спасибо!
+
avatar
0
Добрый день а скажите пожалуйста как поведет себя апарат при подключеня 16 LED 12V 9w каждая не будеи большая нагрузка?
+
avatar
0
Добрый день, собрал данный проект. Спасибо автору за его труды. Собрал на плате заказанной на заводе выкупленной у Lisk120, тоже отдельное спасибо. В процессе сборки столкнулся
с нехваткой питания на датчики вели себя некорректно(жили своей жизнью, ложные сработки иногда постоянно в сработке).Кабель который использовал для подсветки КСПВ 14х0,4 его сечения хватило только на ленты. (Использовал так как он был в наличии).НА датчики прокинул Кабель КВК-В-2 2х0,75 (остатки от видеонаблюдения). Запитал все от блока питания от компьютера.
+
avatar
0
Спасибо Автору за данную тему!
Решил себе «обновить» лестницу и давно была идея сделать с подсветкой. Сейчас делаю новые ступеньки вот и наткнулся на данный топик. Все подробно описано и выложен код. Покупать по 50$ уже хотел готовый, но сейчас задумался :) 10 штук мне не надо конечно, поэтому вопрос — мб кто покупал себе и есть лишние платы? Или может скооперируемся и закажем (из РБ)?
+
avatar
  • Carlos
  • 16 июня 2016, 03:14
0
Добрый день! Очень интересный проект!!! Скажи пожалуйста, можно ли запитать ленты и ардуинку через соответствующие каналы компьютерного БП ATX? Или же необходимо вносить изменения в схему БП? Очень удобный вариант… также где-то читал, что для ардуинки нужно стабилизированное питание, кое, как я знаю и даёт БП.
+
avatar
  • Carlos
  • 16 июня 2016, 03:44
0
И если можно, то какой вариант будет лучше… брать питания 12В, делать переходник (использую ардуино уно) dc jack, либо брать 5в и проводами цеплять к USB типа В…
+
avatar
0
БП от компьютера хватит, там и 5в и 12в. Я собрал тоже от компьютера.
+
avatar
  • Carlos
  • 18 июня 2016, 18:15
0
и еще… вариант предложенный ранее… включать, к примеру по 3 ступеньки вперед/назад в зависимости от положения человека на лестнице… пока что только в виде алгоритма и мониторинга 8 датчиками 20 ступенчатой лестницы… в ПО не силен… быть может кто нибудь даст совет об оптимизации ибо даже алгоритм получается весьма не легкий..
+
avatar
  • Carlos
  • 18 июня 2016, 18:28
0
также… что же придумать если ступенек больше 16? Как я понимаю ног драйвера уже не хватит… нужен еще один драйвер и еще одна ардуинка?? сильно ли изменится скетч в плане основного тела программы
+
avatar
  • esa
  • 20 июня 2016, 16:35
0
ардуинки одной достаточно, а вот tlc5940? нужно докупить.
uscr.ru/kak-podklyuchit-drajver-svetodiodov-tlc5940-k-arduino/
+
avatar
  • mr_om
  • 01 июля 2016, 19:14
0
Не делали плату на больше 16 каналов?
+
avatar
  • Vipeg
  • 06 июля 2016, 12:38
0
Не знаю, ко мне ли вопрос, но если ко мне — нет, именно плат на большее количество каналов я не делал. Однако, это сделать не тяжело, схема несложная.
+
avatar
  • Carlos
  • 22 июня 2016, 07:21
0
В примере по ссылке tlcшки подключаются по spi… генерить шим по spi эта совсем другая опера…
+
avatar
  • esa
  • 22 июня 2016, 16:33
0
по ссылке подключение идентичное с проектом.
вот подключение по ссылке
Подключите выводы драйвера к 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мА на канал.
а подключен в проекте, посмотрите выше. Схем и инфы предостаточно.
+
avatar
  • mr_om
  • 01 июля 2016, 19:13
0
А весь проект живет и актуализируется здесь или есть какое-то другое место, где он «прописан»?
+
avatar
  • Vipeg
  • 06 июля 2016, 12:36
0
Только здесь (насколько мне, автору, это известно). Несколько дней назад проект очередной раз актуализировался (bugfix).
Однако не исключаю, что где-то появились моды.
+
avatar
0
Спасибо за интересный проект и очень детальное описание скетча. Собрал проект на меге328+TLC+IRF7314. Скетч прекрасно работает, но как то вяло реагирует сонар. Сейчас хочу добавить программное отключение лестницы по датчику света и сонары (HC-SR04) на отдельных МК(ATTiny13) или заменить на PIR или ИК датчик.
+
avatar
0
Спасибо за интересный проект!
Схема не очень понравилась — очень громоздка. Выходы заменил полевиками 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;
  }
}
+
avatar
0
И еще в догонку…
Потенциальный баг в строчке
unsigned int time_us = pulseIn(sonar1echo, HIGH, 5000)
Отсутствие ответа за 5мс не является однозначным признаком «зависшего» датчика. Если расстояние большое, то датчик просто не успевает получить отраженный сигнал и возвращается по таймауту 0… И дальнейший код зря ресетит датчик. Процедура ресета отбирает питание у датчика на 100мс, что существенно тормозит выполнение кода…
Проявляется, если перед датчиком на расстоянии более 80см ничего нет (а ширина лестницы часто бывает 1 метр). В этом случае датчики будут ресетиться каждый цикл опроса. Кроме тормозов мне кажется, что постоянное включение/отключение питания датчика ни к чему хорошему не приведет.
В общем как рекомендация — поставить таймаут побольше — хотябы 10мс.
+
avatar
  • ukass
  • 21 ноября 2016, 20:53
0
Поделитесь, пожалуйста, схемой на полевиках.
+
avatar
0

Вот картинка из соседней темы mysku.ru/blog/aliexpress/39571.html
Но кондеры не нужны, а 33К заменить на 3,3К. В принципе в данной схеме «на глаз» ШИМ работает. Но, если ткнуться осциллом, то не очень красиво. Одну такую плату собрал. Полное решение по ШИМ отложил до сборки второй платы…
Весь баг заключается в том, что добиться очень-очень минимального свечения на данном ШИМ не получается. Но даже то, что получается глаз не особо коробит.
PS: OUT — к контроллеру, LOAD — диодная лента
+
avatar
  • il86md
  • 04 декабря 2016, 16:00
0
Чем унл2008 не устраивает? 8каналов по 0.5ампер, планирую именно в дип корпузе в случае ошибки вылетит именно улн, вытащил и заменил на новую, стоит 10руб.
2штуки 16ступеней подсветить.☺ никакой обвески управление по минусы вкусняшка
Не хватает ног. Тогда сдвиговый регистр в помощь
+
avatar
  • il86md
  • 05 декабря 2016, 22:14
0
Датчик перегружать при зависании не надо надо на вывод эхо сконфигурировать выход с мк и тем самым сенсор продолжит работу в штатном режиме.
+
avatar
  • Freir
  • 12 декабря 2016, 09:06
0
Повторил проект на своей лестнице. Заказал такие-же платы. Собрал. Залил скетч.
Включаю, лестница загорается. И всё. Больше ничего не происходит.
Пробовал подключать сонар коротким проводом, мало ли питания не хватает. Результат тот же.
Добавил в скетч вывод дистанций и зависаний в ком порт, подключит ноутбук и обнаружил, что при питании от ноутбука сонары адекватно работают. То есть они получают дистанции (92 см первый и 204 второй) около минуты, а потом начинают получать 64 сантиметра оба и ардуино зависает.
Может кто-то подсказать в чём может быть проблема?
Лестница у меня открытая. Питание от компьютерного БП.
+
avatar
0
Привет. Может плата завалялясь на продажу?
+
avatar
  • Robinzon
  • 18 декабря 2016, 19:36
0
Зачем колхозить, тратить время и нервы? Можно ведь купить готовый вариант. Я лично не понимаю как по схемам данную автоматическую подсветку лестницы собрать. Вон в поиске если загуглить полно решений. За два дня все элементы подключили, настроили и всё супер гуд. Работает на ура.
Еще видел в магазине www.pleer.ru в продаже, на Митинском радиорынке рынке тоже видел. Вот другой вариант контроллера продается www.stairsled.ru
+
avatar
  • SiZE
  • 20 декабря 2016, 08:16
0
Открыл макет платы, не могу понять. А где дорожка на землю Ардуино?
+
avatar
0
Автоматическая подсветка лестницы с помощью Wemos D1 ngin.pro/smart-house/252-avtomaticheskaya-podsvetka-lestnicy-s-pomoschyu-wemos-d1.html
+
avatar
0
Скажите пожалуйста что может случиться если болты радиаторов будут в контпкте друг с другом
+
avatar
0
Скажите пожалуйста может у кого есть лишьняя плата на продажу???
+
avatar
0
Да, есть. Только я не из России
+
avatar
0
O тоже из литвы? Напиши как с тобой связаться
+
avatar
0
Может viber имеешь или чиркни мне на почту kolent.j@gmail.com спасибо
+
avatar
0
Скажите пожалуйста Vipeg а зачем нужны эти константы
const byte button1pin = 12;
const byte button2pin = 7;
+
avatar
0
Все 10 кОм резисторы и матрицы нужны для подтяжки к «плюсам» и «минусам» питания.

Что это значит, дайте ссылку где почитать. Больше всего меня интересует резисторная матрица, зачем она? Без неё небудет работать?
+
avatar
0
Повторил проект. На столе всё работает отлично. А на лестнице постоянно глючит. Думаю что тоже проблема получением дистанции с датчиков. То сработает правильно раза 3 и зависает. Проблему пока не решил. В видео попала только правильная работа www.youtube.com/watch?v=X6kBV4Crb9Y
+
avatar
  • bichko
  • 03 февраля 2017, 16:45
0
Та же проблема, только еще на стадии макета. Два, три раза сработала нормально, а потом срабатывает, и не тухнет, будто на какой то из сонаров постоянно идет сигнал обнаружение. Вообщем зависает и помогает только перезагрузка контролера.
+
avatar
  • geniusrf
  • 03 февраля 2017, 18:13
0
Да именно так! Я добавил пару строк в программу чтоб выводило расстояние с сонара. Когда сонар смотрит в потолок выдаёт расстояние до потолка а если воткнут в макетную плату параллельно столу то выдаёт ноль но если подставить руку между нолями проскакивает нормальная дистанция. Я изменил немного условия когда сонар считается сработавшим

if ((distance >= 15)&&(distance <= sonar2minLimit)){//сонар считается сработавшим, принимаем «меры»

Смысл что бы сработка начиналась не с ноля а например с 10- 15 см. На столе всё работает норм. Завтра попробую на установленном. Проверю сколько выдаёт датчик. Потом сообщу результаты удалось ли наладить.
+
avatar
  • bichko
  • 03 февраля 2017, 18:52
0
Только что проверил с Вашими изменениями, увы проблема осталась((. 5 — 6 раз срабатывает и после светодиоды не выключаются к сожалению.
+
avatar
  • geniusrf
  • 03 февраля 2017, 19:10
0
А дистанцию какую датчики выдают? В общем вот программа. drive.google.com/open?id=0B3K06tF9RTcacFNUZmVTdE9Qelk

Включаете Оставляете подключенным к компу, потом монитор порта 9600 и должен выводить показания второго датчика
+
avatar
  • bichko
  • 03 февраля 2017, 19:25
0
А где Вы прописывали Serial.print что бы и себе прописать по смотреть что выдают эти сонары, а то я максимум нашел где прописать что бы выводили на какой дистанции сработали, а когда зависают ничего не выводится. И мне кажется что дело не в сонарах, а в чем то другом. Может добавить процедуру проверки на такой случай, если не выключилось по истечению такого то времени то выключить. Я бы написал, но мои познания в программировании нулевые.
+
avatar
  • geniusrf
  • 03 февраля 2017, 19:37
0
Я оставил ссылку на программу. Пока он находится на модерации.Там всё прописано. Я уже минут пятнадцать пытаюсь повесит контроллер НЕ Получается.
это пока на столе. Даже специально наводил датчики в плотную к столу — не повисло.
+
avatar
  • bichko
  • 03 февраля 2017, 20:16
0
Только что залил Ваш скетч, дистанцию выводит с обох, прикольно, а вот пидвисание к сожалению осталось, только реже на много стало.
+
avatar
  • geniusrf
  • 03 февраля 2017, 20:23
0
Тогда остаётся метод тыка. Меняйте немного параметры и смотрите как себя ведёт. В общем удачи. Жаль что не помог!
+
avatar
  • bichko
  • 03 февраля 2017, 20:27
0
Тогда висло на 3-4 раз, сейчас на 8-10, да конечно, жаль, спасибо Вам большое за помощь, будем ковырять дальше, как говорится))
+
avatar
  • Berhr
  • 04 февраля 2017, 20:34
0
Есть у кого лишняя заводская плата для проекта? Если не далеко от Мск, Иваново, Н.-Новгорода, то заскочу лично. Всем добра!
+
avatar
0
Напиши свои емаил.
+
avatar
  • andrewf
  • 08 февраля 2017, 08:30
0
Здравствуйте.
Извиняюсь, что влез, но видимо платы есть?
+
avatar
  • Berhr
  • 05 февраля 2017, 11:04
0
Доброго времени суток! Для поржать справки: в славном городе Иваново согласились изготовить плату, в любом количестве, хоть 1 штучку, но… оплатив подготовку производства в размере 20к рублев (шаблоны, маски и т.п.), мдее. Китай нам не победить.

Тут пока занимаюсь анализом, ликбезом в предвкушении реализации данного проекта, поговорил с одним электронщиком, он прочел пост, заценил, плюсанул на словах автору и сразу сказал искать хороший БП. Его слова (а опыт у него реально большой) глюки у многих могут вылезать из за плохого питания, потому и сенсоры тупят и глючат в том числе!
+
avatar
  • geniusrf
  • 05 февраля 2017, 19:01
0
В схеме проекта небольшая ошибка — эхо 1Botton подключено к 12 входу. Но так не работает. Если воткнуть во 2ой то работает норм. Возможно это просто описка, в программе он прописан нормально 2!
+
avatar
0
Так надо в проге вместо const byte sonar1echo = 2; поменят на const byte sonar1echo = 12;.Я прав или нет?
+
avatar
  • geniusrf
  • 06 февраля 2017, 00:23
0
На вроде того.На плате всё правильно и в программе тоже. Я просто по схеме подключал к Ард. Уно и не работал сонар. Небольшая не точность в нарисованной схеме.
+
avatar
0
Привет, у меня остались платы. Если кому надо пишите в вибере +79081666667. Отправлю по почте из Н.Новгорода.
+
avatar
  • Berhr
  • 10 марта 2017, 20:49
0
Отче, почем? Я заказал у дядьки тут с сайта, но он с Литвы, видимо я забадаюсь ждать нашу таможню. А в Нижнем я частенько бываю, Университет там один заканчиваю на Анкудиновском шоссе (заочно)
+
avatar
  • Berhr
  • 16 марта 2017, 20:54
0
Дополнение к выше сказанному — Господа, кто не успеет или не сможет найти контакт для покупки 1 -2 плат на территории РФ — СМЕЛО обращайтесь к пользователю Аurimaspr!!! Он с Литвы, договорились о компенсации почтовых издержек, вкратце — 1 плата обошлась мне в 450р с пересылками, шло 12 дней до Иваново. Можно конечно и с сайта, но сейчас это занимает 24 американских рубля, а реализуете вы все остатки плат или нет, еще под вопросом. Так что каждый решает сам!
P/s: Аurimaspr подошел ответственно к упаковке отправления, запаковал так, что ее могли бы доставить аквалангисты держа в руках, и почта РФ даже не смогла ничего ей причинить, за что ему отдельное спасибо!
+
avatar
0
Ну наконец то получил. Я рад.
+
avatar
  • Venom54
  • 21 марта 2017, 22:13
0
Парни, ни у кого лишней платки на продажу не завалялось случайно? :)
+
avatar
  • aleiva
  • 28 марта 2017, 21:56
0
Всем добрый день или вечер. Реализовал проект. Спасибо Виктору за подробное описание. Правда заменил инверторы 74LS04 и силовые транзисторы Tip122 на IRF7314, но смысл этого не меняется (как мне кажется). Прошивку ставил без изменений и сначала пытался запустить контролер с датчиками HC-SR 04 (вопреки рекомендациям использовать SRF05). Но после трех-четырех срабатываний ардуинка зависала и все светодиоды просто оставались включенными. После того как пришли сонары SRF05, история повторилась. Все равно ардуинка зависала. Пытался менять параметры по рекомендациям из обсуждения, но безрезультатно. Что интересно, если заливал другую прошивку, без реал тайма, то зависания пропадали, ни с HC-SR 04, ни с SRF05 датчиками. Что же я делаю не так? Удалось ли кому-нибудь выяснить причины возникновения такой проблемы? Очень хочется запустить с прошивкой Виктора.
+
avatar
0
Собрал проект. Шим работает с рывками, нету плавности. Зависает контроллер. Может кто посоветует где я накасячил.
+
avatar
0
Всем привет!.. Заказал десять плат, хотя нужно только две. Если кому-то нужно будет в Украине, то имейте ввиду;)

Почта: u k r a i n e m m g@gmail.com (вводить без пробелов)
+
avatar
0
Тоже самое 2-3 раза и зависает. Может кто испробывал с pir или инфракрасные датчики? как работает? какую модель использовали? а может нашлось решение по зависанию?
+
avatar
0
Вот мой проект, сли кому интересно ссылка ниже
www.openhardware.io/view/366/Automatic-stairs-lighting-arduino-shield
+
avatar
  • Dorset
  • 19 апреля 2017, 16:51
0
Хороший проект.
Но больше реклама
+
avatar
0
Gerber file.rar. чем открыть???
+
avatar
0
все решил проблему
+
avatar
0
Добрый день! Автору огромное спасибо за проделанную работу. И большой респект!

Прочитал статью и очень захотелось повторить этот интересный проект. В общем-то я в программировании ничего не смыслю, но ардуино меня так заинтересовал, что всё таки решился. Кстати, в радиоелектронике тоже не очень, когда-то в молодости занимался в радиокружке, ну в общем всё таки решился.
Да и автор всё так подробно описал, очень всё понятно.
Собрать решил сначала только управляющую часть, на бред борде. То есть до инвертеров.
Заказал этот минимум деталей, с целью испробовать, потяну ли я это и станет ли работать. А потом уже силовую часть доделать.
К выходам драйвера TLC подсоединил катодами 16 светодиодов, аноды на плюс. В качестве сенсоров решился на вариант попроще, чтобы снизить количество деталей на минимум и заказал HC-SR501 PIR. В скетче поставил sensorType 2, как автор и советовал при применении PIR. Всё тщательно проверил, перекинул скетч, библиотеку, включил и…
Работает, но не так, как должно.
На сенсорах есть по два подстроечника на каждом, один для чувствительности, другой — как долго сигнал держит. Так вот, чувствительность можно крутить хоть куда- результата ни какого.
А вот второй подстроечник- две третьих оборота не происходит ничего. То есть светодиоды просто молчат. Если крутить дальше по убавлению времени, светодиоды начинают работать, один за другим, как положено. Обе стороны. И после паузы в 1000 мс гаснут в обратном порядке. Если подстроечник накрутить на минимум, светодиоды загораются по очереди, пока все не засветятся и потом остаются в этом состоянии. Сенсоры не реагируют на движение руки в любом положении подстроечных резисторов.

Вопрос: может кто подскажет, что я неправильно сделал или делаю? Единственное несовпадение с авторской схемой это то, что на ПИРы я поставил подтягивающие резисторы на 5.1 ком вместо 4.7. Но я думаю это не проблема?
Может в скетче ещё что нибудь нужно добавить/исправить? Или может вообще ПИРы не подходящие для этой схемы купил?
До этого собирал маленькую сигнализацию на ардуино и этих же самых сенсорах, работало всё прекрасно, каждое движение руки улавливал.
Спасибо большое за помощь, надеюсь, что кто нибудь откликнется.
С уважением,
+
avatar
0
Update:
При среднем положении подстоечных резисторов, примерно каждые полторы минуты пробегает волна света то в одну сторону, то в другую. При этом направление случайное, но цикл повторяется постоянно. PIRы не реагируют на движения. Предполагаю, что-то со скетчем не в порядке. Но разобраться но могу что:) Может кто-нибудь уже реализовал схему с PIRами?
+
avatar
  • kurz
  • 25 апреля 2017, 19:14
0
Добрый вечер! Понимаю, что вопрос покажется странным, но может ли кто-нибудь объяснить мне, каким образом подключается питание к плате и светодиодным лентам. Что-то я совсем запутался. Опыта нет, самостоятельно разобрался со схемой, разобрался со скетчем, а как подключается питание понять не могу. Заранее благодарен!
+
avatar
0
А вот ещё решение — контроллер SMARTSTAIR24 для автоматической подсветки лестницы.
+
avatar
0
Есть десяток плат на продажу! Кому надо пишите! ukrainemmg@gmail.com По цене договоримся!
+
avatar
0
Автор, как с Вами связаться? Очень нужна небольшая помощь и консультация :)
Мое мыло — mmihey13@gmail.com
+
avatar
0
Решил собрать сабж по вашей схеме. Разводку переделал на односторонний текстолит, спаял, загрузил скетч и столкнулся с тем что ардуина зависает через пару включений-выключений. Видимо проблема в скетче. Поскольку я вообще не бум-бум в программировании то за неделю изучил азы программирования на си. Тогда обратил внимание на одну особенность в скетче, при выполнении процедуры зажигания или гашения ступенек, поскольку вы используете delay программа приостанавливается и не может считывать сигналы с ультразвуковых датчиков, соответственно прохождение встречных и попутных пешеходов не учитывается. Решил полностью переписывать скетч, возможно он получится индусским но я доведу его до победного конца. Если есть интересующиеся данным изделием предлагаю общими усилиями довести программную часть до совершенства.
+
avatar
  • LM-ku
  • 11 октября 2017, 20:22
0
По ссылке мой вариант скетча, проверен на сонарах SRF-05
+
avatar
0
Проверен на макетке или на лестнице?
+
avatar
  • LM-ku
  • 27 октября 2017, 06:28
0
Пока на макетке. Лестница только в чертежах. А это принципиально?
В отличии от оригинального скетча яркость нарастает плавно по степенной функции, а не линейно, что визуально приятнее, отсутствует вероятность сбоя программы через примерно 50 дней из-за переполнения переменной системного времени. Можно слегка доработать скетч и подключить сонары по 3-х проводной схеме, высвободив 2 (, а отказавшись от «Reset» — 4) разведенных на плате входа/выхода под другие нужды, например для подключения датчика освещенности.
+
avatar
0
Принцыпе без разницы, но много вариантов — на столе работает а на месте уже нет. По оригиналному скетчу у меня постояно зависает. Буду ваш заливать, толко всё обратно собиру, а то этот вариянт я ужэ похоронил.
+
avatar
0
Здравствуй aurimaspr!
У Вас случаем нет плат,
Писать на почту — c t r l a l t 4 0 8 @yandex.ru (без пробелов)
+
avatar
0
Привет. Не, уже нету. Расдал все, но никто не откликнулся, зародили или нет этот проект.
+
avatar
0
Спасибо за скетч, но я уже переписал сам. В оригинальном скетче процедура проверки расстояния в сонаре возвращает не true и false как задумывалось а расстояние числом, поэтому и зависает. Но это я уже узнал только после того как полностью переписал весь скетч. Избавился от delay и сделал встречное зажигание ступенек лестницы. Смонтировал все на лесенку и все у меня работает не на макетке.
+
avatar
  • andrewf
  • 27 ноября 2017, 07:38
0
Поделитесь
+
avatar
  • andrewf
  • 02 декабря 2017, 15:47
0
Уважаемый leapold99, позвольте прошивку опробовать, не жадничайте
+
avatar
0
Добрый день, господа!
Нет ли, случаем, 2 лишних плат
Писать на почту — c t r l a l t 4 0 8 @yandex.ru (без пробелов)
+
avatar
  • lok3452
  • 02 ноября 2017, 12:03
0
Добрый день!
Приобрету 2 платы подсветки лестницы.
Почта-lok3452-avtor@yandex.ru
C ув.
+
avatar
0
Добрый день!

Нужна одна плата. Lobnyanews@gmai.com
+
avatar
  • seval
  • 28 ноября 2017, 21:18
0
Уважаемый автор! Спасибо Вам за такой труд! И что поделились с нами.
Я попытался повторить Вашу схему, только на односторонней плате.
Если грузить скетч который идет с библиотекой (fades), то плавненько моргает.
А если Ваш скетч, то диоды загораются и гаснут как-то дискретно. Не плавно.
Подскажите пожалуйста, почему такое может быть?
+
avatar
  • krokus57
  • 05 декабря 2017, 09:50
0
Делаю подсветку на лентах ws2801 и PIR датчиках. Кто будет повторять, обратите внимание:
1. В функции sensorTrigged() нет игнорирования срабатывания датчика на выходе с лесницы в коде для PIR сенсоров. Есть только для ультразвуковых. Надо скопипастить.
2. Там же код
(digitalRead(pir1SignalPin) == LOW) 
рассчитан, на PIR датчики, выдающие ноль при срабатывании на движение. Если у вас выдает 1, надо поменять в коде.
+
avatar
0
Добрый день! Приобрету плату.Рязань
sv.savelev@mail.ru+79106209805
+
avatar
  • Magician
  • 11 декабря 2017, 15:51
0
Всем добрый день, сделал такую подсветку по данному проекту. Получилось супер.
Спасибо большое автору, за полное описание проекта!!!
И спасибо LM-ku за рабочие скетч, с ним сонары не глючат, ну почти)
Еще я поставил датчик освещенности с регулировкой на улицу, что бы подсветка включалась только в темное время.
У кого есть вопросы, спрашивайте, что знаю отвечу.
Вот мое видео результата, если кому надо!

+
avatar
  • Magician
  • 11 декабря 2017, 16:36
0
И осталось несколько плат, если кому надо пишите в личку, я из Москвы!

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.