Некорректно определяется состояние поплавкового датчика

Lvovitch
Offline
Зарегистрирован: 19.04.2016

Помогите новичку. Делаю контроллер для аквариума, использую Могу из-за большого количества памяти и ног. 

Одна из функций - контроль уровня воды, стоит поплавковый датчик, который замыкает на землю. Пин определен как input_pullup.

В замкнутом состоянии считывает 0 стабильно,  в разомкнутом - редкая единица. 

Провод до датчика метра полтора. Могут это быть какое-нить наводки? Правильно ли определять Пин как input_pullup или лучше digital write туда? Или лучше размыкать плюс с подтяжкой резистором?

inspiritus
Offline
Зарегистрирован: 17.12.2012

Инициализируйте как  input и прописывайте туда high

Тго , что вы делаете ни разу не встречал.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

inspiritus пишет:

Инициализируйте как  input и прописывайте туда high

Если использовать INPUT_PULLUP, то pinMode именно это и делает.

Lvovitch
Offline
Зарегистрирован: 19.04.2016

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

inspiritus пишет:

Инициализируйте как  input и прописывайте туда high

Если использовать INPUT_PULLUP, то pinMode именно это и делает.

Вот в этом то и вопрос, почему это не работает.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Lvovitch пишет:

Вот в этом то и вопрос, почему это не работает.

У вас тестер есть. Вот и звоните ваш датчик. Скорее он у вас или коротит и сопротивление в незамкнутом состоянии около 1 кОМ

Lvovitch
Offline
Зарегистрирован: 19.04.2016

Сам себе отвечу - подтянул сопротивлением 10 ком к плюсу и все стало определяться четко. Возможно для Меги не работает input_pullup или есть проблема в моей плате

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

Lvovitch пишет:

подтянул сопротивлением 10 ком ... Возможно для Меги не работает input_pullup или есть проблема в моей плате

Думаю, работает (вы можете легко проверить это) , но, возможно просто внутренний pull-up слишком слабый. Там 20-50К и этого, возможно, много для Вашей конкретной ситуации.

kast2k
Offline
Зарегистрирован: 16.01.2015

Добрый день!

У меня почти аналогичная проблема только с кнопкой.

Плата Arduino nano 328p (AliExpress)

int Pressed=0;
int BtnPin=8;

void setup() {

  pinMode(BtnPin,INPUT_PULLUP);
  
  Serial.begin(9600);
  while (!Serial) {
    ; 
  }
}

void loop() {

  if((digitalRead(BtnPin)==LOW)&&(Pressed==0))
    {
      Serial.println("Pressed");
      Pressed=1;
      delay(2000);
    }
  if((digitalRead(BtnPin)==HIGH)&&(Pressed==1))
    {
      Pressed=0;
      Serial.println("Release");
    }  
}

Кнопка подключена 15 метровым кабелем 0,75 мм.

Пробовал добавить резистор на 20КОм от входа 8 пина к VCC, количество ложных срабатываний уменьшилось но не очень сильно.

Также обратил внимание, что если при выполнении данного кода коснуться пина отверткой, то происходит ложное срабатывание.

Подскажите, пожалуйста, как это победить?

Спасибо.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

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

MaksVV
Offline
Зарегистрирован: 06.08.2015

15 метров это уже сильно. Особенно для грозы. Рекомендую подключить кнопку через оптопару. И внутренней подтяжки при этом обычно хватает. 

kast2k
Offline
Зарегистрирован: 16.01.2015

Оптопары в наличии нет, но есть много аналоговых (не твердотельных) релюшек на 5В. Попробую с ними.

Но всё равно, даже при внутренней подтяжке от прикосновения отверткой уже ложный сигнал идёт :(

Грозы не боюсь, т.к. в помещении всё происходит :)

А если программно попробовать избавиться от дребезга? например, взять класс bounce или из темы http://arduino.ru/forum/programmirovanie/klass-titanovyi-velosiped-dlya-taktovoi-knopki?page=1

ku-ku
Offline
Зарегистрирован: 14.11.2018

