같은 핀에 하나 이상의 버튼


12

나는 프로젝트를하고 Arduino를 프로토 타입으로 사용하고 있으며 10 개의 푸시 버튼 (더 많은 것들과 함께)을 사용해야하며 핀이 충분하지 않습니다.

내가 생각할 수있는 한 가지 해결책은 아날로그 핀을 사용하고 각 핀을 두 개의 푸시 버튼에 사용하는 것입니다.

개략도

이 회로 시뮬레이션CircuitLab을 사용하여 작성된 회로도

그렇게하면 핀 A0을 읽을 수 있으며 전압이 5V인지 또는 절반인지 확인하여 푸시되는 것을 알 수 있습니다.

이것이 좋은 생각입니까? 다른 푸시 버튼을 동시에 누르지 마십시오. 이것은 제가 생각할 수있는 유일한 문제입니다.

더 좋은 방법이 있습니까?


몇 개의 핀을 사용하려고합니까?
W5VO

W5VO I 10 개 버튼 (22)을 필요 @ 기판은 각각의 아날로그 핀 개의 버튼 I은 5 아날로그 핀을 필요로하고 기판을 보유 ... 18 갖는 제
MyUserIsThis

1
참고로 많은 자동차 제조업체는 오디오 시스템의 스티어링 휠 장착 컨트롤에 동일한 접근 방식을 사용합니다. 각각 고유 한 저항이있는 8 개의 버튼이 있습니다. 이를 통해 휠에서 오디오 헤드로 단일 와이어 (또는 깔끔한 리턴을 보장하는 와이어 쌍)를 실행할 수 있습니다. 완벽하게 좋은 접근 방법입니다.
DoxyLover

실제로 세 개의 핀을 사용하여 이론적으로 일부 시프트 레지스터를 사용하여 무한한 수의 스위치를 입력 할 수 있다고 생각합니다. 멀티플렉서를 사용하여 256 개의 스위치를 입력하기 위해 8 핀을 사용할 수도 있습니다.
Alvin Wong

답변:


22

단일 아날로그 핀에서 여러 개의 버튼을 사용할 수있을 때 각각 두 개의 스위치에 대해 여러 개의 아날로그 핀을 낭비하는 이유는 무엇입니까?

두 가지 방법이 있습니다. 하나는 직렬이고 다른 하나는 병렬입니다.

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

이것이 일부 자동차 스티어링 휠 오디오 컨트롤입니다. 구형 ipod 인라인 컨트롤러의 작동 방식

사용하는 저항에 따라 동시에 여러 버튼을 눌렀을 필요가 있고 아날로그가 얼마나 민감한 지에 대해 단일 핀에 10 개의 버튼이 모두있을 수 있습니다.


고맙습니다. 나는 이것에 대해서도 생각했지만 전압 측정 값 이이 방법에 의존하기 위해 필요한만큼 정확하지 않을 수도 있다고 생각했습니다. 나는 이것을 시도하고 그것이 어떻게 작동하는지 볼 것이다.
MyUserIsThis이

저항 네트워크 분석의 기본 사항이 확실하지 않기 때문에 CircuitLab을 사용하여 직렬 회로를 시뮬레이션하고 아날로그 입력 핀의 전압 측정을위한 진리표를 작성했습니다. B2 + B3 조합은 2.499V가되고 B1 + B4 조합은 2.498V가됩니다. 이러한 수치를 보면 전형적인 10 비트 ADC가 다중 입력 조합을 정확하게 구별 할 수 없을 것이라고 생각합니다. 당신은 무엇을 말합니까? 물론 한 번에 하나의 키로 완벽하게 작동합니다. 참고 B1 = Button1.
icarus74

실제로 B2 + B4는 1.666V를 제공하는 반면 B2 + B3 + B4는 1.666V를 제공합니다! 이 솔루션은 R1, R2, R3, R4에 대해 서로 다른 저항 값을 사용하고 1K를 모두 유지하지 않을 수 있습니다. 뭐라고?
icarus74

7
기존의 2R / R 래더는 버튼을 D / A로 바꾸고 버튼 누름의 모든 콤보는 고유 한 값을 갖습니다. 나는 N-3 버튼으로 작동한다고 믿습니다. 여기서 N은 ADC 해상도입니다
Scott Seidman

1
@ icarus74 예, 모두 1k 대신 다른 값을 사용하면 고유 한 조합이 제공됩니다. 1k, 2k, 4k, 8k, 16k 등을 시도해보십시오 (또는 더 넓은 범위의 경우 1k, 4k, 16k 등)
Passerby

10

작동하지만 매트릭스를 사용하는 것이 더 좋습니다 . 이것은 매트릭스가 있지만 스위치가있는 멀티플렉싱 LED와 같은 개념입니다.

여기에 이미지 설명을 입력하십시오

이것은 2x2 행렬입니다. 이 크기에서는 스위치를 개별적으로 연결하는 데 핀을 저장하지 않기 때문에 유용한 매트릭스가 더 큽니다.

3x3 매트릭스를 사용하면 9 개의 스위치를 얻을 수 있습니다. 10 개가 필요하므로 하나 이상의 행 또는 하나 이상의 열을 추가하고 12 개의 스위치를 지원하거나 10 번째 스위치를 자체 핀에 놓을 수 있습니다.

여기서 장점은 디지털 IO를 사용할 수 있다는 것입니다. 디지털 IO는 아날로그 IO보다 저렴하고 일반적으로 더 많습니다. 시프트 레지스터는 당신이 밖으로 실행하는 경우, 더 많은 디지털 IO를 추가 할 수있는 저렴한 방법입니다.

