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

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

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で遊ぼう - ウォッチドッグタイマを使う

Posted by arms22 on 2009年01月25日 12  0

Arduinoでウォッチドッグタイマを使うにはavr/wdt.hをインクルードし、wdt_enable関数、wdt_reset関数を使う。

#include <avr/wdt.h>

void setup(){
  wdt_enable(WDTO_2S);
}

void loop(){
  do_something();
  wdt_reset();
}
ウォッチドッグタイマは計時が完了したら割り込み、リセット、または割り込み+リセットを発生させる。wdt_enable関数は計時完了時にリセットを発生させる様、ウォッチドッグタイマを設定する。しかしリセットを発生させず割り込みだけ発生させるようにすれば簡易タイマとして、またウォッチドッグの割り込みはシステムをスリープから起動させる為にも使える。
例によってウォッチドッグタイマを使う為のWatchdogライブラリを作成した。

ダウンロード:Watchdogライブラリ
http://xfind.hp.infoseek.co.jp/electric/arduino/Watchdog001.zip

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

サンプルスケッチ:ウォッチドッグタイマ
#include <Watchdog.h>

void setup(){
  Watchdog::systemResetEnable(true);
  Watchdog::enable(Watchdog::TimeOut2s);
}

void loop(){
  do_something();
  Watchdog::timerReset();
}

サンプルスケッチ:簡易タイマ
1秒周期で繰り返しcycle1s関数が呼び出されます。
#include <Watchdog.h>

void cycle1s(void){
  static bool flag = 1;
  digitalWrite(13,flag);
  flag = !flag;
}

void setup(void){
  pinMode(13,OUTPUT);
  Watchdog::attachInterrupt(cycle1s);
  Watchdog::systemResetEnable(false);
  Watchdog::enable(Watchdog::TimeOut1s);
}

void loop(void){
}

サンプルスケッチ:スリープからの復帰
ウォッチドッグ割り込みによりスリープ動作から復帰し、LEDを0.5秒周期で点滅させます。
#include <Watchdog.h>
#include <Sleep.h>

void setup() {
  pinMode(13,OUTPUT);
  Watchdog::systemResetEnable(false);
  Watchdog::enable(Watchdog::TimeOut250ms);
}

void loop() {
  digitalWrite(13,HIGH);
  Watchdog::timerReset();
  Sleep::powerDown();

  digitalWrite(13,LOW);
  Watchdog::timerReset();
  Sleep::powerDown();
}

avr-libc: Watchdog timer handling
http://www11.ocn.ne.jp/~akibow/avr-libc-user-manual-1.4.3/group__avr__watchdog.html


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

Arduinoで遊ぼう - digitalWrite関数をハックする

Posted by arms22 on 2009年01月25日 0  0

digitalWrite関数は指定したピンにHIGHまたLOWを出力する関数だ。Arduinoボード上に書かれているピン番号をdigitalWrite関数に指定すればそのピンの出力が変わる。

AVRマイコンのどのポートのどのビットかなんて気にしなくても、Arduinoボード上のピン番号を指定するだけでいい。AVRマイコンの違いをうまく吸収し、デジタルポートというシンプル機能を提供してくれる。

その反面、ピン1つ出力を変化させるのに1回のdigitalWrite関数の呼び出しが必要で、高速なピン制御には向かない。今回、そんなdigitalWrite関数をハックし、高速なピン制御の方法を紹介する。

まずはdigitalWrite関数の実装を見てみよう(arduino-0012/hardware/cores/arduino/wiring_digital.c)。

