이전 포스트에서 소개했던 모바일 프로세싱을 실제 사용해 보도록 하겠다.

노키아 6210S를 구입한 사람들도 많아졌고 최근 노키아 5800 Music edition이 판매되기 시작하여 Symbian S60을 사용하는 사람들이 많이 늘어났기 때문에 모바일 프로세싱을 실제 폰에서 사용해 보기가 매우 편해졌다.

모바일 프로세싱을 설치해 주려면 Java, Java Wireless Toolkit for CLDC (WTK, 현재 최신버젼은 2.5.2_01이다), mobile processing까지 총 3개의 파일이 필요하다.
JavaWTK는 sun의 웹 사이트에서 다운받을 수 있고 mobile processing은 모바일 프로세싱 홈페이지에서 다운받으면 된다.

파일을 다 다운받았으면 먼저 java를 설치해준다. 이미 설치되어 있는 경우 이 단계는 건너뛰면 된다. 그 다음 WTK를 설치해 준다. 그리고 WTK가 설치된 위치를 기록해 놓는다. (디폴트는 c:\wtk2.5.2_01 이다.)
마지막으로 다운받은 mobile processing 파일의 압축을 풀어준다. 모바일 프로세싱은 별도의 설치 과정이 필요없이 그냥 압축을 풀어주면 된다.


압축을 풀면 위와 같은 파일이 보인다. 여기서 'mobile'을 더블클릭해서 실행해 주면 된다. (별도의 설치과정이 없기때문에 시작메뉴에도 자동으로 등록되지 않는다.)


모바일 프로세싱을 실행시킨 화면이다. 프로세싱 화면과 거의 동일하다. 다만 모바일 프로세싱을 사용하려면 먼저 환경설정을 해 줘야 한다.


File->Preferences 를 선택한다.


Preferences 창이 열리면 Mobile 탭을 선택한다.


이 화면에서 아까 설치한 WTK의 위치를 지정해 줘야 한다. 그리고 자신이 사용할 폰의 CLDC와 MIDP 버젼을 지정해준다. 최근 1~2년 사이에 나온 폰들이면 거의 다 CLDC 1.1과 MIDP 2.0을 지원한다. 자세한 내용은 각 폰의 technical specification을 참조하면 된다.

여기까지 하면 모든 설정이 끝나고 모바일 프로세싱을 사용할 수 있다.


테스트를 위해 File->Example에서 예제를 하나 선택해 보겠다. 여기서는 keypad를 선택했다.


화면 위쪽의 아이콘들 중에 가장 왼쪽의 삼각형 버튼을 누르면 프로그램을 컴파일하고 폰 에뮬레이터에서 실행을 해 준다.


실행을 시키면 이런 폰 에뮬레이터 창이 뜨고 프로그램이 로드된 걸 볼 수 있다. 로드된 프로그램을 실행하려면 오른쪽 소프트키(화면 오른쪽 아래 Launch 표시 바로 아래쪽의 '.' 버튼)를 눌러주면 된다.


'keypad' 프로그램이 실행된 화면이다. 프로그램을 종료하려면 왼쪽 소프트키를 눌러주면 된다.


'keypad' 프로그램은 숫자키패드를 누르면 그에 해당하는 수직막대기를 화면에 그려주는 프로그램이다. 몇개의 숫자키를 눌렀을 때 화면이다.

이 런 식으로 작성한 프로그램을 실제 폰이 없는 경우에도 컴퓨터 상에서 테스트가 가능하다. 디버깅이 다 끝났으면 만들어 진 프로그램을 직접 폰에서 실행시킬수도 있다.


File->Export MIDlet 을 선택하면 이 소스코드를 폰에서 실행할 수 있는 JAVA MIDlet으로 만들어준다.


위에서 Export MIDlet을 선택하면 keypad.jar 파일을 만들고 탐색기에서 그 파일이 들어있는 폴더를 자동으로 열어준다.


이제 만들어 진 파일을 폰으로 넣어주기만 하면 된다. MicroSD카드에 복사해서 옮겨도 되지만 여기서는 블루투스를 이용해 옮겨보겠다. (단 폰은 미리 컴퓨터와 페어링 되어 있어야 한다.) 'keypad.jar'파일을 선택한 다음 마우스 오른쪽 클릭해서 Send to->Bluetooth device를 선택한다.


