아두이노 기초 강좌 1

Electronics 2010/04/07 01:22
지난 번에는 아두이노가 무엇인가와 아두이노에 흥미를 가질 수 있을 만한 예를 몇가지 보는 것으로 아두이노를 소개하는 시간을 가졌다.

이번에는 약간 깊이 들어가보기로 한다. 약간만 ^^ 아두이노로 할 수 있는 가장 간단한 일이 LED를 켜고 끄는 것이다.
그걸 하기 위한 도구를 어떻게 준비하고 연결해야되는지를 알아 보자.

먼저 아두이노 보드와 컴퓨터가 필요하고, 둘을 연결할 USB케이블이 필요하다. 그리고 컴퓨터에 아두이노 프로그래밍을 위한 프로그램인 아두이노를  www.arduino.cc 에서 자기 OS에 맞는 것으로 무료로 다운받아 설치한다. 오픈소스라서 공짜다. 걱정하지 말고 다운받아서 설치하자. 

아두이노 보드와 USB케이블은 www.plughouse.co.kr에서 살 수 있다. 전자부품을 잘 모르면 arduino starter kit을 사는 것이 편할것이다. 단품으로 살때는 arduino duemilanove/328 보드를 사면된다.  duemila nove (두에밀라노베)는 이탈리아어로 2009란 뜻으로, 아두이노의 2009년 버전을 뜻하는 이름이다. 짐작했다시피 이탈리아 사람들이 만들어서 이탈리아어로 된 이름을 가지게 되었다.


아두이노 두에밀라노베

USB케이블


아두이노  맥킨토시 버전을 다운받으면 FTDI USB Driver가 함께 딸려 온다. 아두이노는 어플리케이션 디렉토리로 드래그해서 깔고 FTDI USB Driver는 더블클릭해서 깔아준다.

윈도우즈 버전은 일단 프로그램 먼저 깔고 나중에 USB케이블을 꽂으면 비스타 이상은 자동으로 설치되고, XP는 새로운 하드웨어를 감지했다는 창이 뜨는데, 이때 아두이노가 설치된 디렉토리 밑의 drivers/FTDI USB Drivers 디렉토리를 지정해서 드라이버를 설치해준다. 

그러면 복잡한(?) 프로그램 설치가 끝난 것이다. 

아래는 아두이노 프로그램이다. 요즘 최신 버전이 0018이다.   맥킨토시 버전이라 메뉴가 분리되어 있지만 윈도우즈 버전은 메뉴가 붙어 있다. 
  



위 그림의 아이콘으로 된 버튼들의 사용법을 보면, 
맨 왼쪽 원안에 삼각형은 컴파일 버튼이다. 프로그램을 다 짜고 나서 저장 한 후에 이걸 누르면 컴파일이 된다. 컴파일은 보드안의 마이크로컨트롤러 칩이 알아먹을 수 있는 기계어로 프로그램을 변환해주는 과정이다. 프로그램 고칠 때 마다 해줘야 된다.
그 다음 원안의 네모는 멈춤, 
윗쪽 화살표는 문서 열기
아래쪽 화살표는 저장하기, 프로그램을 고친 후에는 한 번씩 해줘야 한다. 
오른쪽 화살표는 보드로 프로그램 업로드하기이다. 컴파일 후에 업로드를 누르면 작성한 프로그램이 아두이노 보드에 업로드 된다. 이것도 프로그램 고칠때 마다 다시 해줘야 한다.
끝으로 네모안의 네모와 연결된 쪼그만 동그라미가 든 (길다--;;) 아이콘은 시리얼 모니터인데, 아두이노 보드가 컴퓨터에게 보내는 문자들을 보여준다. 

프로그램을 짜고 저장 - 컴파일 - 업로드 순서로 한번씩 눌러주면 아두이노 보드로 프로그램이 올라가서 실행이 되는 그런 식이다. 일단 보드에 프로그램이 올라가면 자동으로 시작된다. 재시작은 보드의 리셋버튼을 누르면 되고, 끄려면 USB케이블을 뽑으면 된다. 스위치는 따로 없다. 단순한 세상이다.

