라즈베리파이 B+ 요약

 2014년 6월, 라즈베리 재단은 라즈베리 B의 후속 버전으로 라즈베리 파이 B+ 모델을 발표하였다. 시스템이 업그레이드 된 것은 아니고 UBS포터와 소비전력, 폼팩터 등이 개선되었다.
원문 : http://volumio.org/raspberry-pi-model-b-plus/
 간단히 라즈베리 파이 B모델에 비해 B+ 모델에서 변화된 점을 살펴 보자.
참고 : http://www.raspberrypi.org/products/model-b-plus/

  • GPIO 증가 : GPIO 핀을 26핀에서 40핀으로 증가
  • UBS 증가 : USB 2.0 포트를 2개에서 4개로 증가
  • Micro SD 지원 : 기존 SD카드에서 Micro SD로 변경. 
  • 리니어소비전력 0.5W ~ 1W 감소
  • 오디오 기능 향상
  • 깔끔해진 폼팩터 : UBS 포터 정렬 및 3.5mm비지오 단자를 이동시키고, 네 모서리에 고정구멍을 둠

 저전력과 UBS포트의 증가로 인해서 좀더 효율적으로 프로젝트에 사용될 것으로 기대된다. 특히 포트가 4개로 증가됨으로 인해서 더 이상 추가적으로 UBS 허브를 사용하지 않아도 될 것 같다. 그리고 마이크로 SD카드를 사용함으로 인해서 공간을 절약할 수 있게 되었다. 디자인적으로는 네 모서리에 작은 구멍을 둠으로 인해서 다른 장비에 좀 더 쉽게 라즈베리 파이를 고정시킬 수 있게 되었다.

라즈베리파이 시작하기

 라즈베리파이는 영국에서 만들어진 작고 값싼 싱글 보드 컴퓨터이다. 영국의 라즈베리파이 재단에 의해서 만들어지고 보급되고 있다. 교육용으로 시작되었지만, 수많은 오픈프로젝트가 진행되면서 그 활용분야가 다양해지고 있다. 아두이노, 갈릴레오가 작은 하드웨어 플렛폼이라면 라즈베리 파이는 작은 PC에 가깝다. 라즈베리 파이에는 UBS포트, HDMI, Micro SD카드 슬롯, Lan 포트 등 PC의 메인보드에 포함되어 있는 입출력 단자들이 기본적으로 갖추어져있어 컴퓨터의 메인보드 모습을 하고 있다.
라즈베리 파이 : http://www.raspberrypi.org/
  라즈베리 파이는 PC의 모습을 하고 있기 때문에 우리가 PC를 구성하기 위한 물품들이 필요하다.
라즈베리파이 B+, USB어탑터, HDMI지원 모니터, HDMI케이블, 마우스, 키보드, MicroSD 카드, Micro USB 케이블, 렌케이블
 추가적으로 라즈베리파이 케이스, USB형태 무선 와이파이 동글, 블루투스 동글 등이 있으면 좀더 간단한 연결로 라즈베리 파이 PC를 구성할 수 있다.
 라즈베리파이 B+ 모델을 살펴보자. 아래쪽에 HDMI 포트, 오른쪽에 USB 2.0 포트 4개, 랜포트가 있다.
 HDMI포트를 기본적으로 지원하는데, 모니터가 HDMI를 지원하지 않는다면 HDMI to DVI-D 컨버터를 구입해야한다. HDMI를 DVI로 변환해서 다시 D-SUB형태로 변환하는 것은 연결 단자만으로 가능한 것은 아니고 전용 장비를 사야한다. HDMI를 D-SUB형태로 바로 변환해주는 케이블은 2만원 정도에 구입할 수 있다.
 4개의 USB 2.0 포트와 랜포트를 볼 수 있다. 추후에 UBS 연결 단자에 무선 랜과 블루투스 키보드 마우스를 연결해 선을 최소화 할 수 있다.
 5개의 기본 입출력 단자를 모두 연결 했을 때의 사진이다. 책상 주변이 조금은 복잡해 진다. 라즈베리 파이의 최대 소비전력은 700mA의 저전력이다. UBS 3.0의 출력인 900mA를 이용한다면 별도의 전원을 사용하지 않고 PC전력을 이용할 수도 있다. 
