Потенциометр

ilyaG
Offline
Зарегистрирован: 19.10.2015

Здраствуйте, у меня подключено несколько потенциометров к ардуино(например 4шт), они у меня служат как кодовый замок,тоесть поворачиваю каждый на свой определенный угол и после этого вкл реле. Вопрос, как можно сделать програмно так, что б если один с потенцеометров выйдет из строя, то что б программа с него уже не считывала значение а сразу делала типа он стоит в верном положении(верный угол)???

Coolerr
Offline
Зарегистрирован: 30.06.2014

Боюсь что никак, при отрыве среднего вывода на аналоговом входе будет анархия. При отрыве крайних либо 0 либо +5в.

keefa
Offline
Зарегистрирован: 19.06.2015

ilyaG пишет:

Здраствуйте, у меня подключено несколько потенциометров к ардуино(например 4шт), они у меня служат как кодовый замок,тоесть поворачиваю каждый на свой определенный угол и после этого вкл реле. Вопрос, как можно сделать програмно так, что б если один с потенцеометров выйдет из строя, то что б программа с него уже не считывала значение а сразу делала типа он стоит в верном положении(верный угол)???

А если сломать все 4, кодовый замок тоже должен открыться?

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Вариантов несколько, в зависимости от необходимости, стоимости и тп.

Самое простое, перед установкой кода, нужно изменить состояние потенциометра от минимума до максимума и обратно, соответственно, программа не откроется, если такого действия не произвели.

Другие варианты, лепить ключи, для размыкания/замыкания цепей потенциометров, писать софт и т.п.

 

maksim
Offline
Зарегистрирован: 12.02.2012

kisoft пишет:

нужно изменить состояние потенциометра от минимума до максимума и обратно, соответственно, программа не откроется, если такого действия не произвели.

Только вот именно этого действия и нельзя будет сделать, если потенциометр вышел из строя...

maksim
Offline
Зарегистрирован: 12.02.2012

Все просто. Нужно питать потенциометры не от питания (+5 и GND), а от двух выводов дуины. Тем самым вы сможете определять положение бегунков при прямой полюсации и обратной, при несовпадении считаем потенциометр неисправным.

#define POT_VCC 2
#define POT_GND 3
#define POT_1  A0

void setup() {
  Serial.begin(9600);
  pinMode(POT_VCC, 1);
  pinMode(POT_GND, 1);
}

void loop() {
  // меняем полюсацию на прямую и немного ждем
  digitalWrite(POT_VCC, 0);
  digitalWrite(POT_VCC, 1);
  delay(10);
  // считали значения с потенциометров
  int pot_1 = analogRead(POT_1);
  // меняем полюсацию на обратную и немного ждем
  digitalWrite(POT_VCC, 0);
  digitalWrite(POT_VCC, 1);
  delay(10);
  // считали инвертированные значения с потенциометров
  int pot_1_inv = analogRead(POT_1);
  // сравниваем резульататы
  // с некоторым допущением в 100 единиц
  if(pot_1 < (1023 - pot_1_inv - 100) || pot_1 > (1023 - pot_1_inv + 100))
  {
    // потенциометр неисправиен
  }
}

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

Клапауций 911
Offline
Зарегистрирован: 18.10.2015

ilyaG пишет:

Здраствуйте, у меня подключено несколько потенциометров к ардуино(например 4шт), они у меня служат как кодовый замок,тоесть поворачиваю каждый на свой определенный угол и после этого вкл реле. Вопрос, как можно сделать програмно так, что б если один с потенцеометров выйдет из строя, то что б программа с него уже не считывала значение а сразу делала типа он стоит в верном положении(верный угол)???

поставь рядом с потенциометрами большую кнопку:"Я - пьяный, если меня не пустят домой, то нассу под дверь!".

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Есть чисто аппаратное решение. Потенциометры берете, например, от единиц до нескольких десятков килоом. Подключаете каждый к опорному напряжению через дополнительный резистор сопротивлением околоо 10% от сопротивления потенциометра. Таким образом, макимальное значение, которое можно будет снять с бегунка, будет на 10% ниже опорного. Вход Ардуины соединяете с источником опорного напряжения резистором сопротивлением в 100 - 200 кОм. Такой резистор существенного влияния на работу схемы при исправном потенциометре не оказывает. Но как только бегунок потенциометра отрывается, на входе Ардуины оказывается практически все опорное напряжение, что легко фиксируется программно.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

maksim пишет:

kisoft пишет:

нужно изменить состояние потенциометра от минимума до максимума и обратно, соответственно, программа не откроется, если такого действия не произвели.

Только вот именно этого действия и нельзя будет сделать, если потенциометр вышел из строя...


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

ilyaG
Offline
Зарегистрирован: 19.10.2015

keefa пишет:

