ケータイ Watch
連載バックナンバー
この“第三の手”ったら便利!! 「パナバイスジュニア」
[2009/06/22]

BlackBerry Bold用ケース買いまくり
[2009/06/15]

BlackBerry Boldちょ〜好き!!
[2009/06/08]

ArduinoをShieldで遊ぼう
[2009/06/01]

2009年、Arduinoの現在
[2009/05/25]

SSDを使うニャ!! とか焦ってプチ失敗
[2009/05/18]

オリオスペックの静音PCを購入
[2009/05/11]

WILLCOM NSに興味津々!!
[2009/04/27]

ScanSnap最新型、S1500がイカシてる件
[2009/04/20]

カメラ周りをワイヤレスに!!
[2009/04/13]

電脳フィギュアARisで、話題の“拡張現実感”体験!
[2009/04/06]

6万円でお釣りがくる4TB NAS
「リンクステーション LS-Q1.OTL/1D」
[2009/03/30]

とても便利な“撮影スタンド"「WISTA サブスタンド88」
[2009/03/23]

イケてるiLife '09
[2009/03/16]

ワイヤレスマイクで音を撮る! ハンディカム「HDR-CX12」
[2009/03/09]

こんな雲台を連日使っとります
[2009/03/02]

WFT-E4がナイと拙者の生産性が激低下!!
[2009/02/23]

USB接続のサブモニターがアツい!?
[2009/02/16]

やっぱり気になる“まめカムHD”
[2009/02/09]

アクトビラってどーなのよ?
[2009/02/02]

電源回りにウルサい拙者
[2009/01/26]

ニコン謹製「メディアポートUP」を使ってみた!!
[2009/01/19]

無線LANで写真転送!! なSDメモリカード
[2009/01/05]


2008年

2007年

2006年

2005年

2004年

2003年

2002年

2001年

2000年

モバイルセントラル
モバイルセントラル一覧へ
スタパトロニクスタイトルGIF
ArduinoをShieldで遊ぼう
スタパ齋藤 スタパ齋藤
1964年8月28日デビュー。中学生時代にマイコン野郎と化し、高校時代にコンピュータ野郎と化し、大学時代にコンピュータゲーム野郎となって道を誤る。特技は太股の肉離れや乱文乱筆や電池の液漏れと20時間以上の連続睡眠の自称衝動買い技術者。収入のほとんどをカッコよいしサイバーだしナイスだしジョリーグッドなデバイスにつぎ込みつつライター稼業に勤しむ。


ArduinoをShieldで遊ぼう

 前回、2009年現在のArduinoについて書いた。今、どのArduinoを買えばいいのか的な話ですな。今回はもう一歩進んで、Arduinoをイジり始めたら、とりあえずどう遊ぶと楽しめるかについて触れてみたい。


AVRマイクロコントローラを搭載したマイコンボード、Arduino Duemilanove(アルドゥイーノ デュエミラノーヴェ)。PCとUSB接続し、専用のArduino IDE(開発環境)を使えば、比較的に容易にプログラムできる Arduino用のShield(シールド)。Arduinoの機能を拡張し、より高度な動作を容易に実現させるためのドーターボードだ。写真はWave Shield ArduinoとShieldを組み合わせて作った楽器。ボタンを押すとPCMサウンドが炸裂するゼ〜!! みたいな。Shieldを使えばこういった少々ムツカシゲな作例も意外なほどカンタンに作れる

 Arduinoで遊ぶ・学ぶ方法はイロイロある。Arduinoボードのみ使って13番LEDを様々なパターンで点滅させることから始まり、外部にブザーやLED、LCDパネルやモーターを接続したり、各種センサをつないだり、何でもアリだ。Arduinoには様々な回路を接続でき、Arduinoと外部回路の間で信号をやりとりすれば、マイコン/外部回路間のインタラクティブな動作(機能)を実現できる。

 が、Arduino初心者にとっては、この“外部にナニカを接続”ということ自体、少々ハードルが高い。「Arduinoに回路を接続」ってコトはつまり、電子回路を作るための知識が要るからだ。

 でもご心配なく。回路設計とかいったムツカシそーなコトは後回しでもいい。手っ取り早いところでは、Arduino用のShield(シールド)というモノを使えば、マイコンボードとしてのArduino、外部回路が接続されたときの楽しさを味わうことができる。


