なんでも作っちゃう、かも。

Arduino/Make/フィジカルコンピューティング/電子工作あたりで活動しています。スタバの空きカップを使ったスタバカップアンプなど製作。最近はもっぱらArduinoと3Dプリンタの自作に興味があります。

赤いDuemilanove

Posted by arms22 on 2009年12月03日 2  0

赤いDuemilanove
スイッチサイエンスさんの赤いDuemilanoveプレゼント、抽選で当たっちゃいました!
普通のDuemilanoveは16MHzで動作するけど、こいつはその3倍の48MHzで動作、、しません。ちゃんと16MHzで動きます。サンタ(スイッチサイエンス)さん、クリスマスプレゼントありがとう!


スイッチサイエンス
http://www.switch-science.com/


スポンサーサイト

Arduinoで遊ぼう-AVRライタを使わないBootloaderの書き込み

Posted by arms22 on 2009年02月15日 19  0

今日はAVRライタを使わずにATmega168にBootloaderを書込む方法を教えるよ!

方法は2つ。



今日おすすめするのは2つ目のArduinoそのものをAVRライタに変えてしまう方法だ。


1.スケッチ

まずは次のURLからスケッチをダウンロードしてこよう。
http://www.arduino.cc/playground/uploads/Code/programmer2.txt

このスケッチはArduinoをAVR ISP programmerに変えるのと同時にBootloaderコピー機としても働く。スケッチにはATmega8、ATmega168用のBootloaderが組み込まれていて、Arduino IDEのSerial Monitorから、またArduino単体でもBootloaderのコピーを作ることができるんだ。

早速、スケッチをアップロードしてBootloaderを書込んでみよう!でもその前に1カ所だけスケッチを修正しておこう。

次のコードはSCKクロックパルスを生成するコードだ。クロックパルスの幅は1usに設定されている。けど実験した結果、1usの設定だと通信が安定しなかったので10usの幅に変更した。
#define PULSE_SCK(level)  { *sckport |= sckbit; delayMicroseconds(1); *sckport &= ~sckbit; delayMicroseconds(1); }

次のようにdelayMicroseconds関数の引数を10にかえる。
#define PULSE_SCK(level)  { *sckport |= sckbit; delayMicroseconds(10); *sckport &= ~sckbit; delayMicroseconds(10); }


スケッチを修正したらVerifyしてUpload to I/O Boardだ。


2.接続
ArduinoとATmega168をこんな感じで接続!
arduino-atmega168-connect.png
pin10 - pin1 (Reset)
pin11 - pin17 (MOSI)
pin12 - pin18 (MISO)
pin13 - pin19 (SCK)
+5V - pin7 (Vcc)
GND - pin8 (GND)


3.Bootloaderの書き込み
Arduino IDEを立ち上げてSerial Monitorを開く。ボーレートは19200 baudに設定する。まず"*s"と入力して送信。ArduinoとATmega168は正しく接続されていれば次のような表示がでるはずだ。
SIGNATURES1e,94,06,ff,
次に"*A"とコマンドを入力して送信。
Writing mega48/88/168 fuses: extended=11111000high=11011111, low=11101111... (2k bootloader at reset, 1xcrystal clock) done.
これでFuseビットの書き込みが完了する。

最後に"*a"とコマンドを入力して送信。
Erase chip... 00... done.
Installing atmega168 serial bootloader at 1C00... ... done.
チップが消去されて、Bootloaderの書き込みが行われる。


色々、Bootloaderの書き込み方法があるけど、これが一番簡単だね!



Making Things Talk -Arduinoで作る「会話」するモノたち
Tom Igoe
オライリージャパン
売り上げランキング: 6278
価格: ¥ 3,990




Arduinoで遊ぼう - カラーセンサー(TAOS TCS230)

Posted by arms22 on 2009年01月31日 6  0

Arduino with TAOS TCS230 Color Sensor #1

Arduino with TAOS TCS230 Color Sensor #2

