1. ‘나만의 온도계’ 프로젝트 시작하기 저는 여러분이 이번 실습을 하기위해서 ‘갈릴레오1’, ‘갈릴레오2’ 또는 ‘에디슨’ 중 어떤 보드를 사 용할 지를 모릅니다. 첫 번째 경우, 만약 여러분이 기존 ‘갈릴레오1’ 사용자라면, 뒤에 취급하게 될 ‘서보 모터’ 부분에서 제대로 작동하지 않는 황당한 경험을 하게 될 것입니다. 제가 해결 방법 을 알려드릴테니, 너무 걱정하지 않으셔도 됩니다. 두 번째 경우는 기존에 ‘갈릴레오1’을 사용하시다가, 보드를 ‘갈릴레오2’나 ‘에디슨’으로 바꾼 상황 입니다. 이 경우는 여러분 PC의 C:\ 디렉토리에 있는 ‘arduino-1.5.3’ 폴더를, Kidspc 사이트 ( http://www.kidspc.co.kr )에 있는 ‘arduino-1.5.3-intel.1.0.3’ 폴더로 대체하시면 됩니다. 당연히, PC 화면 아래의 작업 표시줄에 있는 기존의 Arduino IDE icon을 삭제하고, ‘arduino-1.5.3-intel.1.0.3’폴 더 안에 있는 IDE 아이콘을 작업 표시줄에 고정시켜서 사용하시면 됩니다. 만약 여러분들이 처음으로 ‘갈릴레오2’나 ‘에디슨’을 사용하신다면, 먼저 Kidspc 사이트에서 ‘arduino-1.5.3-intel.1.0.3’폴더를 다운로드 받으셔서, C:\
디렉토리에 복사 하십시오.
다음은, 인터넷으로 JDK(Java Development Kit)를 찾으셔서 여러분 OS(32bit or 64bit)에 맞게 설치 하십시오.
보드에 전원을 연결하고 USB를 PC와 연결하십시오. ‘장치 관리자’에서 ‘기타장치’아래에 ‘Gadget Serial v2.4’가 생겼죠? 초급에서 배웠던대로, 마우스 오른쪽 버튼으로 ‘드라이버 소프트웨어 업데 이트’를, 다시 ‘컴퓨터에서 드라이버 소프트웨어 찾아보기’를 선택하십시오.
새로운 창의 ‘찾아보기’를 클릭하고, 작은 창에서 ‘tools’까지 찾아가서, ‘확인’을 클릭하면, 작은 창 이 없어집니다.
이제, ‘다음’을 클릭하십시오. ‘장치 관리자’창의 ‘포트(COM&LPT)’밑에 ‘Galileo’라고 나오면 설치 끝!
2. ‘온도 센서’의 이해와 Sketch 불러오기 지금부터, ‘나만의 온도계’를 만드는 실습을 해보겠습니다. 우선, 주변 온도를 감지하는 Input소자 인 ‘온도 센서’에 대해 알아야 합니다. 저는, ‘Analog Devices’라는 회사에서 나온 ‘TMP36’을 선택하 였습니다. ‘TMP36’은 취급하기 쉽고 측정범위가 넓어서, 많은 온도센서 중에서 가장 많이 이용되는 것 중의 하나입니다. 측정 범위는 -40℃ 에서 125℃로, 영하의 온도도 측정이 가능합니다. 오차가 2도 정 도여서 정밀한 측정에는 적합하지 않습니다.
‘Starter Kit’에 있는‘Bread Board’와 점퍼선 3개를 꺼내고 ‘TMP36’을 ‘Bread Board’에 꽂았습니다. ‘TMP36’의 글자가 보이는 부분을 기준으로, 왼쪽 핀은 갈릴레오의 5V에 연결했습니다. 가운데 핀 은 갈릴레오의 A0에, 오른 쪽 핀은 갈릴레오의 GND에 연결했습니다.
이제, 갈릴레오보드에 전원을 연결시켜 주십시오. 갈릴레오보드와 PC간에 USB도 연결해 주십시오.
실험을 하기 전에, 저는 우리의 사이트에서 ‘Tsensor’ 폴더를 다운받아 바탕화면에 복사했습니다. 우선 아래의 ‘장치 관리자’의 ‘포트(COM&LTP)’에 Galileo가 보이시나요? COM숫자를 잘 기억하셔 야 합니다.
다음으로, ‘아두이노 IDE’를 불러 오십시오.
위에 있는 ‘Tools’ 메뉴에서 ‘Serial Port’가 앞에서 확인한 COM로 제대로 선택이 되었는지, ‘Board’ 는 여러분들이 사용하는 것과 같은 것으로 체크되어 있는지 꼭 확인하십시오.
마지막으로, ‘File’메뉴를 선택하고 ‘Open’을 클릭하십시오.
바탕화면에서 ‘Tsensor’ 폴더를 찾으십시오.
‘Tsensor’ 폴더 안에 ‘Tsensor.ino’ file을 선택하십시오.
3. ‘온도 센서’의 동작확인을 위한 Sketch 분석 메뉴표시줄 바로 아래에 있는 아이콘 중 ‘Update’ 아이콘을 클릭하십시오. Compile이 완료 되었다 는 메시지가 IDE 맨 아래 쪽 검은 화면에 나오면, ‘Update’ 아이콘이 있는 줄의 오른쪽 끝에 있는 ‘Serial Monitor’를 클릭해 보십시오. 새로운 창에 현재 기온이, 섭씨와 화씨로 표현되어 계속 나열 되어 나오고 있는 모습을 보실 수 있습니다.
Source Code를 살펴볼까요? 빨간색 테두리 안에 있는 부분은, 주변 온도의 Input을 받아 온도 센 서인 ‘TMP36’의 스펙에 따라 실제 온도값으로 계산하는 Source Code입니다. 참고로, 계산방법은 각 ‘온도 센서’마다 다릅니다.
‘analogRead()’ 명령어는 ‘온도 센서’의 Input을 받는 역할을 합니다. 갈릴레오 보드안에는 ADC라 는 전자 소자가 있어, 0에서 5볼트 사이의 아날로그 전압 INPUT 값을, 0에서 1023까지의 디지털 값으로 바꿔줍니다. 화살표 모양의 테두리 안에 있는 부분은, ‘Serial Monitor’ 창안의 내용을 우리가 원하는 것으로 나 타나게 해주는 Source Code입니다.
‘TMP36’을 엄지 손가락과 집게 손가락으로 살짝 집어 주십시오. ‘Serial Monitor’의 숫자들이 변하 는 것을 확인할 수 있으신가요? 우리 체온이 더해져서, ‘TMP36’를 통한 Input값이 더 높아 집니다. 손을 떼 보십시오. 다시, 온도 센서의 Input값이 낮아 지는 것을 확인 하실 수 있습니다. 다음 실 험을 할 때까지, 갈릴레오의 전원을 갈릴레오에서 분리해 주십시오. PC의 USB도 빼주십시오.
4. ‘서보 모터’와 ‘PWM’ OUTPUT ‘Actuator’는 모터와 같은 소자로, 전기등의 에너지 원을 받아 물체를 움직이거나 제어합니다. 이 들 중 ‘서보 모터’는 DC모터와는 달리 움직이는 범위가 0도에서 180도로, 서보모터 축에 붙는 막 대인 ‘Horn’의 각도로 확인할 수 있습니다. 가장 큰 특징으로는 명령에 따라 지정된 위치로 회전 할 수 있고, 다른 위치로 이동하라는 새로운 명령을 받기 전까지는 계속해서 그 위치에 머물게 됩니다. 그래서, ‘도어록'이나, 드론을 날릴 때 또는 자동차의 방향을 바꿀 때 활용될 수 있습니 다. 이번 실험에 제가 사용할 제품은 Hextronik사의 ‘HXT900’입니다. ‘서보모터’ 축에 붙는 막대인 Horn의 각도는, PWM signal 로
‘서보모터’에
전달되어
결정됩니다.
따라서
반드시
PWM이 지원되는 핀에 연결되어야 합니다. ‘Pulse Width Modulation’이라는 PWM기술은 진동의 주기를 강제로 아 주 짧게 만든 후, ‘Duty Cycle’개념을 이용해서 에너지값을 변화시키는 방식입니다. 5V 진동의 신호가 있다고 가정 하 겠습니다. 그 신호의 주기동안 20%만 On이 되어있고 나 머지 80%는 Off인 상태면, 그 신호의 ‘Duty Cycle’은 20%라고 합니다. 예를 들어, PWM으로 20% ‘Duty Cycle’을 만들면 5V의 20%에 해당되는 에너지만 나와서 전달되게 됩니다. PWM은 Analog효 과를 만듭니다. 그래서 명령어로는 ‘analogWrite()’를 사용합니다. 그러나, PWM은 실질적으로 디지 털기술입니다. 그래서 디지털 핀들 중 물결무늬, 즉 ~가 있는 Pin에서만 동작됩니다.
5. ‘서보 모터’ 동작 확인을 위한 연결과 Sketch 제가 가지고 있는 ‘서보 모터’의 동작을 확인하기 위해, 서버 모터의 3가닥 선과 가장 비슷한 색 의 점퍼선 3개를 ‘Starter Kit’에서 선택했습니다. 그런 다음, 서버 모터의 연결부와 점퍼선을 같은 색으로 서로 연결하였습니다.
이제, 점퍼선 반대 쪽을 갈릴레오 보드에 연결해야 합니다. 가장 어두운 색의 점퍼선을 갈릴레오 의 GND pin(‘-선’)에 연결합니다. 가운데 점퍼선은 갈릴레오의 5V pin(‘+선’)에 연결했습니다.
남아있는 점퍼선을 갈릴레오의 디지털 핀 5번에 연결합니다.
5번 pin을 선택한 이유는, PWM 기능을 지원하기 때문입니다. 본격적인 실험을 위해, 갈릴레오 보드에 전원을 연결합니다. 갈릴레오 보드와 PC간에 USB도 연결 했습니다. 저는 우리의 사이트에 있는 ‘Servo’폴더를 제 PC 바탕화면으로 다운로드 했습니다.
자 이제 서버 모터의 동작을 확인하는 Sketch를 불러올까요? PC화면 아래의 ‘작업 표시줄’에 있 는 무한대 표시처럼 보이는 ‘아두이노 IDE’를 불러 왔습니다. IDE화면 위에 있는 ‘File’메뉴를 선택 해서 ‘Open’을 클릭하여 바탕화면에서 ‘Servo’ 폴더를 찾은 후, Servo 폴더 안의 ‘Servo.ino’ file을 선택하였습니다.
6. ‘서보 모터’ Sketch 분석 아래의 ‘서보 모터’ Sketch를 보십시오. 첫 번째 줄의 빨간색 테두리 안에 있는 부분은, Arduino IDE에 포함된 ‘Servo’ 라이브러리를 사용할 것을 명시하고 있습니다. 파란색 테두리 안의 Code는, ‘ms’라는 변수가 ‘Servo’ object의 사례임을 정의하고 있습니다. 녹색 테두리 안의 부분은, 서보 모 터를 제어하기 위해 ‘PWM’이 가능한 Digital pin 5번을 사용할 것을 설정하고 있습니다.
Loop 함수 안의 명령어들은, ‘Servo’ 라이브러리 덕분에 각도만 간단히 정의하면 Horn이 그에 따 라 움직이게 됩니다.
예를 들어 90도라고 코딩하면, ‘Servo’ 라이브러리에서 그에 따른 PWM signal을 Digital pin5번을 통해 보냅니다. 서보 모터는 PWM 신호를 받아, 스펙에 의해 그에 맞게 Horn을 움직이게 됩니다. 0도나 30도로 코딩했으면 서보 모터는, 그에 맞게 스펙대로 Horn을 움직입니다. 즉, 우리는 모터 가 ‘PWM’ 신호를 어떻게 해석하고 활용하는가를 자세히 알 필요 없이, 단순히 우리가 원하는 각 도에 대한 정보만 코딩하면 됩니다.
7. ‘서보 모터’ 실습의 문제에 대한 해결 ‘Update’ 아이콘을 클릭하면 어떤 현상이 발생할까요? Galileo 1을 사용하시는 분들은 Compile도 중에 에러 메시지를 만나게 될 것입니다. Galileo2를 가지고 계신분들은, ‘서보 모터’의 Horn이 0도 와 180도로 정확하게 가리키지 않는다는 것을 확인하셨을 것입니다. 우선 Galileo1의 문제를 해결하도록 하겠습니다. C:\ 디렉토리에 있는 ‘arduino-1.5.3/hardware/arduino/x86/libraries/Servo/’폴더 안의 두 file을 우 리의
사이트에서
Servo-2’폴더에 그리고
다운로드
있는
../Wire/폴더에
file들로 있는
받은
‘galileo-
교체하십시오. file
두
개
도 ../Servo/폴더에 복사하시면 문제가 해결됩 니다.
이젠, Galileo2의 경우입니다. 먼저 이해를 돕기위해, ‘HiTec’사의 ‘HS-55’라는 제품이 PWM의 사용 률에 따라 Horn의 위치 변화시키는 모습을 살펴 보십시오. 그러나, 저는 HXT900을 사용하고 있 어서 이 제품의 스팩에 따라 필요하면 ‘Servo’ 라이브러리를 수정해야 합니다. 일반적으로 서보모 터는 48Hz 즉, 약 20ms주기의 진동을 ‘PWM’ 신호로 받게 되어 있습니다. ‘arduino-1.5.3intel.1.0.3/hardware/arduino/x86/libraries/Servo/’폴더 안의 ‘Servo.h’ file을 열어 보십시오. ‘#define MIN_PULSE_WIDTH 544’와 ‘#define MAX_PULSE_WIDTH 2400’이라는 부분이 있는데, 이들은 Horn 의 0도 기울기는 2.7% Duty(544us)로, 180도는 12% Duty(2400us)라는 의미 입니다. 스팩에 맞게 ‘450’과 ‘2450’으로 수정하시면 문제가 해결 됩니다. 다음 실험을 위해, 전원과 USB를 갈릴레오 보 드에서 분리해 주십시오.
8. ‘서보 모터’와 ‘온도 센서’를 갈릴레오에 연결 앞에서 실습한 ‘온도 센서’에 연결한 ‘Bread Board’위의 점퍼선들을 조금 조정하겠습니다. 갈릴레오 의 연결부에는 GND pin은 많은데, 5V pin은 부족하기 때문입니다. ‘Bread Board’위의 온도 센서의 왼쪽 즉, 5V pin에 연결된 점퍼선을 ‘Bread Board’위의 ‘+’선에 있는 구멍에 연결해 주십시오. 온도 센서 오른쪽 즉, GND pin에 연결된 점퍼선을 ‘Bread Board’위의 ‘-’선에 있는 구멍에 연결해 주십 시오.
‘Starter Kit’에서 빨간색 점퍼선 하나를 가지고 와서, 갈릴레오의 5V pin에 연결하고, 나머지 한 쪽 은 브레드 보드위의 ‘+’선에 있는 구멍에 연결해 주십시오. 결과적으로, 온도센서의 5V pin이 Galileo의 5V pin 연결부에 연결 되었습니다.
‘Starter Kit’에서 검정색 점퍼선 하나를 가지고 와서, 갈릴레오의 GND pin에 연결하고, 나머지 한 쪽은 브레드 보드위의 ‘-’선에 있는 구멍에 연결해 주십시오. 서보 모터에 연결된 3가지 점퍼선 중에 가장 어두운 색을, ‘Bread Board’의 ‘-’선에 연결해 주십시 오. 서보 모터에 연결된 점퍼선 중에 가운데 선을, ‘Bread Board’의 ‘+’선에 연결해 주십시오. 결과 적으로, Galileo의 5V pin 연결부에 연결 될 것입니다. 서보 모터에 연결된 점퍼선 중에 남아 있는 것을, ‘Galileo’ 보드의 Digital pin 5번에 직접 연결해 주십시오. 전원과 USB을 연결하십시오.
9. ‘Backing Sheet’연결과 최종 Sketch 불러오기 저는 이번 실험을 위하여, 아날로그 온도계처럼 보이는 ‘Backing Sheet’를 준비했습니다.
현재 온도를 가리키기 위해, 화살표도 준비했습니다. 화살표는 서보 모터의 Horn에 부착하였습니 다.
다양한 온도 범위에서 실험하기 위해, 각 ‘Backing Sheet’는 다른 온도 범위를 가지도록 했습니다. 조립을 위해서, 서보 모터와 Backing Sheet을 양손에 들고 Backing Sheet를 서버 모터의 축에 꽂 았습니다. 그런 다음 Horn이 붙은 화살표를, 서버 모터의 축에 연결하였습니다. 가장 좋은 모습은, Backing Sheet가 바닥에 편하게 위치해 있는 경우입니다. 그러나, 이러한 모습이 되려면 시행착오 를 몇 번 겪어야 합니다. 그전까지는 서버 모터와 Backing Sheet를 손으로 들고 실험을 해야 합니
다. 갈릴레오에 전원 케이블과 USB 케이블을 연결해 주십시오. 저는 우리의 사이트에 있는 ‘MyT’ 폴더를 내려 받아서 제 PC 바탕화면에 복사했습니다. 이번에는 진짜로 ‘나만의 온도계‘ 실험을 위한 Sketch를 불러오겠습니다. IDE화면 위에 있는 ‘File’ 메뉴를 선택하시고 ‘Open’을 Click하십시오. 바탕화면에서 ‘MyT’ 폴더를 찾으십시오. MyT 폴더 안 의 ‘MyT.ino’ file을 선택하십시오. 이 Sketch는 앞에서 다루었던, 온도 센서와 서보 모터의 Source Code를 합친 내용입니다.
10. ‘나만의 온도계’ 실습완성 Backing Sheet에 있는 온도계의 범위와, 0도에서 180도사이의 서보 모터의 범위가 다른데 어떻게 해야 할까요? 그래서, 서로 다른 할 당 범위를 찾아서 맞춰주는 map()함수를 사용했습니다. 참고로, map()함수 에서는 정수 연산이 수행됨으로, 지정된 범위 내의 정수 만 보여집니다. 소수 부분은 반올림 되지 않고 모두 버려집니다. 주의할 점은, map()함수가 입출력 값을 제한하지 않는다는 것입니 다. 즉, 실제 온도가 온도계의 범위를 벗어나면, 서보 모터에 입력 되는 값도 범위를 벗어나게 됩니다. 이러한 상황을 막기위해, 원치 않는 결과는 constrain() 함수로 제한하면 됩니다. ‘upload’와 ‘serial monitor’를 클릭했습니다. Source Code를 수정하여, 몇가지 나타난 문제를 해결해 보겠습니 다. 우선, 화살표가 너무 예민하게 움직입니다. Delay를 500에서 2000으로 수정하였습니다. 다음으로는, 온도가 반올림이 되 어 좀더 정확하게 되도록 Source Code를 추가 했습니다. 마지막으 로, map() 안의 두가지 내용을 수 정했습니다. 왜냐하면, 제 손에 있 는 Backing Sheet는 15도에서 35도까지기 때문입니다. 또 0도와 180도의 위치를 바꾸면, 상식에 어긋나게 Baking Sheet의 각도 를 반대로 할 필요가 없게 됩니다.
이 것이 map()함수가 제공
하는 강력한 기능 중 하나입니다. 자 그러면, 수정된 Source Code에서 ‘upload’를 클릭해 보십시오. 그리고, 있는 ‘TMP36’ 온 도 센서를 엄지 손가락과 집게 손가락으로 살짝 집어 1분 정도 유지해 주십시오. ‘Serial Monitor’의 숫자들이 변하는 것을 확인 할 수 있으신가요? Backing Sheet위의 화살표도 그에 따라 변하 게 됩니다.