딕셔너리(dictionary)는 키(key)와 그것에 딸린 값(value)의 쌍들의 집합으로 이루어진 자료형이다. 어떤 사람과 관련된 데이터의 예를 들면 ‘name’은 ‘박장현’ , ‘age’가 ‘44’, 등이 있을 것이다. 여기서 ‘name’, ‘age’ 등이 키가 되고 ‘박장현’은 ‘name’이라는 키에 해당되는 값, ‘44’는 ‘age’라는 키에 해당되는 값이다. 이를 파이썬 문법으로 표현하면 다음과 같다.


>>> man1 = {‘name’:’박장현’, ‘age’:44 }


이렇게 입력하면 man1 이라는 딕셔너리가 생성된다. 딕셔너리는 {...}기호로 생성된다. 이와 같이 딕셔너리는 ‘키:값’ 쌍들의 집합이다. 키와 값은 콜론(:)으로 각 쌍은 콤마(,)로 구분한다.


{ key1:val1, key2:val2, …… }


키로 쓸 수 있는 객체는 숫자와 문자열 등 immutable한 객체라면 무엇이든지 사용할 수 있다. 값에 해당하는 것은 어떤 파이썬 객체라도 올 수 있다.


만약 앞의 예에서 man1의 이름에 해당하는 값객체를 얻고 싶다면 다음과 같이 접근할 수 있다.


>>> man1[‘name’]


이것은 man1 딕셔너리의 ‘name’ 키에 해당하는 값객체를 반환한다.


>>> capital = {‘kr’:’seoul’, ‘jp’:’tokyo’, ‘cn’:’beijing’}


이 예에서도 키가 문자열이고 값도 문자열이다. 딕셔너리는 데이터의 저장 ‘순서’라는 개념이 없다. 따라서 내부적인 인덱스는 없으며 오직 ‘키’로만 연결된 ‘값’에 접근할 수 있을 뿐이다.


>>> color = {0:’red’, 1:’yellow’, 2:’white’, 3:’black’}


위의 예도 딕셔너리이지만 이것은 키로 정수를 갖는다. 따라서


>>> color[1] # ‘yellow’ 값을 읽는다.
>>> x = color[0] # x에 문자열 ‘red’가 저장된다.
>>> color[3] = ‘grey’ # 키 3 에 해당하는 값을 변경한다.
>>> color[4] = ‘blue’ #새로운 키-값 쌍을 추가한다.


전술한 바와 같이 딕셔너리는 인덱스가 없다. 이 예제에서 color[1] 과 같은 용례는 인덱싱이 아니라 1이라는 키를 지정해 준 것이므로 혼동하면 안된다. 딕셔너리는 인덱싱도 할 수 없고 슬라이싱도 당연히 허용되지 않는다. 따라서 color[0:2] 같은 사용은 에러를 발생시킨다.


 또 한 가지 주의할 것은 중복된 키는 허용되지 않는다는 것이다.


>>> a={0:'a', 1:'b', 0:'c'}
>>> a
{0: 'c', 1: 'b'}


위 예에서 딕셔너리 a에 0이라는 키가 중복으로 지정되었는데 결과를 보면 하나는 무시되었다. 딕셔너리는 내부 데이터를 키값으로 구별하기 때문에 중복된 키는 허용하지 않는 것이다.


 딕셔너리의 키로 리스트는 사용 불가지만 튜플은 가능하다. 리스트는 mutable 이고 튜플은 immutable이기 때문이다.


>>> a={(1,):'hi', (1,2):'world'}
>>> a
{(1, 2): 'world', (1,): 'hi'}


값에는 어떠한 파이썬 객체도 올 수 있으며 딕셔너리 안에 값으로 딕셔너리가 다시 올 수도 있는 등 중첩도 얼마든지 가능하다.




Posted by 살레시오
,

 파이썬은 인터프리터 언어로서 암스테르담의 귀도 반 로섬(Guido V. Rossum)에 의해서 1990년에 초기 버전이 만들어졌다. (2015년 1월 현재 3.4.x 버전) 파이썬이라는 이름은 본인이 좋아하는 "Monty Python's Flying Circus" 라는 코미디 쇼에서 따왔다고 한다. 파이썬의 사전적인 뜻은 큰 비단뱀인데 대부분의 파이썬 책 표지와 아이콘이 뱀 모양으로 그려져 있는 이유가 여기에 있다.


