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

사용자 삽입 이미지
FUJIFILM | FinePix S5Pro | Manual | Spot | Auto W/B | 1/125sec | F3.5 | F2 | 0EV | 35mm | 35mm equiv 53mm | ISO-3200 | No Flash | 2010:08:26 03:05:27




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

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

사용자 삽입 이미지

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

사용자 삽입 이미지
FUJIFILM | FinePix S5Pro | Manual | Spot | Auto W/B | 1/250sec | F2.8 | F2 | 0EV | 35mm | 35mm equiv 53mm | ISO-3200 | No Flash | 2010:08:23 00:48:59


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

외부에 선이 드러나 있으니 충격에 떨어질 수 있어 에폭시로 떼워주면 끝난다.
사용자 삽입 이미지
FUJIFILM | FinePix S5Pro | Manual | Spot | Auto W/B | 1/250sec | F2.8 | F2 | 0EV | 35mm | 35mm equiv 53mm | ISO-3200 | No Flash | 2010:08:23 01:11:27

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

사용자 삽입 이미지
FUJIFILM | FinePix S5Pro | Manual | Spot | Auto W/B | 1/125sec | F4.5 | F2 | 0EV | 35mm | 35mm equiv 53mm | ISO-3200 | No Flash | 2010:08:23 01:59:00

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

사용자 삽입 이미지
FUJIFILM | FinePix S5Pro | Manual | Spot | Auto W/B | 1/125sec | F3.5 | F2 | 0EV | 35mm | 35mm equiv 53mm | ISO-3200 | No Flash | 2010:08:21 17:30:46

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

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

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

RF-TX모듈을 이용해서 간단히 만든 리모콘. 좌우 깜박이에 해당합니다.
아직 확장여유가 더 있으므로 비상등 버튼등을 만들 수도 있습니다.
사용자 삽입 이미지
FUJIFILM | FinePix S5Pro | Manual | Spot | Auto W/B | 1/200sec | F5 | F2 | 0EV | 35mm | 35mm equiv 53mm | ISO-3200 | No Flash | 2010:08:21 02:21:59

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

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

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

=)

Creative Commons License
2010/08/21 02:37 2010/08/21 02:37
사용자 삽입 이미지
FUJIFILM | FinePix S5Pro | Manual | Spot | Auto W/B | 1/80sec | F3.5 | F2 | 0EV | 35mm | 35mm equiv 53mm | ISO-3200 | No Flash | 2010:08:20 21:01:44

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 거리를 측정할 수 있는데, 전원을 넣어주면 거리에 따라 출력 전압이 변하는 단순한 구조의 센서다.

사용자 삽입 이미지
FUJIFILM | FinePix S5Pro | Manual | Spot | Auto W/B | 1/100sec | F4 | F2 | 0EV | 35mm | 35mm equiv 53mm | ISO-3200 | No Flash | 2010:08:19 22:50:51

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

사용자 삽입 이미지
FUJIFILM | FinePix S5Pro | Manual | Spot | Auto W/B | 1/100sec | F4 | F2 | 0EV | 35mm | 35mm equiv 53mm | ISO-3200 | No Flash | 2010:08:17 20:35:01

사용 센서 : 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축 가속도 센서를 아두이노에 물렸다.
확실히 수치만 보다 그래프로 보니 확실히 눈에 잘 들어온다.

사용자 삽입 이미지
FUJIFILM | FinePix S5Pro | Manual | Spot | Auto W/B | 1/100sec | F4 | F2 | 0EV | 35mm | 35mm equiv 53mm | ISO-3200 | No Flash | 2010:08:17 02:09:59

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

사용자 삽입 이미지

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

사용자 삽입 이미지

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

사용자 삽입 이미지
FUJIFILM | FinePix S5Pro | Manual | Spot | Auto W/B | 1/50sec | F4 | F2 | 0EV | 35mm | 35mm equiv 53mm | ISO-3200 | No Flash | 2010:08:14 01:46:50

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

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

사용자 삽입 이미지
FUJIFILM | FinePix S5Pro | Manual | Spot | Auto W/B | 1/50sec | F4 | F2 | 0EV | 35mm | 35mm equiv 53mm | ISO-3200 | No Flash | 2010:08:14 01:51:52