보드의 전원공급은 USB케이블을 통해서 되며, 별도의 전원단자로 전원을 공급해주면 자동으로 USB의 전원은 끊어 지도록 되어 있다. 그러나 이런 전원 자동전환 기능은 두에밀라노베 보드에서 부터 적용된 것이기 때문에, 예전보드나 다른 호환보드는 두 가지 전원이 동시에 공급되지 않도록 주의 해야 한다.


그럼 오늘의 하이라이트 LED켜고 끄기 프로그램을 해보자.
아래의 코드를 아두이노에 쳐 넣고 컴파일 해서 업로드하기만 하면 보드에 달린 LED는 자동으로 1초간 켜졌다가 1초간 꺼졌다가를 반복하게 된다.

회로는 부품 2개만 써서 간단하게 구성할 수 있다. 13번 핀에 전선을 꽂아서 200오옴 이상의 저항을 연결하고 저항의 반대쪽에 LED의 긴 다리를 연결한다. LED의 짧은 다리는 아두이노보드의 GND(그라운드)에 연결하면 회로가 완성 된다. 저항과 LED는 납땜을 해도 되지만 시험용일 경우에는 브레드보드(일명 빵판)라는 것을 이용해서 땜질 없이 연결하는 방법을 쓴다.


빵판이란건 위 사진처럼 꽂으면 빨간 전선과 LED의 한가닥이 연결된 것이고 LED와 저항도 연결이 된다. 5개의 구멍끼리 내부에서 연결이 되어 있는 구조다. 빵판의 구조는 나중에 자세히 설명하기로 한다. 위에 사용한 보드는 아두이노와 호환되는 RBBB라는 보드로 사이즈는 다르지만 완벽하게 호환된다. 

마이크로 컨트롤러 프로그램은 기본적으로 해 넣은 프로그램이 무한반복하는 방식이다. 그러니까 아래의 프로그램은 한번 켰다가 잠시 후 끄는 동작만을 담고 있지만 자동으로 그 짓을 무한 반복하는 것이다. 이게 마이크로 컨트롤러 프로그래밍의 가장 기본이 되는 프로그래밍 규칙이다.

// 는  단지 다른 사람이 알아보기 쉽게 설명을 쓰기 위한 기호로써 그 다음에 쓰는 글씨는 프로그램 실행과는 아무 관계 없다. 단 한줄 넘어가면 안된다. 한 줄 내에서만 작동한다. 
//의 앞에 있는것은 프로그램으로 작동하고 //의 뒤에 있는 글자만 설명문으로 간주된다. 앞으로 //를 이용해서 코드를 설명하겠다.


//LED blink example

int ledPin = 13;                                 // 13번 핀을 ledPin이라고 이름지어 준다. ledPin이라는 정수형 
      // 변수의 선언이기도 하다.
void setup()                                     // 모든 아두이노 프로그램엔 void setup()이라는 함수가 들어가고, 
{                                                    // 처음 한번 만 실행되는 것들을 담고 있다.
  pinMode(ledPin,OUTPUT);                // 위에서 이름지어준 ledPin 이라는 포트를 OUTPUT출력으로
}                                                    // 지정한다.

void loop ()                                     //void loop()도 모든 아두이노 프로그램에 기본적으로 들어가는 것으
{                                                    //로써, 아두이노를 켜 놓는 동안 무한반복할 동작이 이 안에 들어간
  digitalWrite(ledPin, HIGH);               //다.  ledPin이라고 이름붙인 13번 핀에 전기를 줘서 불을 킨다.
  delay(1000);                                 // 그 상태 그대로 1000 밀리 초(1초) 만큼 기다린다.
  digitalWrite(ledPin, LOW);               // ledPin에 전기를 끊어서 불을 끈다.
  delay(1000);                                 // 그 상태 그대로 1000밀리 초를 대기한다.
}      
                                


위에서 setup()과 loop()는 함수라고 불리우는 것으로 void는 그 함수의 특성을 지정하는 말이고, 아두이노를 쓰는 내내 저 두 함수명은 변하지 않고 쓰이게 된다. 아두이노 프로그램의 기본뼈대가 되는 것이다. 어떤 아두이노 프로그램에도 void setup()과 void loop()는 들어 간다는 뜻이다. 순서를 바꿔도 실행은 되지만, 프로그램을 나중에 볼 때 헷갈릴 수가 있다. 각 함수의 내용은 중괄호로 감싸준다.

