본문 바로가기
Arduino(아두이노) 활용 강좌

Arduino Uno 로 IR 적외선 장애물 감지센서를 사용해서 MAX7219 (8X8) 도트매트릭스 모듈 제어해 보기

by 오마이엔지니어 2023. 8. 28.
반응형

Arduino Uno 로 MAX7219 (8X8) 도트매트릭스 모듈의 사용방법을 알아보고
추가로 IR 적외선 장애물 감지센서를 사용해서 장애물 감지시 MAX7219 (8X8) 도트매트릭스 모듈에
디스플레이를 출력해 보는 프로젝트입니다

MAX7219 (8X8) 도트 매트릭스 모듈은 8-Digit LED 드라이버 MAX7219 칩
을 기반으로 제작된
8열 8행의 디스플레이 모듈 입니다
아두이노 나 AVR, PIC, STM 등의 마이크로 컨트롤러로 손쉽게 제어 가능하기 때문에 유용합니다
또한 입, 출력 인터페이스로 제작되어 여러개의 매트릭스 모듈을 연결해서 사용이 가능합니다

max7219.pdf
0.18MB

<8X8 매트릭스 모듈 이미지>

<8X8 매트릭스 모듈 상세사양>

IR 적외선 장애물 감지센서는 적외선 트랜스미터(송신기)와 리시버(수신기)로 구성되어 있으며
발사된 적외선이 물체에 맞고 돌아오는것을 수신기가 수신하여 장애물을 감지하게 되는 원리로 동작합니다
동작전압 3.3~5V 로 OUT은 디지털 출력이 가능합니다
아두이노등의 마이크로 컨트롤 보드에 연결해서 사용하기에 적합하며 근접센서로 활용할 수 있습니다
IR 적외선 송수신 소자가 달려있기 때문에 주변광 자연광 간섭이 없는 어두운 실내에서 테스트 가능합니다
포토 다이오드 센서는 동작전압 3.3~5V 로 OUT은 디지털&아날로그 출력이 가능합니다
장애물로 광(빛)을 차단해서 장애물을 감지하는 센서로 활용할 수 있습니다
광 다이오드 소자가 달려있기 때문에 일정량의 광(빛)이 있는 밝은 곳에서 테스트 가능합니다

사용된 부품

Arduino Uno R3 (Italy)
MAX7219 8X8 도트매트릭스 모듈

장애물 감지센서 모듈
포토 다이오드센서 모듈
미니 브래드보드
5V 액티브 부저
5mm LED
점퍼케이블

사용된 키트
아두이노 장애물 감지 도트 매트릭스 키트

구성 배선도 - 8X8 도트매트릭스 모듈 출력해 보기

구성 배선도 - IR 적외선 장애물 감지 센서를 사용해서 도트매트릭스 모듈 제어해 보기


구성 배선도 - IR 적외선 장애물 감지 센서를 사용해서 LED 제어해 보기

LedControl.zip
0.01MB
binary.zip
0.00MB


위 2개의 라이브러리는 필수로 설치가 필요합니다

라이브러리 추가 방법은 Arduino IDE 설치하기 포스팅을 참조해 주세요

사용된 예제소스 

Matrix.txt
0.00MB
Sensor Matrix_OX.txt
0.00MB
Sensor Matrix_SMILE.txt
0.00MB
Sensor Led.txt
0.00MB


주의사항
기본적으로 위 첨부된 2가지 라이브러리가 필수로 필요하며
MAX7219 8X8 도트 매트릭스 모듈
같은 경우 중국에서 생산되어 유통되는 여러가지 버전이 있기때문에
믿을수 없는 사이트에서 구매한 확인되지 않은 버전의 제품을 사용할 경우
LedControl 라이브러리와 맞지 않아 제대로 동작 되지 않을수 있습니다

 

첫번째 Matrix 예제는 아두이노로 간단하게 8X8 도트매트릭스 모듈의 출력 테스트를 해보는 예제입니다

#include "LedControl.h"
LedControl.h 라이브러리를 사용합니다

LedControl lc=LedControl(12,11,10,1);
10번핀은 CS, 11번핀은 CLK, 12번핀은 DIN 으로 배선합니다


void setup() {
lc.shutdown(0,false);
lc.setIntensity(0,8);
lc.clearDisplay(0);
}
8X8 도트매트릭스를 출력해 줍니다

void writeArduinoOnMatrix() 
void rows() 
void columns()

void single()
매트릭스를 행과열 그리고 1개씩 차례대로 출력해 줍니다


두번째 Sensor Matrix_OX 예제는 장애물 감지센서나 포토 다이오드 센서를 사용해서
장애물이 감지 되지 않았을때 (O표시)와 감지 되었을 때 (X표시) 8X8 도트릭스 모듈이 출력 되는 예제입니다 

#include "LedControl.h"
#include "binary.h"
위 2가지 라이브러리를 사용합니다

// PIN 3 = Sensor
// PIN 5 = Buzzer
// DIN = 8  // CS = 9 // CLK = 10
장애물 감지센서나 포토다이오드 센서는 3번핀
액티브 부저는 5번 핀으로 배선합니다
8X8 도트매트릭스 모듈 DIN은 8번, CS는 9번, CLK는 10번 핀으로 배선합니다

unsigned long delaytime=1000;
딜레이 타임입니다