녹색으로 상자가 변한다.

사용자 삽입 이미지

센서에서 출력은 주파수이므로 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
사용자 삽입 이미지
FUJIFILM | FinePix S5Pro | Manual | Spot | Auto W/B | 1/50sec | F4 | F2 | 0EV | 35mm | 35mm equiv 53mm | ISO-3200 | No Flash | 2010:08:13 22:08:00

사진
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

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

그나저나 날씨 무지 덥네.

사용자 삽입 이미지

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

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



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

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

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


잘 돌 아 간 다 !


ㅡㅅ-);;;;;

이거 뭥미.

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

사용자 삽입 이미지
FUJIFILM | FinePix S5Pro | Manual | Spot | Auto W/B | 1/40sec | F5.6 | F2 | 0EV | 35mm | 35mm equiv 53mm | ISO-3200 | No Flash | 2010:08:06 01:27:10

어제 삽질하게 만든 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 시리얼 변환기는 하나 사야겠지만, 일단 급한 불은 끌 수 있을듯.

사용자 삽입 이미지
FUJIFILM | FinePix S5Pro | Manual | Spot | Auto W/B | 1/40sec | F5.6 | F2 | 0EV | 35mm | 35mm equiv 53mm | ISO-3200 | No Flash | 2010:08:06 00:38:27


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로 테스트 해봤다.

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

사용자 삽입 이미지
FUJIFILM | FinePix S5Pro | Manual | Spot | Auto W/B | 1/320sec | F2 | F2 | 0EV | 35mm | 35mm equiv 53mm | ISO-640 | No Flash | 2010:07:31 15:09:10


재밌는 것은 시리얼 통신에서도 드라이버에 따라 엉망인 데이터를 내던 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



그나저나 이거 문제 찾느라 뜯은 컴퓨터는 언제 정리하지?
사용자 삽입 이미지
FUJIFILM | FinePix S5Pro | Manual | Spot | Auto W/B | 1/250sec | F3.5 | F2 | 0EV | 35mm | 35mm equiv 53mm | ISO-3200 | No Flash | 2010:07:30 00:03:53

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

사용자 삽입 이미지
TCOMT | HS8000 | Auto W/B | 0ssec | Flash | 2010:07:28 06:01:16

혹시나해서
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 를 선택하면 두 아두이노가 깜박깜박 거리면서 열심히 타겟을 굽는다.

 
사용자 삽입 이미지
FUJIFILM | FinePix S5Pro | Manual | Spot | Auto W/B | 1/80sec | F5.6 | F2 | 0EV | 35mm | 35mm equiv 53mm | ISO-3200 | No Flash | 2010:07:29 01:24:34

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


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

사용자 삽입 이미지


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

사용자 삽입 이미지
FUJIFILM | FinePix S5Pro | Manual | Spot | Auto W/B | 1/80sec | F5.6 | F2 | 0EV | 35mm | 35mm equiv 53mm | ISO-3200 | No Flash | 2010:07:29 01:24:34
재패니노와 시드이노. 둘 다 아두이노 호환기다.

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

이래서야 2대를 RF-BEE로 물려서 장난치는 것을 할 수없잖아 ;ㅁ;
Creative Commons License
2010/07/29 01:15 2010/07/29 01:15
사용자 삽입 이미지
TCOMT | HS8000 | Auto W/B | 0ssec | Flash | 2010:07:25 11:17:59

일단 그라운드 쪽을 전부 분리해놔야 겠다.

동작 중 오실로스코프로 찍어본 것.
사용자 삽입 이미지
TCOMT | HS8000 | Auto W/B | 0ssec | Flash | 2010:07:28 05:57:31

Creative Commons License
2010/07/28 14:31 2010/07/28 14:31
사용자 삽입 이미지
FUJIFILM | FinePix S5Pro | Manual | Spot | Auto W/B | 1/80sec | F5.6 | F2 | 0EV | 35mm | 35mm equiv 53mm | ISO-3200 | No Flash | 2010:07:28 01:53:52

