Download - Arduinoで遊ぼう #2近くの物体との距離を測る
#2 近くの物体との距離を測るArduinoで遊ぼう
2014.10.09Created by Sannomiy Yasunori
今回やること
センサ値 表現センサ値
Arduino Processing
今回やること
センサを使って物体との距離を計測します
センサ値 表現センサ値
Arduino Processing
同じ種類のセンサでも計測できる距離範囲が違うので注意が必要です。 使い方とお財布に相談して使うセンサを決めよう。
物体との距離がわかるセンサ達
光電(フォト)センサ 約0cm ~ 3cm
赤外線距離センサ 約10cm ~ 80cm
超音波距離センサ 約3cm ~ 5cm
Arduino
今回は0cm~3cm以内での距離を計測するフォトセンサを使ってみます
物体との距離がわかるセンサ達
光電(フォト)センサ 約0cm ~ 3cm
赤外線距離センサ 約10cm ~ 80cm
超音波距離センサ 約3cm ~ 5cm
Arduino
今回使用するセンサ
センサの種類:反射型フォトセンサ 通称 :フォトリフレクタ 計測可能距離:約0cm ~ 3cm 型番 :LBR-127HLD 買えるところ:秋月電気通商 http://akizukidenshi.com/catalog/g/gP-04519/
赤外線LED赤外線受光 モジュール
仕組み フォトリフレクタは赤外線LEDと 赤外線受光モジュールがセットになってます
赤外線LED赤外線受光 モジュール
仕組み
1.赤外線出発
2.赤外線が物体に 当たって反射
3.赤外線をキャッチ
赤外線の反射率によって 距離を計測する
使い方
この二つを同時に使える回路を作ります
赤外線LED赤外線受光 モジュール
ちょっと寄り道 LEDの使い方の復習
LED
LEDには極性がありました。どっちがどっちだっけ?
LED
+-
+- 出っ張ってるほうが プラスと覚えるべし
ちょっと寄り道 LEDの使い方の復習
LED× LEDO
ちょうどいい 抵抗
ちょっと寄り道 LEDの使い方の復習
LEDを使う時は抵抗を使って流れる電流の量を調整しよう。
改めて使い方
赤外線LED赤外線受光 モジュール
ちょうどいい 抵抗 ちょうどいい
抵抗
この回路で フォトリフレクタは動くはず
改めて使い方
ちょうどいい 抵抗
ちょうどいい 抵抗
これでもいいよね
赤外線LED赤外線受光 モジュール
並列回路:電圧は等しい 電流は異なる
こんなルールありました
改めて使い方
ちょうどいい 抵抗
ちょうどいい 抵抗
赤外線LED赤外線受光 モジュール
Arduinoにするとこんな感じ
Arduino
GNDピンへ 5Vピンへ
改めて使い方
ちょうどいい 抵抗
ちょうどいい 抵抗
赤外線LED赤外線受光 モジュール
Arduino
GNDピンへ 5Vピンへ
A0ピンへ
センサ値をとるには赤外線 受光モジュールの回路から 値をとろう
Arduinoにするとこんな感じ
回路図
赤外線 赤外線受光 モジュール
220 1K
赤外線LED赤外線受光 モジュール
+
-+
よくみると角が欠けているところがあるので この角を目印にプラス・マイナスを確認して下さい。
-
回路図
赤外線 赤外線受光 モジュール
220 1K
赤外線LED赤外線受光 モジュール
+
-+
このフォトリフレクタの赤外線受光モジュールは 足が長いほうがプラスになっているのでご注意を。
-
回路図
赤外線LED 赤外線受光 モジュール
220Ω 1KΩ赤外線LED赤外線受光
モジュール
ソースコード解説
void setup(){ Serial.begin(9600); //シリアル通信を開始 } !
void loop(){ int dis = analogRead(A0); //A0ピンからの入力 dis = map(dis, 0,1023, 0, 255); //0~1023の範囲の値を0~255の範囲の値へ Serial.println(dis); //シリアルモニタに表示する delay(100); }
①②③
本日のポイント
analogRead(ピン番号); 指定したアナログピンから値を読み取る。 アナログ信号を0~1023の数値に変換して 読み取る。
その1
本日のポイント
map(この値を, こっから, ここまでの範囲から, こっから, ここまでの範囲にする);
数値をある範囲から別の範囲にする命令。
その2
ex) map(analogRead(0), 0, 1023, 0, 255);例えば、0~1023の範囲で値をとるセンサの値を 1バイトでシリアル通信で送信する時などに便利なのだ
この値を 0~1023から 0~255の範囲にする
本日のポイントその2:もうちょっと詳しく
センサ値シリアル通信
Arduino Processing0~1024の範囲で 値をとる
analogRead()ではセンサの値を0~1023段階でとることができる
本日のポイントその2:もうちょっと詳しく
センサ値シリアル通信
Arduino Processing0~1024の範囲で 値をとる
前回のシリアル通信の方法では1byteづつデータを送信する
1byteづつ送信 1byte=0~255
本日のポイントその2:もうちょっと詳しく
センサ値シリアル通信
Arduino Processing0~1024の範囲で 値をとる
つまり、255以上の値を一度に送信することができない
1byteづつ送信 1byte=0~255
0
1024
0255
本日のポイントその2:もうちょっと詳しく
センサ値シリアル通信
Arduino Processing0~1023の範囲で 値をとる
こんな時にmapを使って値の範囲を変えたりします
1byteづつ送信 1byte=0~255
0
1023
0255
map(値,0,1023,0,255);
本日のポイント
Serial.print(整数又はString型); Serial.println(整数又はString型);
シリアルモニタで値を表示することができる。 シリアル通信の際にデータ送信のためにも 使える。printlnで末尾改行。 Trinketではデバック用に使用できない。 UnoなどのArduinoで使用しよう。
その3
void setup(){ Serial.begin(9600); //シリアル通信を開始 } !
void loop(){ int dis = analogRead(A0); //A0ピンからの入力 dis = map(dis, 0,1023, 0, 255); //0~1023の範囲の値を0~255の範囲の値へ Serial.println(dis); //シリアルモニタに表示する delay(100); }
①②③
#2 近くの物体との距離を測るArduinoで遊ぼう
2014.10.09Created by Sannomiy Yasunori
終わり
参考サイト
Arduino動かせ入門、フォトセンサーで物体の動きを検出する、 http://www.geocities.jp/zattouka/GarageHouse/micon/Arduino/PS/PS.htm