INDEX(各項目ごとの目次)

[HOME]  [Processing関係]  [Arduino関係]  [マテリアル関係]  [秋葉原工作マップ]

2008年用ですが、部分的に内容を更新しています(2010/06/14)。
また、[建築農業工作ゼミ2009-2010]とも連動していますので、そちらにも幾つかサンプルがあります。
:

ラベル 電子工作 の投稿を表示しています。 すべての投稿を表示
ラベル 電子工作 の投稿を表示しています。 すべての投稿を表示

11/13/2008

センサについて2

以下は、「秋月電子」、「千石電商」、「共立エレショップ」、「Sparkfun(米国)」の各サイトにおけるセンサの分類です。目的や機能ごとに分かれているので、センサを選ぶ際の参考にして下さい(各店舗の各センサのページへリンクしています)。




秋月電子

センサ一般
湿度/温度

赤外線センサ
リモコン受光部
紫外線関連

ペーハー(pH)
アルコール/ガス 
方位

千石電商

ホール素子/ホールセンサ 
温度センサー
角速度(ジャイロ)
加速度
距離
圧力
衝撃
曲げ
焦電
サーミスタ
共立エレショップ

感圧
ひずみ/曲げ
温度
湿度

赤外線
紫外線
カラー
超音波
磁気
電流
位置
位置(アクセサリ) 
動き
Sparkfun(米国)

Accelerometer(加速度)
Biometrics(生物測定)
Capacitive(静電容量)
Current(電流)
Flex/Force(曲げ/力)
ID(証明/認証)
IMU/Gyros(慣性力/角速度) 
Infrared(赤外線)
Light/Imaging(光/画像)
Magneto(磁力)
Proximity(距離)
Temperature(温度)
Weather(天候)






その他のショップやセンサについては、このブログページ右側の「ショップリスト」にも記載してあるので参考にして下さい。

8/20/2008

Arduino モータドライバ+モータ

以前「Arduino 小型DCモータ/TA7291P」で、モータドライバICのTA7291Pを用いてDCモータの制御を行いました。TA7291Pは、許容電流は1.0A(最大2.0A)なので小型のDCモータ向きでした。より大きなモータを制御するには、以下のようなモータドライバあるいはモータコントローラなどがあります。Arduino基盤に対して、電圧、電流ともに許容値を超えるため、モータ駆動用外部電源が必要になります。


東芝 TA7291P


東芝 TA8440HQ:PWM端子付きブリッジドライバIC


NEC UPD16805:モータドライブ用IC


東芝 TA8429HQ


STマイクロエレクトロニクス L6203


「モータドライバIC」
TA7291P :連続1.0A(最大2.0A):モータ用電源 0~20V
TA7279P :連続1.0A(最大3.0A):モータ用電源 0~16V(PWM端子なし)
TA8440HQ:連続1.5A(最大3.0A):モータ用電源 0~50V
UPD16805:連続1.0A(最大4.2A):モータ用電源 0.5~8.0V
TA8429HQ:連続3.0A(最大4.5A):モータ用電源 7~27V
L6203 :連続4.0A(最大5.0A):モータ用電源 12~48V
TB62300F:連続2.5A(最大8.0A):モータ用電源 18~40V

「モータドライバボード」
Poloru VNH3SP30:連続9A(最大30A) :モータ用電源最大30V
Poloru VNH2SP30:連続14A(最大30A):モータ用電源最大19V

「モータコントローラ」
SyRen10 :連続10A(最大15A) :モータ用電源 6~24V
SyRen25 :連続25A(最大45A) :モータ用電源 6~24V
Pololu SMC04 :最大30A  :モータ用電源 6~18V
KONDO UMD-540S:50A以下:モータ用電源 4.8~12V

「デュアルモータコントローラ(モータ2個制御)」
Sabertooth2x5 :連続5A(最大10A) :モータ用電源 6~18V
Sabertooth2x10 :連続10A(最大15A):モータ用電源 6~24V
Sabertooth2x25 :連続25A(最大50A):モータ用電源 6~24V

「ラジコンカー用スピードコントローラ/アンプ」
FUTABA MC230CR 連続45A(最大90A) :モータ用電源7.2V〜8.4V
FUTABA MC330CR 連続100A(最大200A):モータ用電源7.2V〜8.4V
KONDO VFS-FR 連続240A(最大960A):モータ用電源7.2V〜8.4V


連続アンペア数は、PWM制御など使わず直接連続運転したときの許容値になります。ArduinoのanalogWrite()やパルスを生成してPWM制御するならば、最大アンペア数近くまで出力可能になります。ただし、ドライバによって性質が異なるので、ゆとりを見ておいたほうがいいでしょう。あまりにも発熱しすぎる場合は、放熱器をドライバ本体に取付ける必要があります。

大抵のモータドライバやモータコントローラなどには、
・回路用電源端子(5V/Arduino基盤5V端子へ)
・モータ用端子(2端子/モータへ接続)
・外部電源端子(モータ駆動用電源/GNDは他と共有)
・GND共有端子(Arduino基盤GND端子と共有)
・正転/逆転/停止など切替用信号端子(2端子/Arduino基盤へ)
・PWM用端子(Arduino基盤PWM端子へ)
がついているはずなので、接続方法はほぼ共通しています。


ラジコン用アンプについて
ラジコンカー用スピードコントローラ(アンプ)の場合、レース用のものは「バックなし(前進のみ)」が多いため、「バック付き(前進/後進)」かどうかを確認する必要があります。


フタバ MC231CR アンプ【送料無料】


フタバ MC331CR アンプ【送料無料】


【ラジコン RCパーツ】KO PROPO【ESC(アンプ)】VFS-FRバック付きVFS

アンプ本体には、
・モータ用端子(2端子/モータへ接続)
・外部電源端子(モータ駆動用電源/ラジコン用7.2Vバッテリーなどへ接続)
・3本線
  回路用電源:赤(Arduino基盤5V端子へ)
  GND:黒(Arduino基盤GNDと共有)
  信号線:白(Arduino基盤PWM端子へ)
がついています。ArduinoのanalogWrite()で、PWMピンと信号線(白)を接続して(サーボをPWM制御するような方法)、スピード調整/正転/反転/停止できます。analogWrite()の括弧内の値(0〜255)を中点(127前後)にすると停止状態になるはずです。
あるいは、Arduinoのサーボライブラリのservo.write()を使って0~180の範囲(90が中点)で制御することができるはずです。

上記以外に、MOS-FETを用いてモータドライバを自作する方法もあります。