Bluetooth File Transfer 창이 열리고 블루투스 디바이스들을 보여준다. 원하는 폰을 선택해주면 된다.



이렇게 전송이 끝났으면 폰에서 받은 프로그램을 설치할거냐고 물어본다. 설치해 준 다음 프로그램을 실행시키면 위의 시뮬레이터에서 본 것과 동일하게 움직이는걸 볼 수 있을 것이다.

모바일 프로세싱은 이전에 프로세싱이나 아뒤노를 사용해 본 사람이라면 거의 동일한 구조와 문법을 사용하기 때문에 배우기 쉽고 폰 프로그래밍을 할 때 단말기별로 신경써야 하는 것들을 알아서 처리해주기 때문에 매우 편리하다.

또한 단순히 키패드 입력, 화면 제어뿐 아니고 폰의 블루투스 통신도 프로그래밍이 가능하기 때문에 임베디드쪽으로도 다양하게 응용이 가능하다. 아뒤노에 블루투스 모듈을 붙이고 모바일 프로세싱으로 폰과 통신을 하게 해 주면 폰을 아뒤노의 입출력 디바이스 또는 리모컨으로 이용할 수도 있기 때문에 다양한 응용이 가능하다.
신고
Posted by nautes

최근들어 피지컬 컴퓨팅이라는 분야에 대한 관심이 높아지면서 arduino 뿐 아니고 processing도 많이들 사용하고 있다. Processing은 주로 컴퓨터에서 독립적으로 사용하거나 외부 하드웨어와 연동하는 경우는 processing+arduino의 조합으로 사용하는 경우가 많다.



그에 비해 휴대폰에서 사용할 수 있는 mobile processing은 국내 휴대폰에서 사용할수가 없어서인지 아직까지 사용하는 사람들을 별로 본 적이 없는거 같다. 해외용으로 출시된 LG, 삼성 휴대폰에는 잘 돌아가지만 국내 출시 휴대폰들은 통신사와 제조사의 여러가지 제한때문에 mobile processing을 사용할 수 있는 모델이 거의 없었다. 하지만 최근 출시된 노키아 6210의 경우 심비안 S60 플랫폼을 사용하기 때문에 mobile processing을 사용할 수 있게 되었다. Mobile processing은 현재 Mac OS X와 윈도우용이 있다.

아래가 삼성, LG모델중에 mobile processing을 사용할 수 있는 모델들인데 대부분 수출모델로 알고 있다. 혹시 자신의 휴대폰에서 실행해보고 되는 경우 알려주면 국내 휴대폰 모델들 리스트에 업데이트 해서 목록을 만들어 봤으면 한다.

LG와 삼성의 지원되는 모델들


기본적인 문법은 processing과 거의 동일하고 mobile processing에서 스케치 파일을 만들어 컴퓨터상의 에뮬레이터에서 실행해 볼 수 있고 컴파일해서 만들어 진 MIDlet을 microSD 카드에 복사해서 휴대폰에서 어플리케이션으로 실행할 수 있다. MIDlet은 J2ME플랫폼의 CLDC 1.0, MIDP 1.0에서 실행된다.

기본적으로 휴대폰 전화기능, 이미지, 사운드, 비디오, 네트웍, XML, Messaging, 블루투스등을 제어하기 위한 라이브러리가 제공된다. 또한 3rd party가 추가한 3D 그래픽, QR code, 웹, UI, Location 서비스 등등 다양한 라이브러리가 존재한다.

Arduino 에 블루투스 모듈을 붙여 휴대폰과 블투로 통신하게 할 수도 있고 아니면 휴대폰의 시리얼 포트와 arduino의 시리얼 포트로 통신을 하게 해 줄 수도 있다. 이 경우 arduino에 별도의 LCD나 키패드를 붙이지 않아도 훌륭한 입출력 인터페이스를 만들어 줄 수 있다. 또한 휴대폰의 다양한 장치들을  arduino의 센서(디지털 나침판, GPS, 조도센서, 가속도센서 등등)로 사용하거나 휴대폰을 arduino의 네트웍 인터페이스(무선랜, 블루투스, 휴대폰 망)로 사용할수도 있게 된다. 또한 전화를 걸고 받기, 문자메세지 보내기 등등도 제어할 수 있기 때문에 센서 입력에 따라 문자를 보내거나 전화를 걸도록 할 수도 있다.