아두이노로 대략 중괄호 빼고 8줄이면 LED를 깜빡이는 프로그램을 짤 수 있다는 말이 된다. 프로그램을 조금이라도 짜 봤다면 많이 어렵진 않다고 보는데, 프로그래밍을 처음 접한다면 당황스러울 수도 있을 것이다.

LED하나를 켜고 끄는건 정말 시시한 일이지만 직접 해보면 결코 시시한 기분은 아닐것이다. 새로운 세상을 아는 첫 걸음을 내 딛을 때의 흥분을 새로운 것을 배워본 사람이라면 알 수 있을 것이다. 마치 로미오와 첫날밤을 겪은 줄리엣의 기분이라면 이해가 갈까? 세익스피어 인 러브에 나온 기네스펠트로의 대사가 떠오른다. 
"새로운 세상을 만났어! " 


P.S. 본 강좌를 보시고 이해가 안가는 부분이나 어려운 부분이 있으면 꼭 댓글을 남겨 주시기 바랍니다. 알아듣기 쉬운 강좌로 만드는데 큰 도움이 될 것입니다 ^^

저작자 표시 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License

'Electronics' 카테고리의 다른 글

아두이노 기초강좌 3  (13) 2010/04/28
아두이노 기초강좌 2  (33) 2010/04/14
아두이노 기초 강좌 1  (36) 2010/04/07
꽃보다 남자? 물감보다 아두이노!  (15) 2010/03/30
CDROM drive stepper motor hack  (13) 2010/03/05
GPS Logger 자작기  (11) 2009/08/17
Trackback 0 : Comments 36