ilyaG пишет:

Здраствуйте, у меня подключено несколько потенциометров к ардуино(например 4шт), они у меня служат как кодовый замок,тоесть поворачиваю каждый на свой определенный угол и после этого вкл реле. Вопрос, как можно сделать програмно так, что б если один с потенцеометров выйдет из строя, то что б программа с него уже не считывала значение а сразу делала типа он стоит в верном положении(верный угол)???

А если сломать все 4, кодовый замок тоже должен открыться?

На самом деле их будет 8 и я не думаю что все они одновременно выйдут из строя

ilyaG
Offline
Зарегистрирован: 19.10.2015

keefa пишет:

ilyaG пишет:

Здраствуйте, у меня подключено несколько потенциометров к ардуино(например 4шт), они у меня служат как кодовый замок,тоесть поворачиваю каждый на свой определенный угол и после этого вкл реле. Вопрос, как можно сделать програмно так, что б если один с потенцеометров выйдет из строя, то что б программа с него уже не считывала значение а сразу делала типа он стоит в верном положении(верный угол)???

А если сломать все 4, кодовый замок тоже должен открыться?

На самом деле их будет 8 и я не думаю что все они одновременно выйдут из строя

ilyaG
Offline
Зарегистрирован: 19.10.2015

kisoft пишет:

Вариантов несколько, в зависимости от необходимости, стоимости и тп.

Самое простое, перед установкой кода, нужно изменить состояние потенциометра от минимума до максимума и обратно, соответственно, программа не откроется, если такого действия не произвели.

Другие варианты, лепить ключи, для размыкания/замыкания цепей потенциометров, писать софт и т.п.

 

 

тоесть нам надо будеть проверить 2а крайние значения, и если они 0 и 1023 то потенциометр рабочий?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

ilyaG пишет:

kisoft пишет:

Вариантов несколько, в зависимости от необходимости, стоимости и тп.

Самое простое, перед установкой кода, нужно изменить состояние потенциометра от минимума до максимума и обратно, соответственно, программа не откроется, если такого действия не произвели.

Другие варианты, лепить ключи, для размыкания/замыкания цепей потенциометров, писать софт и т.п.

 

 

тоесть нам надо будеть проверить 2а крайние значения, и если они 0 и 1023 то потенциометр рабочий?