인터넷에서 발견한 mobile processing과 arduino를 시리얼로 연결한 예제 프로젝트이다. 그림에서처럼 arduino와 휴대폰은 시리얼로 연결하고 휴대폰은 휴대폰망의 무선데이터 전송을 통해 컴퓨터와 http로 연결해서 컴퓨터에서 arduino에 연결되어 있는 LED의 색깔을 제어하는 예제이다.


")//]]>

최 근 노키아 6210이 매우 싼 가격(약 6개월 약정인 경우 1000원정도)에 풀렸다고 알고 있다. Arduino를 사용하는 사람들이라면 이번 기회에 mobile processing에도 관심을 가져 보는것도 나쁘지 않을 것이다. Arduino만으로 하기 힘든 다양한 아이디어의 응용 프로젝트가 가능해진다.
신고
Posted by nautes

임베디드 보드에서 저항 타입의 센서를 사용하는 방법에 대해 알아보기로 하겠다.


위의 사진은 온 도센서이다. 온도의 변화에 따라 저항값이 달라진다.

센서의 값을 읽으려면 기본적으로 다음과 같은 회로를 사용하면 된다.


위의 그림에 있는 공식과 같이 두개의 저항값에 따라 출력되는 전압이 달라지게 된다.


출력 전압은 위의 예제와 같이 두 저항값의 비율에 따라 결정된다.


위의 그림과 같이 하나의 저항값(R1)은 고정시켜 놓고 다른 저항(R2) 대신 저항 타입의 센서를 연결해 주면 온도의 변화에 따라 저항값이 변하고 결국 출력 전압이 따라 변하게 된다. 이 전압을 A/D 컨버터를 통해 읽어주면 된다.




센서의 온도의 변화에 따른 저항값의 변화표이다. 대략 -20도에서 125도 까지의 온도를 측정하고 싶다면 센서의 저항값은 100Kohm에서 0.33Kohm까지 변하게 된다.
이 센서를 위의 회로에 사용하려면 R1값을 결정해 줘야 한다.


R1의 값을 10 Kohm으로 했을 때 온도의 변화에 따른 출력전압의 변화를 계산한 것이다.


R1의 값을 1 Kohm으로 했을 때 온도의 변화에 따른 출력전압의 변화를 계산한 것이다.


동일한 정도의 온도변화에 대해 전압의 변화가 크고 리니어해야 온도를 읽는데 오차가 작아지고 정확하게 읽을 수 있다.
그러므로 위의 두개의 그래프에서 보듯이 주 사용환경이 -10~70도 사이라면 R1 저항으로 10 Kohm을 사용하는게 좋고 사용환경이 10~120도 사이라면 R1 저항으로 1 Kohm을 사용하는게 좋다.

오차를 최소화해서 정확하게 온도를 읽으려면 전압-온도 형태의 lookup table을 사용하면 되고 그 정도까지 정확할 필요가 없어 간단하게 하려면 저 구간에서는 온도-전압의 변화가 거의 리니어하기 때문에 간단한 수식으로 계산해도 된다.

R1이 1 Kohm인 경우 25도인 경우 전압이 4.545V, 125도인 경우 전압이 1.24V니까 직선의 기울기는 (1.24-4.545)/(125-25) = -0.033이 된다. 이 경우 Vo = -0.033T+5.365 라는 공식이 나오기 때문에 T = (5.365-Vo) / 0.033 이 된다. 즉 A/D컨버터의 전압값을 읽어 저 공식에 집어 넣으면 온도를 구할 수 있게 된다.

* 물론 좀 더 정확하게 하기 위해서는 calibration 과정을 거쳐줘야만 한다.

이 포스팅에서는 온도센서를 예로 들었지만 그 이외에도 환경의 변화에 따라 저항값이 변하는 타입의 센서(CDS photocell 등)는 모두 동일한 방식으로 사용하면 된다.
신고
Posted by nautes