USB 2.0 정격 전류용량 : 5V 500mA
USB 3.0 정격 전류용량 : 5V/12V 900mA
 간단히 라즈베리파이의 모습을 알아보았다. 다음 글에서는 라즈베리 파이에 실제로 OS를 올려 라즈베리 파이를 실행해 보겠다. 그리고 무선 와이파이를 연결해 라즈베리 파이를 최대한 깔끔하게 구성하는 방법을 알아보겠다.

참고 

넥서스5 롤리팝 간단 사용기

 안드로이드의 최신 버전인 롤리팝이 배포되기 시작한지 일주일이 지난 오늘 필자에게도 OTA(Over The Air) 푸시가 도착했다. 넥서스5에 롤리팝을 설치한 후, 10시간 정도 사용을 해본 경험을 간단히 쓰고자 한다.
개발자를 위한 안드로이드 5.0 롤리팝의 중요 변경사항 정리 : http://googledevkr.blogspot.kr/2014/10/android-50-api21-changes.html
 500MB 정도의 파일을 다운받은 후, 20분 정도의 설치 시간이 소요된다. 중간에 배터리가 나갈 수도 있으니 꼭 전원을 연결한 상황에서 설치를 하자.
 첫 기본 이미지는 살짝 우중충한 느낌이다. 왼쪽의 전화기 아이콘을 터치한 후, 오른쪽으로 밀면 바로 전화를 거는 모드로 변한다.
 첫 화면이다. 전화기 등의 기본 아이콘이 바뀌고, 폴더의 아이콘 배열 모양이 바뀌었다. 그리고 상단의 트레이 아이콘이 좀더 단순하게 바뀌었다.
 가운데 버튼(O)을 눌렀을 때, 나오는 메뉴의 모습이다.
 화면의 상단을 아래쪽으로 쓸어 내렸을 때, 알림이 있을 경우, 좀더 직관적으로 표시가 된다. 메시지를 꾸욱 누를 경우, 앞으로 이런 종류의 메시지를 표시할지 말지 설정할 수 있다.
 알림 메시지를 보고 있는 상황에서 한 번더 아래쪽으로 알림 메시지를 당기면 간편설정 모드로 들어갈 수 있다. 손전등 기능이 밖에 나와 있는 것이 특이하다. 자주 사용하는 기능인데, 매우 편리 할 것 같다. 그리고 어느 와이파이, 어느 블루투스 기기에 연결이 되었는지 바로 표시가 된다. 크롬캐스트를 사용하고 있다면 화면전송 아이콘이 활성화 된다.
 설정 정보를 보자. 4.x 에서는 조금 빡빡한 모습을 보였지만 롤리팝에서는 여백을 많이 두고 있다.
환 안드로이드 버전이 5.0 으로 되어 있다. 이 버전 정보를 계속 클릭하면 롤리팝이 뜨는 것을 볼 수 있다.

 lollipop 부분을 터치하면 색이 바뀐다.

 ㅁ버튼을 누르면 이전 실행앱 리스트를 볼 수 있다. 이전까지 좌우로 배치되던 실행앱 리스트가 아래위로 바뀌었다.  
 전화키패드의 모습이다. 
 알람 시계의 모습니다.
 구글의 개별앱에 적용되던 머트리얼 디자인이 폰전체에 적용되었다.아직은 어색한 느낌이다. 디자인이 좀더 일관적으로 바뀌고 여백이 강조되어 시원시원해진 느낌이다. 전자기기에서 살짝 그림작품으로 바뀐 느낌이다. 
 알람 기능 등이 개선된게 가장 체감효과가 큰 것 같다. ART으로 바뀐 처리엔진의 성능은 아직 체감하지 못했다. 그리고 배터리 성능도 증가한 것 같지만 확실히 와닿지는 않는다.
 구글이 업데이트가 가능한 부분은 사전에 업데이트를 하고, 앱을 미리 업데이트 하여 극적인 느낌은 확실히 애플의 업데이트에 비해서 떨어진다. 하지만 이전 안드로이드 버전에 비해서 진일보하고 있다는 것은 분명하다.