[그림 1] 파이썬 개발자, 비단뱀 그리고 파이썬 로고


파이썬 프로그램의 가장 큰 특징은 배우기 쉽고 직관적이라는 것이다. 인터프리터 언어이기 때문에 실행 결과를 즉시 확인해 볼 수 있으며 최근에는 실행 속도도 심지어 C/C++ 프로그램과 맞먹을 정도로 성능도 향상되고 있다. 또한 공동 작업과 유지 보수가 매우 쉽고 편하기 때문에 이미 다른 언어로 작성된 많은 프로그램과 모듈들이 파이썬으로 다시 재구성되고 있기도 하다. 국내에서도 그 가치를 인정받아 사용자 층이 더욱 넓어져 가고 있고, 파이썬을 이용한 프로그램을 개발하는 기업체들이 늘어가고 있는 추세이다.


 현재 파이썬은 교육의 목적뿐만 아니라 실용적인 부분에서도 널리 사용되고 있는데 그 대표적인 예는 바로 구글(Google) 이다. 구글에서 만들어진 소프트웨어의 50%이상이 파이썬으로 만들어졌다고 한다. 이 외에도 유명한 것을 몇 가지 들어보면 Dropbox(파일 동기화 서비스), Django(파이썬 웹 프레임워크)등을 들 수 있다. 또한 빅데이터 분석이나 과학 계산 용도로도 활발히 활용되는 등 컴퓨터를 활용한 거의 모든 곳에 사용되고 있다고 해도 과언이 아닐 정도로 인기를 끌고 있다.


[그림 2] 가장 널리 사용되는 프로그래밍 언어들


파이썬의 특징을 정리하면 다음과 같다.


  • 인터프리터(interpreter) 언어이다.(실행 결과를 바로 확인할 수 있다.)

  • 간결하고 쉬운 문법으로 빠르게 학습할 수 있다.

  • 강력한 성능을 가진다.

  • 다양한 분야에 적용할 수 있는 라이브러리가 풍부하다.

  • 개발 속도가 빠르다.

  • 오픈 소스(open source)이며 무료이다.


최근에는 라즈베리파이(raspberry pi)나 비글본 블랙(beaglebone black) 같은 원보드 마이컴이 인기를 끌고 있는데 보통 운영체제로 리눅스를 채용한다. 이러한 시스템에서도 파이썬을 이용하여 전통적인 C/C++/JAVA로 개발하는 것보다 훨씬 더 쉽고 빠르게 응용 프로그램을 제작할 수 있다.

[그림 3] 라즈베리파이와 비글본블랙


 현재 파이썬은 버전이 2.x 대와 3.x 대로 나뉘어 두 가지 버전이 같이 사용되고 있다는 점인데 초보 사용자가 선택하는데 문제가 생긴다. 특이하게도 3.x 버전의 문법이 2.x버전과는 달라서 100% 호환되지 않으므로 같은 언어로 작성한 프로그램인데도 불구하고 2.x 버전에서 잘 작동되는 것이 3.x 버전에서는 작동하지 않거나 반대의 경우도 발생한다.


 본 강좌에서는 3.x 버전의 문법을 기본으로 해서 2.x버전 과의 차이점에 대해서 필요할 때마다 설명하도록 하겠다.


파이썬 강좌 전체 목록 (TOP) >>>


c{pyt},n{py001}


Posted by 살레시오
,

 시리얼 통신(serial communication)은 기기들간 데이터를 주고 받는 방법 중 하나인데 병렬 통신 (parallel communication) 방식에 비해서 통신선의 갯수가 적다는 장점이 있다.  아두이노는 UART (universal asynchronous receiver and transmitter), SPI, I2C 방식의 시리얼 통신을 지원하는데 이중 UART는 주로 아두이노와 PC간의 통신을 하는데 사용된다. 아두이노는 하나 이상의 UART 통신기가 내장되어 있는데  라이브러리와 IDE에 내장된 터미널(terminal, 주고 받는 데이터를 확인할 수 있는 프로그램)을 이용하면 손쉽게 PC와의 통신을  수행할 수 있다.


 아두이노 우노의 경우 0번과 1번핀이 시리얼 통신에 사용된다. 이 핀들은 내부적으로 USB통신을 담당하는 칩과 연결되어서 USB신호로 변환된 후 PC에 전달된다. 반대로 PC에서 보내지는 USB신호는 이 칩에서 시리얼 통신 신호로 변환되어 아두이노의 AVR에 전달된다. 따라서 만약 아두이노가 PC와의 통신을 수행하고 있다면 이 핀들을 다른 용도로 사용하면 안된다. 그리고 통신을 수행할 때에는 TX, RX라고 마킹된 LED가 깜빡인다.  일단 사용자는 아두이노와 PC간에 USB케이블로 연결하면 통신 실습을 할 준비가 끝나게 된다.


  • 시리얼 통신에 사용되는 두 개의 핀(빨간색)과 usb변환 칩(하늘색)

  • 내부적으로 USART 신호는 USB신호로 변환되어 PC에 전송된다.


