킥스타터에서 펀딩 중인 3D프린터 중에 Tiko 라는 델타형 3D 프린터가 있다. 가장 큰 장점은 179불(약 20만원 정도)에 책정된 가격이다. 다른 프린터들이 아무리 저가형이라도 보통 50만원 이상의 가격대인데 성공적으로 출시된다면 획기적으로 낮은 가격이다.



  델타형이란 세 축이 직각으로 맞물린 직교형 플린터와 달리 (아래 그림 참조) 세 축이 삼각형 모양으로 체결된 방식이다. 직교형과 달리 프린터의 부피를 작게 만들 수 있고 제조하기 용이하면서도 정밀도를 유지할 수 있다는 장점이 있다.


  


  프린터의 부피가 작음에도 불구하고 인쇄물의 크기는 꽤 크다. 제조사의 스펙에 의하면 최대  125x125x125mm 크기로 인쇄할 수 있다고 한다.


  (초)저가형 고품질의 3D 프린터가 속속 등장하고 있다. 이러한 프린터들이 3D 프린터를 대중화 시켜서 생활 전반에 변화를 줄 것으로 기대된다.

Posted by 살레시오
,

  컴퓨터로 프로그래밍을 하다 보면 눈이 쉽게 피로해지는데 컬러 테마를 어두운색 계열로 바꾸어 놓으면 도움이 된다. 윈파이썬의 경우 spyder를 기본 IDE로 사용하는데 spyder의 Tools > Preferences 메뉴에서 Editor, Console 텝의 옵션을 조정하면 dark theme 를 사용할 수 있다.

먼저 Editor 텝에서 다음 그림과 같이 color scheme 을 변경한다. 이것을 적용하면 프로그램 에디터의 테마가 다크테마를 적용되어 어두운 배경에 밝은 색 폰트로 변경된다.



아래 그림에서는 체크를 해제하여야 console창과 python쉘의 배경이 검은색으로 된다.



만약 ipython쉘을 사용한다면 다음과 같이 ipython탭에서 설정을 해주어야 한다.



이렇게 설정해 놓으면 눈이 훨씬 편하게 작업할 수 있다.

Posted by 살레시오
,

 인터넷을 사용하다 보면 구글이나 네이버 아이디가 여러 개를 만들어서 쓸 수 있고 가끔 여러 개의 아이디에 동시에 접속하여 사용해야 할 때가 있다. 이러한 경우 가장 간단한 해법은 하나의 웹브라우저를 사용하는 것 보다 다른 웹브라우저를 여러 개 사용하는 것이다.


 예를 들어서 인터넷익스플로러(IE)로 A라는 계정으로 로그인하고 구글 크롬으로 B라는 아이디로 로그인, 파이어폭스로 C라는 아이디로 로그인하는 것이다. 그러면 각각의 계정으로 로그인된 상태로 동시에 웹서핑을 할 수 있다.


 가장 많이 사용하는 웹브라우저를 순서대로 나열하면 다음과 같다.


  • 인터넷 익스플로러(IE)

  • 구글 크롬

  • 파이어 폭스

  • 사파리

  • 오페라 (Opera)


사파리의 경우 맥에서만 쓸 수 있다고 오해하기 쉬운데 윈도우용도 나와 있어서 설치하여 사용할 수 있다. 단 그것의 사용성은 맥에 최적화 되어 있다. (그래서 윈도에서는 잘 안쓰게 된다)


[그림 1] 윈도7에서 사파리를 실행한 모습


 이것들 중 저사양에서도 원할하게 구동되는 브라우저는 IE라고 한다. 크롬이나 파폭은 상대적으로 속도나 메모리 사용량이 높은 편에 속한다.



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 살레시오
,

  winPython 은 초기에 python console을 실행시키게 되어 있다. 만약 ipython을 기본으로 사용하고 싶다면 다음과 같은 과정으로 설정하면 된다.


먼저 python console을 초기 기동시 자동으로 시작하게 하지 않으려면 Tools > Preferences 메뉴에서 다음 그림과 같은 옵션을 체크 해제한다. 이 옵션의 체크가 해제되면 winPython을 실행시킬 때 console 창이 자동으로 실행되는 것을 억제할 수 있다.



그 다음 ipython 옵션에서 다음 탭을 체크하여 선택한다.



그러면 이제 winPython을 실행시키면 초기에 python console 대신 ipython 이 실행된다.

