아두이노와의 첫만남

by Da Young Jung | 2017-01-09 18:27
LED 도전 무드등 불켜기 아두이노 초급

재료

  • LED 1개
  • 브레드보드 1개
  • 푸쉬버튼 1개
  • 아두이노 우노 1개
  • 점퍼선 3개
2017 겨울...
두근거리는 어느 따뜻한 겨울날, 항상 지켜보기만 했던 그와 처음 대화를 나누었다.
그의 이름은 아두이노 ...


---




아두이노! '친한친구'라는 뜻을 가지고 있답니다.

친한 친구가 생긴것만 같네요. 내 머릴 조금 저릿거리게 만드는 친구...


이걸 독학으로 첨에 어떻게 시작하면 좋을까... 하고 찾아본 방법

1. 좋은 사이트에 가서 배우기 (영상, 게시글)

2. 기초 서적 찾아보기

정도로 시도해보았어요.


첨엔 친절한 사이트들을 찾아봤는데요,

영상으로 보기엔 시간이... 많이 걸릴거 같았고 (결국 책을 봐도 시간이 적게 걸리지는 않았지만 ㅋㅋ)

뭔가 좀 더 원론적인?! 그런 얘길 듣고싶었지요.


책좀 찾아보다가, 추천받고 바로 빌려서 보았습니다.

그리고 괜히 감동먹었어요.


---


<손에 잡히는 아두이노> - 마시모 벤지



- 아두이노에 대해 소개하면서, 일종의 프로토타입 툴인건 알고있었는데. 디자이너와 아티스트를 위해 만들어졌다는 사실을 알았답니다... 괜히 감동 울컥.


- Arduino for interaction design (서로 영향을 주고 받는 모든 경험에 대한 디자인을 위한 툴)


- 디자인을 말로 설명하기 보다는 직접 만드는 것에 기반을 둠 (아두이노의 철학)


- 목표를 확실히 정하지 않은 채로도 하드웨어와 소프트웨어의 다른 가능성을 찾아보는것. (팅커링)

ex. 이미 존재하는 기술을 재사용, 무언가 새로운 일을 하게 만들기


- 키보드 해킹, 고물 해킹, 장난감 해킹 해보기


---


정말로 아두이노 시작하기!

1. 소프트웨어를 설치하고요, 아두이노를 컴퓨터에 연결

2. 포트 지정하기 : tool - serial port - /dev/cu.usbmodern~


용어 (이해를 위한 나름의) 정리

- 인터랙티브 장치(센서/input) : 주변 환경 감지

- 액추에이터(output) : 반응

- 마이크로 컨트롤러(소프트웨어 내장) : 의사결정


V = I x R (전압 = 전류 x 저항)

- 배터리 전압 (V) : 펌프가 만들어 낼 수 있는 물의 압력 (수압)

- 전류 (A) : 물이 흐르는 비율 (유량)

- 저항 (옴) : 밸브 


---


여러 종류의 on/off 센서

ON = 1 = HIGH

OFF = 0 = LOW


- 푸시버튼

- 스위치 : 손 떼었을 때 자동으로 상태 유지 (이전상태로 돌아가지 않음)

- 온도 스위치(thermostat) : 설정한 값 만큼 온도가 오르면 열리는 스위치

- 자석 스위치(reed relay) : 자석 가까이대면 접점이 붙는 스위치 (창문 열리면 경보장치)

- 카펫스위치(압력센서)

- 기울기스위치 : 제스처 인터페이스 가능

- 적외선센서(PIR센서, 열선감지기) : 경보장치 / 움직임감지 (기울이면 꺼지는 램프, 가까이가면 켜지는 램프)


펄스 폭 변조(PWM) : 깜빡이는 횟수를 조정해서 빛의 밝기가 달라보이게 함 (잔상효과)


---


프로젝트 진짜 시작! 불을 켜보았다.

무드등을 만들기 위해서, 첫 시도로는 좋은 프로젝트였다.

준비물은 아두이노, LED, 저항, 점퍼선, 브레드보드, 푸시버튼..!

버튼을 누르면 불빛이 켜지고, 버튼을 또 누르면 꺼지고... 간단한 조명의 기능 구현해보기.


1. 아두이노 프로그램을 설치, 연결하고, 하란대로 다 했다.

2. 처음부터 잘 안됐다... 그림과 다 똑같이 했는데 불이 안들어왔다 ㅠㅠ! 별로 어려운것도 아닌데 ㅋㅋ

3. 뭐가 잘못된걸까... @_@

4. 아두이노가 불량이었던걸로 결론.... 다른 아두이노로 하니까 잘됐다. 

