Шумы на аналоговом входе
- Войдите на сайт для отправки комментариев
Может кто чего подскажет. Задача: есть два провода, при прикосновении к которым зажигается свет. То есть взялись за один провод - ничего, за второй - ничего. А вместе, за первый и второй одновременно (первый в левой руке, второй в правой) появилось сопротивление тела - зажегся свет. Все отлично, все хорошо. Делаем на ардуино просто делитель с одним резистором и считываем значения с аналогового входа. То есть фактически измеряем сопротивление тела человека. Работает. Но есть ложные срабатывания, когда касаешься просто аналогового вывода. Пробовал с датчиком уровня жидкости. Работает стабильней, но все равно ложные срабатывания есть. Что делать? Понятно, что у всех людей сопротивление разное. У кого-то 500 Ом. У кого-то 500 кОм. Или мегаомы. Но как-то ведь можно сделать? Почему когда берешься за один провод идут помехи (ложные срабатывания)?
Емкость человечского тела порядка 50-80 пкФ. Когда Вы берётесь за провод, Вы его по сути заземляеете и в то время пока идёт заряд "конденсатора" по Вашему делителю течёт ток. Когда заряд закончится - всё устаканивается. Теперь думайте, как с этим бороться.
Недавно поднималась тема по этому поводу. Сопротивление сухих рук человека несколько мегаОм, сопротивление внутренних органов (мокрых рук) около 1 килоОма.
Почему когда берешься за один провод идут помехи (ложные срабатывания)?
Емкость человеческого тела. Используйте код, аналогичный применяемому для устранения дребезга контактов. Возможно, с большей задержкой между опросами.
У ТС вопрос в том, что тело это антенна, которая ловит на себя всякие наводки и, в перую очередь, наводку со стороны сети.
Далее вопрос входного сопротивления, если мегаомы по входу и мегаомы собственное сопротивление, то амплитуда наводки может достигать десятков вольт.
зы. Много кругом разговоров о осцилах, а вот что там на нем видно от щупа в руках ........ не пора ли посмотреть.
зы2. "Пробовал с датчиком уровня жидкости." Видимо следует понимать, как вход через компаратор
Дело даже не в том, что тело выступает как антена. Просто при обычной схеме с делителем на резисторе (резистор 10 кОм на 5v одним концом и на аналоговый вход другим, земля - это один провод для рук и от аналового входа - второй провод). То есть по логике вещей на аналоговом входе должно быть напряжение от делителя, которое и выводит ардуино. Но при прикосновении только к проводу, который висит на аналоговом входе ардуина начинает кидаться значениями, как будто делитель уже вступил в работу и я взялся за оба провода. Как от этого избавиться. Пробовал чисто математически найти хоть какую-то закономерность типа дребезга, но нет. Есть что-то подобное на дребезг, но это не 100% результат. То есть если я не касаюсь проводов, ардуина выдает например 1023, 1023, 1023, 1023. Затем я касаюсь обоих проводов - ардуина выдает 877, 965, 977, 932. Но смысл в том, что если я касаюсь одного провода, того, который подключен к А0, то ардуина выдает 977, 1023, 767, 866. А может выдать и как с двумя проводами. Как отследить за один провод взялись или за два? С точки зрения последовательности - мне кажется никак. Может можно какую-нибудь RC цепочку поставить в землю. Посоветуйте что-нибудь. Резисторы подбирал. Брал и мегаомы и килоомы. Результат примерно одинаковый. Цифры только меняются. А на провод также реагирует. Или бросить ардуино и попробовать сделать на транзисторе? Хотя он тоже от прикосновения к базе открывается.
Я может быть не совсем правильно понял задачу, но отследить помехи на одном проводе вы можете? Так может взять два провода и подключить к двум аналоговым входам? И проверять на скольких (один или два) входах помехи? Или надо именно задействовать один вход? И я прошу прощения за глупый вопрос, но делитель это разве не два резистора?
Может это видео чем-то поможет?
https://www.youtube.com/watch?v=BHQPqQ_5ulc
Вторым резистором выступает тело человека, который берется за два провода. Два входа можно использовать, только что это даст? Будут такие же случайные значения по двум входам.
За основу я брал вот эту статью.
http://littleredrat.blogspot.ru/2013/02/arduio.html
Вообще-то, как я понимаю, проблема в том, что для того, чтобы измерять сопротивление человеческой кожи, нужно напряжение существенно выше, чем 5 вольт. Потому что иначе, амплитуда наводок оказывается выше, чем напряжение в Вашем мегомметре.
Если мое понимание верно, то у Вас два пути:
1. Если задача только иметь выключатель, срабатывающий при прикосновении, то мерять не сопротивление, а емкость. Будет обычный емкостной датчик. Схем в инете навалом.
2. Если хочется измерять именно сопротивление, то напряжение надо увеличить на порядок, если не два, а ток ограничить, например 1ма. Насколько я еще помню ПУЭ, безопасным током для человека во влажных помещениях считается до 10ма. Так что, по идее, ток в 1ма человек не почуствует. То есть, если напряжение 240 вольт (после выпрямления будет до 340), то токоограничивающий резистор должен быть не менее 340К. Если детектировать ток в 500мка, то нужен будет 640К резистор. Точнее пара резисторов - на плюс и минус выпрямителя. Ну и к МК уже только через оптрон, который нужно будет предварительно раскачать транзистором. Как-то так.
P.S. Знаю, что резистор будет не 340K, а, скорее, 470К. И не 640К, а, скорее, 680К. Ближайший больший. Но вдруг ТС из Е98 поставит ровно 340К, а из Е192 642К? )))
За основу я брал вот эту статью.
Так там омметр, а не мегомметр. Разница существенна.
Сопротивление моего тела 200 кОм. Я видел людей, у которых сопротивление 40 кОм. Схема вполне может измерить 200 кОм. Но она не измеряет. Вернее измеряет, но при этом существуют ложные измерения от одного провода.
При чем тут тело? Тут главную роль играет сопротивление кожи. Если мозолем коснуться, то больше мегома будет однозначно.
На своем мозоле проверил. 1 - 1.5 мегома. Наводка между мной и батареей - 200-250 милливольт. Что еще немного, так как только альфа-ритм у человека имеет амплитуду 50-100 милливольт. А у Вас напряжение на входе АЦП меняется всего на 200-500 милливольт. То есть, помеха от 50 до 125%. Что Вы и видите.
Вторым резистором выступает тело человека, который берется за два провода. Два входа можно использовать, только что это даст? Будут такие же случайные значения по двум входам.
If (вход1 != 1023) & ( вход2 != 1023){
лампочка гори}
Не сработает?
If (вход1 != 1023) & ( вход2 != 1023){
лампочка гори}
Не сработает?
А если за провода взялись 2 разных человека?
адын птыц с два нога на одна провода сидеть не мога?
Про двух человек я не подумал. А это обязательное условие, что для одного человека? И зачем тогда обязательно два провода?
Вообще, изначально задумка была следующая: есть две пластины, к которым можно прикоснуться. Растояние между ними больше того, до чего может дотянуться один человек. В комнату заходит два человека. Один берется за одну пластину, другой за вторую. Ничего не происходит. После чего они берутся за руки (не отпуская пластин) - открывается дверь. Квест в реальности. Как реализовать? Есть мысли у кого?
Есть еще вариант. Гнать модулированный сигнал. В простейшем виде - определенной частоты. А на входе убеждаться в наличии именно этой частоты.
Crazy_Lazy, Для варианта, описанного ptr есть полностью готовый скетч. Взяться руками за 8 и 11 пин.
Забавная задачка :)
Вот на страничке http://www.learningaboutelectronics.com/Projects/ есть описание разных сенсоров и выключателей на прикосновение (где-то в середине страницы). Есть и на транзисторах и на микросхемах. Может найдете что-то подходящее для себя?
Вариант отличный, но скетч не полностью рабочий. При включении светодиод горит постоянно, а когда берешься руками за два пина (8 и 11) светодиод тухнет. Но я мало что понимаю в этом коде. Он сильно оптимизирован. Плюс к этому, скетч не работает как нужно. Если взяться и сильно нажать на провод 8 пина, то светодиод тоже гаснет, как и при замыкании двух проводов. Да и на 11-ой можно тоже приловчиться и нажать так, чтобы он потух. Стабильности нет. Попробуйте сами на своей ардуине. Может у меня с ардуиной чего?
Crazy_Lazy, выводы контроллера не рассчитаны на подобные вещи, но тем не менее у меня работает идеально. По отдельности никакой реакции, хоть вонзай провод как иголку в тело :) (на всякий случай -проверял на китайской UNO, проводки подключены короткие, по 10 см)
Странно, может у меня правда что-то с ардуиной, а я уже мозг весь сломал? Попробую завтра на другой - отпишусь. Хотя эта оригинальная UNO. Странно.
Попробовал. Действительно косяк с питанием ардуино. Питал ее изначально от USB шнура. Может наводки, может длина USB шнура большая. В общем, распаял ее на блок питания - все запустилось. Вроде бы не глючит. Сейчас еще реле примонстрячу и все.
Реле как-то нестабильно работало, трещало, наверное частота большая? В общем пришлось написать и отладить вот такой код. Теперь 100% срабатывание. Ложных срабатываний нет. Всем спасибо за помощь.
так вот как он выглядит. Этот хитро-редкий оператор goto. :)
кажется, если его и метку тут убрать ничегошеньки не изменится.
Рано обрадовался. При наращивании длины проводов появились ложные срабатывания. Просмотрев содержимое переменных был сделан следующий вывод - один провод работает как хорошая передающая антена, второй провод - как хорошая приемная. 100% срабатывание без прикасаний, на длинных проводах. Че делать? Как сделать из проводов очень плохую антену? Прокидывать экранированные? Тоже не вариант, так как площадки соприкосновения тоже железные и большие. Какие-нибудь мысли будут у кого-нибудь?
Лоховский break - не наш метод!!! "Настоящие программисты не используют Паскаль"!!! :))))
Лоховский break - не наш метод!!! "Настоящие программисты не используют Паскаль"!!! :))))
Вообще-то есть (правда, там это процедуры). Там и goto есть. Но здесь речь не о них, а о С'шном break. А "Настоящие программисты не используют Паскаль" - это название статьи в которой описывается феномен настоящих программистов, которые не боятся goto и плюют на стуктурность:)
Чего только не узнаешь на старости лет...
Жалкая перепевка оригинала из Communication of the Asm за 1978г кажется .. :)
Жалкая перепевка оригинала из Communication of the Asm за 1978г кажется .. :)
Вы как-то уже говорили, что читали это в оригинале. Правда,ни год, ни журнал правильно назвать не смогли (и сейчас тоже). Успокойтесь уж, мы в курсе. что Вы читали.
И кстати, слово "Computing" начинается с "С", а не с "S" (хотя, Вы разумеется, в оригинале его видели).
Понятно, что у всех людей сопротивление разное. У кого-то 500 Ом. У кого-то 500 кОм. Или мегаомы.
мне не понятно.
картинко для привлечения внимания:
Сопротивление между двумя руками имеется ввиду. Ладно. Поставил я транзистор составной (дарлингтона), сделал, что при прикосновении руками напряжение на выходе у меня меняется от 2.2 вольта до 3.2 вольта. Ардуиной это как-то можно потом отследить? Эксперимент с аналоговым входом ничего не дал. В нем просто идет какая-то чушь. Как-будто он в воздухе висит. Скетч из стандартных analogReadSerial. Напругу подавал через резистор 1 кОм. Плюс на A0 минус на землю. Что я делаю не так?
Crazy_Lazy, всё не так, неверная идеология. Изменится влажность рук -и напряжение станет другим. В #18 и #19 вас направили на верный путь.
Поставил я транзистор составной (дарлингтона), сделал, что при прикосновении руками напряжение на выходе у меня меняется от 2.2 вольта до 3.2 вольта. Ардуиной это как-то можно потом отследить? Эксперимент с аналоговым входом ничего не дал. В нем просто идет какая-то чушь. Как-будто он в воздухе висит.
База к земле не притянута, правильно?
Притянута через резистор 1 МОм.
В 18 и 19 все очень интересно, конечно. Но при длине проводов довольно больших и при непритянутых на землю выводах там полная чушь. А при притянутых - нет ничего. Как-то так. Жаль конечно. Идея очень хорошая. Мне нравится, но не получается у меня реализовать. Если интересно - напишите код, чтобы срабатывало реле. Коснулись - сработало. А потом попробуйте на длинных проводах. Достаточно 2-3 метров. У меня не работает. И вообще, цифровые выводы они ж должны логические единицы ловить, а откуда им там взяться? Сопротивление тела высокое. Может я что-то не понимаю в вашем коде, но он у меня совсем криво работает.
Притянута через резистор 1 МОм.
А не многовато? Обычно ставт в 10-100 раз больше, чем резистор в базе (чаще в 10). А 1МОм - по мне так многовато.
без селекции это все танцы с бубном
В 18 и 19 все очень интересно, конечно. Но при длине проводов довольно больших и при непритянутых на землю Достаточно 2-3 метров. У меня не работает. И вообще, цифровые выводы они ж должны логические единицы ловить, а откуда им там взяться? Сопротивление тела высокое. Может я что-то не понимаю в вашем коде, но он у меня совсем криво работает.
Вы напрасно надеятесь, что всё можно решить только кодом. Это уже аналоговый мир, здесь не всё так просто. Вполне логично что сигнал перед подачей на тактовый вход МК нужно усилить, а лучше ещё и пропустить через полосовой фильтр, что-б выделить частоту 20 кГц , или хотя бы отделить фон 50Гц фильтром низкой частоты. Аналогичная проблема при передачи сигнала от ик-пульта к устройству. Сигнал нужно выделить на фоне всего мусора, усилить и привести в удобоваримый вид, и всё это успешно решает тот-же фотоприёмник типа TSOP, но в вашем случае нет такого готового устройства, но гугль уже в нетерпении предложить вам схемы усилителей и фильтров ;)
Евгений, меня всегда улыбают ваши придирки к мелочам, особливо когда вы прочно сидите в лужах по крупняку. Продолжайте и дальше в этом духе. :)
Евгений, меня всегда улыбают ваши придирки к мелочам, особливо когда вы прочно сидите в лужах по крупняку. Продолжайте и дальше в этом духе. :)
Вас хватило только на полгода? Ну-ну, валяйте.
Евгений, Так не важно как на самом деле звался оригинал .. он был опубликован задолго до интернетов. И куда как смешнее, особенно на аглицком и содержал куда больше реально характерных признаков. Акромя того изобиловал именами корифеев, в т.ч. способных по телефону оказать помощь конечному юзверю, правя его руками код IBM OS360 "удаленно". В этом суть моего замечания, а вовсе не в том как пишется слово Asm через "s" или через "c", как Вы не преминули "заметить"... чего к ерунде цепляться? :) Сами начинаете, а потом плачетесь ..
Впрочем, завязываю с оффтопами. И ссыль и обсуждение - всё есть оффтоп.