얼마전에 만들었던 팬-틸트 유닛은 가위로도 자를 수 있는 얇은 알미늄판을 사용해서 구조적으로 튼튼하지 못했고 카메라등을 올려놓을 암(arm)의 길이가 짧아 90도밖에 틸트를 할 수 없는 문제가 있었다.

그래서 이번에는 문제점들을 모두 해결한 버젼 2 팬-틸트 유닛을 만들어 보았다.
설명을 쉽게 하기 위해 부품마다 이름을 붙여주었다.
팬, 틸트를 해야 하기 때문에 당연히 2개의 서보모터가 필요하다.

이번에는 충분한 두께의 철판을 사용하였다. 4개의 부품을 각각 붙여야 하는 부품에 맞춰 구멍을 뚫어 주었다.


P4위에 W1을 위의 사진과 같이 붙일 것이다. 다만 저렇게 먼저 고정시켜 버리면 W1을 S1에 고정시켜주는 볼트를 돌릴 수가 없게 된다.

그러므로 위의 사진과 같이 두개의 볼트를 먼저 W1에 끼워넣고 W1을 S1에 끼운 다음 볼트로 고정해 준다.

그 다음 W1위에 P4를 맞춰 올려놓고 넛트로 조여준다.

다음은 틸트 부분의 조립이다. P2, P3에 S2를 위의 그림과 같이 고정해주면 된다.

P2, P3를 나사로 고정시켜 주었다. 아래쪽 구멍도 고정해줘야 하는데 위쪽 2개만 해도 충분할거 같아 여기서는 그냥 놔두었다.

위에서 조림한 틸트 서보를 P4위에 올려준다. P2, P3의 구멍과 P4의 구멍을 일치시켜 나사로 고정한다.

W2를 S2에 끼워주고 나사로 고정한다.

W2에 P1을 올려 구멍을 일치시켜서 나사로 고정해 준다.


바로 위 2장의 사진이 완성된 팬-틸트 유닛을 각각 옆쪽과 앞쪽에서 본 모습이다.


최대한 앞, 뒤쪽으로 틸트 한 모습이다. 이번에는 암이 충분히 길기 때문에 서보나 다른 프레임에 걸리지 않고 180도를 움직일 수 있다.


이건 좌우로 최대로 팬 한 모습이다.

아뒤노에 연결해서 데모용으로 동작시켜 본 동영상이다. 상당히 빠르고 정확하게 움직여 준다.

* 조만간 이번에 제작한 팬-틸트 유닛 위에 웹캠이나 위 모트의 앞부분에 있는 적외선 추적 카메라를 붙여 볼 생각이다.
신고
Posted by nautes



아뒤노가 임베디드 환경을 처음 접하는 사람들에게 매우 쉬운 환경임에 틀림없지만 조금만 복잡한 작업을 하려고만 하면 제약사항이 꽤 많아진다.
특히 가장 아쉬운게 attachInterrupt()를 통해서 외부 인터럽트 2개(Arduino Mega에서는 6개로 늘어났다)만 사용할 수 있다는 점이다.

단순하게 센서값을 읽어서 그 값에 따라 LED나 모터를 구동하는건 별 문제가 없지만 동시에 여러개의 입력을 기다리면서 그와 별도로 작업을 처리하거나 해야 한다면 타이머 인터럽트는 거의 필수적이 되어 버린다.

물론 atmega의 타이머 관련 레지스터(TCCR2, ASSR 등등)를 직접 제어하면 인터럽트를 사용할 수 있지만 이 경우 아뒤노의 장점(?)이 사라져 버린다.
그 래서 아뒤노 라이브러리 섹션의 contributed libraries (아뒤노 사용자들이 만든 라이브러리들)에 보면 MsTimer2가 있다. Atmega의 timer 2를 사용해서 ms 단위의 해상도로 타이머 인터럽트를 걸어줄 수 있다.
현재 Atmega 1280, 328, 48/88/168, 128/8을 사용한 arduino 및 arduino clone에서 사용할 수 있다.

이 라이브러리를 사용하려면 MsTimer2를 다운받아 압축을 해제한 다음 만들어 진 폴더를 아뒤노가 설치된 폴더 내의 hardware/libraries 에 복사해 주면 그것으로 설치가 끝난다. 그리고 스케치북에 #include <MsTimer2.h> 를 넣어주면 된다.

