인텔 갈릴레오2 버튼을 이용한 LED제어하기

 컴퓨터공학을 전공하였지만 전자회로를 다루는 것은 처음이다. 아는 것이 없어서 공부한 것을 정리하는 느낌으로 블로그를 쓰고 있다. 여기에서 다루는 예제는 인텔(아두이노)에서 제공하는 기본적인 소스를 기반으로 하고 있다. 아두이노 IDE 메뉴(파일->예제)에 있는 예제 코드와도 거의 유사하다.
갈릴레오 예제코드 : https://communities.intel.com/docs/DOC-22286
 진행에 앞서 필자는 "아두이노 스타터 킷"을 구입했다. 전자부품을 각각 구입하면 너무 번거롭고 어떤걸 구입해야할지 알기 어렵기 때문에 주요 센서와 기본적인 부품이 들어있는 스타터킷 구입을 추천한다. 10만원 미만의 가격으로 구입이 가능하다.

 이번 글에서는 버튼을 이용해서 LED를 제어하는 방법을 알아보자. 버튼을 누르면 LED에 불이 들어오고 버튼에서 손을 때면 LED에 불이 꺼지게 회로를 구성해보자. 아래의 글을 참고해서 만들어도 된다. 
DigitalReadSerial : https://communities.intel.com/docs/DOC-22428
 기본적인 회로도는 다음과 같다. 인텔 사이트에 나온 내용은 LED가 빠져 있다. 아래의 기본 회로도 오른쪽에 있는 갈색 저항과 검정색 연결선 사이에 LED를 추가하면 된다.
 먼저 스케치 파일을 불러오자. 갈릴레오2를 구동하고, 아두이노 IDE를 실행한다. 그리고 아두이노 IDE 메뉴에서 도구 -> 시리얼 포트 COM3번이 생겼는지 확인하여 갈릴레오2가 정상적으로 연결되었는지 확인한다. 포트3번은 시스템 환경마다 다를수 있다.

 파일 -> 예제 -> 1. Basic -> DigitalReadSerial 메뉴를 클릭해 스케치 파일을 불러온다. 업로드 버튼을 눌러 스케치 내용을 갈릴레오2로 전송한다. 시리얼 모니터를 연다. "0" 계속 출력되는 것을 확인 할 수 있다.
// 푸쉬버튼값을 2번으로 할당한다.
int pushButton = 2;

void setup() {
  //시리얼 통신을 9600의 속도로 연다
  Serial.begin(9600);
  // 푸쉬버튼을 입력값으로 사용한다.
  pinMode(pushButton, INPUT);
}

void loop() {
  // 디지털출력 2번을 읽는다.
  int buttonState = digitalRead(pushButton);
  // 상태를 기록한다.
  Serial.println(buttonState);
  delay(1);        // 지연효과
}
 코드가 정상적으로 업로드 되면 실제로 회로를 만들어보자. 준비물로는 갈릴레오2, 빵판, 전선, 푸쉬버튼, 저항이 필요하다. 이번에 사용하게될 빵판에 대해서 알아보자.
브레드보드(빵판) : https://ko.wikipedia.org/wiki/%EB%B8%8C%EB%A0%88%EB%93%9C%EB%B3%B4%EB%93%9C
 빵판은 전자회로를 만들 때, 납땜을 하지 않고 레고처럼 센서와 전선을 끼워 회로를 만들수 있게 해준다. 위 회로도를 보고, 구멍에 센서와 선을 끼우기만 하면된다.
빵판 이미치 출처 : http://binworld.kr/13
 위 사진처럼 빵판의 위쪽과 아래쪽에 있는 빨간, 파란선은 가로로 연결이 되어 있다. 빨간선은 +전원에 연결하고 파란선은 GND에 연결한다. 이 빨간, 파란선 부분을 버스라고 부른다. 가운데 있는 구멍은 세로 라인끼리 연결되어 있어 이곳에 센서등의 부품을 끼우면 된다. 이곳은 IC영역(회로영역)이라 불린다. 위쪽 회로영역과 아래쪽 회로영역은 서로 분리되어 있다. 빵판에 대한 자세한 사용방법은 아래의 링크를 참고한다.