더 적은 수의 핀을 원한다면 복잡성을 증가시키기 위해 charlieplexing을 사용할 수 있습니다 . 스위치 외에 다이오드를 추가해야하며 이러한 다이오드는 시프트 레지스터만큼 비용이 많이 듭니다. 그러나 비용이 주요 관심사가 아닌 경우 이점이있을 수 있습니다. 이 방법을 사용하면 4 개의 핀으로 모든 스위치 (실제로는 최대 12 개)를 읽을 수 있습니다.


그냥 질문입니다. 더 많은 핀이 필요할 경우 왜 더 좋은가요? 이렇게하면 9x9 매트릭스에는 6 개의 핀과 10 번째에는 1 개의 핀이 더 필요하지만 내가 만든 것에는 5 개의 핀 만 있으면됩니다.
MyUserIsThis7

@MyUserIs 이것은 총 스위치 수가 증가함에 따라 더 잘 확장됩니다. 예를 들어 5x5 매트릭스를 사용하면 25 개의 스위치를 10 핀에 연결할 수 있습니다. 보다 일반적인 의견으로, 기존 방식으로 작업을 수행하면 다른 사람이 자신이 한 일을 더 쉽게 이해할 수 있습니다. 표준 구현에 대해 스스로를 교육했기 때문에 다른 사람들의 회로가하는 일을 인식 할 수 있습니다.
Dan 님이 Firelight에 의해 조사 중입니다.

@MyUserIs 편집 내용을 봅니다. 통행인도 좋은 대답을합니다.
Phil Frost

2

아날로그 입력은 유효한 접근 방식이므로 여러 개의 버튼을 사용할 수 있습니다. 또한 MCP23017 과 같은 IO 확장기 칩을 사용하는 것이 좋습니다 . 입력이 출력 될 수있는 16 개의 핀이 있으며 2 개의 핀을 사용하여 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, pin0pin1높은.

이것으로부터 다음과 같은 부울식이 생길 것입니다

pin0 = button2 OR button3
pin1 = button1 OR button3

따라서 2 개의 OR 게이트만으로 4 개의 버튼을 2 개의 핀으로 매핑 할 수 있습니다. 그러나 버튼을 눌렀는지 여부를 나타 내기 위해 추가 핀과 추가 로직이 필요합니다.

물론 여러 개의 버튼을 동시에 누르면 여전히 문제가 발생합니다.

또한 저항 접근 방식을 계속 사용하는 경우 5V부터 100Ω 이하의 저항을 통한 100Ω이 아닌 100Ω 이외의 저항에 더 큰 값을 사용하는 것을 고려하십시오. 불필요하게 높은 더 합리적인 값은 10k Ohm 또는 47k Ohm 일 것입니다.


접근 해 주셔서 감사합니다. 나는 또한 그런 것에 대해 생각했지만 논리 게이트가 없으며 많은 저항이 있습니다. 그렇습니다. 나는 보통 이것을 위해 10k 저항을 사용합니다 .100 옴은 회로 편집기의 기본값이었습니다. 도와 주셔서 감사합니다.
MyUserIsThis7

나는 논리 게이트를 구입할 필요가 없기 때문에 저항 접근법을 마침내 사용할 것이라고 생각한다. 더 큰 프로젝트를 위해 이것을 염두에 두겠습니다. 대단히 감사합니다.
MyUserIsThis 님은

괜찮아! 프로젝트와 함께 행운을 빕니다!
nijoakim

0

다음 페이지가 유용 할 수 있습니다.

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

스페인어로 작성되었지만 필수 사항이 다이어그램으로 표시되어있어 매우 좋습니다.

이 비디오에서 최종 결과를 볼 수 있습니다. 스케치는 페이지에 있으며 캡슐화 된 기능으로 프로젝트에서 쉽게 구현할 수 있습니다.

유튜브 비디오 : 단일 핀에 10 개의 키 키보드

위 사이트의 회로도는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오


2
링크가 죽었을 때, 특히 스페인어로되어 있고 영어 사이트 인 경우 링크에 포함 된 내용에 대한 요약을 추가하십시오.
PeterJ

죄송합니다, 스페인에서 영어 간행물을 언급하는 것이 정상적인 상황 일 수 있습니다 ... 그러나 매우 흥미로운 링크는 단계별로 사진 설명과 함께 하나의 핀을 사용하여 10 개의 키 키보드를 구성하는 방법을 보여줍니다. 버튼을 덮을 보드와 이미지를 만들 수 있습니다. 키보드를 관리하는 코드도 쉽게 이해할 수 있습니다. 내 생각에는 좋았다.
JohnnyDeauville

그것은 스페인의 사물에 국한된 것이 아니며, 다이어그램이 명확하고 훌륭해 보인다는 것에 동의합니다. 그러나 Stack Exchange는 링크가 죽으면 유용하지 않기 때문에 링크 만 답변하지 않습니다. 내일 해당 블로그가 닫히거나 삭제되어 얼마나 유용한 지 상상해보십시오. 어쩌면 회로도와 그것에 대한 한두 문장을 포함시키고 추가 정보를 위해 링크를 참조로 남겨 둘 수 있습니다.
PeterJ

저는이 포럼에서 신인입니다. 어떻게 말해 줄 수 있습니까? 특별 한 섹션 ...? 시간 내 주셔서 감사합니다
JohnnyDeauville

방금 회로도와 참조를 포함 시켰지만 작동 방식과 ADC 판독 값에 대한 컨텍스트를 제공하기 위해 약간 더 많은 페이지를 번역 할 가치가 있습니다.
PeterJ
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.