set, start, stop 이렇게 단 3개의 메쏘드만 있어 사용법은 매우 쉽다.
먼저 MsTimer2::set(unsigned long ms, void (*f)()) 을 사용해서 타이머를 설정해 준다. 이 함수에는 두개의 파라메터가 필요하다. 첫번째는 타이머 시간(ms 단위, 즉 여기에 1000을 넣어주면 1초마다 한번씩 타이머 인터럽트가 발생한다.), 두번째는 인터럽트 서비스 루틴(인터럽트가 발생했을 때 호출할 함수) 이름이다.
set()을 이용해서 타이머를 설정했으면 MsTimer2::start() 를 호출해주면 타이머가 동작하기 시작해 정해진 시간마다 인터럽트 서비스 루틴이 실행된다.
타이머 동작을 멈추려면 MsTimer2::stop()을 호출해주면 된다.

타이머 인터럽트가 왜 유용한가는 아래의 예제를 보면 잘 알수있다.
0.5초마다 LED를 깜빡이게 하는 프로그램이다.

boolean output = HIGH;
void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
digitalWrite(13, output);
output = !output;
delay(500);
}
---------------------------------------
// Toggle LED on pin 13 each second
#include <MsTimer2.h>

void flash() {
static boolean output = HIGH;

digitalWrite(13, output);
output = !output;
}

void setup() {
pinMode(13, OUTPUT);

MsTimer2::set(500, flash); // 500ms period
MsTimer2::start();
}

void loop() {
}

둘 다 같은 동작을 한다. 그런데 위의 경우와 같이 타이머 인터럽트를 사용하지 않은 경우 0.5초동안 다른 일을 하지 못하고 단지 기다려야 한다. 그에 비해 아래쪽 프로그램의 경우는 LED를 토글하는걸 인터럽트 서비스 루틴(여기서는 flash())에서 처리해주기 때문에 따로 0.5초를 기다릴 필요가 없이 그 동안 다른 일을 할 수 있게 된다. (loop() 함수에서 아무일도 하지 않는걸 확인할 수 있다. 여기에 다른 작업을 넣어주면 된다.)

예를 들어 동작중에 시리얼 포트를 통해 시간을 입력받아 LED가 깜빡이는 간격을 조정하도록 만들려면 상당히 힘들어 지지만 아래쪽 프로그램의 경우 시리얼 포트를 통해 데이터를 입력받는 부분은 loop() 안에서 처리하게 하고 그 입력받은 값에 따라 타이머 설정만 바꿔주면 실제 깜빡이는건 타이머 인터럽트가 담당해 주기 때문에 매우 간단해진다.
신고
Posted by nautes

아이팟 터치/아이폰의 시리얼 포트를 사용할 수 있으면 다른 장비들과 연결해서 상당히 재미있는 일들을 많이 할 수 있게 된다.
하지만 시중에서 아이팟용 시리얼 케이블을 팔고 있지 않기 때문에 직접 만들어 보았다.
아이팟 도킹 커넥터의 pinout은 pinouts.ru 에서 확인할 수 있다.

먼저 아이팟 30핀 도킹 커넥터 male 타입은 Devicemart에서 구입할 수 있었다. 구입해야 하는 부품명은 ipod-30p-conn-wire 으로 개당 2500원이다.

커넥터를 구입하면 내용물은 다음과 같다.



커넥터는 30핀인데 위의 사진에서 보는것처럼 서로 엇갈리게 배치되어 자세히 보지 않으면 핀 위치를 찾기가 좀 힘들게 되어 있다.


핀 배치를 좀 보기 쉽게 풀어 그려 본 것이다. 다리가 긴 핀과 짧은 핀이 있어서 다리가 긴 핀은 바깥쪽에 있고 짧은 핀은 안쪽에 배치되어 있다. 그리고 각각의 핀은 조금씩 위치가 어긋나게 배치되어 있다.
이 핀들이 다 있으면 납땜질 하기 불편하기 때문에 필요없는 핀들은 다 뽑아버린다. 롱노우즈 플라이어로 잡아 땡기면 쉽게 빠져나온다. 단 한번 빠져나오면 다시 끼기 힘들기 때문에 뽑아내야 하는 핀의 위치를 확실하게 확인한 다음에 빼기 바란다.

