[SW-ON V1 노드모듈-I2C 푸시버튼 스위치 모듈]
아두이노의 디지털 I/O 핀을 적게 사용해서 여러 개의 스위치 입력을 받을 수 없을까?
이런 고민에서 출발해서 I2C 통신을 통해 6개의 푸시버튼 입력을 받을 수 있는 SW-ON V1 노드모듈을 출시했습니다.
SW-ON V1 노드-모듈은 한 개의 U-HUB V1 허브-모듈을 장착할 수 있는 슬롯과, 6개의 푸시버튼 스위치 그리고 1개의 LED가 내장되어 있습니다.
또한 2개의 2.54mm, 1X12로 배열된 헤더 핀은 U-HUB V1 허브-모듈을 장착하면 전원, 아날로그, 디지털 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]로 제한되어 있습니다.)
리튬-이온 전지는 직접 연결하는 것 보다 ON/OFF 스위치를 통해 연결하는 것이 좋습니다.
가운데에는 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 이름으로 배치되어 있습니다.
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 두 보드만 연결해서도 사용할 수 있습니다.)
제어 방식의 구조는 다음과 같습니다.
[예제 스케치 제어 주요 구조]
SW-ON V1 노드-모듈 사용 전 간단히 PCF8574 IC에 대해 알아보겠습니다.
다음 그림은 PCF8574 IC의 핀 구성도입니다.
[PCF8574 핀 구성]
데이터시트 내 PCF8574의 주소에 대한 설명입니다. SW-ON V1 노드-모듈을 사용할 경우 I2C 읽기에 해당되며 우리가 관심을 갖는 부분은 오른 쪽 붉은 박스 주소입니다.
[PCF8574의 A[2:0] 핀에 대응하는 I2C 주소]
[PCF8574의 데이터 바이트 정의-주소 및 버스 데이터]
SW-ON V1 노드-모듈은 A0가 HIGH, A1과 A2는 LOW로 연결되어 있습니다. 따라서 해당 주소는 Hex 값으로 "43 / 0x01000011" 입니다.
그러나 아두이노의 Wire 라이브러리를 사용할 경우에는 위 PCF8574의 주소를 변경해야 합니다.
규정된 데이터 바이트 정의 중 제일 하위비트는 Wire 라이브러리에서 처리하게 되어 삭제되며, A0 비트가 하위비트로 설정하고 최상위 비트 하나를 추가하여 주소를 설정해야 합니다. 따라서 I2C 주소 값인 "0x43"을 Wire 라이브러리 사용 시 "0x21"로 사용하면됩니다.
[아두이노 Wire 라이브러리 사용 시 I2C 주소 변경 방식]
다음은 PCF8574 IC로 데이터를 읽을 때 필요한 전송규격입니다.
읽을 주소와 바이트 수 먼저 보내고, 바이트 단위로 지정된 수 만큼 읽습니다.
아두이노 Wire 라이브러리 함수 중,
먼저 Wire.requestFrom(주소, 읽을 바이트 수) 함수로 I2C 주소와 읽을 데이터 수를 선택하고,
Wire.read() 함수로 한 바이트 데이터를 읽고,
Wire.endTransmisstion() 함수로 I2C를 종료시켜 처리하면 됩니다.
[PCF8574의 I2C 데이터 전송 규격 - Read mode]
아래 동영상 동작은 스위치의 상태를 시리얼 통신으로 전송하는 동작 예시입니다.
아두이노 IDE에서 시리얼 모니터를 사용하여 푸시버튼 스위치 상태를 모니터링할 수 있습니다.
스위치가 눌리지 않을 때는 "*UNPUSHED!*" 메시지가 출력되며, 푸시버튼 스위치가 눌렸을 경우 해당 스위치의 이름과 눌린 정보가 "SW1 PUSHED!"라고 표시됩니다.
폴링 방식의 예제이며, 0.5초 단위로 스캐닝을 하기 때문에 기본 예제로 보면 될 것 같습니다.
상태표시 LED는 스캐닝 시간을 표시하며 blinking 됩니다.
참고로 U-HUB V1 허브모듈은 아두이노 개발환경의 보드매니저에서 "Arduino PRO or PRO Mini"를 선택하고 스케치를 업로드하면 됩니다.
다음은 기본 예제 동작 영상입니다.
U-HUB V1 허브-모듈의 LED도 13번 핀에 연결되어 있어 같이 깜박거립니다.
[SW-ON V1 동작 설명 동영상]
다음은 상기 동작에 대한 예제 스케치입니다.
SW-ON V1 노드모듈을 통해 푸시버튼 디지털 입력, I2C 통신, LED 디지털 출력에 대한 이해에 도움이 되었으면 합니다.
이상으로 블로그를 마치겠습니다.
감사합니다.