два крайних - мало.....
если есть скорость изменения значения потенциометра в "реальных" значениях - он жив
нет - скорее мёртв :(
Самое простое, перед установкой кода, нужно изменить состояние потенциометра от минимума до максимума и обратно... КАЖДОГО потенциометра !!!!! для определения его НЕмёртвости....
это от Kisofta

...или крутнуть его тудым-сюдым - адекватен или нет уже.....
код будет не хилый.....

Coolerr
Offline
Зарегистрирован: 30.06.2014

Еще вариант, опросить 1>2, 2>3, 1>3 сумма сопротивлений 1>2 2>3 должна быть ~1>3. И согласен с предыдущим оратором код будет аццкий.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

это другая логика ОТКРЫТИЯ , но не проверка жизни потенциометров :(

maksim
Offline
Зарегистрирован: 12.02.2012

kisoft пишет:
maksim пишет:

kisoft пишет:

нужно изменить состояние потенциометра от минимума до максимума и обратно, соответственно, программа не откроется, если такого действия не произвели.

Только вот именно этого действия и нельзя будет сделать, если потенциометр вышел из строя...

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

Как программа может понять, что вы крутите потенциометр, если он неисправен?

maksim
Offline
Зарегистрирован: 12.02.2012

maksim пишет:

Все просто. Нужно питать потенциометры не от питания (+5 и GND), а от двух выводов дуины. Тем самым вы сможете определять положение бегунков при прямой полюсации и обратной, при несовпадении считаем потенциометр неисправным.

#define POT_VCC 2
#define POT_GND 3
#define POT_1  A0

void setup() {
  Serial.begin(9600);
  pinMode(POT_VCC, 1);
  pinMode(POT_GND, 1);
}

void loop() {
  // меняем полюсацию на прямую и немного ждем
  digitalWrite(POT_VCC, 0);
  digitalWrite(POT_VCC, 1);
  delay(10);
  // считали значения с потенциометров
  int pot_1 = analogRead(POT_1);
  // меняем полюсацию на обратную и немного ждем
  digitalWrite(POT_VCC, 0);
  digitalWrite(POT_VCC, 1);
  delay(10);
  // считали инвертированные значения с потенциометров
  int pot_1_inv = analogRead(POT_1);
  // сравниваем резульататы
  // с некоторым допущением в 100 единиц
  if(pot_1 < (1023 - pot_1_inv - 100) || pot_1 > (1023 - pot_1_inv + 100))
  {
    // потенциометр неисправиен
  }
}

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

...Или ограничить крайние положения можно резисторами на крайних выводах потенциометров. В этом случае вы получите определение неисправности по всем 3 проводам потенциометров. 

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

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

maksim пишет:

kisoft пишет:
maksim пишет:

kisoft пишет:

нужно изменить состояние потенциометра от минимума до максимума и обратно, соответственно, программа не откроется, если такого действия не произвели.

Только вот именно этого действия и нельзя будет сделать, если потенциометр вышел из строя...

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

Как программа может понять, что вы крутите потенциометр, если он неисправен?


Тайм-аут. Если покрутить все 4, то если все сдохли, то ничего не произойдёт, а хотя бы один рабочий, то это даст понять, что все остальные сдохли.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

maksim пишет:

kisoft пишет:
maksim пишет:

kisoft пишет:

нужно изменить состояние потенциометра от минимума до максимума и обратно, соответственно, программа не откроется, если такого действия не произвели.

Только вот именно этого действия и нельзя будет сделать, если потенциометр вышел из строя...

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

Как программа может понять, что вы крутите потенциометр, если он неисправен?


крутим КОТОРЫЙ!!! не исправен.....
...никак :(
...нано думать алгоритм проверки резюков ?
правильно выше сказали - если все 4 сломаны - не проверить , нету таких алгоритмов....
ТС - нету доступа ? - проверяем потенциометры омметром ! программно - заморочЬно ! :)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

kisoft , молодец....  
...логика !
только эту логику в коде реализовать геморройно будет ! 
нет ?

maksim
Offline
Зарегистрирован: 12.02.2012

Да нет, это

kisoft пишет:

Самое простое

SU-27-16 пишет:

Самое простое

Интересно было бы посмотреть на это самое простое.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Самое простое, потому что не требует аппаратных ресурсов, дополнительных.
Реализацию можно показать, только для абстрактной задачи. Если будет время, для пары потенциометров покажу. Конечный автомат, ничего особенного.
При этом, будем считать, что если потенциометр сдох, то ввести код нельзя, т.е. замок не будет работать.

maksim
Offline
Зарегистрирован: 12.02.2012

ilyaG пишет:

что б программа с него уже не считывала значение а сразу делала типа он стоит в верном положении(верный угол)???

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

Если дверь должна открываться при одном неисправнеом потенциометре, мне кажется, проще всего посчитать, сколько потенциометром находятся в верном положении, и если их не менее 7, открыть дверь.

vk007
Offline
Зарегистрирован: 16.06.2015

Странный кодовый замок какой-то и совсем не практичный. Неужели код для каждого открывания генерится новый? Думаю, что он всегда один и тот же. Это ж надо еще не забывать после каждого успешного открывания замка "скрутить" потенциометры, причем, желательно все 8. Иначе замок останеться открытым. Ладно еще если замком будет пользоваться один человек, т.е. я любимый: забыл "скрутить" - сам себе злобный буратина, а если еще кто-то, да еще и не такой ответственный и с плохой памятью? Постоянно думать, а не забыл ли он это сделать?

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

И еще лучше не на потенциометре, а на энкодере. "Влево на X щелчков (которые, кстати, весьма неплохо ощущаються тактильно) - некоторая пауза (или нажали кнопку, да хотя бы на том же энкодере) - вправо на Y - пауза/кнопка - влево на Z - и т.д." Можно обойтись без паузы/кнопки если каждое следующее число из кода вращать в противоположную сторону. Пауза/кнопка дает возможность следующее число вращать в ту же сторону.

Достоинства очевидны: 1) энкодер надежнее потенциометра, тем более восьми; 2) всего одна "ручка" - а значит устройство дешевле, меньше в габаритах, надежнее; 3) не важно в каком положении осталась "крутилка" после набора - энкодеру все-равно; 4) любое количество чисел в коде (в пределах разумного, конечно); 5) любая размерность чисел кода - хоть "5-3-9000-10-..."; 6) если не наносить шкалу, а считать щелчки, то рядом стоящим "не совсем желательным глазам" будет крайне сложно отследить набираемый код, разве что количество чисел в коде.

Из недостатков приходит на ум пока только два - требуется немного больше времени и аккуратности при наборе.

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

vk007 пишет:

...и аккуратности при наборе.

Прально!

Нефиг пьяным домой возвращаться!

vk007
Offline
Зарегистрирован: 16.06.2015

andriano пишет:

Прально!

Нефиг пьяным домой возвращаться!

Для такого состояния предусмотреть большую красную кнопку и алкотестер: дыхнул, нажал - дверь и открылась.

exez
exez аватар
Offline
Зарегистрирован: 04.04.2015

может проще поставить 8 кнопок и задать определенный порядок их нажатия?

exez
exez аватар
Offline
Зарегистрирован: 04.04.2015