Більше однієї кнопки в одному штирі


12

Я роблю якийсь проект, і я використовую Arduino для прототипу, я повинен використовувати 10 кнопок (разом з іншими речами) і мені не вистачає шпильок.

Я можу придумати одне рішення - використовувати аналогові штифти і використовувати кожен з них для двох кнопок, приблизно так:

схематичний

імітувати цю схему - Схематично створено за допомогою CircuitLab

Таким чином я можу прочитати штифт A0 і знати, хто з них штовхається, дивлячись, чи напруга становить 5 В або половину від цього.

Це гарна ідея? НІКОЛИ не слід натискати різні кнопки, і це єдина проблема, яку я можу придумати.

Чи є кращі способи?


Скільки шпильок ви намагаєтесь використати?
W5VO

@ W5VO мені знадобиться 22, з 10 кнопок, на платі всього 18 ... так що дві кнопки для кожного аналогового штифта мені потрібно лише 5 аналогових штифтів, а плата має 6.
MyUserIsThis

1
Так само FYI, багато виробників автомобілів використовують однаковий підхід для управління, встановленого за кермом для аудіосистеми. У них є 8 кнопок (дай або візьми), кожна з яких має власний резистор. Це дозволяє їм провести один провід (або пару проводів для гарантування чистого повернення) від колеса до звукової головки. Це ідеально хороший підхід.
DoxyLover

Я вважаю, що ви можете фактично використовувати три штифти, щоб теоретично ввести нескінченну кількість комутаторів, використовуючи деякі регістри зсуву. Також можна використовувати 8 штифтів для введення 256 комутаторів за допомогою мультиплексорів.
Елвін Вонг

Відповіді:


22

Навіщо витрачати кілька аналогових штифтів на два перемикачі кожен, коли ви могли робити будь-яку кількість кнопок на одному аналоговому штирі?

Два способи зробити це. Один - у серії, інший - паралельно.

введіть тут опис зображення

введіть тут опис зображення

Ось так виглядають деякі звукові елементи управління кермом автомобіля. І як працюють деякі старі вбудовані контролери Ipod.

Залежно від резисторів, які ви використовуєте, якщо вам потрібно одночасно натискати кілька кнопок і наскільки чутливим є ваш аналог, ви можете мати на одному штирі всі 10 кнопок.


Дякую, я теж думав про це, але також думав, що, можливо, показання напруги виявляються не такими точно, як мені потрібно, щоб мати можливість покладатися на цей метод. Я спробую це і побачити, як це працює.
MyUserIsThis

Оскільки основи мого аналізу резисторів не дуже міцні, я спробував за допомогою CircuitLab імітувати послідовну схему та скласти таблицю правдивості для вимірювання напруги на аналоговому вхідному штирі. Я виявив, що комбінації B2 + B3 призводять до 2.499В, а комбінації B1 + B4 - 2.498V. З такими близькими цифрами, я думаю, що типовий 10-бітний АЦП не зможе правильно диференціювати комбінації з декількома входами. Що ти сказав ? Звичайно, одна за одною, спрацювала б ідеально - без сумніву. Примітка B1 = кнопка1.
icarus74

Власне, В2 + В4 дає 1,666 В, а В2 + В3 + В4 також дає 1,666 В! Рішення може використовувати різні значення резисторів для R1, R2, R3, R4, а не підтримувати всі 1K. Що сказати ?
icarus74

7
Драбінка 2R / R перетворює кнопки на D / A, і кожен комбінок натискань на кнопки матиме унікальне значення. Я б довіряв йому працювати з кнопками N-3, де N - роздільна здатність АЦП
Скотт Сейдман

1
@ icarus74 так, використання різних значень замість усіх 1k дало б унікальні комбінації. Спробуйте 1k, 2k, 4k, 8k, 16k тощо (або 1k, 4k, 16k тощо, для більш широкого діапазону)
Passerby

10

Це спрацювало б, але кращий спосіб - за допомогою матриці . Це те саме поняття, що і для мультиплексування світлодіодів з матрицею, але з перемикачами.

введіть тут опис зображення

Це матриця 2x2. Корисна матриця більша, тому що при такому розмірі ви не економите жодних штифтів при підключенні вимикачів окремо.

За допомогою матриці 3x3 ви можете отримати 9 вимикачів. Вам потрібно 10, так що ви можете або додати ще один рядок, або ще один стовпець і підтримати 12 перемикачів, або просто поставити 10-й перемикач на власний штифт.

Перевага тут полягає в тому, що ви можете використовувати цифровий IO, який дешевший і, як правило, більш багатий, ніж аналоговий IO. Регістр зсуву є дешевим способом , щоб додати більше цифровий введення - висновок, якщо ви біжите.

Якщо ви хочете ще менше шпильок, ви можете для деякого збільшення складності використовувати шарліплекс . Вам доведеться додати діоди на додаток до перемикачів, і ці діоди, ймовірно, коштують стільки, скільки реєстр змін. Однак якщо вартість не є вашою основною проблемою, то це може мати певну перевагу. За допомогою цього методу ви можете прочитати всі свої перемикачі (фактично до 12) за допомогою чотирьох штифтів.


Лише питання. Чому це краще, якщо мені знадобиться більше шпильок? Таким чином мені знадобляться 6 штифтів для матриці 9x9 плюс ще один штифт для десятої, тоді як у тому, що я зробив, мені знадобиться лише 5 штифтів.
MyUserIsThis

