차에 AUX 단자를 추가하긴했지만, 입력은 1개.

내비게이션과 iPHONE의 블루투스단말 입력 두개를 받으려면 2개의 입력을 하나로 보내주는 게 필요했다. 그렇다고 믹서를 사서 붙이기는 배보다 배꼽이 더 큰 상황.

간단히 1K옴 짜리 저항 4개와 스테레오 잭을 이용해서 두개의 입력을 하나로 묶어주는 걸 만들었다.
각각의 오른쪽/왼쪽 선에 저항을 하나씩 붙여주고 그걸 묶어서 하나로 보내주면 된다.



사용자 삽입 이미지


만능기판에 대충 조립해준 뒤 잘 잘라내 수축 케이블로 잘 싸줬다.

이제 차에서 iPHONE의 블루투스 입력과 내비 소리를 모두 잘 들을 수 있게 됐다.



Creative Commons License
2011/04/06 20:22 2011/04/06 20:22
사용자 삽입 이미지


물티슈통에 물을 담고, 잘 찢어지지 않는 성질의 물티슈를 심지로 물을 빨아들이게 2-3장 끼워주고, USB전력으로 팬을 조용히 돌아가게 연결해주면 끝.

방이 너무 건조해서 하나 만들어봤음.
Creative Commons License
2011/04/02 18:08 2011/04/02 18:08
LD트레이가 잘 나오지 않고, 판이 튈 때가 있던 LDP.

날잡아 한번 청소해야지 했다가도 못했던 걸 밤새 뜯어 청소했군요.
구동부 기어를 하나하나 다 뽑고 그리스 닦고, 새로 그리스칠해주고 재조립했습니다.

렌즈도 알콜로 살짝 닦아줬고요.

일단 LD트레이 문제는 사라졌는데... LD튀는 문제는 어떨지 계속 테스트해봐야겠네요.

사용자 삽입 이미지

Creative Commons License
2011/03/26 04:25 2011/03/26 04:25

콘솔용 명령으로 메모리 할당 테스트


dt--;NSLog(@"dt:-1:%d",dt);

// NSLog(@"dt:%d", [imgView retainCount]);  <- 정확하게는 요쪽.

사용자 삽입 이미지
그렇구만.

아, 선언할 때 잡아준 것도 해제해줘야하는구나.

Creative Commons License
2011/02/25 10:35 2011/02/25 10:35
컴플리트 MIDI 북을 보고 MIDI데이터 규격에 맞춰
아날로그 입력을 노트온벨러서티로 출력하도록 스케치를 작성했다.
아날로그 0번에 압력 감지 센서를 달고 그 값을 건반 누른 세기로 바꿔주면 끝나는 간단한 구조다

압력 감지 센서를 이용했지만, 가속도 센서를 이용하면 탬버린 등을 만들 수도 있을 것이며
다양한 센서를 이용해서 여러가지 음악 입력장치를 만들 수 있다.



----
// Variables: 
byte note = 35;            // 재생될 MIDI NOTE값
int AnalogValue = 0;      // 아날로그 입력값
byte noteOnVel = 0;        // 노트온벨러서티 값
boolean lastPlay = 0;     // 눌린상태 체크

void setup() {
   //  Set MIDI baud rate:
   Serial.begin(31250);
}

void loop() {

     AnalogValue = analogRead(0);  // 아날로그 입력 체크
     noteOnVel = AnalogValue/8;    // 1024->128로 변환

   if (noteOnVel > 0){    // 눌린 값이 있나?
    if(lastPlay==0){      // 기존에 눌리지 않았다면 
     noteOn(0x90, note, noteOnVel); // 0채널 note값에 눌린값의 세기로 출력
     lastPlay = 1;          // 이미 눌렸다
    }
  } else {  // 손을 뗐으면 다시 리셋
    lastPlay = 0;
  

  }

  delay(5); //반응속도에 따라 값 조정 할 것.

}

