저도 관련 공부를 해본적이 없는 사람입니다만, 팁게에 아두이노 관련 글이 하나도 없는 것 같아서 한 번 글을 남겨봅니다.


아두이노는 마이크로 컨트롤러 보드의 이름이자, 운영체제(=부트로더)이자, 프로그래밍 할 수 있는 언어의 이름이자, 프로그램의 이름입니다.


Arduino_Uno_logo.png


ATMEL AVR이라는 마이크로 컨트롤러(컴퓨터 전기밥솥, 컴퓨터 크리닝 할때의 그 컴퓨터)가 있는데, 이거를 아마추어들도 아주 쉽고 유용하게 쓸 수 있게끔 만든 플랫폼의 이름인겁니다. 실생활에서 전자부품을 다룰 때에 엄청 유용합니다.

예를 들어서 실생활에서 LED를 켜고 싶을 때가 종종 있으실겁니다. 이건 간단하지요? LED에 대략 3볼트의 전기를 +극 -극 다리에 맞춰서 연결하면 불이 들어옵니다.

근데 LED를 1초에 한 번씩 꺼졌다 켜졌다 하고 싶을 때가 있겠죠. 아니면 크리스마스 트리 전구처럼 서서히 켜졌다 서서히 꺼졌다 하고 싶을 때도 있겠죠. 이거를 전자부품만을 이용해서 구현하려면 회로도를 그리고 트랜지스터를 쓰고 캐패시터가 어쩌고 하면서 엄청 어렵습니다. 제가 깜빡깜빡하는 LED 어떻게 만드냐고 전자과 다니는 친구한테 물어봤다가 500페이지짜리 전공서적 빌려주면서 읽으라길래 한대 때려줬던 2006년 어느날이 생각납니다.


하지만 아두이노 보드를 이용하면 아두이노 보드에 LED를 끼워놓고선 손가락만 갖고 프로그래밍을 해서 그렇게 되게끔 제어할 수가 있습니다.


아두이노 보드는 컴퓨터와 USB로 연결이 됩니다. 가끔 키보드 매트릭스나 컨트롤러나 뭐 이런거 보시다가 PS2AVR 이라는 거 들어보셨을 겁니다. 이거를 컴퓨터와 연결할 때 ISP업로더 뭐 이런 것도 들어보셨을 겁니다. 이런게 전부 내장되어있기 때문에 아무 신경을 쓰실 필요가 없이 그냥됩니다.


예를 들어서 천천히 켜졌다가 천천히 꺼지는 LED를 만들고 싶으면

1. 아두이노 보드를 컴퓨터와 USB로 연결합니다.
2. 아두이노(프로그램 이름임)를 실행합니다.

3. 그러면 뭔가 메모장같은 화면이 나옵니다. 거기에 프로그래밍을 해서 넣을 수가 있는 거지요.
4. 메모장같이 뜬 화면에 아래 스크립트를 입력합니다.


프로그래밍 한 번도 안 해보신 분이 보시면 어려워 보일지도 모르지만 그런 분들이라도 한 줄씩 천천히 읽어보시면 엄청 간단한 내용인거 아실겁니다.


       void setup() {           // 의미 없이 문법상 형식적으로 적습니다
       }
       void loop() {           // 마찬가지로 의미 없는 형식
         for (int fade = 0 ; fade <= 255; fade += 5) {           // 출력을 0에서 부터 255까지 5씩 늘립니다
           analogWrite(13, fade);           // 출력을 실제 전기로 보내줍니다
           delay(30);           // 30ms 대기합니다
         }
         for (int fade = 255 ; fade >= 0; fade -= 5) {           // 반대로 255부터 0까지 5씩 줄입니다
           analogWrite(13, fade);           // 출력을 실제 전기로 보내줍니다
           delay(30);          // 30ms 대기합니다
         }
       }

Untitled-1.jpg


