Arduinoと戯れる!

Processing 入門 Lesson 23 【超音波距離センサ】

Processing-lesson23-00Processing入門編
スポンサーリンク
Processing 入門
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点です。

1.Arduino → Processingの通信方法を理解
2.超音波距離センサの復習

 

本Lessonの学習に必要な物

本Lessonに必要となる電子部品を列挙します。

 

 

Jumper wireはできれば、「オス-メス オス-オス メス –メス」の3種類を揃えておくことをお勧めします。

 

短めのメスーオスが使いやすい場合も。

 

抵抗、LEDなどを個別でセット品を購入しても、そんなに使わない!

という方は、「電子工作基本部品セット」が使い勝手が良い。

 

実践 回路作成

最初に回路図を確認してください。

次に、回路図に合わせて部品を接続します。

最後にスケッチ(コード)を描きましょう。

超音波距離センサの距離をPC上で表現していきます。

 

Arduinoのピン配置を確認したい方は番外編02を参照してください。

 

回路図

超音波距離センサ」のみの回路となります。

Arduino 入門 Lesson 10 【超音波距離センサ編】と同じ回路です。

利用するピンも同じ10、11番ピン。

 

回路図がこちら。

Arduino-lesson10-05

 

こちらがブレッドボード図。

Arduino-lesson10-06

 

回路図は「fritzing」を利用しています。

「fritzing」の使い方は下記を参照してください。

 

接続

下図に示すように、用意した部品を使用して接続しましょう。

部品は超音波距離センサのみのため簡単に接続できます。

 

使用するポートは、digital IOの「10、11」電源の「5V」「GND」です。

穴に挿入しづらいときは、ラジオペンチなどを使用してください。

Arduino-lesson10-07

 

Serial入出力のためのクラス 復習

Lesson 14にて解説しましたが、覚えるという意味で再度軽く解説

 

Serialクラスの機能を使うためには、「serialパッケージをimport」する。

import processing.serial.*;

 

次に、Serialオブジェクトの生成処理

生成するためには、Serialクラスのコンストラクタ使用。

Serial(parent, portName, baudRate);
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以降とは同じ方向になります。

 

流れとしては以下となります。

  1. 超音波距離センサで超音波が跳ね返ってくる時間を測定し距離を計算
  2. 計算した距離をパソコン側へ伝える(送信)
  3. 受け取った距離を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側へ送っているということです。

 

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);
}

 

補足事項
通信速度、COMポートの番号はArduinoと合わせる必要があります。
COMポートはAruduinoがつながっている番号であり、デバイスマネージャで確認可能

 

動作確認

では、さっそく動作を確認していきます。

  1. Arduinoへスケッチ書き込み
  2. Processingスケッチ実行
  3. 超音波センサの前に遮蔽物を置く
  4. 遮った距離にあわせて、数値とゲージが動く

 

Processingのウィンドウ画面に「ゲージ」があわわれすます。

超音波センサの前に遮蔽物を置いて、動かしてみてください。

 

補足
音速の340m/sは温度の影響を受けます。
正確な測定には、温度を測定して補正する必要があります。
精度を上げるためには温度センサで温度を測定し、補正式で補正が必要です。

 

下記に動作させているときの描画画像をのせておきます。

測定距離[cm]Processingウィンドウ
5Processing-lesson23-01
30Processing-lesson23-02
100Processing-lesson23-03
200Processing-lesson23-04

 

本Lessonでも、データ方向「Arduino」 → 「Processing」を理解するために簡単な電子部品で遊んでみました。

次回も、「Arduino」 → 「Processing」の理解を深めていきます。

 

まとめ

Processing 入門 Lesson 23【超音波距離センサ】はここまで。

本Lessonでは以下の2つについて目標としました。

1.Arduino → Processingの通信方法を理解
2.超音波距離センサの復習

 

超音波センサとサーボモータを併せてradar(レーダ)を作っている人もいます。

距離を測るセンサとサーボモータでradar(レーダ)を作る。

面白そうです!

挑戦してみたいと考えています!

Processingに慣れると、色々と面白いことがビジュアルで表現できます。

 

次回Lesson 23以降も引き続きArduino→Processingについて学習していきます。

 

Processingを始めようと考えている方。

ネット情報のみでも十分に学習可能です。

手元に参考書がほしいと考えている場合は下記の2冊程度で十分と考えます。

 

最後に

疑問点、質問などありましたら気軽にコメントください。

この電子部品の解説をしてほしい!などなどなんでもOKです。

リンク切れ、間違いなどあればコメントいただけると助かります。

 

Arduino入門編、番外編、お役立ち情報などなどサイトマップで記事一覧をぜひご確認ください。

 

Arduino入門編で使用しているUNOはAmazonにて購入可能です。

互換品とは言え、Arduinoはオープンソース。

複製して販売するのもライセンス的に問題なし。

 

そのため互換品の品質も悪くなく、それでいて値段は安いです。

正規品本体の値段程度で豊富な部品が多数ついています。

 

学習用、遊び用、お試し用には安価な互換品がおすすめです。

 

 

上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。

 

Amazonでお得に買う方法

Amazonでお得に購入するなら、Amazonギフト券がおすすめです。

現金でチャージするたびに、チャージ額に応じたポイントが付与されます。

最大2.5%!!!(Amazonプライム会員ならさらにお得)

チャージ額(一回分)一般プライム会員
5,000円~19,999円0.5%1.0%
2,0000円~39,999円1.0%1.5%
40,000円~89,999円1.5%2.0%
90,000円~2.0%2.5%

さらに、初回チャージで2000ポイントもらえるキャンペーンも実施中!
※いつもは1000ポイント、今なら2000ポイントです!

\Amazonギフト券 2000ポイントキャンペーン/
Amazonチャージ 初回購入で2000ポイントキャンペーン

 

補足情報
コンビニ・ATM・ネットバンクが対象
購入は1円単位で可能

コメント

タイトルとURLをコピーしました