void digitalWrite(uint8_t pin, uint8_t val)
{
  uint8_t timer = digitalPinToTimer(pin);
  uint8_t bit = digitalPinToBitMask(pin);
  uint8_t port = digitalPinToPort(pin);
  volatile uint8_t *out;

  if (port == NOT_A_PIN) return;

  // If the pin that support PWM output, we need to turn it off
  // before doing a digital write.
  if (timer != NOT_ON_TIMER) turnOffPWM(timer);

  out = portOutputRegister(port);

  if (val == LOW) *out &= ~bit;
  else *out |= bit;
}
注目すべきポイントは三つ。digitalPinToBitMask関数、digitalPinToPort関数、portOutputRegister関数だ。
digitalPinToBitMask関数はピン番号をレジスタのビットマスクに、digitalPinToPort関数はピン番号をポート番号に、portOutputRegister関数はポート番号をポートレジスタのアドレスに変換する。これらの処理は一度行ってしまえばよくて、2度目以降はピン番号から得られたポートレジスタに直接書込むことで高速にピン制御を行うことができる。

実際にshiftOut関数を高速化してみた。これで3倍は速くなっているはず。
void shiftOut(uint8_t dataPin,
              uint8_t clockPin,
              uint8_t bitOrder,
              byte val)
{
  int i;
  uint8_t bit_data = digitalPinToBitMask(dataPin);
  uint8_t bit_clock = digitalPinToBitMask(clockPin);
  volatile uint8_t *out_data = portOutputRegister(digitalPinToPort(dataPin));
  volatile uint8_t *out_clock = portOutputRegister(digitalPinToPort(clockPin));
  
  for (i = 0; i < 8; i++) {
    if (bitOrder == LSBFIRST){
      if(val & (1 << i))
        *out_data |= bit_data;
      else
        *out_data &= ~bit_data;
    }else{
      if(val & (1 << (7 - i)))
        *out_data |= bit_data;
      else
        *out_data &= ~bit_data;
  }
        
  *out_clock |= bit_clock;
  *out_clock &= ~bit_clock;
  }
}
オリジナルのコード(arduino-0012/hardware/cores/arduino/wiring_shift.c)。
void shiftOut(uint8_t dataPin,
              uint8_t clockPin,
              uint8_t bitOrder,
              byte val)
{
  int i;

  for (i = 0; i < 8; i++) {
    if (bitOrder == LSBFIRST)
      digitalWrite(dataPin, !!(val & (1 << i)));
    else
      digitalWrite(dataPin, !!(val & (1 << (7 - i))));
      
    digitalWrite(clockPin, HIGH);
    digitalWrite(clockPin, LOW);
  }
}
今回、紹介した高速化はArduino 012でのみ動作確認しています。012以降のバージョン、また012以前のバージョンにおいて動作するかどうかは未検証です。またdigitalWrite関数をハックし内部関数の直接呼び出しを行っています。012以降のバージョンでこれらの関数がなくなってしまう可能性もあり、著しく互換性を落としてしまう諸刃の剣であることもご理解ください。
digitalPinToBitMask関数、digitalPinToPort関数、portOutputRegister関数を使うにはpins_arduino.hをインクルードする必要があります。


Arduino - DigitalWrite
http://www.arduino.cc/en/Reference/DigitalWrite


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


Arduinoで遊ぼう - Arduinoをスリープさせる

Posted by arms22 on 2009年01月19日 4  0

Arduinoでスリープ機能を使うにはavr/sleep.hをインクルードし、set_sleep_mode関数、sleep_mode関数を使う。こんな感じ。

#include <avr/sleep.h>

void loop() {
  set_sleep_mode(SLEEP_MODE_IDLE);
  sleep_mode();  //ここでsleep
}
このままでも特に問題ないんだけど、生のavr-gccが見えてよくない。Arduinoっぽくないのでスリープ機能を使うためのSleepライブラリを作成した。

ダウンロード: Sleepライブラリ
http://xfind.hp.infoseek.co.jp/electric/arduino/Sleep001.zip

使い方
1.Sleepライブラリをarduino-0012/hardware/libraries/以下にコピー。
2.新しいスケッチを作成。
3.メニューからSketch > Import Library > Sleepを選択。
4.スリープさせたいタイミングでスリープメソッドを呼ぶ。

