Срабатывание пина от прикосновения
- Войдите на сайт для отправки комментариев
Втр, 29/09/2020 - 12:08
Всем здратути. Вчера и позавчера было потрачено уйма времени на выяснение сих обстоятельств.
Начну с того, что в программирование я только учусь, на него не учился (как вообще на все электрическое) и отношения к нему никогда не имел. Но в волю потребностей решил залезть в сие познание. Написал пару скетчей, сделал пару мелочей, но никогда не покидала мысль, что что то тут не так) Пример, задаешь скетче digitalRead(2), подключаешь пин к макетке, выводишь в отладку, и вроде работает, и вроде само иногда срабатывает, и от пальца иногда дает == 1 когда (2) пин пальцем тронуть.
Вчера впервые задействовал аж 6 пинов. И тут ТАКОЕ началось... корпус ПК на ковре, сразу возле стола, у ног. На столе Ардуино. Получается, одну ногу поднимаешь с ковра, сработает digitalRead(2), поставил назад - возвращает ноль)) круто конечно задействовать где то, но отладка вся по жопе, нужно отключать от ПК, и только тогда перестает так "фонить" на ноги.
#define sensor1 2 #define sensor2 3 #define relay1 4 #define relay2 5 bool vlt1; bool vlt2; bool vlt1_state = 1; bool vlt2_state = 1; unsigned long last_time; unsigned long last_time2; unsigned long last_time3; unsigned long last_time4; void setup() { Serial.begin(9600); pinMode(2, INPUT); pinMode(3, INPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); } void loop() { vlt1 = digitalRead(2); vlt2 = digitalRead(3); if (vlt1 == 1 && millis() - last_time > 2000 && vlt1_state == 1) { digitalWrite(relay2, 1); digitalWrite(relay1, 0); Serial.println("Relay2 ON"); last_time2 = millis(); vlt1_state == 1; } if (vlt2 == 1 && millis() - last_time4 > 2000 && vlt2_state == 1) { digitalWrite(relay1, 1); digitalWrite(relay2, 0); Serial.println("Relay1 ON"); last_time3 = millis(); vlt2_state == 1; } }
Вопрос: это вообще нормально, когда при дотрагивании пальцем к пину (2) (или 3) digitalRead(2) == 1 и на плате загорается RX? Нужно делать подтяжку резистором? Или это в плате проблема? Сори если сложно пояснил
Плата - Arduino Uno r3. При подключении по USB, пин реагирует на поднятия ноги и прикосновения пальцем. При питании от БП - только на палец.
Пробовал питать от другого ПК по USB, пробовал отключать все вокруг, мониторы, усилители, bluetooth.. коврик даже сворачивал)) вот только нету пока другой платы для проверки. Ткните мне, где же я туплю
Нормально. Не нормально трогать включенные приборы пальцами. Перечитай школьную физику.
Раздел хоть какой?))
Замени INPUT в pinMode на INPUT_PULLUP, а управляй нулём.
Это происходит потому, что пин висит в воздухе, когда он должен иметь строго два состояния - HIGH (нажато) или LOW (отпущено). Или наоборот, если кнопка замыкается на массу. А для этого обязательно нужна подтяжка. Если кнопка замыкается на VCC, то подтяжка к массе, если на массу - то можно последовать совету Деда из поста #3. Если подтяжки нет, пин будет реагировать не только на прикосновения, но и на любые наводки
Спасибо, но если не сложно ткните хоть что почитать, ибо я так и не понял ничего) почему пин считал срабатывание от пальцев в режиме INPUT?
Дело в том, что я хочу фиксировать наличие Електричества в розетке. #define sensor1 - это должен быть + с 5в от БП, подключенного в розетку. На 5в sensor1 реагирует и все ок, только вот кроме БП он еще реагирует и на пальцы ног))
Это происходит потому, что пин висит в воздухе, когда он должен иметь строго два состояния - HIGH (нажато) или LOW (отпущено). Или наоборот, если кнопка замыкается на массу. А для этого обязательно нужна подтяжка. Если кнопка замыкается на VCC, то подтяжка к массе, если на массу - то можно последовать совету Деда из поста #3. Если подтяжки нет, пин будет реагировать не только на прикосновения, но и на любые наводки
Спасибо!! А какой номинал подтягивающего резистора нужен для моего случая?
П.С. уже нашел инфу, спасибо еще раз, иду изучать)
ты бы npn транзистор поcтавил с цифрового входа на землю. Есть +5 на базе - на входе будет LOW, кончились +5 (сеть отключили) - на входе будет HIGH.
ты бы npn транзистор поcтавил с цифрового входа на землю. Есть +5 на базе - на входе будет LOW, кончились +5 (сеть отключили) - на входе будет HIGH.
Попробую! Но пока разберусь что такое резистор)
Все получилось с БП и подтягивающим 10кОм через пин. Все шумы пропали. Но БП, я так понял из-за конденсаторов, разряжается сек 20, а фиксировать отключение нужно быстро. Как быстро разрядить конденсаторы и зафиксировать 0 на пине? Кроме подключение разряжающей нагрузки)
П.С. тоже нашел инфу)
Вам не нужно разряжать конденсатор. Вам нужно убрать Ваш БП в сторонку (пригодится ещё) и поставить нормальный датчик напряжения, например, вот такой. И будет много счастья.
Вам не нужно разряжать конденсатор. Вам нужно убрать Ваш БП в сторонку (пригодится ещё) и поставить нормальный датчик напряжения, например, вот такой. И будет много счастья.
Вы мне напомнили о сим чуде)
Применил, все работает, никаких задержек)
П.с. в любом случае нужно знать как пальмы трясти)) без резистора все равно помехи, хоть теперь это уже и не удивительно) Ещё раз всем спасибо!)