족구 번호판 하드웨어 만들기
일단 5인치 7 Segment를 구매 했습니다.
[문제점] 전격 전압이… ㅜㅜ 5V가 아니네요.. 16V~ 24V 까지 필요합니다.. 전원때문에 여기서 막혀 있네요 ㅜㅜ
어떻게 된게 제대로 된 Data sheet도 없고 ㅜㅜ
Datasheet1
Datasheet2
=> 전원문제 일단 해결.7segment 숫자는 24V에서 동작하네요.. 허허. 저항은 1K를 사용했습니다.
오른쪽 아래 DOT은 5V로 동작하네요. 12V 연결하니까 퍽하고 꺼집니다.


7 segment의 경우 common anode, common cathode 두가지 종류가 있습니다.
저 같은 경우는 anode를 샀습니다.
흠.. 두개가 다른건 anode의 경우 5v를 7segment에 인가해 주고 8개의 핀에 GND로 연결해서 동작을 시키는겁니다.
cathode의 경우 GND에 7segment를 연결하고 8개의 핀을 5V를 주어서 동작을 시킵니다.
자세한 설명은 아래 링크에서 참고 하시길 바랍니다.
http://www.electronics-tutorials.ws/blog/7-segment-display-tutorial.html
arduino하나로 4개의 7segment를 컨트롤 해야해서 74ls47 을 사용합니다. [TM1637 도 써야할듯한데.. ㅜㅜ]
4개의 핀으로 8개의 핀을 제어 가능하게 되죠
http://www.electronics-tutorials.ws/counter/bcd-counter-circuit.html

http://iamtechnical.com/bcd-7-segment-common-anode-display-decoder-74ls47-display-decimal-1

움.. 혹시 cathode를 사용하실 분들은 4511 이나 7447을 검색하시면 될듯 합니다.
https://www.youtube.com/watch?v=CPHWMzTxNkk
그럼 이제.. 슬슬 만들어 볼까 합니다. ^^;
일단 7 Segment 회로도에 문제가 있습니다. 6<->10,7<->9 이 바뀌었습니다. 회로 연결할때 주의 하시길 바랍니다.
저항은 1K옴을 사용했습니다.