//  plays a MIDI note.  Doesn't check to see that
//  cmd is greater than 127, or that data values are  less than 127:
void noteOn(byte cmd, byte data1, byte data2) {
   Serial.print(cmd, BYTE);
   Serial.print(data1, BYTE);
   Serial.print(data2, BYTE);
}
흠 여러 조건을 넣으려고 if를 중복으로 썼는데, 하나 밖에 없으니 한 줄로 줄여도 되겠다.
그러고 보니 입력 종료 알리는 커맨드를 안 넣어줬네. 중복으로 놔둬야겠다.
Creative Commons License
2010/09/07 00:04 2010/09/07 00:04
아두이노를 이용해서 MIDI기기를 컨트롤 하려고 만든 것이다.
압력 센서를 이용 입력 받은 값을 미디로 전달해서 드럼 머신등으로 활용할 수 있다.

사용자 삽입 이미지


사용자 삽입 이미지
Creative Commons License
2010/09/05 23:33 2010/09/05 23:33

실제로 테스트에서 메인 램프가 오동작을 보여 약간의 설계 변경.
전원 차단시 백업 컨덴서에서 필요 없는 부분으로 역류하는 것도 막아주게 변경했다.
LED 밝기도 조금씩 조절했다.

사용자 삽입 이미지




Creative Commons License
2010/08/26 03:16 2010/08/26 03:16
기존에 구입한 CP2102 칩을 사용한 USB-UART 컨버터는 전원과 TX,RX만을 뽑아주게 되어있다. 하지만, 아두이노에 데이터를 업로드하곤 리셋을 걸어줄 필요가 있는데 이것을 담당하는 게 DTR이다. 칩셋에는 준비되어있지만, 실제로 사용하진 않고 있어서 직접 선을 뽑아주기로 결정했다.

아래는 데이터 시트에 나와있는 핀배치도. 28번 핀이 이번에 필요한 DTR이다.

사용자 삽입 이미지

적당한 선을 골라 납을 잘 먹이고 잘 구부린 다음 핀에 대놓고 인두로 살짝 눌러줬다.

사용자 삽입 이미지


이제 M168에서 리셋을 못 걸어줘서 에러가 뜨던 것이 제대로 동작하는지 테스트. 문제 없이 동작한다.

외부에 선이 드러나 있으니 충격에 떨어질 수 있어 에폭시로 떼워주면 끝난다.
사용자 삽입 이미지

미리 만들어 둔 컨버터를 끼우고, M168에 연결.
3단 합체 M168!

사용자 삽입 이미지

Creative Commons License
2010/08/23 00:47 2010/08/23 00:47
밑부분에 커넥터용 공간을 확보해야하고해서 이리저리 머리를 굴린 결과다.
먼저 아두이노를 끼우고, 그 위에 RF모듈을 끼우도록 커넥터를 만들어야할듯하다.

사용자 삽입 이미지

Creative Commons License
2010/08/21 17:27 2010/08/21 17:27
아두이노를 이용해서 자전거 방향지시등을 만들었습니다.

해외엔 오래전부터 상용제품이 나와있고, 국내에도 제작된 제품도 있더군요.
(http://www.velove.co.kr/app/ : 직접 만들 분 아니면 여기서 사서 쓰시는 게 나을듯?
개인이 구할 수 있는 부품값 따져보고 인건비 따지면 걍 사는 게 나을지도요)

저야 개인적 디자인 취향 및 기능 문제로 겉보기에 순정인 상태인 게 좋은지라 하나 만들고 있습니다만.

RF-TX모듈을 이용해서 간단히 만든 리모콘. 좌우 깜박이에 해당합니다.
아직 확장여유가 더 있으므로 비상등 버튼등을 만들 수도 있습니다.
사용자 삽입 이미지

수신부가 장착된 본체. 물론, 내장할 땐 마이크로 컨트롤러는 M168로 바꿀 생각입니다. 재패니노는 막테스트용 보드.
사용자 삽입 이미지