Sleepライブラリでサポートしているスリープメソッドは次の6つ。
 メソッド
アイドルモードidle
ADCノイズ低減モードnoiseReduction
パワーセーブモードpowerSave
スタンバイモードstandBy
パワーダウンモードpowerDown
パワーダウン+外部割り込みによる復帰モードpowerDownAndWakeupExternalEvent


各スリープ動作に於ける動作クロック範囲と復帰起動要因
wakeup-source-in-sleep-modes.png


サンプルスケッチ:パワーダウン+外部割り込みによる復帰
#include <Sleep.h>

void setup() {
  pinMode(2,INPUT); // INT0
  pinMode(13,OUTPUT); // LED
}

void loop() {
  digitalWrite(13,HIGH); // sets the LED on
  delay(3000); // waits for a second
  digitalWrite(13,LOW);
  Sleep::powerDownAndWakeupExternalEvent(0);
}
パワーダウンモードと外部割り込み(INT0)による復帰起動のサンプルを解説します。pin2は外部割り込み(INT0)の端子です。入力モードに設定します。pin13はLEDに接続されています。出力に設定します。スケッチでは起動後LEDを3秒点灯させてから、LEDを消灯し、外部割り込み(INT0)が発生するまでパワーダウンモードに入ります。外部割り込み(INT0)が発生したら復帰起動します。
powerDownAndWakeupExternalEventメソッドの引数は外部割り込みの番号です。

Arduino Duemilanove Wake Up on a External Event
上記スケッチ用の接続図です。pin2を10kΩ程度の抵抗でプルアップし、プッシュスイッチ経てGNDに接続します。スイッチオフ時はプルアップ抵抗によりpin2はHiになり、スイッチオン時はpin2はGNDに接続されLowになります。外部割り込み(INT0)はpin2のHi→Low変化Lowレベルによって発生します。



サンプルスケッチ: パワーダウン+外部割り込みによる復帰
http://xfind.hp.infoseek.co.jp/electric/arduino/sketch_090115a.pde

avr-libc: : Power Management and Sleep Modes
http://www11.ocn.ne.jp/~akibow/avr-libc-user-manual-1.4.3/group__avr__sleep.html

Arduino Playground - ArduinoSleepCode
http://www.arduino.cc/playground/Learning/ArduinoSleepCode




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

Arduinoで遊ぼう - 日付と時刻を表示する

Posted by arms22 on 2009年01月18日 20  0

Arduino Duemilanove with LCD(HD44780) #2
前回のキャラクタLCDモジュールに日付と時刻を表示させてみました。正確な時刻が必要だったり、Arduinoの電源を切った後も時刻を保持したい場合は外付けのRTC(リアルタイムクロック)を使用します。今回の実験では正確な時刻やバックアップは必要なかったので、Arduino.ccのDateTimeライブラリを使用しました。DateTimeライブラリはこちらからダウンロードできます。

DateTimeライブラリはArduinoに日付と時刻を提供するソフトウェアライブラリです。外付けのハードウェアは必要ありません。起動時に1度、外部から時刻情報を設定してやる必要があります。また1日に数秒~十数秒時間がずれます。Arduinoがリセットされれば時刻は無効になります。


使い方
1.DateTimeライブラリをarduino-0012/hardware/libraries/以下にコピーします。
※ DateTimeライブラリにはDateTimeとDateTimeString、2つのライブラリが含まれています。2つともlibrariesにコピーしてください。
※ DateTimeライブラリの使い方はサンプルスケッチを参考にしてください。


サンプルスケッチ

#include <DateTime.h>
#include <DateTimeStrings.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd = LiquidCrystal(12,11,10,5,4,3,2);
time_t prevtime;

void setup() {
  prevtime = DateTime.makeTime(0,0,9,17,1,2009);
  DateTime.sync(prevtime);
}