인텔 갈릴레오2 측우기 만들기(LCD + 수위센서 + RGB LED)

 간단한 측우기를 만들어보려고 한다. 수위센서를 이용하여 강수량을 측정하고 이를 LCD에 출력해주는 간단한 모듈이다. LCD모듈을 제어하는 방법은 [인텔 갈릴레오2 LCD에 Hello, world 찍기(링크)]을 참고하기 바란다. 그리고 수위가 증가하면 빨간색 LED를 깜빡이고 수위가 감소하면 초록색LED를 깜빡이게 하였다.
준비물 : 준비물 : IIC/I2C LCD1602(HD44780 호환), 수위센서, RGB LED
 스케치 코드
/* Include the SPI/IIC Library */
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
/* Initialise the LiquidCrystal library. The default address is 0x27 and this is a 16x2 line display */
LiquidCrystal_I2C lcd(0x27,16,2);
int preState;
int nowState;
void setup()
{
  preState = 0;
  nowState = 0;

  Serial.begin(9600);
  /* LCD모듈을 초기화 한다. */
  lcd.init();

  pinMode(3, OUTPUT); // Red
  pinMode(5, OUTPUT); // Green
  pinMode(7, OUTPUT); // Blue
 
  digitalWrite(3, HIGH);  // Red Off
  digitalWrite(5, HIGH);  // Green Off
  digitalWrite(7, HIGH);  // Blue Off
}
void loop()
{
  int level = analogRead(A0);    // 아날로그0 에 연결한 수위센서로부터 값을 읽어온다.
  Serial.print("Rainfall : ");   // 시리얼 모니터에 측정값을 출력한다.
  Serial.println(level);
  /* LCD백라이트를 켠다. */
  lcd.backlight();
  /* LCD내용을 출력한다. */
  lcd.setCursor(0,0);
  lcd.print("Rain Gauge");
  lcd.setCursor(0,1);
  lcd.print("Rain: ");
  lcd.print(preState);
  lcd.print("->");
  lcd.print(level);

  nowState = level;

  if(preState < nowState)
  {
    Serial.println("Rainfall +");
    digitalWrite(3, LOW);   // Red On
    digitalWrite(5, HIGH);  // Green Off
    digitalWrite(7, HIGH);  // Blue Off
  }
  else if(preState > nowState)
  {
    Serial.println("Rainfall -");
    digitalWrite(3, HIGH);  // Red On
    digitalWrite(5, LOW);   // Green Off
    digitalWrite(7, HIGH);  // Blue Off
  }
  else if(preState == nowState)
  {
    Serial.println("Rainfall ==");
    digitalWrite(3, HIGH);  // Red On
    digitalWrite(5, HIGH);  // Green Off
    digitalWrite(7, LOW);   // Blue On
  }
  preState = nowState;
  // 지연시간
  delay(500);

  lcd.init();
}
 기본 회로도

 스케치 코드 분석
 수위센서를 아날로그1번에 연결한다.
 RGB LED를 PWD 3번-Red, 5번-Green, 7번-Blue에 각각 연결을 하고 GND에 연결하는 한 가닥에는 저항을 하나 연결한다. 수위센서의 내용을 읽어와 LCD에 출력을 하고, 이전값과 비교하여 출력할 LED를 결정한다.

 회로 만들기
수위 센서를 연결한다. frizing에서 수위센서를 찾을수가 없어서 비슷한 모양으로 골랐다. 가장 오른쪽을 아날로그0번에 연결한다.
 RGB LED를 연결한다. GND는 수위센서와 공유한다.
  LCD I2C모듈을 연결한다. 이전 글을 참고해서 연결하면 된다. 수위 모듈에서 입력받은 값을 LCD모듈에서 출력한다.
 수위가 증가하면 빨간불, 감소하면 초록불, 변하지 않으면 파란불이 켜진다. 위 사진에서는 수위가 변하지 않았기 때문에 파란불이 켜졌다.
 아래 동영상에서 분무기를 이용하여 컵의 아래쪽에 물을 흘려내려 보내니, LCD에 표시되는 값이 증가하는 것을 볼 수 있다. 물뿌림을 중단하면 숫자값이 변화되지 않다가 작게나마 감소하는 것을 볼 수 있다.