@MyUserIsЦей масштаб краще, оскільки загальна кількість комутаторів зростає. наприклад, матриця 5x5 дозволяє підключити 25 комутаторів до 10 контактів. Як більш загальний коментар, робити речі звичайним способом і тим, хто іншим простіше зрозуміти, що ви зробили; і для того, щоб ви визнали, що роблять схеми інших народів (тому що ви навчилися стандартній реалізації).
Дан вигадує Firelight

@MyUserIsЦе бачить зміни. Перехожий також має хорошу відповідь.
Phil Frost

2

Аналоговий вхід - це правильний підхід, ви повинні мати можливість мати кілька кнопок на ньому. Я також хотів би запропонувати використовувати чіп IO Expander на зразок MCP23017 . Він має 16 штифтів, які можуть бути входами - це виходи, а його керують за допомогою I2C за допомогою двох контактів. Adafruit має для нього бібліотеку Arduino.


2

Так, це здається гарною ідеєю, але все одно я запропоную альтернативу, яка щойно прийшла мені в голову.

Якщо у вас є доступ до логічних воріт, ви можете зіставити багато nбутонів на ceil(log2(n + 1))шпильки через булеву логіку. Наприклад, якщо у вас є 4 кнопки, але лише 2 шпильки, ви можете створити конфігурацію, як це:

Buttons | Pins
----    | --
0123    | 01
----    | --
0001    | 00
0010    | 01
0100    | 10
1000    | 11

Тобто button0пресований повинен мати pin0і pin1низький; button1, pin0низький і pin1високий; button2, pin0високий pin1низький; і button3, pin0і pin1високий.

З цього випливають наступні булеві вирази

pin0 = button2 OR button3
pin1 = button1 OR button3

Таким чином, відображення 4-х кнопок на 2-контактні шрифти можна здійснити лише за допомогою 2-х воріт. Вам знадобиться додатковий штифт і деяка додаткова логіка для вказівки, чи якась кнопка взагалі натиснута.

Звичайно, проблеми будуть, якщо одночасно натискати кілька кнопок.

Крім того, якщо ви все ще будете йти з резисторним підходом, подумайте про використання більших значень на резисторах, окрім того, що 100 Ом з 5 В через резистори порядку 100 ом призведе до струму на порядок 10 с мА, що є добрим надмірно високого. Я здогадуюсь, більш розумні значення становлять 10 к Ом або 47 к Ом.


Дякую за Ваш підхід Я теж думав про щось подібне, але у мене немає логічних воріт і у мене є тони резисторів. І так, зазвичай я використовую для цього резистори 10k, 100 Ом було лише значенням за замовчуванням в редакторі схем. Ще раз дякую за допомогу.
MyUserIsThis

Я думаю, що нарешті я використаю підхід резистора, оскільки мені не доведеться купувати логічні ворота, плюс ваш логічний підхід економить мені лише 1 контактний і мені це не потрібно. Я маю це на увазі, хоча для великих проектів. Дуже дякую.
MyUserIsThis

Добре! Успіхів у вашому проекті!
nijoakim

0

Наступна сторінка може бути корисною:

http://txapuzas.blogspot.co.uk/2010/07/papertecladoanalogico-varios-pulsadores.html

Це написано іспанською мовою, але есенціалі накреслено, я думаю, що це дуже гарна ідея для вас.

На цьому відео ви можете побачити кінцевий результат, ескіз є також на сторінці, інкапсульована функція, щоб полегшити реалізацію ваших проектів

Відео на Youtube: 10 клавіш клавіатури на одному штирі

Ось схема з наведеного вище сайту:

введіть тут опис зображення

введіть тут опис зображення


2
Будь ласка, додайте резюме того, що містить посилання, якщо воно коли-небудь вмирає, особливо якщо це є іспанською мовою, і це веб-сайт з англійської мови.
PeterJ

Вибачте, може скластися ситуація, що в Іспанії нормально посилатися на англійську публікацію ... Але посилання дуже цікаве, говорить про те, як побудувати клавіатуру з 10 клавіш, використовуючи лише один контактний крок за кроком, опис фотографії, діаграми зробити дошку та зображення, щоб зробити кришку кнопок. Також код для управління клавіатурою, легко зрозумілий. Ніцца розвинене, я думаю.
JohnnyDeauville

Це не стільки лише іспанська сторона речей, я погоджуюся, діаграма чітка, добре виглядає, і я можу розробити те, про що йдеться лише на основі цього. Але Stack Exchange відлякує посилання лише на відповіді, оскільки вони не корисні, якщо посилання відмирає, уявіть, чи блогу буде закрито / видалено завтра, наскільки корисною буде відповідь. Можливо, ви могли б включити схему та речення або два про це та просто залишити посилання як орієнтир для отримання додаткової інформації.
PeterJ

Я новичок на цьому форумі, як я можу зробити так, щоб ви мені сказали? Якийсь розділ у спеціальному ...? Дякуємо за ваш час
JohnnyDeauville

Я щойно включив схему та посилання, звідки вона походить, але, можливо, варто також перекласти трохи більше сторінки, щоб дати деякий контекст, як вона працює і якими будуть показання АЦП.
PeterJ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.