대충 껍질을 붙이자면..
사용자 삽입 이미지

물론 주황색 클리어 부품으로 깜박이 등은 막을 생각입니다.

=)

Creative Commons License
2010/08/21 02:37 2010/08/21 02:37
사용자 삽입 이미지

1. RF 인코더/디코더
2. 블루투스 비
3. GPS 비
4. 소형 서보
5. 감속기어 모터
6. 빵판 전원공급기
7. 빵판
8. 8x8 RGB LED
9. SD 슬롯 실드


신난다~~~
Creative Commons License
2010/08/20 21:00 2010/08/20 21:00
SHARP의 GP2Y0A21YK센서다. 대략 10~80cm 거리를 측정할 수 있는데, 전원을 넣어주면 거리에 따라 출력 전압이 변하는 단순한 구조의 센서다.

사용자 삽입 이미지

크기만 작았더라면 키트의 앞머리에 넣어버리고 충돌 방지용 센서로 쓰면 딱인데..
Creative Commons License
2010/08/19 22:48 2010/08/19 22:48

사용자 삽입 이미지

사용 센서 : Freescale MMA7260 - 제품 UST-SNR-ACCEL (구입처)

아두이노에 업로드용

int gSel1 = 6; // 6번핀 G SELECT1
int gSel2 = 7; // 7번핀 G SELECT2
int sleep = 3; // 3번핀 /SLEEP
int x = 0;       // A0 X축
int y = 1;       // A1 Y축
int z = 2;       // A2 Z축


void setup(){
  
  pinMode(gSel1, OUTPUT);
  pinMode(gSel2, OUTPUT);
  pinMode(sleep, OUTPUT);

  Serial.begin(9600);

// g-Range & Sensitivity
  digitalWrite(gSel1, LOW);   // LL 1.5g 800 HL 2g 600 LH 4g 300 HH 6g 200
  digitalWrite(gSel2, LOW); 

  digitalWrite(sleep, HIGH);  // SLEEP 해제 HIGH
 
}

void loop(){
  Serial.print(analogRead(x));
  Serial.print(",");
  Serial.print(analogRead(y));
  Serial.print(",");
  Serial.println(analogRead(z));
  delay(10);
}

프로세싱용

import processing.serial.*;     // import the Processing serial library

int linefeed = 10;              // Linefeed in ASCII
Serial myPort;                  // The serial port
int graphPosition;
int[] lineXYZ = new int[3];
  
void setup() {
  
  
  size(630,480);
  background(0);
  
  println(Serial.list());

  myPort = new Serial(this, Serial.list()[1], 9600); // [1]은 리스트를 보고 자기가 쓰는 아두이노용 COM포트로 변경

  myPort.bufferUntil(linefeed);
}

void draw() {
  // 빨간색: X, 녹색: Y, 파란색: Z
  
  stroke(255,0,0);
  point(graphPosition,lineXYZ[0]);

  stroke(0,255,0);
  point(graphPosition,lineXYZ[1]);
  
  stroke(0,0,255);
  point(graphPosition,lineXYZ[2]);

  if (graphPosition >= width) {
    graphPosition = 0;
    background(0);
  }
  else{
    graphPosition ++;
  }
  
}


void serialEvent(Serial myPort) { 
  // read the serial buffer:
  String myString = myPort.readStringUntil(linefeed);

  // if you got any bytes other than the linefeed:
  if (myString != null) {

    myString = trim(myString);

    int sensors[] = int(split(myString, ','));

    for (int sensorNum = 0; sensorNum < sensors.length; sensorNum++) {
      print("Senor" +  sensorNum + " : " + sensors[0] + "\t"); 

   //센서 값(0~1023)을 대략 3으로 나누고(세로 해상도가 480) 근사값 정수만 취해서 각각의 그래프용 좌표에 대입
      lineXYZ[sensorNum] = ceil(sensors[sensorNum]/3);

    }
    println();
  }
}