5. 포장이 뜯어있는 아두이노를 사용했는데, 꽤 오래된거 같다고도 하고... 암튼 문제가 있었나보다.

6. 소프트웨어와는 또 다르게, 하드웨어는 뭐가 잘못된건지 알기가 더 변수가 많구나...!!


다시시작!

1. 불을 켜고 불빛이 정말 밝아서 기뻤다.

2. 예시에 나와있는걸 따라하면서, 1초 켰다가 1초 껐다가 반복~




3. 잠깐 좀 멈출수는 없구나. 멈추려면 연결 끊기

4. 버튼으로 제어하기!

5. 버튼이 있으니 불빛을 아낄 수 있구나

6. 저항이 있어야 LED를 오래쓴대요.




7. 다른 라인에 꽂아도 불 켜지나? 여기도 되나? 저긴 안되겠지? 하면서 이리저리 이동시켜봄

8. 즐겁다하하하




8. 중간에 버튼이 다리역할을 해주니 다른 섬(?)에 있는 버튼도 작동하고, 두개의 버튼 모두가 작동한다. 




9. 버튼을 "스위치"처럼 사용하려면, 간단하게만 여겨졌던 그 기능을 위해 코드 몇줄을 추가해야 한다.

- 푸쉬버튼 : 누르고 있는 동안만 불이 켜짐. 손을 떼면 꺼짐

- 스위치 : 누르면 불이 켜짐. 손을 떼도 켜짐. 다시 한번 누르면 꺼짐. (버튼을 다시 누르기 전까지는 상태가 변하지 않고 유지됨)


// 버튼이 눌리면 LED 켜고 다시 누를 때까지 유지하기 (p.72)// 변수 정의const int led = 13; // const int 핀번호 설정const int btn = 7;int val = 0; // int 변수 설정 (입력핀의 상태 저장)int old_val = 0; // val의 이전상태를 저장하기 위함int state = 0; // 불빛의 상태를 나타냄// 인풋, 아웃풋 정의void setup() {  pinMode(led, OUTPUT);  pinMode(btn, INPUT);}// 액션 정의void loop() {  val = digitalRead(btn); // 버튼 입력값  // 버튼 상태가 변했는지 검사  if ((val == HIGH) && (old_val == LOW)) { // 버튼이 눌려있고, "이전상태가 안눌림이었다면"(누르고 있는 상태일때 오류 방지)    state = 1 - state; // 불빛 상태 전환 (1->0, 0->1)    delay(10); // 오류(바운싱)을 막기위함  }  old_val = val; // val은 이제 예전 값임  // state 의미 정의 (아웃풋인 불이 켜짐/꺼짐)  if (state == 1) {    digitalWrite(led, HIGH); // led 켬  } else {    digitalWrite(led, LOW);  }}// loop 안에 있는 코드가 위->아래로 계속해서 반복실행되기 때문에, old_val = val의 의미가 있음

10. 코드를 따라 적고 따라해보니, (당연히) 쉽게 됨

11. 코드가 무슨 뜻인지 이해하기 위해 보고, 정리하는 시간... 머리가 찌릿찌릿 할때도 있지만, 이해될때마다 쾌감

12. loop() 안에 있는 명령어들은, 계속해서 반복(위-아래 방향으로) 계속 반복한다. 그래서 불켜기 해놓았을땐 꺼지지 않고 계속 켜있고, 깜빡거려도 계속 깜빡거리고. 말그대로 루프. 계속 반복 실행된다...!

13. 그래서 old_val = val;로 예전 값을 넣어놓으면, 다음번에 돌 때 old_val 값이 저장되어있는거겠지!?


---


뇌가 요가한것 같다 :)

무드등 기본적인 기능만 필요하면, 굳이 아두이노 없이도 만들수 있다고 한다. (어떻게지..?)

그래서 괜히. 여러 기능을 추가하고 싶어진다.

불빛이 나면서 음악이 나오고 아침에 날 깨워주기도 하면서 자장가도 불러주고, 내가 부르면 대답도 하는 그런 ...ㅋㅋㅋㅋㅋ 상상만 하고 웃기만 해야지. 


나름 정리했으나 틀린내용을 발견하셨다면

댓글로좀 알려주세요^0^


댓글 2

MADE BY

Da Young Jung

123d design, CSS, fusion 360, html, Illustrator, Photoshop, sculptris, 가죽공예, 디자인, 떡빚기, 뜨개질, 모델링기초, 손바느질, 퍼블리싱
LED 고급지게 켜고 끄기 다음글 아두이노와의 첫만남현재글