인터랙티브 책장 만들기

by 하민정 | 2017-01-16 13:03
도전 디지털아트 아두이노 인터랙티브아트 책장

재료

  • 바늘 1개
  • 220옴 저항 9개
  • 아두이노 우노 1개
  • 220옴 저항 8개
  • 요플레 컵 8개
  • 세개 다른 색상의 전선 1개
  • 호일 1개
  • 풀 1개
  • 글루건 1개
  • 덕 테이프 1개
  • 가위 1개
  • 로터리 툴 1개
  • LED 8개
  • 아두이노 버튼 9개
  • 두개 다른 색상의 긴 전선 8개
  • 납땜기 1개
  • 절연 테이프 1개

                                         


새해를 맞이하여 많은 사람들이 2017년 새해 결심을 합니다. 


글로벌 정보분석기업 닐슨 코리아는 이달 1월 1일부터 7일까지 새해 다짐과 관련된 

국내 온라인 / 소셜 미디어 24만 5천여건의 콘텐츠를 분석한 결과 

독서와 관련된 버즈량 ( 언급횟수 )이 1만 7천여건으로 가장 많았다고 16일 밝혔습니다 

이렇게 2017년 올 해 가장 많은 사람들의 다짐은 바로 '독서' 라고 합니다. 


독서를 하기 위해 많은 사람들은 도서관을 찾거나, 자신의 책장을 둘러 봅니다. 

그런데, 원하는 책을 찾기가 참 어렵습니다. 

이 책이 어떤 장르의 책인지 책을 구입할 때는 알지만, 막상 보려고 하면 까먹곤 합니다. 


그런데 만일 책장에  책장에 인터랙티브를 더해

이 책이 어떤 장르의 책인지 조명으로 가르켜 줄 수 있다면 어떨까요? 


새해 독서 다짐과 함께 나만의 인터랙티브 책장 만들기를 해봅시다. 

다음의 프로젝트를 instructables 에서 접하여 소개하고자 합니다. 


Step 1. 준비물 


- 8개 요플레 컵

- 가위 

- 절연 테이프 

- 호일 

- 8개 LED

- 바늘 

- 풀 

- 각 LED 당 두개의 다른 색상의 긴 전선 

- 8개 220 옴 저항 

- 덕 테이프 

- 납땜기 

- 3가지 다른 색상의 전선 

- 로터리 툴 

- 9개 220 옴 저항 

- 글루건 

- 아두이노 버튼 9개 ( 8개의 장르 + 1개의 리셋 버튼 ) 


Step 2. 제작 과정 


① 책장 만들기 


                                           


먼저 책장을 준비해야 합니다. 

책장은 만들 수도 있고, 하나 구입해도 좋습니다. 

만일 책장을 만든다면 책장 뒷편은 카드보드지로 만들어야 합니다. 

책장 뒷편에 전선을 빼는 부분으로 구멍을 내어 주어야 하는데,

목재로 만들 경우 카드보드지에 비해 구멍을 만들기 쉽지 않기 때문입니다. 


+ 추가로 책장에 두개의 선반을 덧 대어 놓았습니다. 이것으로 조명을 가려줄 예정입니다. 


 조명 만들기 


                                           


다음으로 조명을 만듭니다. 

위의 준비물 중 다음을 이용합니다. 

- 요플레 컵

- 가위 

- 절연 테이프 

- 호일 

- 8개의 LED 

- 바늘 

- 풀 


8개의 조명을 만들 것 이므로 8개의 요플레 컵을 준비합니다. 

요플레 컵의 윗 부분과 아래 부분을 절단합니다. 이후 컵의 안쪽에 호일을 붙입니다. 

이를 통해 안쪽에서 비추는 LED 를 더 밝힐 수 있게됩니다. 

이제 둘로 나눈 컵을 다시 붙입니다. 


안쪽에 절연 테이프를 붙여 줍니다. 


바늘을 준비해 불로 바늘을 달굽니다. 

이것을 이용해 요플레 컵에 두개의 구멍을 만들어 LED 를 넣습니다. 


* 두개 구멍 사이의 간격을 약간 두 되, 이것이 너무 넓지 않도록 합니다. 


* LED 다리의 양쪽에 절연테이프를 붙입니다. 

