본문 바로가기
대한상공회의소 스마트팩토리 교육/IoT 디바이스 개발

[IoT 디바이스 개발] 아두이노«수업-7» : FND / Dot Matrix /3-Color LED

by 나는영하 2022. 2. 3.

※ 주의사항 

본 블로그는 수업 내용을 바탕으로 제가 이해한 부분을 정리한 블로그입니다.
본 내용을 참고로만 보시고, 틀린 부분이 있다면 지적 부탁드립니다!

감사합니다😁

 

안녕하세요!!

오늘은 아래와 같은 내용을 확인해보겠습니다.

 

FND 모듈

Dot Matrix

3-Color LED


1. FND

1-1. 1Digit FND

1) 기본 회로도 및 핀맵

FND 모듈(좌) / FND 회로도(중) / FND 핀 번호(우)

- FND 모듈은 '7-세그먼트'로 불리기도 한다.

- 쉽게 말해 숫자 8모양으로 7개의 LED가 구성되어있고, 각각의 LED 점등 위치에 따라 숫자 및 문자를 표기한다.

- FND 모듈 제작사나 모델에 따라 공통 Anode Type공통 Cathode Type으로 나뉜다.

- 공통 단자가 Cathode Type(실습용 FND)일 경우에 공통 단자에 LOW를 주고 각 단자에 HIGH를 주면 LED가 점등된다.

 

2) 코드

3) 코드 설명

Line 1~13 : 숫자 0 부터 9를 표시하기 위해 각 LED가 점등되어야 하는 위치를 Byte형 2차원 배열로 저장

Line 15 ~ 20 : setup문, 모든 핀을 OUTPUT으로 설정하고 모든 LED를 소등 상태로 초기 설정

Line 21 ~ 26 : loop문, FND 함수를 1초에 한번씩 반복해서 수행

Line 27 ~ 31 : FND 함수부, 해당 숫자를 FND에 표시하기 위해 a~g에 해당하는 LED를 점등

 

4) 응용 예제 

- 푸시버튼 2개를 사용해서 업다운 카운터 제작

- 푸시버튼의 값을 읽어오는 if문에서 설정 범위(0~9)를 넘어서면 각각 최솟값 0 또는 최댓값 9를 출력하도록 설정

 

1-2. 4-Digit FND

1) 기본 회로도 및 사진

- 4-Digit FND는 위의 회로도와같이 1-Digit FND가 4개가 붙어있는 형식으로, Common Cathode Type 기준 각각의 anode 핀이 7개인 점은 동일하나(dp 포함 8개 pin) Cathode쪽 핀이 D1~D4까지 총 4개의 pin이 존재한다.

- 왼쪽부터 D1~D4를 통해 사용하고자하는 FND의 Cathode에 LOW를 주면서 LED를 제어한다.

 

2) 코드 

2개의 PUSH BUTTON과 4-Digit FND를 사용한 UP&DOWN 카운터 코드

- 몫과 나머지 연산자('/' , '%')를 활용해서 일의자리부터 천의자리까지 카운터를 하는 과정(Line 48 ~ 72)이 포인트!!

 


 

 

2. Dot Matrix

2-1. 회로도

※ 회로 결선시 주의사항

- 도트 매트릭스의 핀 순서대로 ROW, COL이 모여있는것이 아니다. 

즉, 한쪽핀은 행, 한쪽핀은 열이 모여있는 것이 아니라 뒤죽박죽 섞여있음!

- 실습용 도트매트릭스는 ROW(행)쪽이 공통 Anode Type으로 LED를 점등시킬려면 ROW쪽은 HIGH, COL 쪽은 LOW를 주어야 한다.

- 도트매트릭스에서 상단 우측의 사진처럼 가운데 살짝 티어나와있는 부분이 1~8번 핀에 해당된다.

 

2-2. 기본 코드(동작)

Line 4 : 1번핀부터 16번핀까지 아두이노에 연결되어있는 핀 번호를 1차원 배열함수로 선언

Line 5 : 도트 매트릭스의 1행부터 8행까지에 해당되는 아두이노 핀 번호를 순서대로 나열

Line 6 : 도트 매트릭스의 1열부터 8열까지에 해당되는 아두이노 핀 번호를 순서대로 나열

 

2-3. 응용 예제-1(하트 모양)

- 전역함수 선언부나 setup 함수부는 기초 코드와 동일함으로 생략

- clear 함수를 만들어서 각 행의 led 점등이 끝나면 리셋을 수행해줌

→ WHY? 리셋을 안하면 다음 행에서 점등되어야할 LED가 기존에 점등되었던 LED와 중복될 수 있음

 

2-4. 응용 예제-2(비트 연산자 사용)

1) 비트연산자 설명

- 기존에는 각 도트에 해당되는 LED의 좌표를 직접 찾아서 점등을 시켰다면,

이번에는 비트이동연산과 and연산을 통해 코드를 좀더 간단하게 변경해보겠습니다.

 

- 2진수 "1000 0000"에 해당되는 값(=0x80, 16진수 표현)을 오른쪽으로 1비트씩 7번 이동시켜서 and연산을 통해 점등하고자 하는 열을 찾아 값을 주는 방식

(기존에 점등시키고자 하는 열은 pattern[] 배열에 저장시키고 0x80을 1비트씩 이동시켜 and연산을 하면 점등하고하 자는 열의 값이 1이된다)   

 

2) 코드

- loop 함수부에 총 4개의 for문이 존재합니다.

- 첫번째 for문(Line37)은 0부터 숫자 9까지를 표현하는 for문 입니다.

- 두번째 for문(Line38)은 각 숫자가 오래 점등되도록 하기위한 for문 입니다.

a의 반복값을 높게하면 더 오래 점등됩니다. 점등시간 : 2ms * 8 * 20 = 320ms

- 세번째 for문(Line39)은 도트 매트릭스의 행을 나타내기 위한 for문 입니다.

- 네번쨰 for문(Line41)은 비트연산과 매트릭스의 열을 나타내기 위한 for문 입니다.

and연산에 사용된 128은 16진수(0x80)의 10진수 표현입니다.(0x80으로 적어도 무방)

 


 

3. 3-Color LED

3-1. 코드 및 기본동작

- RED, GREEN, BLUE 정수형 변수를 만들어서 0~255 사이의 난수를 입력

- 아두이노의 PWM을 통해 AnalogWrtite로 해당값을 R, G, B LED에 각각 출력

- 인간의 눈으로는 판단하기 힘들지만 이론적으로 약 1600만가지(트루컬러) 색상 출력 가능
256 * 256 * 256 = 16,777,216 

댓글