며칠전 JAVA로 퐁은 만들었고,
오늘은 그것을 움직이게 할 2축 아날로그 스틱을 만들었다.
원작(?) 대로라면 회전하는 가변저항을 이용해서 만들어야하지만, 다용도로 쓸 생각으로 2축 스틱으로 결정했다.

PS용 아날로그 스틱과 똑같이 누르는 스위치 기능에도 대응한다.
거기에 추가로 스위치를 하나 더 달아 X-Y축 입력과 함께 2개의 푸시스위치를 지원한다.

핀배열
GND  GND  VR  VR
SW1
SW2
VR
VR

Creative Commons License
2010/07/28 01:46 2010/07/28 01:46
사용자 삽입 이미지
FUJIFILM | FinePix S5Pro | Manual | Spot | Auto W/B | 1/125sec | F3.5 | F2 | 0EV | 35mm | 35mm equiv 53mm | ISO-3200 | No Flash | 2010:07:27 20:56:09

1) 전원 어댑터 연결 부품
2) 인두 팁 클리닝 스폰지
3) 빵판
4) 9V 전지 홀더
5) IrDA 동글
6) 테스터 봉
7) Bee 실드
8) 이더넷 실드
9) 시드이노


신난다~~~~~
Creative Commons License
2010/07/27 20:51 2010/07/27 20:51

 
일단 만든 거 ㅡㅅ-);

클릭하믄 스타트..
3번 놓치면 겜오버. ㅡㅅ-);;;;;;
빨간데 맞추면 속도 반, 점수 +3.
Creative Commons License
2010/07/26 03:03 2010/07/26 03:03
자바가 설치되어있지 않은 경우, 별도 설치창이 뜰 수도 있습니다. 원치 않음 패스하세요. ㅇㅂㅇ/



간단한 자바 애플릿 만들기 테스트..ㅡㅅ-);

MSX시절도 그랬는데, 그래픽 작업은 역시 화면에 색색 원채우기로 시작.
Creative Commons License
2010/07/23 17:27 2010/07/23 17:27
일단은 공개 스케치로 구동까지만..

사용자 삽입 이미지

이 제품은 Contrast 에 0V 인가할 때 가장 글자가 잘 보인다. ㅡㅅ-);
처음에 가변 저항 연결하기 귀찮아서 걍 5V 인가했는데 아무것도 안나와서 문제가 있나 한참을 고민했다.
나중에 만들 땐 아날로그 출력으로 전압 조정해줌 될 듯.
Creative Commons License
2010/06/19 03:31 2010/06/19 03:31
사용자 삽입 이미지
FUJIFILM | FinePix S5Pro | Manual | Center Weighted Average | Auto W/B | 1/30sec | F5 | F2 | 0EV | 35mm | 35mm equiv 53mm | ISO-3200 | No Flash | 2010:06:18 02:17:44

어른의 과학 매거진 Vol.27에 나온 아두이노를 이용한 광잔상 스케치를 CuBLOC에서 돌아가게 포팅해봤는데,
CuBLOC이 확실히 기본적인 환경에서는 사용자에 대한 배려가 잘 되어있다는 느낌이 들었다.

사용자 삽입 이미지
FUJIFILM | FinePix S5Pro | Manual | Center Weighted Average | Auto W/B | 1/10sec | F5 | F2 | 0EV | 35mm | 35mm equiv 53mm | ISO-3200 | No Flash | 2010:06:18 02:34:52

아두이노는 사용자들이 무한히 확장해나가는 오픈 소스 환경이니까 계속 발전해나가겠지만, 일단 처음 시작했을 때 기본으로 제공받는 레퍼런스는 확실히 CuBLOC쪽이 잘되어있는 것 같다. 통합 개발 환경도 좀더 사용자 편의를 위해 다양한 기능을 제공하고 있다.  친절한 큐블록씨..라고나 할까?

사용자 삽입 이미지


하지만, 결국 문제가 되는 건 가격. 비싼 건 어쩔 수 없다.

제품 등급에 따라서 같은 프로세서를 쓴 제품도 있는데 서로 하드웨어 가격 차가 너무 크다. 취미라면 모르겠지만 몇 개 만들기 시작하면 그 단가차가 큰 벽으로 다가오지 않을런지?
Creative Commons License
2010/06/18 02:10 2010/06/18 02:10