void loop() {
  while( prevtime == DateTime.now() ){
    delay(100);
  }
  DateTime.available();
  digitalClockDisplay();
}

void digitalClockDisplay(){
  lcd.setCursor(0,0);
  lcd.print(DateTimeStrings.dayStr(DateTime.DayofWeek));
  lcd.print(" ");
  lcd.print(DateTimeStrings.monthStr(DateTime.Month));
  lcd.print(" ");
  lcd.print(DateTime.Day,DEC);
  lcd.print(" ");
  lcd.print(DateTime.Year+1900,DEC);

  lcd.setCursor(0,1);
  lcd.print(" ");
  lcd.print(DateTime.Hour,DEC);
  printDigits(DateTime.Minute);
  printDigits(DateTime.Second);
}

void printDigits(byte digits){
  lcd.print(":");
  if(digits < 10)
    lcd.print('0');
  lcd.print(digits,DEC);
}
setup関数で今の時間を設定します。本来パソコンなど外部機器から時刻情報を設定するのですが、今回はDateTimeライブラリのmakeTimeメソッドで時間を作成しました。時間の設定はsyncメソッドを行います。

prevtimeには1970年1月1日からmakeTimeで指定した日付時刻(2009/1/17 9:00)までの経過秒数が格納されています。

loop関数では時間が更新されるのを待って、digitalClockDisplay関数でキャラクタLCDモジュールに時間情報を表示しています。
時間情報の取得はDateTimeのHour,Minute,Second,Year,Month,Dayプロパティを参照します。これらのプロパティはavailableメソッドで更新されます。

2009/01/18追記
DateTimeStringクラスのdayStrメソッド、monthStrメソッドを使えば曜日、月の英語名が得られます。DateTimeStrings.cppの次のマクロを有効にすれば長い名前が得られます。
dt_LONG_MONTH_STRINGS
dt_LONG_DAY_STRINGS
次のマクロを有効にすれば短い名前が得られます。
dt_SHORT_DAY_STRINGS
dt_SHORT_MONTH_STRINGS



サンプルスケッチ: DateTime
http://xfind.hp.infoseek.co.jp/electric/arduino/sketch_090116b.pde

Arduino Playground - DateTime
http://www.arduino.cc/playground/Code/DateTime

Arduinoで遊ぼう - キャラクタLCDモジュール
http://arms22.blog91.fc2.com/blog-entry-203.html



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



Beagle Board関連情報まとめ

Posted by arms22 on 2009年01月13日 2  0

Beagle Boardはテキサス・インスツルメンツの戦略マーケティング担当者がボランティア・グループとともに生み出した、3インチ四方でUS$149の小型・高性能・低消費電力のシングル・ボード・コンピューター。ARM Cortex-A8ベースでTMS320C64x+ DSP(430MHz)とOpenGL ES 2.0 2D/3Dグラフィックス・プロセッサー・コアPowerVR SGX530を集積し、128MB DDR RAM、256MB NANDフラッシュ・メモリー、256KB L2 キャッシュを内蔵したOMAP3530プロセッサー(600MHz/1200 Dhrystone MIPS)を搭載している。USB 2.0 OTG、DVI-D、S-Video、MMC+/SD/SDIO、ステレオ入出力、RS-232C、JTAG、I2C、I2S、SPIなどのコネクターを備えていて、Linuxが動くという。

Genie’s Blog 3.0
http://netsynth.org/blog/?p=271=1


兎に角パワフルな組み込みLinuxボードのようです。今度、仕事でも使えるか検討してみよう。



追記2010/1/26

Redstar - Beagle Board直販
http://www.redstar.co.jp/bb.htm

Beagle Board で Linux をブートする
http://www.ibm.com/developerworks/jp/linux/library/l-beagle-board/index.html

BeagleBoard-JP
http://elinux.org/BeagleBoard-JP



Cerevo tech blog
http://tech.cerevo.com/blog/archives/tag/beagleboard