시리얼 통신 첫 번째 예제

 첫 번째 예제로 아두이노에서 PC로 간단한 데이터를 전송하는 예를 해보도록 하겠다. 단순히 아두이노에게 전원을 인가하면 “I’m ready.” 라는 메세지를 PC에 전송하는 예이다.


void setup() {
 Serial.begin(9600);
 Serial.printl"I'm ready.");
}
void loop() {
}


이 예제를 다운로드 한 후 터미널을 켜고 리셋버튼을 누르면 터미널에 “I’m ready.”라는 문자열이 찍히는 것을 확인할 수 있다. 터미널 실행 버튼을 누르면 아두이노에 자동으로 리셋신호가 걸려서 프로그램이 처음부터 수행된다. 그리고 프로그램 다운로드 중에서는 터미널을 실행시키지 못 한다는 것도 알아두자.



 UART와 관련되 아두이노의 라이브러리는 Serial클래스에 다 모여있다. (자세한 설명을 여기 참조) 일단 이 예제에서 보면 setup()함수내에서 두 개의 함수가 호출되었다.


void Serial.begin(long baud_rate) 함수

  • UART 통신을 초기화 시킨다.

  • 통신 속도(baud rate)를 입력으로 받는다.        

  • 9600, 19200, 57600, 115200 등 여러 baud rate를 지원한다.


long Serial.print(val) 함수

  • 입력값을 ASCII값으로 변환하여 PC쪽으로 출력한다.

  • 전송된 데이터의 바이트 수를 리턴한다. (잘 사용되지 않음)

  • 비동기 통신 방식이므로 데이터가 전송되기 전에 리턴된다.

  • 입력 변수 val은 어떤 데이터 타입도 가능하다. 예를 들면

    • Serial.print(78) gives "78"

    • Serial.print(1.23456) gives "1.23"

    • Serial.print('N') gives "N"

    • Serial.print("Hello world.") gives "Hello world."


  • 두 번째 인수로 출력 형식을 지정할 수 있다. 예를 들면

    • Serial.print(78, BIN) gives "1001110"

    • Serial.print(78, OCT) gives "116"

    • Serial.print(78, DEC) gives "78"

    • Serial.print(78, HEX) gives "4E"

    • Serial.println(1.23456, 0) gives "1"

    • Serial.println(1.23456, 2) gives "1.23"

    • Serial.println(1.23456, 4) gives "1.2346"


첫 번째 예제는 setup() 함수 내에서 UART를 초기화 하고 문자열 하나를 보내는 아주 간단한 예제이다.


아두이노 강좌 전체 목록 (TOP) >>>

C++ 언어 전체 강좌 목록 >>>

c{ard},n{ad012}

Posted by 살레시오
,

 아두이노 우노(uno) R3는 ATmega328P 라는 AVR 8-bit 마이크로콘트롤러를 사용한다. PC와 USB로 연결할 수 있으며 이것으로 프로그램 다운로드 및 시리얼 통신에 사용된다.


전원 연결


 아두이노 우노보드는 내부적으로 5V로 동작한다. 전원은 다음과 같이 두 가지 방법 중 한 가지로 인가하면 된다.


  1. USB로부터 5V 전원을 공급받아서 동작할 수 있다. 따라서 이 보드를 PC와 USB로 연결하면 일단 기본적인 하드웨어 세팅은 끝난 것이다.

  2. 외부 전원을 연결하는 단자가 있는데 이것으로 7~12V 사이의 전원을 인가하면 되며 9V가 권장 전압이다. 일반적인 AA 혹은 AAA 사이즈의 1.5V건전지를 6개를 직렬 연결하거나 1.2V 충전지를 사용해도 된다. 물론 AC어댑터도 전압 범위가 맞으면 사용 가능하다.


