体験的マイコン学習(Arduino編)


目次



第8回 レーダーを作成して、Processingで検証してみる


今回は、サーボモーターと距離センサーを使って、レーダーを作成してみました

検証には、Processingというツールを使用します

準備するもの

UncomPatino基板

○ 部品

部品名 個数
距離センサー(GP2Y0A21YK) 1個
サーボモーター(SG90) 1個
電池ボックス 1個
単三電池 4本
ブレッドボード 1個
ジャンパワイヤ(オス-オス) 7本
ジャンパワイヤ(オス-メス) 3本
ページトップ

Processingとは

Processingとは、画像処理やアニメーションといったプログラムによるビジュアルデザイン、インタラクションデザイン
などの分野でのプログラミングに特化した、オープンソースのプログラミング環境です。
Javaをベースにした実行環境とエディタが用意されています。
Arduinoと連携させることにより、ProcessingからArduinoの情報を取得して、PCの画面上で映像や音を表現できるようになります。

Processingイメージ
ページトップ

Processingのダウンロード

(1) https://www.processing.org/にアクセスして、「Download Processing」 をクリックします

Processingダウンロード1

(2) 寄付の選択(寄付しない場合は「No Donation」を選択)をして、「Download」 をクリックします

Processingダウンロード2

(3) 「Windows 32-bit」をクリックしてダウンロードします(64ビット版のWindowsを使っていても、32ビット版をクリック)

Processingダウンロード3

(4) ダウンロードしたファイルを展開して、「processing.exe」 をクリックします

Processingダウンロード4

(5) Processing起動の確認

Processingダウンロード5
ページトップ

プログラムの作成(Processing)

(1) Processing側のプログラムを作成します

radar.pde

// Arduinoと通信するためのライブラリを読み込む
import processing.serial.*;
// シリアル通信を行う為の変数の定義
Serial port;
// サーボモーターの角度を保存する変数の定義
int angle;

void setup () {
  // 255x255ドットの画面を作成
  size(255, 255);
  // 通信ポートと速度の設定
  port = new Serial(this, "COM13", 9600);
  // 背景を白
  background(255);
  // 初期角度を60度
  angle = 60;
  // Arduinoにサーボモーターの角度を送る
  port.write(angle);
}

void draw(){
  int c;
  // データが送られてきたか?
  if (port.available() > 0) {
    float a;
    // 距離センサの値を読み込む
    c = port.read();
    // センサの値が1より大きいか?
    if (c > 0){
      // 距離に直す
      a = (float)(4000.0/c);
    } else {
      // 0ならば距離を4000にする
      a = 4000;
    }
    // 線の色を白に
    stroke(255);
    // 白い線で前回の線を消す
    line(128, 0, 4000 * cos((angle + 30) / 180.0 * PI) + 128, 4000 * sin((angle + 30) / 180.0 * PI));
    // 線の色を黒に
    stroke(0);
    // 距離を線の長さで表す
    line(128, 0, a * cos((angle + 30) / 180.0 * PI) + 128, a * sin((angle + 30) / 180.0 * PI));
    // 角度を1度増やす
    angle++;
    // 120度を超えたら0度に戻す
    if (angle > 120) {
      angle = 0;
    }
    // Arduinoにサーボモーターの角度を送る
    port.write(120 - angle);
  }
}

void mousePressed() {
  // 初期角度を60度
  angle = 60;
  // Arduinoにサーボモーターの角度を送る
  port.write(angle);
}

ページトップ

プログラムの作成(Arduino)

(1) Arduino側のプログラムを作成します

radar.ino

// サーボモーターを動かすためのライブラリの読み込み
#include <Servo.h>

// サーボモーターを使うための変数の定義
Servo servo;

void setup() {
  // 通信速度を9600bpsに
  Serial.begin(9600);
  // サーボモーターを動かすピンを設定
  servo.attach(9);
  // サーボモーターの初期角度を60度
  servo.write(60);
}

void loop() {
  // データが送られてきたか?
  if (Serial.available() > 0) {
    // 値を読み込む
    int v = Serial.read();
    // その値サーボモーターを回す
    servo.write(v);
    // 1ミリ秒待つ
    delay(1);
    // 距離センサの値を読む
    v = analogRead(0);
    // 4で割って送信
    Serial.write(v/4);
  }
}

ページトップ

レーダーの組み立て

(1) サーボモーターの上に、距離センサーを乗せて設置します

下図のように、テープなどで固定します。テープだけで安定しない場合は、他の部品を使用して固定してください。

レーダーの組み立て
ページトップ

ブレッドボードへの接続

(1) Arduino、サーボモーター、距離センサー、電池ボックスを接続します

ブレッドボードへの接続
ページトップ

マイコンボードへの書き込み

(1) 作成したプログラム(radar.ino)をコンパイルします

コンパイル

(2) マイコンボードへ書き込みます

マイコンボードへの書き込み
ページトップ

レーダーを動かしてみる

(1) Processingを起動して、作成したファイル(radar.pde)を開きます

Processingの起動

(2) 再生ボタンをクリックして実行します

radarウィンドウの中をマウスでクリックすると、動作が開始されます

プログラムの実行

(3) 今回はペットボトルとティッシュの箱を置いて実験してみました

(4) Processingで検証してみると、ペットボトルとティッシュの箱に反応していることがわかります

Processing検証
ページトップ