Beagle Boardの紹介から、購入、Linuxの動作まで丁寧に解説されています。とりあえずここを読んでおけば導入で躓くことはないはず。


BeagleBoard.jpのホームページ予定地
http://www.beagleboard.jp/

BeagleBoard.jp blog
http://blog.beagleboard.jp/

BeagleBoard.org
http://beagleboard.org/


本家BeagleBoardのページと日本BeagleBoardのページの予定地。日本ブログの方ではOMAP3530の3つのコア(ARM社のCortex-A8、Imagination Technologies社のPowerVR SGX 530、TI社のC64x+ & ビデオアクセラレータ(IVA2))の解説があります。


BeagleBoardでAndroidを拡張してみる
http://groups.google.co.jp/group/android-group-japan/browse_thread/thread/266881d37a70e880?pli=1

Android-Embedded-Japan: BeagleBoard
http://groups.google.co.jp/group/android-embedded-japan/browse_thread/thread/f08fbcd351e941a3


部活動録: BeagleBoard
http://lbdaberi.blogspot.com/search/label/BeagleBoard



Beagle Boardが届きました
http://www.yapan.org/diary/2009/01/beagle-boardが届きました.html

SDカードからBeagle Boardをブートする
http://www.yapan.org/diary/2009/01/sdカードからbeagle-boardをブートする.html

Ångströmを起動してみた
http://www.yapan.org/diary/2009/01/ångströmを起動してみた.html

Gainer、Funnel I/O作者の小林さんのブログ。Ångströmの起動まで一通り試されておられます。



今のところ一通り動作確認させるための情報はそろっている感じ。大まかな作業の流れは次の通り。

1.Beagle Board購入(Digi-Key)
2.必要機材購入(HDMI-DVIケーブル、シリアルケーブル)
3.ターミナルで動作確認
4.Ångström起動、動作確認
5.Android起動、動作確認(おまけ)

Beagle Boardとのシリアル接続にちょっと変わった(?)ケーブルが必要そう。電子工作している人なら簡単に自作できる。

2009/1/14追記
TIのBeagleBoardとDLP Pico Projectorで、どこでもLinux
http://jp.makezine.com/blog/2009/01/ti_beagleboard_dlp_pico_projec.html

BeagleBoardとArduinoを搭載したアイアンマンスーツ
http://jp.makezine.com/blog/2008/12/iron_man_suit_powered_by.html







初めてのAndroid
初めてのAndroid
posted with amazlet at 09.06.11
Ed Burnette
オライリージャパン
売り上げランキング: 849
価格: ¥ 2,310




Arduinoで遊ぼう - キャラクタLCDモジュール

Posted by arms22 on 2009年01月12日 0  0

2013/2/27
最新記事はこちら! >> ArduinoでキャラクタLCDに文字を表示させる


Arduino Duemilanove with LCD(HD44780)
一年程前に共立電子デジットで買ったHD44780コンパチのキャラクタLCDモジュールをArduinoで制御してみました。Arduino 012にはLiquidCrystalというHD44780(or コンパチ)用のライブラリが含まれています。LiquidCrystalライブラリを使えば簡単にキャラクタLCDモジュールを使うことができます。

使い方
1.新しいスケッチを作成します。
2.メニューからSketch > Import Library > LiquidCrystalを選択します。
3.次のようにArduinoとキャラクタLCDモジュールを接続します。
LCD.jpg
※Arduino日本語リファレンスより。

サンプルスケッチ

#include <LiquidCrystal.h>

LiquidCrystal lcd = LiquidCrystal(12,11,10,5,4,3,2);

void setup(){
  lcd.print("Hello Arduino");
}

void loop(){
}

コンストラクタにキャラクタLCDモジュールのRS、R/W、Enable、D4~7端子と接続するArduinoの端子番号を指定します。あとはprintメソッドで文字列を送信します。
キャラクタLCDモジュールは改行コードを受け取っても自動的には改行は行わないので、2行目に文字を表示する場合は、setCursorメソッドを使ってカーソルを2行目に設定してやる必要があります。


