카테고리 없음

아두이노 우노에 의한 FND(Finite Numeric Display) 7 세그먼트 구동

coding art 2017. 3. 10. 18:37
728x90

FND는 Finite Numeric Display의 약어로서 여러 쪽의 7 세그먼트 디스플레이로 구성된다. 지난 번 블로그에서 소개했던 7세그먼트의 아두이노 배선에서는 기본적으로 10가닥에 달하는 엄청난 배선 량이 있음을 관찰했다.  사실 지난번 선보였던 7세그먼트의 10 가닥 배선 작업은 일반 아마츄어의 배선이 아니고 삼성전자 통신 분야에서 오랜 기간 동안 회로 시 제작 경험을 전문가의 솜씨임을 밝혀 둔다. 이 작품 시 제작을 아주 쉽게 성공적으로 수행하려면 사진 그대로 배선 색상 및 길이까지 똥일하게 따라하는 것이 제일 좋은 방법이라는 점을 밝힌다.



10가닥이 별 것 아닌 것으로 치부할 수 도 있겠지만 네이게이션 배선의 경우 GPS 센서 배선 4줄, 리튬 배터리 배선 2줄


도합 6줄이지만 실제 조립해보면 배선으로 인해 돌아가실 정도의 배선 양이라는 점을 느꼈을 것이다.

7 세그먼트의 배선이 이 정도라면 7 세그먼트 2 쪽이나 4쪽 또는 그 이상으로 FND가 구성된다면 그 배선 량은 감당이 불가능하다고 봐야 한다.



아두이노 응용에서 시리얼 통신을 통해 정보를 주고받는 것이 흔한 사실이라면 이 문제를 해결하기 위한 방법은 FND에 적절한 수준의 통신 기능 및 7 세그먼트 구동회로를 포함하는 PCB 형태로 구성하는 것이다.

여러 개의 7세그먼트 배선 회로를 구성하는 작업은 특히 아두이노를 통해 컴퓨터 코딩을 배우는 이들에게 아무런 도움이 되지 않는 작업임에 유의하자.


3줄 짜리 FND의 배선 방법은 대단히 간단하다. 2줄은 전원 1줄은 TX에 연결하면 된다. 전원은 3V3이나 5V  배선 어느 것이나 가능하다. 여기서는 앞으로 NodeMCU에서 사용하기 위해 3V3으로 하였으며 동영상을 찍기에 충분한 밝기를 주었다.

4쪽으로 구성된 FND의 프로그램 구성을 살펴보자. setup()에서 통신속도를 9600으로 설정한다. loop()에서 첫 번째 명령으로서 clear 명령에 해당하는 Seril.print()을 수행한다. 이로서 FND가 모두 OFF 상태가 된다.

0123 4567 89Ab CdEF를 출력한다. 대문자 B 와 D는 8 과 0과 의 혼동 때문에 소문자 b 와 d 만 허용된다.
- 부호도 출력가능하다.
숫자 출력의 경우 아래와 같이 10진, 2진, 8진 및 16진 출력이 가능하다. 단 2진의 경우 8개의 세그먼트가 필요하므로 현재 4개의 세그먼트에서 하위 4자리만 출력된다.

  Serial.println(78, DEC); delay(1500); // 10진 "78"
  Serial.println(78, BIN); delay(1500); // 2진"1001110"
  Serial.println(78, OCT); delay(1500); // 8진 "116"
  Serial.println(78, HEX); delay(1500); // 16진 "4E"

소숫점 이하 부분 출력에서는 자릿 수를 지정하는데 그 아랫 자리에서 반올림이 이루어진다. 즉 1.53456을 한자리만 출력하는 경우 2가 출력된다.


  Serial.println(1.23456, 0); delay(1500); //  "1"
  Serial.println(1.53456, 0); delay(1500); //  "2" 반올림
  Serial.println(1.23456, 2); delay(1500); //  "1.23"
  Serial.println(1.23456, 3); delay(1500); //  "1.235"반올림


간단한 3줄 배선과 아래의 프로그램을 실행하여 보자. 첨부된 동영상을 참조하고 스스로 디스플레이 되는 결과를 확인해 보도록 한다.


Arduino_FND_4_segments_01


float fdata;
long int idata;

void setup() {

  // initialize serial communications at 9600 bps:
  Serial.begin(9600);
}


void loop() {

// Clear FND
  Serial.println(); // 개행코드(CR)는 FND를 클리어
  delay(10000);

  Serial.println("0123");
  delay(2000);
  Serial.println("4567");
  delay(2000);
  Serial.println("89AB");
  delay(2000);
  Serial.println("CDEF");
  delay(2000);
  Serial.println("-123");
  delay(2000);

// println();은 십진수(DEC), 이진수(BIN), 8진수(OCT), 16진수(HEX)의 형식으로 출력가능

  Serial.println(78, DEC); delay(1500); // gives "78"
  Serial.println(78, BIN); delay(1500); // gives "1001110"
  Serial.println(78, OCT); delay(1500); // gives "116"
  Serial.println(78, HEX); delay(1500); // gives "4E"

    // 소소점 수는 소수점 아래의 표시 개수를 지정할 수 있음

  Serial.println(1.23456, 0); delay(1500); // gives "1"
  Serial.println(1.53456, 0); delay(1500); // gives "1"
  Serial.println(1.23456, 2); delay(1500); // gives "1.23"
  Serial.println(1.23456, 3); delay(1500); // gives "1.235"반올림

 
}//프로그램 끝