만약 USB와 전원 소켓에 둘 다 연결되어 있다면 소켓에서 공급되는 전원을 자동으로 사용하게 된다.


디지털 입출력 핀 14개 (0번~13번 핀)


 디지털(digital) 입출력 핀들을 이용해서 외부의 이진 신호를 읽어들어나 또는 이진 신호를 내보낼 수 있다. 이진 신호란 on/off 와 같이 상태값이 두 가지만을 가지는 신호라는 의미이다. 이 디지털 핀을 이용해서 LED를 켜고/끄거나 외부의 스위치가 눌려져 있는지 아닌지 등을 검출할 수 있다. 구체적으로 0V 와 5V 두 전압중 하나의 값을 가지며 이것은 프로그램으로 제어할 수 있다.


디지털 입출력으로 사용되면서 또한 부가적인 기능을 가지는 핀들은 다음과 같다.


  • 0번과 1번 핀은 시리얼 통신에 사용된다. USB로 PC와 통신을 할 수 있다.

  • 2번과 3번 핀은 인터럽트 기능을 갖는다.

  • 3, 5, 6, 9, 10, 11번 핀은 PWM 기능을 가지며 아날로그 출력을 흉내낼 수 있다.


아날로그 입력 핀 6개 (A0~A5)


 아날로그 입력 핀이란 외부의 아날로그 입력값을 읽어들이는 핀으로서 주로 센서(sensor)와 연결하여 사용된다. 아날로그(analog)신호는 디지털 신호와는 달리 연속값을 의미하면 예를 들어서 온도, 빛의 세기 등이 있다. 이러한 물리량을 센서가 전기 신호로 변환하며 이것을 이 아날로그 핀으로 읽어들일 수 있다. 센서를 통해 읽은 전압값은 0에서 1023 사이의 숫자로 변환된다. 기준 전압은 5V 이지만 1.1V의 내부 전압이 사용될 수 있으며 AREF핀으로 기준 전압을 직접 인가할 수도 있다.


그리고 아날로그 핀은 디지털 입/출력 핀으로도 사용할 수 있다.


아날로그 출력핀 6개 (3,5,6,9,10,11번핀)


 디지털 출력핀이 0V/5V 두 가지 값만을 가질수 있는데 비해서 아날로그 출력핀은 0V~5V사이의 전압 값(256단계)을 가질 수 있다. 엄밀히 얘기하면 PWM방식으로 동작하므로 순수 아날로그 방식은 아니다.


인터럽트 (2, 3번 핀)


 2번핀과 3번핀은 인터럽트(interrupt) 기능을 가진다. 인터럽트 처리(interrupt handling)라는 것은 이벤트를 처리하는 데 사용되는 기능으로서 특정한 신호가 발생했을 때 정해진 동작을 수행하여야 하는 경우 사용되는 방식이다. 예를 들어서 버튼이 눌려진 시점에서 (또는 떼어진 시점에서) 어떤 작업을 수행해야 하는 경우다.


그 외의 기능들


 아두이노 우노 보드는 3.3V의 전압도 공급할 수 있다. 이는 USB만 연결한 경우도 마찬가지이다. AREF 핀은 아날로그 핀의 기준 전압을 설정하는 용도로 사용된다.


다른 기기와의 통신 기능은 다음과 같다.

  • 시리얼 통신 : 0번, 1번 핀

  • SPI 통신 : ICSP 헤더핀

  • TWI (I2C) 통신 : A0, A1 핀


시리얼 통신 방식 외에는 일반적으로 사용 빈도가 낮지만 기기간 통신이나 일대다 통신을 하는 경우 SPI, TWI 통신이 널리 사용된다.


아두이노 강좌 전체 목록 (TOP) >>>

C++ 언어 전체 강좌 목록 >>>

c{ard},n{ad04}

Posted by 살레시오
,

 아두이노(arduino)보드는 하드웨어와 소프트웨어 구조가 모두 개방된 오픈소스 플랫폼이기 때문에 정품뿐만 아니라 수많은 변종 보드들이 존재한다. 여기에서는 동일한 Arduino IDE를 사용해서 개발할 수 있고 기본적으로 많이 사용되는 보드들 위주로 설명하도록 하겠다.


우노(uno), 나노(nano) / 프로(pro), 미니(mini), 프로미니(pro mini)


 이 다섯 가지 보드는 모두 atmega328p 라는 프로세서를 기반으로 한 보드들이므로 코어 부분은 모두 동일하다. 다만 크기를 작게 만들거나 또는 양산을 위해서 USB통신부가 제거되었거나 하는 부분이 다를 뿐이다.