(이글루스 파일 첨부, 서버 종료로 접근 불가)5inch\_7segment.zip
0부터 9까지 출력하는 sample program
// the setup routine runs once when you press reset:
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
}
void print_number(int num)
{
switch(num){
case 0 :
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
break;
case 1 :
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
break;
case 2 :
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
break;
case 3 :
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
break;
case 4 :
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
break;
case 5 :
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
break;
case 6 :
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
break;
case 7 :
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
break;
case 8 :
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
break;
case 9 :
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
break;
default:
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
break;
}
}
// the loop routine runs over and over again forever:
void loop() {
int i = 0;
for(i =0; i<10; i++)
{
print_number(i);
delay(1000);
}
}
(이글루스 파일 첨부, 서버 종료로 접근 불가)Blink.zip
이제.. 4개의 LED 동시 제어를 만들어야지요..이건 빵판으로 진행하기 힘들어서 땜질을 해야 할듯 합니다. ^^;
아.. GPIO PIN이 모자를것 같으나.. Analog pin도 digital처럼 쓸수 있답니다. 그래서 핀은 모자르지 않아요.링크1, 링크2
buzzer 만들기
4개 LCD를 모두 연결하고 HC-06도 연결했다. 전원은 11.4V 짜리 두개 연결해서 사용 했다.케이스가 문제였는데 아래 싸이트를 이용 레이져 커터를 사용해서 나무로 외관을 만들었다. http://www.makercase.com/
동작 영상은.. 아래 첨부한다.
최종코드
// the setup routine runs once when you press reset:
//first 7 segment port define.
#define A_1 2
#define A_2 3
#define A_3 4
#define A_4 5
//first 7 segment port define.
#define B_1 6
#define B_2 7
#define B_3 8
#define B_4 9
//first 7 segment port define.
#define C_1 10
#define C_2 11
#define C_3 12
#define C_4 13
//first 7 segment port define.
#define D_1 A0
#define D_2 A1
#define D_3 A2
#define D_4 A3
#define BELL A5
void setup() {
Serial.begin(9600);
Serial.println("AT+NAMEJOCKDONG");
pinMode(A_1, OUTPUT);
pinMode(A_2, OUTPUT);
pinMode(A_3, OUTPUT);
pinMode(A_4, OUTPUT);
pinMode(B_1, OUTPUT);
pinMode(B_2, OUTPUT);
pinMode(B_3, OUTPUT);
pinMode(B_4, OUTPUT);
pinMode(C_1, OUTPUT);
pinMode(C_2, OUTPUT);
pinMode(C_3, OUTPUT);
pinMode(C_4, OUTPUT);
pinMode(D_1, OUTPUT);
pinMode(D_2, OUTPUT);
pinMode(D_3, OUTPUT);
pinMode(D_4, OUTPUT);
pinMode(BELL, OUTPUT);
digitalWrite(A_1, LOW);
digitalWrite(A_2, LOW);
digitalWrite(A_3, LOW);
digitalWrite(A_4, LOW);
digitalWrite(B_1, LOW);
digitalWrite(B_2, LOW);
digitalWrite(B_3, LOW);
digitalWrite(B_4, LOW);
digitalWrite(C_1, LOW);
digitalWrite(C_2, LOW);
digitalWrite(C_3, LOW);
digitalWrite(C_4, LOW);
digitalWrite(D_1, LOW);
digitalWrite(D_2, LOW);
digitalWrite(D_3, LOW);
digitalWrite(D_4, LOW);
}
void play_bell(int SCALE, int duration)
{
for(long i = 0; i<1000000; i=i+SCALE)
{
digitalWrite(BELL,1);
delayMicroseconds(SCALE/2);
digitalWrite(BELL,0);
delayMicroseconds(SCALE/2);
}
delay(duration);
}
void print_number1(int num)
{
switch(num){
case 0 :
digitalWrite(A_1, LOW);
digitalWrite(A_2, LOW);
digitalWrite(A_3, LOW);
digitalWrite(A_4, LOW);
break;
case 1 :
digitalWrite(A_1, HIGH);
digitalWrite(A_2, LOW);
digitalWrite(A_3, LOW);
digitalWrite(A_4, LOW);
break;
case 2 :
digitalWrite(A_1, LOW);
digitalWrite(A_2, HIGH);
digitalWrite(A_3, LOW);
digitalWrite(A_4, LOW);
break;
case 3 :
digitalWrite(A_1, HIGH);
digitalWrite(A_2, HIGH);
digitalWrite(A_3, LOW);
digitalWrite(A_4, LOW);
break;
case 4 :
digitalWrite(A_1, LOW);
digitalWrite(A_2, LOW);
digitalWrite(A_3, HIGH);
digitalWrite(A_4, LOW);
break;
case 5 :
digitalWrite(A_1, HIGH);
digitalWrite(A_2, LOW);
digitalWrite(A_3, HIGH);
digitalWrite(A_4, LOW);
break;
case 6 :
digitalWrite(A_1, LOW);
digitalWrite(A_2, HIGH);
digitalWrite(A_3, HIGH);
digitalWrite(A_4, LOW);
break;
case 7 :
digitalWrite(A_1, HIGH);
digitalWrite(A_2, HIGH);
digitalWrite(A_3, HIGH);
digitalWrite(A_4, LOW);
break;
case 8 :
digitalWrite(A_1, LOW);
digitalWrite(A_2, LOW);
digitalWrite(A_3, LOW);
digitalWrite(A_4, HIGH);
break;
case 9 :
digitalWrite(A_1, HIGH);
digitalWrite(A_2, LOW);
digitalWrite(A_3, LOW);
digitalWrite(A_4, HIGH);
break;
default:
digitalWrite(A_1, LOW);
digitalWrite(A_2, LOW);
digitalWrite(A_3, LOW);
digitalWrite(A_4, LOW);
break;
}
}
void print_number2(int num)
{
switch(num){
case 0 :
digitalWrite(B_1, LOW);
digitalWrite(B_2, LOW);
digitalWrite(B_3, LOW);
digitalWrite(B_4, LOW);
break;
case 1 :
digitalWrite(B_1, HIGH);
digitalWrite(B_2, LOW);
digitalWrite(B_3, LOW);
digitalWrite(B_4, LOW);
break;
case 2 :
digitalWrite(B_1, LOW);
digitalWrite(B_2, HIGH);
digitalWrite(B_3, LOW);
digitalWrite(B_4, LOW);
break;
case 3 :
digitalWrite(B_1, HIGH);
digitalWrite(B_2, HIGH);
digitalWrite(B_3, LOW);
digitalWrite(B_4, LOW);
break;
case 4 :
digitalWrite(B_1, LOW);
digitalWrite(B_2, LOW);
digitalWrite(B_3, HIGH);
digitalWrite(B_4, LOW);
break;
case 5 :
digitalWrite(B_1, HIGH);
digitalWrite(B_2, LOW);
digitalWrite(B_3, HIGH);
digitalWrite(B_4, LOW);
break;
case 6 :
digitalWrite(B_1, LOW);
digitalWrite(B_2, HIGH);
digitalWrite(B_3, HIGH);
digitalWrite(B_4, LOW);
break;
case 7 :
digitalWrite(B_1, HIGH);
digitalWrite(B_2, HIGH);
digitalWrite(B_3, HIGH);
digitalWrite(B_4, LOW);
break;
case 8 :
digitalWrite(B_1, LOW);
digitalWrite(B_2, LOW);
digitalWrite(B_3, LOW);
digitalWrite(B_4, HIGH);
break;
case 9 :
digitalWrite(B_1, HIGH);
digitalWrite(B_2, LOW);
digitalWrite(B_3, LOW);
digitalWrite(B_4, HIGH);
break;
default:
digitalWrite(B_1, LOW);
digitalWrite(B_2, LOW);
digitalWrite(B_3, LOW);
digitalWrite(B_4, LOW);
break;
}
}
void print_number3(int num)
{
switch(num){
case 0 :
digitalWrite(C_1, LOW);
digitalWrite(C_2, LOW);
digitalWrite(C_3, LOW);
digitalWrite(C_4, LOW);
break;
case 1 :
digitalWrite(C_1, HIGH);
digitalWrite(C_2, LOW);
digitalWrite(C_3, LOW);
digitalWrite(C_4, LOW);
break;
case 2 :
digitalWrite(C_1, LOW);
digitalWrite(C_2, HIGH);
digitalWrite(C_3, LOW);
digitalWrite(C_4, LOW);
break;
case 3 :
digitalWrite(C_1, HIGH);
digitalWrite(C_2, HIGH);
digitalWrite(C_3, LOW);
digitalWrite(C_4, LOW);
break;
case 4 :
digitalWrite(C_1, LOW);
digitalWrite(C_2, LOW);
digitalWrite(C_3, HIGH);
digitalWrite(C_4, LOW);
break;
case 5 :
digitalWrite(C_1, HIGH);
digitalWrite(C_2, LOW);
digitalWrite(C_3, HIGH);
digitalWrite(C_4, LOW);
break;
case 6 :
digitalWrite(C_1, LOW);
digitalWrite(C_2, HIGH);
digitalWrite(C_3, HIGH);
digitalWrite(C_4, LOW);
break;
case 7 :
digitalWrite(C_1, HIGH);
digitalWrite(C_2, HIGH);
digitalWrite(C_3, HIGH);
digitalWrite(C_4, LOW);
break;
case 8 :
digitalWrite(C_1, LOW);
digitalWrite(C_2, LOW);
digitalWrite(C_3, LOW);
digitalWrite(C_4, HIGH);
break;
case 9 :
digitalWrite(C_1, HIGH);
digitalWrite(C_2, LOW);
digitalWrite(C_3, LOW);
digitalWrite(C_4, HIGH);
break;
default:
digitalWrite(C_1, LOW);
digitalWrite(C_2, LOW);
digitalWrite(C_3, LOW);
digitalWrite(C_4, LOW);
break;
}
}
void print_number4(int num)
{
switch(num){
case 0 :
digitalWrite(D_1, LOW);
digitalWrite(D_2, LOW);
digitalWrite(D_3, LOW);
digitalWrite(D_4, LOW);
break;
case 1 :
digitalWrite(D_1, HIGH);
digitalWrite(D_2, LOW);
digitalWrite(D_3, LOW);
digitalWrite(D_4, LOW);
break;
case 2 :
digitalWrite(D_1, LOW);
digitalWrite(D_2, HIGH);
digitalWrite(D_3, LOW);
digitalWrite(D_4, LOW);
break;
case 3 :
digitalWrite(D_1, HIGH);
digitalWrite(D_2, HIGH);
digitalWrite(D_3, LOW);
digitalWrite(D_4, LOW);
break;
case 4 :
digitalWrite(D_1, LOW);
digitalWrite(D_2, LOW);
digitalWrite(D_3, HIGH);
digitalWrite(D_4, LOW);
break;
case 5 :
digitalWrite(D_1, HIGH);
digitalWrite(D_2, LOW);
digitalWrite(D_3, HIGH);
digitalWrite(D_4, LOW);
break;
case 6 :
digitalWrite(D_1, LOW);
digitalWrite(D_2, HIGH);
digitalWrite(D_3, HIGH);
digitalWrite(D_4, LOW);
break;
case 7 :
digitalWrite(D_1, HIGH);
digitalWrite(D_2, HIGH);
digitalWrite(D_3, HIGH);
digitalWrite(D_4, LOW);
break;
case 8 :
digitalWrite(D_1, LOW);
digitalWrite(D_2, LOW);
digitalWrite(D_3, LOW);
digitalWrite(D_4, HIGH);
break;
case 9 :
digitalWrite(D_1, HIGH);
digitalWrite(D_2, LOW);
digitalWrite(D_3, LOW);
digitalWrite(D_4, HIGH);
break;
default:
digitalWrite(D_1, LOW);
digitalWrite(D_2, LOW);
digitalWrite(D_3, LOW);
digitalWrite(D_4, LOW);
break;
}
}
// the loop routine runs over and over again forever:
void loop() {
char r_char = '0';
char r_score[4] = {0,};
int i = 0;
int left_score = 0;
int right_score = 0;
if(Serial.available())
{
i =0 ;
r_char = 0;
r_score[0] = 0;
r_score[1] = 0;
r_score[2] = 0;
r_score[3] = 0;
if(Serial.read() == 'S'){
play_bell(1012, 40);
while(1)
{
if(Serial.available())
{
r_char = Serial.read();
if(r_char == 'E')
break;
r_score[i] = r_char;
i++;
//Serial.print(r_char-48);
}
}
}
print_number4(r_score[0]-48);
print_number3(r_score[1]-48);
print_number2(r_score[2]-48);
print_number1(r_score[3]-48);
}
}
소리 증폭 회로TR를 사용해서 활용http://www.electronics-tutorials.ws/waveforms/astable.html
BC547로 하니까 된다.. ㅋㅋㅋ
\