千石電商日本橋で購入したTAOSのカラーセンサIC、「TCS230」をArduinoで使ってみました。

TCS230は光-周波数コンバータで、光の強さを矩形波(デューティサイクル50%)で出力するICです。矩形波の周波数は光の強さに正比例しています。TCS230は8x8のフォト・ダイオード・アレイをもち、そのうち16個は赤フィルタ、16個は青フィルタ、16個は緑フィルタ、16個はフィルタなしとなっている。フォト・ダイオードをS2/S3端子で選択し、OE端子をLowにするとOUT端子から光の強さ応じた周波数で矩形波が出力される。TCS230から出力される矩形波はArduinoのpulseIn関数で読み取る。

例によってまたまたライブラリを作成しました。

ダウンロード: ColorSensorライブラリ



http://xfind.hp.infoseek.co.jp/electric/arduino/ColorSensor001.zip

使い方
1.ColorSensorライブラリをarduino-0012/hardware/libraries/以下にコピーする。
2.新しいスケッチを作成する。
3.メニューからSketch > Import Library > ColorSensorを選択する。

サンプルスケッチ:


#include <ColorSensor.h>

uint8_t _pinLED = 5;

ColorSensor myCS = ColorSensor(4,3,2);

void setup(){
  pinMode(_pinLED, OUTPUT);
  digitalWrite(_pinLED, LOW);
  Serial.begin(9600);
}

void loop(){
  // LED on
  digitalWrite(_pinLED, LOW);
  delay(50);

  // measure color
  myCS.measureColor();

  // LED off
  digitalWrite(_pinLED, HIGH);

  Serial.print("Red = ");
  Serial.print(myCS.redValue());

  Serial.print("Hz Green = ");
  Serial.print(myCS.greenValue());

  Serial.print("Hz Blue = ");
  Serial.print(myCS.blueValue());
  Serial.println("Hz");

  delay(900);
}

1秒間隔で各色ごとの光の強さを周波数に変換しシリアルでPCに送信しています。測定前にはLED点灯させ測定対象に光をあてます。そしてその反射光を調べます。測定対象とカラーセンサの距離によって出力される周波数が変わるのを確認してみてください。

各色フィルタ毎に光の強さに対する感度が異なります。光の強さと周波数の関係は次の表のとおりです。
Snap Shot TAOS TCS230 Datasheet
Irradiance responsivityの行を見てください。赤フィルタはテストコンディションがλp=640nmの場合、550Hz/(μW/cm2)の感度をもち、それ以外の場合は91~26Hz/(μW/cm2)の感度をもっています。次にOutput frequencyの行を見てください。テストコンディションがEe=34.6μW/cm2、λp=640nmの場合、出力は19kHz(typ)となっています。この出力周波数19kHz(typ)を赤フィルタの感度550Hz/(μW/cm2)で割ると、34.6μW/cm2となります。

またカラーセンサは赤外線(640nm以上)にも反応するため正確な色判定を行いたい場合、外付けの赤外線フィルタを取り付ける必要があります。

TAOS TCS230 データシート
http://www.cohsei.co.jp/PDF/taospdf/PRODUCTS/TCS230-e32.pdf



Arduinoをはじめようキット
スイッチサイエンス
売り上げランキング: 2431
おすすめ度の平均: 4.5
4 USBはB端子です
5 ここから大ジャンプは無理だけど



Arduinoで遊ぼう - フルカラーLED

Posted by arms22 on 2008年11月25日 4  0

Make Tokyo Meeting 02で買ってきたArduino Duemilanoveで遊んでみました。Arduinoの説明や環境構築については下記URLを参照してください。

統合開発環境とUSBドライバをインストールして、Arduino DuemilanoveをMacに繋げば環境構築完了。試しにLED点滅のサンプルをダウンロードするとすぐにLEDの点滅が開始される。サンプルを少し変えて、LEDの点滅周期を変えるなんてこともすぐにできてしまう。