000

Creative Commons License
2010/08/17 20:33 2010/08/17 20:33

과거 CuBLOC에서 테스트해보려고 구입했던 3축 가속도 센서를 아두이노에 물렸다.
확실히 수치만 보다 그래프로 보니 확실히 눈에 잘 들어온다.

사용자 삽입 이미지

과거에는 X,Y,Z의 센서값만 쭈욱 읽어들여 해석하느라 머리아팠는데, 그래프로 보여주니 한결 낫다.

사용자 삽입 이미지

이걸 이용하면 충격을 받거나, 급격하게 속도가 줄어들 때에 반응하는 것을 만들 수 있을 것이다.

사용자 삽입 이미지

센서가 위를 향할 때보다는 아래를 향한 상태로 측정할 때 Z축이 민감하게 움직였다. 이유가 있으려나? 데이터 시트를 좀 살펴봐야할 거 같다.
Creative Commons License
2010/08/17 02:05 2010/08/17 02:05
TSC230이라는 색감지 센서가 있다.
빛을 받으면 그에 따라 주파수값을 내주며 밝기만을 체크할 수도, R,G,B값을 각각 체크할 수도 있다.

사용자 삽입 이미지

사실 정밀하게 프로그램을 해야하지만, 대충 0~255정도의 값이 나오도록 스케치를 작성하고,
그 값을 가지고 상자를 칠하도록 했다.

예를 들어 아래의 사진처럼 녹색 빛이 들어가게 되면

사용자 삽입 이미지

녹색으로 상자가 변한다.

사용자 삽입 이미지

센서에서 출력은 주파수이므로 pulseIn() 명령어를 이용해서 받아들이게 했다.

이것을 좀더 정밀하게 만들고 응용하면,
주변 환경광의 색성분을 분석하고 RGB LED를 이용해서 유사한 색온도의 빛을 쏘거나, 부족한 색성분의 빛을 보강해서 흰색으로 만들 수 있는 조명 장치를 만들 수도 있을 것이다.

일단 센서 테스트는 여기까지.

센서 구입처 : http://devicemart.co.kr/mart7/mall.php?cat=049001000&query=view&no=8835

Creative Commons License
2010/08/14 01:50 2010/08/14 01:50
사용자 삽입 이미지

사진
Creative Commons License
2010/08/13 22:04 2010/08/13 22:04
AVRTOOLS에서 만든 M168-MINI. 작은 사이즈가 맘에 든다. 키트에 들어갈 메인 컨트롤러가 될 것이다.


가격 조건도 좋고 구성이 알차다. 맘에 든다.

AVRTOOLS : http://avrtools.co.kr/ 
Creative Commons License
2010/08/13 10:48 2010/08/13 10:48
다이오드의 정류작용에서 콘덴서와 코일의 평활회로 쪽을 살펴보려면 교류->맥류를 만들어야한다. 그렇다고 220V를 연결할 수도 없고해서, 모터 2개를 서로 벨트로 묶어주고 한쪽에 전원을 연결해줬다. 반대쪽은 발전을 하게 된다. 결과적으로 모터가 돌면서 교류는 아니더라도 맥류는 나오게 되었다. 다이오드의 정류작용은 패스하고 바로 콘덴서와 코일로 테스트 하면 된다.

사용자 삽입 이미지

컨덴서와 코일을 연결하고 평활시켜본다.

사용자 삽입 이미지

먼저 콘덴서를 거쳐 나온 부분을 오실로스코프로 찍어 본다.

사용자 삽입 이미지

맨 위의 사진에 비해 많이 평탄해졌다.

다음에는 코일을 거쳐 나온 것을 찍어 본다.
사용자 삽입 이미지

용량 문제로 많이 줄진 않았지만, 더 줄었음을 알 수 있다.

일단 간단한 LC회로 실험 끝
Creative Commons License
2010/08/11 22:29 2010/08/11 22:29

