PIR движение выводит ESP8266 из глубокого сна

Я пытаюсь, как мне казалось, было бы просто разбудить спящий ESP8266 с помощью движения, обнаруженного PIR.

Существует множество схем, и все они действуют более или менее одинаково, и самая простая форма выглядит так:

wake esp от pir

Где RST — это вывод RST ESP8266, а Trigger — линия запуска PIR.

Проблема, которую я обнаружил, заключается в том, что это не работает.

PIR работает нормально и выдает почти 3 В в течение 2 секунд при срабатывании и 0, когда движение не обнаружено.

Мое ESP просыпается, когда триггер PIR ЗАВЕРШЕН, а не когда он НАЧИНАЕТСЯ. Таким образом, если PIR обнаруживает движение в течение длительного времени, ESP проснется только тогда, когда движение ОСТАНОВИТСЯ.

PIR: один из этих.

ESP в настоящее время представляет собой NodeMCU на макетной плате, но конечным продуктом будет Wemos D1 Mini.

Что я здесь делаю не так?

, 👍1

Обсуждение

вы измерили только половину вашей цепи.... PIR работает нормально и при срабатывании выдаёт почти 3В в течение 2 секунд... как насчет измерения линии RST, @jsotola

Линия RST имеет напряжение 3,3 В, как и ожидалось. Когда срабатывает PIR, напряжение на RST падает до нуля, что, как я ожидаю, разбудит ESP. Однако ESP просыпается только тогда, когда PIR перестает срабатывать и напряжение на RST снова поднимается до 3,3 В. Я этого не понимаю., @Andreas Huttenrauch

это просто, esp8266 остается в режиме сброса, пока RST активен (низкий уровень).... он выходит из режима сброса и начинает выполнение своей программы, когда RST становится неактивным (нарастающий фронт RST), @jsotola


1 ответ


1

Что вам нужно, так это детектор краев. Пока на выходе PIR высокий уровень, ESP остается в режиме сброса.

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

Детектор края

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

Моделирование

В тот момент, когда напряжение коллектора упадет до (почти) нуля, напряжение на C1 будет равно 0 В, поэтому выходное напряжение также будет близко к 0 В. Тогда конденсатор сразу же начинает заряжаться через R2, поэтому напряжение на выводе сброса возрастает в геометрической прогрессии.

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

Тот же принцип используется, например, в Arduino UNO для сброса ATmega при низком уровне DTR.

,

Спасибо. Это очень полезно. Основываясь на вашей схеме и нескольких других, которые я нашел, я переработал свою проводку следующим образом: http://groovy.globi.ca/img/20180722-3404caebc3bdc7f233726e6afe54ffea.png Это работает очень хорошо. ESP быстро просыпается, и установка D3 LOW предотвращает перезагрузку во время работы. Проблема, с которой я сейчас столкнулся, заключается в том, что выходной контакт PIR показывает отрицательное напряжение. Я хочу подключить его как ВХОД к ESP, чтобы он мог проверять статус, но ESP сходит с ума при его подключении. Есть идеи?, @Andreas Huttenrauch

Если D3 переходит от низкого уровня к высокому, когда триггер находится на низком уровне, триггер станет отрицательным. (Потому что на С1 был отрицательный заряд). Выходное сопротивление большинства PIR превышает 1 кОм, поэтому напряжение становится отрицательным. Вам нужен резистор на базе. Если вы выполняете обнаружение фронта после транзистора, вам не придется об этом беспокоиться. Вы по-прежнему можете использовать имеющуюся у вас конфигурацию AND., @tttapa

Хм. Я подключил еще один NPN между V++ и детектором фронта с триггером на базу, но на триггере все равно получаю отрицательное напряжение. Как вы думаете, куда именно должен идти резистор и какой номинал? Возможно, резистор 1 МОм в этой цепи слишком велик?, @Andreas Huttenrauch

Используйте свою первоначальную схему, ту, которую вы использовали в своем вопросе. Затем добавьте схему моего ответа (без R1). Подключите выход RST к моему входу DTR. Затем добавьте второй транзистор между эмиттером первого транзистора и землей (коллектор 2 к эмиттеру 1, эмиттер 2 к земле, база 2 через резистор к выводу GPIO ESP)., @tttapa

Я попробовал добавить ваш детектор краев в свою исходную схему на RST, и это выглядит так: http://groovy.globi.ca/img/20180723-d02a55da8edcc7ec95a59ce5c8a93f5b.png Однако, когда я подключаю D3 к ESP, он никогда не загружается - просто выдает тарабарщину на последовательную консоль и умирает. Я неправильно истолковал ваши инструкции?, @Andreas Huttenrauch

Вы забыли подтягивающий резистор на коллекторе и резистор базы второго транзистора. D3 — это контакт выбора загрузки для ESP8266. Вы подключаете его через транзистор, используйте другой вывод. Избегайте D3, D4 и D8, поскольку все они имеют специальные функции во время загрузки., @tttapa

Я ценю ваше терпение и прошу прощения, если я глуп, но, добавив подтягивание к коллектору, я теперь читаю стабильное 3х3 на RST. Это текущая схема (за исключением того, что база Q5 теперь переходит на D1, а не на D3, как предлагалось): http://groovy.globi.ca/img/20180723-6931232cc901e6c1d521acb48828cad0.png. Когда PIR срабатывает, никаких изменений не происходит и ESP не срабатывает., @Andreas Huttenrauch

Вы не подтянули базу нижнего транзистора., @tttapa