[LED-ON V1 노드모듈-I2C LED 모듈]
아두이노의 디지털 I/O 핀을 적게 사용해서 여러 개의 LED 출력을 할 수 없을까?
이런 문제에서 출발해서 I2C 통신을 통해 8개의 LED 출력을 할수 있는 LED-ON V1 노드모듈을 출시했습니다.
LED-ON V1 노드모듈은 한 개의 U-HUB V1 허브모듈을 장착할 수 있는 슬롯과, 8개의 LED 그리고 1개의 푸시버튼 스위치가 내장되어 있습니다.
또한 2개의 2.54mm, 1X12로 배열된 헤더핀은 U-HUB V1 허브모듈을 장착하면 전원, 아날로그, 디지털 I/O가 연결됩니다.
이제 LED-ON V1 노드모듈에 대해 알아보겠습니다.
먼저 각 부 명칭을 알아보겠습니다.
[LED-ON V1 각 부 명칭]
노드모듈을 정면으로 보았을 때, 크게 왼쪽으로 U-HUB V1 허브모듈을 장착할 수 있는 커넥터와 오른쪽으로 8개의 LED가 원형으로 배치되어 있으며, 중간에 1개의 푸시버튼 스위치가 있습니다.
(부착된 LED는 주황색 고휘도 LED로 8개를 모두 켰을 때, 어두운 방에서 조명등(무드등)으로 쓸 만큼 밝은 것 같습니다. LED가 켜진 상태에서 계속 바라보지 않는 것이 좋습니다.)
U-HUB V1 모듈 착/탈커넥터에는 U-HUB V1 허브모듈이 장착되는 공간입니다.
[U-HUB V1과 LED-ON V1 결합 전 사진]
U-HUB V1 허브모듈과 LED-ON V1 노드모듈을 결합해 보았습니다.
[U-HUB V1과 LED-ON V1 결합 후 사진]
U-HUB V1 모듈 착/탈커넥터 사이로 배터리 연결단자와 칩저항으로 연결할 수 있는 패드가 있습니다.
[리튬이온 배터리 연결단자, LED-ON V1 I2C 주소 설정 저항]
가장 왼쪽에는 리튬이온 배터리 연결단자가 있습니다.
이 기능은 U-HUB V1 허브모듈이 반드시 장착되어야 사용할 수 있는 기능입니다. U-HUB V1 허브모듈에는 리튬이온 배터리 충전기능이 내장되어 있어 이 기능을 이용하는 것입니다.
(U-HUB V1은 3.7[V] 리튬이온 배터리를 지원하며 충전전류는 50[mA]로 제한되어 있습니다.)
리튬-이온 전지는 직접 연결하는 것 보다 ON/OFF 스위치를 통해 연결하는 것이 안전합니다.
보드 좌측 중앙의 I2C 주소는 총 8개 설정이 가능하며, 제품 출고 시 A2가 HIGH로 설정되어 있습니다.
(주소 설정 저항은 2012 사이즈 10K를 사용하며, 연결하지 않으면 LOW로 설정됩니다.)
아두이노의 Wire.h 라이브러리를 사용할 경우, Hex 값은 "0x24" 또는 Binary 값은 "0b00100100"로 주소를 지정하여 사용합니다.
(바이너리 기준으로 하위 3비트가 주소 지정 비트 설정값입니다.)
보드 기준 중앙 하단에 1개의 푸시버튼 스위치와 오른쪽에 8개의 LED 그리고 1x12 헤더핀이 배치되어 있습니다.
[상태표시 LED, 푸시버튼 스위치, U-HUB V1 허브모듈 I/Os]
푸시버튼 스위치는 U-HUB V1 허브모듈의 디지털 13번 핀이 연결되어 있습니다.
8개의 LED가 LED0~LED7로 원형 배열로 배치되어 있습니다.
(LED-ON V1 노드모듈의 전원이 공급되면 모든 LED가 켜집니다.)
2개의 1x12 헤더핀은 2.54mm 간격으로 전원과 아날로그 입력(A0~A5), 디지털 입/출력(0~13)으로 구성되어 있으며, 임베디드 시스템이나 NODE-STAND V1 확장 스탠드와 체결해서 사용합니다.
참고로 I2C 핀으로 A4(SDA)와 A5(SCL) 핀을 사용하므로 아날로그 입력으로는 사용할 수 없습니다.
아래 사진은 U-HUB V1 허브모듈을 LED-ON V1 노드모듈에 장착하고 microUSB 케이블을 통해 전원을 공급한 사진입니다.
(U-HUB V1 허브모듈에는 스케치를 업로드 하기 전으로 전원을 공급하면 모든 LED가 켜집니다.)
[U-HUB V1 허브모듈을 LED-ON V1 노드모듈 장착 후 전원공급 사진]
아래 사진은 LED-ON V1 노드모듈을 NODE-ON V1 확장-스탠드에 장착한 사진입니다.
[LED-ON V1과 NODE-STAND V1 결합 사진]
본 설명에서는 위 사진 처럼 U-HUB V1과 PWR-ON V1을 결합하여 NODE-STAND V1에 장착하고, LED-ON V1을 NODE-STAND V1에 장착해서 동작시켜 보겠습니다.
(U-HUB V1과 LED-ON V1 두 보드만 연결해서도 사용할 수 있습니다.)
제어 방식의 구조는 다음과 같습니다.
[예제 스케치 제어 주요 구조]
LED-ON V1 노드-모듈 사용을 위해 간단히 PCF8574 IC에 대해 알아보겠습니다.
다음 그림은 PCF8574 IC의 핀 구성도입니다.
(LED-ON V1 노드-모듈은 PCF8574의 INT(Interrupt) 핀은 연결되지 않았습니다.)
[PCF8574 핀 구성]
데이터시트 내 PCF8574의 주소에 대한 설명입니다. LED-ON V1 노드-모듈을 사용할 경우 I2C 쓰기에 해당되며 우리가 관심을 갖는 부분은 왼쪽 붉은 박스 주소입니다.
[PCF8574의 A[2:0] 핀에 대응하는 I2C 주소]
[PCF8574의 데이터 바이트 정의-주소 및 버스 데이터]
LED-ON V1 노드-모듈은 A2가 HIGH, A1과 A0는 LOW로 연결되어 있습니다. 따라서 해당 주소는 Hex 값으로 "48 / 0x01001000" 입니다.
그러나 아두이노의 Wire 라이브러리를 사용할 경우에는 위 PCF8574의 주소를 변경해야 합니다.
규정된 데이터 바이트 정의 중 제일 하위비트는 Wire 라이브러리에서 처리하게 되어 삭제되며, A0 비트가 하위비트로 설정하고 최상위 비트 하나를 추가하여 주소를 설정해야 합니다. 따라서 I2C 주소 값인 "0x48"을 Wire 라이브러리 사용 시 "0x24"로 사용하면됩니다.
[아두이노 Wire 라이브러리 사용 시 I2C 주소 변경 방식]
다음은 PCF8574 IC로 데이터를 쓸 때 필요한 전송규격입니다.
주소를 먼저 보내고 전송하고자 하는 바이트를 한 바이트씩 전송하면 됩니다.
아두이노 Wire 라이브러리 함수 중,
먼저 Wire.beginTransmisstion(주소) 함수로 I2C 주소를 선택하고,
Wire.write(데이터) 함수로 한 바이트 데이터를 전송하고,
Wire.endTransmisstion() 함수로 I2C를 종료시켜 처리하면 됩니다.
[PCF8574의 I2C 데이터 전송 규격]
다음 동영상 동작은 위에서 설명한 내용을 바탕으로 PCF8574를 I2C 통신을 통해 원형 배열의 LED를 LED0부터 LED7까지 시프트 시키는 동작 예시입니다.
푸시버튼 스위치가 눌렸을 경우 LED가 동작을 멈추고, 버튼을 떼면 다시 그 위치부터 시프트됩니다. 마치 회전하는 것처럼 표시됩니다.
참고로 U-HUB V1 허브모듈은 아두이노 개발환경의 보드매니저에서 "Arduino PRO or PRO Mini"를 선택하고 스케치를 업로드하면 됩니다.
다음은 기본 예제 동작 영상입니다. U-HUB V1 허브모듈에 장착되어 있는 상태표시 LED도 13번 핀에 연결되어 있어 스위치가 눌렸을 때 같이 켜지거나 꺼집니다.
[LED-ON V1 동작 설명 동영상]
다음은 상기 동작에 대한 예제 스케치입니다.
LED-ON V1 노드모듈을 통해 푸시버튼 디지털 입력, I2C 통신, LED 디지털 출력에 대한 이해에 도움이 되었으면 합니다.
이상으로 블로그를 마치겠습니다.
감사합니다.