세계 최초의 오픈 소스 노트북이 데뷔합니다

노베나 노트북

세계가 오픈 소스 노트북을 원하게 될까요? 곧 알게 될 겁니다.

bunnie Huang과 Xobs로 이루어진 하드웨어/소프트웨어 팀이 해킹이 가능한 휴대용 컴퓨터인 Novena를 크라우드펀딩 사이트인 Crowd Supply의 후원자들에게 제공한다고 합니다. 프로젝트와 관련해 bunnie가 MAKE에 남긴 글에도 많은 관심이 있었죠. 제작팀은 프로젝트에 대해 다음과 같은 이야기를 했습니다.

우리가 만든 기계는 심장이 멈출 정도의 물건은 아닙니다. 오픈 소스 프로젝트인만큼 이 장치가 주는 기쁨(그리고 실망)이 앞으로 더 좋아질 것이라는 데에 의의를 둡니다. 아마 이 노트북은 스크류드라이버와 함께 배송되는 유일한 노트북이 될 것입니다. 여러분은 배터리를 직접 설치하고, 여러분이 고른 LCD 베젤에 나사를 돌려 넣어야 합니다. 그리고 스피커는 키트 형태로 들어있으니 3D 프린터를 사용할 수 있다면 우리가 디자인한 스피커 박스를 쓸 필요는 없습니다. 직접 스피커 박스를 만들어도 됩니다.

그들은 노트북을 세 가지 버전으로 제공합니다. “올인원 데스크탑”은 $1,195에 판매하며, 좀 더 튼튼한 버전을 $1,995에, Kurt Mottweiler가 나무와 알루미늄으로 마감한 “가보(heirloom)” 모델은 $5,000에 구할 수 있습니다.

앞의 두 모델은 스크린이 위쪽을 향해 매립되어 있습니다. 이 덕분에 스크린을 닫으면 벽걸이 모니터로 쓸 수 있을 뿐만 아니라 일반 노트북의 내부는 키보드로 덮여 있기 때문에 해킹하기가 어려웠던 문제를 해결했다고 하네요.

bunnie와 Xobs는 기판만 별도로 500$에 판매하고 있습니다. 메인보드는 AQS에서 제조했다고 하네요.

가보

오늘까지 프로젝트는 $200,785를 모금했으며 목표인 $250,000 까지는 20일이 남았습니다. 네 명의 후원자가 벌써 가보 모델에 후원을 했군요.

어떤신가요. 메이커와 해커 여러분. 여러분도 하나 사서 직접 만들어 보고 싶나요?

원문링크 http://makezine.com/2014/04/02/the-worlds-first-open-source-laptop-makes-its-debut/

Posted in 재미있는 프로젝트 | Tagged , |

유용한 아두이노 함수들

아두이노

유용한 아두이노 함수 몇 가지를 여기에 소개합니다.

LED 깜박이기
LED를 요청한 빈도와 횟수만큼 깜박이는 함수입니다.


void blinkLED(byte targetPin, int numBlinks, int blinkRate) {
  for (int i=0; i < numBlinks; i++) {
    digitalWrite(targetPin, HIGH);
    delay(blinkRate);
    digitalWrite(targetPin, LOW);
    delay(blinkRate);
  }
}

숫자 깜박이기
과거 컴퓨터를 사용하기 시작한 지 얼마 안 된 시절에는 고장이 생겼을 때 사용자에게 오류가 발생했다는 것을 알릴 수 있는 유일한 수단이 불빛을 깜박이는 것밖에 없을 때도 있었습니다. 마이크로 컨트롤러 작업을 할 때에는 이 불빛이 유용할 때도 있습니다. 다음 함수는 LED를 연속적으로 깜박여서 숫자를 눈에 보이게 표현할 수 있지요.

void blinkNumber(char* numString) {
    int versLength = strlen(numString);
    delay(200);
    for (int i =0 ; i < versLength; i++) {
      int number = numString[i] -48;
      if (number == 0){
        blinkLED(LED_A,1,20);
        delay(160);
      }
      if (number > 0 && number < 10) blinkLED(LED_A,number,200);
      delay(400);
    }
}

버저 울리기
특정 주파수의 소리를 듣고 싶을 때마다 머리 아프게 수학 계산할 필요 없이 피에조 버저를 활용할 수 있게 도와주는 함수입니다. 여러분은 함수에 어떤 핀을 사용할 것인지, 어쩐 주파수의 소리를 듣고 싶은지, 그 주파수를 얼마나 길게 재생할 것인지 알려주기만 하면 된답니다.