Shieldってナニ? どんなのがあるの?

 Arduino用のShieldは、Arduinoのハードウェア的な機能を拡張させたりするドーターボード(アドオンボード)。Arduinoに各種Shieldをつなぐ(実際はコネクタを使って合体させる)と、例えばDCモーターやステッピングモーターを制御できるようになったり、液晶文字表示などを手軽に実現できたり、あるいはSDカード上のサウンドを鳴らすことができたりと、Arduinoの活用幅が広がる。

 ただ、ほとんどのShieldはキット品だったりも。基板と部品のセットを購入し、ユーザーがハンダ付けなどをして組み上げる必要があるのだ。

 また、一般的なArduino用Shieldが使えるのは、ベーシックなArduinoおよびピン位置がそれに準ずるもののみとなる。具体的には、(現行品なら)Arduino Duemilanove、Arduino Pro(5V版)、Freeduino各種、Arduino MEGA(一部Shieldを除く)あたり。なお、3.3V駆動のArduinoボードではうまく動かないShieldもあるようだ。

 ともあれ、どんなShieldがあるのか、写真で見てみよう。


Arduinoで各種モーターを制御するためのMotor Shieldの一種。ArduinoとMotor Shieldと電池を組み込んだロボットを作っている人もいる Danger Shield v1.0。だれもがArduinoにつなげそーな部品を、あらかじめ、ありったけ搭載したShieldだ Color LCD & Joystick shield。ノキアの携帯電話端末用カラーLCDを搭載したShield。右上のジョイスティックやボタンにより、メニュー表示→メニュー選択のような機能を実現している

スイッチサイエンスバニラシールド。プロトタイピング用のShieldだが、最も汎用性が高い。右上下端にはピンヘッダを取り付けるが、真っ直ぐ安定して挿せるのでハンダ付けがラクなのだ Arduinoのピン位置とバニラシールドのそれを比べると、バニラシールドのピン以外の場所は全てユニバーサル基板として自由に使えることがわかる Arduino Mega Shield Proto(Mega Shield)。Arduino MEGA用のプロトタイピング用Shield

 上の写真のなかで、バニラシールドやArduino Mega Shield Protoは、プロトタイピング用のShieldとなる。基板上にユーザーが自由に回路を作るためのShieldですな。

 いろいろな利用法があるが、例えばブレッドボードとArduinoを使ってナニカを試作して「これでヨシ!!」となったらShield上に回路をハンダ付けして作り、一応の完成形とする、てな感じで使ったり。Arduino+Shield+電源ごと何かに組み込んでしまうという使い方も多い。

 Arduinoの入出力ピンは、誤挿入防止のため、一般のユニバーサル基板と一部のピッチが異なる。逆に言えば、一般のユニバーサル基板をArduino用Shieldとして使うのが困難なので、こういったプロトタイピング用のShield(いわばArduino用ユニバーサル基板)が存在するとも言える。


Wave Shieldを使ってみる

 現在拙者が知るところで、使ってオモロげなShieldは、Danger Shield v1.0Wave Shieldあたり。

 Danger Shield v1.0は、各種部品たっぷり搭載型Shield。スライドボリューム、LED、ボタン、光センサ、温度センサ、ブザー、7セグメントLEDなどの部品を試せるように作ってある。その動作例&オモシロみはココの動画で一目瞭然。このページの下のほうにサンプルスケッチ(プログラム)があるので、自力での回路作りは面倒だけど、Arduino上でいろいろな回路を試したい!! てな人はぜひどうぞ。ただし、キット品なので要ハンダ付け。

 それからWave Shield。こちらも要ハンダ付けのキット品だが、SDカードに書き込んだPCMサウンドファイル(.wav)をArduino制御で再生できるというのが特徴であり魅力だ。