(a) 아두이노 우노와 나노


 아두이노 우노는 가장 많이 사용되는 기본적인 아두이노 보드이다. 이 보드의 핀 배열이 거의 표준과 같이 사용된다. 2014년 현재 세 번째 버전인 우노 R3 가 유통되고 있다.




아두이노 나노(nano)는 우노와 거의 동일한 구성을 가지고 있다. 빵판에서 실험할 수 있도록 작은 크기와 핀배열을 가진다.



(b) 아두이노 프로와 프로 미니


 다량의 완성품에 장착하기 용이하도록 소형화시키고 usb시리얼 변환 칩을 제거한 제품이다. 따라서 프로그래밍을 위한 별도의 usb시리얼 변환기가 필요하다. Atmega328 (혹은 Atmega168) 기반으로서 아두이노 우노와 거의 동일한 스펙을 가진다.


<아두이노 미니> - 프로미니와 핀배열이 거의 동일함


아두이노 레오나르도 (arduino leonardo)와 마이크로(micro)


레오나르도 보드는 USB기능이 내장된 atmega32u4 를 메인 프로세서로 사용한다. (이에 반해 우노 보드는 usb 통신을 위해서 메인 프로세서와 별도의 칩을 사용한다.) 따라서 프로그램 다운로드와 시리얼통신 포트가 독립적으로 동작된다. 단가가 우노보다 낮다.(고는 하지만 우노나 레오나르도나 -최저가로 검색하면- 만원대에 구입 가능함) 키보드/마우스/조이스틱과 같은 주변기기로 인식시킬 수 있어서 활용도가 높다.



아두이노 마이크로는 레오나르도 보드와 동일한 프로세서를 사용한 소형 보드이다.



아두이노 메가 2560 / 메가 ADK


 프로세서로 ATmgea2560 을 사용하여 우노 보드보다 기능과 핀수가 많은 보드이다.



아두이노 두에 (arduino due)


 다른 아두이노 제품들이 8-bit 마이크로콘트롤러인 AVR 기반인 것과 달리 아두이노 두에는 32-bit ARM core 프로세서를 사용한다. 기능과 성능이 높고 핀 수가 매우 많아서 보다 전문적인 제품 개발과 연구 목적으로 사용할 수 있다.



아두이노 제로 (arduino zero)


 Atmel사와 아두이노가 동동 개발한 거승로 프로세서는 AVR 이 아니라 ATSAMD21 이라는 ARM 계열의 32비트 프로세서를 채용하였다. 48MHz 의 클럭 주파수로 동작하는데 이것만 놓고 보면 아두이노 우노 성능의 3배이다.



클럭 속도 외에 우노와 비교하여 특이한 점은 0번과 1번을 제외한 모든 디지털 핀에서 PWM 기능을 사용할 수 있다는 점과 플래시메모리가 256KB 로서 우노의 8배 정도로 늘었다는 것이다. 개발 환경에서도 별도의 usb 통신 단자를 통해서 atmel 의 Embedded Debugger (EDBG) 기능을 사용할 수 있어서 디버깅에 별도의 장치가 필요없다는 점도 눈에 띈다. 우노와의 차이점을 정리하면 다음과 같다.


  • 32비트 프로세서 채용

  • 3.3V로 동작

  • 48MHz의 클럭 주파수 (우노대비 4배)

  • 12개의 PWM핀 (우노의 PWM핀은 6개)

  • 256KB의 플래시메모리 (우노대비 8배)

  • 디버깅(EDBG)을 위한 별도의 usb 단자 내장

  • 12비트 ADC (우노는 10비트 ADC임)


현재(2015년 4월) 아직 출시되지는 않았지만 조만간 나올 예정이다.


아두이노 융 (arduino yun)


 레오나르도 기판과 HTTP 통신과 같은 온갖 텍스트 기반의 작업을 처리하는 Linino(리눅스 변형 OS)를 구동하는 WI-FI 리눅스 기판을 내장하고 있다. USB통신 뿐만 아니라 와이파이를 통해 프로그램이 가능하다.



갈릴레오 보드 (galilero board)


 인텔의 쿼크(Quark) 프로세서 X1000 를 이용한 고성능의 아두이노 호환 보드이다.

최대 400MHz의 클럭속도를 가지는 초전력 x86 기반의 프로세서이다.

