Срабатывание пина от прикосновения

critical
Offline
Зарегистрирован: 28.07.2020
Всем здратути. Вчера и позавчера было потрачено уйма времени на выяснение сих обстоятельств.
 
Начну с того, что в программирование я только учусь, на него не учился (как вообще на все электрическое) и отношения к нему никогда не имел. Но в волю потребностей решил залезть в сие познание. Написал пару скетчей, сделал пару мелочей, но никогда не покидала мысль, что что то тут не так) Пример, задаешь скетче 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.. коврик даже сворачивал)) вот только нету пока другой платы для проверки. Ткните мне, где же я туплю
rkit
Offline
Зарегистрирован: 23.11.2016

Нормально. Не нормально трогать включенные приборы пальцами. Перечитай школьную физику.

critical
Offline
Зарегистрирован: 28.07.2020

Раздел хоть какой?))

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Замени INPUT в pinMode на INPUT_PULLUP, а управляй нулём. 

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Это происходит потому, что пин висит в воздухе, когда он должен иметь строго два состояния - HIGH (нажато) или LOW (отпущено). Или наоборот, если кнопка замыкается на массу. А для этого обязательно нужна подтяжка. Если кнопка замыкается на VCC, то подтяжка к массе, если на массу - то можно последовать совету Деда из поста #3. Если подтяжки нет, пин будет реагировать не только на прикосновения, но и на любые наводки

critical
Offline
Зарегистрирован: 28.07.2020

Спасибо, но если не сложно ткните хоть что почитать, ибо я так и не понял ничего) почему пин считал срабатывание от пальцев в режиме INPUT?

Дело в том, что я хочу фиксировать наличие Електричества в розетке. #define sensor1 - это должен быть + с 5в от БП, подключенного в розетку. На 5в sensor1 реагирует и все ок, только вот кроме БП он еще реагирует и на пальцы ног))

critical
Offline
Зарегистрирован: 28.07.2020

v258 пишет:

Это происходит потому, что пин висит в воздухе, когда он должен иметь строго два состояния - HIGH (нажато) или LOW (отпущено). Или наоборот, если кнопка замыкается на массу. А для этого обязательно нужна подтяжка. Если кнопка замыкается на VCC, то подтяжка к массе, если на массу - то можно последовать совету Деда из поста #3. Если подтяжки нет, пин будет реагировать не только на прикосновения, но и на любые наводки

 

Спасибо!! А какой номинал подтягивающего резистора нужен для моего случая?

 

П.С. уже нашел инфу, спасибо еще раз, иду изучать)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ты бы npn транзистор поcтавил с цифрового входа на землю.  Есть +5 на базе - на входе будет LOW, кончились +5 (сеть отключили) - на входе будет HIGH.

critical
Offline
Зарегистрирован: 28.07.2020

DetSimen пишет:

ты бы npn транзистор поcтавил с цифрового входа на землю.  Есть +5 на базе - на входе будет LOW, кончились +5 (сеть отключили) - на входе будет HIGH.

Попробую! Но пока разберусь что такое резистор)

Все получилось с БП и подтягивающим 10кОм через пин. Все шумы пропали. Но БП, я так понял из-за конденсаторов, разряжается сек 20, а фиксировать отключение нужно быстро. Как быстро разрядить конденсаторы и зафиксировать 0 на пине? Кроме подключение разряжающей нагрузки)

 

П.С. тоже нашел инфу)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

critical пишет:
Как быстро разрядить конденсаторы и зафиксировать 0 на пине? Кроме подключение разряжающей нагрузки)
Вы неправильно ставите вопрос. Вы спрашиваете не как добираться до банана, а как сильнее потрясти пальму.

Вам не нужно разряжать конденсатор. Вам нужно убрать Ваш БП в сторонку (пригодится ещё) и поставить нормальный датчик напряжения, например, вот такой. И будет много счастья.

critical
Offline
Зарегистрирован: 28.07.2020

ЕвгенийП пишет:

critical пишет:
Как быстро разрядить конденсаторы и зафиксировать 0 на пине? Кроме подключение разряжающей нагрузки)
Вы неправильно ставите вопрос. Вы спрашиваете не как добираться до банана, а как сильнее потрясти пальму.

Вам не нужно разряжать конденсатор. Вам нужно убрать Ваш БП в сторонку (пригодится ещё) и поставить нормальный датчик напряжения, например, вот такой. И будет много счастья.

 

Вы мне напомнили о сим чуде)

Применил, все работает, никаких задержек)

П.с. в любом случае нужно знать как пальмы трясти)) без резистора все равно помехи, хоть теперь это уже и не удивительно) Ещё раз всем спасибо!)