ハンダ付け後のWave Shield。DAコンバータやアンプも基板上に搭載している。SDカードスロット、イヤホン出力ジャック、それからスピーカー用の出力ピンがある Wave ShieldとArduinoを合体させたところ。非圧縮PCMファイルの再生をArduinoから制御できるようになる。なお、再生できるPCMファイルは「.wav」ファイルで、最高で22KHz/16bitまで。ただし、22KHz/16bitだと時々再生されないことも。16kHz/16bitくらいが適切かも 手前上がイヤホンジャック、その下がACアダプタ用ジャック。左上がスイッチ付きのボリュームだ

 SDカード上のサウンド、つまりデジタルデータを、WaveShieldがアナログ信号に変換・増幅し、スピーカーやイヤホンから再生する、というモノですな。なお、このShieldを使ってのプログラミングには、Wave Shield用のライブラリが必要なので、適宜インストールを。

 さて、実際に試してみると、このWave Shieldはヒジョーに愉快。公開されているスケッチ(プログラム)を試すと、Arduinoの出力ピンとGND(−端子)を接触させるだけで、当該するサウンドファイルが再生されたりする。ちなみに、サンプルのスケッチやサウンドへはココから辿れる。

 ……このShieldを使えば、外部のセンサが何かを感知したら音で知らせるとか、LEDや7セグで表示するかわりに音で伝える、てなコトが!! とか夢が膨らむ感じのShieldだが、この記事では基本に忠実に。以降、Wave Shieldの組み上げ(ハンダ付け)と上記ライブラリのインストールができるなら、恐らく誰にでも作れちゃう“Arduino楽器”を紹介してみたい。


すぐ作れる電子楽器“QDW”

 Wave Shieldを使ったArduino楽器は、Arduino達人の船田戦闘機氏っていうかフニャ田さんによるものだ。保存用リッツ缶を筐体にした、シンプルだけれど遊べるデジタル楽器である。


一見、クラッカーの缶。だが、その内部にArduino DuemilanoveやWave Shieldが組み込まれているのだッ!! 缶の底面にはブレッドボードやスイッチがある。スイッチを押すと、それぞれ異なった音が出る 缶のフタ部分にはスピーカーが取り付けられている。缶自体がエンクロージャの役目をして、けっこーイイ音で鳴るヨ!!

缶の中身はこうなっている!! てゅーかWave Shieldを装着したArduino Duemilanoveおよび電池が、ショートしないように置いてあるだけだった!! Quick and Dirty!! そして楽器名は「QDW」(Quick and Dirty Wave Player) 中身を取り出した状態。工作らしい工作は、フタへのスピーカーネジ止めと、缶底面へのブレッドボードネジ止め、および配線用の穴空けくらい。フニャ田氏いわく「缶じゃなくて樹脂の入れ物なら、もっと簡単に作れますな」と Arduino(Wave Shield)とブレッドボードの配線はこんな感じ。アナログ出力ピンとGND(電源の−極)の間にスイッチを入れているだけだ

 ちなみに、この楽器の名前はQDW。「クドウ」と発音する。由来はQuick and DirtyなWaveプレーヤということから。Quick and Dirtyは「サクッと作れるけど見栄えはキレイじゃない」「見てくれにこだわらず思い立ったら即、アイデアをカタチにしちゃう」というようなニュアンス。見栄えの悪いプロトタイプとも取れるが、良い意味で「プロジェクトを最短で実現するやり方」として言われることが多い。

 さておき、回路図やスケッチ(ソースプログラム)およびそれらについての解説は後述するが、どんな音がするのかを以下、動画で。

【動画】(クリックで再生、MPEG形式16.5MB)
ボタンを押すと、そのボタンに割り振られたサウンドが再生される。サウンド再生中に別のボタンを押すと、再生中のサウンドが止まり、新たなサウンドが鳴る。ボタンを押し続けると、サウンドの頭の部分を連続的に再生。サンプラーで音声を再生したような感じのモノフォニック&モノラル楽器なのだ

【動画】(クリックで再生、MPEG形式26.1MB)
こんなふうに、好みの音を入れておいてリズムマシン風に遊べる。SDカード上のサウンドファイルを変えれば、テクノっぽい音から民族楽器風まで、いろいろな雰囲気のサウンドを楽しめる


 ArduinoとWave Shieldを使い、ボタンを押したら音が再生されるという動作を実現するには、ladyadaのこのスケッチや、このフォーラムの“Wed Jun 11, 2008 3:50 pm”に投稿されたスケッチを使えば可能だ。

 ただ、それだと楽器的に演奏しにくいので、フニャ田さん作のスケッチでは少々改良を加えてある。具体的には、ボタンを押すと直ちに対応するファイルが再生され、ボタン押下時に他の音が再生中の場合はそれを中止して再生し、ボタンを押し続けると「パパパ……」とサンプラー的にファイル冒頭の音が短く繰り返され、再生が終わると無音になるようになっている。

 以下、回路図およびスケッチに関して、この作例を作ったフニャ田さんのコメントなどを。