빵판 사용법 : http://binworld.kr/13
 먼저, 갈릴레오의 5V 출력과 빵판의 빨간색 부분(+)을 빨간색 전선을 이용해 연결한다. 그리고 빵판(-)선과 GND를 초록색을 이용해서 연결한다.
 푸쉬 버튼을 IC영역 가운데 설치한다. 푸쉬 버튼의 회로를 보면 A와 B, C와 D는 연결 상태이고 버튼을 눌렀을때만 전체가 연결된다. 이 특성을 이용하여, 푸쉬 버튼의 A,C 부분이 빵판의 위쪽 영역에 B,D다리가 아래쪽 영역에 위치하도록 한다.
 긴노란색선을 이용해서 Digital 2번핀과 스위치 위쪽의 오른쪽 부분을 연결한다.
  빵판의 (+)극 선부분과 회로영역의 스위치교차선 부분을 짧은 빨간선으로 연결한다.
 LED를 연결하기 위해서 스위치의 오른쪽아래 부분이 연결된 라인과 다른 라인을 저항으로 연결한다.
 또 옆라인을 LED로 연결한다. 저항을 연결하지 않고 LED를 연결해서 전류를 흐르게 하면 과전류가 발생해서 LED가 망가진다.
 짧은 초록색선을 이용하여 LED의 마이너스극이 연결된 라인을 연결한다.
 스위치를 누르면 사리얼 모니터에 "1"이 연속적으로 출력되고 LED에 불이 들어온다.
 버튼을 이용한 LED 제어를 마친다. 

인텔 갈릴레오2 시리얼 포트를 이용한 LED제어

인텔 갈릴레오2
 이전 글을 통해서 갈릴레오의 LED를 깜빡이게 하고 갈릴레오2에 설치된 리눅스 환경을 확인하는 방법을 알아보았다. 이번 글에서는 LED를 깜빡이는 것을 직접 손으로 제어 하는 방법을 알아보자. 시리얼 통신이라는 것을 이용해서 LED를 제어할 것이다.
 시리얼 통신이라는 것은 한번에 한 비트씩 순차적으로 데이타를 전송하는 방식을 말한다. 동시에 여러개의 데이타를 보내는 병렬통신에 비해서 속도는 느리지만 직관적이고 사용하기가 쉽다. 시리얼 포트라는 것은 시리얼 통신을 하기 위해 열려있는 논리적(물리적) 통로라고 생각하면 된다. 컴퓨터 뒤쪽에 있는 아래 그림과 같은 포트가 시리얼 포트의 한 종류이다.
아두이노 IDE에서도 갈릴레오가 연결된 포트를 확인 할 수 있다.

 먼저, 갈릴레오2의 전원 케이블을 연결하고 그리고 마이크로UBS포트에 선을 연결한다. 갈릴레오 시작하기에서 배웠던 블링크 예제를 불러와 갈릴레오2가 정상적으로 동작하고 있는지 확인한다.

 이번에는 실제 LED를 출력핀에 연결을 하여 제어를 해보자. 먼저 이전에 보았던 Blink 예제의 한 부분을 보자.
int led = 13;
pinMode(led, OUTPUT);
 위 코드의 뜻은 13번 PinMode에 아웃풋을 출력하라"라는 뜻으로 해석하면 된다. 아래의 사진을 참고하여 13번 구멍과 GND 구멍에 LED를 연결한다. 이때, LED의 다리가 긴쪽(+극)을 13번에 연결하고 짧은 쪽을 GND에 연결한다.

LED를 연결 하였다면, aduino IDE의 코드를 살펴보자.
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;
// the setup routine runs once when you press reset:
void setup() {            
  // initialize the digital pin as an output.
  Serial.begin(9600);        // 시리얼 포트를 9600baud 속도로 연다
  pinMode(led, OUTPUT);  
}
// the loop routine runs over and over again forever:
void loop() {
  if(Serial.available() > 0)
  {
    int state = Serial.read();
 
    if(state == '1')
    {
      digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
      Serial.println("LED Light On");
    }
    else
    {
      digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
      Serial.println("LED Light Off");
    }
  }
}
 Blink 예제를 조금 변경하여 LED를 제어하는 코드를 만들었다. Serial.read()를 통해서 시리얼 통신으로 들어오는 내용을 읽어서 '1'이면 13번 출력에 연결된 LED를 켜게 하는 코드이다. Serial.println()은 시리얼 모니터에 찍는 로그 프린트명령이다. 시리얼 모니터에 '1'을 입력받으면 시리얼모니터는 '1'을 갈릴레오 시리얼 포트로 전송하고 "LED Light On"을 출력한다.