마이크로 컨트롤러에 큰 부하를 걸지 않고 외부 장치를 제어하려니 가장 간단한 방법은 트랜지스터를 이용하는 것이다. NPN 트랜지스터를 하나 빵판에 끼우고, 에미터와 콜렉터에 레이저 모듈을 전원 5V를 넣고 물려줬다.
그리곤 베이스와 에미터에 1.2V 전기를 넣었다 뺐다 하면 에미터와 콜렉터에 연결된 레이저 모듈이 켜졌다 꺼졌다 한다.

즉, 1.2V 전지로 5V로 돌아가는 녀석을 컨트롤할 수 있는 예다. (더 차이가 큰 전원도 가능하다)

TR의 어디를 공통 접지하느냐에 따라 입출력 임피던스 차/증폭 정도 차가 발생하니 회로에 맞춰 적절히 테스트 해보면 될듯하다.

사용자 삽입 이미지

Creative Commons License
2010/08/11 00:11 2010/08/11 00:11

인터럽트를 이용해야겠다.

그나저나 날씨 무지 덥네.

사용자 삽입 이미지

정확하게 사용법을 다 파악한 건 아니지만, 어찌되었건 일단 원하는대로 돌아는 간다.

현재 생각으로는
여러가지 제어부는 걍 루프를 돌리고, 인터럽트로 수신 데이터를 주기적으로 확인.
수신데이터가 수신되었다면 해당 값을 메인에 뿌려주고 제어부는 그에 맞춰 돌아가는 것으로 생각 중이다.



Creative Commons License
2010/08/08 17:22 2010/08/08 17:22

어제 하루 종일 삽질하게 만들었던 xBEE.

다 포기하고 기술 지원이나 받으러 가려고
BEEs 실드 하나에 두개를 끼우고 왼쪽 xBEE에서 오른쪽 xBEE으로 보내는 루프백 테스트 스케치를 하나 만들어 넣고는 돌려봤는데...


잘 돌 아 간 다 !


ㅡㅅ-);;;;;

이거 뭥미.

그래서 각각 나눠서 전송 테스트.

사용자 삽입 이미지

어제 삽질하게 만든 xBEE 맞아? ㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷ


아, 정확하게 말해서 일정 전송 후 데이터가 일부 깨진다. 이건 좀 더 살펴봐야할듯.
(타이밍 문제인듯..)


하지만, 방금 전까진 수신 상태등이 켜지지도 않았다고...

Creative Commons License
2010/08/06 01:19 2010/08/06 01:19

BEEs실드가 두개가 동시에 불량이 나거나, xBEE가 두개가 동시에 불량이 날리는 없을테고..
동작등은 들어오는데 직접 USB-UART로 RX-TX연결해서 터미널로 커맨드를 보내도 반응이 없는 것으로 봐서는...
xBEE세팅을 해야 동작할 것으로 보인다.

그러려면 좀 좋은(?) USB-UART 변환장치가 필요하다. 예전에 멋도 모르고 사놓은 건 단순히 데이터 전송용으로 밖에 못쓰는 것이다. 하나사야하나 하고 이리저리 살펴보던 중 xBEE 수입처가 회사 근처에 있는 것을 발견했다. 낼 직접 들고가서 뭐가 문젠지 파악하고 와야겠다. 펌웨어도 최신으로 업데이트 하고, 이런 저런 자료나 받아와야겠다. 나중을 위해서라도 FTDI USB 시리얼 변환기는 하나 사야겠지만, 일단 급한 불은 끌 수 있을듯.

사용자 삽입 이미지


Creative Commons License
2010/08/06 00:27 2010/08/06 00:27
걍 RX-TX 꼬아서 연결하면 동작하는데, RF-BEE를 통하면 동작을 안해 ;ㅁ;

뭐가 문제지?