一般的な模型用モータ
モータについては、一般的なラジコンや模型用(マブチモータ)のものであれば、以下のようなものが挙げられます。

FA-130RA:1.5V時/最大効率時電流0.66A/瞬間最大電流2.20A
RE-140RA:1.5V時/最大効率時電流0.66A/瞬間最大電流2.10A
RE-260RA:3.0V時/最大効率時電流0.64A/瞬間最大電流2.70A
RE-280RA:3.0V時/最大効率時電流0.87A/瞬間最大電流4.70A
RS-380PH:7.2V時/最大効率時電流3.23A/瞬間最大電流14.9A
RS-540SH:7.2V時/最大効率時電流4.57A/瞬間最大電流22.2A

最大効率時電流は、通常時の電流とみなしてもいいでしょう。瞬間最大電流は、急停止や逆転時など様々な負荷がかかった時(負荷をかけて停止した時)の電流値です。一定の速度で回転しているようなものであればいいのですが、回転方向や速度を変化させるような場合は、瞬間最大電流を考慮にいれる必要があります。その場合は瞬間最大電流を許容できるモータドライバが必要になります。

上記のモータにギヤヘッドが取付けてある「タミヤ・ギヤードモータ」シリーズは、比較的高トルクが得られます。380モータであれば、7.2V電源で瞬間最大電流が14.9Aなので、上記モータドライバICでは許容アンペア数が低すぎるため、最低でも15Aまで耐えられる「SyRen10」などが必要になるでしょう。540モータであれば、7.2V電源使用時なら22.2A以上、12V電源使用時なら37A以上耐えられるモータコントローラ「SyRen25」などが必要になるでしょう。
小型のモータであれば、「タミヤ・テクニクラフト」シリーズのギヤボックスなどがあります。

尚、モータのデータシートには「性能線図」と呼ばれる表が掲載されている場合があります。この表を用いて、モータの特性を調べることができます。マブチモータのサイトには性能線図の分かりやすい説明があります。


