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