Creative Commons License
2010/08/05 16:28 2010/08/05 16:28
I2C (Inter Intergrated Circuit)를 이용하면 아무래도 2개의 데이터 케이블로 주변기기를 제어할 수 있으므로 여러가지 기능을 수행하는 장치를 만들 때 핀의 낭비가 없어서 유용하다. CuBLOC에서 I2C를 이용한 CLCD를 구해놓은 게 있어서 지난번에 직접 4bit모드로 연결했던 것을 I2C로 테스트 해봤다.

하지만, 아직까진 잘 모르겠다. 좀더 공부해 봐야할듯.

사용자 삽입 이미지


재밌는 것은 시리얼 통신에서도 드라이버에 따라 엉망인 데이터를 내던 JAPANINO는 I2C환경에서도 노이즈에 취약한 모습을 보이고 있다. PC측 마우스의 움직임이나 화면 스크롤에 따라 디스플레이에 노이즈가 발생하거나 리셋되는 모습을 보인다. 동일한 조건에서 Seedino에서는 외부 환경의 노이즈를 필터링해서 깔끔하게 동작하고 있다. 역시 번들은 한계가 있는듯.



Creative Commons License
2010/07/31 15:02 2010/07/31 15:02
아두이노를 ISP(In System Programmer)로 이용해 다른 아두이노에 부트로더를 심을 수 있다고 지난번에 소개했다. 문제는 타겟의 설정인데, 각켄 재패니노를 타겟으로 설정하고 부트로더를 심었더니 스케치를 업로드하고 약 10여초의 딜레이 후 동작하는 것을 발견했다.

그래서 개발환경의 hardware\arduino 폴더 안에 있는 boards.txt를 살펴보니 LilyPadBOOT_168.hex 를 불러오게 되어있었다.

이를 무시하고 Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega168를 타겟으로 설정하고 부트로더를 심어줬더니 딜레이가 사라졌다.

사용자 삽입 이미지

Creative Commons License
2010/07/30 22:16 2010/07/30 22:16
아두이노와 CLCD를 연결하면 여러가지 내부 정보를 바로 눈으로 확인 할 수 있어서 편리하다.
CuBLOC에서 사용하던 CLCD가 있어서 그것을 이용하기로 맘 먹었다.
모델명은 LC2042-SFLYH6다.

일단 스펙.
사용자 삽입 이미지

이전에 만든 것이 시리얼 통신 중에 오류가 났기 때문에 내부 문제인지, 전송 문제인지를 찾기 위해서 CLCD를 사용하는 것이 목적이었으므로, 가능한 아두이노와 CLCD를 연겨할 때 사용할 핀 수를 줄여야 유리하다. 데이터 전송에는 8bit모드와 4bit모드가 있는데 전자는 8개의 데이터를 보내서 표시하는 것, 후자는 4개의 데이터를 보내서 표시하는 것이다. 일단 4bit모드로 만들기로 하고 위의 것을 살펴보면 다음과 같이 나와있다.

DB0~DB3 : in 4-bit mod. open these terminals. (4bit 모드로 사용할 땐 연결하지 말라는 의미)

따라서 데이터 전송은 DB4~DB7 즉 11~14번 핀을 이용해야한다.
물론, 이번에 사용한 CLCD에 한한 내용이다. 메이커나 제품에 따라 핀 배열이나 성능이 다를 수 있으므로, 자신이 사용하는 CLCD 모델명을 확인하고 해당 데이터 시트를 찾아 확인해야 한다.



아두이노에는 LCD를 위한 명령어들이 준비되어있는데, #include <LiquidCrystal.h>를 스케치 상단에 적어 놓는 것으로 불러올 수 있다. 이 파일은 아두이노 개발환경(IDE)의 \libraries\LiquidCrystal 폴더에 들어있다.

일단 눈에 띄는 중요한 부분을 살펴보면,
public:
  LiquidCrystal(uint8_t rs, uint8_t enable,
		uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
		uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
  LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
		uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
		uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
  LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
		uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);
  LiquidCrystal(uint8_t rs, uint8_t enable,
		uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);