大型のモータ(その他モータの種類についてはこちら
人を動かすことができる大型のモータであれば、以下のようなものがあり、専用のモータドライバユニットにArduinoを接続しPWM制御可能です。
オリエンタルモータ BLHシリーズ/100W/DC24V(このモータを使った説明
また、以下のようなロボット用/精密機械用のモータであれば、小型なものから大型のものまであります。
マクソンモータ(スイス製)
光進電気工業(ファールハーバー/ドイツ製)
ツカサ電工


松下電器産業 ギアーヘッド

6/08/2008

Arduino サーボ制御



サーボモータは、信号を送ると指定した角度まで回転するので、ロボットの間接部分にもよく用いられています。通常のアナログサーボであれば、回転角の範囲は0〜180度程度です。種類によっては、回転範囲が180度以下のものや、360度回転(連続回転サーボ、あるいは0〜360度の範囲で回転するサーボ180度のサーボを改造する例、もうひとつの改造例)するものもありますが、今回は180度の回転が可能な一般的なサーボを制御します。サーボもDCモータ同様、Arduino基盤に対しては過電流となる恐れがあるので、別電源を用意したほうが無難ですが、一つくらいであれば直接つないでもそれほど問題でないでしょう。
サーボには大抵5V線(赤)、GND線(黒)、信号線(白)の3つの線があります。そのままArduino基盤につなぐ場合、5V線、GND線をそれぞれ基盤の5V端子、GND端子へ接続し、信号線をPWM端子へつないでanalogWrite()で制御することができます。



analogWrite()で動かす方法:(動くけど多少不安定)
今回はPWM端子である3番ピンにサーボの信号線を接続し、可変抵抗器で操作します。可変抵抗器からのanalogRead()による読み取り値0〜1023を4で割って、0〜255の範囲にスケールダウンします。analogWrite()は0〜255の値を出力しますが、サーボの動作角度においてはおよそ0〜180度に対応します。例えば、出力値を127としてanalogWrite(3,127)であれば、約90度のところで停止します。パルス信号の性質上、1ループを約20ミリ秒にすると動きが安定します。そのために、delay(20)を最後に加えておきます。

Arduinoのプログラム:

void setup(){
//特になし
}

void loop(){
//可変抵抗器の値を読み込み4で割る
int val=analogRead(0)/4;
//アナログ出力
analogWrite(3,val); //0~255
//0.05秒ループにする
delay(20);
}


analogWrite()が0〜255なので、180度の回転範囲を256段階の分解能で出力できるということになります。ただし、この方法だとガタガタと不安定な動きになるかもしれませんので、以下の方法をおすすめします。


ライブラリを利用する方法(Arduino0018):
Arduino0016まではPWMの9番ピンと10番ピンだけにサーボを接続可能でしたが、Arduino0017以降では、ソフトに含まれているライブラリを使うことで最大12個まで接続可能です(Megaの場合最大48個)。
ただし、このライブラリを使用すると9~10番ピンのPWM機能は使えなくなります(Megaの場合は12~23ピンをサーボに使用すると11~12ピンのPWMが機能しなくなります)。つまり、サーボとanalogWrite()を同時に使うプログラムの場合は、analogWrite()に使用するピンとして9~10のピンを避ける必要があります。
「メニューバー>Sketch>Import Library...>Servo」を選択すると「#include <Servo.h>」が自動的に挿入されライブラリを使用可能にします。以下はArduino0018に内包されているServoライブラリの使用例です。attach()でサーボを接続するピンを指定し、write()で0~180の角度の値(整数値)をいれます。プログラム内でmap()を使っていますが、センサから読み込まれる値val(変数)の範囲0~1023をサーボの角度出力値0~180度に変換する方法です。


#include <Servo.h>

Servo servo;//サーボのインスタンス

void setup(){
//サーボの信号線を3番ピンに接続
//(PWMピン以外のピンにも接続可)
servo.attach(3);
}

void loop(){
//センサの読み取り値
int val=analogRead(0);
//map()を使って0~1023のセンサ読取り値を0~180の角度に変換
int deg=map(val,0,1023,0,180);
//サーボ出力
servo.write(deg);//0~180まで
}



精度をあげて制御する方法:writeMicroseconds()を使う
write()を使う方法は0~180度を180段階の分解能でしか角度設定できませんが、新たに加わった機能writeMicroseconds()によって、より細かく角度を設定することが可能です。この場合サーボにパルス(パルス幅)の値を送って角度を決定します。
例えば:

writeMicroseconds(500)で0度
writeMicroseconds(1500)で90度(中間位置)
writeMicroseconds(2500)で180度

という感じになります。つまり0~180度の範囲を500~2500の範囲に変換すればいいことになります。
しかし、サーボによって受け入れるパルス幅が異なるので仕様書などで確認してください。
各サーボの最小値や最大値を超えたパルスを送ってもそれ以上回転しないか、負荷を与えることにもなるので注意して下さい。
ちなみに、
servo.attach(ピン番号,最小パルス幅,最大パルス幅);
というように()内に3つの値をいれることができます。最小パルス幅はデフォルトでは544、最大パルス幅は2400に設定されているようです。これらの値で動く範囲を調節できます。


#include <Servo.h>

Servo servo;//サーボのインスタンス

void setup(){
//サーボの信号線を3番ピンに接続
//(PWMピン以外のピンにも接続可)
servo.attach(3);
}

void loop(){
//センサからの読取り値
int val=analogRead(0);//0~1023
//map()を使って0~1023を544~2400に変換
int pulseWidth=map(val,0,1023,544,2400);
//サーボ出力
servo.writeMicroseconds(pulseWidth);//変換したパルス幅値を代入:544~2400
}


上記プログラムでは、writeMicroseconds()を使うことで、0~180度の範囲を544~2400の範囲の分解能で動かすことができます(180度の範囲を2400-544=1856分解能、約0.1度単位で角度を調節可能)。上の場合はanalogRead()を使っているので、その精度に左右されます(つまり1024分解能)。


以下は2008までの内容です。参考までに。

その他のライブラリの使用例:
ArduinoのPlaygroundというサイトには、サーボのライブラリがあります。このライブラリをダウンロードして、Arduinoのフォルダ内にあるlibraries(Arduino-0011>hardware>libraries)に入れれば、Arduinoの画面のメニューバー>sketch>Import Library>Servoを選んで利用することができます(#include <Servo.h>という一文が自動的に書き込まれます)。このライブラリを利用すれば、PWM端子以外のピンにもサーボを接続することができます。servo.write()の()内に0〜180の整数値を入れることで角度を制御するので、分解能は180(1度ずつ)となります。analogRead()の0〜1023の値に0.176を掛けて出力値を0〜180にスケールダウンします。小数点の計算なのでfloat型の変数valにしてから、servo.write()の()内にint()を用いて整数化しています。最後のServo::refresh()を、周期が20ミリ秒以下にならないように、少なくとも50ミリ秒に一回は呼び出す必要があります。

#include <Servo.h>

Servo servo;

void setup(){
//サーボの信号線を3番ピンに接続
//(PWMピン以外のピンにも接続可)
servo.attach(3);
}

void loop(){
//読み取り値をスケールダウン
float val=analogRead(0)*0.176;
//サーボ出力
servo.write(int(val));
//周期を更新
Servo::refresh();
}




パルスをつくって制御する方法:
analogRead()の読み取り値である0〜1023の1024段階で制御する方法があります。この場合は、プログラム上でdigitalWrite()のHIGHとLOWを交互に出力するパルスを生成して制御します。HIGHの継続時間とLOWの継続時間の合計が、パルスの周期である約20ミリ秒(20000マイクロ秒)になります。delayMicroseconds()で、HIGHとLOWの継続時間を変化させるプログラムで、サーボの動作角度を制御します。一般的なサーボにおいては、HIGHの継続時間は500〜2500マイクロ秒程度になります。500マイクロ秒で0度、2500マイクロ秒で180度という計算になります。約2000マイクロ秒の振り幅があるので、analogRead()で読み取った値を2倍するとほぼ0〜180度を1024段階の分解能で表現できます。digitalWrite()を使うのでPWM以外のピンにもサーボを接続することができます。

void setup(){
//パルス出力ピンの設定
//(デジタル出力なのでどのピンでも可)
pinMode(3,OUTPUT);
}
void loop(){
//可変抵抗器の読み込み値を2倍にする(振幅値:約2000)
int val=analogRead(0)*2;
//パルス:HIGHを出力
digitalWrite(3,HIGH);
//パルス最小値を500としvalを代入
delayMicroseconds(val+500);
//パルス:LOWを出力
digitalWrite(3,LOW);
//HIGHの継続時間を差引いて周期を20000usに調整
delayMicroseconds(10000-(val+500));
delayMicroseconds(10000);
}

パルスの周期は20000マイクロ秒なので、LOWの継続時間は20000マイクロ秒からHIGHの継続時間を差し引いた時間となります。尚、delayMicroseconds()の()内に入れられる最大値は16383なので(精度を保つことができる最大値)、20000-(val+500)とは書かずに、10000-(val+500)と10000に分けて書いてあります。


サーボによっては、パルスの最小値や最大値あるいは振幅値が多少異なるので、正確に制御したい場合はデータシートを参照するか、サーボごとにテストしてみる必要があります。


絵とき「サーボ制御」基礎のきそ (Mechatronics Series)
塩田 泰仁
日刊工業新聞社
売り上げランキング: 248872

Arduino 小型DCモータ/TA7291P

小型のDCモータ「FA-130」を制御する方法についてです。このモータは、車のプラモデルなどに使われるDCモータです。最大で500mAの電流が流れます。大抵DCモータを扱う場合、Arduino基盤にとっては過電流となるので別電源(乾電池など)が必要となります。
DCモータには二本の線がついており、一方をプラスに、もう一方をマイナスにつなげば回転し、プラスとマイナスを入れ替えれば逆回転します。スピードは、電圧が低いと遅く、高いと速く回転しますが、今回の場合はPWM(パルス)で調節します。パルスは、一定の電圧でONとOFFを高速に繰り返して出力する方法で、ONの継続時間が長いほど速く回転し、OFFの時間が長いほど遅く回転します。このONとOFFの時間の比率を「デューティ比」と言います(実際には、回転速度というよりトルクに反映されます)。



上図と下図を比較すると、「ONの継続時間」については、下図より上図のほうが長いので、上図の方がモータは速く回転します(トルクが高くなります)。



PWMでは、このONとOFFの時間の比率を変えることでスピード調節を行っています。以前行ったLEDの照度調整も同様の仕組みです。LEDの場合、実際は点滅しているのに過ぎないのですが、繰り返されるON/OFFがあまりにも速いので、明るさが変わったように見えています。

また下図のように、モータを正転/逆転させる場合は、電源へつないでいる二本の線の途中にスイッチを設けて入れ替え可能にします。切り離せば静止状態になります。このような切替を可能にする回路を「Hブリッジ回路」といいます。



そこで、いままで説明したことを容易にしてくれるのが、今回用いるモータドライバIC「TA7291P」です。「TA7291P」には、10本の端子があります。
東芝 TA7291P

東芝 TA7291P

価格:189円(税込、送料別)





 1:GND(Arduino/GND端子)と共有
 2:モータの端子へ接続
 3:非接続
 4:PWM端子(Arduino/アナログ出力端子)へ接続
 5:信号用端子(Arduino/デジタル出力端子)へ接続
 6:信号用端子(Arduino/デジタル出力端子)へ接続
 7:5V電源(Arduino/5V端子)と共有
 8:外部電源のプラス端子へ接続(乾電池など)
 9:非接続
10:モータの端子へ接続

今回は、可変抵抗器で正転/逆転/静止/スピード調節しようと思います。以下のようにそれぞれを接続することとします。複雑な配線に見えるかもしれませんが、間違わずにそれぞれを接続して下さい。


TA7291Pの5番ピンと6番ピンは、静止/正転/逆転を決めるための信号用の端子であり(それぞれArduinoのデジタル出力の1番ピン、2番ピンに接続)、
5番ピンが「LOW」、6番ピンが「LOW」の場合は静止
5番ピンが「HIGH」、6番ピンが「LOW」の場合は正転
5番ピンが「LOW」、6番ピンが「HIGH」の場合は逆転
となります。ArduinoのdigitalWrite()から出力されるLOW/HIGHの組合わせによって決められます。つまり、Arduinoのデジタル出力1番ピンと2番ピンのHIGH/LOWの出力の組合わせをプログラムによって操作することになります。
スピード調節については、TA7291Pの4番ピンがArduinoのアナログ出力の3番ピン(PWMピン)と接続され、ArduinoからPWM出力によって制御されます。

今回は、可変抵抗器を右に回すと正転、左に回すと逆転、中間だと静止するプログラムにします。可変抵抗器からanalogRead()によって読み取られる値は0〜1023なので、それを2で割って0〜511にスケールダウンし、
  0〜254:逆転(0で高速、254で低速)
255〜256:静止
257〜511:正転(257で低速、511で高速)
となるようにします。逆転時では数値が0に近いほど速く、254に近いほど遅くなり、正転時では数値が大きいほど速くなるので、調整した値をanalogWrite()の出力値に入れます。よって、以下のようなプログラムになります。

Arduinoのプログラム:

void setup(){
pinMode(1,OUTPUT); //信号用ピン
pinMode(2,OUTPUT); //信号用ピン
}

void loop(){
//アナログ入力:0番ピンの値を2で割る
int val=analogRead(0)/2; //0~511の値にする

//静止/正転/逆転の状態に分けてプログラムする
if(val>=255 && val<=256){ //静止:255~256
//LOW,LOWでデジタル出力
digitalWrite(1,LOW);
digitalWrite(2,LOW);
}else if(val>256){ //正転:257~511
//HIGH,LOWでデジタル出力
digitalWrite(1,HIGH);
digitalWrite(2,LOW);
//valが大きいほど出力値も大きくなる
analogWrite(3,val-256); //出力値:1~255
}else{ //逆転:0~254
//LOW,HIGHでデジタル出力
digitalWrite(1,LOW);
digitalWrite(2,HIGH);
//valが小さいほど出力値は大きくなる
analogWrite(3,255-val); //出力値:1~255
}
}

外部電源には、1.5Vの乾電池が4本入る電池ボックスなどを使うといいでしょう。
TA7291Pのデータシートには、外部電源のプラス端子をつなぐための8番ピンの電圧は、PWMに使うための4番ピンの電圧以上なければいけないと書いてあります。これに従えば、今回の場合の外部電源は、5V以上必要となります。

関連:「Arduino モータドライバ+モータ」(その他のモータドライバ等について)


MonotaRO (モノタロウ)

6/02/2008

出力方法について

出力方法には、LEDのように発光表示する視覚的なもの、ものを動かす実際の力やエネルギーをつくりだすアクチュエータ、その他、熱や音を生成するものなどあります。特にアクチュエータの代表となるモータは、ギヤや機構の組合わせによって、様々な動き方を可能にしますが、電気以外に機械に対する知識や技術も必要になってきます。また、Arduino基盤と接続するには、モータドライバICFETトランジスタ、別電源が必要となります。
視覚的な表示方法であれば、Processingのプログラムを液晶プロジェクタで直接投影することも考えられます。
音に関しては、直接鳴らすブザーやスピーカがありますが、Processingの音のライブラリ(minimEssSonia)を用いることもできます。その場合は、既に用意してある音源データを再生したり、プログラム上で波形をつくって音を出力することもできます。
以下に、様々な出力方法のリストを挙げておきます。幾つかは、その他の部品を取付けないと作動しないものや、それに応じたプログラムが必要になるものも含まれていますが、今後授業で取り扱っていきたいと思います。

表示(発光)関係
 一般電球/蛍光灯
 LED(単色、3色)
 7セグLED
 ドットマトリックスLED
 液晶ディスプレイ
 小型有機ELディスプレイ
 冷陰極管
 レーザーモジュール
 EL発光シート

アクチュエータ関係
 DCモータ
 ギヤードモータ
 (平行ギヤ、ベベルギヤ、ウォームギヤ、ラック、遊星ギヤ)
 ステッピングモータ
 サーボモータ
 振動モータ

 電磁石
 ソレノイド

 気体ポンプ
 液体ポンプ
 電磁弁
 エアシリンダー

 バイオメタル人工筋肉
 通電性高分子人工筋肉

熱関係
 フィルムヒーター
 ニクロム線(発熱)
 ペルチェ素子(冷却)

音関係
 圧電スピーカ/ブザー
 コーンスピーカ
 Processingライブラリの利用(minimEssSoniaなど)
 関連:「スピーカ/音出力について

6/01/2008

センサについて

センサには、複雑なものもありますが、ArduinoのdigitalRead()analogRead()ですぐに使うことができるものも多くあります。いままで習った範囲でも制御できるセンサを挙げておきます。「四谷工作研究所(2007)」にも各種センサについて使い方を記載しているので参考にして下さい。
ツマミ回転式可変抵抗器:ツマミの回転量で出力値を変化
スライド式可変抵抗器:スライダの移動量で出力値を変化
ジョイスティック式可変抵抗器:スティックの動きで出力値を変化
圧電スピーカ:マイクとして使うことで衝撃音を計測
CDSセル(光センサ):光量を計測し出力値を変化
曲げセンサ:センサ自体を曲げることで出力値を変化
圧力センサ:押された圧力を計測
距離センサ:物体との距離を計測
加速度センサ:物体の重力方向に対する傾き角度/加速度を計測
人体感知センサ:人間の動きを感知しHIGH/LOWを出力


その他、スイッチ類を利用してセンサのように使うこともできます。


センサやスイッチ類をそのまま単体で使うだけでは、すぐには面白い表現にたどりつかないかもしれないので、複数のセンサやスイッチを組み合わせることを考えてみてください。例えば、単純なタクトスイッチを「Wooden Stick」に多数配置すれば、棒を握った箇所を判別するセンサになるように、応用的な使い方や配置の仕方を試してみるといいでしょう。


センサとArduinoの接続について:
可変抵抗器のように段階的に出力が可能なセンサは、大抵5V線、GND線、出力線の3つの端子があり、以下のようにつなぎます。

距離センサGP2Y0A21YK」の場合、電源(5V)とグランド(0V)にそれぞれつなぎ、出力線となる端子をArduinoのアナログ入力(ANALOG IN)のピンにつなぎ、出力線からの値をanalogRead()を使って読み込みます(プログラムについては、「Arduino シリアル通信1」または「Arduino アナログ入出力」を参照)。距離センサGP2Y0A21YKからanalogRead()で読み取った値を距離に置き換えるには、距離=220000/(読取値*5-200)にするといいそうです。
以下は距離センサGP2Y0A21YKの読取り電圧と距離(cm)の関係のグラフです。


このように3線(3端子)あるセンサの場合はいいのですが、2線(2端子)しかない場合は、必要な抵抗をつなぎ以下のようになります。

CDSセル(光センサ)」や「曲げセンサ」などは、2線(2端子)のまま売られている場合が多いので、適宜抵抗を取付けて、分岐する3つ目の線をのばし(出力線)、アナログ入力のピンへつないで下さい。つまり、2線(2端子)を3線(3端子)にするということになります。この際必要となる抵抗は、「プルアップ抵抗」と呼ばれます(プラス側に取付けた抵抗)。例えば、「曲げセンサ」の場合、もともと10KΩ〜30KΩ程度の抵抗があるので、10KΩの抵抗をつなぐとちょうどいいでしょう。「CDSセル(光センサ)」の場合も、同様のつなぎ方をします。取付ける抵抗(上図の場合10KΩ)の目安は、センサ自体の抵抗値と同程度のものとなります。取付ける抵抗を変えれば、出力される電圧や出力幅も変わるので、幾つかの抵抗を試してみて、読み取る際に丁度いいものを選んでください(プログラムについては、「Arduino シリアル通信1」または「Arduino アナログ入出力」を参照)。

また、スイッチなども2端子しかついていないので、抵抗をつなぎ、分岐させた3つ目の線(出力線)を取付けて、デジタル入力ピンへつなぎます。

タクトスイッチ」(あるいは2端子しかないスイッチ類)の場合、抵抗はマイナス(GND)側にとりつけてあります。これを「プルダウン抵抗」といいます。スイッチを押すと5V、放すと0Vの状態になります。5V/0Vのスイッチなので、デジタル入力によって読み取ります。
以下は、タクトスイッチを押すと13番ピンのLEDが光るプログラムです。

void setup(){
//12番ピンをデジタル入力に設定
pinMode(12,INPUT);
//13番ピンをデジタル出力に設定
pinMode(13,OUTPUT);
}

void loop(){
 //デジタル入力(12番ピン)がHIGH(5V)なら
if(digitalRead(12)==HIGH){
//13番ピンをHIGH(5V)で出力
digitalWrite(13,HIGH);
}else{ //デジタル入力がLOW(0V)なら
//13番ピンをLOW(0V)で出力
digitalWrite(13,LOW);
}
}

プルダウン抵抗/プルアップ抵抗:
もし、タクトスイッチから抵抗を通してGND端子へ線を接続していなければ、スイッチを押したときだけ5Vが出力されてデジタル入力の12番ピンがHIGHとして読み取りますが、スイッチを押していない時は12番ピンがどこにも接続されていない状態になってしまい、12番ピンにおいて不安定な値が読み取られます。読み取り値が不安定な値にならないためにも、抵抗を通してGNDピンに接続しておく必要があります。そうすれば、スイッチを押していない時は、GNDピンから抵抗を通して0Vが出力され、12番ピンはLOWとして読み取ることができます。つまり、スイッチを押したときの状態(5V出力)だけでなく、押していない時の状態(0V)もきちんと定義しなければならないということになります。
また、抵抗をプラス(5V)側に取付けて線を分岐させれば、「プルアップ抵抗」となります。プルアップにした場合は、押すと0V、放すと5Vになります。スイッチを押さない時の状態、押した時の状態の設定に応じて使い分けます。


5/18/2008

Arduino 7セグLEDの点灯

7セグLEDは、数字の形を表示するための細長い7個のセグメントと数字右下にある「.(ドット)」の合計8個のLEDで構成されています。つまり8個のLEDを制御するプログラムになるということです。授業で用いた7セグLEDは、秋月電子で購入したものでデータシートは付属していましたが、部品単体で販売されていることもあるので、その際にはメーカーや型番をインターネットで検索しデータシートを探し出すか、自分自身でどのセグメントがどの端子に対応しているのかなどをテストする必要があります。今回の7セグLEDは、アノードコモンタイプ、8個のLED、10本の端子です。アノードコモンタイプは、8個のLEDのプラス側の端子を共有するつくりになっています。
Arduino基盤につなぐには、Arduinoの電圧が5Vに対してLEDの使用電圧が2.5V前後なので、前回同様、抵抗(220〜470Ω程度)が必要になります。一つの抵抗を8個のLEDに対して共有することもできないわけでもないのですが、数字を表示する際には、「0」の場合は6個のLEDセグメント、「1」の場合は2個のLEDセグメントを発光させるというように、その数字によって、発光させるLEDセグメントの数が異なるので、セグメント数が少ないほど明るく発光してしまいます。それぞれの発光を均一にするためにも、抵抗はセグメントの数と同じだけ必要となります。今回はアノードコモン(プラス側の端子は共有)なので、各抵抗はカソード側(マイナス)に接続する回路にします。
1秒ごとに0〜9までカウントアップしていき、それをループするプログラムにしたいと思います。数字右下の「.(ドット)」は今回使わないで、合計7個のLEDセグメントを制御します。

まず、7セグLED裏面に10本端子があるので、どの端子がどのセグメントであるか、ひとつずつ点灯実験してみます(Arduino基盤の5V端子とGND端子に接続してテストしますが、この際にも抵抗を直列つなぎしてください)。ブレッドボードとジャンプワイヤがあると便利です。7セグLEDの場合、共有端子が真ん中にあることが多いので、データシートがない場合は、そのようなことを想定してテストしてみるといいかもしれません。



それぞれの端子は、上図のように各セグメントに対応していることが分かりました。cとhはアノード共有端子です。今回は、eのドットは使わず、a、b、d、f、g、i、jの7個を制御表示させることにします。例えば「1」を表示させるには、dとfをオンにし、残りはオフになるように設定します。アノードコモンであることから、cにはプラスの電圧がかかり、dとfを発光させるには、dとfがマイナスにならなければいけません。前回用いた図の「抵抗をカソード側につけた場合」を参考とし、a、b、d、f、g、i、jの7個の端子にそれぞれ別個の抵抗(220Ω)を取付け、Arduino基盤のデジタル出力の端子に接続します。
とりあえず、aの端子をArduino基盤の1番ピン、bを 2番ピンという順番で以下のようにつなげることにします。
a---1番ピン
b---2番ピン
d---3番ピン
f---4番ピン
g---5番ピン
i---6番ピン
j---7番ピン



「1」を表示するためには、dとfを0V(LOW)にすることで電位差が生じ発光します(cの端子から5V、dのLEDを通して2.5Vに降下し、抵抗によって2.5Vから0Vに降下する)。プログラム上では、
digitalWrite(3,LOW);
digitalWrite(4,LOW);

に設定すると3番ピン(dのLED)とが4番ピン(fのLED)が発光し、「1」の数字が表示されることになります。ただし、光らせたいピンだけではなく、残りのピンを光らせないプログラムも必要となります。残りのピンについては、すべてLOWのかわりにHIGHに設定します。よって、「1」を表示させるプログラムは以下のようになります。
void setup(){
//1〜7番ピンを出力に設定
pinMode(1,OUTPUT);
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
}

void loop(){
//「1」を表示
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
delay(1000);
}

他の数字に関しても同様にプログラムしていきます(ここでは省略して、0〜3までの表示とします)。
void setup(){
//1〜7番ピンを出力に設定
pinMode(1,OUTPUT);
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
}

void loop(){
//「0」を表示
digitalWrite(1,LOW);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
delay(1000);
//「1」を表示
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
delay(1000);
//「2」を表示
digitalWrite(1,LOW);
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
delay(1000);
//「3」を表示
digitalWrite(1,HIGH);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
delay(1000);
}

setup()の中のpinMode()for文という繰り返しの構文を用いた書き方にします。以下のfor()の中の「int i=1; i<=7; i++」は、1から7までを順番(+1ずつ)に7回分繰り返し処理するという意味です。もし「int i=3; i<=5; i++」と書いていれば、3から5までの3回分繰り返し処理することになります。この場合なら、3から5がpinMode()内のiに代入されるので、3〜5番ピンをOUTPUTに設定するということになります。「int i=1; i<=7; i+=2」と書けば、「i++」の部分を「i+=2」にしたので、1〜7までを+2ずつということになり、「1、3、5、7」だけを処理させるということになります。上記プログラムでは、1〜7番ピンを一気にOUTPUTに設定したいので、以下のように「int i=1; i<=7; i++」とします。
それから、loop()の中が長くなりすぎて見づらいので、それぞれの数字の表示に対してファンクション名(任意の名前)をつけて、以下のようにloop()の外に定義しておくことができます。
void setup(){
for(int i=1; i<=7;i++){ //iを1から7までの数とし
pinMode(i,OUTPUT); //1から7までのピンを出力に設定
}
}

void loop(){
zero();
delay(1000);
one();
delay(1000);
two();
delay(1000);
three();
delay(1000);
}

void zero(){
digitalWrite(1,LOW);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
}

void one(){
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
}

void two(){
digitalWrite(1,LOW);
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
}

void three(){
digitalWrite(1,HIGH);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
}

このように各数字に対するファンクションを定義することで、必要に応じてloop()内でファンクション名を呼び出す使い方が可能になります。loop()内では、全体の流れが上から順に書かれており、loop()外には、それぞれの数字の内訳のプログラムが書いてあり、全体と部分という関係でプログラムしていくことができます。部分(数字の内訳のプログラム)を修正すれば、loop()内で処理される全体の流れにもすぐ反映され、全体の流れだけを修正したい時には、いちいち部分のプログラム内容に触れなくても済むという利点があります。

また、数字がカウントアップしていくプログラムであれば、更に以下のように配列(Array)を利用して、反復する内容をできるかぎり省略して書くこともできます。先ほどまでは、pinMode()、digitalWrite()、delay()が繰り返し書かれてきましたが、以下のようにすれば、それぞれを一回書くだけで済みます。
boolean table[4][7]={ {0,0,0,0,0,0,1},
{1,1,0,0,1,1,1},
{0,0,1,0,0,1,0},
{1,0,0,0,0,1,0} };

void setup(){
for(int i=1; i<=7;i++){
pinMode(i,OUTPUT);
}
}

void loop(){
for(int i=0;i<=3;i++){
for(int j=0;j<=6;j++){
digitalWrite(j+1,table[i][j]);
}
delay(1000);
}
}

配列によって複数の値をグループとして用いることが可能となります。配列は[]の括弧をもちいてあらわします。もし、数字の「0」についてのグループをつくるなら、

boolean zero[]={0,0,0,0,0,0,1};

となります。zeroというグループには7つの値が含まれており、それぞれが順番にLEDセグメントのLOWかHIGH(0か1)の設定に対応しています。0か1しかないので、boolean型を用いています。zero[6]という表記は、配列zeroの6番目の値ということになります。配列では、{}内に含まれる最初の値を0番目として扱います。よって、zero[0]からzero[5]までは0で、配列zeroに含まれる最後の値であるzero[6]は1となります。
zero[]と同様にして数字「1」、「2」、「3」に関しては
boolean one[]={1,1,0,0,1,1,1};
boolean two[]={0,0,1,0,0,1,0};
boolean three[]={1,0,0,0,0,1,0}

となります。
さらに、これらの各数字グループをまとめる全体グループをもう一つの配列を用いてつくります(その配列名をtableとします)。
一行で書くと横に長くなるので、改行して少し見やすくします。

boolean table[4][7]={ {0,0,0,0,0,0,1},
{1,1,0,0,1,1,1},
{0,0,1,0,0,1,0},
{1,0,0,0,0,1,0} };

配列tableは、4つ要素を持ち、それぞれの要素がさらに7つの値を含んでいるということになります。例えば、table[2][2]は、数字「2」の2番目の値で1(HIGH)であり、table[2][5]も1(HIGH)となります。
この全体の配列tableは、loop()内で処理される全体の流れと、それぞれの内訳を0と1だけを用いて書き直した表のようなものです。loop()内では、この表に従って順にカウントアップされる処理が行われます。
void loop(){
for(int i=0;i<=3;i++){
for(int j=0;j<=6;j++){
digitalWrite(j+1,table[i][j]);
}
delay(1000);
}
}

このloop()内のfor文では、iをint型の変数にして0〜3までの数字を順番に処理していき、その処理のさらに内部では、jをint型の変数にして各配列の0〜6番目までの値を順番に処理させ、digitalWrite()のピン番号とLOWかHIGHかを指定する部分に0か1が入るようになっています(digitalWrite()の中のj+1という部分は、配列の0番目が今回使用したArduino基盤のピン番号の1番目に対応するため+1してあります。本来、基盤の0番ピンから使えば、配列の0番目がピン番号の0番目に対応するので、このようなことをしなくても済んだはずです)。
配列(Array)for文に関しては、プログラミングではよく出てきますので、詳細については再び授業あるいはブログで説明していきたいと思います。

関連:
Arduino:7 セグ+照度センサNJL7502L」--照度センサで得た値を7セグを用いて表示する


Arduino LEDの点滅



LEDを点滅させるプログラム(上画像)です。
まずsetup()loop()を用いて、以下のようなフォーマットを用意します。ほぼProcessingと同じような感じです。
void setup(){
//初期設定のプログラム
}

void loop(){
//ループ処理のプログラム
}

初期設定setup()の中には、pinMode()を使って、基盤上のどのピンを出力または入力で使いたいのかを設定します。
pinMode()の()内には、数字でピンの番号(0〜13)とOUTPUTかINPUTのどちらかをコンマで区切って入れます。LEDを光らせる電源としてOUTPUT(出力)に設定します。
ループ処理loop()の中には、LEDを点滅させる一連の処理についてのプログラムを書きます。
digitalWrite()の()内には、数字でピンの番号(0〜13)とHIGHかLOWのどちらかをコンマで区切って入れます。HIGHは5Vを出力し、LOWは0Vを出力します。delay()は、()内に入れた数字の分だけ、時間を保持します。単位はミリ秒で、1秒は1000ミリ秒に相当します。上記のプログラムでは、delay(1000)を二回挿入しているので、2秒ループのプログラムになります。
プログラムを新たに書き直したら、一旦「Verify」ボタンを押してプログラムをコンパイルします。Arduino基盤とパソコンがUSB接続されていれば、「Upload to I/O Board」ボタンをクリックし、基盤にプログラムをアップロードします。


LEDは電流を一方向にしか流さない特性があるため、+と-を電源に対して正しくつながないと発光しません(逆につないでも壊れるということは、ほぼありません)。上図のように、通常二つの端子(アノードとカソード)があります。アノード側をプラスに、カソード側をマイナスに接続します。LEDの多くは2.5V前後の電源で発光するようにつくられているので、Arduino基盤上の5V電源とGND(0V)に直接つなぐと壊れる恐れがあります。そのため、抵抗をかませる必要があります。Arduino基盤の13番ピンには抵抗なしで直接つなぐことができますが、0〜12番ピンに接続する際には、抵抗(220〜470Ω程度)を直列つなぎしてください。LEDによって特性が異なりますので、より精確に行いたい場合は、購入する際に使用電圧や最大電流についてメモしておくか、付属のデータシートを参考にしてください。



アノード側に抵抗をつないだ場合は、抵抗を通して5Vの電圧が2.5Vまで下げられ、LEDによって2.5Vから0Vに下げられます。
カソード側に抵抗をつないだ場合は、LEDを通過することで5Vの電圧が2.5Vまで下げられ、抵抗によって2.5Vから0Vに下げられます。
最初にプラス側で電圧をさげておくか、最後にマイナス側で電圧を下げるかという違いです。もし、抵抗を取付けなければ、LEDにおいて5Vから0Vに一気に下げられ、電位差が5Vになってしまい使用電圧である2.5Vをはるかに上回り破損してしまうという感じです。抵抗の取付けについては、回路設計やLEDの特性に応じて使い分けてください。

5/17/2008

Arduino基盤の概要


上画像は旧型のArduino Decimilaボードです。

Arduino基盤には、大きく分けてデジタル出力、デジタル入力、アナログ出力、アナログ入力の端子があります。LED、センサ、アクチュエータ、その他電子部品を接続して使用します。基盤上方にある0〜13番ピンについては、デジタル入出力の際に、使用するピンを出力用に使うのか、入力用に使うのかをプログラム上のpinMode()で設定する必要があります。基盤の下方にある5Vピンからは、5V電圧をとることができます。GNDピン(0V)は、上方13番ピンの隣と、下方5Vピンの隣に2つ、合計3箇所あります。
Arduino基盤では、基本的に、0〜5Vの電圧を扱います。

デジタル出力:
デジタル出力/digitalWrite()では、LOWかHIGHの二段階の出力方法しかありません。LOWは0Vに、HIGHは5Vに対応します。あるいは、二進法ではLOWが0、HIGHが1、またboolean型変数におけるfalse/trueに対応します。
例えば、LEDの点灯/消灯させるときに使います。

デジタル入力:
デジタル入力/digitalRead()も同様にLOW/HIGHの二段階です。
例えば、接続したセンサ/スイッチを通してオンになっているのかオフになっているのかを読み取るときに使います。

アナログ出力(PWM):
アナログ出力/analogWrite()は、上方の3、5、6、9、10、11番ピンの6箇所に接続でき、0〜255の256段階の出力が可能です(0V〜5Vを256段階に分けています)。
例えば、LEDの明暗を調節して光らせるときに使います。モーターならスピード調節になります。

アナログ入力:
アナログ入力/analogRead()は、センサなどから0〜1023の1024段階の読み取りが可能です(0V〜5Vを1024段階に分けています)。
例えば音量調節、照度調節、スピード調節などするために接続したセンサの度合いを読み取ります。

アナログ入出力においては、pinMode()を設定する必要はありません。

電源(外部電源):
通常は、USB接続によってパソコンから5V電源がArduino基盤に供給されます。外部電源から供給したい場合には、外部電源端子にバッテリやACアダプタ(6~20V/推奨は7~12V)などを接続します。例えば、DC12V/1AのACアダプター
差し込むプラグは内径2.1mm、外形5.5mmで、中心軸がプラス極になります。
*Arduino Decimilaなどの旧型の場合は、USB/外部電源のジャンパピンを差し替える必要があります(基盤上に明記されている文字:USBからEXT側へ)。パソコンからプログラムをアップロードする際には、再度USBケーブルを接続し、USB側へジャンパピンを差し替えます。

Arduinoのセッティング



ソフトのダウンロードとインストール:
・Arduinoサイトへアクセス→http://www.arduino.cc
・サイト内Downloadページから開発環境ソフト「Arduino 0018」(最新版)をダウンロード(Win用/Mac用あり)。
(注意)初めて使う場合は、「Arduino開発環境ソフト」だけでなく「USBドライバソフト」もインストールする必要があります。

Windows:
・ダウンロードした「arduino-0018.zip」を展開する。
・「arduino-0018」ファイルを「C:¥Program Files」へ移動しインストール。
・ArduinoボードをUSB接続する。
・「USBドライバソフト」のアップデート自動検索画面が出るので(初回のみ)、
 「Program Files>arduino-0018>drivers>FTDI USB Drivers」フォルダを指定しインストールする。
 (Vistaの場合は自動的に探してインストールされる)。
・「arduino-0018」フォルダ内の「arduino.exe」を開く。
・Arduinoソフトのメニューバー「Tools>Board」から接続しているArduinoボードの種類を選択。
「Arduino Duemilanove 328」なら「Arduino Duemilanove or Nano w/ATmega 328」を選択。
・メニューバー「Tools>Serial Port」から「COM*」を選択(COM3などと表示)。
・以上でセットアップ完了。
*「USBドライバ」がインストールされたか確認するには:
ArduinoボードをUSB接続したまま「コントロールパネル>システム」を開き、「システムのプロパティ」画面内「ハードウェア」タブを選択、「デバイスマネージャ」ボタンをクリック、「デバイスマネージャ」内のリストから「ポート(COMとLPT)」を選択、「ポート(COMとLPT)」内に「USB Serial Port(COM3)」(COM4やCOM5の場合あり)があるか確認。Arduinoソフトのメニューバー「Tools>Serial Port」で上記のPort(COM3など)を選択する。

Macintosh:
・ダウンロードした「arduino-0018.dmg」を開く。
・「Arduino.app」を「Applications」フォルダに移動。
・「FTDIUSBSerialDriver_10_4_10_5_10_6.mpkg」をダブルクリックし、ドライバを画面上の指示に従いインストール。
・ArduinoボードをUSB接続する。
・ダウンロードしたArduino.appを開く。
・Arduinoソフトのメニューバー「Tools>Board」からArduinoボードの種類を選択。
「Arduino Duemilanove 328なら」「Arduino Duemilanove or Nano w/ATmega 328」を選択。
・メニューバー「Tools>Serial Port」から「/dev/tty.usbserial-********」を選択。
 上記「********」はボードによって異なります。
・以上でセットアップ完了。
*「USBドライバ」がインストールされたか確認するには:
ArduinoボードをUSB接続したまま、メニューバー左上アップルマーク>このMacについて」を選択、画面内で「詳しい情報...」ボタンをクリック、次の画面上左側のリストから「ハードウェア>USB」を選択、「USBバス」内に「FT232R USB UART」があるか確認する。「FT232R USB UART」を選択し、画面内「シリアル番号」欄の番号が上記「/dev/tty.usbserial-********」の「********」になります。

動作確認:
無事ソフトとUSBドライバのインストールが済んだら、動作確認として以下のサンプルプログラムを試してみて下さい。
Arduino画面メニューバーのFile>Sketchbook>Examples>Digital>Blinkを選択すると、「Blink(LEDの点滅)」のサンプルプログラムが現れます(Arduinoサイト内にも同じサンプルがあります)。

「Upload to I/O Board」ボタンかFile>Upload to I/O Boardを選択すると、Arduino基盤にプログラムのアップロードが開始されます。画面の下の方に「Done uploading.」と表示されれば、アップロード完了です。

Arduino DuemilanoveやDiecimilaの場合は、基盤上のリセットボタンを押す必要はありませんが、Arduino NG基盤(旧型)の場合は、リセットボタンを押した直後に「Upload to I/O Board」ボタンを押して下さい。

問題なければ、Arduino基盤上のLED(13番ピン用内蔵LED/13番ピンの真下あたりにある基盤上の小さいLED)が一秒ごとに点滅します。Arduino NG基盤(旧型)の場合は、LEDが内蔵されていないので、13番ピンとGNDピンにLEDを差し込む必要があります(LEDについてはブログ内の「Arduino LEDの点滅」を参照)。
Arduinoサイト上のLearning(上画像/赤印)は、学習用のサンプルプログラムが記載されているページです。Reference(上画像/赤印)は、プログラムの各言語について説明してあるページです。それぞれ参照してみて下さい。
尚、四谷工作研究所(2007年度)のブログでもセッティングや使用法について記載されているので参考にしてください。

5/14/2008

電子工作 5/17(土)



5/17(土)から電子工作を始めます。パソコン、Arduino基盤、USBケーブル(Arduino-パソコン間)、ブレッドボード(上画像/上)、ジャンプワイヤ(上画像/下)を各自用意して来て下さい。もし用意できない場合は、学校に幾つかありますので、それを使うことになります。できれば、ArduinoのサイトからArduinoのソフトをダウンロード、インストールして来て下さい。
Processingは、今後もArduinoと連動して使いますので、各自プログラムの練習をしておいて下さい。
「Wooden Stick」については、スケールや身体についてどのような表現ができるかアイデア段階でもいいので考えておいてください。コンピュータプログラムで出来ること、電子工作で出来ること、素材加工で出来ることを最終的に組み合わせたいと思います。

4/21/2008

Arduino/電子工作


電子工作的な作業を5/17から開始する予定です。授業では、Arduino Diecimila(上画像)というマイクロコントローラ基盤をベースに開発します。この基盤にセンサーや電子パーツを接続することで、様々なデバイスを制作することができ、Processingと連動させることも可能です。Arduinoサイト:http://arduino.cc

5/17までに各自Arduino基盤を購入(通販)しておいて下さい。

Arduino Diecimila購入先:
メカロボショップ ¥4361(国内通販)
Sparkfun $34.95(米国通販、5日程度で到着)


[目次:Processing関係]  [HOMEへ戻る]  [目次:Arduino関係]