Trackback Address :: http://blog.whattomake.co.kr/trackback/163 관련글 쓰기

  1. Favicon of http://blog2.cctoday.co.kr BlogIcon 꼬치 2010/04/07 09:28 Modify/Delete Reply

    당황하는 중... ㅠㅠ 외계언어나온당...

    • pasjiran 2010/04/07 10:08 Modify/Delete

      이해가 안가는 단어는 따로적어놓으시면 mrkiss님이 답변해주실겁니다 :)

    • Favicon of http://blog.whattomake.co.kr BlogIcon MrKiss 2010/04/08 02:27 Modify/Delete

      우선 제 대신 답글도 달아주시는 파시란님께 먼저 감사드리구요 ^^
      꼬치님 프로그래밍이란게 뭐 그런거 아니겠어요? ㅎㅎ 뭐 일단 프로그래밍 언어가 영어 기반이답니 더 생소한 면도 있구요.
      그리고 관심이 있는 만큼 보이는 법아니겠습니까? 관심만 있으시면 제가 개인지도도 해드릴수 있으니 말씀만하세요 ㅎㅎ

  2. 안씨 2010/04/07 12:09 Modify/Delete Reply

    앞으로의 강좌 기대하고 있습니다. 좋은내용 감사해요~

    • Favicon of http://blog.whattomake.co.kr BlogIcon MrKiss 2010/04/08 02:29 Modify/Delete

      힘을 얻게 되네요 감사합니다^^
      아울러 강좌가 더 나아질 수 있는 구체적인 피드백도 곁들여 주시면 더 감사하겠습니다~

  3. 이재빈 2010/04/08 13:39 Modify/Delete Reply

    안녕하세요~ 디자인을 공부하는 학생입니다:)
    이번에 아두이노를 갖고 워크샵을 진행하게 되었는데
    시작에 큰 도움이 되네요~
    아두이노가 어떤건지 전혀 몰랐거든요..ㅎ
    앞으로 계속될 강좌 기대하겠습니다!

    혹시 워크샵 진행중에 모르는 부분이 생기면 이멜 보낼께요~
    알려주세요^^ㅎ

    • Favicon of http://blog.whattomake.co.kr BlogIcon MrKiss 2010/04/08 20:15 Modify/Delete

      도움이 된다니 다행이네요 ^^
      질문도 댓글로 해주셔야 다른사람들에게도 공유가 되니까요 댓글로 질문해주세요 ^^

  4. 2010/04/16 17:46 Modify/Delete Reply

    비밀댓글입니다

    • Favicon of http://blog.whattomake.co.kr BlogIcon MrKiss 2010/04/16 21:56 Modify/Delete

      와 감사합니다. ^^
      조만간 연락드리겠습니다~

  5. 2010/04/19 16:34 Modify/Delete Reply

    좋은 정보 감사합니다. 저 근데 LED키고 끄는..전선을 연결하고, 브레드보드에 뭐를 꼽고..그런 사진이나 이미지 같은건 없나요..?ㅇ_ㅇ;

    • Favicon of http://blog.whattomake.co.kr BlogIcon MrKiss 2010/04/19 17:47 Modify/Delete

      아 그게 빠졌군요 --; 추가하도록 하겠습니다 ^^

  6. jazzbach 2010/05/11 02:18 Modify/Delete Reply

    아놔 이거... 너무 재밋어 보이는데요? 프로그램 짜다가 구글링 하던차에 우연히 들렀어요. 한 번 건드리기 시작하면 무한 오덕의 세계로 가버릴 것 같군요.ㅋㅋㅋㅋ

    • Favicon of http://blog.whattomake.co.kr BlogIcon MrKiss 2010/05/11 14:35 Modify/Delete

      일단 하나 사시구요. 손에 잡고 나면 어느 순간 도끼자루 썪어 있을 지도 ㅎㅎ

  7. 스랑 2010/05/19 14:35 Modify/Delete Reply

    이번에 키트 구입해야겠습니다 ㅋ

    프로그램도 모르는초보로써..;; 위에 현님이 질문하신 내용이 저도 좀 궁금합니다^^;

    그리고 빵판? 사용법도 은근 기다려지네요!


    (나중에 시간되시면 혼자 배울때 프로그램 어떤걸좀 멀로 공부해야하는지도 추천해주세요~^^
    아무기초도 없으니 좀더 알고싶다는 욕망이 ㅎㅎ;;)

  8. 세벙이 2010/07/15 13:33 Modify/Delete Reply

    아두이노 검색하다 들어왔는데요 설명 완전 친철하게 써주셔서 이해가 잘되여ㅋㅋ
    쉬운 부분이라 그런가? ^^:

    • Favicon of http://blog.whattomake.co.kr BlogIcon MrKiss 2010/07/15 15:03 Modify/Delete

      아직은 쉬운부분이기도 하지만, 아두이노 자체가 그리 어렵지 않습니다.
      그리고 저도 어떻게 하면 쉽게 설명할 수 있을지 고민해가면서 쓰고있습니다 ^^

  9. 2010/10/12 09:28 Modify/Delete Reply

    비밀댓글입니다

    • Favicon of http://blog.whattomake.co.kr BlogIcon MrKiss 2010/10/13 05:23 Modify/Delete

      맞습니다. 아두이노는 C의 문법을 그대로 따르고 있습니다. 거기에 라이브러리 식으로 몇가지 추가된 형태죠.
      아두이노로 보드간 무선통신도 물론 가능하구요. 하지만 아두이노 자체로 되는건 아니고 XBEE같은 무선 모듈을 추가로 연결해야합니다.
      RBBB는 작고 싸지만 USB-TTL케이블을 별도로 필요로 하구요 확장을 위한 각종 아두이노 쉴드와는 사이즈가 안맞아서 확장도 만능기판등으로 직접제작하셔야합니다.
      구입은 미국에 있는 moderndevice.com에서 할 수 있습니다. 그 사이트에 매뉴얼이 있는데 그안에 회로도도 있구요.
      질문은 블로그 댓글로 올려주시는게 다른 분들께도 도움이 될수 있으니 되도록 공개 댓글로 올려주시면 좋겠구요
      질문은 언제나 환영입니다 ^^

  10. 2010/10/18 20:42 Modify/Delete Reply

    비밀댓글입니다

    • Favicon of http://blog.whattomake.co.kr BlogIcon MrKiss 2010/10/19 15:50 Modify/Delete

      stop을 누른다고 아두이노가 멈추지는 않습니다 --;;
      아두이노 같은 마이크로컨트롤러는 리셋을 누르거나 해서 다시 시작하도록 할 수는 있어도, 정지라는 개념이 따로 없어요. 전원을 끄는것이 곧 정지죠. 전원만 연결시키면 계속 돌아갑니다.
      솔직히 그 stop은 왜 만들었는지 저도 궁금합니다. 지금해보니, 컴파일하다가 그거 누르니 멈추긴 하네요 에러도 나면서..
      아마도 프로세싱의 개발환경을 가져오면서 빼지 않은 것 같네요. 아두이노의 개발환경(코딩할때 쓰는 프로그램)은 프로세싱이라는 그래픽용 언어의 것을 가져다가 쓰거든요. 프로세싱은 컴퓨터에서 돌아가는 프로그램이니까 작성한 코드를 겨별적으로 실행시키고 멈출수가 있어야할테니까요. 인간에게 있어서 사랑니나 맹장같은 것이겠군요. ㅎㅎ

  11. Favicon of http://pragmaticstory.com BlogIcon 황상철 2011/02/16 14:18 Modify/Delete Reply

    좋은 내용 정리해주셔서 잘 보고 있습니다. 이번에 사내 아두이노 스터디를 구성해서 진행하는데 블로그 글을 첫 스터디 교재로 삼았습니다. (손에잡히는 아두이노는 참고서적입니다.) 블로그 내용을 PPT로 만들어서 사내에 전파해도 괜찮을까요? 물론 내부 스터디용이고 출처는 명시하겠습니다.

    • Favicon of http://blog.whattomake.co.kr BlogIcon MrKiss 2011/02/18 00:07 Modify/Delete

      물론쓰셔도 됩니다. 교재로까지 써주신다니 영광이네요^^

  12. 권순영 2011/03/28 23:21 Modify/Delete Reply

    아두이노를 처음 접한 대학생입니다.. 매우 도움이 되고잇어요 !!

    그런데 이 밑의 글에서.. 초보자가 접해서 만들수있는게 있나요 ?

    만들만한거좀 가르쳐주세요 ㅠㅠ

    • Favicon of http://blog.whattomake.co.kr BlogIcon MrKiss 2011/03/29 14:19 Modify/Delete

      처음엔 제가 쓴 강좌에 있는 쉬운것들을 따라해보는게 순서겠죠? 첨 부터 진도에 욕심을 내면 성공의 선순환보다 실패의 악순환에 빠지게 됩니다.
      작은것이라도 성공해보면 의욕이 생기죠. 하지만 첨 부터 어려운것에 도전해서 실패를 맛보면 의욕 싹 사라집니다.
      강좌를 먼저 따라해 보세요. 그 후엔 뭐가 만들만 한지 판단할 지식이 생기게 될겁니다.

  13. 권순영 2011/03/29 16:25 Modify/Delete Reply

    led와 sos 신호등 까진 해봣습니다.. 다음주까지 계획서를 제출해야하는데 ;; 제 실력에 맞는 작품이 머가 잇을지 모르겟네요

    • Favicon of http://blog.whattomake.co.kr BlogIcon MrKiss 2011/04/09 23:48 Modify/Delete

      wired에 수준별 프로젝트들 리스트가 있네요 한번 훑어보시죠 http://www.wired.com/magazine/2011/03/ff_makestuff_projects/

  14. 박은수 2011/09/16 12:39 Modify/Delete Reply

    프로세싱과 아두이노의 관계에 대해 짤막하게나마 설명해주실 수 있으신지... 아두이노 처음 시작하는데 프로세싱은 이거고 아두이노는 이거다, 뭐 이런 식으로 딱히 어떻게 설명을 해야 좋을지 잘 모르겠어서요. ㅠㅠ

    • Favicon of http://blog.whattomake.co.kr BlogIcon MrKiss 2011/09/19 02:14 Modify/Delete

      프로세싱은 PC에서 돌아가고 아두이노는 마이크로컨트롤러보드인 아두이노보드에서 돌아간다는 점이되겠죠.

  15. Favicon of http://netstrolling.tistory.com BlogIcon ::어슬렁 @netstrolling:: 2012/02/17 09:32 Modify/Delete Reply

    우선 스타터킷을 질렀어요. ㅋ

  16. Favicon of http://netstrolling.tistory.com BlogIcon ::어슬렁 @netstrolling:: 2012/02/20 00:51 Modify/Delete Reply

    기록용 댓글입니당^^
    스타터킷을 샀더니 Arduino UNO가 왔어요. 인사이트 책이랑 MrKiss님 글에 있는 Duemilanove와 달라서 살짝 당황했지만 ㅋ
    arduino.cc에서 소프트웨어 다운로드를 받으면, 버젼이름이나 드라이버가 따로 있지 않고, 그냥 'Arduino' 라고만 생깁니다. 왜 나만 드라이버 다운로드를 안해주나 싶어서 계속 뒤졌는데도 없길래 혹시나 해서 바로 USB 꼽아봤더니 연결 성공.
    Processing 이랑 똑 닮은 Arduino 프로그램에 위에 예제를 써서 1초마다 깜빡이기와 3초마다 깜빡이기 업로드해서 성공했습니다. 오호. 신기해라~ 놀라워라~~

    • Favicon of http://blog.whattomake.co.kr BlogIcon MrKiss 2012/02/21 22:32 Modify/Delete

      우노부터 드라이버를 따로 깔지 않아도 바로 되더라구요^^ 전에 쓰던 FTDI드라이버는 평상시 다운되는거 볼수도 없는 맥을 다운시키기도 하는 우악스러운 놈이라 저도 이제 우노와 같은 시스템으로 가려구해요.

  17. Favicon of http://gbtec.co.kr BlogIcon 꽉꽉잉 2012/04/04 17:19 Modify/Delete Reply

    아두이노 교육 Kit 아두이지가 나왔습니다~
    한번 구경 와보세요 ~~
    http://cafe.naver.com/arduinostory/7904

  18. 아두이놈 2013/05/10 17:20 Modify/Delete Reply

    말씀하신내용으로 PC에 다운받아 설치하였습니다.
    arduino-1.0.4-windows 폴더생성되고 그안에 arduino.exe 파일을 실행하니 님과 같은 화면이 뜨네요. ㅎㅎ
    위에 설명하신 LED 깜빡이는 프로그램(?)를 ctrl+V로 붙쳐넣기해서
    바탕화면에 sketch_may10b 폴더가 생기고 그안에 동일한 이름의 .ino파일이 생성됩니다.
    저장다음에는 컴파일링(기계어로 변환?)단계인데 메뉴를 못찾아서 확인버튼을 클릭하니
    "바이너리 스케치 사이즈 : 1,804 바이트 (최대 32,256바이트) "
    라고 메시지가 뜹니다. 잘된건가요? 현재 킷트나 빵판 뭐 이런것은 없습니다.
    질문이요! 꼭 킷트로만 실행의 여부를 확인할수 있나요?
    오픈소스 프로그램이라고들 했으니 혹시 결과물이 컴퓨터에서 그래픽이나 모니터 상에서 그냥 확인할수 있는(시뮬레이션 같은) 뭐 이런것은 없나요?
    하고 싶은것은 많습니다만, 저한테는 너무 새로운세계라 부족한게 많습니다.
    글을 읽어 주시어 감사합니다.

  19. Favicon of http://blog.whattomake.co.kr BlogIcon MrKiss 2013/05/22 18:51 Modify/Delete Reply

    아두이노 시뮬레이터도 있다는것 같긴 합니다만. 아두이노란게 컴퓨터 안에서만 벌어지는 일들이 답답해서 그 밖으로 나가고자 하는 건데 아두이노 없이 컴퓨터로만 하고자 하시는건 아두이노를 하는 의미가 없으니 어서 하나 사시죠 ^^

  20. 당황중.. 2014/07/03 17:55 Modify/Delete Reply

    전 아무리 봐도...이해가 불가 합니다..ㅜㅜ 언능 배워서...카운터 리셋시키는 방법을 터득해야하는데...ㅜㅜ 까마득하네여...

  21. BlogIcon RKK 2014/09/01 16:53 Modify/Delete Reply

    잘보고갑니다
    아두이노 초보자로써 유용하게쓰이네요

Write a comment

◀ PREV : [1] : ... [33] : [34] : [35] : [36] : [37] : [38] : [39] : [40] : [41] : ... [191] : NEXT ▶