인텔 갈릴레오2 LCD에 Hello, world 출력하기

 프로그램을 처음 배우면 하는 Hello, world 찍기를 갈릴레오2에서도 해보자. 아래의 링크는 기본적인 LCD모듈을 사용했을 때, 사용하는 스케치 코드이다. 실제로 필자가 사용한 모듈은 I2C모듈이 LCD모듈과 합쳐진 모듈이다. 구현하기가 훨씬 간단하다. 먼저 기본 모듈부터 보자.
HelloWorld : https://communities.intel.com/docs/DOC-22456
준비물 : IIC/I2C LCD1602(HD44780 호환)
기본 스케치 파일 : 파일 -> 예제 -> 03. LiquidCrystal -> HelloWorld
 스케치 코드
/*
  LiquidCrystal Library - Hello World

 Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
 library works with all LCD displays that are compatible with the
 Hitachi HD44780 driver. There are many of them out there, and you
 can usually tell them by the 16-pin interface.

 This sketch prints "Hello World!" to the LCD
 and shows the time.

  The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)

 Library originally added 18 Apr 2008
 by David A. Mellis
 library modified 5 Jul 2009
 by Limor Fried (http://www.ladyada.net)
 example added 9 Jul 2009
 by Tom Igoe
 modified 22 Nov 2010
 by Tom Igoe

 This example code is in the public domain.
 http://www.arduino.cc/en/Tutorial/LiquidCrystal
 */
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("hello, world!");
}
void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(millis()/1000);
}

 기본 회로도
 보통 스타터 킷을 구입하게 되면 위와달리 LCD모듈과 I2C라는 모듈이 합쳐진 LCD모듈을 준다. PWD(12, 11, 5, 4, 3, 2) 모듈을 좀더 쉽게 규현해주어 A4, A5와 연결만 하면된다. 다만 LiquidCrystal_I2C 라는 라이브러리를 추가해야만 사용이 가능하다.

 스케치 코드 분석
/*
DEVICE PINOUT (SPI Interface):
PIN 1: GND
PIN 2: +5V
PIN 3: SDA - A4에 연결
PIN 4: SCL - A5에 연결
*/

/* Include the SPI/IIC Library */
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

/* LCD를 16*2 배열로 초기화 한다. */
LiquidCrystal_I2C lcd(0x27,16,2);

void setup()
{
  /* LCD 초기화 */
  lcd.init();
}
/* Main program loop */
void loop()
{
  // 백그라운드를 켠다.
  lcd.backlight();

  lcd.setCursor(0,0);     // 커서를 첫번째 줄에 위치한다.
  lcd.print("Hello, World");
  lcd.setCursor(0,1);
  lcd.print("by JaeHun");

  /* Do nothing */
  while(1);
}

 위 스케치 코드를 그대로 컴파일을 한다면 다음과 같은 오류를 만날 수도 있다.
HelloWorld.ino:3:31: fatal error: LiquidCrystal_I2C.h: No such file or directory
compilation terminated.
 이럴 경우, 아래의 페이지를 방문하여 LiquidCrystal_I2C 라이브러리를 다운받아서 아두이노 IDE가 설치된 libraries 폴더 아래에 압축을 푼다.
설명 페이지 : http://www.dfrobot.com/index.php?route=product/product&product_id=135
라이브러리 파일 : http://www.dfrobot.com/image/data/TOY0046/LiquidCrystal_I2Cv1-1.rar
 그리고 아두이노 IDE를 다시 시작하고 스케치 -> 라이브러리에 추가되었는지 확인한다. 그리고 나서 다시 위 스케치코드를 컴파일 한다.

 회로 만들기
 이번에 사용할 LCD1602 ICC V1 모델이다.
 뒷면의 연결 단자가 4개가 있다. 이를 다음과 같이 연결한다.