기존 아두이노 우노의 핀배열을 가지며 유사한 개발 환경을 이용할 수 있다.

별도의 갈릴레오보드 전용 IDE가 제공되지만 사용법은 아두이노 IDE 와 동일하다.



기타 변종 아두이노들


 '아두이노'는 등록된 상표이므로 정품 보드만 이 이름을 사용할 수 있다. 이런 이유로 보통 파생 제품들은 두이노(duino)라는 접미어로 새로운 이름을 만들어서 사용한다. 개중에는 공식 아두이노와 완벽하게 호환되면서 가격은 더 저렴한 것들이 많으므로 이것을 이용해도 같은 개발도구와 라이브러리로 작업을 할 수 있다.


몇몇 예를 들어보면 다음과 같다.


  • Freeduino

  • Funduino

  • Seeeduino

  • Korduino

  • Meduino (make block)

  • Paperduino

  • Boraduino

  • Roboduino

  • Femtoduino (가장 작은 아두이노 호환 복제품)

  • Ruggeduino (I/O 보호 기능이 내장된 아두이노 보드)

  • pcDuino (갈릴레오보드와 비슷한 개념)

  • Teensyduino


등등 이 외에도 수많은 변종 보드들이 존재한다.


아두이노 강좌 전체 목록 (TOP) >>>

C++ 언어 전체 강좌 목록 >>>

c{ard},n{ad03}

Posted by 살레시오
,

 아두이노(arduino)는 AVR이라는 마이크로 컨트롤러를 기반으로 한 오픈소스 원보드 마이컴이다. 예전에는 이런 시스템을 설계하고 다루기 위해서는 전기/전자와 관련된 전문적인 기술이나 지식이 필요했다. 이 보드의 특징은 그러한 어려움을 극복하고자 기술 숙련도가 낮은 디자이너 혹은 예술가들을 대상으로 설계된 것이다. 따라서 비전공자들도 손쉽게 익히고 사용할 수 있다는 큰 장점을 갖는다.


[그림 1] 가장 널리 사용되는 아두이노 우노 R3 보드의 외형과 크기


 그러면 이러한 아두이노 보드를 이용하여 어떤 일들을 할 수 있을까. 간단한 몇 가지 예를 들어보면 다음과 같다.


  • 사람이 접근하면 자동으로 조명이 켜지는 장치.

  • 애완 동물에게 정해진 시간에 먹이를 공급하는 장치.

  • 화분의 습도가 낮아지면 자동으로 물을 주라는 트윗을 보내는 장치.

  • 여러개의 LED를 이용하여 귀걸이나 목걸이의 장식으로 이용.

  • 좀 더 전문적인 응용으로 로봇의 제어 장치.


위의 예들은 단순한 몇 개의 예를 든 것이고 인터넷으로 검색을 해보면 정말 많은 응용 제품들이 만들어지고 있으며 일반인 뿐만 아니라 기업에서도 이것을 이용하여 상용 제품을 출시하며 비즈니스 모델로 이용하고 있는 등 널리 사용되고 있다.


[동영상 1] 아두이노 소개


 대부분의 아두이노 보드들은 AVR 이라는 8비트 마이크로콘트롤러를 기반으로 하고 있으나 최근에는 Cortex-M3를 이용한 제품(Arduino Due)을 비롯한 여러 하이엔드 제품군이 개발되고 있다. 또한 소프트웨어 개발을 위한 스케치(sketch)라는 통합 개발 환경(IDE)이 제공되며 이것 또한 오픈소스로 공개되어 있다. C++ 로 개발이 진행되지만 관련 라이브러리가 잘 갖추어져 있어서 난이도는 낮은 편이다.