*주의* 여기에 쓰여 있는 재패니노(Japanino)는 아두이노(Arduino) 호환기입니다. 어른의 과학 매거진 Vol.27 부록으로 일반인이 쉽게 접할 수 있는 제품이다 보니 이것을 기본으로 작업했습니다. 그러므로 재패니노라고 언급된 부분은 아두이노로 바꿔 읽으셔도 아무 문제 없습니다.




일단 불을 켜보자!


어른의 과학 매거진 Vol.27호 부록 테크노 공작 세트를 풀어봅시다. 아래와 같은 구성품이 보일 것입니다.

오른쪽의 하얀색은 광잔상 키트고 중간의 빨간 것은 재패니노, 그리고 왼쪽의 검은 것은 배터리 케이스입니다. 배터리 케이스 위에 있는 것은 광잔상을 남기는 LED 유닛입니다. 이번에 쓸 것은 재패니노와 배터리 케이스입니다. 광잔상 키트는 조립해야 하지만 이 둘은 그냥 바로 쓸 수 있기 때문에 기다리지 않고 바로 작업에 들어갈 수 있습니다.

사용자 삽입 이미지사용자 삽입 이미지
추가로 있으면 좋은 것은 AAA 전지 3개와 USB 연장 코드입니다.
전지는 재패니노를 컴퓨터 없이 동작하게 할 때 쓰는 전원이고, USB 연장 케이블은 컴퓨터에 직접 연결할 때 USB 포트의 위치에 따라 연결이 어렵거나 안될 때 쓰면 됩니다.

앞에서 설명한 대로 통합 개발 환경(IDE)의 설치가 끝났다면 USB포트에 재패니노를 끼우는 것으로 준비는 끝입니다. 아니라면, http://asteris.pe.kr/blog/1222 를 참조해서 컴퓨터에 모든 프로그램을 설치해 주세요.

저장해 놓은 폴더를 열고 아두이노 통합 개발환경 (이하 IDE)를 실행시킵니다.

사용자 삽입 이미지

자, 그럼 이제 재패니노를 움직일 스케치를 해볼까요? 스케치?

사용자 삽입 이미지

이런 건가요?
ㅡㅅ-);;;

아무래도 아두이노는 전자 전공자들의 실습키트가 아닌 인터랙티브 디자인의 한 방법으로 탄생했기 때문에, 비전공자도 쉽고 편하게 쓸 수 있어야 했을 것입니다. 그래서인지 프로그램이라는 표현을 피하려고 노력한 것처럼 보입니다. 아무래도 "프로그래밍한다"라고 하면 뭔가 전산 쪽을 전공해야 하는 느낌이 많이 들어서인지도 모릅니다. 그래서 그림에서 밑그림을 그리고 덧칠해서 완성해나가는 것처럼, 프로그램하는 것을 스케치한다고 표현한 모양입니다. 이렇게 해서 저장하면 스케치북이라는 메뉴에 기록이 남습니다. 그리고 자기가 작성한 프로그램은 스케치라고 부릅니다. (*주1)

어찌 되었건, 이제 처음 제목대로 불을 켜보도록 하겠습니다.

제일 먼저 할 일은 File -> Examples -> Digital -> Blink 를 순서대로 누르는 것입니다.

사용자 삽입 이미지

그러면 새 창이 열리면서 뭔가 창 가득 써져 있습니다.

어이쿠, 이거 영어네요.

다 무시합니다. 그냥 Upload 버튼을 눌러봅니다.

사용자 삽입 이미지

재패니노가 급격히 깜박거리면서 잠시 뒤 항상 켜져 있는 불 옆에 1초 단위로 꺼졌다 켜졌다 하는 불이 보일 것입니다. 이게 이번 스케치입니다.

사용자 삽입 이미지

그런 겁니다. 그냥 버튼 몇 번 눌러주면 재패니노는 동작합니다.



-끝-







음, 이렇게 넘어가자니 아쉽습니다. 내가 뭘 한 것인지도 모르겠습니다.