PIN 1: GND
PIN 2: +5V
PIN 3: SDA - A4에 연결
PIN 4: SCL - A5에 연결
 연결이 완료 되면 위 스케치 코드를 다시 한 번 업로드한다.
 드디어 "Hello, World"를 출력하였다. 아두이노IDE의 특성인지는 잘모르겠지만, 라이브러리라가 불안전한 것들이 존재한다. LiquidCrystal_I2C 라이브러리에 여러가지 기능을 추가해 놓은 것들이 있는데, 이는 라이브러리 추가가 안될 수 있으니 가급적이면 위 링크에 있는 라이브러리를 사용하기 바란다.

 다른 프로그램들은 회선이 정성적으로 연결되는 순간 작동해 정상여부를 바로 판단할 수 있지만, 이번 LCD프로그램은 초기화 작업이 존재하는 관계로 회로를 변경하였다면 업로드를 다시 한번 실행해야한다.

인텔 갈릴레오2 CdS광센서를 이용한 LED 밝기 조정하기

 갈릴레오2와 빛을 감지하는 CdS광센서를 이용해서 LED의 밝기를 조절하는 회로를 만들어보자.
Fade : https://communities.intel.com/docs/DOC-22429준비물 : 갈릴레오2, 브레드보드, 연결선, LED, CdS 광센서, 10K 저항, 1K 저항
스케치 파일 : 파일 -> 예제 -> 01. Basics -> Fading
 스케치 코드
const int InSensor = A5;  // 센서는 아날로그5번 핀에 연결
const int OutledPin = 11; // LED는 11번 PWM에 연결
int InSensorValue;
int voltage;
int OutledValue;
void setup()
{
  Serial.begin(9600); // 시리얼통신 시작.
}
void loop()
{
  InSensorValue = analogRead(InSensor);      // 아날로그 입력 5번 핀의 값을 읽어 sensorValue에 저장
  voltage  = InSensorValue * (5.0 / 1023.0);
  OutledValue = 255 - InSensorValue * (255 / 1023.0);
  analogWrite(OutledPin, OutledValue);       // 11 PWM 출력
  Serial.print("INPUT Analog Value: ");
  Serial.print(InSensorValue);        // sensorValue 값을 시리얼 모니터에 표시 (0 ~ 1023)
  Serial.print(" = ");
  Serial.print(voltage);            // 전압으로 변환된 값을 시리얼 모니터에 표시 (0 ~ 5 V);
  Serial.print("V ===> OUTPUT LED: ");
  Serial.println(OutledValue);
  delay(50);                         // 50밀리 초 동안 정지
}
 기본 회로도
 기본 예제에서는 입력값을 이용해서 밝기를 조정했는데, 필자가 변형한 위의 회로도에서 광센서를 A5번 PWD에 연결하는 부분이 추가되었다. Fritzing(링크)를 이용하면 쉽게 회로도를 직접 그릴수 있다.

 간단히 CdS광센서에 대해서 알아보자.
 CdS광센서는 빛을 감지하여, 밝은 빛에서는 저항값이 작아지고 어우둔 빛에서는 저항값이 커진다. 이것를 이용해 주변이 밝으면 LED를 희미하게 켜고, 주변이 어두우면 LED를 밝게 하는 회로를 만들려고 한다. 
CdS 값 : 가장 밝은 빛 = 0, 가장 어두운 빛 = 1023
 스케치 코드 분석
 아날로그 5번(A5)핀의 입력값을 읽어 PWD로 출력하여 LED 밝기를 조절한다. 