위 코드를 입력한 후, 업로드(Ctrl + U)를 한다. 그리고 나서, 도구 -> 시리얼모니터 를 클릭한다.
시리얼 모니터에 '1'을 입력하고 Send 버튼을 누르면, 갈릴레오에 연결한 LED가 켜지는 것을 확인할 수 있다.
 '2'를 입력하면 LED가 꺼진다.
 이상 시리얼 포트를 이용한 갈릴레오 LED제어를 마친다.

인텔 갈릴레오2 이더넷 설정 및 텔넷 접속하기

 인텔 갈릴레오2
 이전 글에서 인텔 갈릴레오2의 LED를 조작하는 방법을 알아보았다. 이번 글에서는 이더넷을 통해서 PC에서 갈릴레오 내부로 접속을 하는 방법을 알아보자.
 사용하고 있는 네트워크 구조는 아래와 같다. 즉, 같은 공유기 아래에 PC와 갈릴레오2가 같이 있는 구조이다.
[인터넷]-[공유기]-[PC]
[인터넷]-[공유기]-[갈릴레오2] 
 갈릴레오2를 직접 인터넷에 물리면 상황이 복잡해지므로, PC와 갈릴레오2가 같은 네트워크에 있다고 가정한다.

 먼저, 내가 사용하고 있는 네트워크 정보를 확인하자. ipTime 공유기 제품군을 사용하고 있다면 아래의 주소를 인터넷 주소창에 입력하자.
http://192.168.0.1
 이러면 공유기 관리 페이지로 접근 할 수 있다. 네트워크 정보를 확인하여 갈릴레오2에게 부여할 IP를 정한다. 필자의 경우엔 192.168.0.104 로 IP를 할당하려고 한다.
 할당할 IP를 정했으면, 아두이노 IDE를 구동하여 아래의 스케치를 입력한 후, 업로드 한다.
void setup() {
  // put your setup code here, to run once:
  system("telnetd -l /bin/sh");
  system("ifconfig eth0 192.168.0.104 netmask 255.255.255.0 up");
}
void loop() {
  // put your main code here, to run repeatedly:
  system("ifconfig eth0 > /dev/ttyGS0");
  sleep(10);
}
 업로드가 완료된 후, 도구 -> 시리얼 모니터를 실행한다.
 시리얼 모니터를 실행하면 eth0 에 할당된 정보를 확인 할 수 있다.

 putty 등의 텔넷 접속 프로그램을 실행한다. IP정보에 위에서 정한 IP를 넣고, Port 번호에 텔넷에 할당된 포트인 23을 입력한 후 접속 한다.

 텔넷 접속을 통해 갈릴레오2에 기본적으로 설치된 Poky 리눅스를 확인 할 수 있다. Poky 리눅스에서 지원하는 명령어를 통해서 설치된 사항을 확인 할 수 있다.
 이상으로 텔넷으로 갈릴레오2에 접속하는 방법을 알아보았다. 

인텔 갈릴레오2 시작하기

 앞의 글에서 간단히 인텔에서 만든 갈릴레오 2에 대해서 알아보았다.
 이제 본격적으로 갈릴레오2의 개발 환경을 설치해보자. 이 글은 윈도우7에 개발환경을 설치하는 기준으로 만들어져있다. 맥 또는 리눅스 환경도 아래의 링크를 참고하면 가능하다.

 인텔의 커뮤니티를 이용하면 쉽게 단계별로 설치를 할 수 있다. 나도 인텔의 페이지를 참고해서 개발환경을 설정하였다. 
인텔 갈릴레오2 윈도우 사용자용 : https://communities.intel.com/docs/DOC-22872
 단계 1. 파워 서플라이를 연결 한 후, USB 케이블을 연결