ArduinoとWave Shieldを使った楽器、QDWの配線図。ブレッドボードやその使い方はこちら

【船田氏解説】
 回路はとてもカンタンです。6個のタクトスイッチをブレッドボード上にならべて、Arduinoボードと7本の線でつなぐだけ。そのうちの1本はグランド(GND)の配線です。

 まず机の上にArduinoボードとブレッドボードを並べて、上の図のように接続してみましょう。ケースに入れる際は電池を使いますが、この段階ではUSBケーブルからの電気が使えるので、電源を気にする必要はありません。

 図ではArduinoボードのピンから線が出るように描かれています。実際はWave Shieldが載っているので、Wave Shieldの端子から線を引き出すことになります。端子の位置や並び順は同じです。ワイアをつなげるためのソケットは、Wave Shield上にハンダ付けして取り付ける必要があります(基板に直接ワイアをハンダ付けしてもいいのですが、配線の変更がしにくくなりますね)。

 USBにつないだ状態で動作チェックをしたら、持ち運べるように電池駆動に対応しましょう。Arduino Duemilanoveならば、DCジャックに9Vの電池をつなぐだけで、他はどこも変更する必要がありません。電池スナップに2.1mmのDCプラグをつなぐと扱いやすくなります。ひとつ用意しておくと何かと便利です。

 Diecimilaのように電源の切り替えをジャンパピンで行うボードでは、電池をつなぐ前に、EXTの側にプラグを挿しかえてください。DCジャックがないArduinoボードの場合は、電池の電圧を変換する回路を用意する必要があるかもしれません。


この配線図はFritzingというオープンソース・ソフトウエアを使って作成しました。FritzingはArduinoとブレッドボードを使ったプロトタイピングをわかりやすく資料化したい人ために、ポツダム応用科学大学インタラクションデザインラボの手で開発されました。ドラッグ&ドロップで部品を並べながら、かわいい配線図を描くことができます Fritzingはまだアルファバージョンで不安定な部分もありますが、配線図を描くだけでなく、より高度な使い方もできるように改良が続けられています。この画面はオリジナルのシールドを設計するモード。ブレッドボード上の配線図を、一般的な回路図やシールド基板の設計図としても編集が可能です。電子回路のプロトタイピングに必要な設計作業を一貫して行える環境にすることが目標のようです

【船田氏解説】
 次はスケッチです。Arduinoの世界では、一連のプログラム(Arduino言語によるソースコード)をスケッチと呼びます。以下に、このQDWプロジェクトに使ったスケッチを掲載しておきます。

 なお、スケッチの入力はArduino IDEで新しいファイルを開いて、そこにコピー&ペーストするだけでいいのですが、その前にひとつだけ準備が必要です。

 Wave Shiledのライブラリをダウンロードしてインストールしてください。ladyada.netからAF_Waveという名前のzipファイルをダウンロードし、解凍して生まれたフォルダ(AF_Wave)をArduino IDEのディレクトリのhardware/librariesフォルダ内にコピーするだけです。これで、Wave Shieldを使うための基本的な機能がユーザーのスケッチから使えるようになります。

 Arduino IDEをまだインストールしていない場合、武蔵野電波のブレッドボーダーズの記事を参照してインストールしてください。



スケッチの例「Wave Shield パーカッション」
// Wave Shield パーカッション
// http://www.ladyada.net/make/waveshield/examples.html
// ladyada.netのサンプルをベースに武蔵野電波が改変

#include <avr/pgmspace.h>
#include "AF_Wave.h"    // Wave Shield用ライブラリ
#include "util.h"
#include "wave.h"

#define SW 6            // 接続するスイッチの数
#define SWPIN 14        // どのピンから接続するか

AF_Wave card;
Wavefile wave;
File f;