サンプルスケッチ: LiquidCrystal
http://xfind.hp.infoseek.co.jp/electric/arduino/sketch_090110a.zip

HD44780搭載キャラクタLCDモジュール
http://arms22.blog91.fc2.com/blog-entry-59.html

Arduino日本語リファレンス: LiquidCrystal
http://www.musashinodenpa.com/arduino/ref/index.php?f=1&pos=718

マイクロファンラボ: 文字LCDの利用
http://www.microfan.jp/arduino/clcd


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


Arduinoで遊ぼう - 秋月電子32x16LEDドットマトリクス(2)

Posted by arms22 on 2009年01月12日 0  0

前回の続き。今回は秋月電子のLEDドットマトリクス表示基板を3つカスケード接続して、Arduinoで制御しています。
Arduino Duemilanove with 96×16 LED Matrix Cascade
前回リリースしたLEDドットマトリクス表示基板制御用のライブラリを更新しました。カスケード接続する表示基板の数に合わせて、ヘッダファイルの次のマクロの値を変更します。

#define AKI_MATRIX_CASCADE	(1)


サンプルスケッチ
#include <AkiMatrix.h>

/*
  Hello Matrix
 by arms22 <http://arms22.blog91.fc2.com/>
 
 Demonstrates the use of the AkiMatrix library
 
 pin 0: sin1 (row)
 pin 1: sin2 (led1)
 pin 2: sin3 (led2)
 pin 3: clk
 pin 4: latch (inverted)
 pin 5: strob
 */
AkiMatrix myMatrix = AkiMatrix(0,1,2,3,4,5);

void setup()
{
  int x,y;
  for(y=0;y<AKI_MATRIX_NUMBER_OF_ROWS;y++){
    for(x=y&1;x<AKI_MATRIX_NUMBER_OF_COLS;x+=2){
      myMatrix.bitWrite(x,y,HIGH);
    }
  }
  myMatrix.setOutputEnable(true);
}

void loop()
{
  myMatrix.hsync();
  delay(1);
}


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

Arduinoで遊ぼう - LEDドットマトリクス
http://arms22.blog91.fc2.com/blog-entry-206.html



Arduinoをはじめよう (Make:PROJECTS)
Massimo Banzi
オライリージャパン
売り上げランキング: 3176



今年は何を作る?今何を作ってる?

Posted by arms22 on 2009年01月10日 0  0

Make: Japan:のブログの記事を読んで僕も今年何をMakeするか発表しちゃうよ!
※あきたり、面倒くさくなって途中で放り出しちゃうかもしれないけど。。

Arduino Duemilanove with 32×16 LED Matrix

まず1つ目。電車の発車時刻を表示する電光掲示板。これは僕が専門学生のころ知り合った友人と一緒に開発しているプロジェクトだ。もっぱら最寄り駅の発車時刻を表示するだけなんだけど、こいつを沢山スタックさせて本物さながらの電光掲示板を作るのが目標なんだ。
家庭やオフィス、公共機関(病院や区役所など)にこいつがあれば、あわてて駅に走ることもなくなると思うよ。

stbpwramp_front
2つ目。スターバックスの紙コップを再利用したアンプ内蔵スピーカ。去年は3つ(!)も作ったのに作り方の詳細な手順を公開できなかったので、今年はinstructablesで作り方を紹介したいと思う。もしくはスタバアンプの製作キットを作るとか。。


あと気になるところでBeagle Board。最近あちこちで話題になってます。こいつもちょこっとさわってみようと思う。

3つ目はBeagle BoardとWEBカメラを使った冷蔵庫の在庫確認システム。USBカメラとノートPCを組み合わせて作っちゃった人がいるみたいだけど、Beagle Boardを使えばもっとコンパクトで低消費電力のものが作れそうな気がする。

