아두이노 우노로 도트 매트릭스를 제어해보기 전에 클로드를 사용하여 사전 조사를 해본 결과를 정리했습니다. 이후 실제로 동작시켜보면서 글을 업데이트해볼 예정입니다.
클로드를 사용하여 사전 조사후 작업을 진행해보는 시도를 해봅니다.
2025. 1. 12 최초작성. 클로드를 사용하여 사전 조사
2025. 1. 12 테스트 결과 추가
2025. 1. 13 1088BS 도트 매트릭스에서 행과 열을 지정하여 해당 LED를 하나씩 켜는 방법을 찾아냈습니다.
2025. 1. 15 1088BS 도트 매트릭스에 스마일 출력해봅니다.
2025. 1. 21 MAX7219 + 1088BS 도트 매트릭스를 테스트했습니다.
1088BS 도트 매트릭스 제어하기
공통 애노드 또는 공통 캐소드
간단한 제어 코드
MAX7219 + 1088BS 도트 매트릭스 모듈
좀 더 큰 크기의 도트 매트릭스 제어를 하려면?
1. MAX7219 캐스케이딩 방식:
2. HUB75 방식 LED 매트릭스:
3. 74HC595 시프트 레지스터 활용:
1088BS 도트 매트릭스 제어하기
도트 매트릭스 옆에 1088BS라고 적힌 것을 가지고 있어 이걸 사용해보려고 조사해봤습니다.
1088BS는 다른 칩이 없고 도트 매트릭스만 있는 것입니다.
1088BS 가격이 작성시점에 한개에 900원이네요.
장점:
가격이 더 저렴함
부품이 단순하여 고장날 확률이 낮음
직접 제어로 더 세밀한 컨트롤 가능
단점:
많은 핀을 사용해야 함 (16개)
멀티플렉싱을 위한 코드가 필요
애니메이션 구현이 좀 더 복잡함
공통 애노드 또는 공통 캐소드
공통 애노드(Common Anode)와 공통 캐소드(Common Cathode)는 LED의 전류 흐름 방향과 제어 로직이 반대이기 때문에 중요합니다:
공통 애노드(Common Anode)의 경우:
행(ROW) 핀에 HIGH(+5V) 공급
열(COLUMN) 핀에 LOW(GND) 공급
LED가 켜짐
공통 캐소드(Common Cathode)의 경우:
행(ROW) 핀에 LOW(GND) 공급
열(COLUMN) 핀에 HIGH(+5V) 공급
LED가 켜짐
만약 이를 반대로 연결하면:
LED가 전혀 켜지지 않거나
의도하지 않은 LED들이 켜지거나
최악의 경우 LED나 매트릭스가 손상될 수 있습니다
따라서 코드를 작성할 때도 이 차이를 반드시 고려해야 합니다. 1088BS는 일반적으로 공통 애노드 타입입니다.
간단한 제어 코드
일단 도트 매트릭스를 아두이노 우노에 연결을 해야 합니다.
왼쪽 그림은 1088BS 도트 매트릭스 앞면에서 봤을때 핀배열입니다. 1088BS라고 적힌 부분이 아래 그림에서 Label Side라고 적힌 부분입니다. 오른쪽 그림에서 동그라미 안에 있는 핀 번호대로 연결하면 해당 점이 켜집니다. 예로 들어 1행 1열의 LED를 켜려면 13번핀은 LOW를 주고, 9번핀은 HIGH를 주면 됩니다.
그림 1. 이미지 출처 : https://osoyoo.com/2017/07/15/8x8-led-matrix/
위 그림은 다음처럼 도트 매트릭스를 놓은 상태입니다.
다음 코드를 사용하여 도트 매트릭스의 행 핀 1개 열 핀 1개만 연결하여 그림1에 있는 도트 매트릭스의 행과 열의 핀 배치를 다시 확인했습니다.
열핀은 LOW를 주고, 행핀은HIGH를 주면 됩니다
#include <Arduino.h> void setup() { // 아두이노에 테스트할 두 핀만 설정 - 아두이노 9번 핀은 행에 연결하고, 아두이노 13번 핀은 열에 연결결 pinMode(9, OUTPUT); // 1088BS PIN 9 - 1행 pinMode(13, OUTPUT); // 1088BS PIN 13 - 1열 } void loop() { // 애노드 방식으로 테스트 digitalWrite(9, HIGH); digitalWrite(13, LOW); delay(3000); // 3초 켜기 // 모두 끄기 digitalWrite(9, LOW); digitalWrite(13, LOW); delay(3000); // 3초 끄기 } |
이제 스마일을 출력해봤습니다. 아래 그림 도트 매트릭스에서 오른쪽에 있는 그림의 원안에 있는 열과 행에 대응하는 핀 번호가 코드에 입력되어 있습니다.
#include <Arduino.h> /* 도트매트릭스 1088BS 핀 연결 방법 - 데이터시트 기준 행(ROW) 연결: ROW1 → PIN 9 → 아두이노 13번 ROW2 → PIN 14 → 아두이노 A3 ROW3 → PIN 8 → 아두이노 8번 ROW4 → PIN 12 → 아두이노 10번 ROW5 → PIN 1 → 아두이노 9번 ROW6 → PIN 7 → 아두이노 7번 ROW7 → PIN 2 → 아두이노 2번 ROW8 → PIN 5 → 아두이노 5번 열(COLUMN) 연결: COL1 → PIN 13 → 아두이노 A4 COL2 → PIN 3 → 아두이노 3번 COL3 → PIN 4 → 아두이노 4번 COL4 → PIN 10 → 아두이노 12번 COL5 → PIN 6 → 아두이노 6번 COL6 → PIN 11 → 아두이노 11번 COL7 → PIN 15 → 아두이노 A2 COL8 → PIN 16 → 아두이노 A1 주의: - 1088BS는 공통 애노드 타입입니다 - LED를 켜려면 행(ROW)은 HIGH, 열(COLUMN)은 LOW로 설정해야 합니다 */ // 행과 열 핀 정의 const int ROW_PINS[8] = {13, A3, 8, 10, 9, 7, 2, 5}; // ROW 1-8 순서 const int COL_PINS[8] = {A4, 3, 4, 12, 6, 11, A2, A1}; // COL 1-8 순서 // 스마일 패턴 정의 byte smile[8] = { B00111100, B01000010, B10100101, B10000001, B10100101, B10011001, B01000010, B00111100 }; void setup() { // 모든 핀을 출력으로 설정 for(int i = 0; i < 8; i++) { pinMode(ROW_PINS[i], OUTPUT); pinMode(COL_PINS[i], OUTPUT); } // 초기화 clearDisplay(); } void clearDisplay() { // 모든 LED를 끔 for(int i = 0; i < 8; i++) { digitalWrite(ROW_PINS[i], LOW); digitalWrite(COL_PINS[i], HIGH); } } void displayPattern(byte pattern[]) { // 한 프레임을 여러 번 반복 for(int repeat = 0; repeat < 100; repeat++) { // 이 숫자를 조절하여 밝기 조절 가능 // 한 행씩 순차적으로 처리 for(int row = 0; row < 8; row++) { // 현재 행을 활성화 digitalWrite(ROW_PINS[row], HIGH); // 현재 행의 각 열 설정 for(int col = 0; col < 8; col++) { if(pattern[row] & (1 << (7 - col))) { digitalWrite(COL_PINS[col], LOW); // LED 켜기 } else { digitalWrite(COL_PINS[col], HIGH); // LED 끄기 } } delayMicroseconds(100); // 이 시간을 조절하여 깜박임 제어 // 현재 행 비활성화 digitalWrite(ROW_PINS[row], LOW); // 모든 열을 HIGH로 설정 for(int col = 0; col < 8; col++) { digitalWrite(COL_PINS[col], HIGH); } } } } void loop() { displayPattern(smile); // delay(100); // 필요한 경우 추가 } |
마침 브레드보드가 없어서 핀을 연결하기가 쉽지 않았지만 실행결과입니다.
MAX7219 + 1088BS 도트 매트릭스 모듈
좀더 간단하게 제어하려면(3개 핀으로 제어 가능하다네요) MAX7219 칩과 1088BS 도트 매트릭스가 같이 있는게 좋다지만 2000원 정도라서 이거 하나땜에 주문하기가 망설여지네요. 추후 시도해보겠습니다.
아래 사진에 보이는 1088AH도 공통 애노드 타입의 도트 매트릭스입니다. 공통 애노드에 대한 설명은 앞에서 했습니다.
코드에도 있는 다음 설명대로 연결합니다.
MAX7219 + 1088BS 도트매트릭스 모듈 연결 방법
1. 데이터 핀 연결:
DIN (Data In) → 아두이노 11번
CLK (Clock) → 아두이노 13번
CS (Chip Select) → 아두이노 10번
2. 전원 연결:
VCC → 아두이노 5V
GND → 아두이노 GND
Arduino IDE 메뉴에서 툴 > 라이브러리 관리자를 선택한 후, 검색창에 LedControl을 입력하면 찾아지는 항목중에 "LedControl by Eberhard Fahle"을 선택하여 설치 버튼을 클릭합니다.
다음 코드를 업로드합니다.
#include <LedControl.h> /* MAX7219 + 1088BS 도트매트릭스 모듈 연결 방법 1. 데이터 핀 연결: DIN (Data In) → 아두이노 11번 CLK (Clock) → 아두이노 13번 CS (Chip Select) → 아두이노 10번 2. 전원 연결: VCC → 아두이노 5V GND → 아두이노 GND 참고: - LedControl 라이브러리 필요 (라이브러리 매니저에서 "LedControl" 검색하여 설치) - 밝기는 setIntensity()로 0-15 사이에서 조절 가능 */ // DIN, CLK, CS, 매트릭스 개수 순서로 설정 LedControl lc = LedControl(11, 13, 10, 1); // 스마일 패턴 byte smile[8] = { B00111100, B01000010, B10100101, B10000001, B10100101, B10011001, B01000010, B00111100 }; void setup() { lc.shutdown(0, false); // 절전 모드 해제 lc.setIntensity(0, 8); // 밝기 설정 (0-15) lc.clearDisplay(0); // 디스플레이 초기화 } void loop() { // 스마일 패턴 표시 for(int i = 0; i < 8; i++) { lc.setRow(0, i, smile[i]); } } |
코드 업로드전 아두이노 우노에 전원을 연결한 상태에선 다음처럼 보입니다.
코드를 업로드하면 스마일 얼굴이 보이게 됩니다.
좀 더 큰 크기의 도트 매트릭스 제어를 하려면?
지금 가지고 있는게 8x8 도트 매트릭스라서 좀 더 큰 크기의 도트 매트릭스를 아두이노 우노로 제어할수 있나 조사해봤습니다.
1. MAX7219 캐스케이딩 방식:
여러 개의 8x8 매트릭스를 연결하여 확장
예: 8x32(8x8 4개), 16x16(8x8 4개) 등
동일한 DIN, CS, CLK 핀만 사용
가장 쉬운 방법이지만 모듈 가격이 비쌈
2. HUB75 방식 LED 매트릭스:
32x16, 32x32, 64x32 등 가능
전용 쉴드나 어댑터 보드 필요
많은 수의 LED를 제어할 수 있음
라이브러리: PxMatrix, SmartMatrix 등 사용
3. 74HC595 시프트 레지스터 활용:
적은 수의 핀으로 더 많은 LED 제어 가능
비용이 저렴하지만 구현이 복잡함
16x16, 32x8 등 구현 가능
실제 구현 난이도 순위:
MAX7219 (가장 쉬움) - 추천
HUB75 + 전용 쉴드
74HC595 시프트 레지스터 (가장 어려움)
주의사항:
큰 매트릭스는 전력 소비가 많아 외부 전원 필요
아두이노 우노의 메모리 제한 고려 필요
제어하는 LED 수가 많을수록 리프레시 속도 저하 가능
'Arduino Uno' 카테고리의 다른 글
Windows에서 Arduino Uno 처음 사용해보기 (2) | 2020.08.17 |
---|---|
Arduino IDE에서 코딩용 폰트 사용하기 ( 가독성 개선 ) (7) | 2020.03.25 |
아두이노 강좌 - LED 깜빡이기 (1) | 2019.08.17 |
Arduino UNO에서 캐릭터 LCD 사용하는 방법 (0) | 2019.01.16 |
Arduino에서 TFT LCD 사용하기 (0) | 2018.12.16 |