3D프린터와 아두이노/아두이노

아두이노 세븐-세그먼트에 대해

메카럽 2020. 10. 8. 08:36

안녕하세요. 메카럽입니다.

이번 포스팅에서는 세븐-세그먼트에 대해 알아볼 텐데요. 이름만 들어서는 생소하지만 우리 일상생활에서 너무나도 자주 쓰여지고 있는 부품중에 하나입니다.

세븐-세그먼트는 부저보다 더 흔한 소자로 디지털 시계, 온도계 등에 쓰이는 숫자 표기용 디스플레이입니다. 일곱 개의 LED가 하나의 숫자를 만들어 냅니다. 맨 위의 LED부터 시계 방향으로 A~G LED로 구성되며 점은 DP를 포함해서 8개를 쓰기도 합니다.

세븐-세그먼트

세븐-세그먼트는 LED로 구성되어 있는데, +극과 -극을 어떻게 묶느냐에 따라 커먼 애노드(Common Anode) 타입과 커먼 캐소드(Common Cathode) 타입으로 나뉩니다. 일곱 개의 LED는 모두 동일한 전원을 사용하므로 +극이나 -극을 하나로 묶어 간소화할 수 있으며, 묶여있지 않은 단자 하나에 신호를 전달하여 LED를 켜고 끄는 형태로 구성됩니다. 커먼 애노드타입 세븐-세그먼트는 +극이 모두 묶여있으므로 전원을 공통으로 묶고, 커먼 캐소드 타입은 GND를 공통으로 묶습니다.

커먼 애노드 타입과 커먼 캐소드 타입의 세븐-세그먼트 회로구성

커먼 애노드 타입은 -단자가 신호선에 연결되어 있으므로 LED를 켜려면 LOW 신호를 주어야 하고, 커먼 캐소드 타입은 +단자가 신호선에 연결되어 있으므로 LED를 켜려면 HIGH 신호를 인가합니다.

세븐-세그먼트의 개별 LED 제어용 전류가 충분하다면 커먼 캐소드 타입을 써도 무방하고, 그렇지 않다면 LOW 신호로 제어할 수 있는 커먼 애노드 타입이 적절할 것입니다. 각각의 타입에 대한 ON-OFF 진리표를 다음표에 나타내었습니다.

  HIGH LOW
커먼 애노드 타입 1 0
커먼 캐소드 타입 0 1

이제 아두이노 우노로 세븐-세그먼트를 제어하여 숫자를 만들어보겠습니다.

준비물 : 아두이노 우노, 세븐-세그먼트, 저항, 점퍼선

세븐-세그먼트와아두이노 우노 연결

아두이노 우노의 연결하며 세븐-세그먼트 A~G단자에 150Ω~330Ω 정도의 저항을 달아봅니다. 과전류로 LED가 파손되는 것을 막아줍니다. 이제 세븐-세그먼트의 A~G 단자에 연결된 LED 중 어떤 것을 켜고 끄냐에 따라 디스플레이 되는 숫자가 달라집니다. 이것을 표로 나타내면 아래와 같습니다.

세븐-세그먼트 진리표

다음은 커먼 애드노 타입의 세븐-세그먼트를 사용하여 0부터 9까지의 숫자를 표시하는 예제입니다. 스케치 컴파일 후 업로드하면 세븐-세그먼트의 LED가 0에서 9까지 1초 간격으로 변화하는 것을 확인할 수 있습니다.

int segmentLEDs[ ] = {2,3,4,5,6,7,8, 9};
int segmentLEDsNum = 8;
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( )
{
 for (int i = 0; i < segmentLEDsNum;i++)
  {
   pinMode(segmentLEDs[i], OUTPUT);
  }
}

void loop( )
{
 for (int i = 0; i < 10; i++)
  {
   for (int j = 0; j < segmentLEDsNum; j++)
   {
    digitalWrite(segmentLEDs[j], digitForNum[i][j]);
   }
 delay(1000);
 }
}

 

728x90