그럼, 스케치를 살펴봐야겠죠.
일단 그대로 옮겨 놓았습니다.
-
/*
  Blink
 
 Turns on an LED on for one second, then off for one second, repeatedly.
 
 The circuit:
 * LED connected from digital pin 13 to ground.
 
 * Note: On most Arduino boards, there is already an LED on the board
 connected to pin 13, so you don't need any extra components for this example.
 
 
 Created 1 June 2005
 By David Cuartielles
 
 http://arduino.cc/en/Tutorial/Blink
 
 based on an orginal by H. Barragan for the Wiring i/o board
 
 */

int ledPin =  13;    // LED connected to digital pin 13

// The setup() method runs once, when the sketch starts

void setup()   {                
  // initialize the digital pin as an output:
  pinMode(ledPin, OUTPUT);     
}

// the loop() method runs over and over again,
// as long as the Arduino has power

void loop()                     
{
  digitalWrite(ledPin, HIGH);   // set the LED on
  delay(1000);                  // wait for a second
  digitalWrite(ledPin, LOW);    // set the LED off
  delay(1000);                  // wait for a second
}
-

아무리 아두이노가 비전공자에게도 쉽게 다가갈 수 있게 나온 물건이라고 하더라도
기본적으로 스케치하려면 프로그래밍 실력은 있어야 할 거 같습니다.
그러나 초보자라는 전제하에서 일단 설명하겠습니다.

첫 번째 줄의 /*주석이라는 의미입니다. 주석이 뭐냐고요? 이딴 이상한 알파벳들 보느라 머리 아플 땐 시원한 맥주 한 잔 주석잔에 마시면 끝내주죠. ㅡㅅ-);;; 가 아니라... http://krdic.naver.com/detail.nhn?docid=34885500&re=y 를 눌러 직접 확인해 보세요. 이해하셨나요? 말 그대로 이 스케치가 어디에 쓰이는 건지, 또 이번 줄은 어떤 기능을 하는지에 대해서 설명을 달아놓은 것입니다. 쭉쭉 내려서 20번째 줄을 보니 아까와는 비슷한데 반대인 기호가 나오는군요. */ 는 주석을 닫겠다는 말입니다. 그러니까 /* 에서 */ 사이에 있는 것은 모두 설명이라는 의미입니다.

내용을 대충 풀이해보자면, 이 Blink(깜박임)이라는 스케치는 LED를 1초동안 켜고, 다시 1초동안 끄며, 그것을 반복한다.는 설명이 붙어있습니다. 그리고 LED는 13번째 핀그라운드(GND)에 물려 놓으라고 설명이 되어있지요. 대부분의 아두이노 보드들은 기본적으로 13번 핀에 LED가 붙은 상태로 나온다고 되어있습니다. 그러니 별도의 LED를 준비하지 않아도 된다.라는 내용이죠. 그 밑에는 누가 이 스케치를 만들었나라는 게 적혀있습니다.

여기서 말하는 LED는 쉽게 말하면 꼬마 전구입니다. 재패니노를 끼웠을 때 빨갛게 불이 들어오는 게 바로 LED입니다. 그리고 핀이라는 것은 무엇이냐면, 단자를 말합니다. 재패니노 양 옆의 검은색 구멍 뽕뽕 뚫린 것이 바로 단자들입니다. 옆에는 영어와 숫자로 뭔가 써있지요?  그것이 바로 그 단자(핀)의 이름입니다. 그리고 아래 사진에서 보는 것처럼 아래쪽에 보면 불들이 보이는 데 그 중 한개가 13번째 핀에 붙은 상태로 되어있는 LED입니다. 별 다른 준비물 없이도 재패니노만 가지고 불이 들어오는 것을 확인할 수 있게 만들어주도록 준비되어 있는 것입니다.

사용자 삽입 이미지

이제, 그 밑을 보면

int
ledPin =  13;    // LED connected to digital pin 13

라고 되어있습니다.

일단 녹색 부분부터 설명하겠습니다. ///*와 마찬가지로 주석이라는 표시입니다. 단, //의 뒤부터 그 줄 끝까지 해당한다는 의미죠. 즉

/* LED connected to digital pin 13 */