요 부분이다.
자신이 CLCD의 어떤 모드를 사용할 것인가를 결정하면 위의 포맷대로 써 줘야한다.
나는 4bit모드를 쓰기로 맘 먹었으므로...
  LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
		uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);
이 형식을 따라 연결해 주면 된다.

무엇을 의미하냐면, 아두이노 스케치에 LiquidCrystal(rs해당 핀 번호, rw해당 핀 번호, enable해당 핀 번호, D0해당 핀번 호,~,D3해당 핀 번호); 를 써 주면 된다는 것이고, 거기에 적은대로 아두이노와 CLCD를 직접 전선으로 연결해주면 된단 의미다.

이전 구성에서 A0, A1, D2, D3를 사용하고 있었으므로 이것을 피해서 연결해주기로 맘 먹고 그 외의 핀을 할당했다..
LiquidCrystal lcd(5, 6, 7, 9, 10, 11, 12);
와 같이 아두이노 5, 6,7, 9, 10, 11, 12번 핀과  CLCD 해당 핀을 서로 연결해 준다.

사용자 삽입 이미지

여기서 CLCD 3번 핀은 LCD의 컨트라스트를 조정하는 것인데, 일단 GND에 연결해 준다. 3번 핀을 가변저항 중간 단자에 붙이고 나머지 양 옆의 단자를 +,-에 연결해 주면 가변 저항을 돌리는 것으로 컨트라스트를 조절하게 만들 수도 있다. 아니라면 아날로그 출력을 이용해서 아두이노에서 컨트롤 할 수도 있을 것 같다.

15, 16번 핀은 백라이트이므로 전원에 바로 물려줬다.

사용법은 간단하다.

  lcd.print(변수, 변수 형태);
  lcd.print("직접입력");

과 같이 이용하면 된다.
그 외에도 여러 명령이 준비되어 있는데, 이것은 LiquidCrystal.h를 살펴보면 잘 나와 있다.

예를 들자면 화면을 지우려면 lcd.clear(); 화면의 맨 위로 이동시키려면 lcd.home();라고 쓰면 된다.

  lcd.print("[1]-----------------");
 lcd.print("[2]-----------------");
 lcd.print("[3]-----------------");
 lcd.print("[4]----------------");

위와 같이 해서 출력을 해 보았다.

사용자 삽입 이미지
1행을 완성하면 3행이 써지고 그다음 2행이 써지고 다시 4행이 써지는 순서다.

그럼 맘대로 배치하려면 어떻게 해야 하는가?

  lcd.setCursor(0, 0);
  lcd.print("[1]");

  lcd.setCursor(1, 1);
  lcd.print("[2]");

  lcd.setCursor(2, 2);
  lcd.print("[3]");

  lcd.setCursor(3, 3);
  lcd.print("[4]");
이번에는 위와 같은 명령어를 써 봤다.
사용자 삽입 이미지

감이 잡히는가?
lcd.setCursor(가로, 세로); 명령으로 원하는 위치에 커서를 이동시켜 놓고, 그 위치에서 글자를 나오게 할 수 있다.  여기서 가로, 세로 값은 맨 왼쪽 위가 (0,0)이고, 맨 오른쪽 아래가 (19,3)이므로 그에 따라 적절히 값을 넣으면 된다.

Creative Commons License
2010/07/30 11:34 2010/07/30 11:34
Windows 7 x64에서 재패니노를 사용해서 시리얼포트로 데이터를 받다보면 엉망진창의 데이터가 날아오는 현상이 있었다.
원인은 CP210x USB to UART 드라이버 문제로 밝혀졌다.

만약 버전 5.x대를 쓰고 있다면 바로 최신 드라이버(현재 6.1)로 업데이트 하면 깔끔히 문제가 해결된다.