주의 - PC와 연결시, 반드시 전원 어뎁터를 먼저 연결 한 후, USB 케이블을 연결한다. 그리고 연결을 종료할 때는 USB 케이블을 제거한 후, 전원 어뎁터를 제거해야한다. 반대로 할 경우, 회로가 망가질 수 있다고 한다. 그리고 갈릴레오 1세대에 사용하는 전원 어뎁터는 2세대에 사용할 수 없다.
 파워 서플을 연결한다. 마이크로USB 포트를 통해 컴퓨터와 연결을 한다. 순서에 주의하자.

 단계 2. 갈릴레오 아두이노 IDE 설치
 앞의 글에서 인텔 갈릴레오는 아두이노 호환보드라고 언급했다. 따라서 아두이노의 개발환경을 그대로 이용할 수 있다. 아래 링크로 이동하여 윈도우용 갈릴레오 아두이노 IED를 설치한다.
링크 : https://communities.intel.com/docs/DOC-22226
 다운로드 받은 파일을 C:\ 아래에 푼다. 이때 폴더명에 공백 또는 한글이 있어서는 안된다. 반디집 등을 이용해서 압축을 풀경우, 260자 이상의 긴파일명 에러가 뜨는데 아래의 링크를 통해서 해결 할 수 있다.
“파일 생성 실패. 전체경로와 파일 이름 길이는 260자를 초과해서는 안 됩니다.” http://www.bandisoft.co.kr/bandizip/help/longpath/
 C:\arduino-1.5.3-Intel.1.0.4\arduino.exe 실행한다.


 단계 3. 드라이버 설치하기
 Windows7 기준으로 작성되었다. 시작 -> 제어판 -> 시스템 -> 장치관리자 -> 기타장치 를 선택한다.
 Gadget Seial v2.4 에서 오른쪽 마우스를 클릭후, 드라이버 소프트웨어 업데이트를 한다. 그리고 컴퓨터에서 드라이버 소프트웨어 찾아보기를 클릭해
C:\arduino-1.5.3-Intel.1.0.4\hardware\arduino\x86\tools
위치를 선택한다.

 업데이트가 정상적으로 완료되면 COM3 포트에 갈릴에오가 연결된 것을 볼 수 있다.

단계 4. 펌웨어 업데이트
주의 : 업데이트 도중에는 파워가 절대로 나가선 안된다. 
 이제 펌웨어를 업데이트 해보자. 갈릴레오 보드에 마이크로SD 카드가 삽입되어 있다면, USB케이블을 먼저 제거 하고, 파워를 끈다음, SD카드를 꺼내자. SD카드가 없는 상태에서 펌웨어 업데이트를 진행해야 한다. 이글을 쓰는 시점에 최신 버전은 1.04 이다. 
 도구 -> 보드 메뉴로 이동해 갈릴레오2를 선택한다.
 도구 -> 시리얼 포트로 이동하여 COM3 포트를 선택하자.
 도움말 -> Galileo Firmware Update 를 선택한다. 5분 정도 시간이 소요되며 이때 절대 전원이 차단되어선 안된다.
 업데이트가 완료되면 다음과 같은 화면을 볼 수 있다.

단계 5. 깜빡이는 예제로 보드 테스트하기
 펌웨어 업데이트가 끝났으면 정상적으로 보드가 동작하는지 간단한 예제를 통해서 확인해보자.
개발툴에서 파일 -> 예제 -> 01.Basic -> Blink 선택
 위 메뉴로 들어가면 아두이노에서 제공하는 간단한 예제를 확인할 수 있다. 
 숫자를 입력하면 아래의 텀으로 USB 포트 옆에 있는 LED를 깜빡이게 하는 코드이다.
/*
  이 예제는 1초 간격으로 LED를 깜빡이게 하는 예제이다.
 */

// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;
// setup 은 처음에 한번 실행된다.
void setup() {              
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);  
}
// loop 루틴은 갈릴레오가 종료될 때까지 반복적으로 실행된다.
void loop() {
  digitalWrite(led, HIGH);   // LED를 켠다
  delay(1000);               // 1초(1000 = 1초)를 기다린다
  digitalWrite(led, LOW);    // LED를 끈다.
  delay(1000);               // 1초(1000 = 1초)를 기다린다
}
 코드를 불러온다음 왼쪽 상단에 있는 업로드 버튼(Crtl+U)를 누르면 소스코드가 컴파일되어 보드로 올라가게 된다. 업로드가 완료되면 "Transfer complete" 라는 메시지가 IDE의 아래쪽에 뜨게 되며 보드의 LED는 delay 값 기준으로 깜빡이게 된다.
 드디어 갈릴레오2의 개발 환경을 설정하고 첫 동작을 제어했다.

 인텔에서는 기본적인 코드와 개발 설계도를 제공하고 있다. 다음의 링크에서 스케치와 샘플을 확인 할 수 있다. 단계별로 따라 할 수 있고 코드의 양이 많지 않기에 초심자들도 쉽게 따라 할 수 있다.
인텔 갈릴레오2 스케치와 샘플 예제 : https://communities.intel.com/docs/DOC-22286

인텔 갈릴레오2 스펙

 인텔 갈릴레오2를 손에 넣고 첫 주말이다. 이 작은 장치로 무얼 할 수 있을지 이것저것 알아보고 있는 중이다. 아두이노에 관한 글은 많이 있는데, 갈릴레오2에 관한 정보는 인텔 홈페이지이를 제외하곤 별로 없는 상황이다. 다행히도 갈릴레오가 아두이노와 호환이 된다고 하니, 아두이노를 참고하면 여러가지 작품을 만들 수 있을 것 같다.

인텔 갈릴레오2
 먼저, 인텔 갈릴레오2의 사양에 대해서 알아보자. 
인텔 갈릴레오2 : https://www-ssl.intel.com/content/www/us/en/do-it-yourself/galileo-maker-quark-board.html
 인텔 홈페이지에 나와 있는 영문으로 된 갈릴레오2 주요특징이다.
Key features
  • Intel® Quark™ SoC X1000 application processor, a 32-bit, single-core, single-thread, Intel® Pentium® processor instruction set architecture (ISA)-compatible, operating at speeds up to 400 MHz.
  • Support for a wide range of industry standard I/O interfaces, including a full-sized mini-PCI Express* slot, 100 Mb Ethernet port, microSD* slot, USB host port, and USB client port.
  • 256 MB DDR3, 512 kb embedded SRAM, 8 MB NOR Flash, and 8 kb EEPROM standard on the board, plus support for microSD card up to 32 GB.
  • Hardware and pin compatibility with a wide range of Arduino Uno R3 shields.
  • Programmable through the Arduino integrated development environment (IDE) that is supported on Microsoft Windows*, Mac OS*, and Linux host operating systems.
  • Support for Yocto 1.4 Poky* Linux release.
Whats new with the Intel® Galileo Gen 2 board
  • 6-pin 3.3V USB TTL UART header replaces 3.5 mm jack RS-232 console port for Linux debug. New 6-pin connector mates with standard FTDI* USB serial cable (TTL-232R-3V3) and popular USB-to-Serial breakout boards. 12 GPIOs now fully native for greater speed and improved drive strength.
  • 12-bit pulse-width modulation (PWM) for more precise control of servos and smoother response.
  • Console UART1 can be redirected to Arduino headers in sketches, eliminating the need for soft-serial in many cases.
  • 12V power-over-Ethernet (PoE) capable (PoE module installation required).
  • Power regulation system changed to accept power supplies from 7V to 15V.
 이를 간단히 요약 번역하면,
주요 특징
  • Intel Quark Soc X1000 프레세서 - 32bit 싱글 코어, 400Mhz 클럭 펜티엄 프로세서
  • 지원포트 - mini-PCI Express, 마이크로 SD, USB host, USB client 포트
  • 256MB DDR3 메모리 - 온보드 메모리, 마이크로SD 카드로 32GB 확장 가능
  • 아두이노 우노 R3와 호환
  • 윈도우, 맥, 리눅스를 지원하는 개발환경
  • Yocto 1.4 지원