를 줄여서 표현한 것입니다. 한 줄밖에 안되는데, 앞뒤로 붙이고 있으면 짜증나니까 그냥 앞에 //를 붙여서 여기부터 이줄 끝까지는 주석이다.라고 알려주는 것이지요.

앞으로 와서 int ledPin =  13;은 내가 앞으로 LED를 13번째 핀에 붙이겠다고 생각한 걸 미리 예약해 놓는 것입니다. 그런데 어떻게 예약하느냐 하면, 앞으로 스케치에 나오는 ledPin이라는 낱말은 모두 13으로 바꿔 달라는 거죠. 13 뒤에 써있는 ;는 이 명령의 끝이다라는 의미입니다.

다음 24번째 줄. Setup()이라고 써있는 부분은 스케치를 실행시키면 딱 한 번 실행하는 부분이라는 설명입니다.

26번째 줄을 살펴보죠.

void
setup()   { 

맨앞의 것은 일단 무시하고, setup()이라는 게 있고 그다음 { 표시가 있습니다. 이것은 setup()이라는 게 관할을 시작하는 부분이라는 뜻입니다. 좀더 내려가서 29번째 줄을 보면 }가 나옵니다. 이건 관할을 끝내겠다는 의미입니다. 즉, setup()은 { 에서 }까지 관리하겠다는 얘기지요.

{}안의 내용을 보면 주석이 달려있네요.

재패니노의 디지털 핀을 출력모드로 쓰겠다는 것입니다. 출력모드가 뭐냐고요? 전기를 내보내겠다는 의미입니다. 꼬마전구를 켜려면 건전지를 연결해야하는 것처럼, 재패니노를 전기를 내는 장치로 만들겠다는 의미입니다.

pinMode(ledPin, OUTPUT);

아두이노 홈페이지에서 설명을 찾아봅시다. (http://arduino.cc/en/Reference/PinMode )
사용방법은 pinMode(핀 번호, 모드) 라고 나와있습니다.
몇 번째 핀을 어떤 모드로 쓰는지를 재패니노에 알려주는 명령입니다. 위에서 설명했지만, OUTPUT이라고 쓰면 전기를 내보내는 장치로 쓰겠다는 것이고, INPUT이라고 쓰면 전기를 받아들이는 장치로 쓰겠다는 의미입니다.
ledPin은 앞에서 설명한대로 13을 의미합니다. ledPin=13이니까 pinMode(13, OUTPUT); 라고 바꿔 써도 상관없습니다.

즉 지금까지의 흐름을 보면, 재패니노를 처음 쳐서 13번째핀을 출력용으로 쓴다고  약속잡아놓은 것입니다.
그런 약속은 한 번만 잡으면 되니까, setup()안에 써놓은 것이고요.

자, 이제 그 밑으로 내려갑시다.
31, 32번째 줄에 또 설명이 써있네요.

loop() 명령은 아두이노에게 전기만 넣어주면 계속해서 반복 실행된다.라고 적혀 있습니다.

자기가 재패니노에게 시키고 싶은 일은 이제 여기다 써놓으면 됩니다. 위의 setup()과 마찬가지로 { 과 } 사이에 써두면 됩니다.

밑으로 내려가죠. 36번째 줄.

digitalWrite(ledPin, HIGH);

아까처럼 아두이노 홈페이지 설명(http://www.arduino.cc/en/Reference/DigitalWrite )을 보면, digitalWrite(핀 번호, 출력 값)이라고 되어있습니다. ledPin은 아까 말한 것과 동일하게 13으로 바꿔보면 되고, HIGH전기를 내보내겠다는 의미입니다. 즉, 13번째 핀에 붙어있는 LED를 켜야하니 거기로 전기를 내보내라는 말이죠.


그 다음 37번째 줄.

delay(1000);

delay는 말 그대로 지금은 곤란하다, 기다려 달라는 의미입니다. ()안의 값만큼 기다리는데, 괄호안의 1은 1/1000초를 의미합니다. 따라서 1000이라고 썼으니 1000 x (1/1000) = 1, 1초를 기다리라는 의미입니다.
만약 5초를 기다리라고 하고싶다면 5000이라고 써주면 되겠지요.

그 다음 38번째 줄.
36번째 줄과 같습니다만, HIGH 대신 LOW라고 되어있네요. 이건 전기를 내보내지 않겠다는 명령입니다. 13번째 핀에 물려있는 LED로 나가는 전기를 끊어라는 명령입니다.

그 다음 39번째줄은 1초간 기다리라는 의미.

그 다음 줄 }는 loop()의 끝을 의미합니다. 그런데 앞에서 설명한 것처럼 loop()는 전기만 넣어주면 계속 돌아간다고 되어있으니, 다시 36번째줄로 돌아가서 작업합니다. 37->38->39까지 오면 다시 36번째줄로 돌아가고요.
그렇게 전기를 넣어주면 무한 반복합니다.

사용자 삽입 이미지


이렇게해서 재패니노로 불을 켰다 껐다 하게 만들어 봤습니다. 나름 풀어쓴다고 했는데, 쉽게 이해되셨나 모르겠네요.

뭔가 이것저것 붙어서 길게 보이지만 위의 스케치를 설명 떼고 보면 별 거 없습니다.
-
int ledPin =  13;   

void setup()   {                
  pinMode(ledPin, OUTPUT);     
}

void loop()                     
{
  digitalWrite(ledPin, HIGH);  
  delay(1000);                 
  digitalWrite(ledPin, LOW);   
  delay(1000);                 
}
더 줄여 볼까요?
ledPin을 13으로 바꿔달라는 예약을 하지 않고, 그냥 직접 핀번호를 써주면 더 줄일 수 있습니다.
void setup()   {                
  pinMode(13, OUTPUT);     
}

void loop()                     
{
  digitalWrite(13, HIGH);  
  delay(1000);                 
  digitalWrite(13, LOW);   
  delay(1000);                 
}

그럼,
만약 7번째 핀에서 불을 켜려면 어떻게 하면 될까요?

2번째 줄, 7번째 줄, 9번째 줄의 13을 7로 바꿔 주면 됩니다.
pinMode(7, OUTPUT);
digitalWrite(7, HIGH);
digitalWrite(7, LOW);

하지만, 그 위의 것이라면 어떨까요?

int
ledPin =  13;  

int ledPin =  7;  
로 하나만 바꿔 주면 끝나죠.

지금은 3번 밖에 안 고쳐도 됐지만 나중에 수 십 줄, 수 백 줄짜리 스케치에 100군데에 끄고 켜는 게 있다면, 100번넘게 고쳐야할 것입니다. 거기에 어디에 그 명령이 숨었는지 하나 하나 찾는 것도 큰 일이겠지요. 하지만, 이렇게 미리 값을 정하고 그 낱말은 다 약속한 수로 바꿔달라고 정해두면, 처음 약속 잡는 부분만 바꿔주는 것으로 끝납니다.
이렇게 미리 약속을 잡는 것을 변수 선언이라고 합니다. ledPin이라는 낱말은 변수라는 정식 이름이 있습니다. 변수는 말 그대로 변하는 수입니다. 정해진 정수가 아니라 사용자가 맘대로 변하게 만들 수 있다는 것이죠.

참고로 변수는 이름을 ledPin으로 하지 않아도 상관없습니다. 다만 한번 약속한 이름은 스케치 전체에서 똑같이 써야합니다. 예를 들어, int KOMAJEONGOO =  13; 라고 했다면, 뒤에도 digitalWrite(KOMAJEONGOO, LOW); 로 해줘야한단 말입니다.

일단은 요정도로 설명을 끝내겠습니다.

좀더 자세히 공부하겠다고 맘을 먹었다면 C관련 책을 한 권 구해보시는 걸 권합니다. 어찌되었건 기본적인 공부는 해야할테니까요.

그럼 다음에 또 찾아뵙지요. ㅇㅂㅇ/


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

*주1 : 좀더 정확하게 말하자면, 아두이노 개발환경은 오픈소스 프로그래밍 언어 및 환경인 Processing을 변형한 것입니다. 스케치등의 개념도 여기서 왔습니다. http://processing.org




Creative Commons License
2010/06/15 23:06 2010/06/15 23:06