증상은 처음엔 깨끗한 데이터가 날아오다가 어느 순간 노이즈가 잔뜩 낀 것같이 가비지 데이터가 날아오기 시작하는 것.

사용자 삽입 이미지사용자 삽입 이미지
왼쪽은 엉망으로 날아오는 데이터, 오른쪽은 정상 데이터.
물론, 왼쪽도 처음에는 오른쪽 처럼 정상으로 날아온다.

장치관리자(Device Manager)에서 포트 정보를 살펴보고 낮은 버전을 쓰고 있다면 최신으로 업데이트 해준다.

사용자 삽입 이미지

드라이버 다운로드 페이지 : http://www.silabs.com/support/pages/support.aspx?ProductFamily=USB%20to%20UART



그나저나 이거 문제 찾느라 뜯은 컴퓨터는 언제 정리하지?
사용자 삽입 이미지

Creative Commons License
2010/07/30 00:05 2010/07/30 00:05
다른 컴퓨터에서 동작 테스트를 하니 이상 증세가 나타나지 않았다.

사용자 삽입 이미지

혹시나해서
LCD를 붙여 내부 값을 바로 출력하게 만들었다.
시리얼 모니터와 비교해서 어느쪽이 문젠가를 찾으려는 생각에서 였다.

포트 불량쪽이라면 내부값과 외부값이 다를테니까.
그런데, 불량 증상이 재현되질 않았다.

컴 포트를 바꾸고 다시 한 번 테스트를 해봐야할 것 같다.
최근 마우스도 불량을 보이는데, 전반적으로 컴의 점검을 해야할 모양이다.
(아니면 마우스 불량떄문에 그럴까?)

Creative Commons License
2010/07/29 15:45 2010/07/29 15:45
http://arduino.cc/en/Tutorial/ArduinoISP

부트로더를 심을 보드를 타겟이라고 하고, 그 타겟에 부트로더를 심어줄 보드를 프로그래머라고 하면...

우선 아두이노 개발환경의 예제에서 ArduinoISP를 불러와 전송시켜 프로그래머를 부트로더 굽는 환경으로 바꾸어 놓는다.

다음에는 위의 페이지에서 소개한 것처럼 다양한 환경에 맞춰 아두이노를 서로 연결한다.
밑의 것이 프로그래머, 위의 것이 타겟이다.

사용자 삽입 이미지

타겟의 환경을 맞춰 Tools>Board를 세팅해준다. 예를 들어 프로그래머가 Arduino Mega고 타겟이 Arduino mini라면 mini를 세팅해야 한다.

Burn Bootloader > Arduino as AVRISP 를 선택하면 두 아두이노가 깜박깜박 거리면서 열심히 타겟을 굽는다.

 
사용자 삽입 이미지

혹시나해서 맛간 재패니노에 다시 부트로더를 올려봤지만, 에러는 여전하다. 어디가 문제려나.


Creative Commons License
2010/07/29 03:44 2010/07/29 03:44
아날로그 입력 값을 컴포트로 전송하는데 가비지값이 잔뜩 나와 이상하다 했는데, 시드이노에서는 문제없이 동작하는 것을 확인.

사용자 삽입 이미지


재패니노 쪽의 문제로 확인되었다. ㅡㅅ-);;; 제길 내 시간.

사용자 삽입 이미지
재패니노와 시드이노. 둘 다 아두이노 호환기다.

그나 저나 뭐가 문제지? ㅡㅅ-);;;
디지털 포트쪽은 제대로 동작하는 것 같은데.. 아날로그 포트 문제려나? 아니면 시리얼 통신에서 문제가 발생하는 건가?... 스케치가 제대로 올라가는 것을 봐서는 시리얼 통신쪽 문제 같아보이진 않는데.

이래서야 2대를 RF-BEE로 물려서 장난치는 것을 할 수없잖아 ;ㅁ;
Creative Commons License
2010/07/29 01:15 2010/07/29 01:15