void setup() {
  Serial.begin(19200);  // エラーメッセージの出力用

  pinMode(2, OUTPUT);   // Shieldが使う4本のピン
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);

  // スイッチを接続するピンの内部プルアップを有効に
  for(char i = SWPIN; i < SWPIN+SW; i++) {
    digitalWrite(i, HIGH);
  }

  // メモリカードにアクセスする準備
  if (!card.init_card()) {
    putstring_nl("Card init failed!");
    return;
  }
  if (!card.open_partition()) {
    putstring_nl("No partition!");
    return;
  }
  if (!card.open_filesys()) {
    putstring_nl("Couldn't open filesys");
    return;
  }
  if (!card.open_rootdir()) {
    putstring_nl("Couldn't open dir");
    return;
  }
}

void loop() {
  // スイッチを調べて、対応するwavファイルを再生
  switch (checkswitches()) {
  case 1:
    playfile("1.WAV");  // ファイル名には拡張子をつける
    break;
  case 2:
    playfile("2.WAV");
    break;
  case 3:
    playfile("3.WAV");
    break;
  case 4:
    playfile("4.WAV");
    break;
  case 5:
    playfile("5.WAV");
    break;
  case 6:
    playfile("6.WAV");
    break;
  default:              // 押されていないとき
    break;
  }

  // 再生していないのにファイルが開いていたら閉じる
  if (f && !wave.isplaying) {
    card.close_file(f);
  }
}

byte checkswitches() {
  byte pressed = 0;

  for (char k = 0; k < SW; k++) {
    char reading = digitalRead(SWPIN + k);
    if (reading == LOW) {    // キーが押されている
      delay(10);
      reading = digitalRead(SWPIN + k);
      if (reading == LOW) {  // 10ミリ秒後も押されてる
        pressed = k + 1;     // 押されているキーの番号を返す
      }
    }
  }
  return (pressed);
}

void playfile(char *name) {
  // ファイルが開いていたり再生中だったら停止処理
  if (f || wave.isplaying) {
    wave.stop();
    card.close_file(f);
  }

  f = card.open_file(name);  // wavファイルを開く
  if (f && wave.create(f)) { // ファイルから音データを得る
    wave.play();             // 再生!
  }

  delay(50);  // このディレイの大きさでスクラッチ感が変化
}

【船田氏解説】
 少しだけ、スケッチの内容を説明します。

 スイッチはアナログ入力ピンにつないでいますが、アナログデータではなく、0と1のデジタル信号を得る目的で使っています。内部プルアップ抵抗という機能を有効にして、外付けの部品を減らしています。スイッチが押されているときに0が得られる点に注意してください。指が離れている間が1です。

 再生するサウンドファイル(.wav)は16kHz/16bitでサンプリングしたものがいいでしょう。サウンドファイルは、FAT16でフォーマットしたメモリカードのルートディレクトリに保存します。ファイル名は自由ですが、スケッチ側でスイッチとサウンドファイル名を合わせる必要があります。

 今回作成したスケッチは、極力短くなるように心がけました。機能を限定すればこのくらいの行数で電子楽器として遊べるマシンが作れてしまうのはちょっと感動的です。


 てコトでArduino。それだけで使っても容易にPCからのマイコンボードプログラミングができ、Shieldを使えば容易に高度な作品作りも楽しめるわけですな。前回でも書いたが、世界でも日本でもArduinoユーザーがかな〜り増加中なので、これをきっかけにアナタもゼヒ!! Arduinoに触れてみておくんニャさい。

 なお、実は来週からPC Watchにて新連載を始める。2008年に「武蔵野電波のブレッドボーダーズ」という電子工作系連載をヤリましたけど、その続編となる「武蔵野電波のプロトタイパーズ」を来週から開始する予定だ。その連載では、ブレッドボード利用はもちろん、ハンダ付け、キット制作、さらにはArduinoを使った愉快なプロジェクトも紹介する予定なので、ヒトツよろしくお願いします〜。



URL
  武蔵野電波のブレッドボーダーズ(PC Watch)
  http://pc.watch.impress.co.jp/docs/article/backno/musashino.htm

2009/06/01 11:11

ケータイ Watchホームページ

ケータイWatch編集部 k-tai@impress.co.jp
Copyright (c) 2009 Impress Watch Corporation, an Impress Group company. All rights reserved.