5. 저기 위에 → 버튼을 눌러서 프로그래밍 한 내용을 아두이노 보드에 전송합니다.
6. 지금 analogWrite(9) 처럼 9라고 써있으니 9번 핀에 LED +다리를 낑구고, 아두이노 보드에 있는 Ground 핀에 LED -다리를 낑구면 끝입니다. 물론 10이라고 쓰고 10번핀에 끼워도 됩니다.

빨리 깜빡이게 하고 싶으면 delay(30) 이게 30ms간 기다리라는거니 저걸 20이나 10으로 줄이면 빨리 깜빡이겠죠. 이거를 다 전자부품 한톨 없이 컴퓨터 소프트웨어로 명령어만 입력하면 해결할 수 있는겁니다. 짱이죠. 이걸로 모터도 돌리고 드론도 만들고 가스감지기도 만들고 별거 다 할 수 있습니다.

특히 키보드매니아들에게 좋은 점은 아두이노 '레오나르도' 라는 이름의 아두이노 기판부터 Keyboard.press 와 Keyboard.release 라는 명령어를 쓸 수 있다는 것입니다! 즉 스위치를 달아서 키보드 컨트롤러로도 쓸 수가 있는겁니다. 매트릭스를 딸 필요가 없습니다.


123.jpg



(만 칠천 원 정도 하는 아두이노 레오나르도 보드)


void setup() {
  pinMode(9, INPUT_PULLUP); // 9번 핀을 입력을 감지하는 핀으로 쓰겠다고 선언합니다
  Keyboard.begin(); // 키보드 입출력을 시작한다고 선언합니다
}
void loop() {
  if (digitalRead(9) == LOW) { // 만약 9번 핀의 전압이 낮아지면=스위치가 붙으면
    Keyboard.press('a'); // a키를 누릅니다
  }
  else { // 9번 핀의 전압이 낮아진게 아니면=회복되면=스위치가 떨어지면
    Keyboard.release('a'); // a키를 뗍니다
  }
}


IMG_8868.jpg

(사진에는 스위치가 없어서 점퍼선으로 대신합니다)


아까 LED처럼, 똑딱이 스위치 한 쪽 다리를 9번 핀에, 반대쪽 다리를 Ground에 붙이고 스위치를 누르면 키보드 a키를 누른거랑 똑같이 동작합니다! 스위치 갯수를 수십개로 늘리고 저기서는 지금 9번 핀을 쓴다 했는데 그 밑에 줄에 1번핀 2번핀 3번핀을 복붙해서 수십개로 늘려서 적어주면 키보드의 모든 키를 다 감당할 수 있습니다!

다만 아두이노 보드 종류에 따라 다르지만 앞서 말한 레오나르도 같은 저가형에는 핀이 20개 밖에 없어서(사진 오른쪽 아래의 A0~A5, 위의 Digital 0~13) 그냥 직결하면 키 20개 밖에는 못씁니다 ㅎㅎ 그래도 20키 동시입력이 되는데다 20개면 넘버키패드나 조이패드 정도는 충분히 만들 수 있는 갯숩니다. 잔머리를 굴리면 몇 배로 불려서 여러 키를 쓸 수 있습니다. 요건 다음에.

그러면 스위치를 체리 스위치를 구입하고 기판에다가 붙이고 스위치 다리에 전선을 납땜해서 아두이노에 끼워주면 아두이노를 키보드 컨트롤러로 쓰는 키보드를 만들 수 있겠죠? 이걸 지금 제가 해보려고 합니다. 응원해주세요 ㅋㅋ

* 참고 : 이러한 아두이노 키보드는 USB ID2번, HID 키보드로 인식되기 때문에 윈도우즈/OSX/유닉스/리눅스 등 어떠한 운영체계에서도 별도 드라이버 설치 없이 보통의 키보드처럼 동작합니다.

* 참고2 : 근데 USB ID가 1번이 아니라 2번인 관계로 고급 운영체계가 아닌 환경, 그러니까 BIOS 화면이나 완전한 MS-DOS에서는 인식이 안됩니다 ㅋ