달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2016. 2. 8. 21:50

디지털 시계 작품/and..2016. 2. 8. 21:50

1. 멀티 LED로 투 칼라 세븐 세그먼트 만들기

아래의 멀티 LED를 사용하여 투 칼라 세븐세그먼트를 직접 만들었습니다.


이 멀티 LED는 중간에 가장 긴부분2에 -극을 연결한 다음, 1에 +를 연결하면 빨간색이 3에 +를 연결하면 초록색이 나옴니다.

이 멀티 LED를 이용하여 시험적으로 세븐세그 먼트를 만들어 보았습니다.

모든 세그먼트의 빨강(1)은 빨강끼리 묶고 초록(3)은 초록끼리 묶었습니다. 그러면 2개의 핀이 생김니다. 이 2개의 핀중에 어떤 핀을 선택하여 +를 주느냐에 따라 색깔이 결정 되게 됩니다.

그 다음 세븐세그먼트와 같이 abcdefg로 만들기 위해서 두 개씩 공통 캐소드를 묶어 줌니다. 그러면 7개의 핀이 생김니다. 이 7개의 핀 중에서 어떤 핀에 -를 주느냐에 따라 abcdefg중 어떤 부분이 켜지는지 결정 됩니다.



2. 시계 표시부 만들기

이런 기본적인 원리를 이용하여 세븐 세그먼트 6개를 만들어서 시,분,초를 만들었습니다.  
그래서 우선 멀티 LED를 다 박았어요.
 

6개의 각 세븐 세그먼트에는 빨강과 초록을 결정하는 2개의 핀이 있잖아요? 그리고 세븐 세그먼트 6개에 시, 분, 초 사이에 점이 2쌍 있으니까 총 빨강핀 8개 초록핀 8개 입니다.

이 색깔을 제어하는 데 16개의 핀이 드는 데, 핀 수를 3개로 줄이기 위해서 74595시프트 레지스터를 두개 사용하였습니다.

 

7447BCD/세븐 세그먼트 디코터를 6개 사용하여 시, 분, 초를 BCD로 제어할 수 있도록 하였습니다.

 

74157멀티 플렉서를 6개 사용하여 시, 분, 초 데이터를 2종류씩 넣을 수 있도록 하였습니다. 이 기능을 쓴 이유는 하나의 디스플레이에서 현재 시간과 알람 설정 시간 둘다를 볼 수 있도록 하기 위해서 추가한 기능 입니다. 하지만 알람 기능은 시간이 없어서 못 만들었기 때문에 하드웨어 적으로는 이 기능이 들어있었지만 실제로 사용은 못 했죠 ㅠㅜ 시간이 있을 때 꼭! 알람기능을 넣을 꺼에요!!

멀티 플렉서의 기능은 아래에 설명 해놨습니다.

 


솔직히 표시부 작업이 멀티 LED가 총130개가 들었는데 이 것들이 각각 발이 3개씩 있으니까 완전 개고생했습니다. ㅋㅋㅋㅋ

근데 하고 나니 뿌듯뿌듯;;;

표시부 만든 과정 동영상을 만들었습니다. 뿌듯뿌듯 ㅋㅋ

 


 

3. 시계 표시부 테스트 하기

표시부의 세븐 세그먼트를 하나씩을 만들면서 테스트를 해야합니다.

그래야 에러가 나면 어디서 삐꾸나 났는 지 쉽게 찾아 낼 수 있으니까요.

분명히 개별적으로 다 테스트된 멀티LED를 사용했지만 납땜 하고 나니 안되는 LED를 제거하기는 정말 힘들어요ㅜㅠ



그래서 저는 세븐 세그먼트 하나를 완성할 때마다 아두이노를 사용해서 잘 되는지 테스트를 하였습니다.



테스트 하기 위해 사용한 아두이노 코드는 밑에것 이에요.


const int DS = 2;

const int SH_CP = 3;

const int ST_CP = 4;

const int pin[4] = {8,9,10,11};

 

void setup()

{

  pinMode(DS, OUTPUT);

  pinMode(SH_CP, OUTPUT);

  pinMode(ST_CP, OUTPUT);
  for(int i=0; i<4; i++)
  {pinMode(pin[i], OUTPUT);}
}

 

void loop()

{

//0~10까지 자작 세그먼트에 표시
  for(int i=0; i<10; i++){
  update74595(0xFF, 0x00); //표시부의 색깔 핀으로 들어감
  outPin(i); //표시부의 데이터 핀으로 들어감
  delay(500);
  }

 

//다른 색으로 0~10까지 자작 세그먼트에 표시
  for(int i=0; i<10; i++){
  update74595(0x00, 0xFF); //표시부의 색깔 핀으로 들어감
  outPin(i); //표시부의 데이터 핀으로 들어감
  delay(500);
  }
}

void outPin(int num)//십진수를 이진수 출력으로 바꿔줌
{
  for(int i=0 ; i<4; i++){
  boolean oneBit = bitRead(num, i);
  digitalWrite(pin[i], oneBit);
  }
}

void update74595(int data1, int data2) //data1과 data2는 색깔이 다름.
{

  digitalWrite(ST_CP, LOW);

  shiftData(DS, SH_CP, data1 , data2);

  digitalWrite(ST_CP, HIGH);//rising edge on storage register

}

 

void shiftData(int DS, int SH_CP, int data1, int data2)

{

  for(int i=7; i>=0; i--)

  {

    digitalWrite(SH_CP, LOW);

    boolean oneBit = bitRead(data2, i);

    digitalWrite(DS, oneBit);

    digitalWrite(SH_CP, HIGH);//rising edge on shift register

  }
 for(int i=7; i>=0; i--)

  {

    digitalWrite(SH_CP, LOW);

    boolean oneBit = bitRead(data1, i);

    digitalWrite(DS, oneBit);

    digitalWrite(SH_CP, HIGH);//rising edge on shift register

  }
} 



4. 시간 제어





5. 케이스 제작 및 완성

'












 


'작품 > and..' 카테고리의 다른 글

라인 트레이서  (0) 2016.02.08
자동차 백 라이트  (0) 2016.02.08
빛 감지 전자 주사위  (0) 2016.02.08
레이저 보안 경보 장치  (0) 2016.02.08
무선 전류 감지기  (0) 2016.02.08
:
Posted by youjin.A