void buzz(int targetPin, long frequency, long length) {
  long delayValue = 1000000/frequency/2;
  long numCycles = frequency * length/ 1000;
  for (long i=0; i < numCycles; i++){
    digitalWrite(targetPin,HIGH);
    delayMicroseconds(delayValue);
    digitalWrite(targetPin,LOW);
    delayMicroseconds(delayValue);
  }
}

사용 가능한 램 크기 확인하기
ATmega328의 프로그램 메모리는 32K지만 SRAM 크기는 2K밖에 되지 않습니다. 프로그램 메모리는 코드를 저장하는 공간이고 램은 코드가 사용하는 변수를 동적으로 저장하는 공간입니다. 실질적으로 사용할 수 있는 램의 용량은 2K보다 훨씬 적은데, 아두이노 라이브러리가 자체적으로 어느 정도의 메모리 공간을 차지하기 때문이지요.

설령 프로그램이 마이크로 컨트롤러의 SRAM 용량을 넘어서더라도 아두이노 개발 환경에서는 문제없이 컴파일이 가능합니다. 하지만 프로그램이 전혀 예측하지 못한 방향으로 동작하고, 코드가 이상하게 동작하거나 충돌할 수도 있습니다. 이 함수는 현재 사용 가능한 SRAM 용량을 반환할 것입니다.

int memoryTest() {
  int byteCounter = 0;
  byte *byteArray;
  while ( (byteArray = (byte*) malloc (byteCounter * sizeof(byte))) != NULL ) {
    byteCounter++;
    free(byteArray);
  }
  free(byteArray);
  return byteCounter;
}

큰 숫자 매핑하기
이 함수는 큰 양수에도 사용할 수 있는 map 함수라고 볼 수 있습니다. 음수는 사용할 수 없어요.

