Electronics

2008.12.10

How-to Tuesday: Arduino Starter Kitで遊ぼう

Text by kanai

今週は、Arduino Starter Kitのパーツを使ったプロジェクトを紹介しよう。Proto Shieldの作り方は今回はパス。ちょっと前にやってるからね(英語)。そのほかは、はんだ付けも必要ない簡単な工作だ。

Arduinoは、コンピューターに物理的な現象を検知したり、物理的な行動をとらせたりするもので、普通のデスクトップパソコンでは難しい芸当をやってくれる。簡単なマイクロコントローラーボードをベースにしたオープンソースのフィジカルコンピューティングプラットフォームの一種で、専用のソフトウェアを記述するための開発環境もセットになっている。 Arduinoはオープンソースなんだ! このスターターキットには、パーツをかき集めたり、あれこれ買い出しをしなくてもプロジェクトがすぐに始められるように、抵抗やボタンやそのほかのパーツが純正のArduinoと一緒に入ってる。ボクたちのベストセラー『Making Things Talk』も入ってるよ(編注:英語版です)。いろいろなリンクをたどれば、たくさんのHow Toを教えてもらえる。また成長著しいArduinoコミュニティーも頼りになるよ。
セット内容

  • Arduino Duemilanove(現時点の最新型)
  • ミニブレッドボード 1枚
  • 3フィート USB ケーブル 1本
  • 1K 抵抗 10本
  • 10K 抵抗 2本
  • 赤色 LED 3個
  • 緑色LED 2個
  • 高輝度青色LED 1個
  • タクトスイッチ 1個
  • インターリンク製FSR(圧力センサー)2個
  • Protoshield Kit(組み立てが必要) 1個
  • Tom Igoe著『Making Things Talk』(英語版)1冊
  • 24インチAWG ジャンパー線(赤、青、黒)
  • DCプラグ付き9V電池ケース(組み立てが必要)
  • もちろん、9V電池も入ってるよ!

ここに、このプロジェクトで使ったコードを載せておく。ただし、適当のプログラムとは言えない。なんでかって? このほうが、書きやすかったし、ぱっと見て、初心者にも仕組みがわかりやすいと思ったからだ。もっと効率的なプログラムにできるかどうか、そこは自分で考えてみてくれ。いいコードが書けたら、ぜひコメントに書き込んでくれよな! (編集から:英語版記事のコメント欄に改良したコードがいろいろ投稿されています)

MAKE Podcastを購読
| iTunes用にダウンロード

/*
--------------------------------------------
Make Magazine - 圧力センサーのデモ
これは、センサーにかかる圧力の量を視覚化するためのプログラムです。
もっと効率的なプログラムはいくらでも可能ですが、ここではわかりやすさを重視しています。
By Marc de Vinck - Licensed under Creative Commons.
--------------------------------------------
*/
// プログラムを実行する前に、ここで定数の定義をしておきます。
int forcePin = 2;    // 圧力センサー用のピンを指定
int val = 0;         // センサーから送られる値を格納するための変数を定義
int led1=9;          // 9番ピンを "led1" と命名
int led2=10;         // 10番ピンを "led2" と命名
int led3=11;         // 11番ピンを "led3" と命名
int led4=12;         // 12番ピンを "led4" と命名
int led5=13;         // 13番ピンを "led5" と命名
// 定数定義はここまで
void setup()                    // Arduinoに電源が入れられたときに1回だけ実行するもの
{
Serial.begin(9600);           // シリアル通信を開始。デバッグ用です
pinMode(led1, OUTPUT);        // led1 = pin 9なので9番ピンは出力専用に設定されます
pinMode(led2, OUTPUT);        // led2 = pin 10なので10番ピンは出力専用に設定されます
pinMode(led3, OUTPUT);        // led3 = pin 11なので11番ピンは出力専用に設定されます
pinMode(led4, OUTPUT);        // led4 = pin 12なので12番ピンは出力専用に設定されます
pinMode(led5, OUTPUT);        // led5 = pin 13なので13番ピンは出力専用に設定されます
}
void loop()                        // 繰り返し実行されるもの
{
val = analogRead(forcePin);    // センサーからの値を読み込む
Serial.println(val,DEC);        // 変数 "val" の値を画面に表示(デバッグ用)
if (val>250){                 // もし、値が最大値、つまり250以上になったときは
// 以下の5行は for (i=1; i<6; i=i++); digitalwrite(led[i],HIGH) という1行で記述することもできます
digitalWrite(led5,HIGH);   // 5つすべてのLEDを点灯
digitalWrite(led4,HIGH);
digitalWrite(led3,HIGH);
digitalWrite(led2,HIGH);
digitalWrite(led1,HIGH);
delay(100);                    // ちらつきを抑えるために、ちょっとだけ待機時間を設定
}
else{
digitalWrite(led5,LOW);    // 5つすべてのLEDを消灯
digitalWrite(led4,LOW);
digitalWrite(led3,LOW);
digitalWrite(led2,LOW);
digitalWrite(led1,LOW);
}
if (val>=175 && val<=250){    // もし、値が175と250の間だったら
digitalWrite(led4,HIGH);    // 4つのLEDを点灯
digitalWrite(led3,HIGH);
digitalWrite(led2,HIGH);
digitalWrite(led1,HIGH);
delay(100);                   // ちらつきを抑えるために、ちょっとだけ待機時間を設定
}
else{
digitalWrite(led4,LOW);    // 4つのLEDを消灯
digitalWrite(led3,LOW);
digitalWrite(led2,LOW);
digitalWrite(led1,LOW);
}
if (val>=100 && val<=175){    // もし、値が100と175の間のときは
digitalWrite(led3,HIGH);    // 3つのLEDを点灯
digitalWrite(led2,HIGH);
digitalWrite(led1,HIGH);
delay(100);                   // ちらつきを抑えるために、ちょっとだけ待機時間を設定
}
else{
digitalWrite(led3,LOW);    // もう、あとは見ればわかるでしょう
digitalWrite(led2,LOW);
digitalWrite(led1,LOW);
}
if (val>=25 && val<=100){
digitalWrite(led2,HIGH);
digitalWrite(led1,HIGH);
delay(100);                  // ちらつきを抑えるために、ちょっとだけ待機時間を設定
}
else{
digitalWrite(led2,LOW);
digitalWrite(led1,LOW);
}
if (val>=0 && val<=25){
digitalWrite(led1,HIGH);
delay(100);                   // ちらつきを抑えるために、ちょっとだけ待機時間を設定
}
else{
digitalWrite(led1,LOW);
}
}

Maker Shedより:
Makershedsmall
img_5817copy.jpg
Arduino Starter Kit
おまけ:
img_3111644.jpg
How-to Make a Proto Shield(英語)
– Marc de Vinck
原文