proc_sketch_081118a_screen.png
さっそく何か作ってみた。↑のようなカラーチャートから色を読み取りその色情報をArduino Duemilanoveに送るProcessingアプリを作成した。カラーチャート上でマウスを動かすとカーソルの下の色を読み取り、Arduino Duemilanoveに送信する。Arduino Duemilanoveは送られて来た色情報を元にフルカラーLEDを点灯させる。

新日本無線のNJU6061というLEDドライバICがある。PWM制御型の3色LEDドライバだ。このICの一部の機能をArduino Duemilanoveで実装して、フルカラーLEDを光らせている。

簡易版PWM制御型3色LEDドライバ仕様

  • 各色16step(内部256step*3色)
  • 波形補正機能(非線形補正を行い自然に明るさが変わっているように見せる)
  • UART 9600bps
制御コマンドは次のデータセットのコマンドのみ実装する。
  • LED1 PWMデータセット 0110 xxxx
  • LED2 PWMデータセット 0111 xxxx
  • LED3 PWMデータセット 1000 xxxx

回路
Arduino DuemilanoveのPWM 3にRED、PWM 5にGREEN、PWM 6にBLUE、カソードコモンをGNDに接続する。

サンプルスケッチ
#define INS_MASK      0xf0
#define DAT_MASK      0x0f
#define INS_LED1_DATA 0x60
#define INS_LED2_DATA 0x70
#define INS_LED3_DATA 0x80

int LED1_step;
int LED2_step;
int LED3_step;

#define LED1_port 3
#define LED2_port 5
#define LED3_port 6

const int step_to_duty[] = {
     0,  2,  4,  6,
    10, 16, 26, 38,
    54, 72, 92,118,
   146,180,216,255,
};

void setup(){
  LED1_step = 0;
  LED2_step = 0;
  LED3_step = 0;
  pinMode(LED1_port,OUTPUT);
  pinMode(LED2_port,OUTPUT);
  pinMode(LED3_port,OUTPUT);
  digitalWrite(LED1_port, 0);
  digitalWrite(LED2_port, 0);
  digitalWrite(LED3_port, 0);
  Serial.begin(9600);
}

void loop(){
  if(Serial.available() > 0){
    int ledIns = Serial.read();
    if((ledIns & INS_MASK) == INS_LED1_DATA){
      LED1_step = ledIns & DAT_MASK;
      if(!LED1_step){
        digitalWrite(LED1_port, LOW);
      }else{
        analogWrite(LED1_port, step_to_duty[LED1_step]);
      }
    }
    else if((ledIns & INS_MASK) == INS_LED2_DATA){
      LED2_step = ledIns & DAT_MASK;
      if(!LED2_step){
        digitalWrite(LED2_port, LOW);
      }else{
        analogWrite(LED2_port, step_to_duty[LED2_step]);
      }
    }
    else if((ledIns & INS_MASK) == INS_LED3_DATA){
      LED3_step = ledIns & DAT_MASK;
      if(!LED3_step){
        digitalWrite(LED3_port, LOW);
      }else{
        analogWrite(LED3_port, step_to_duty[LED3_step]);
      }
    }
  }
}


サンプルスケッチ: PWM制御型3色LEDドライバ
http://xfind.hp.infoseek.co.jp/electric/arduino/sketch_081118a.zip

Make日本語版 Vol.04記事「初めてのArduino」PDF公開
http://jp.makezine.com/blog/2008/11/make_lrn_arduino.html

フィジカル・コンピューティング: Arduinoを使おう
http://www.eleki-jack.com/FC/arduino/

建築発明工作ゼミ2008: Arduino
http://kousaku-kousaku.blogspot.com/2008/07/arduino.html

四谷工作研究所: Arduino
http://www.artstudium.org/kousaku/arduino/

Arduino.cc
http://www.arduino.cc/



Arduino Uno SMD
Arduino Uno SMD
posted with amazlet at 11.02.04
スイッチサイエンス
売り上げランキング: 21734



該当の記事は見つかりませんでした。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。