[#00066]


Posted by 살레시오
,

1. 파이시리얼(pyserial) : 파이썬 시리얼통신 모듈

 먼저 pyserial을 소개하도록 하겠다. pyserial은 시리얼 통신을 하기 위한 파이썬 모듈이다. 만약 winPython 을 사용한다면 pyserial 이 기본으로 설치되어 있다. ( 처음에는 이 사실도 모르다가 따로 설치를 해야 하겠거니 짐작하고 한참을 헤맸었다. ) 따라서 바로 import 하면 사용할 수 있다.  주의할 점은 모듈명은 pyserial이 아니라 그냥 serial 이라는 것이다.


>>> import serial


일단 아두이노를 연결하면 윈도우 장치관리자에서 COM포트 번호를 확인할 수 있다. 아두이노 우노를 연결하고 내 컴퓨터의 예를 보면 아래와 같이 'COM22'번으로 잡혀있다.



먼저 시리얼 통신 객체를 생성하여야하는데 serial 모듈에 있는 Serial 클래스 (즉, serial.Serial 클래스이다.)를 이용하면 된다. 생성자의 정의는 다음과 같다.


class serial.Serial

__init__(
    port=None,
    baudrate=9600,
    bytesize=EIGHTBITS,
    parity=PARITY_NONE,
    stopbits=STOPBITS_ONE,
    timeout=None,
    xonxoff=False,
    rtscts=False,
    writeTimeout=None,
    dsrdtr=False,
    interCharTimeout=None
)


입력 인수들:


  • port - 장치명. 윈도우즈에서는 'COM0', 'COM1' 등이다.

  • baudrate - 보레이트(baud rate) 예를 들면 9600, 115200 등.

  • parity - 패리티비트. FIVEBITS, SIXBITS, SEVENVITS, EIGHTBITS 등이 가능하다.

  • stopbit - 정지비트. STOPBITS_ONE , STOPBITS_ONE_POINT_FIVE , STOPBITS_TWO 등이 가능하다.

  • timeout - 수신 시간 제한 설정

  • xonxoff - 소프트웨어 흐름 제어를 설정

  • rtscts - 하드웨어(RTS/CTS) 흐름 제어 설정

  • dsrdtr - 하드웨어(DSR/DTR) 흐름 제어 설정

  • writeTimeout - 송신 시간 제한 설정

  • interCharTimeout


예외 발생


  • ValueError - 입력 변수값에 오류가 있을 경우 발생

  • SerialException - 시리얼 통신 장치에 오류가 있을 경우 발생


이것을 보면 포트 정도만 지정해 주어도 기본적으로 생성이 되는 것을 알 수 있다. 포트는 'COM22'와 같이 문자열로 넘겨주어야 한다. 포트명을 특정해 주면 즉시 장치와 연결이 open된다. 시리얼통신 장치를 다 사용하였다면 obj.close() 를 호출하여 반드시 닫아주어야 한다.




Posted by 살레시오
,

2. 아두이노로부터 수신 실험

 실험을 위해서 다음과 같은 간단한 프로그램을 아두이노 우노에 다운로드 하였다. 이 프로그램은 전원이 켜지면(또는 리셋 버튼을 누르면) "Hello python." 이라는 문자열을 보낸다.


void setup() {
   Serial.begin(9600);
   Serial.println("Hello python.");
}

void loop() {
}


그리고 파이썬에서 Serial 객체의 인스턴스를 다음과 같이 생성한다.


>>> ard = serial.Serial('COM22')


이렇게 하면 ard 변수에 Serial 클래스의 인스턴스가 생성된다. 이제 이 변수를 이용해서 아두이노에서 보내는 값을 읽어들일수 있다.


>>> obj = ard.readline()
>>> obj
b'Hello python.\r\n'


아두이노 쪽에서 println()함수를 썼기 때문에 끝에 \r\n 두 개의 개행 제어 문자가 붙어서 넘어왔다.


 한 가지 주의할 것은 Serial.readlin() 함수의 반환 객체가 문자열이 아니라 bytes 라는 파이썬 객체로서 각각의 문자의 아스키코드 바이트 값의 배열이라는 점이다. 이것을 파이썬 문자열(string)로 변환하려면 bytes.decode()함수를 이용하면 된다.


>>> str = obj[:-2].decode()
>>> str
'Hello python.'


이제 str 변수에 아두이노로 부터 전송된 문자열이 정확히 저장되었다. 여기서 obj[:-2] 와 같이 인덱싱을 한 것은 \r\n 두 문자를 제외하기 위한 것이다.





Posted by 살레시오
,

3. 두 번째 실험 : 송신


  이번에는 파이썬에서 값을 송신하면 그에 따라서 아두이노의 LED를 점멸시키는 예제를 해 보겠다. 파이썬에서 데이터를 쓰는 함수로 Serial.write() 함수가 있는데 전송할 바이트 데이터를 리스트나 튜플로 묶어서 넘겨주면 된다. 반환값은 전송한 데이터의 바이트 수이다. 예를 들면 다음과 같다.


-------------------------------------------------------------------------

>>> ard.write( [0] ) # 0이라는 데이터를 전송한다.

>>> ard.write( [10, 150, 255] ) # 10,150,255를 차례로 전송한다.

>>> ard.write( 123 ) # 예외 발생!

-------------------------------------------------------------------------


전송되는 데이터는 바이트 데이터이므로 0~255 사이의 정수여야 하며 마지막 예와 같이 리스트나 튜플이 아니라면 예외가 발생함을 유의하여야 한다.


만약 문자열을 한꺼번에 전송하고 싶다면 encode() 라는 문자열 내장 함수를 이용하면 된다. 이 함수는 파이썬 문자열을 아스키값의 bytes 배열로 변환시켜준다.


-------------------------------------------------------------------------

>>> ard.write( 'Hello arduino.\r\n'.encode() )

-------------------------------------------------------------------------


이 명령은 'H' 부터 맨 마지막 '\n' 까지 14개의 문자의 아스키코드를 차례로 전송한다.


이제 실험을 위해서 아두이노에 다음과 같은 프로그램을 작성하여 다운로드 했다.



아두이노 프로그램 : 전원이 켜지면(또는 리셋 버튼을 누르면) "Hello python." 이라는 문자열을 보낸다. 그리고 데이터가 들어오면 0값이면 LED를 끄고 아니라면 켠다.

-------------------------------------------------------------------------

void setup() {

Serial.begin(9600);

Serial.println("Hello python.");

pinMode(LED_BUILTIN, OUTPUT);

}


void loop() {

if( Serial.available() )

digitalWrite(LED_BUILTIN, Serial.read());

}

-------------------------------------------------------------------------


이제 ard.write([0]) 이라고 명령을 내리면 LED가 꺼지고 ard.write([1])이라고 하면 LED가 켜지는 것을 다음과 같이 확인할 수 있다. 




위 동영상을 보면 1을 쓰면 LED가 켜지고 0을 쓰면 꺼지는 것을 볼 수 있다.


Posted by 살레시오
,

  여기에서는 C/C++언어에서 객체의 이름을 짓는 기본 규칙을 설명한다. 변수(variable), 함수(function), 그리고 클래스(class)의 이름을 지정하는데 사용되는 이름을 식별자(identifier)라고 한다. 변수란 어떤 데이터를 저장하는 그릇으로 이해하면 되며 함수나 클래스에 대해서는 뒤에서 자세히 설명할 것이다.


  식별자를 만드는 데에는 다음과 같은 제약 사항이 있다.


        ❶ 알파벳 대소문자(a, b, …, z, A, B, …, Z), 숫자(0,1,2, …9), 밑줄(_)을 조합하여 만든다.

        ❷ 숫자로 시작해서는 안 된다.

        ❸ 최대 길이는 32자이다.

        ❹ C/C++언어의 예약어는 식별자로 쓸 수 없다.


특수문자로는 유일하게 밑줄(_)문자가 식별자를 만드는데 사용이 되며 이외의 다른 특수문자는 식별자롤 사용할 수 없다. 아래의 예는 올바른 식별자이다.


------------------------------------------------------

  iA cStatus iMotor10 i_AVR_Name _reg For

------------------------------------------------------


아래의 예는 올바르지 않은 식별자이다.


------------------------------------------------------

  123a   : 숫자로 시작하면 안 됨

  A@Bc : 특수문자 @은 사용 불가

  %pi    : 특수문자 % 사용 불가

  for      : 키워드는 사용 불가

------------------------------------------------------


  한 가지 주의할 점은 C언어에서는 식별자를 사용할 때 대소문자를 구별한다는 점이다. 즉 다음 식별자들은 모두 서로 다른 것으로 구별된다.


------------------------------------------------------

  ia, iA, Ia, IA

------------------------------------------------------


이러한 특징은 거의 대부분의 프로그래밍 언어들에 있어서 공통적으로 해당된다.​

[#00070]


Posted by 살레시오
,

micropython 코어를 이용한 wipy 라는 IoT 보드가 킥스타터에서 자금을 모으고 있다.



내세우고 있는 특징들은 다음과 같다.


  • 저가, 소형, 빵판에 장착 가능
  • 초저전력 소모 (와이파이 연결해도 850uA )
  • 100% 파이썬 프로그래밍 
  • 충분히 많은 GPIOs, 인터페이스, 주변기기
  • 고성능  CPU와 최신 WiFi radio.


이 기기의 최대 특징은 와이파이와 결합된 파이썬 보드라는 것이다. micropython의 펌웨어를 이용하여 파이썬 3.4를 지원한다. 그리고 와이파이로 무선 프로그래밍이 가능하다는 것이다. 다음과 같이 텔넷 연결도 가능하다.



보면 알겠지만 일반적인 파이썬쉘로 접속이 가능하므로 그때그때 프로그램의 동작을 확인해 볼 수 있다.


  물론 전문적인 시스템 개발자들은 앞으로도 한동안 여전히 C/C++을 이용해야 할 것이다. 하지만 이런 보드들이 좀 더 늘어나면 하드웨어 프로그래밍을 하는데 굳이 C/C++을 배우지 않고 파이썬만으로도 할 수 있는 환경이 마련되어 일반 사용자들에게 충분히 어필을 할 수 있을 것 같다.

[#00097]


Posted by 살레시오
,