byte ff[8]= {  
B00111100,
B01000010,
B10000001,
B10000001,
B10000001,
B10000001,
B01000010,
B00111100
};

byte ft[8]= {
B10000001,
B01000010,
B00100100,
B00011000,
B00011000,
B00100100,
B01000010,
B10000001};

위 부분은 8X8 도트매트릭스를 byte 로 세팅해 주는 부분입니다

val=digitalRead(buttonpin); //read the value of the sensor 
if(val == HIGH)
하단 부분에서 if 문을 사용할것이므로 장애물이 감지 되지 않았을 때 byte ff[8]
장애물이 감지되었을 때 byte ft[8] 로 2가지로 나눠서 세팅되게 됩니다

아래 링크의 LED Matrix Editor 사이트를 이용해서 다양한 모양을 btye로 변환할 수 있습니다
https://xantorohara.github.io/led-matrix-editor/

원하는 모양으로 매트릭스를 체크하고 Insert를 눌러서 아두이노 코드로 변환후 
As byte arrays 를 체크하면 바이트로 변환된 값을 얻을수 있습니다
테스트 할때 모양이 안 맞으면 좌우로 회전 시켜서도 변환값을 얻을수 있습니다 

LED Matrix Editor 사이트 는 구글에 검색하면 많은 사이트가 있으니 다른 사이트를 이용해도 됩니다

void setup() {
  lc.shutdown(0,false);
  lc.setIntensity(0,8);
  lc.clearDisplay(0);
  pinMode(buttonpin, INPUT); //Photodiode Sensor pin as input  
  pinMode(Buzzer, OUTPUT); // Buzzer pin as output
}
셋업에서 8X8 도트매트릭스 모듈을 출력하고, 센서와 부저역시 인식 시킵니다

void loop()
{
  val=digitalRead(buttonpin); //read the value of the sensor 
  if(val == HIGH)
 {
  lc.setRow(0,0,ff[0]);
  lc.setRow(0,1,ff[1]);
  lc.setRow(0,2,ff[2]);
  lc.setRow(0,3,ff[3]);
  lc.setRow(0,4,ff[4]);
  lc.setRow(0,5,ff[5]);
  lc.setRow(0,6,ff[6]);
  lc.setRow(0,7,ff[7]);
  digitalWrite(Buzzer,LOW);
루프에서 if문을 사용해서 장애물이 감지되지 않았을 때
byte ff[8] 이 도트 매트릭스에 출력 되고 부저가 LOW 로 꺼집니다


  else
  {
  lc.setRow(0,0,ft[0]);
  lc.setRow(0,1,ft[1]);
  lc.setRow(0,2,ft[2]);
  lc.setRow(0,3,ft[3]);
  lc.setRow(0,4,ft[4]);
  lc.setRow(0,5,ft[5]);
  lc.setRow(0,6,ft[6]);
  lc.setRow(0,7,ft[7]);
  digitalWrite(Buzzer,HIGH);
else로 그밖의 장애물이 감지 되었을
byte ft[8] 이 도트 매트릭스에 출력 되고 부저가 HIGH 로 켜집니다


  }delay(100);
}
딜레이 타임입니다

예제코드의 HIGH 를 LOW로 변경해 주거나 byte ff[8] , byte ft[8] 을 반대로 변경하여 수정해 주면
반대로 테스트 가능합니다

Sensor Matrix_SMILE 예제는 장애물이 감지되지 않았을때 (웃는얼굴)와
감지 되었을때 (찡그린얼굴) 8X8 도트릭스 모듈이 출력 되는 예제입니다
byte 부분만 LED Matrix Editor 사이트를 이용해서 바꿔주었고 배선 및 테스트는 동일합니다


세번째 Sensor Led 예제는 장애물 감지시 LED를 제어하는 예제입니다

int led = 3;
int sensor = 2;

void setup()
{
pinMode(led, OUTPUT);
pinMode(sensor, INPUT);
}

void loop()
{
if( digitalRead(sensor) == LOW )
digitalWrite(led, HIGH);
else
digitalWrite(led, LOW);

delay(100);
}
장애물 감지센서는 2번핀에 LED는 3번핀에 배선합니다
셋업에서 센서 입력값을 받아서 LED를 출력해 줍니다
루프에서 if 문을 사용해서 센서가 장애물을 감지하여 LOW 일때 LED가 HIGH로 켜집니다
else 그밖의 경우 LED는 LOW로 꺼집니다
예제코드의 HIGH와 LOW만 변경해 주면 반대로도 테스트 가능합니다 


프로젝트 동영상 - 8X8 도트매트릭스 모듈 출력해 보기


프로젝트 동영상 - HC-SR04 초음파 센서를 사용해서 거리에 따라 8X8 도트매트릭스 모듈 출력해 보기


프로젝트 동영상 - IR 적외선 장애물 감지 센서를 사용해서 LED 제어해 보기


이렇게 아두이노로 간단하게 8X8 도트매트릭스 모듈과 IR 장애물 감지센서 또는 포토 다이오드 센서를 사용해서
장애물 감지시 매트릭스 모듈에 자신이 원하는 다양한 모양을 출력할 수 있습니다

아래 링크의 LED Matrix Editor 사이트를 이용해서 다양한 모양을 btye로 변환할 수 있습니다

https://xantorohara.github.io/led-matrix-editor/

반응형

댓글