시리얼 케이블에 필요한 핀들이다. 이 중 1,2,15,16,29,30은 모두 GND로 아이팟 내부에서 다 전기적으로 연결되어 있다. 그러므로 다 연결할 필요는 없다.


이 핀들만 남겨놓으면 된다. 15, 16도 땜질에 방해가 되기 쉬우므로 빼 버려도 관계 없다.

배선 연결은 위와 같다. 실제 시리얼 포트에 연결하는건 Tx, Rx, GND 3선이면 된다. 물론 아이팟에 연결하는 장치의 전력소모가 크지 않은 경우 3.3V에 연결해서 아이팟에서 전원을 공급받을수도 있다. (단 이 경우 아이팟 전력소모가 약간이나마 증가하는걸 염두에 둬야 한다.)
또한 Tx, Rx도 3.3V 레벨의 신호이기 때문에 RS-232에 연결하려면 MAX232, 233같은 레벨 컨버터가 필요하다. 저 2개의 저항은 칩 저항을 사용하면 커넥터 케이스 속에 집어넣을 수 있겠지만 현재 가지고 있는 칩 저항이 없기 때문에 이번에는 커넥터에서 Tx, Rx, Serial GND, GND, 3.3V 이렇게 5개의 선을 뽑아내었다.

Grey - GND
Red - Tx
Green - Rx
Orange - +3.3V
Black - Serial GND

단선을 방지하기 위해 열 수축 튜브로 고정시켜 주었다.

커넥터를 금속 케이스에 집어 넣는다.

집어넣은 모양은 다음과 같다.

또 하나의 금속판을 연결시킨다. 여기서 아래 그림과 같이 커넥터의 홈에 맞게 밀어 넣어줘야 한다.

제대로 집어 넣었으면 아래와 같이 양쪽의 걸쇄가 보인다.

플라스틱 케이스에도 위쪽과 아래쪽이 있다.

아래쪽 케이스에 조립된 커넥터를 집어넣는다.

집어넣은 모습은 다음과 같다.

커넥터를 분리할 때 사용하는 양쪽 버튼을 집어 넣는다. 이 때 버튼도 방향이 있으니까 주의해야 한다.

아래 사진처럼 버튼을 잘 보면 홈이 파여있는 쪽이 앞쪽이다.

버튼까지 다 집어넣은 모습이다.

이제 위쪽 케이스를 아래쪽 케이스에 맞춰서 끼워넣기만 하면 된다.

여기서는 프로토타입 보드에 꼽아 아뒤노와 연결하여 테스트하기 위해 반대쪽에도 헤더핀들을 연결시켜 놓았다.

신고
Posted by nautes

일명 Poorman's version으로 구현해 본 아뒤노를 위한 마이크로SD(Transflash) 인터페이스이다.

마이크로SD 소켓을 구입하기도 힘들고 구한다 해도 SMD 타입의 좁은 피치를 가지고 있기 때문에 PCB를 만들지 않으면 신호선을 연결하기가 힘들다.
그래서 찾아낸 방법이 마이크로SD를 구입할 때 같이 껴 주는 MicroSD to SD adapter를 소켓 대용으로 이용하는 것이다.
SD의 경우 9개의 핀이 있지만 SPI모드로 동작하는 경우는 7개 핀만 사용한다. 각 핀의 배치는 다음과 같다. 이 7개의 동박면에 직접 신호선을 땜질하는 것이다.

여기서 주의할 점은 SD는 3.3V 디바이스라는 점이다. Vdd뿐 아니고 다른 핀들도 3.3V레벨의 신호를
사용해야 한다.

MicroSD(Transflash)의 핀 배치는 다음과 같다.


Arduino호환보드중에 전원으로 3.3V를 사용하는 경우는 각 핀을 Arduino SPI에 직접 연결시켜 주면 된다. 하지만 대부분의 Arduino 보드들은 5V를 사용하기 때문에 신호 레벨을 바꿔 줘야만 한다.

위 의 회로를 사용해서 Arduino와 연결해주면 된다. 단 위의 회로에서 왼쪽에 uSD to SD adapter는 라이브러리를 따로 그리기 귀찮아서 그냥 MicroSD 소켓을 사용해 버려서 핀 번호가 좀 다르다. 위의 사진을 보고 같은 이름의 핀을 연결시켜 주면 된다. ^^;;;