ここ最近のBeagle Boardの盛り上がり(Androidを移植したとか、アイアンマンのスーツとか)みてると、Arduino並に導入が簡単でソフトも簡単に作れて、使えるライブラリがいっぱい入ったBeagle Board+Arduino=Beagluinoみたいなボードの登場を予感させられる。



Make: Japan: 今年は何を作る? 今何を作ってる?
http://jp.makezine.com/blog/2009/01/not_new_years_resolutions_what_are.html

自作USBデバイスを開発したい人にオススメの本

Posted by arms22 on 2009年01月09日 0  0

自作USBデバイスを作るにあたって、参考にした本を紹介します。
※今週はあまり作業がすすまなかったので、積読本の消化にあてました。



各種USBコントローラの使い方・解説、USBデバイスドライバの開発、USBデバイスの設計&製作例が沢山載っています。回路図も沢山あるので、使ってみたいUSBコントローラの回路図がすぐに役に立つと思います。USBN9602/03/04、EZ-USB SX2、EZ-USB FX2、USBホストSL811FC、FT8U232/245など。




↑の本と似通った内容なのでどちらか1冊あれば十分かな。中身をみて参考にしたいコントローラの解説があるほうを選べばよい。FT232/245/2232の解説が欲しい人はこっちかな。。けどFT232はBMのほうだったり、、BMのほうはシンクロナスビットバンモードが使えません。


PICで楽しむ USB機器自作のすすめ
後閑 哲也
技術評論社
売り上げランキング: 59279
価格: ¥ 2,814


PICで作ることが決まっているならこれ!本書ではUSBフレームワーク、USB関連レジスタの説明・使い方が丁寧に解説されています。本書で解説されているUSBフレームワークのバージョンは1.1です。最新のUSBフレームワークのバージョンは2.0。バージョン2.0ではファイル構成が大きく変わっていますが、コード自体それほど変わっていなさそうなので、本書の解説は役に立ちます。



なんでも作っちゃう、かもストア: USB関連書籍
http://astore.amazon.co.jp/nandemotukuty-22?_encoding=UTF8&node=29

なんでも作っちゃう、かも。: 自作USBデバイス
http://arms22.blog91.fc2.com/blog-category-24.html

なんでも作ってみたい人にオススメの本-Make:

Posted by arms22 on 2009年01月06日 0  0

冬休みの間に読もうと思ってまとめて買っておいた「Make: Technology on Your Time」。まとまった時間がとりづらくてじっくり読めていないけど、とりあえず全部よんだ。気になったプロジェクトがいくつかあったので、作ってみたいリストに加えておいた。

1つ目は、Vol 05の服の色に合わせて色が変わるペンダント。
ケース製作が大変そうだけど、LilyPad Arduinoを使えばそれなりに見栄えがするものができそう。あと共立電子で売っているLEDランプ型GaAs系太陽電池と組み合わせれば電池レスにできるかもしれない。

2つ目は、Vol 04の風力発電機。
発電用のモータの入手と設置場所が最大の課題だけど作ってみたい。まずは自転車に取り付けられる小型の風力発電機を作ってLEDライトをつける所から始めようかな。


電子工作をはじめて「なにを作ったらいいのかわからない人」、「とりあえずなんでも作ってみたいって人」はMake:のプロジェクトを真似するところからはじめると楽しいと思うよ。

Make: Technology on Your Time Volume 05Make: Technology on Your Time Volume 04Make: Technology On Your Time Volume 03
Make: Technology on Your Time Volume 05
¥ 1,575
Make: Technology on Your Time Volume 04
¥ 1,575
Make: Technology On Your Time Volume 03
¥ 1,575

Make: Technology on Your Time Volume 02Make: Technology on Your Time Volume 01
Make: Technology on Your Time Volume 02
¥ 1,575
Make: Technology on Your Time Volume 01
¥ 1,575


