Как нажимать (эмулировать нажатие) на сенсорные кнопки с помощью ардуины?
- Войдите на сайт для отправки комментариев
Пт, 07/04/2017 - 11:05
Есть панель управления вентиляцией на ATmega32A. К мк по i2c подключена микруха AD7148 по схеме см. ниже. Эта микруха отвечает за нажатие сенсорных клавиш на панели управления.
Подскажите, как можно нажимать (эмулировать нажатие) на сенсорные кнопки с помощью ардуины?
Даташит на есть здесь .
Схема подключения AD7148 к мк.
Заранее благодарен всем откликнувшимся.
Думаю никак. Датчик емкостной, срабатывает от небольшой емкости тушки. Ваша схема будет иметь тоже некоторую собственную емкость - емкость монтажа. От этой неуправляемой емкости и будет сработка.
Ищите другие пути - раземчик подпаять и т.д.
Ищите другие пути - раземчик подпаять и т.д.
Я вас правильно понял, что вы считаете что даже подпоявшись к плате я не смогу никакак сэмулировать нажатие на сенсорные клавиши с помощью ардуины?
Взять два сервомотора, сделать "робопалец" и им нажимать :)
Взять два сервомотора, сделать "робопалец" и им нажимать :)
Громоздко получится )))
Взять два сервомотора, сделать "робопалец" и им нажимать :)
Громоздко получится )))
Сначало посмеялся, но сейчас похоже это единственный вариант.....
Vitaly_Ekb, справедливости ради нужно всё таки добавить, что есть и более удобные варианты. (1) Создать на МК эмулятор этой микросхемы. По внешнему сигналу он отключит от шины i2c родной чип и пошлёт свой ответ. (2) переписать программу меги32 добавив дополнительные входы управления. Но оба варианта - это серьёзная работа для опытного инженера-программиста.
...... Но оба варианта - это серьёзная работа для опытного инженера-программиста.
Это факт, я максимум осилю "робопальцы" :-)
Не совсем понятно, что значит эмулировать? Совсем выкинуть AD? Поключить ардуину с несенсорными кнопками? Довольно просто. Надо в режиме i2c slave деруть ногу int и на запрос процессора-мастера отправить два 16 битных слова с координатами кнопок.
Это тоже может быть решение, но у меня мозгов на него не хватает пока. Похоже надо в раздел "Ищю исполнителя".
Уважемый nik182, а сколько это может стоить, и не возметесь ли вы помочь в этом?
Рабочая заготовка. Button кнопка или событие. Может быть сколько угодно. Нужно только заполнить AD_reg правильными цифрами для каждого события. Я этого сделать не могу. У меня нет этого оборудования и цифры взять неоткуда.
Уважемый nik182.
Большое вам спасибо за ответ и код. На плате 4 сенсорные кнопки. Они подключены к AD7148 r ногам 13,14,15,16 соответсвенно CIN0-CIN3. Этого достаточно для ".... заполнить AD_reg ". К сожалению мои знания таковы, что кое что в вашем коде я не понимаю.
Буду вам примного балгодарен за помощь.
Опишите, что вы не понимаете, я расшифрую.
Уважаемы nik182.
Пожалйста подскажите ваш емейл.
Дальнейшая работа подразумевает подключение сниффера i2c шины к существующему устройству и получения кодов, передаваемых AD7148. Без знания этих кодов очень трудно двигаться дальше. Другой путь - посылать разные коды и смотреть как отреагирует устройство. Но это очень стрёмный путь. Можно вогнать в какой нибудь инженерный режим и сбить все настройки. Я вам дал полностью рабочий код. В него нужно добавить присвоение Button чисел 1,2,3,4.... в зависимости от количества коман и для каждой команды прописать коды в массив AD_reg. Я сделать большего не могу, т.к. без наличия железа или конкретных кодов всё остальное просто бессмысленно. Подключите ардуину к шине i2c. Нажимайте кнопки и смотрите, какие числа бегут по шине. http://cxem.net/comp/comp122.php Например вот схема сниффера. В гугле их много.
я точно не уверен. но попробуй припаять к кусочку фольги проводок. Фольгу прилепи скотчем к кнопке. Проводок замкни на землю. ну и замыкай размыкай
Нафига сниферить если в доке есть глава I2C-COMPATIBLE SERIAL INTERFACE.
Почитать, реализовать. Только не по ТС задача эта.
Потому что при нажатии на кнопку АЦП оцифровывает матрицу и посылает результат оцифровки. В мануале ничего нет про матрицуи и результат оцифровки.
я буду делать тоже самое с котлом.
задча - нажимать на кнопки +/-, они сенсорные.
Разобрав пульт котла увидел, что от платки кнопок на основную плату идет шлейф с количеством проводников на 3 больше чем чилос кнопок.
Дальше просто отследил дорожки, и увидел, гда на процессор идут сигналы с сенсорных кнопок.
Перед процессором - резисторы.
И замыкая эти дорожки на землю (резистором 100к) получаю нажатия.
Все просто.
Действительно, ничего нет такого. И в этой теме нет. А зачем Вы это выдумали?
При замыкании контакта сенсорной конопки на землю работает не стабильно, то работает, то не работает, прежде чем писать пробовал и сейчас перепроверил. А вот через 100кОм вроде стабильно срабатывает.
Думаю надо проверить сначала точность срабатывания кнопки, если точность будет близко к 100% остановлюсь на нем. если нет буду копать в сторону более сложной схемы.
Там на плате есть пищалка, и при нажатии на клавишу пищалка издает звук. Думаю надо на ардуинке собрать схему проверить точности срабатывания нажатия кнопки. Что бы ардуина замыкала кнопку и проверяла сработку пищалки. Подскажите где посмотреть пример кода для проверки срабатывания пищалки. На пищалку приходит сигнал длительностью ~17,5 м.сек с частотой ~ 4 кГц.
возможно, контроллер, отрабатывающий нажатия, проверяет напряжения (на КЗ?), отсекает дребезг и проч.
Действительно, ничего нет такого. И в этой теме нет. А зачем Вы это выдумали?
Уточните, что я выдумал, потому как от ТС:
Есть панель управления вентиляцией на ATmega32A. К мк по i2c подключена микруха AD7148 по схеме см. ниже. Эта микруха отвечает за нажатие сенсорных клавиш на панели управления.
Подскажите, как можно нажимать (эмулировать нажатие) на сенсорные кнопки с помощью ардуины?
Эмулировать нажатие можно только посылая такие же коды АЦП как из мс AD7148.
Уважаемый nik182
Я правильно понимаю что вместо I2C сниффера подойдет логический анализатор типа такого
что бы посмотреть что AD7148 шлет по шине I2C?
Vitaly_Ekb, да, вполне. Сейчас из любопытства сравнил сниффинг осциллографом и вышеуказанным лог.анализатором. результаты ниже, скрины кликабельны.
Как видно анализатор тоже точно всё вывел, ( на разницу в одном байте не обращать внимания -это ацп)) Хоть и не так красочно как осциллоскоп)
Действительно, ничего нет такого. И в этой теме нет. А зачем Вы это выдумали?
Уточните, что я выдумал, потому как от ТС:
Есть панель управления вентиляцией на ATmega32A. К мк по i2c подключена микруха AD7148 по схеме см. ниже. Эта микруха отвечает за нажатие сенсорных клавиш на панели управления.
Подскажите, как можно нажимать (эмулировать нажатие) на сенсорные кнопки с помощью ардуины?
И опять, ни АЦП ни матрицы нет. В мануале тоже нет. Но вы пишите
Действительно, ничего нет такого. И в этой теме нет. А зачем Вы это выдумали?
Эмулировать нажатие можно только посылая такие же коды АЦП как из мс AD7148.
Если уж решили подменять значения из регистров AD7148 то надо почитать доку, что там за значения должны быть на каких адресах. А там емкости нажимающего подключенные к контактам, их значения разные для разных нажимающих, состояния рук и т.д. и вычитывать их точные значения безсмыслено, достаточно подавать большие числа из допустимого диапазона значений регистра при нажатии и маленькие при отсутствии в соответствии с форматом из даташита. Даже если с первого раза не угадается - за несколько попыток уточнится.
Подключил Ардуину к пульту с сенсорными конопками по схеме ниже.
В ардуине скетч
Если сначала подключаю панель (подаю на нее питание) а потом подключаю контакт от дуньки на контакт сенсорной клавиши, то все работает.
Если же сначала подключаю контакт от дуньки на контакт сенсорной клавиши а потом подключаю панель (подаю на нее питание), то ничего не работает.
Видать в момент включения AD7148 колибруется и замыкания контакта на землю через 100кОм уже не работает.
Подскажите пожалуйста , куда копать.
Vitaly_Ekb, нафига тут оптрон? Подключите напрямую. Только коммутировать придёться нестандартно, -командой pinMode, input -отключено, output -включено.
Большое спасибо. В прошлые разы был не внимателен при проверке, и уточняю: Сенсорная кнопка срабатывает не когда замыкаешь ее на землю через 100кОм а когда при замкнутом через 100кОм на минус или на плюс разрываешь контакт. Причем если контакт снова не замкнешь панель будет считать, что кнопка замкнута (долгое нажатие).
Схему собрал без оптрона. Код работает при условии если контакт мк подключается к контакту сенсорной кнопки пульта(панель) после включения панели или питание на мк подается с задержкой после подачи питания на пульт(панель).
Я планирую собрать таймер задержки включения на 555, вернее на русском аналоге КР1006ВИ1. Чтобы питание подавалось с задержкой.
Подскажите пожалуйста может есть какой-нибудь более изящный способ?
Vitaly_Ekb, что вы вцепились за эти 100кОм ? Не факт что сопротивление там нужно вообще, а если и нужно, то не факт что именно 100к. Может конденсатор нужен? Изучите даташит, выясните на что реагирует датчик.
Vitaly_Ekb, нафига тут оптрон? Подключите напрямую. Только коммутировать придёться нестандартно, -командой pinMode, input -отключено, output -включено.
Я когда на этом форуме вижу оптрон, мне плохо становится. От диссонанса чувств. Просто трындец. Я уже раз советовал селсин ставить, и шо вы думаете, он пошел его ставить )))
Большое спасибо. В прошлые разы был не внимателен при проверке, и уточняю: Сенсорная кнопка срабатывает не когда замыкаешь ее на землю через 100кОм а когда при замкнутом через 100кОм на минус или на плюс разрываешь контакт. Причем если контакт снова не замкнешь панель будет считать, что кнопка замкнута (долгое нажатие).
Это не невнимательность. Это непонимание принципа. Схема емкостная, и определяет не столько сопротивление, сколько емкость. Припаяли проводок или резистор- добавили емкость, держите провод - еще емкость добавилась. А она может еще быть заряжена и разряжена.
Уважаемы ГУРУ!!! Хотел бы уточнить, мои знания в программировании ардуины ушли чуть дальше чем моргания светодиодами и термобарометра для дома. В электронике: про оптрон и схему его включения узнал только на этой недели, на этом же форуме нашел.
Уважаемый Logik Про "селсин" !!! даже прокомментировать не нахожусь что. . -Вы явно меня с кем-то путаете.
Vitaly_Ekb, что вы вцепились за эти 100кОм ? Не факт что сопротивление там нужно вообще….
Я попробовал несколько сопротивлений и диаппазон, при которых кнопка срабатывает получился где-то от 15кОм до где то 150кОм.
…. Может конденсатор нужен? ….
С конденсатором экспериментировать боюсь, а в друг он при подключении через что-нибудь разрядится и спалит что-нибудь.
…. Изучите даташит, выясните на что реагирует датчик.
Попытался изучить даташит, ничего я там не смог найти, что бы помогло, большая часть там китайская грамота для меня.
Это не невнимательность. Это непонимание принципа…..
Полностью с вами согласен, вот из за этого и прошу помочь…..
С одной кнопкой и сопротивлением 20кОм вроде работает, поставил 4 кнопки, продублировал на 4 кнопки, изменил код, остальные кнопки не захотели работать по той же схеме :-(.
Прошу помощи, с учетом моего очень слабого понимания вопроса….
Попытался изучить даташит, ничего я там не смог найти, что бы помогло, большая часть там китайская грамота
Да вы в него не смотрели даже, там первой строкой -ёмкостной датчик. Нафига ему ваш резистор? Реагирует он всё равно на ёмкость.
Поверьте, есть сферы в жизни в которых я не такой профан как в этой. И понимаю что намного проще сказать , что то типа:
Да вы в него не смотрели даже, там первой строкой….
Нежели предложить какое-то решение.
…там первой строкой -ёмкостной датчик….
Да, я это прочитал, и пытался найти решения в интернете, но моих знаний не хватило возможно для того, что бы написать правильный поисковый запрос.
И после этого пришел на форум за помощью.
А прицепился я к сопротивлению, потому-что наводку дал ProstoAlex и это единственное что у меня получилось на данный момент.
И снова :-) «Прошу помощи, с учетом моего очень слабого понимания вопроса….»
Попытаюсь еще раз. На пальцах как для профана. Схема работает на измерении электрической емкости. Любой предмет, хоть немного проводящий, имеет емкость. Вы, я, проводок, ардуина, контакты реле, и пр. При какбы нажатии Вы подключаете свою емкость в схему, микруха просто измеряет емкость "кнопки" и сохраняет полученое значение емкости в регистре. Фишка в том что подключаете свою емкость не обязательно гальванически, т.е. контакту к металлу но и без оного, т.е. снова через емкость )))
Из этого следует несколько грусных фактов:
1. Подключить проводок - это ни о чем, важно держали ли вы этот проводок рукам, пинцетом, где он лнжал, его размеры и т.д. т.е. все что может влиять на его емкомсть.
2. Подключение любой схемы будет добавлять ей емкость что оказывает побочное вляние на процесс измерения. А т.к. весь разговор о малых величинах, то побочное может сильно все испортить.
3. Варианты с вмешательством внутрь устройства типа подмены микросхемы (комутации шины, фокусов с адресами устройств и пр..), они конечно возможны, но требуют высокой квалификации. Ну и гарантия понятно потеряется.
4. Вариант с резистором, с учетом п.1, по сути вмешательство в процесс измерения емкости, дело малопрогнозируемое, опять же нужна схема комутирующая его и см. п.2
Да. Робопалец рулит. Емкость тела человека от 100 до 200 pF. Соответственно примерно столько надо ставить. Такой емкостью ничего не сожёшь. Хотя резистор это то же самое. Потому что емкостью тела человека замыкается на землю генератор 250кГц и измеряется изменение переменного напряжения.
И выкиньте из SETUP pinMode - строки 22-25 т.к. именно из за них вы при старте нагружаете AD в момент калибровки. Без них всё должно работать при нормальном соединении с момента включения. Включение - начало эмуляции нажатия должно даваться командой digitalWrite(СontactN,LOW); pinMode(ContactN,OUTPUT); , а выключение - отпускание пальца pinMode(ContactN,INPUT);.
У вас мне кажется наоборот.
Привет!
Есть ли более актуальная информация по данной теме? Возникла аналогичная задача. Можете поделиться более актуальными схемами реализации: что и как лучше подключать и код? Спасибо заранее!