아두이노2016. 6. 22. 22:46

16개의 숫자가 박힌 터치 키패드를 구했습니다. 이전에 리뷰한 터치 센서와 같은 원리인 정전식 터치 키패드 입니다. 다만 다른점은 터치 가능한 부위가 16개 라는 점이 다르네요. 키가 많으므로 아두이노의 입력장치로 응용이 가능한 모듈 입니다. 예를 들면 서보 모터 등과 연동하여 비밀번호가 맞아야만 열리는 금고 라던가 도어락 등을 만들 수도 있겠습니다. 아무튼 숫자의 입력이 가능하니 이를 이용하려는 장치 이용 시 사용할 수 있을 것 같습니다. 그럼 간단하게 사용법을 알아보겠습니다.


16자리 터치 키패드 TTS229 의 모습 입니다. 제일 상단에 VCC(2.4V ~ 5.5V), GND, SCL(Serial Clock In), SDO(Serial Data Out) 그리고 OUT1~OUT8의 8개 OUT 단자가 있습니다. 그리고 점퍼 설정으로 키패드의 기능을 조정할 수 있는 8쌍의 옵션핀(Option Pin) 이 있습니다.


옵션핀은 위와 같이 이름을 붙여 줍니다. 윗 쪽의 4쌍의 그룹이 P2, 아래의 4쌍이 P1 이고 각각 쌍(상/하)의 이름은 위와 같이 TP0 ~ TP7 까지 이름이 붙습니다. 위에 빨간색으로 칠한 것 처럼 상하의 핀을 쇼트 시키거나 쇼트시키지 않아서 옵션을 켜거나 끕니다. 


오션핀의 상세한 기능은 아래의 표를 참조하면 됩니다. 표를 보면 0 이 쇼트된 상태를 뜻하고 1이 쇼트되지 않은 상태를 뜻 합니다. 아무것도 쇼트 시키지 않으면 Default 상태인 것이죠.

출처: http://hobbycomponents.com/

 

■ 연결

테스트를 위해서 연결을 해 봅니다. 12개의 핀이 있지만 번호 입력을 받기 위해서 VCC, GND, SCL, SDO 의 4개의 핀만 연결하면 됩니다.


 16 Key Capacitive Keypad

 Arduino Uno

 VCC

 5V (3.3V도 가능)

 GND

 GND

 SCL

 D8

 SDO

 D9




■ 소스1

터치키패드를 1~8 까지만 이용하는 소스 입니다. 옵션핀은 아무것도 쇼트 시키지 않은 상태로 연결하면 됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
 
/* Define the digital pins used for the clock and data */
#define SCL_PIN 8
#define SDO_PIN 9
 
/* Used to store the key state */
byte Key;
 
void setup()
{
  /* Initialise the serial interface */
  Serial.begin(9600);
  /* Configure the clock and data pins */
  pinMode(SCL_PIN, OUTPUT);  
  pinMode(SDO_PIN, INPUT); 
}
 
 
/* Main program */
void loop()
{
  /* Read the current state of the keypad */
  Key = Read_Keypad();
  
  /* If a key has been pressed output it to the serial port */
  if (Key)
    Serial.println(Key); 
 
  /* Wait a little before reading again 
     so not to flood the serial port*/
  delay(100);
}
 
 
/* Read the state of the keypad */
byte Read_Keypad(void)
{
  byte Count;
  byte Key_State = 0;
 
  /* Pulse the clock pin 8 times (one for each key of the keypad) 
     and read the state of the data pin on each pulse */
  for(Count = 1; Count <= 8; Count++)
  {
    digitalWrite(SCL_PIN, LOW); 
    
    /* If the data pin is low (active low mode) then store the 
       current key number */
    if (!digitalRead(SDO_PIN))
      Key_State = Count; 
    
    digitalWrite(SCL_PIN, HIGH);
  }  
  
  return Key_State; 
}
cs


1 부터 8까지 숫자를 터치하면서 시리얼모니터를 관찰해 보았습니다. 계속 터치하면 중복 입력이 됩니다. 9~16의 숫자는 터치를 해도 입력이 되지 않습니다.


 

■ 소스2

터치 키패드를 1~16까지 모두 입력받는 소스 입니다. 이렇게 하기 위해서는 위의 표를 참고하여 아래의 사진에 표시된 빨간 표시와 같이 옵션핀을 쇼트(Link) 시켜 주어야 합니다. 숫-숫 케이블을 이용하여 TP2를 쇼트 시켜 주었습니다.


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
 
/* Define the digital pins used for the clock and data */
#define SCL_PIN 8
#define SDO_PIN 9
 
/* Used to store the key state */
byte Key;
 
void setup()
{
  /* Initialise the serial interface */
  Serial.begin(9600);
  /* Configure the clock and data pins */
  pinMode(SCL_PIN, OUTPUT);  
  pinMode(SDO_PIN, INPUT); 
}
 
 
/* Main program */
void loop()
{
  /* Read the current state of the keypad */
  Key = Read_Keypad();
  
  /* If a key has been pressed output it to the serial port */
  if (Key)
    Serial.println(Key); 
 
  /* Wait a little before reading again 
     so not to flood the serial port*/
  delay(100);
}
 
 
/* Read the state of the keypad */
byte Read_Keypad(void)
{
  byte Count;
  byte Key_State = 0;
 
  /* Pulse the clock pin 16 times (one for each key of the keypad) 
     and read the state of the data pin on each pulse */
  for(Count = 1; Count <= 16; Count++)
  {
    digitalWrite(SCL_PIN, LOW); 
    
    /* If the data pin is low (active low mode) then store the 
       current key number */
    if (!digitalRead(SDO_PIN))
      Key_State = Count; 
    
    digitalWrite(SCL_PIN, HIGH);
  }  
  
  return Key_State; 
}
cs

 


터치 시 손가락을 빨리 떼지 않으면 위와 같이 중복 입력이 발생합니다. Loop 부분에 보면 delay가 100ms 가 잡혀 있는데 이 부분을 좀 조절해 주면 중복 입력이 좀 줄어들긴 합니다. 원천적으로 해결하려면 x초 이내에 같은 입력이 발생한다면 무시하는 소스를 적용하면 한층 입력이 정확해 질 듯 합니다.


이상으로 16개 숫자를 입력할 수 있는 터치 키패드를 테스트 해 보았으나 그다지 실용적이지는 않은 것 같습니다. 터치도 좀 불안정한 면이 있고 뭔가 확실치 못한 느낌이 듭니다. 차라리 아두이노에 숫자 등의 입력을 위한 입력기로서 활용을 원한다면 스위치 방식의 입력 모듈이 더욱 좋을 것 같습니다.


출처: http://www.aliexpress.com/

위와 같은 키패드가 더욱 좋을 것 같습니다. 


출처: http://www.aliexpress.com/

만약 위와 같이 숫자가 쓰여 있지 않은 것을 원한다면 이런 4x4 keypad 도 있습니다. 아무것도 정의되어 있지 않으니 응용성은 더욱 좋을 것 같습니다.


이상으로 아두이노의 입력기로 사용할 수 있는 16 Key Capacitive Keypad 인 TTP229 모듈에 대해서 알아 보았습니다.



반응형
Posted by 대네브 (deneb)

댓글을 달아 주세요