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 |