Кнопка, ардуино, помехи

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем yden, 12 фев 2018.

  1. yden

    yden Гик

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

    благодарю
     
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    Для кнопок использовать оптопару, расположив её как можно ближе к ардуинке.
    220 отнести подальше.
     
  3. Airbus

    Airbus Радиохулиган Модератор

    Ну типа того.Как можно короче провода от кнопки.И конденсатор 0,1 мкф параллельно ей но это скорее так по фен-шую в жизни реально мало помогает аппаратный антидребезг. Силовые провода-те что к реле можно отнести и подальше.Можно использовать управление по радиоканалу 433/315 мГц можно использовать управление по IR.
     
  4. SergeiL

    SergeiL Оракул Модератор

    Можно уменьшить сопротивление резистора подтяжки, но лучше - оптопара.
    Заодно и увеличение надежности, за счет опторазвяки.
     
    Последнее редактирование: 12 фев 2018
    Airbus нравится это.
  5. b707

    b707 Гуру

    Наводки в сигнальном проводе, идущем к реле - маловероятны. Думаю, дело в другом. Кнопки, надеюсь, подключены с подтяжкой? Лучше покажите схему.
     
    Airbus нравится это.
  6. parovoZZ

    parovoZZ Гуру

    Схему в студию. Всё остальное гадание по кофейной гуще.
    Абсолютно все платы ардуино в плане помехозащищенности шлак полный.
     
  7. mcureenab

    mcureenab Гуру

    В смысле шлак? Ардуина не может решать проблемы кнопок.
     
  8. ostrov

    ostrov Гуру

    Вместо библиотеки использовать кольцевой буфер глубиной 2, с опросом кнопки каждые, например 50 мс. Нажатием считать случай (!but[0] && but[1]), это отсеет и дребезг и иголки-помехи.
     
  9. yden

    yden Гик

    Можно пример кода?

    благодарю
     
  10. CYITEP_BAC9I

    CYITEP_BAC9I Гик

    вечер добрый
    если я правильно понял аналогом вашего выражения будет
    Код (C++):
    (but[0]==1 && but[1]==1)
    просто отрицание перед 0 элементом массива смутило
     
  11. ostrov

    ostrov Гуру

    Тогда уж:
    Код (C++):
    (but[0]==0 && but[1]==1)
     
    CYITEP_BAC9I нравится это.
  12. yden

    yden Гик

    Куда втыкивать это? :)
     
  13. ostrov

    ostrov Гуру

    Создается массив byte but[2]. Можно bool, но смысла нет. Можно вместо этого массива использовать биты байта, но это сложнее и не так наглядно. Затем каждые 50 мс мс перекидывать содержимое элемента 1 в элемент 0, а в 0 закидывать состояние кнопки. Затем сравнивать по условию выше (если пин кнопки притянут к +, а прижимается кнопкой к -, само собой) и если сочетание указанное, то есть случилось нажатие, то реагировать на него. Все события происходящие быстрее 50 мс игнортруются, а это практически все помехи. Для параноиков можно сделать массив на 3 или 4 элемента и поиграть с временем.
     
  14. yden

    yden Гик

    Можно скетч, где это шаманство используется, а то ничего не понял. Плиз.
     
  15. ostrov

    ostrov Гуру

    Ну и как вы вживлять будете его, если не поняли как написать по довольно простому объяснению? Или следующий шаг "можно вставить этот код в мой код, а то я ничего не понял"?
     
    issaom нравится это.
  16. SergeiL

    SergeiL Оракул Модератор

  17. Belkin

    Belkin Гик

    Может, все-таки дело в схемотехнике ?
    Экранирование, конденсаторы и т.п.

    Пример из жизни: на 12м UTP-5 работает контроллер управления освещением (1кВт) и вентилятором (120Вт).
    1 пара - датчик DS18B20
    2 пара - питание +12в (схема контроллера имеет свой БП)
    3 пара - сигналы управления для освещения и вентилятора (12в)
    4 пара - сигналы контроля включения (сухой контакт)

    Не важно, почему сделано так - главное работает БЕЗ СБОЕВ и САМОСТОЯТЕЛЬНОСТИ.
     
  18. ostrov

    ostrov Гуру

    Иногда проще пару строк добавить в код.
     
  19. parovoZZ

    parovoZZ Гуру

    Потому и шлак. В промышленной схемотехнике такое не допускается.
     
  20. parovoZZ

    parovoZZ Гуру

    Можно же по таймеру включать и выключать прерывания. Либо опрашивать кнопку. Во втором случае бонусом получаем состояние удерживания кнопки.