[그림 2] 다양한 아두이노 보드들


 앞에서도 언급했듯이 아두이노의 가장 큰 장점은 전기/전자의 깊은 지식이 없이도 마이크로컨트롤러를 쉽게 동작시킬 수 있다는 점이다. 일반적으로 AVR 프로그래밍이 WinAVR로 컴파일하여, ISP장치를 통해 업로드를 하는 등 일반인들에게는 어렵고 번거로운 과정을 거치는데 비해서, 아두이노는 전용 IDE를 이용하여 컴파일된 펌웨어를 USB를 통해 업로드를 쉽게 할 수 있다.


 또한 다른 프로토타이핑(prototyping) 도구들에 비해 비교적 저렴하고, 윈도를 비롯해 맥 OS X, 리눅스와 같은 여러 OS를 모두 지원한다. 아두이노 보드의 회로도가 CCL에 따라 공개되어 있으므로, 누구나 직접 보드를 직접 만들고 수정할 수 있으며 실제로 수많은 유사 (호환) 제품이 존재한다. 특히 요즘에는 중국 심천을 중심으로 하는 초저가 제품들이 쏟아지고 있다.


 아두이노가 인기를 끌면서 이를 비즈니스에 활용하는 기업들도 늘어나고 있다. 인텔, 마이크로소프트, 삼성 등과 같은 대기업들이 아두이노 호완 제품들을 선보이고 있는가하면, 장난감 회사 레고는 자사의 로봇 장난감과 아두이노를 활용한 로봇 교육 프로그램을 학생과 성인을 대상으로 북미 지역에서 운영하고 있다. 자동차회사 포드는 아두이노를 이용해 차량용 하드웨어와 소프트웨어를 만들어 차량과 상호작용을 할 수 있는 오픈XC라는 프로그램을 선보이기도 했다.


아두이노 강좌 전체 목록 (TOP) >>>

C++ 언어 전체 강좌 목록 >>>

c{ard},n{ad002}


Posted by 살레시오
,

 1991년에 핀란드의 대학생 리누스 토발스(Linus Torvalds)는 ‘리눅스’라고 이름지은 운영체제 커널을 개발하기 시작하였다. 리눅스라는 이름도 재밌게도 ‘Linux Is Not UniX’의 글자들을 딴 것이다. (GNU와 유사한 일종의 말장난) 이 커널은 자유로이 수정될 수 있고 매우 유용한 운영체제를 만들기 위해 FSF 산물과 다른 컴포넌트들 (특히 BSD 컴포넌트들의 일부와 MIT 의 X 윈도우 소프트웨어)과 병합될 수 있었다.


[그림 1] 리누스 토발스


 근래에 들어서는 쉬운 설치, 보다 많은 하드웨어 지원, KDE나 GNOME같은 GUI 데스크탑까지 지원 함으로서 일반 컴퓨터에 익숙한 사용자들이 집에서 PC에 설치 하기에도 무리가 없다.


 리눅스 공동체의 여러 조직들은 사용할 수 있는 컴포넌트들을 다르게 조합하였는데 각 조합은 ‘배포판’으로 부른다. 널리 알려진 배포판으로는 데비안(Debian), 우분투(ubuntu), 민트(mint),  레드햇(Red Hat), 페도라 등등이 있다. 인터넷으로 접속하는 많은 서버들의 운영체제가 리눅스이고 안드로이드와 같은 운영체제 역시  리눅스 기반으로 만들어졌으므로 리눅스는 우리 생활 전반에 보이지 않게 사용되고 있다고 할 수 있다.



[그림 2] 리눅스 배포판의 종류들


 리눅스의 특징은 다음과 같다.


  • 다중  플랫폼 지원. (인텔CPU, ARM, Sun Sparc, PowerPC 등)

  • 다양한 하드웨어 장치 지원.

  • 이식성이 뛰어남. (C언어 기반으로 프로그래밍과 포팅이 용이)

  • 다중 사용자(multi-user)가 동시에 사용할 수 있는 환경 제공.

  • 다중 작업(multi-tasking) 환경 제공.

  • 트리 형태의 계층적으로 구성된 파일 시스템.

  • 풍부한 소프트웨어 개발환경 제공 - 거의 모든 프로그래밍 언어 지원.

  • 강력한 네트워킹 기능 제공.

  • 오픈소스이고 무료로 제공되어 사용하는데 아무런 제한이 없다.


특히 리눅스는 서버(server) 영역과 임베디드(embedded) 시스템 영역에서 막강한 영향력을 가지며 모바일 운영체제와 최근에는 데스크탑 운영체제로도 주목을 받고 있다. 개인 PC용으로는 우분투(ubuntu)와 민트(Mint)가 널리 알려져 있으며  소형 임베디드 시스템에서 상대적으로 가벼운 데비안(Debian)이 많이 사용된다.


 Linux는 이미 검증받은 안정성으로 인하여 PC, 서버, 모바일기기 등의 OS로 널리 사용되고 있으나 초보자들이나 혹은 윈도같은 특정 GUI환경에만 익숙한 사용자들이 진입하기에는 다소 어렵게 느껴질 수 있다.


