○ 部品
部品名 | 個数 |
距離センサー(GP2Y0A21YK) | 1個 |
サーボモーター(SG90) | 1個 |
電池ボックス | 1個 |
単三電池 | 4本 |
ブレッドボード | 1個 |
ジャンパワイヤ(オス-オス) | 7本 |
ジャンパワイヤ(オス-メス) | 3本 |
第8回 レーダーを作成して、Processingで検証してみる
○ 部品
部品名 | 個数 |
距離センサー(GP2Y0A21YK) | 1個 |
サーボモーター(SG90) | 1個 |
電池ボックス | 1個 |
単三電池 | 4本 |
ブレッドボード | 1個 |
ジャンパワイヤ(オス-オス) | 7本 |
ジャンパワイヤ(オス-メス) | 3本 |
Processingとは、画像処理やアニメーションといったプログラムによるビジュアルデザイン、インタラクションデザイン
などの分野でのプログラミングに特化した、オープンソースのプログラミング環境です。
Javaをベースにした実行環境とエディタが用意されています。
Arduinoと連携させることにより、ProcessingからArduinoの情報を取得して、PCの画面上で映像や音を表現できるようになります。
(1) https://www.processing.org/にアクセスして、「Download Processing」 をクリックします
(2) 寄付の選択(寄付しない場合は「No Donation」を選択)をして、「Download」 をクリックします
(3) 「Windows 32-bit」をクリックしてダウンロードします(64ビット版のWindowsを使っていても、32ビット版をクリック)
(4) ダウンロードしたファイルを展開して、「processing.exe」 をクリックします
(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);
}
(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)を開きます
(2) 再生ボタンをクリックして実行します
radarウィンドウの中をマウスでクリックすると、動作が開始されます
(3) 今回はペットボトルとティッシュの箱を置いて実験してみました
(4) Processingで検証してみると、ペットボトルとティッシュの箱に反応していることがわかります