중급 예제

약간은 익숙하시거나 익숙해지셨나요? 그렇다면 조금더 깊이 다뤄볼까요?

정전식 터치 모듈(MPR 121)

2017-02-06 10:20:16

안녕하세요! 코코아팹입니다. 

 

이번 포스팅에서는 Adafruit 사에서 개발된 정전식 터치 모듈인 MPR 121 터치 모듈에 대해 알아보도록 하겠습니다.

 

 

 

개요

 

모듈을 사용하기 전에 정전 방식(정전식 감응) 개념에 대해 살펴보도록 하겠습니다. 

 

 

 

정전식 감응

(출처 : 위키 백과)

 

전자공학에서 정전(靜電)식 감응(capacitive sensing) 기술은 정전용량 커플링 효과로 근접, 변위, 습도, 유량, 가속도 등에 의해 센서의 정전용량 값의 변화를 감지하는 장치를 의미한다.

 

 

방식 |

 

셀프 방식 : 

센서 패턴 자체의 정전 용량 값과 손가락 등의 감지 대상에 의한 부하 정전 용량의 합으로 표현되는 정전 용량 값을 감지하는 것.

 

뮤추얼 방식 : 

두 개의 센서 사이에 형성된 상호 정전 용량 값이 감지 대상에 의해 줄어드는 양을 감지하는 것.

 

 

 

 

앞으로 실습해 볼 MPR121 모듈의 경우도 위와 같이 정전 방식을 통해 외부 입력을 인식할 수 있는 모듈 중 하나입니다. 

자 그럼 MPR121에 대해 살펴보도록 하겠습니다.

 

 

<Adafruit MPR121 12 Key Capacitive Touch Sensor Breakout Board / 출처 : Adafruit>

 

 

 

우리가 실습해 볼 Adafruit MPR121 12 Key Capacitive Touch Sensor Breakout Board 보드는 MPR121 chip이 내장된 모듈형 보드입니다.

MPR 121의 주요 특징 및 사양은 아래와 같습니다. 

 

- Micro controller와 연결해 간편히 터치와 관련된 프로젝트를 제작하기 용이하다.

- MPR121 chip의 경우 최대 12개의 터치 패널을 통해 터치 인식이 가능하다.

- MPR121은 I2C를 지원하며, 4개의 I2C Adress 중 하나로 선택이 가능하다. 즉 총 48개의 터치 패널(모듈 4개)을 2개의 I2C 버스를 통해 사용할 수 있다.

- Analog Input을 통해 정전식 센싱을 하는 것보다 쉽고 정확하게 측정이 가능하다.

- MPR 121 chip의 경우 3V로 동작하나, 모듈 자체에 레귤레이터가 장착되어 있기 때문에 3~5V로 동작 가능하다.

 

중요한 사항만 되짚어보자면, '아두이노와 함께 사용하기 용이하며, 12개의 터치 인식이 가능하고 아두이노의 5V를 연결해서 사용하면 된다' 정도로 이해하시면 될 것 같습니다.

 

 

 

<Adafruit MPR121 12 Key Capacitive Touch Sensor Breakout Board / 출처 : Adafruit>

 

 

 

7개의 신호핀에는 소켓을 납땜하여 브레드보드 끼워서 사용할 수 있으며, 0번부터 11번 총 12개의 터치 패널에는 Wire를 납땜하여 사용하면 됩니다.

* 개인적으로 테스트해본결과 터치 패널에 소켓을 납땜 후 브레드보드 끼워 사용할 경우 터치 인식이 제대로 이뤄지지 않습니다.

 

 

<Adafruit MPR121 12 Key Capacitive Touch Sensor Breakout Board / 출처 : Adafruit>

 

 

위 모듈의 경우 가로 1.3인치(3.302cm), 세로 0.75인치(1.905cm)의 작은 크기를 가지고 있으며, 국내 전자 부품 쇼핑몰에서 구매할 수 있으며, 대략적으로 9000원 때에 구매하실 수 있습니다.

 

 

 

 

 

 

 

 

 

관련 튜토리얼

 

코코아팹 튜토리얼 중 터치 모듈을 사용하지 않고, 저항과 점퍼 와이어만으로 터치 센서를 구현하는 방법에 대해 설명되어 있는 튜토리얼입니다. 

다만 모듈을 사용했을 때와 비교해 정확성은 다소 떨어지며, 터치 패널 개수에 제한이 있습니다.

 

- Capacitive Touch Sensor(정전 용량 터치 센서) 구현하기

 

 

 

 

 

 

 

 

부품 목록

 

MPR121 튜토리얼에 필요한 부품 목록들입니다. 

 

NO 부품명 수량 상세설명
1 오렌지보드 1 아두이노 UNO 호환
2 MPR 121 1 Breakout Board 
3 브레드보드 1 half 사이즈
4 점퍼케이블 16개 이상 Male To Male 타입

 

부품명 오렌지보드 MPR121 브레드보드 점퍼케이블
부품 사진

 

 

 

 

 

 

 

 

 

 

하드웨어 연결

오렌지보드와 연결하는 연결 방법입니다. 

하단 그림을 참고해 그대로 오렌지보드와 연결을 진행해주시면 됩니다.

*점퍼 케이블의 색상은 무관합니다.

 

 

 

 

핀 아웃(Pinout)

Vin 3.3V or 5V
3VO

3.3V OUTPUT 

모듈 레귤레이터를 통해 나오는 3.3V OUTPUT입니다.

