[아두이노] 아두이노에서 여러개의 스위치를 1개의 analog input핀으로 검사하기

아두이노에서 여러개의 스위치를 1개의 analog input핀으로 검사하기

아두이노를 사용하다 보면 Digital I/O핀이 모자라게 되는 경우가 있다. 이럴 때 1개의 analog input 핀으로 여러개의 스위치 입력을 받을 수 있다.
이 방식을 이해하려면 가장 먼저 이해해야 하는 것이 voltage divider 회로이다. 


695BC4F3-710F-4031-9845-BC9B3B85BE63.png


Vin(여기서는 +5V)과 GND 사이에 두개의 저항이 있으면 두 저항 사이의 전압은 두 저항값의 비율로 결정되게 된다.

62DEA1DD-4DE2-4FC0-B6B6-4C6785759B00.png


R1=1K, R2=1K인 경우

DDF784ED-CE98-4833-8A88-E6918CBA16DB.png



R1=1K, R2=4K인 경우
9A0FACE0-3ACE-436A-85EF-3555740F97A3.png


R1=4K, R2=1K인 경우
3EFE5EC2-6F71-418B-BFB0-908E88579BAE.png


그러므로 이 성질을 이용해 여러개의 스위치를 연결하는데 각각의 스위치에 저항값이 다른 저항을 붙여주면 각 스위치를 누를 때 마다 출력되는 전압값이 달라지게 되므로 그 전압값을 읽어보면 어떤 스위치가 눌렸는지 판단이 가능해진다.

5D0E12E4-0726-49EB-80C5-B6A038F785BB.jpg


만일 S1이 눌리면 R1=82K, R2=100K가 되고, S5가 눌리면 R1=10K, R2=100K가 된다. 즉 각각의 스위치가 눌린 경우 출력전압과 그에 해당하는 ADC 값을 계산하면 다음과 같다. (아래 표는 Vin이 3.3V일 때의 계산결과임. 하지만 Vin이 5V이건 3.3V이건 ADC value는 변하지 않음)

BE76B573-9ED7-476F-A7E0-40E0BAA37B5E.png



그러므로 analogRead()로 읽은 값이 대략 910~950 범위 내의 값이면 S5가 눌렸다고 판단하고, 820~860 범위 내의 값이면 S4가 눌렸다고 판단하면 된다. 

또한 각각의 저항값을 잘 결정해주면 동시에 2개의 버튼이 눌렸을 때도 어떤 버튼이 눌렸는지 판단할 수 있다.
0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

임베디드 보드

번호 제목 글쓴이 날짜 조회수
58 아두이노 [강좌] 50. 와이파이 통신 (4) - WebServer 예제 icon 양재동메이커 03-21 19,612
57 아두이노 [강좌] 49. 와이파이 통신 (3) - WebClient 예제 icon 양재동메이커 03-21 23,268
56 아두이노 [강좌] 48. 와이파이 통신 (2) - 커맨드 모드 사용하기 (WiFly 쉴드) icon 양재동메이커 03-20 18,220
55 아두이노 [강좌] 47. 와이파이 통신 (1) - 와이파이란 무엇인가 icon 양재동메이커 03-20 23,066
54 아두이노 [강좌] 46. 블루투스 통신 (5) - 프로토콜 만들기 (2) icon 양재동메이커 03-20 18,106
53 아두이노 [강좌] 45. 블루투스 통신 (4) - 프로토콜 만들기 (1) icon 양재동메이커 03-20 19,429
52 아두이노 [강좌] 44. 블루투스 통신 (3) - RN42 모듈에서 직접 접속하기 icon 양재동메이커 03-20 16,335
51 아두이노 [강좌] 43. 블루투스 통신 (2) - 스마트폰과 통신하기 icon 양재동메이커 03-20 18,584
50 아두이노 [강좌] 42. 블루투스 통신 (1) - RN42 블루투스 모듈 실습하기 icon 양재동메이커 03-20 20,798
49 아두이노 [강좌] 41. 서보 모터 (2) - Servo 함수 알아보기 icon 양재동메이커 03-20 22,029
48 아두이노 [아두이노 강좌] 40. 서보 모터 (1) - 서보 모터 동작 방식 icon 양재동메이커 03-20 22,637
47 아두이노 [강좌] 39. 스텝 모터 (3) - 모터 드라이버 EasyDriver(A3967) 사용하기 icon 양재동메이커 03-20 18,005
46 아두이노 [강좌] 38. 스텝 모터 (2) - Stepper 함수 알아보기 icon 양재동메이커 03-20 22,151
45 아두이노 [강좌] 37. 스텝 모터 (1) - 스텝 모터 동작 방식 icon 양재동메이커 03-20 18,999
44 아두이노 [강좌] 36. DC 모터 (2) - DC 모터 드라이버 실습하기 (TB6612FNG) icon 양재동메이커 03-20 18,090
43 아두이노 [강좌] 35. DC 모터 (1) - DC 모터 동작 방식 icon 양재동메이커 03-20 20,927
42 아두이노 [강좌] 34. SPI 통신 (3) - 기압 센서(MPL115A1) 실습하기 icon 양재동메이커 03-20 17,328
41 아두이노 [강좌] 33. SPI 통신 (2) – SPI 함수 알아보기 icon 양재동메이커 03-20 25,796
40 아두이노 [강좌] 32. SPI 통신 (1) - SPI 통신이란 무엇인가 icon 양재동메이커 03-20 30,125
39 아두이노 [강좌] 31. I2C 통신 (3) - 온도 센서(TMP102) 실습하기 icon 양재동메이커 03-20 25,078