хз насколько умный совет, но глянь на эту либу:
runningMedian

Мож ее как костылек заюзать )

svm
Offline
Зарегистрирован: 06.11.2016

При таком длинном кабеле наиболее помехоустойчивый вариант- в неактивном состоянии на вход подается логический "0" (вход замкнут на землю). При србатывании кнопки, через внешний подтягивающий резистор 0,5-1 кОм подается логическая "1". Конденатор на землю 0,1-10 мкФ, тоже улучшит ситуацию. Но оптрон, все-таки лучше. Еще может помочь применение витой пары и экранирование. Релюшки тоже вариант, но менее бюджетный.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

kast2k пишет:
А если программно попробовать избавиться от дребезга? например, взять класс bounce или из темы http://arduino.ru/forum/programmirovanie/klass-titanovyi-velosiped-dlya-taktovoi-knopki?page=1

Не буду приводить анекдот про чела который ищет потеряный ключ под фонарем, не потому что он там его потерял, а потому что светло.  У Вас проблема не в дребезге, а низком пороге срабатывания вывода микросхемы. Так что надо повышать этот порог срабатывания, изолируя чувствительную часть от  грубого входа.  Почему микросхемы делают с низким порогом срабатывания. То так они потребляют меньше электроэнергии, что это тоже не мало. 

bwn
Offline
Зарегистрирован: 25.08.2014

kast2k пишет:

Грозы не боюсь, т.к. в помещении всё происходит :)

Электромагнитному импульсу похрену где напряжение генерировать. Или вы в клетке Фарадея живете?

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

kast2k пишет:

Грозы не боюсь

Отважный человек!

kast2k
Offline
Зарегистрирован: 16.01.2015

svm пишет:

При таком длинном кабеле наиболее помехоустойчивый вариант- в неактивном состоянии на вход подается логический "0" (вход замкнут на землю). При србатывании кнопки, через внешний подтягивающий резистор 0,5-1 кОм подается логическая "1". Конденатор на землю 0,1-10 мкФ, тоже улучшит ситуацию. Но оптрон, все-таки лучше. Еще может помочь применение витой пары и экранирование. Релюшки тоже вариант, но менее бюджетный.

Спасибо за совет,

но у меня вопрос: я же могу выставить режим кнопки NC и тогда на вход (с input_pullup) всегда будет подаваться 0, а кнопка будет производить размыкание и подавать тем самым 1. Или я не прав в своих суждениях и даже при замкнутом контуре через кнопку я все равно смогу словить помеху? Дребезг контактов в данном случае будет скомпенсирован delay(2000) (чтобы дважды не жали случайно :) )

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

kast2k, ну Вы считайте, что длинный провод - это генератор помехи. Обычно - по току. Т.е. между землей и входом у Вас имеется генератор тока. Напряжение помехи вычисляется как произведение тока на входное сопротивление, в данном случае сопротивление подтяжки. Уменьшая это сопротивление, Вы уменьшаете напряжение помехи на входе. Когда ставите конденсатор, тем самым снижаете входной импеданс на высоких частотах, тем самым уменьшая напряжение высокочастотной помехи.

kast2k
Offline
Зарегистрирован: 16.01.2015

Коллеги,

я надеюсь правильно понял, что вы хотели до меня донести.

svm
Offline
Зарегистрирован: 06.11.2016

Абсолютно.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

kast2k пишет:
я надеюсь правильно понял, что вы хотели до меня донести.
 Чингачгук дважды на одни грабли не наступает. Теперь осталось объяснить ТС опупею с электролитами.

kast2k
Offline
Зарегистрирован: 16.01.2015

qwone пишет:

 Теперь осталось объяснить ТС опупею с электролитами.

А керамические не подойдут? они вроде как лучше с высокими частотами справляются

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

kast2k пишет:
А керамические не подойдут? они вроде как лучше с высокими частотами справляются

Разумеется они лучше. Потому что есть электролиты , что нет электролитов пользы никакой. У них высокое внутрее сопротивление, хотя емкости хватает. Поэтому я и сказал про опупею с электролитами.