본문 바로가기
CHOI_Coding/Arduino

아두이노 7세그먼트(sagment) 숫자 예제

by choizun_ 2017. 8. 18.

Arduino 7Sagment 를 이용하여 1 ~ 9 숫자를 표시하는

예제를 진행 해보겠습니다.

세그먼트는 7개의 획으로 숫자나 문자를 나타낼 수 있는 표시장치로

FND (Flexible Numeric Display ) 라고도 합니다.


세그먼트는 엘레베이터 층수 , 전광판 , 디지털체중계 등에 사용됩니다.


세그먼트는 애노드 , 캐소드 타입으로 나뉘어 집니다.

애노드는 Acc 신호로 LED가 켜지며 캐소드는 GND신호로 LED가 켜집니다.

자신이 가지고 있는 세그먼트 모델명으로 구글에 검색을 해보면 데이터시트가 나오는데 

타입을 확인 후 실습을 하시길 바랍니다.


세그먼트는 10개의 단자가 있으며 상하단 가운데 단자는 타입에 따라 전원 GND , Vcc가 연결 됩니다.

알파벳 단자에 연결 할 때에는 직렬저항(200~1k오옴)을 연결한 후에 아두이노 핀에 연결하여야만 

과 전류에 의한 고장을 방지할 수 있습니다.



실습에 사용되는 부품 

아두이노r3 , 브레드보드 , 7세그먼트(5161BS) , 저항6개


516BS 7sagment


제가사용한 세그먼트는 516BS 모델로 애노드 타입입니다.

아래는 구글에 모델명을 검색하면 나오는 애노드 데이터시트 입니다.



간단하게 세그먼트에 대하여 알아봤으니 이제 아두이노와 연결하여 실습을 해보겠습니다.

처음으로 포토샵으로 작업을 하여 그려 보았습니다. 보기 쉽게 한다고 하였는데 잘 보일지 모르겠습니다.

사진이 잘 보이지 않는다거나 실습이 잘 안되신다면 문의 주세요 ^^;;


아래 사진과 같이 아두이노 , 세그먼트 , 저항을 이용하여 연결 하였습니다.

위에 4개 아래 4개는 아두이노 2 ~ 9번까지 연결 하였습니다.

가운대는 5v 에 하나만 연결 하시면 되겠습니다.

위 세그먼트에 아두이노 연결한 핀번호를 적어 두었습니다.

확인후 저항을 연결 하고 저항에서부터 핀으로 연결 하시면 되겠습니다.

위에 연결을 따라하시면 아래처럼 연결이 되고 번호가 출력이 되는걸 확인 하 실수있습니다.

이어서 실습코드를 보겠습니다.


( 왼쪽 저항만 연결 ) , ( 오른쪽 아두이노와 연결 후 실습 사진 )



실습 코딩

// 아래 코드는 애노드 타입의 7세그먼트를 실습하는 코드 입니다.
// 애노드는 LED의 핀에 LOW(1) 값을 보내도록 설정하고
// 캐소드 타입을 사용할 경우, HIGH(0) 값으로 설정합니다.
// 7세그먼트 각각 LED에 핀을 할당합니다. {A, B, C, D, E, F, G, H}
int segmentLEDs[] = {2, 3, 4, 5, 6, 7, 8, 9};
// 지정된 LED 개수
int segmentLEDsNum = 8;

// 각 숫자에 대한 LED 값 설정
// LED의 로직레벨을 LOW(1) 상태로 설정.
int digitForNum[10][8] = {
  {0, 0, 0, 0, 0, 0, 1, 1}, //0
  {1, 0, 0, 1, 1, 1, 1, 1}, //1
  {0, 0, 1, 0, 0, 1, 0, 1}, //2
  {0, 0, 0, 0, 1, 1, 0, 1}, //3
  {1, 0, 0, 1, 1, 0, 0, 1}, //4
  {0, 1, 0, 0, 1, 0, 0, 1}, //5
  {0, 1, 0, 0, 0, 0, 0, 1}, //6
  {0, 0, 0, 1, 1, 1, 1, 1}, //7
  {0, 0, 0, 0, 0, 0, 0, 1}, //8
  {0, 0, 0, 0, 1, 0, 0, 1}  //9
};

void setup() {
  // 7세그먼트 각각 LED에 연결된 핀을 OUTPUT으로 설정합니다.
  for (int i = 0 ; i < segmentLEDsNum ; i++) {
    pinMode(segmentLEDs[i], OUTPUT);
  }
}

void loop() {
  // 0부터 9까지 숫자를 순서대로 표시합니다.
  for (int i = 0 ; i < 10 ; i++) {    
    for (int j = 0 ; j < segmentLEDsNum ; j++) {
      digitalWrite(segmentLEDs[j], digitForNum[i][j]);
    }
    // 1초 동안 대기합니다.
    delay(1000);
  }
}


댓글