analogWrite(PWD출력핀번호, PWD출력값);
 PWD출력값은 0 ~ 255 값을 가진다. 갈릴레오 보드의 디지털핀 번호 앞에 ~ 표시가 있는 3, 5, 6, 9, 10, 11의 6개만이 PWD값을 출력 할 수 있다. 

 회로 만들기
 5V와 GND를 기판에 연결한다.
 저항과 Cds광센서를 연결한다.
 CdS광센서의 한쪽을 A5와 연결한다.
 출력부분에 사용할 저항과 LED를 배치한다.
 출력부분인 PWD ~11번을 LED와 연결한다.
 아두이노 IDE에서 위 스크치 코드를 업로드(Ctrl+U)하고 아래의 시리얼 모니터를 켠다. LED를 연결하는 순간 불이 들어오는 것을 알 수 있다.


인텔 갈릴레오2 가변저항을 이용한 LED 밝기 조정하기

 인텔 갈릴레오와 가변저항을 이용해서 아날로그 입력값을 읽어 LED 밝기를 조절하는 회로를 만들어보자. LED대신에 모터 등을 연결하여 속도를 조절 할 수도 있다.
AnalogInOutSerial : https://communities.intel.com/docs/DOC-22422
준비물 : 10K옴 가변저항, 브레드보드, 연결전선
기본 스케치 파일 : 파일 -> 예제 -> 03. Analog -> AnalogInOutSerial
 스케치 코드
/*
  Analog input, analog output, serial output

 Reads an analog input pin, maps the result to a range from 0 to 255
 and uses the result to set the pulsewidth modulation (PWM) of an output pin.
 Also prints the results to the serial monitor.

 The circuit:
 * potentiometer connected to analog pin 0.
   Center pin of the potentiometer goes to the analog pin.
   side pins of the potentiometer go to +5V and ground
 * LED connected from digital pin 9 to ground

 created 29 Dec. 2008
 modified 9 Apr 2012
 by Tom Igoe

 This example code is in the public domain.

 */
// These constants won't change.  They're used to give names
// to the pins used:
const int analogInPin = A0;  // 아날로그 입력
const int analogOutPin = 9; // LDE가 연결될 아날로그 출력
int sensorValue = 0;        // value read from the pot
int outputValue = 0;        // value output to the PWM (analog out)
void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(9600);
}
void loop() {
  sensorValue = analogRead(analogInPin);            // 아날로그 입력값을 읽는다.
   // 읽은 아날로그 값을 map함수를 이용해서 0~1023 값을 0~255 값을 변환한다.
  outputValue = map(sensorValue, 0, 1023, 0, 255);

  analogWrite(analogOutPin, outputValue);           // 아날로그 출력을 한다.

  Serial.print("sensor = " );                                     //시리얼 모니터에 출력
  Serial.print(sensorValue);    
  Serial.print("\t output = ");    
  Serial.println(outputValue);

  delay(2);                                                            // 다음 입력을 위해 2milesecond 대기
}
 기본 회로도
 스케치 코드 분석
analogWrite는 2개의 인자값을 가지는데, 다음과 같은 형태로 사용할 수 있다.
analogWrite(출력 아날로그핀, 출력값) 
map 함수는 총 4개의 인자 값을 가지는데, 입력된 값의 범위를 A범위에서 B범위로 변경한다.
map(값, 기존범위시작값, 기존범위종료값, 변환범위시작값, 변환범위종료값)
 1번 아날로그 입력으로 들어온 가변저항의 값을 읽어온다. 가변저항의 범위는 0에서 1023이기에 map함수를 이용해서 코드 값을 PWM의 범위값인 0~255 값으로 변경한다. 변경된 값을 PWM으로 내보낸다. 

 회로 만들기
 5V출력과 GND를 기판에 연결한다. 그리고 가변저항을 적절한 위치에 꼽는다.
 가변저항은 +,-가 없고 다만 가운데 부분과 옆쪽의 구분만 있다. 옆다리 하나를 +극에 연결하고 다른 하나를 - 극에 연결한다.
 그리고 가운데 다리를 A0 입력단자에 연결한다.
 LED를 위치 시킨다.
LED의 긴다리 쪽을 PWD의 ~9에 연결하고 짧은 다리를 GND(-)에 연결한다.
 가변저항을 좌우로 회전시키면 LED에 불이 드어오는것을 확인할 수 있다. 시리얼 모니터로도 가변저항값이 어떻게 변화되는지 확인할 수 있다.