이것을 통해 LED 사이에 단일 회로가 형성 되는 것을 막아 줍니다. 


이렇게 한 개의 요플레 컵을 만든 뒤, 나머지 7개 컵에 대해서 위의 과정을 반복해 줍니다. 


 책장에 조명 넣기 




책장에 조명을 넣기 이전에 전선 연결에 주의해야 합니다. 

연결을 위해 위의 준비물 중 다음의 것들이 필요합니다. 


- 두개 다른 색상의 긴 전선 

- 8개의 220 옴 저항 

- 덕 테이프 

- 납땜기 

- 절연 테이프 


1) LED 의 짧은 다리는 ' - ' 극을 의미하고, 긴 다리는 ' + ' 극을 의미합니다. 

검정색 전선을 ' - ' 극과 납땜하고, 빨간색 전선을 ' + ' 극과 납땜합니다. 


2) 전선을 납땜한 뒤 220 옴 저항기를 갖고 검정색 전선의 끝에 납땜 합니다. 


3) 8개의 조명에 대해 우의 2개 과정도 모두 마쳤다면 덕 테이프를 약간 떼어 

조명에 말아 줍니다. 조명을 원하는 곳에 배치해 줍니다. 


4) 이제 책장의 뒷편에 전선이 나와야 할 곳에 구멍을 내어 줍니다. 


5) 뒷편을 납땜질 해 줍니다. 여분의 검정색 전선들을 준비합니다. 

이것을 이용해 아두이노와 연결해 줍니다. 

모든 검정색전선을 여분의 검정색 전선들과 함께 납땜해 줍니다. 


                                           


④ 책장 디자인하기 


이제 버튼을 만들어 봅시다. 

버튼은 만들어 진 뒤에 책장의 사이드에 놓여질 에정입니다. 

이 프로젝트의 경우 버튼들을 레이저 컷을 이용해 조각해 주었습니다. 


                                  


                 


 버튼 연결하기 


                                        


                         


                          


모든 준비가 되었으므로, 실제 연결을 해 줍니다. 

이를 위해 위에서 제시한 준비물 중 다음의 것들이 필요합니다.

 

- 3가지 다른 색상의 전선 

- 로터리 툴 

- 9개의 220옴 저항 

- 글루건

- 아두이노 버튼 9개 ( 8개의 장르 + 1개의 리셋 버튼 ) 


1) 먼저 버튼을 어디에 놓을지 결정합니다. 

2) 전선들을 숨기기 위해 로터리 툴을 이용해 몇개의 슬롯을 만들어 놓습니다. 

3) 저항을 아두이노 버튼과 납땜하고, 버튼을 놓고자 하는 위치에 놓습니다. 

     붙이기 이전에 전선들을 모두 납땜해 주어야 합니다. 

4) 세개의 전선을 납땜해 줍니다. 

     한 개는 Ground 에, 다른 한 개는 5V 에, 마지막 한 개는 아두이노의 핀에 연결합니다. 


* 이때 Ground 전선은 저항과 함께 납땜해 주어야 합니다. 


5) 글루건을 이용해 모둔 전선들을 각각의 슬롯에 연결해 줍니다. 

6) 이제 버튼을 모두 붙여 줍니다. 


 버튼 붙이기 


                                             


                                 


1) 폼 보드를 잘라 아두이노 버튼에 붙여줍니다. 

2) 그 위에 만들어 놓은 버튼을 붙여 줍니다. 

     이를 통해 버튼을 눌렀을 때, 눌림을 인지할 수 있는 바운스 이팩트를 주었습니다. 


Step 4. 코드 


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
int pinButton = 7; //the pin where we connect the button
int pinButton2 = 8; //the pin where we connect the button
int pinButton3 = 11; //the pin where we connect the button
int pinButton4 = 12; //the pin where we connect the button
int pinButton5 = 13; //the pin where we connect the button
int pinButton6 = A0; 
int pinButton7 = A1; 
int pinButton8 = A2; 
int pinButtonReset = A3; 
int LED = 1; //the pin where we connect the led
int LED2 = 2; //the pin where we connect the led
int LED3 = 3;
int LED4 = 4;
int LED5 = 5;
int LED6 = 6;
int LED7 = 9;
int LED8 = 10;
int stateLED = LOW; // here i say that the state of led is always LOW (i.e off).
int stateLED2 = LOW;
int stateLED3 = LOW;
int stateLED4 = LOW;
int stateLED5 = LOW;
int stateLED6 = LOW;
int stateLED7 = LOW;
int stateLED8 = LOW;
int stateButton,stateButton2, stateButton3, stateButton4, stateButton5, stateButton6, stateButton7, stateButton8, stateButtonReset;
int previous = LOW;
long time = 0;
long debounce = 1000;
cs