리눅스 강좌 전체 목록 >>>


c{linux},n{ln0004}

'맥,리눅스,윈도' 카테고리의 다른 글

리눅스의 파일 시스템  (0) 2015.05.16
리눅스의 커널(kernel)과 쉘(shell)  (0) 2015.05.16
자유 소프트웨어 재단 (FSF)의 설립  (0) 2015.05.16
유닉스(unix) 소개  (1) 2015.05.16
운영체제 개요  (0) 2015.05.16
Posted by 살레시오
,

  자바 식별자는 길이에 제한이 없으며 '_' 뿐만 아니라 '$' 문자도 사용할 수 있다는 점이 특이하다.


  자바에서는 반복문 앞에 라벨을 붙여서 그 라벨을 break, continue 문 뒤에 붙여 중첩된 반복문을 한꺼번에 벗어날 수 있다.


loop1: for(...) {

    for (… ) {

        …

        break loop1; //바깥쪽 루프를 벗어남.

        …

        continue loop1: //바깥쪽 루프의 그 다음 반복을 바로 수행.

    }

}


반복문의 이름이 지정되지 않은 break, continue 문은 그것을 포함하는 가장 안쪽의 반복문을 제어하지만 이처럼 라벨링을 이용하면 그 바깥쪽의 반복문을 제어할 수 있다.


  그리고 JAVA5 이상부터는 C#의 foreach 나 파이썬의 for문과 같은 기능을 사용할 수 있다. 문법은 다음과 같다. 


for(자료형 변수명: 집합) {

}


여기서 집합은 배열,콜렉션,enum 등이다. 이렇게 하면 예를 들어 배열의 각 요소가 변수명에 대입되어 차례로 반복문을 수행하게 된다.


enum Week { 월, 화, 수, 목, 금, 토, 일 }

public static void main(String args []) {

    // enum 타입을 foreach 로 출력

    for (Week day : Week.values()) { // Week.values()에는 Week 의 값들이 교대로 들어갑니다.

    System.out.println(day + "요일");

}


// 정수 배열을 foreach 로 출력

int[] num = { 14, 54, 52, 26, 62, 55 };

for (int i : num)

    System.out.println(i);


// 문자열 배열을 foreach 로 출력

String names[] = { "수성", "금성", "지구", "화성" };

for (String s : names)

    System.out.println(s);

}

[#00065]


Posted by 살레시오
,

 컴퓨터는 원래 수치 계산(numerical calcuation)을 빠르고 정확하게 수행할 목적으로 개발되었다. 수치 계산과는 다르게 기호식 계산(symbolic calculation)은 대수 기호가 들어간 수식을 다루는 것으로서 유한수로 정확히 표현되지 못하는 무리수를 기호로 표현하거나 또는 대수 기호가 포함된 방정식 등을 다루는 것이다. 사람이 이러한 개념을 사용하기는 어렵지 않으나 컴퓨터가 이러한 일을 하는 것은 전통적인 수치 계산 알고리듬보다 훨씬 더 어려운 일이다.


 예를 들어서 sin(x)/x의 x에 대한 미분을 구하려고 한다면 다음과 같이 간단하게 구할 수 있다.(다음은 live.sympy.org에서 수행한 것임)


 다른 예로 exp(x)*sin(x)의 정적분을 구하려고 한다면 이것 역시 심파이로 간단하게 수행할 수 있다. (손계산을 하려면 부분적분 공식을 적용해야 한다.) 다음은 winpython 의 ipython쉘에서 수행한 결과이다.



 이것은 기호식 계산의 한 가지 예일 뿐이고 실제로는 이것보다 훨씬 더 복잡한 수식과 문제들을 다룰 수 있다.


 이러한 시스템은 보통 CAS (Computer Algebra System)으로 불리며 심파이도 CAS 중 하나이다. CAS의 잘 알려진 다른 예로 Mathematica (상용 프로그램), Maxima, Sage  등이 있다. 심파이의 가장 큰 장점은 무료로 제한 없이 사용할 수 있는 오픈소스 모듈이라는 점이며 순수한 파이썬으로 만들어져 파이썬에 익숙하다면 배우는데 많은 시간이 걸리지 않는다.


 심파이(sympy)는 기호식 계산을 수행하기 위한 파이썬 모듈이며 현재(2015년 5월) 버전은 0.7.6 으로 활발하게 개발이 진행되고 있으며 많은 사용자들이 있다,




Posted by 살레시오
,