Arduinoで遊ぼう - 秋月電子32x16LEDドットマトリクス

Posted by arms22 on 2009年01月03日 9  0

Arduino Duemilanove with 32×16 LED Matrix

秋月電子の32x16LEDドットマトリクス表示基板をArduino Duemilanoveで制御してみました。制御プログラムはArduino IDEで使えるようライブラリにしています。AkiMatrix001.zipを下記URLからダウンロードし、ご自由にお使いください。

Akiduki 32×16 LED Matrix sch
LEDドットマトリクス表示基板の回路図です。表示基板上にはシフトレジスタ(74VHC595)2つ、トランジスタアレイ(TD62783)2つ、16bit定電流LEDドライバ(TB62706)2つが実装されています。表示基板はSIN1、SIN2、SIN3、CLOCK、LATCH、STROBEの6つの信号を使って制御します。

ライブラリの使い方
1.AkiMatrix001.zipを展開し、arduino-0012/hardware/librariesにコピーしてください。
2.Arduino IEDを起動し、メニューからSketch > Import Library > AkiMatrixを選択してください。

サンプルスケッチ

#include <AkiMatrix.h>

const uint8_t hello_tbl[][8] = {
  {9,9,201,47,233,41,201,0},
  {0,20,148,85,84,84,148,0},
  {0,0,1,2,2,2,1,0},
  {0,0,0,0,0,0,0,0},
};

const uint8_t the2009_tbl[][8] = {
  {0,0,0,0,0,0,0,0},
  {0,192,32,0,192,32,224,0},
  {0,24,165,165,164,164,25,0},
  {0,99,148,148,228,132,99,0},
};

/* 
  pin 0: sin1 (row)
  pin 1: sin2 (led1)
  pin 2: sin3 (led2)
  pin 3: clk
  pin 4: latch (inverted)
  pin 5: strob
*/
AkiMatrix myMatrix = AkiMatrix(0,1,2,3,4,5);

void setup()
{
  myMatrix.bitBlt( 0,0,hello_tbl[0],8,8);
  myMatrix.bitBlt( 8,0,hello_tbl[1],8,8);
  myMatrix.bitBlt(16,0,hello_tbl[2],8,8);
  myMatrix.bitBlt(24,0,hello_tbl[3],8,8);
  
  myMatrix.bitBlt( 0,8,the2009_tbl[0],8,8);
  myMatrix.bitBlt( 8,8,the2009_tbl[1],8,8);
  myMatrix.bitBlt(16,8,the2009_tbl[2],8,8);
  myMatrix.bitBlt(24,8,the2009_tbl[3],8,8);
  
  myMatrix.setOutputEnable(true);
}

void loop()
{
  myMatrix.hsync();
  delay(1);
}
コンストラクタには表示基板制御用の端子を6つ(SIN1、SIN2、SIN3、CLOCK、LATCH、STROBE)指定します。

setup関数で表示するパターンを書き込みます。ver001ではbitBlt関数、bitWrite関数をサポートしています。bitBlt関数はまとまったデータの書き込みに、bitWrite関数はドット1つ1つ指定してデータを書き込みます。マトリクスの座標系は左上原点です。
bitmapのフォーマットは次の通り。
dotmatrix_bitmapf.png

setOutputEnable関数でマトリックスの表示を有効にします。
loop関数ではhsync関数を繰り返し呼び出す必要があります。hsync関数を1回呼び出す毎に1行分のデータをシフトレジスタに転送します。


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

サンプルスケッチ: Hello 2009
http://xfind.hp.infoseek.co.jp/electric/arduino/sketch_081230a.zip

Arduinoで遊ぼう - フルカラーLED
http://arms22.blog91.fc2.com/blog-entry-196.html

Arduino - LibraryTutorial
http://arduino.cc/en/Hacking/LibraryTutorial


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


該当の記事は見つかりませんでした。