인텔 갈릴레오 2세대의 새로운 점
  • 12Bit 펄스폭 전압제어 개선
  • 12V PoE 이더넷 전원장치 이용가능(장치별도구매)
  • 7V에서 15V로 전원시스템 변경
 갈렐레오 2는 16KB캐시, 512KB 임베디드 램과 쿼크 400Mhz 클럭 펜티엄 프로세서 등 갈릴레오 1과 동일한 기본 스펙을 가지고 있다. 이는 라즈베리의 업그레이드와는 조금 차이가 있다. 인텔은 보드의 변경에 따른 성능 향상의 효과보다 새로운 하드웨어로 인한 비용증가가 더 크다고 판단하고 있는듯 하다.
 간략한 스펙을 확인해보았다. 컴퓨터를 사용할 줄 안다면, UBS, SD카드, 랜포트 정도는 인지할 수 있겟지만, 시리얼 포트, 파워컨트롤 입출력 등의 생소한 부분은 공부가 필요할 것 같다.
인텔 갈릴레오2 구성도
 다음 글에서는 갈릴레오2를 사용하기 위한 첫 세팅에 대해서 알아보겠다.

인텔 갈릴레오2 개봉기

 전자전기공학부로 대학문을 들어서 컴퓨터공학으로 졸업을 하였다. 로봇의 세계는 흥미로웠지만 나의 능력은 부족하기만 했다. 컴퓨터공학을 배웠지만, 나의 직업은 공학이랑 별 관계가 없는 일을 하고 있다. 손으로 만드는 일을 좋아하였지만, 전자적인 물건을 제어하는건 나의 능력 밖의 일이었다. 그러던 중, 라즈베리파리, 아두이노라는 신기한 물건이 세상에 등장하였다. 작고 쉽지만 강력한 오픈 소스 하드웨어가 등장하게 된 것이다. 학생은 물론 일반인들도 좀더 쉽게 임베디드 컴퓨팅, 즉 로봇을 만들 수 있게 된것이다.

 RISC 아키텍처를 사용하는 ARM 프로세스 기반의 아두이노와 라즈베리 파이가 오픈소스 하드웨어 시장을 장악하고 있던 2013년 10월, 인텔에서 CISC아키텍처 사용하는 Intel x86 기반의 오픈소스 하드웨어 보드인 '갈릴레오'를 출시하였다. 그리고 1년이 지난 2014년 10월 갈릴레오2 세대를 출시하였다.
Intel® Galileo Gen 2 Development Board : http://maker.intel.com/galileo

 우연한 기회가 주어져 갈릴레오2를 가지고 이런저런 장난을 해볼 수 있는 기회가 주어졌다. 앞으로 글들은 비전문가가 단순히 취미를 위해서 갈릴레오를 어떻게 활용할 수 있는지 보여주려고 한다. RISC, CISC와 같이 컴퓨터공학을 전공한 나도 어려운 말들 봐는 쉬운 말로 이야기를 하고 싶다.

 먼저 제품을 받았으니, 개봉을 해보자. 좀더 괜찮은 이미지는 아래의 파코즈 하드웨어 리뷰를 보면 된다. 상세한 스펙은 다음 글에서 보기로 하자.
 상자의 모습이 특이하다. What will you make? 문구가 인상적이다. 갈릴레오2로 무엇을 만 들 수 있을까?
 구성물은 단순하다. 보드와 전원 케이블이 전부다. 특이한 점은 전세계에서 사용하는 모든 콘센트가 들어있다는 것이다. 좀 더 가까이서 찍은 사진을 보자. 위쪽과 아래쪽에는 용도를 알수 없는 단자들이 보인다.
 측면을 보자. 우리가 일상적으로 보았던 단자들이 배치되어 있다.
 USB포트와 마이크로 USB포트, 랜 포트를 볼 수 있다.
 반대편에는 전원공급부분과 마이크로 SD리더기가 보인다. 마이크로SD카드를 이용해서 우분투 등을 설치할 수 있다.
 넥서스5를 옆에 두고 찍은 사진이다. 5인치 휴대폰보다 작은 갈릴릴레오2로 어떤 일을 할 수 있을까? 내심 기대가 된다. 새로운 것을 접하는 것은 즐거운 일이다. 갈릴레오2가 나의 탐구욕을 다시 한번 깨워주길 기대한다.

 다음 글에서는 갈릴레오2의 스팩에 관해서 알아보기로 하고 간단한 개봉기를 여기서 끝내고자 한다.

참고하면 좋은 글
  • 파코즈 하드웨어(링크)
  • micro Soft 인텔 갈릴레오 분석하기(링크)