GND GND
SCL I2C Clock 핀 / 아두이노의 경우 analog5(A5)에 연결
SDA I2C Data 핀 / 아두이노의 경우 analog4(A4)에 연결

* ADDR : I2C Adress 핀, default Adress는 0x5A이며, 3VO, SDA, SCL에 연결하여 각 각 0x5B~D까지 연결할 수 있습니다. 

 

 

 

 

브레드보드 레이아웃

아래 사진과 같이 모듈에 핀 소켓과 점퍼케이블 납땜을 진행해주시면 됩니다.

납땜 방법에 대해서는 아래 링크를 참고하시면 됩니다.

 

- 납땜 기초 알아보기

 

 

* 위 이미지를 클릭하시면 모듈에 핀소켓을 납땜하는 방법에 대한 링크로 이동합니다. 

 

 

 

 

 

 

 

회로도(스키메틱)

 

 

 

 

 

 

 

 

 

 

소프트웨어 코딩

 

MPR121 모듈을 통해 터치 인식을 감지하기 위해서는 아래 라이브러리를 다운받아야합니다. 

아래 링크를 통해 라이브러리를 다운로드할 수 있습니다.

- MPR121 라이브러리 다운로드

 

*아직 어떻게 라이브러리를 추가하는지 모르시는 분들께서는 아래 링크를 통해 라이브러리 추가 방법에 대해 살펴보실 수 있습니다. 

- 라이브러리 사용(1)

- 라이브러리 사용(2)

 

 

라이브러리 다운로드 및 등록이 완료되었다면, 예제를 통해 직접 터치 인식을 테스트해보도록 하겠습니다.

 

 

 

 

[파일] - [예제] - [Adafruit MPR121] - [MPR121test]를 클릭한 후 MPR121test를 오렌지보드에 연결해줍니다.

 

 

 

 

 

 

시리얼 모니터를 실행한 후 아래 그림과 같은 문구가 출력되면 오렌지보드 쪽에서 정상적으로 MPR121 모듈을 인식한 것 입니다. 

해당 문구가 출력되지 않을 경우 오렌지보드와 MRP121 모듈의 연결을 다시 한 번 검토해보아야 합니다.

 

 

 

 

 

터치 패널과 납땜되어 있는 점퍼케이블을 터치하면 아래 화면과 같이 Touch / Release를 인식하는 것을 확인할 수 있습니다.

 

 

 

 

 

 

예제 소스 코드 중 아래 그림과 같이 return 코드 앞에 주석을 붙여주면 MPR121 모듈을 통해 인식되는 센서 값도 시리얼 모니터를 통해 확인할 수 있습니다.

*주석 처리한 후 소스 코드를 오렌지보드에 재 업로드 해줘야 합니다.

 

 

 

예제 실습을 해보았으니 라이브러리에서 사용되는 함수에 대한 레퍼런스를 간략히 살펴보도록 하겠습니다. 

 

 

Adafruit_MPR121 cap = Adafruit_MPR121(); 

MPR121 모듈을 사용하기 위한 객체 선언 부분입니다. 이 소스 코드에서 선언한 MPR121 객체의 이름은 'cap'입니다.

 

 

cap.begin(0x5A);

오렌지보드와 통신 선언(I2C)을 해주는 부분입니다. begin 안에 들어가는 파라미터는 I2C Adress입니다. 

 

 

if(cap.touched() & (1 << 인식할 터치 패널의 개수)){ do something }

터치를 인식했을 때 실행할 구문 문법(조건문)입니다.

cap.touched() 뒤 & (인식할 터치 패널의 개수)를 입력해주시면 됩니다. 만약 12개의 터치 패널을 모두 인식하고 싶다면 if문 안에 cap.touched() & (1 << 12) 라고 넣어주시면 되겠죠?

 

 

 

if(!cap.touched() & (1 << 인식할 터치 패널의 개수)){ do something }

터치를 인식하지 않았을  때 실행할 구문 문법(조건문)입니다.

파라미터는 위와 동일합니다.

 

 

filteredData(sensorNum);

baselineData(sensorNum);

위 함수를 통해 Raw 데이터를 추출할 수 있습니다.

 

 

setThreshholds(unit8_t touch, unit8_t release)

위 함수를 통해 Touch 와 release의 감도(대비)를 설정할 수 있습니다.

 

 

 

 

 

 

 

 

마치며... 

 

이상으로 MPR121 12 채널 터치 모듈에 대해서 간단히 살펴보았습니다.

 

이미 우리는 일상 생활에서 touch는 상당히 익숙하고 많이 사용하고 있는 인터렉션입니다. 

그만큼 touch라는 행동이 가지고 있는 친숙함을 이용해 톡 톡 튀는 프로젝트를 해볼 수 있다고 생각합니다.

 

레오나르도에 연결하여 사용한다면 터치를 인식했을 때 키보드 제어를 통해 직접 makey makey 보드를 구현 해볼 수도 있을 것 같습니다.

감사합니다!

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!

MPR121, 아두이노, 오렌지보드

eeee 2018-11-13 14:47:33

아두이노 우노로했을때 cap.begin(0x5A); 선언도 이걸로 똑같이 해도 되나요?

kocoafab 2019-01-29 16:48:31

네 위에서 사용한 오렌지보드 코드들은 모두 아두이노 우노에서 호환이 가능합니다.

그대로 사용하시면 됩니다.