본문 바로가기
앱스킷(APPSKIT) 강좌

[앱스킷](SW-ON V1) I2C 푸시버튼 스위치 모듈 사용방법 알아보기 - 1편

by 오마이엔지니어 2018. 7. 26.
반응형

[SW-ON V1 노드모듈-I2C 푸시버튼 스위치 모듈]


아두이노의 디지털 I/O 핀을 사용하지 않고 여러 개의 스위치 입력을 받을 수 없을까?


이런 고민에서 출발해서 I2C 통신을 통해 6개의 푸시버튼 입력을 받을 수 있는 SW-ON V1 노드모듈을 출시했습니다.



SW-ON V1 노드모듈은 한 개의 U-HUB V1 허브모듈을 장착할 수 있는 슬롯과, 6개의 푸시버튼 스위치 그리고 1개의 LED가 내장되어 있습니다.


또한 2개의 2.54mm, 1X12로 배열된 헤더핀은 장착할 수 있는 허브모듈의 전원, 아날로그, 디지털 I/O가 연결되어 있습니다.


이제 SW-ON V1 노드모듈에 대해 알아보겠습니다.


먼저 각 부 명칭을 알아보겠습니다.

[SW-ON V1 각 부 명칭]


노드모듈을 정면으로 보았을 때, 크게 왼쪽으로 U-HUB V1 허브모듈을 장착할 수 있는 커넥터와 오른쪽으로 6개의 푸시버튼 스위치가 배치되어 있으며, 중간에 1개의 상태표시 LED가 있습니다.


U-HUB V1 모듈 착/탈커넥터에는 U-HUB V1 허브모듈이 장착되는 공간입니다.

[U-HUB V1과 SW-ON V1 결합 전 사진]


U-HUB V1 허브모듈과 SW-ON V1 노드모듈을 결합해 보았습니다.

[U-HUB V1과 SW-ON V1 결합 후 사진]



U-HUB V1 모듈 착/탈커넥터 사이로 배터리 연결단자와 칩저항으로 연결할 수 있는 패드가 있습니다.

[리튬이온 배터리 연결단자, SW-ON V1 I2C 주소 설정 그리고 인터럽트 설정 저항]


가장 왼쪽에는 리튬이온 배터리 연결단자가 있습니다.

이 기능은 U-HUB V1 허브모듈이 반드시 장착되어야 사용할 수 있는 기능입니다. U-HUB V1 허브모듈에는 리튬이온 배터리 충전기능이 내장되어 있어 이 기능을 이용하는 것입니다.

(U-HUB V1은 3.7[V] 리튬이온 배터리를 지원하며 충전전류는 50[mA]로 제한되어 있습니다.)


가운데에는 I2C 주소는 총 8개 설정이 가능하며, 제품 출고 시 A0가 HIGH로 설정되어 있습니다.

아두이노의 Wire.h 라이브러리를 사용할 경우, Hex 값은 "0x21" 또는 Binary 값은 "0b00100001"로 주소를 지정하여 사용합니다.

(바이너리 기준으로 하위 3비트가 주소 지정 비트 설정값입니다.)


오른쪽에는 외부 푸시버튼이 눌렸을 때 사용할 수 있는 INT(인터럽트) 핀은 연결되지 않은 상태로 출고됩니다. 인터럽트 방식으로 사용할 경우에는 10K/2012 칩저항을 연결합니다. 이 칩저항을 통해 아두이노 디지털 2번 핀과 연결됩니다.



보드 기준 오른쪽으로 1개의 LED와 6개의 푸시버튼 스위치 그리고 1x12 헤더핀이 배치되어 있습니다.

[상태표시 LED, 푸시버튼 스위치, U-HUB V1 허브모듈 I/Os]


상태표시 LED는 U-HUB V1 허브모듈의 디지털 13번 핀이 연결되어 있습니다.