회로 부분만 만능기판에 만들어 본 것이다.

최종적으로 MicroSD adapter의 핀에 납땜질을 해서 신호선을 뽑아내어 만능기판 회로에 연결하고 아답터를 접착제나 실리콘을 사용하여 기판의 아래쪽에 붙여주면 된다.

이 렇게 구성하여 arduino에 연결하면 MicroSD를 FAT16으로 포맷하여 파일시스템으로 사용할 수 있게 된다. MicroSD가격이 많이 저렴해 졌기 때문에 아주 적은 비용으로 대용량의 파일시스템을 추가할 수 있기 때문에 장시간의 데이터 로그가 필요한 경우에 매우 유용하게 사용할 수 있다.

신고
Posted by nautes

아래의 사진에 있는 WIZNet의 WIZ810MJ을 사용해서 Arduino를 이더넷에 연결시켜 보았다.

이 모듈에 사용된 WIZNet의 이더넷 컨트롤러 Arduino Ethernet libaray에서 기본 지원하기 때문에 매우 손쉽게 사용할 수 있다. 한국에서는 제조사의 온라인샵인 http://www.ewiznet.co.kr/ 에서 22,866원(그냥 23000원으로 하지 끝에가 866원은 뭔지 모르겠다.)에 구입할 수 있다.

다만 단점은 3.3V전원을 사용한다는 것과 커넥터가 일반적으로 사용하는 2.54mm 피치가 아니고 2mm를 사용하기 때문에 PCB를 뜨지 않으면 일반적으로 구할 수 있는 만능기판에 들어가지가 않는다는 것이다.

이 모듈은 MCU data interface와 SPI인터페이스를 지원해 준다.

SPI인터페이스를 사용하는 경우는 저 핀들중에 아주 일부만 사용하면 되기 때문에 매우 편리하다.

아래의 그림이 핀 배치도인데 저 중에 빨간색으로 표시된 신호만 사용하면 된다. 특히 그 중에 SPI_EN은 SPI 모드를 사용할것이기 때문에 Vcc에 연결해 버리면 되고 리셋만 제외하면 나머지 필요한 신호를 모두 한쪽의 커넥터(JP1)에서 얻을 수 있다. 리셋은 전원이 인가될 때 자동리셋이 되기 때문에 없어도 되긴 하지만 혹시 몰라 조그마한 푸쉬버튼을 연결해 모듈에 접착시켜 버렸다.

그 덕에 집에 가지고 있던 2mm 피치의 14핀 커넥터를 사용해 JP1의 앞쪽만 연결해서 별도의 추가 비용 없이 손쉽게 연결할 수 있었다.

 Arduino WIZ810MJ
 D13 SCLK (7)
 D12 MISO (12)
 D11 MOSI (9)
 D10 SCS (10)

매우 손쉽게 인터넷을 사용할 수 있는데 단점은 DHCP를 기본적으로 지원하지 않기 때문에 IP address를 수동으로 지정해 줘야 하는 것이다.

일단 arduino의 samples중에 ethernet에 속해있는 아무거나 선택해서 다운로드 하고 컴퓨터에서 ping을 날려 보았다.


일단 ip address만 할당되고 나면 arduino에 어떤 프로그램이 실행되는가 관계 없이 모듈이 ping에 대한 응답을 해 준다.


예제중에 WebServer를 실행하고 컴퓨터의 웹 브라우져에서 접속한 화면이다. 이 예제는 arduino의 아날로그 입력을 브라우져에서 볼 수 있게 해 준다.

모듈은 기본적으로 3.3V에서 동작하게 되어 있지만 5V I/O tolerant 하다. 그래서 이번에는 전원도 5V를 넣고 실험을 해 봤는데 별 문제는 없었지만 모듈이 조금 많이 뜨거워 진 것 같아서 3.3V 레귤레이터를 사용해 줘야겠다.

신고
Posted by nautes

이전 포스트에서 arduino에 PD2437을 연결해서 동작시켜 본 걸 확장한 것이다.

