MAX7219 LED 도트 매트릭스 디스플레이와 아두이노 인터페이싱
개요
이 가이드에서는 Arduino와 함께 8×32 MAX7219 도트 매트릭스 LED 디스플레이를 사용하는 방법을 배웁니다. MAX8 LED 드라이버가 내장된 32×7129 LED 매트릭스 모듈은 Arduino 보드 및 기타 마이크로컨트롤러와 호환된다. 8×32 LED 매트릭스에는 256개의 LED(발광 다이오드)가 있으며 매트릭스 형태로 8행과 32열로 배열되어 있습니다. 따라서 8×32 도트 매트릭스 LED로 명명됩니다.
Parola 및 MAX72xx 라이브러리를 사용하여 숫자, 알파벳, 스크롤 텍스트, 기호, 이모티콘 등과 같은 다양한 롤링 LED 패턴을 생성할 수 있습니다. 이 외에도 이 디스플레이에 DHT11/DHT22와 같은 일부 센서 데이터를 표시할 수도 있습니다. 이 게시물에서 몇 가지 예를 살펴 보겠습니다.
재료 명세서
이 모듈을 사용하려면 Amazon에서 다음 구성 요소를 구입할 수 있습니다.
1 | 아두이노 우노 보드 | 1 | 아마존 | 알리익스프레스 |
2 | 8x32 MAX7219 도트 매트릭스 LED 디스플레이 | 1 | 아마존 | 알리익스프레스 |
3 | DHT22 센서 | 1 | 아마존 | 알리익스프레스 |
4 | 점퍼 와이어 | 1 | 아마존 | 알리익스프레스 |
5 | 전원 공급 장치 | 1 | 아마존 | 알리익스프레스 |
도트 매트릭스 LED 디스플레이
LED 매트릭스는 단색, 이중 색상, 다중 색상 또는 RGB LED 매트릭스와 같은 다양한 스타일로 제공됩니다. 또한 5 x 7, 8 x 8, 16 x 16, 8 x 32, 32 x 32 등과 같은 다양한 치수로 제공됩니다.
이 8×32 LED 매트릭스 디스플레이는 내부적으로 연결된 4개의 단일 모듈로 구성된 클러스터입니다. 모든 모듈이 동일한 Maxim MAX7219 칩을 탑재하고 동일한 전력 및 데이터 연결을 제공하기 때문에 이러한 모듈을 분리할 수도 있습니다.
핀 구성
8×8 LED 매트릭스에는 8 개의 양극 단자와 8 개의 음극 단자가 있습니다. 8 개의 음극 단자는 8 열이고 8 개의 양극 단자는 8 행입니다.
4개의 8X8 LED 매트릭스는 MAX7219 핀을 통해 서로 연결된다.
이 디스플레이는 많은 전류를 소비하므로 Arduino 보드의 5V 공급 장치 대신 외부 전원 공급 장치에서 모듈을 실행해야합니다. Arduino 보드의 5V 및 GND 핀에 연결된 3V, 5A 정격의 외부 전원 어댑터를 사용해야합니다.
MAX7219 모듈은 많은 데이터 전송이 필요하므로 마이크로컨트롤러의 하드웨어 SPI 핀에 연결해야 한다. UNO/Nano와 같은 Arduino 보드의 경우 이러한 핀은 디지털 13(SCK), 12(MISO), 11(MOSI) 및 10(SS)입니다.
8×32 LED 도트 매트릭스 디스플레이의 CLK, CS, DIN 핀을 아두이노 디지털 핀 13, 10, 11에 연결합니다.
이 가이드에서는 FC-16 MAX7219 모듈을 사용합니다. 여러 디스플레이를 데이지 체인 방식으로 연결하여 더 큰 디스플레이를 만들려면 첫 번째 디스플레이의 DOUT을 다음 디스플레이의 DIN에 연결합니다. VCC, GND, CLK 및 CS는 모두 디스플레이 간에 공유됩니다.
라이브러리 설치
MAX7219 모듈을 제어하는 것은 복잡한 작업이며 많은 코드 라인이 필요하다. 다행히 MD_Parola 라이브러리를 사용하여 이러한 복잡성을 제거하여 디스플레이를 제어하는 간단한 명령을 실행할 수 있습니다.
라이브러리를 설치하려면 스케치 > 라이브러리 포함 > 라이브러리 관리로 이동합니다. 검색에서 옵션은 'max72xx'를 찾아 설치를 클릭합니다.
이 MD_MAX72XX 라이브러리는 하위 수준 기능을 처리하는 하드웨어별 라이브러리입니다. 스크롤 및 스프라이트 텍스트 효과와 같은 다양한 텍스트 애니메이션을 만들기 위해 MD_Parola 라이브러리와 페어링해야 합니다. 이 라이브러리도 설치하십시오.
텍스트/숫자 표시 위한 소스 코드/프로그램
다음 코드를 복사하여 아두이노 IDE에 붙여넣습니다.
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
//#define HARDWARE_TYPE MD_MAX72XX::GENERIC_HW
이 줄에서 하드웨어 유형을 선택합니다. 우리의 경우 하드웨어 유형은 FC16_HW입니다.
myDisplay.displayScroll("How To Electronics", PA_CENTER, PA_SCROLL_LEFT, 200);
이 줄에 LED 디스플레이에 표시할 텍스트와 숫자를 입력합니다.
이제 코드를 아두이노 보드에 업로드할 수 있습니다.
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
//#define HARDWARE_TYPE MD_MAX72XX::GENERIC_HW
#define MAX_DEVICES 4
#define CS_PIN 10
MD_Parola myDisplay = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
void setup() {
myDisplay.begin();
myDisplay.setIntensity(4);
myDisplay.displayClear();
myDisplay.displayScroll("How To Electronics", PA_CENTER, PA_SCROLL_LEFT, 200);
}
void loop() {
if (myDisplay.displayAnimate()) {
myDisplay.displayReset();
}
}
출력 테스트
스크롤 텍스트 "How To Electronics"를 표시하고 싶습니다. 텍스트는 다음과 같이 스크롤됩니다.
이 외에도 이와 같은 텍스트 나 숫자를 표시 할 수 있습니다.
DHT22 습도 온도 센서 값 표시
이제 DHT22 온도 및 습도 센서를 Arduino와 인터페이스하고 8×32 도트 매트릭스 LED 디스플레이에 센서 값을 표시하겠습니다.
DHT22 센서 VCC, GND 및 출력 핀을 Arduino의 5V, GND 및 D7에 연결하십시오.
소스 코드/프로그램
이 코드에는 컴파일을 위해 Font7Seg.h라는 헤더 파일이 필요합니다. 이 파일을 다운로드하여 기본 스케치 폴더에 복사합니다.
이제이 코드를 Arduino 메인 스케치에 복사하여 Arduino에 업로드 할 수 있습니다.
/*
* Use of MAX72XX, DS1307 and DTH22 components to
* print some information on the display.
*
* for more examples:
* https://github.com/MajicDesigns/MD_Parola/tree/main/examples
* https://github.com/MajicDesigns/MD_MAX72XX/tree/main/examples
*/
// Header file includes
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <DHT.h>
#include <SPI.h>
#include <Wire.h>
#include "Font7Seg.h"
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4 // Define the number of displays connected
#define CLK_PIN 13 // CLK or SCK
#define DATA_PIN 11 // DATA or MOSI
#define CS_PIN 10 // CS or SS
#define SPEED_TIME 75 // Speed of the transition
#define PAUSE_TIME 0
#define MAX_MESG 20
// These are for the temperature
#define DHTPIN 6
#define DHTTYPE DHT22
#define TIMEDHT 1000
char szTime[9]; // mm:ss\0
char szMesg[MAX_MESG + 1] = "";
float humidity, celsius, fahrenheit;
uint8_t degC[] = { 6, 3, 3, 56, 68, 68, 68 }; // Deg C
uint8_t degF[] = { 6, 3, 3, 124, 20, 20, 4 }; // Deg F
uint8_t clear = 0x00;
uint32_t timerDHT = TIMEDHT;
DHT dht(DHTPIN, DHTTYPE);
// Hardware SPI connection
MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
uint8_t decToBcd(uint8_t value) {
return ((value / 10 * 16) + (value % 10));
}
uint8_t bcdToDec(uint8_t value) {
return ((value / 16 * 10) + (value % 16));
}
void getTemperature() {
// Wait for a time between measurements
if ((millis() - timerDHT) > TIMEDHT) {
// Update the timer
timerDHT = millis();
humidity = dht.readHumidity();
celsius = dht.readTemperature();
fahrenheit = dht.readTemperature(true);
if (isnan(humidity) || isnan(celsius) || isnan(fahrenheit)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
}
}
void setup(void) {
Wire.begin();
P.begin(2);
P.setInvert(false);
P.setZone(0, MAX_DEVICES - 4, MAX_DEVICES - 1);
P.setZone(1, MAX_DEVICES - 4, MAX_DEVICES - 1);
P.displayZoneText(0, szMesg, PA_CENTER, SPEED_TIME, 0, PA_PRINT, PA_NO_EFFECT);
P.addChar('$', degC);
P.addChar('&', degF);
dht.begin();
}
void loop(void) {
static uint32_t lastTime = 0; // Memory (ms)
static uint8_t display = 0; // Current display mode
static bool flasher = false; // Seconds passing flasher
getTemperature();
P.displayAnimate();
if (P.getZoneStatus(0)) {
switch (display) {
case 0: // Temperature deg Celsius
P.setPause(0, 1000);
P.setTextEffect(0, PA_SCROLL_LEFT, PA_SCROLL_UP);
display++;
dtostrf(celsius, 3, 1, szMesg);
strcat(szMesg, "$");
break;
case 1: // Temperature deg Fahrenheit
P.setTextEffect(0, PA_SCROLL_UP, PA_SCROLL_DOWN);
display++;
dtostrf(fahrenheit, 3, 1, szMesg);
strcat(szMesg, "&");
break;
case 2: // Humidity
P.setTextEffect(0, PA_SCROLL_DOWN, PA_SCROLL_LEFT);
display++;
dtostrf(humidity, 3, 0, szMesg);
strcat(szMesg, "%UR");
break;
}
P.displayReset(0); // Rest zone zero
}
}
출력 테스트
Arduino와 함께 8×32 도트 매트릭스 LED 디스플레이는 온도 습도 데이터를 표시합니다.
이것이 Arduino 보드가 있는 8×32 MAX7219 도트 매트릭스 LED 디스플레이를 사용하여 스크롤 텍스트와 숫자를 표시하는 방법입니다.
'아두이노' 카테고리의 다른 글
손 제스처 제어: 물리적 및 디지털의 움직임(원격 조작) (1) | 2023.10.18 |
---|---|
게이머를 위한 궁극의 모기채 모드: 킬 카운터, 사운드, 충전식 배터리를 추가 (1) | 2023.05.21 |
Arduino Nano를 사용하여 이진수-십진수 변환기 만들기 (0) | 2023.05.05 |
아두이노 환경 모니터링 시스템 (0) | 2023.04.13 |
팅커캐드 회로와 아두이노를 사용한 가위바위보 (0) | 2023.03.06 |