본문 바로가기
Arduino(아두이노) 활용 강좌

Arduino Uno 로 MRP121 정전식 근접 터시센서 모듈과 스피커를 사용해 전자 피아노 만들어 보기

by 오마이엔지니어 2017. 9. 9.
반응형

Arduino Uno 로 MRP121 정전식 근접 터시센서 모듈을 사용해서 개별전극 터치시 시리얼 모니터로 

출력값이 변하는것을 확인해 보고 이를 활용해스피커를 사용해 전자 피아노를 만들어 보는 프로젝트 입니다


MPR121은 프리스케일의 MPR121QR2 칩 MPR121_Datasheet.pdf 기반의

정전 용량형 터치 센서(Proximity Capacitive Touch Sensor) 모듈입니다

Capacitive(Capacitance) 란 의미는 전하를 저장하는 물체라는 뜻으로 센서가 일정량의 전하를 저장하고 있다가 외부 접촉에 의해 이 값이 바뀔 경우 터치를 인식하는 원리를 말합니다

MPR121 터치센서 모듈은 총 12개의 개별전극(electrods)으로 구성되어 있으며 각각의 개별전극으로 터치를 인식할 수 있습니다

인식된 결과는 I2C 통신으로 읽어올 수 있으며, IRQ 인터럽트 핀을 지원하기 때문에 터치 상태가 바뀔 때 알려줄 수도 있습니다

 

 

 

 

 

<MPR121 정전식 근접 터치센서 모듈 이미지>

 

 

 

 



사용된 부품

Arduino Uno R3 (Italy)

브래드 보드

MPR121 정정식 근접 터치센서 모듈

점퍼케이블
스피커(8Ohm 1W) 또는 부저모듈

 


구성 배선도-개별전극 터치시 시리얼 모니터로 출력값 변화 확인해 보기

 


구성 배선도-스피커를 사용해 전자 피아노 만들어 보기


사용된 예제소스 

example code.txt

MPR121.zip


사용된 라이브러리

Adafruit_MPR121-master.zip


Adafruit_MPR121 라이브러리를 첨부하였습니다
라이브러리 추가 방법은 Arduino IDE 설치하기 포스팅을 참조해 주세요

주의사항

라이브러리는 Sparkfun 의 라이브러리는 제대로 동작을 하지 않아서 Adafruit 의 라이브러리를 사용하였습니다
라이브러리를 추가한 후 첨부된 example code.txt 파일로 붙여넣기 하거나 라이브러리 폴더내의 example 폴더내의 MPR121test.ino 
를 불러와서 테스트 해도 무방합니다
전자 피아노 만들어 보기는 위에 첨부된 MPR121 압축파일을 풀어서 dokunmatik_buzzer_pianov2.ino 를 불러와서
테스트 하면 됩니다

최대4개까지 여러개의 MPR121 모듈을 연결하여 사용하는 방법도 있는것 같습니다
이를 위해서는 MPR121 모듈의 I2C 주소를 모두 다르게 설정해 주어야 하는데요, MPR121 모듈은 기본 I2C 주소가 0X5A 로 설정되어 있습니다
ADD(Address) 어드레스 핀을 VSS, VDD, SDA, SCL 핀과 연결하면 I2C Address 값이 0x5A, 0x5B, 0x5C, 0x5D 로 바뀝니다
이와 관련한 자세한 내용은 데이터시트 MPR121_Datasheet.pdf 의 PIN DESCRIPTION 부분을 참조 하도록 합시다

개별전극 터치시 시리얼 모니터로 출력값 변화를 확인해 보는 테스트를 할때 전류가 부족하거나 동작전압이 불안정 하면

통신이 먹통이 되는 현상이 발생합니다 (이 경우 리셋버튼을 눌러주면 통신이 다시 원활해 집니다)
전자 피아노 만들어 보기 테스트를 할때는 인가되는 전원에 따라 스피커 소리가 제대로 나오지 않을수 있습니다
전원을 다시 연결하거나 다른 컴퓨터에 연결해서 몇번 시도해 보면 제대로 동작할수 있습니다
(피에조 부저모듈을 사용해서도 테스트가 가능합니다 동영상은 편의상 8Ohm 1W 스피커로 연결해서 테스트 하였습니다)

#include <Wire.h>
#include "Adafruit_MPR121.h"
위 2개의 라이브러리를 사용합니다

void loop() {
  // Get the currently touched pads
  currtouched = cap.touched();
  
  for (uint8_t i=0; i<12; i++) {
    // it if *is* touched and *wasnt* touched before, alert!
    if ((currtouched & _BV(i)) && !(lasttouched & _BV(i)) ) {
      Serial.print(i); Serial.println(" touched");
    }
    // if it *was* touched and now *isnt*, alert!
    if (!(currtouched & _BV(i)) && (lasttouched & _BV(i)) ) {
      Serial.print(i); Serial.println(" released");
    }
  }

0~11번까지 12개의 개별전극은 터치 감지시 touched 가 출력되고 미감지시 released 가 출력됩니다


프로젝트 동영상 <개별전극 터치시 시리얼 모니터로 출력값 변화 확인해 보기>


프로젝트 동영상 <스피커를 사용해 전자 피아노 만들어 보기>

동영상은 소리가 작게 촬영이 되어서 보실때 볼륨 크기를 최대로 하고 보세요

 
MPR121_Datasheet.pdf
1.08MB
 
Adafruit_MPR121-master.zip
0.01MB
 
example code.txt
0.0MB
 
MPR121.zip
0.0MB
반응형

댓글