Lesson 23
【超音波距離センサ】
こんにちは、管理人のomoroyaです。
ProcessingのLesson、かなり久しぶりに更新。
なかなか、先に進みませんが気長に行きます。
Lesson 19からは「Arduino」 → 「Processing」への情報の流れを学習中。
センサから得られたデータを処理するためには、この流れを理解する必要があります。
もうしばらく、色々なセンサで遊んでいきます。
Lesson 23で使用する電子部品は【超音波距離センサ】です。
本LessonではArduino入門編で遊んだ「超音波距離センサ」を思い出しながら学習です。
本Lessonも情報の流れは、「Arduino」 → 「Processing」。
Arduinoで取得したデータをProcessingで処理する学習。
前回同様、理解しやすいように使用する電子部品は少なくします。
「超音波距離センサ」のみを使った回路で学習していきましょう。
Processing学習の最終目標は、「6軸モーションセンサ」との連携です。
Lesson 14以降を学習することでLesson 01 ~ Lesson 06【Arduino連携変 そのX】で遊んだスケッチも理解できるようになるはず。
本日も楽しんでいきましょう。
Processingを始めようと考えている方。
ネット情報のみでも十分に学習可能です。
手元に参考書がほしいと考えている場合は下記の2冊程度で十分と考えます。
はじめに
Lesson 14からはArduinoと一緒に学習していきます。
Arduinoの詳細な解説は「Arduino入門編」にて確認してください。
本Lessonでは超音波距離センサで得られた距離(時間)をProcessingに表現させます。
超音波距離センサの情報をArduinoからパソコンへ送信。
Processingで処理して画像で表現するということになります。
「超音波距離センサって何?」という場合は、下記を読んでおくと理解しやすいはずです。
Lesson 23 目標
本Lessonの目標は以下の2点です。
2.超音波距離センサの復習
本Lessonの学習に必要な物
本Lessonに必要となる電子部品を列挙します。
- USB接続用のPC(IDE統合環境がインストールされたPC)
→管理人が勝手に比較したBTOメーカーを紹介しています。 - UNO R3(以下UNO)、おすすめUNO互換品(ELEGOO)
- PCとUNOを接続するUSBケーブル
- ブレッドボード安価(大)、ブレッドボード安価(中)
※おすすめブレッドボード(大)、おすすめブレッドボード(中) - 超音波距離センサモジュール(HC-SR04)
- M-M Jumper wire(UNOと部品をつなぐための配線)
Jumper wireはできれば、「オス-メス オス-オス メス –メス」の3種類を揃えておくことをお勧めします。
短めのメスーオスが使いやすい場合も。
抵抗、LEDなどを個別でセット品を購入しても、そんなに使わない!
という方は、「電子工作基本部品セット」が使い勝手が良い。
実践 回路作成
最初に回路図を確認してください。
次に、回路図に合わせて部品を接続します。
最後にスケッチ(コード)を描きましょう。
超音波距離センサの距離をPC上で表現していきます。
Arduinoのピン配置を確認したい方は番外編02を参照してください。
回路図
「超音波距離センサ」のみの回路となります。
Arduino 入門 Lesson 10 【超音波距離センサ編】と同じ回路です。
利用するピンも同じ10、11番ピン。
回路図がこちら。
こちらがブレッドボード図。
回路図は「fritzing」を利用しています。
「fritzing」の使い方は下記を参照してください。
接続
下図に示すように、用意した部品を使用して接続しましょう。
部品は超音波距離センサのみのため簡単に接続できます。
使用するポートは、digital IOの「10、11」電源の「5V」「GND」です。
穴に挿入しづらいときは、ラジオペンチなどを使用してください。
Serial入出力のためのクラス 復習
Lesson 14にて解説しましたが、覚えるという意味で再度軽く解説。
Serialクラスの機能を使うためには、「serialパッケージをimport」する。
次に、Serialオブジェクトの生成処理。
生成するためには、Serialクラスのコンストラクタ使用。
parent:通常「this」を使用
portName:ポート番号(COM*) デフォルト:COM1
baudRate:通信速度 デフォルト:9600
Serial Port; //シリアルクラスのオブジェクト、変数の設定
Port = Serial(this, COM3, 9600); //Serialオブジェクト生成、Portへ代入
Serialクラスの主なメソッドを紹介。
Serialクラス | 内容 |
---|---|
available() | 読めるデータのバイト数を返す。 戻り値が0より大きい場合、データを利用できる。 |
serial.list() | 使用可能なシリアルポートのリストを返す。 |
read() | 次の1バイトの読み込み。 0~255の値を返す。 読めるバイトがないと-1を返す。 データが使用可能かどうかを確認するために最初にavailable()で確認することを推奨します。 |
write() | バイト、文字、整数、バイト[]、文字列をシリアルポートに書き込みます。 |
詳しく知りたい方は、公式のホームページで確認!
実践 スケッチ作成
ProcessingとArduinoを連携するためには、お互いにデータのやり取りをする必要があります。
本Lessonのデータのやり取りは、「Arduino」 → 「Processing」。
Lesson 18までとは逆方向、Lesson 19以降とは同じ方向になります。
流れとしては以下となります。
- 超音波距離センサで超音波が跳ね返ってくる時間を測定し距離を計算
- 計算した距離をパソコン側へ伝える(送信)
- 受け取った距離をProcessingウィンドウでグラフィックを描画。
といった動作!
Arduino側は、距離を数値としてパソコンへ送信。
- pulseIn関数で読み取った時間を距離に変換しSerial.write()関数で送信
pulseIn(pin,value,timeout) | ピンに入力されるパルスを検出。 パルスのHigh期間またはLow期間をマイクロ秒単位で返します。 タイムアウトを指定した場合は、その時間を超えた時点で0を返します。 pin:パルスを入力するピンの番号 value:測定するパルスの種類、HIGHまたはLOW timeout:タイムアウトまでの時間(マイクロ秒)、デフォルトは1秒 、省略可 |
Processing側のスケッチは送られてきたデータをグラフィックで描画。
- 送られてきたデータをread()関数で読み込み
- 距離を棒グラフで描画する
Arduino用 サンプルスケッチ
サンプルスケッチ(コード)を下記に示します。
digitalピンの10、11番を使います。
基本はLesson 10と同じです。
//Lesson 23 Processing制御用のArduino用スケッチ //Processingによる超音波センサ グラフィック描画 //https://omoroya.com/ #define TrigPin 10 // Trigger Pin定義 #define EchoPin 11 // Echo Pin定義 long ProDelay = 0; //Echo出力のHigh期間を格納する変数 long Distance = 0; //計算した距離を格納する変数 void setup() { Serial.begin( 9600 ); //シリアル通信のデータ転送レートを9600bpsで指定。bpsはビット/秒。 pinMode( TrigPin, OUTPUT ); //デジタル入出力の10番ピンをOUTPUTに指定 pinMode( EchoPin, INPUT ); //デジタル入出力の11番ピンをINPUTに指定 } void loop() { digitalWrite(TrigPin, LOW); //10番ピンからLOWを出力 delayMicroseconds(10); //10us待機 //超音波を出力するためのトリガ信号生成 digitalWrite( TrigPin, HIGH ); //トリガ信号Highパルスエッジ delayMicroseconds( 10 ); //トリガ信号パルス幅10usを生成 digitalWrite( TrigPin, LOW ); //トリガ信号Lowパルスエッジ ProDelay = pulseIn( EchoPin, HIGH ); //11番ピンに入力されるEchoピンのHigh期間を測定 if (ProDelay > 0) { //0を越えていたら下記を実行 Distance = 340*ProDelay/2/10000; //音速340us/sとして距離の計算とcmへの換算 Serial.write(Distance); //シリアルモニタに計算した距離を表示 } delay(100); //100ms待機 }
このスケッチはProcessingがなくても動作を確認することができます。
Aruduinoのシリアルモニタを立ち上げてみてください。
ポテンショメータを動かす度にシリアルモニタに「何かが」が表示されるはずです。
ただし、シリアルモニタから送信するデータはASCIIコードであることに注意。
Processing用 サンプルスケッチ
サンプルスケッチ(コード)を下記に示します。
このスケッチは受け取った距離を棒グラフ(ゲージ)として表示しています。
//Lesson 23 Processing用スケッチ //Processingによるによる超音波センサ グラフィック描画 //https://omoroya.com/ import processing.serial.*; //Arduinoと通信するためのライブラリの読み込み Serial myPort; //シリアル通信を行うための変数を定義 PFont myFont; //画面に表示するフォントの指定 int distance = 0; int x = 200, y= 60; int val1 = 100; int val2 = val1/50; void serialEvent(Serial p){ distance = myPort.read(); } void setup(){ size(1200,200); //ウィンドウサイズ background(0,0,0); //背景の色 println("Available serial ports:"); printArray(Serial.list()); //使用できるCOMポートの取得 //printArray(PFont.list()); //使用できるFontの表示、わからないときに使用 myPort = new Serial(this, Serial.list()[0], 9600); //通信するポートと速度の設定、Arduinoと合わせる必要あり myPort.clear(); //受信データをクリア myFont = createFont("Meiryo UI Bold", 80); //Font指定、サイズ80pt textFont(myFont); } void draw(){ background(0,0,0); //画面の再描画 //ゲージの下地描画 fill(100,0,0); //色指定 rect(x, y, 800, 65); //ゲージの下地描画 fill(255,255,0); //色指定 //横軸表示 textSize(20); //テキストサイズ textAlign(CENTER); //中央揃え text( 0, x, 150); //0 text( 50, x+val1, 150); //50 text(100, x+val1*2, 150); //100 text(150, x+val1*3, 150); //150 text(200, x+val1*4, 150); //200 text(250, x+val1*5, 150); //250 text(300, x+val1*6, 150); //300 text(350, x+val1*7, 150); //350 text(400, x+val1*8, 150); //400 text("cm", x+val1*8+40, 150); //cm //距離ゲージ表示 fill(255,255,0); //色指定 rect(x, y, distance*val2, 65); //横棒描画 fill(255,0,0); //色指定 //距離表示 textSize(60); //テキストサイズ textAlign(RIGHT); //右揃え text(distance, 350, 115); //距離の表示 //cm表示 textSize(30); //テキストサイズ textAlign(LEFT); //左揃え text("cm", 355, 115); //cm表示 delay(100); }
動作確認
では、さっそく動作を確認していきます。
- Arduinoへスケッチ書き込み
- Processingスケッチ実行
- 超音波センサの前に遮蔽物を置く
- 遮った距離にあわせて、数値とゲージが動く
Processingのウィンドウ画面に「ゲージ」があわわれすます。
超音波センサの前に遮蔽物を置いて、動かしてみてください。
下記に動作させているときの描画画像をのせておきます。
測定距離[cm] | Processingウィンドウ |
---|---|
5 | |
30 | |
100 | |
200 |
本Lessonでも、データ方向「Arduino」 → 「Processing」を理解するために簡単な電子部品で遊んでみました。
次回も、「Arduino」 → 「Processing」の理解を深めていきます。
まとめ
Processing 入門 Lesson 23【超音波距離センサ】はここまで。
本Lessonでは以下の2つについて目標としました。
2.超音波距離センサの復習
超音波センサとサーボモータを併せてradar(レーダ)を作っている人もいます。
距離を測るセンサとサーボモータでradar(レーダ)を作る。
面白そうです!
挑戦してみたいと考えています!
Processingに慣れると、色々と面白いことがビジュアルで表現できます。
次回Lesson 23以降も引き続きArduino→Processingについて学習していきます。
Lesson 24は【温湿度センサ】です。
Processingを始めようと考えている方。
ネット情報のみでも十分に学習可能です。
手元に参考書がほしいと考えている場合は下記の2冊程度で十分と考えます。
最後に
疑問点、質問などありましたら気軽にコメントください。
この電子部品の解説をしてほしい!などなどなんでもOKです。
リンク切れ、間違いなどあればコメントいただけると助かります。
Arduino入門編、番外編、お役立ち情報などなどサイトマップで記事一覧をぜひご確認ください。
Arduino入門編、Arduino入門編2で使用しているUNOはAmazonにて購入可能です。
Arduino入門編では互換品を使用。
Arduinoはオープンソース。
複製して販売するのもライセンス的に問題なし。
そのため互換品の品質も悪くなく、それでいて値段は安いです。
正規品本体の値段程度で豊富な部品が多数ついています。
学習用、遊び用、お試し用には安価な互換品がおすすめです。
ELEGOO UNO キット レベルアップ チュートリアル付 uno mega2560 r3 nanoと互換 Arduino用
上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。
Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)
Amazonでお得に買う方法
Amazonでお得に購入するならAmazon Mastercard、Amazonギフト券がおすすめです。
時期により異なりますが、様々なキャンペーンを実施しています。
\Amazonギフト券/
Amazonギフトカード キャンペーン
\Amazon Mastercard お申込み/
Amazon Mastercard 申し込み
いずれの場合もプライム会員である方がお得!!
\Amazon Prime 30日間の無料会員を試す/
無料会員登録
コメント