재료

  • USB 케이블 1개
  • 저항 8개
  • 브래드 보드 1개
  • 점프와이어 10개
  • 아두이노 우노 1개
  • 7 segment 1개

 이번에 진행할 프로젝트는 7개의 LED를 가지고 LED가 표현하지 못했던 다양한 정보를 비교적 쉽게 표현이 가능한 7 segment를 이용합니다. 7 segment는 들어보지 못했어도 일상생활의 다양한 곳에서 사용되고 있어서 보셨을 것 같은데요, 그 예로 우리가 매일 타고 다니는 엘리베이터 숫자판 등이 있습니다. 이런 7 segment를 이용해서 0부터 9까지의 숫자를 표시해주는 프로젝트를 진행해보도록 하겠습니다.


                        


STEP1. 준비물

아두이노 보드, USB 케이블, 브래드 보드, 7 segment, 저항 8개, 점프와이어 10개



7 segment는 2가지의 종류가 있는데, 하나는 Common Cathode Type이고 다른 하나는 Common Anode Type입니다. Cathod와 Anode의 차이는 앞서 2장에서 설명드렸었는데, 이 두 7 segment 타입의 차이도 마찬가지로 공통 단자에 Cathod의 경우에는 GND를 연결해야 하고 Anode의 경우에는 VCC(전원)에 연결해야 합니다. 저항은 470~1이면 어떤 저항을 사용해도 상관없으나 저항의 값이 크다는 것은 전류의 흐름을 방해하는 힘이 크다는 것을 의미하므로 LED가 어둡게 켜질겁니다.


STEP2. 회로도



STEP3. 코드

복잡해 보이지만 아래와 같은 모양이 되도록 LED를 켜주는 것이라고 생각하면 쉽습니다. 야래의 그림에서 a, b, c, d, e, f, g, dot은 서로 다른 LED라고 생각하시면 됩니다.

맨 위의 그림처럼 보이도록 하기위해서 dot은 항상 켜주도록 할게요.


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
const int a=9;
const int b=8;
const int c=2;
const int d=3;
const int e=7;
const int f=6;
const int g=4;
const int dot=5;
 
void display_7_segment(int num){
  switch(num){
    case 0: 
      digitalWrite(a, HIGH);
      digitalWrite(b, LOW);
      digitalWrite(c, LOW);
      digitalWrite(d, LOW);
      digitalWrite(e, LOW);
      digitalWrite(f, LOW);
      digitalWrite(g, LOW);
      digitalWrite(dot, LOW);
      break;
    case 1:
      digitalWrite(a, HIGH);
      digitalWrite(b, HIGH);
      digitalWrite(c, HIGH);
      digitalWrite(d, HIGH);
      digitalWrite(e, HIGH);
      digitalWrite(f, LOW);
      digitalWrite(g, LOW);
      digitalWrite(dot, LOW);
      break;
    case 2:
      digitalWrite(a, LOW);
      digitalWrite(b, HIGH);
      digitalWrite(c, LOW);
      digitalWrite(d, LOW);
      digitalWrite(e, LOW);
      digitalWrite(f, LOW);
      digitalWrite(g, HIGH);
      digitalWrite(dot, LOW);
      break;
    case 3:
      digitalWrite(a, LOW);
      digitalWrite(b, HIGH);
      digitalWrite(c, HIGH);
      digitalWrite(d, LOW);
      digitalWrite(e, LOW);
      digitalWrite(f, LOW);
      digitalWrite(g, LOW);
      digitalWrite(dot, LOW);
      break;
    case 4:
      digitalWrite(a, LOW);
      digitalWrite(b, LOW);
      digitalWrite(c, HIGH);
      digitalWrite(d, HIGH);
      digitalWrite(e, HIGH);
      digitalWrite(f, LOW);
      digitalWrite(g, LOW);
      digitalWrite(dot, LOW);
      break;
    case 5:
      digitalWrite(a, LOW);
      digitalWrite(b, LOW);
      digitalWrite(c, HIGH);
      digitalWrite(d, LOW);
      digitalWrite(e, LOW);
      digitalWrite(f, HIGH);
      digitalWrite(g, LOW);
      digitalWrite(dot, LOW);
      break;
    case 6:
      digitalWrite(a, LOW);
      digitalWrite(b, LOW);
      digitalWrite(c, LOW);
      digitalWrite(d, LOW);
      digitalWrite(e, LOW);
      digitalWrite(f, HIGH);
      digitalWrite(g, LOW);
      digitalWrite(dot, LOW);
      break;
    case 7:
      digitalWrite(a, HIGH);
      digitalWrite(b, LOW);
      digitalWrite(c, HIGH);
      digitalWrite(d, HIGH);
      digitalWrite(e, LOW);
      digitalWrite(f, LOW);
      digitalWrite(g, LOW);
      digitalWrite(dot, LOW);
      break;
    case 8:
      digitalWrite(a, LOW);
      digitalWrite(b, LOW);
      digitalWrite(c, LOW);
      digitalWrite(d, LOW);
      digitalWrite(e, LOW);
      digitalWrite(f, LOW);
      digitalWrite(g, LOW);
      digitalWrite(dot, LOW);
      break;
    case 9:
      digitalWrite(a, LOW);
      digitalWrite(b, LOW);
      digitalWrite(c, HIGH);
      digitalWrite(d, LOW);
      digitalWrite(e, LOW);
      digitalWrite(f, LOW);
      digitalWrite(g, LOW);
      digitalWrite(dot, LOW);
      break;
    default:
      break;
  }
}
 
void setup() {
  // put your setup code here, to run once:
  pinMode(a, OUTPUT);
  pinMode(b, OUTPUT);
  pinMode(c, OUTPUT);
  pinMode(d, OUTPUT);
  pinMode(e, OUTPUT);
  pinMode(f, OUTPUT);
  pinMode(g, OUTPUT);
  pinMode(dot, OUTPUT);
}
 
void loop() {
  // put your main code here, to run repeatedly:
  int i;
 
  for(i=0; i<10; i++){
    display_7_segment(i); //출력
    delay(1000);  //1초동안 대기
  }
}
cs


LED에 a부터 f까지 매기는 것은 제가 임의로 진행한 것입니다. 그렇기 때문에 여러분이 프로젝트를 진행하실 때에는 더 편하신 방법을 사용해서 하시면 됩니다.  제가 가진 7 segment는 anode 타입이기 때문에 cathode 타입과는 반대로 켜지길 원하는 것을 LOW로 놓으시면 됩니다.


STEP4. 결과 확인



아래의 동영상과 같이 1초마다 숫자가 바뀌는 것을 확인할 수 있습니다. 제 7 segment 칩은 가운데 LED가 고장이 나서 켜지지 않네요ㅠㅠ



댓글 0

MADE BY

김민정

사물인터넷, 아두이노