long mapBig(unsigned long x, unsigned long in_min, unsigned long in_max,
            unsigned long out_min, unsigned long out_max) {
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

와이파이 연결하기
신형 아두이노 와이파이 실드는 아주 괜찮은 보드입니다. 그러나 여러 종류의 네트워크를 다루기는 까다로운 일이지요. 다음 코드는 SSID가 ssid 변수에 저장된 값과 같고, 암호가 pass 변수에 저장된 값과 일치하는 암호화된 WPA/WPA2 와이파이 네트워크에 접속을 시도할 것입니다. 그러나 만약 설정한 네트워크를 찾지 못하면, 공개 와아파이 네트워크를 찾기 시작하지요.


    if (WiFi.status() == WL_NO_SHIELD) {
      Serial.println("WiFi shield not present");
      while(true);
    }   

    if ( stringFromCharString(ssid) != "" ) {
       while ( status != WL_CONNECTED) {
         timesWeTriedToConnect++;
         Serial.print(F("Attempting to connect to SSID (attempt "));
         Serial.print( timesWeTriedToConnect );
         Serial.print(F(" of 5): "));
         Serial.println(ssid);
         status = WiFi.begin(ssid, pass); // Connect to WPA/WPA2 network.
         delay(2000);
         if ( timesWeTriedToConnect >= 5 ) break;
       }
    }
    if ( status != WL_CONNECTED ) {
       Serial.print("Unable to connect to ssid '");
       Serial.print( ssid );
       Serial.println( "'");
       Serial.println("** Scanning for open networks **");
       byte numSsid = WiFi.scanNetworks();
       Serial.print("number of available networks:");
       Serial.println(numSsid);
       for (int thisNet = 0; thisNet

EEPROM에 읽고 쓰기
아두이노의 EEPROM에 숫자나 기타 데이터를 저장해 전원이 끊어졌을 때에도 데이터를 저장하는 기능이 쓸모 있을 때도 자주 있습니다. 내장 EEPROM 라이브러리를 사용하면 아주 쉽게 EEPROM에 숫자를 기록할 수 있지요.

void setNumber(unsigned long ctr) {

   Serial.print("Setting number in EEPROM to = ");
   Serial.println( ctr );
   EEPROM.write(4,(ctr & 0xFFFFFFFF) >> 24); // MSB 기록
   EEPROM.write(3,(ctr & 0xFFFFFF) >> 16); // 3rdB 기록
   EEPROM.write(2,(ctr & 0xFFFF) >> 8); // 2ndB 기록
   EEPROM.write(1,ctr & 0xFF); // LSB 기록
}

기록한 숫자는 다음 함수를 사용해 다시 읽을 수 있습니다.


unsigned long getNumber() {
   unsigned long ctr;

   //숫자 초기화
   if (EEPROM.read(5) != 1) { 

      // 저장 상태가 false일 때
      Serial.println("Initializing number in EEPROM");
      EEPROM.write(1,0); // LSB 0을 기록
      EEPROM.write(2,0); // 2ndB 0을 기록
      EEPROM.write(3,0); // 3rdB 0을 기록
      EEPROM.write(4,0); // MSB 0을 기록
      EEPROM.write(5,1); // 저장 상태를 true로 설정
   }

   //바이트를 더해 32비트 숫자를 알아낸다
   ctr = (EEPROM.read(4) << 24) + (EEPROM.read(3) << 16) + (EEPROM.read(2) << 8 )
   + (EEPROM.read(1));
   Serial.print("Getting number from EEPROM = ");
   Serial.println( ctr );
   return ctr;
}

이 게시물의 코드는 롭 팔루디(Rob Faludi)알라스데어 앨런(Alasdair Allan)이 제공한 것입니다. 두 사람의 동의를 얻어 MAKE 사이트에 게시했습니다. 원본 게시물은 2013년 5월 13일에 게시된 것입니다.

원문링크 http://makezine.com/2014/03/24/arduino-helper-functions-2/

Posted in 재미있는 프로젝트 | Tagged , |

아두이노를 사용한 크라우드펀딩 캠페인들

오픈 소스 플랫폼으로서 아두이노가 누리는 인기는 많은 애드온과 변형 기판이 만들어지는 데 큰 영향을 주었습니다. 그 중 아주 흥미로운 캠페인 몇 가지를 여기에 소개하고자 합니다. 킥스타터(Kickstarter)의 메이크 페이지에서 지나간 프로젝트와 현재 프로젝트를 더 확인해 보세요.

SKIRMOS(아두이노 레이저 태그)

오픈 소스 레이저 태그 게임. LCD 스크린이 내장된 총을 함께 제공하는데, 이 총은 총알의 움직임, 킬과 데스뿐만 아니라 게임 타이머와 목표 달성 여부까지 추적할 수 있습니다. 여기에 사운드 카드와 스피커, 그리고 빠지면 섭섭한 멋진 내장 LED까지 달려 있습니다. 이 총은 ATmega 328p를 사용하는데, 이는 아두이노에 사용된 칩과 똑같은 마이크로 컨트롤러랍니다. 멋진 가능성으로 충만하네요!

오픈 소스 에니그마(Enigma) 레플리카

오픈 에니그마 프로젝트(Open Enigma Project)의 목표는 2차 세계 대전에서 사용된 역사적인 암호 해독기의 복제품을 아두이노를 사용해 제작하는 것입니다. 이 기계는 아두이노 메가를 사용해 정보를 암호화/복호화는데, 진품이 기어와 바퀴를 사용했던 것과는 달리 소프트웨어만 사용합니다. 이 기계를 사용하면 역사에서 독일군이 사용했던 암호를 실제로 풀어볼 수도 있답니다!

SHIELD I/O(비글본용 아두이노 실드)

인디고고에서 크라우드 펀딩 캠페인을 진행하고 있는 Shield I/O는 비글본 블랙(BeagleBone Black)에 모든 표준 아두이노 실드를 끼울 수 있도록 헤더가 달린 케이프(cape: 비글본용 확장 기판)입니다. 게다가, 이 케이프는 14개의 디지털 GPIO핀을 레벨 시프터로 무장했으며 디지털 입력에 3.3V나 5V를, 아날로그 입력에 최대 5V를 공급하는 것도 가능하지요. 하드웨어를 잔뜩 살 필요 없이 비글본 블랙 프로그래밍에 도전해 볼 수 있는 좋은 기회네요!

갬부이노: 아두이노 휴대용 게임 패드

인디고고의 갬부이노(Gambuino) 캠패인은 아주 작은 LCD와 버튼이 달린 신용 카드 크기의 소형 게임 패드가 주인공인 캠페인입니다. I2C 포트를 통해 최대 128개의 갬부이노나 팅커키트(Tinkerkit)와 같은 다른 I2C모듈을 데이지 체인 방식으로 연결할 수 있습니다.

마이크로뷰: OLED 디스플레이가 달린 칩 크기의 아두이노

깜직한 마이크로뷰 64×48 OLED 모듈 안에는 아두이노가 동작하는 ATmega328p 마이크로 컨트롤러가 담겨 있습니다. 마이크로뷰를 재미있게 사용한 사례를 많이 볼 수 있었는데, 특히 소형 가전 프로젝트가 재미있더군요. 노트북의 USB 포트에 꽂아 보조 모니터로 쓸 수 있다는 점에도 큰 관심이 가네요.

새로운 정보: 마이크로뷰에 관해서는 여기에서 더 알아볼 수 있습니다.

제스처알(GestureR): 아두이노용 동작 감지 모듈

제스처알은 아두이노용 동작 감지 모듈입니다. 이 모듈은 동작(4방향), 근접 정도, 주변광을 분간합니다. 이 모듈은 I2C를 이용해 아두이노와 통신하며 프로젝트 팀이 동작 가능한 예제를 준비해 두었다고 하네요.

듀얼 아두이노 엑스플로어보드(Dual-Arduino Xploreboard)

프로포타입 기판의 종결자가 나타났습니다. 엑스플로어보드는 두 개의 아두이노 마이크로, 풀사이즈 브레드보드, LCD 디스플레이, 8개의 스위치, 피에조 부저, 빛 센서, LED 디스플레이, 논리 컨버터, 포텐시오미터, 캐패시터 등으로 구성되었습니다. 간단히 말해 보든 전자부품이 하나의 패널 안에 들어있는 셈이지요. 취미 전자공학에 처음으로 발을 들여논 사람들을 가르칠 때 사용했던 옛날식 프로토타입 기판과 비슷하네요.

원문링크 http://makezine.com/2014/03/24/arduino-inspired-crowdfunding-campaigns/

Posted in 재미있는 프로젝트 | Tagged , |

마이크로뷰(MicroView)와 함께 아두이노 생태계를 넓혀 보세요

아두이노는 메이커 운동에서 가장 성공한 제품이자 가장 잘 알려진 브랜드라고 해도 과언은 아닐 것입니다. 그 결과 다양한 기능을 지닌 복제 기판, 파생 상품, 호환 기판 등이 점점 늘어나고 있지요. 그 중에는 아두이노와 모습이 비슷한 제품도 있지만, 다른 형태를 지닌 제품도 있습니다.

마이크로뷰는 아두이노의 호환 기판으로 아두이노 앳 하트 프로그램(Arduino at Heart program)의 일원인 것에는 틀림이 없습니다만 전형적인 아두이노와는 다른 모습을 지니고 있습니다. 마이크로뷰는 OLED 디스플레이를 내장한 소형 칩 크기의 아두이노로 브레드보드와도 호환이 가능합니다. 아두이노 우노와 마찬가지로 Atmega328P 마이크로 컨트롤러를 사용하지만 아두이노와는 완전히 다르게 생겼지요.

마이크로뷰를 라즈베리 파이에 꽂아 CPU 사용량을 표시하고 있다
마이크로뷰를 라즈베리 파이에 꽂아 CPU 사용량을 표시하고 있다

손가락 끝에 올려둔 마이크로뷰
손가락 끝에 올려둔 마이크로뷰

마이크로뷰를 USB 단자에 꽂아 날씨 애플리케이션을 표시하고 있다
마이크로뷰를 USB 단자에 꽂아 날씨 애플리케이션을 표시하고 있다

마이크로뷰를 로봇의 두뇌로 사용한 모습
마이크로뷰를 로봇의 두뇌로 사용한 모습

이 보드는 친구들끼리의 장난으로 시작되었습니다. 긱아모(GeekAmmo)의 CTO인 JP Liew가 알리바바(Alibaba)에서 발견한 멋진 신상품에 대한 정보를 마커스(Marcus)에게 이메일로 보냈습니다. 그 상품은 나중에 완성된 마이크로뷰의 모습과 거의 똑같았는데, 한 가지 문제가 있었습니다. 진짜로 존재하는 상품이 아니었지요. 마커스의 기대를 저버리지 않기 위해 그 자리에서 실제 제품을 만들기 시작했습니다.

저는 긱아모의 CEO이자 마이크로뷰의 공동 제작자인 마커스 샤피(Schappi)와 함께 위의 일화와 함께, 킥스타터 캠페인, 아두이노 생태계를 확장하는 데 있어 마이크로뷰가 차지하고 있는 위치에 대해 의견을 나누는 자리를 가졌습니다.

마이크로뷰와 크기가 비슷하거나 오히려 더 작은 아두이노 호환 보드(TinyduinoMicroduino가 생각나네요)도 있습니다만, OLED 스크린까지, 갖출 건 모두 갖추면서도 크기까지 작은 것은 없습니다. 마이크로뷰의 매끈하고 빛나는 플라스틱 외관 역시 파란색 사각형에 계속 머물러 있던 플랫폼의 흥미로운 진화라고 할 수 있겠지요. 마이크로뷰의 제작자들이 비글본 블랙(Beaglebone Black)을 이와 비슷하게 플라스틱으로 감싼 케이스인 닌자 블럭(Ninja Blocks)에서 일했기 때문에 예상할 수 있는 일이긴 합니다.

마이크로뷰는 아두이노 코드를 작성할 때 OLED 디스플레이에 쉽게 접근할 수 있게 도와주는 전용 소프트웨어 라이브러리와 함께 출시될 것입니다. 이 라이브러리를 사용하면 글자, 스프라이트, 그래프, 눈금 등을 몇 줄의 코드만 사용해 손쉽게 표시할 수 있습니다. 제작팀은 보드의 설계 파일과 마이크로뷰 아두이노 라이브러리에 미리 접근할 수 있는 권한을 후원자들에게 제공했습니다. 그들은 킥스타터에서의 자금 모집이 끝나면 전체 파일을 깃허브(Github)에 올릴 예정이라고 하는군요.


마이크로뷰 OLED 라이브러리를 사용해 2줄의 아두이노 코드만으로 조도 센서의 입력 값을 눈금으로 표시할 수 있음을 보여주고 있다.

재미있게도. 마이크로뷰는 내장 디스플레이를 이용해 마이크로뷰를 중심으로 프로젝트를 제작하는 방법을 알려줄 수 있는 아두이노이기도 합니다.

“마이크로뷰는 전자공학과 아두이노를 가르칠 수 있는 최초의 아두이노입니다. 마이크로뷰는 멋진 LED 디스플레이 위로 표시되는 내장 튜토리얼이 설치된 채로 판매될 겁니다.” – 마들린 샤피(Madeleine Schappi)

24시간도 채 지나기 전킥스타터의 프로젝트 목표를 초과 달성한 마이크로뷰 팀에게는 아직 20일 정도 기한이 남아있습니다. 이 시간이 다 지나가기도 전에 그들이 첫 번째 판매를 위해 준비한 5,000개의 수량(기판은 스파크펀이 미국내에서 제조합니다)이 모두 사라질 가능성도 꽤 높을 것 같네요.

일반 사양

  • 아두이노 IDE 1.0 이상 지원(OSX/Win/Linux)
  • 100% 아두이노 호환
  • 내장 64×48 OLED 디스플레이
  • 직류 3.3V DC – 16V DC 전원, 입력, 정류기 불필요
  • 표준 DIP 패키지
  • 브레드보드와 직접 납땜하기 쉬움

하드웨어 사양

  • 디스플레이: 64×48 OLED 디스플레이
  • 마이크로컨트롤러: ATmega328P
  • 동작 전압: 5V
  • 입력 전압: 3.3VDC – 16VDC
  • 디지털 I/O 핀: 12개 (3개는 PWM 출력 지원)
  • 아날로그 입력 핀: 6개
  • 플래시 메모리: 32 KB
  • SRAM: 2 KB
  • EEPROM: 1 KB
  • 클럭 속도: 16 Mhz
  • 별도 부품이 필요 없음
Posted in 재미있는 프로젝트 | Tagged , , |

경찰 레이더 해킹하기

메이크 블로그에 여러 번 작업이 소개된 적 있는 고레고리 “미스터 진공관” 차밧(Gregory “Mr. Vacuum Tube” Charvat)이 구형 경찰 레이더를 분해했습니다.

고물을 고치면서 새롭게 얻을 수 있는 정보는 정말 놀랍습니다.

구식 경찰 레이더 건의 동영상 출력을 노트북의 오디오 입력에 입력하고 기본적인 신호 처리 기법을 적용해 다양한 대상에 대한 도플러 효과가 시간에 지남에 따라 변화하는 모습을 스펙트럼 위의 좌표로 표시합니다.

새, 달리는 사람, 자동차의 도플러 궤적을 관찰했습니다. 위와 같은 관찰 대상의 상대적인 레이더 단면도 관심을 가질 만 하군요(자동차가 새보다 밝습니다).

원문링크 http://makezine.com/2012/11/12/hacking-a-police-radar/

Posted in 재미있는 프로젝트 | Tagged |