6개의 푸시버튼 스위치가 SW1~SW6으로 3x2 배열로 배치되어 있습니다.


2개의 1x12 헤더핀은 2.54mm 간격으로 전원과 아날로그 입력(A0~A5), 디지털 입/출력(0~13)으로 구성되어 있으며, 임베디드 시스템이나 NODE-STAND V1 확장 스탠드와 체결해서 사용합니다.

(참고는 I2C 핀으로 A4(SDA)와 A5(SCL) 핀을 사용하므로 아날로그 입력으로는 사용할 수 없습니다.)

[SW-ON V1과 NODE-STAND V1 결합 사진]



본 설명에서는 위 사진 처럼 U-HUB V1과 PWR-ON V1을 결합하여 NODE-STAND V1에 장착하고, SW-ON V1을 NODE-STAND V1에 장착해서 동작시켜 보겠습니다.

(U-HUB V1과 SW-ON V1 두 보드만 연결해서도 사용할 수 있습니다.)


아래 동영상 동작은 스위치의 상태를 시리얼 통신으로 전송하는 동작 예시입니다.

아두이노 IDE에서 시리얼 모니터를 사용하여 푸시버튼 스위치 상태를 모니터링할 수 있습니다.


스위치가 눌리지 않을 때는 "*UNPUSHED!*" 메시지가 출력되며, 푸시버튼 스위치가 눌렸을 경우 해당 스위치의 이름과 눌린 정보가 "SW1 PUSHED!"라고 표시됩니다.


폴링 방식의 예제이며, 0.5초 단위로 스캐닝을 하기 때문에 기본 예제로 보면 될 것 같습니다.


상태표시 LED는 스캐닝 시간을 표시하며 blinking 됩니다.


참고로 U-HUB V1 허브모듈은 아두이노 개발환경의 보드매니저에서 "Arduino PRO or PRO Mini"를 선택하고 스케치를 업로드하면 됩니다.


다음은 기본 예제 동작 영상입니다. U-HUB V1 허브모듈의 LED도 13번 핀에 연결되어 있어 같이 깜박거립니다.

[SW-ON V1 동작 설명 동영상]


다음은 상기 동작에 대한 예제 스케치입니다.

example code.txt


/*                                                                                                                             
#include <Wire.h>                           
 
#define PUSH_ADDR 0x21
//#define PUSH_ADDR 0b00100001
 
byte nReadPushBtn = 0;
 
 
int ReadPushBtn(byte bAddr)
{
  byte nPushBtn = 0;
 
  Wire.requestFrom(bAddr, 1);
  if(Wire.available()) nPushBtn = Wire.read();
  Wire.endTransmission();
  return nPushBtn;
}
 
void setup()
{
  pinMode(13, OUTPUT);
  Serial.begin(9600);
  Wire.begin();
}
 
void loop()
{
  nReadPushBtn = ReadPushBtn(PUSH_ADDR);
 
  switch(nReadPushBtn)
  {
    case 0:
      Serial.println("*UNPUSHED!*");
    break;
    case 1:
      Serial.println("SW1 PUSHED!");
    break;
    case 2:
      Serial.println("SW2 PUSHED!");
    break;
    case 4:
      Serial.println("SW3 PUSHED!");
    break;
    case 8:
      Serial.println("SW4 PUSHED!");
    break;
    case 16:
      Serial.println("SW5 PUSHED!");
    break;
    case 32:
      Serial.println("SW6 PUSHED!");
    break;
   }
 
   digitalWrite(13, HIGH);
   delay(250);
   digitalWrite(13, LOW);
   delay(250);
}
 

SW-ON V1 노드모듈을 통해 푸시버튼 디지털 입력, I2C 통신, LED 디지털 출력에 대한 이해에 도움이 되었으면 합니다.


이상으로 블로그를 마치겠습니다.


감사합니다.

앱스킷 구매처
앱스킷 공식 홈페이지

example code.txt
0.0MB
반응형

댓글