[아두이노 체험기] "나도 이제 불을 켤 수 있어요"
마이크로소프트 'IoT & 코딩' 아카데미
- 2015년 1월 19일
- By 마이크로소프트웨어 서준석 기자
1월 16일 저녁 20명의 기자들이 광화문에 위치한 한국마이크로소프트(이하 한국MS)에 모였습니다. 한국MS에서 준비한 'IoT & 코딩' 아카데미에 참석하기 위해서였는데요. 금요일 저녁에 마련된 행사라 기자들이 많이 참석하지는 않을 거라는 예상과 달리 예정된 20석이 모두 찼습니다. 한국MS가 사물인터넷(IoT : Internet of Things)와 코딩을 어떻게 엮어서 교육한다는 것인지 무척 궁금했습니다. 교육장에 가보니 그 실체는 '아두이노(Arduino)'를 이용한 코딩 실습이었습니다.
아두이노는 IoT를 이야기할 때 절대 빠지지 않는 '약방의 감초' 같은 존재죠. IoT가 거론되기 이전부터 DIY(Do It Yourself) 메이커(Maker)나 미디어 아티스트들에게 상당히 인기 있던 초소형 개발 보드입니다. 대표적인 오픈소스 하드웨어로 잘 알려져 있으며, 저렴한 가격 덕분에 IoT 서비스를 준비하는 이들이 프로토타입을 개발할 때 많이 사용합니다.
이런 아두이노 개발을 기자들에게 가르치는 것이 이번 미디어 아카데미의 목적이었습니다. 물론 개발이라고 할 만큼 거창한 걸 만드는 건 아니고, 간단한 코딩을 통해 아두이노에 연결된 몇 가지 센서를 제어하는 실습이었습니다. 기자들이 일일 프로그래머가 되는 것이죠. 모인 기자들은 무척이나 기대에 찬 모습이었습니다. 저 또한 그랬습니다. 글로만 접하던 아두이노 개발을 직접 해볼 수 있다니, 설레지 않을 수 없었죠. 마이크로소프트웨어에 실리는 아두이노 관련 외고를 교정하며 아두이노와는 어느 정도 친분을 쌓은 상태였기 때문에 자신감도 조금 있었습니다. 참고로 기자는 프로그래밍의 '프'자도 모르는 문과 출신입니다.
이번 미디어 아카데미의 일일 강사는 김영욱 한국마이크로소프트 부장이었습니다. 김영욱 부장은 월간 마이크로소프트웨어에 전쟁과 IT를 소재로 한 'War of IT'를 기고하는 고정 필진이기도 합니다. 스스로를 '밀덕(밀리터리 오타쿠)'이라고 소개한 김 부장은 " 머글(소설 해리포터에서 마법사가 아닌 '보통 인간'을 지칭할 때 주로 사용)들을 가르치는 심정으로 천천히, 아주 쉽게 교육하겠노라"고 선언했습니다. 기자들도 그런 그의 투지에 화답의 박수를 보냈습니다. 이어 김 부장은 "기자를 대상으로 준비한 이번 강연이 다음 주에 있을 중학교 2학년을 대상으로 한 강연과 같다"고 말했습니다. 그 만큼 쉽다는 이야기였죠.
▲ 김영욱 한국마이크로소프트 부장
나도 개발자가 될 수 있을까?
본격적인 교육이 시작됐습니다. 아두이노에 대한 대략적인 설명과 아두이노 개발을 위환 환경 설정에 관한 내용이었습니다. 그리고 곧바로 기자들에게 실습에 사용할 아두이노를 나눠줬습니다. 중국에서 만든 아두이노였습니다. 아두이노는 오픈소스 하드웨어이기 때문에 설계도와 스펙이 모두 공개돼 있습니다. 그 덕분에 누구든지 아두이노를 만들 수 있죠. 중국은 오픈하드웨어 보드를 만들어 내는 최고의 곳입니다. 그것도 정말 저렴하게.
김 부장은 교육을 위해 기자들에게 나눠준 아두이노를 단 돈 1만2000원에 구입했다고 했습니다. 아두이노에 부착하는 각종 부품과 센서들도 가격이 상당히 저렴해 프로토타입을 개발하는 데 큰 돈을 들이지 않아도 된다고 강조했습니다. 여기에 더해 3D프린터로 케이스까지 만들면 상용 제품에 버금가는 작품을 만들 수도 있다네요.
▲ [그림 1] 기자들에게 나눠준 아두이노. 중국제인데 'MADE IN ITALY'?.
그 다음은 아두이노 개발을 위한 환경 셋팅입니다. 아두이노는 공식 사이트(http://arduino.cc/)에서 아두이노 개발 전용 소프트웨어 '아두이노 IDE(Integrated Development Environment, 통합 개발 환경)'를 제공합니다. 윈도우, 맥, 리눅스 세 종류 OS를 지원하기 때문에 자신의 OS에 맞는 IDE를 다운로드해 설치하면 끝.
'백문불여일견'입니다. 일단 따라해보라며 김 부장은 IDE에 '글자'를 써내려 갔습니다. '외계어'와 마주하는 순간이었습니다. 영어인데 영어가 아니고, 숫자인데 숫자가 아닌, 그런 글자. 바로 '프로그래밍 언어'입니다. 김 부장은 "사람과 컴퓨터가 서로 소통할 수 있게 해주는 것이 바로 프로그래밍 언어"라고 설명했습니다. 아두이노는 C를 기본 언어로 사용하지만, 실제 C와는 조금 다릅니다. 아두이노 개발 편의를 높이기 위해 조금 변형된 C를 사용한다는군요.
일단 김 부장이 쓰는대로 똑같이 썼습니다. 그리고 시키는대로 아두이노에 나눠준 LED를 연결하자 불이 들어왔습니다. 신기했습니다. 김 부장은 이게 바로 '프로그래밍'이자 '코딩'이라고 했습니다. 후에 김 부장은 우리가 코딩한 것이 어떤 내용인지 차근차근 설명했습니다. 짧은 코드였기 때문에 이해하는 데 어렵지 않았습니다. 13번 핀을 출력 단자로 설정하고, 이 13번 핀을 켭니다. 그리고 1초 동안 기다렸다가 다시 13번 핀을 끄라는 내용입니다. [그림 2]을 보면 이해하기 더 쉽습니다. 이런 쉬운 예제 코드는 아두이노 IDE에서도 자체적으로 제공합니다. 처음 아두이노를 공부하는 사람이라면 기본으로 제공하는 예제들을 하나씩 살펴보는 것만으로 많은 도움이 될 것 같네요.
▲ [그림 2] LED를 켜는 코드
간단한 실습을 마치고 기본적인 C언어 교육에 들어갔습니다. for, else 등의 함수와 연산자를 배웠습니다. 연산 기호의 경우 수학에서 쓰는 것과 약간 다릅니다. C에서는 같다를 '=='으로, 같지 않다를 '!='로 표시합니다. 조금 다른 연산 기호 때문에 헷갈리 수도 있는데요. !=의 경우 '김태희를 닮은 예쁜 여자를 소개시켜준다기에 나갔다가 얼굴을 보고 아니라서 깜짝 놀랐다'라고 생각하면 외우는 데 도움이 된다고 김 부장이 조언했습니다. 절대 잊어버릴 일은 없을 것 같습니다.
▲ [그림 3] C언어의 연산자
본격 프로그래머 되기
조금 더 어려운 실습을 해보자며 이번엔 '브레드보드'라는 걸 나눠줬습니다. 개발자들은 이걸 쉽게 '빵판'이라고 부른답니다. 영화배우 브레드피트를 일부 팬들이 '빵 형'이라고 부르는 것과 같은 느낌이라네요. 이 빵판에는 구멍이 엄청나게 많습니다. 여기에 다양한 센서와 케이블을 연결하는 것이죠. 이 빵판만 있으면 굳이 납땜을 할 필요도 없습니다. 그냥 간단히 끼워보면서 테스트할 수 있어 프로토타입 개발에도 유용하게 쓰인다는군요.
▲ [그림 4] 브레드보드와 케이블
빵판의 구조를 이해하기 위해 앞서 진행했던 LED 켜기를 빵판을 써서 한 번 더 했습니다. 그리고 바로 다음에는 여기에 버튼을 하나 달아보는 실습을 했습니다. 버튼을 누르면 LED가 켜지고 떼면 LED가 꺼지는 아주 간단한 실습입니다. 여기서 기자들은 시쳇말로 '멘붕(멘탈붕괴)'을 경험합니다. 코딩도 하기 전에 연결해야 할 케이블이 배로 늘어나자 교육장이 웅성거리기 시작했습니다. 이번 교육을 돕기 위해 자원한 MSP(Microsoft Student Partner) 학생들이 없었다면 큰 일이 날 뻔 했습니다. 교육장에 배치된 MSP 학생들은 아두이노를 잘 다루는 학생들이었습니다. 그 학생들 덕분에 교육장이 아수라장이 되는 것만은 막을 수 있었습니다.
버튼에는 저항을 함께 장착해야 합니다. 저항은 말 그대로 전력이 흐르는 걸 방해하는 부품인데, 버튼을 누르지 않았을 때는 이 저항을 타고 전류가 흐르게 되는 원리라는군요. 저항과 버튼을 연결하느라 이 부분에서 조금 헤맷습니다.
▲ [그림 5] 저항과 버튼을 연결한 모습
다음은 스피커를 아두이노에 연결한 후 여러 가지 소리를 출력하는 실습이었습니다. 다행이 버튼으로 LED를 켜는 실습보다는 쉬웠습니다. 일단 케이블을 많이 연결하지 않아도 돼 다행이었죠. 대신 코드가 조금 복잡했는데, 여기서 개발자들이 말하는 '삽질'을 조금이나마 경험해 볼 수 있었습니다. 아두이노는 간단히 tone이라는 함수를 사용해 소리를 출력할 수 있습니다. tone(핀 번호, 주파수 값, 딜레이 값)을 써 넣으면 그대로 스피커가 소리를 냅니다. 핀 번호는 당연히 스피커가 연결된 핀 번호이고, 주파수는 아두이노 웹사이트에 보면 음에 대한 주파수 값를 제공하고 있으니 그걸 참고하면 됩니다. [그림 6]을 보면 C3이라고 써 있는 것이 3옥타브 '도'입니다. 그러니 D3은 '레', E3은 '미'입니다. 딜레이는 마이크로초 단위로 넣으면 됩니다. 그래서 1000이 1초인 것이죠.
▲ [그림 6] 주파수와 음
이제 이것들을 바탕으로 아두이노가 국민 동요 '비행기'를 재생하도록 코드를 짜면 됩니다. 앞서 말한 삽질은 여기서 필요합니다. 각각의 음마다 주파수 값과 딜레이 값을 다르게, 여러 번 입력해야 합니다. 그나마 다행인 건 비행기에 많은 음이 나오지 않는 다는 사실입니다. 곡을 완성하려면 시간이 너무 오래 걸릴 것 같아 일단 1절까지만 입력한 뒤 재생을 해봤습니다. 실제 노래에서는 음마다 음표의 길이가 다른데, 이것까지 완벽하게 구현하려면 딜레이 값을 정교하게 입력해야 합니다. 원리는 알았으니 시간이 충분할 때 다시 해보기로 합니다. 김영욱 부장의 딸은 밤새 코딩해서 곡을 완성했다고 하네요. '개발자의 피'란 이런 것인가 봅니다.
다음은 조도 센서를 연결해 시리얼모니터로 센서가 수집한 정보를 출력하는 실습을 했습니다. 조도 센서는 빛의 양을 측정하는 센서입니다. 시리얼모니터는 아두이노 IDE에서 지원하는 가상 모니터인데, 여기서 각종 센서에서 수집된 값들이 어떻게 출력되는지 확인할 수 있습니다. 코드를 짜고 아두이노에 집어넣으면 조도 센서가 작동하면서 시리얼모니터에 이상한 숫자들이 계속 나타납니다. 숫자는 조도 센서가 임의로 보내는 수치인데, 빛이 많을수록 숫자가 커집니다. 이걸 응용하면 실행활에 사용할 수 있는 유용한 뭔가를 만들 수 있습니다. 조도 센서가 측정한 값이 몇 이상일 때 특정 동작을 수행하도록 명령할 수 있는 것이죠.
▲ [그림 7] 시리얼모니터에 조도 센서의 측정 값이 출력되는 모습
우리는 여기에 스피커를 연결했습니다. 조도 센서가 보내는 값을 받아서, 그 값에 해당하는 음을 내도록 코드를 짜는 것이죠. 앞서 빛이 많을수록 조도 센서의 숫자가 커진다고 했습니다. 스피커 음도 숫자가 커질수록 높은 음을 냅니다. 결과적으로 조도 센서에 조명을 비추면 높은 음이 나고, 반대로 손바닥으로 조도 센서를 가리면 낮은 음이 납니다.
마직막으로 초음파 센서 실습입니다. 초음파 센서는 한 쪽에서 초음파를 보내고 다른 한 쪽에서 보낸 초음파를 받아 거리를 측정하는 센서입니다. 초등학교 과학 시간에 박쥐가 초음파의 원리를 이용해 어두운 곳에서도 자유롭게 비행할 수 있다는 얘기를 들어봤을 겁니다. 박쥐는 자신이 보낸 초음파가 물체 또는 벽에 맞고 돌아오는 시간을 통해 사물 또는 벽과의 거리를 인지합니다. 초음파 센서도 이와 같은 원리입니다. 초음파가 물체나 벽에 맞고 돌아온 시간을 초음파의 속도(74)로 나누면 거리(cm)를 알 수 있는 것이죠.
▲ [그림 8] 초음파 센서와 코드
조도 센서 때와 마찮가지로 여기에도 스피커를 연결했습니다. 초음파 센서의 경우 cm 단위로 거리를 출력하기 때문에 스피커가 소리를 내려면 여기에 100을 곱해줘야 합니다. cm 단위는 10의 자리 숫자이고 주파수는 100의 자리 숫자이기 때문이지요. [그림 8]의 코드에서 가장 아랫쪽에 tone(9, cm*100, 45)라고 적은 게 바로 그런 이유 때문입니다.
교육은 저녁 9시가 돼서야 끝났습니다. 4시간에 걸친 결코 짧지 않은 교육이었는데, 대부분의 기자들이 마지막까지 자리를 지켰습니다. 이론 교육 부분에서는 조금 지루했다는 평가도 있었지만, 실제 실습은 재미있었다는 후기가 많았습니다. 저를 포함한 문과 출신 기자들도 처음 접하는 아두이노와 코딩이었지만 아주 어렵지 않았다고 이야기했습니다. 요즘 소프트웨어 교육이 이슈로 떠오르고 있는데, 왜 교보재로 '아두이노'를 거론하는지 그 이유를 조금은 알 수 있었습니다. 정말 쉽고 재미있었습니다. LED를 켜고 센서를 다루는 기초적인 실습이었지만, 코딩에 대한 흥미를 높이기에는 충분해 보였습니다.
교육이 끝난 후 선물로 MS 로고가 세겨진 짚업 자켓을 받았습니다. 이 자켓에 슬리퍼를 신고 아두이노를 만지작거리면 왠지 완벽한 개발자가 된 듯한 느낌일 것 같습니다. [마소]
댓글 없음:
댓글 쓰기