윗줄에 4개, 아랫줄에 4개, 총 8개의 PD2437을 사용하여 16x2 디스플레이를 설계하였다. 기본적인 부분은 이전 회로와 차이가 없지만 신호의 팬아웃(fan-out)을 고려하여 74LS245 버퍼를 사용해 주었고 8개의 PD2437중 하나를 선택하기 위해 3-to-8 decoder인 74LS138을 사용하였다.

물론 저렴한 LCD방식의 디스플레이 모듈도 있지만 그에 비해 글자 크기도 크고 백라이트 없이 자체발광을 하기 때문에 어두운 곳에서도 훨씬 더 확실하게 눈에 띈다. 약 2~3미터 정도 거리에서도 표시 된 내용을 쉽게 확인할 수 있다.

Arduino의 PD2~PD12까지 연결을 해 주면 된다. 시리얼 포트를 통해 표시될 문자를 전송하면 되도록 소프트웨어를 작성하였다. 입력받은 문자를 바로 출력하게 되어 있고 '\'를 escape sequence로 사용한다.

 Input
 Description
 \\
\
 \C
 Clear entire display
 \F
 Flash entire display
 \f
 Flash next one character
 \B#
 Brightness control
  0 - 25%
  1 - 50%
  2 - 75%
  3 - 100%
 \G##
 Change cursor location
  ## <= 00~1F
  (00~0F: upper line, 10~1F: lower line)


신고
Posted by nautes

최근에는 대부분의 주변기기가 USB 인터페이스를 이용해서 다양한 종류의 USB 장치가 컴퓨터에 연결되는 경우가 많다. 그런데 항상 아답터를 꼽아놓으면 사용하지 않는 경우에도 전력을 소모하게 되고 그렇다고 매번 사용할 때 마다 플러그를 뽑는것도 귀찮다.

그래서 컴퓨터의 USB포트에서 나오는 전원을 일종의 스위치로 이용해서 컴퓨터가 켜지면 자동으로 USB 장치의 전원을 켜 주고 컴퓨터가 꺼지면 USB 장치의 전원도 같이 꺼지는 회로를 생각해 보았다.

바로 이전의 포스트에서 만든 110/220V 전원 스위칭 모듈(이것 역시 저렴한 비용으로 간단하게 만들 수 있다.)을 사용하면 별도의 추가 회로 없이 USB 케이블에 커넥터만 만들어 주는 것만으로 쉽게 해결된다. 물론 아무 소프트웨어도 필요없고 단순히 USB 포트의 5V 전원만 사용하기 때문에 (너무나 당연한것이지만) OS의 종류나 컴퓨터 기종에 아무 상관없이 모든 경우에 사용할 수 있다. :)


110/220V 전원 스위칭 모듈을 만들었다면 케이블 제작에 필요한 부품은 다음과 같다.

- USB type A male connector

- USB type A female connector

- 2 pin connector

USB 커넥터의 핀 순서를 먼저 정확하게 확인해준다.

Male connector의 핀 순서이다.

Female connector의 핀 순서이다.

케이블은 D+, D- 신호는 그냥 pass-through하고 Vcc와 GND만 전원 스위치 모듈의 입력으로 넣어주면 된다.



이렇게 만든 케이블의 오른쪽 커넥터는 컴퓨터에, 왼쪽 커넥터에 USB장비 케이블을 연결하고 2 pin 커넥터를 전원 스위치 모듈의 입력에 연결해 주면 된다. 그리고 해당 USB장비의 아답터를 전원 스위치 모듈에 꼽아주면 된다.

위의 그림처럼 연결되어 있는 것을 아래와 같이 연결해주면 된다.

그리고 어짜피 컴퓨터 전원을 사용하는 장비는 이 커넥터가 필요없고 외부아답터를 사용하는 장비는 USB포트에서 많은 전류를 끌어쓰지 않기 때문에 전원 스위치 모듈의 opto-coupler가 약간의 전류를 먹는 정도는 문제가 되지 않는다.

* 컴퓨터의 BIOS 셋팅에서 컴퓨터 전원이 꺼져도 USB포트로 전류를 흐르게 할 수 있는 옵션이 있는데 이 옵션이 선택되어 있으면 이 회로는 동작을 하지 않는다. 즉, 컴퓨터가 꺼져도 USB장비의 전원은 꺼지지 않게 된다.

신고
Posted by nautes

이전버튼 1 2 3 이전버튼