▶ 버튼을 아두이노의 7, 8, 11, 12, 13, A0, A1, A2, A3 와 연결해 줍니다. 

이를 코드에서 해당 핀으로 가르켜 주었습니다. 


LED 도 마찬가지로 아두이노의 1, 2,  3,  4, 5, 6, 7, 8, 9, 10번 핀에 연결해 줍니다. 

이를 코드에서 해당 핀을 가르켜 주었습니다. 


모든 버튼의 초깃값을 LOW 상태로 만들어 주었고, 

이후 버튼이 눌려져 HIGH 가 된다면 버튼이 눌려짐을 인지할 수 있도록 하였습니다. 


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
void setup() {
  // put your setup code here, to run once:
  pinMode(pinButton, INPUT);
  pinMode(LED, OUTPUT);
  
  pinMode(pinButton2, INPUT);
  pinMode(LED2, OUTPUT);
  pinMode(pinButton3, INPUT);
  pinMode(LED, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(pinButton4, INPUT);
  pinMode(LED7, OUTPUT);
  pinMode(pinButton5, INPUT);
  pinMode(LED, OUTPUT);
  pinMode(LED6, OUTPUT);
  pinMode(LED8, OUTPUT);
  
  pinMode(pinButton6, INPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED6, OUTPUT);
  pinMode(LED7, OUTPUT);
  pinMode(pinButton7, INPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED6, OUTPUT);
  pinMode(LED7, OUTPUT);
  pinMode(LED8, OUTPUT);
  pinMode(pinButton8, INPUT);
  pinMode(LED8, OUTPUT);
  
  pinMode(pinButtonReset, INPUT);
  
  
}
 
cs


▶ LED 를 모두 출력으로 연결해 주어, 이후에 버튼이 눌려졌을 때 

LED 불이 들어오고, 위의 연결을 따라 조명이 밝혀지도록 만들었습니다. 


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
 
void loop() {
// for each button i say which leds must go on. 
  stateButton = digitalRead(pinButton); 
    Serial.print(stateButton); 
  if(stateButton == HIGH) { //when the button is being pushed in
    if(stateLED == HIGH){ // this led will go on
      stateLED = LOW; 
    } else {
       stateLED = HIGH; 
    }
  }
  stateButton2 = digitalRead(pinButton2); 
    Serial.print(stateButton2); 
  if(stateButton2 == HIGH) {
    if(stateLED2 == HIGH){
      stateLED2 = LOW; 
    } else {
       stateLED2 = HIGH; 
    }
  }
  
  stateButton3 = digitalRead(pinButton3);  
  if(stateButton3 == HIGH) {
    if(stateLED == HIGH && stateLED3 == HIGH){ // here, two leds will go on when this button is being pushed in
      stateLED = LOW;
      stateLED3 = LOW; 
    } else {
       stateLED = HIGH;
       stateLED3 = HIGH;
    }
  }
  stateButton4 = digitalRead(pinButton4);  
  if(stateButton4 == HIGH) {
    if(stateLED2 == HIGH && stateLED3 == HIGH && stateLED5 == HIGH){
      stateLED2 = LOW;
      stateLED3 = LOW; 
      stateLED5 = LOW; 
    } else {
       stateLED2 = HIGH;
       stateLED3 = HIGH;
       stateLED5 = HIGH;
    }
  }
  stateButton5 = digitalRead(pinButton5);  
  if(stateButton5 == HIGH) {
    if(stateLED == HIGH && stateLED6 == HIGH && stateLED8 == HIGH){
      stateLED = LOW;
      stateLED6 = LOW; 
      stateLED8 = LOW; 
    } else {
       stateLED = HIGH;
       stateLED6 = HIGH;
       stateLED8 = HIGH;
    }
  }
  stateButton6 = digitalRead(pinButton6);  
  if(stateButton6 == HIGH) {
    if(stateLED2 == HIGH && stateLED6 == HIGH && stateLED7 == HIGH){
      stateLED2 = LOW;
      stateLED6 = LOW; 
      stateLED7 = LOW; 
    } else {
       stateLED2 = HIGH;
       stateLED6 = HIGH;
       stateLED7 = HIGH;
    }
  }
  
  stateButton7 = digitalRead(pinButton7);  
  if(stateButton7 == HIGH) {
    if(stateLED2 == HIGH && stateLED3 == HIGH && stateLED6 == HIGH && stateLED7 == HIGH && stateLED8 == HIGH){
      stateLED2 = LOW;
      stateLED3 = LOW; 
      stateLED6 = LOW; 
      stateLED7 = LOW; 
      stateLED8 = LOW;
    } else {
       stateLED2 = HIGH;
       stateLED3 = HIGH;
       stateLED6 = HIGH;
       stateLED7 = HIGH;
       stateLED8 = HIGH;
    }
  }
    stateButton8 = digitalRead(pinButton8);  
  if(stateButton8 == HIGH) {
    if(stateLED4 == HIGH && stateLED5 == HIGH){
      stateLED4 = LOW;
      stateLED5 = LOW; 
    } else {
       stateLED4 = HIGH;
       stateLED5 = HIGH;
    }
  }
  
  digitalWrite(LED, stateLED);
  digitalWrite(LED2, stateLED2);
  digitalWrite(LED3, stateLED3);
  digitalWrite(LED4, stateLED4);
  digitalWrite(LED5, stateLED5);
  digitalWrite(LED3, stateLED6);
  digitalWrite(LED4, stateLED7);
  digitalWrite(LED5, stateLED8);
  delay(100);
}
 
cs


▶ 버튼이 눌려진다면, 해당 버튼이 어떤 버튼인가를 먼저 if 문을 통해 구별해 냅니다. 

해당 버튼에 따라 해당하는 LED 를 HIGH 로 바꾸어 주어, 

출력으로 연결된 조명이 밝혀지도록 만들었습니다. 

해당 LED 를 제외한 버튼과 연결된 조명의 경우, 

모두 LOW 로 바꾸어 주어 밝혀지지 않도록 만들었습니다. 


리셋 버튼의 경우 모두 LOW 로 바꾸어 주었습니다. 


다음은 전체 코드입니다. 

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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
int pinButton = 7; //the pin where we connect the button
int pinButton2 = 8; //the pin where we connect the button
int pinButton3 = 11; //the pin where we connect the button
int pinButton4 = 12; //the pin where we connect the button
int pinButton5 = 13; //the pin where we connect the button
int pinButton6 = A0; 
int pinButton7 = A1; 
int pinButton8 = A2; 
int pinButtonReset = A3; 
int LED = 1; //the pin where we connect the led
int LED2 = 2; //the pin where we connect the led
int LED3 = 3;
int LED4 = 4;
int LED5 = 5;
int LED6 = 6;
int LED7 = 9;
int LED8 = 10;
int stateLED = LOW; // here i say that the state of led is always LOW (i.e off).
int stateLED2 = LOW;
int stateLED3 = LOW;
int stateLED4 = LOW;
int stateLED5 = LOW;
int stateLED6 = LOW;
int stateLED7 = LOW;
int stateLED8 = LOW;
int stateButton,stateButton2, stateButton3, stateButton4, stateButton5, stateButton6, stateButton7, stateButton8, stateButtonReset;
int previous = LOW;
long time = 0;
long debounce = 1000;
 
void setup() {
  // put your setup code here, to run once:
 
  pinMode(pinButton, INPUT);
  pinMode(LED, OUTPUT);
  
  pinMode(pinButton2, INPUT);
  pinMode(LED2, OUTPUT);
 
  pinMode(pinButton3, INPUT);
  pinMode(LED, OUTPUT);
  pinMode(LED3, OUTPUT);
 
  pinMode(pinButton4, INPUT);
  pinMode(LED7, OUTPUT);
 
  pinMode(pinButton5, INPUT);
  pinMode(LED, OUTPUT);
  pinMode(LED6, OUTPUT);
  pinMode(LED8, OUTPUT);
  
  pinMode(pinButton6, INPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED6, OUTPUT);
  pinMode(LED7, OUTPUT);
 
  pinMode(pinButton7, INPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED6, OUTPUT);
  pinMode(LED7, OUTPUT);
  pinMode(LED8, OUTPUT);
 
  pinMode(pinButton8, INPUT);
  pinMode(LED8, OUTPUT);
  
  pinMode(pinButtonReset, INPUT);
  
  
}
 
void loop() {
// for each button i say which leds must go on. 
 
  stateButton = digitalRead(pinButton); 
    Serial.print(stateButton); 
  if(stateButton == HIGH) { //when the button is being pushed in
    if(stateLED == HIGH){ // this led will go on
      stateLED = LOW; 
    } else {
       stateLED = HIGH; 
    }
  }
 
 
  stateButton2 = digitalRead(pinButton2); 
    Serial.print(stateButton2); 
  if(stateButton2 == HIGH) {
    if(stateLED2 == HIGH){
      stateLED2 = LOW; 
    } else {
       stateLED2 = HIGH; 
    }
  }
  
 
  stateButton3 = digitalRead(pinButton3);  
  if(stateButton3 == HIGH) {
    if(stateLED == HIGH && stateLED3 == HIGH){ // here, two leds will go on when this button is being pushed in
      stateLED = LOW;
      stateLED3 = LOW; 
    } else {
       stateLED = HIGH;
       stateLED3 = HIGH;
    }
  }
 
 
  stateButton4 = digitalRead(pinButton4);  
  if(stateButton4 == HIGH) {
    if(stateLED2 == HIGH && stateLED3 == HIGH && stateLED5 == HIGH){
      stateLED2 = LOW;
      stateLED3 = LOW; 
      stateLED5 = LOW; 
    } else {
       stateLED2 = HIGH;
       stateLED3 = HIGH;
       stateLED5 = HIGH;
    }
  }
 
 
  stateButton5 = digitalRead(pinButton5);  
  if(stateButton5 == HIGH) {
    if(stateLED == HIGH && stateLED6 == HIGH && stateLED8 == HIGH){
      stateLED = LOW;
      stateLED6 = LOW; 
      stateLED8 = LOW; 
    } else {
       stateLED = HIGH;
       stateLED6 = HIGH;
       stateLED8 = HIGH;
    }
  }
 
  stateButton6 = digitalRead(pinButton6);  
  if(stateButton6 == HIGH) {
    if(stateLED2 == HIGH && stateLED6 == HIGH && stateLED7 == HIGH){
      stateLED2 = LOW;
      stateLED6 = LOW; 
      stateLED7 = LOW; 
    } else {
       stateLED2 = HIGH;
       stateLED6 = HIGH;
       stateLED7 = HIGH;
    }
  }
 
  
  stateButton7 = digitalRead(pinButton7);  
  if(stateButton7 == HIGH) {
    if(stateLED2 == HIGH && stateLED3 == HIGH && stateLED6 == HIGH && stateLED7 == HIGH && stateLED8 == HIGH){
      stateLED2 = LOW;
      stateLED3 = LOW; 
      stateLED6 = LOW; 
      stateLED7 = LOW; 
      stateLED8 = LOW;
    } else {
       stateLED2 = HIGH;
       stateLED3 = HIGH;
       stateLED6 = HIGH;
       stateLED7 = HIGH;
       stateLED8 = HIGH;
    }
  }
 
 
    stateButton8 = digitalRead(pinButton8);  
  if(stateButton8 == HIGH) {
    if(stateLED4 == HIGH && stateLED5 == HIGH){
      stateLED4 = LOW;
      stateLED5 = LOW; 
    } else {
       stateLED4 = HIGH;
       stateLED5 = HIGH;
    }
  }
 
 
 
  
  digitalWrite(LED, stateLED);
  digitalWrite(LED2, stateLED2);
  digitalWrite(LED3, stateLED3);
  digitalWrite(LED4, stateLED4);
  digitalWrite(LED5, stateLED5);
  digitalWrite(LED3, stateLED6);
  digitalWrite(LED4, stateLED7);
  digitalWrite(LED5, stateLED8);
  delay(100);
}
 
cs


Step 5. 수행 결과 


                                             










댓글 3

MADE BY