Arduinoと戯れてみる!

Processing 入門 Lesson 18 【サーボモーターとコントローラー】

Processing-lesson18-00Processing入門編
スポンサーリンク
Processing 入門
Lesson 18
【サーボモーターとコントローラー】

こんにちは、管理人のomoroyaです。

 

Lesson 17は【圧電スピーカーと電子ピアノ】ということで圧電スピーカーを使って簡易的な電子ピアノを作成しました。

Lesson 18は、【サーボモーターとコントローラー】です。

Processingでコントローラーを作成。

Arduino側はサーボモーターを制御。

Processingで作ったコントローラーとサーボモーターを連携させる学習となります。

 

そう、「コントローラ的な物」を作っちゃおうということです。

といっても、マウスで動かすだけですが・・・。

 

Processing学習の最終目標は、「6軸モーションセンサ」との連携です。

 

Lesson 14以降を学習することでLesson 01 ~ Lesson 06【Arduino連携変 そのX】で遊んだスケッチも理解できるようになるはず。

これからのLessonを楽しみましょう!

 

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

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

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

 

スポンサーリンク

はじめに

Lesson 14からはArduinoと一緒に学習していきます。

Arduinoの詳細な解説は「Arduino入門編」にて確認してください。

 

本Lessonではサーボモーターを制御するスケッチを描いていきます。

始めに、下記を読んでおくと理解しやすいはずです。

 

また、サーボモーターの制御方法はPWM制御(パルス幅変調)を使います。

興味がる方は、Lesson 04にて詳細を解説しています。

 

Lesson 18 目標

本Lessonの目標は以下の3点です。

1.簡易的なコントローラーを作って遊ぶ!
2.ArduinoとProcessingの通信方法を理解
3.サーボモーターの復習

 

本Lessonの学習に必要な物

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

サーボモーターが新たに必要になります。

※本Lessonではオス―オスのジャンパーワイヤーを使用すればブレッドボード不要です。

 

サーボモーターがこちら。

最近、中国から電子部品を取り寄せずらいためか在庫切れ頻発している気がします・・・。

そんな時は、同等品で補いましょう。

Arduino-lesson09-01

 

 

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

 

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

 

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

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

 

実践 回路作成

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

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

最後にスケッチ(コード)を書いて、サーボ―モーターのコントローラーを作っていきましょう。

 

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

 

回路図

サーボモーターのみの単純な回路です。

Arduino 入門 Lesson 09 【サーボモーター編】と同じ回路となります。

利用するピンも同じ9番ピン。

 

回路図がこちら。
Arduino 入門 Lesson 09 【サーボモーター編】と同じ回路。

Arduino-lesson09-06

 

 

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

Arduino-lesson09-07

 

 

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

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

 

接続

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

部品はサーボモーターのみのため簡単に接続できます。

 

用するポートは、Digital IOの「9」、電源の「5V」、「GND」です。

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

Arduino-lesson09-04

 

 

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のデータのやり取りは、「Processing」 → 「Aruduino」

これまでと同じ。

次回Lesson19からは逆を予定しています。

 

Processingウィンドウでコントローラーを描画。

マウスでコントローラーを動かすことで、サーボモーターの角度を変える。

Arduino側では、パソコンから送られてきたデータによって、サーボメーターの角度を変える

といった動作になります。

 

Arduino側は、受信データである「20~160」のデータに対して以下の動作をさせます。

  • 送られてきた20度~160度の範囲でサーボモーターを動かす。

 

Processing側のスケッチはマウスの動作によって以下の動作とデータの送信をします。

  • クリックして動かしている間は青色で0度~160度のグラフィックを描画
  • クリックをやめたところで、止めて赤色で表示
  • 上記の角度にあわせて、その角度ををArduinoへ送信

 

Arduino用 サンプルスケッチ

サンプルスケッチ(コード)を下記に示します。

 

今回Servoライブラリを使用します。

ライブラリがインストールされていない場合はインストールお願いします。

スケッチ」⇒「ライブラリをインクルード」⇒「ライブラリを管理…

 

もしくは下記から直接入手することも可能です。

 

ライブラリのインストールに関してはLesson 01にて詳しく解説しています。

 

デジタル入出力である9番ピンを使用します。

次にProcessingから受信したデータを読み込む。

あとは、受け取った「20度~160度」のデータにあわせてサーボモーターを動かすスケッチです。

//Lesson 18 Processing制御用のArduino用スケッチ
//Processingによるサーボモーターオントローラー
//https://omoroya.com/

#include 
Servo myServo; //Servo型変数の作成
 
void setup(){
  Serial.begin(9600); //シリアル通信のデータ転送レートを設定しポート開放
  myServo.attach(9);  //9番ピンをサーボの信号として割り当て
  myServo.write(160); //初期値160度
  delay(1000);        //サーモが初期角度になるまで待機
}
 
void loop() {
  if(Serial.available() > 0){         //受信データがある場合if文内を処理
    int deg = Serial.read();          //受信したデータをvalにint型として格納
    deg = map(deg, 20, 160, 160, 20); //グラフィックとあわせるために向きを逆にしている。いらない場合は削除
    myServo.write(deg);               //受信した角度でサーボモーターを動かす
  }
}

 

このスケッチもLesson 14同様にProcessingがなくても動かすことができます。

Aruduinoのシリアルモニタを立ち上げて、データを入力して送信することでサーボモーターを動かすことができます。

ただし、シリアルモニタから送信するデータはASCIIコードであることに注意。

本LessonのProcessingスケッチも、シリアルモニタをマウスに置き換えていると考えていただければ理解しやすいと思います。

 

Processing用 サンプルスケッチ

サンプルスケッチ(コード)を下記に示します。

 

mousePressed変数を使って、クリックしている間のみデータを送信するスケッチとなります。

サーボモータに過負荷がかからないように送信するデータは「20度~160度」に限定しています。
※購入したサーボモータにより精度がことなりますので余裕を持たせた方が良い。

このスケッチで重要なところは、新しく使用した関数「translate()、atan2()」の2つでしょうか。

  • translate():原点を変更できる関数
  • atan2():座標からθ(角度)を計算する関数

とくに、translate()関数は便利なので覚えておくとよいです。

//Lesson 18 Processing用スケッチ
//Processingによるサーボモーターコントローラー
//https://omoroya.com/

import processing.serial.*; //Arduinoと通信するためのライブラリの読み込み
Serial port;                //シリアル通信を行うための変数を定義

int deg = 20;                    //グローバル変数の設定

void setup() {
  size(400, 400);                                  //ウィンドウサイズ
  background(200);                                 //背景の色
  println("Available serial ports:");
  printArray(Serial.list());                       //使用できるCOMポートの取得
  port = new Serial(this, Serial.list()[0], 9600); //通信するポートと速度の設定、Arduinoと合わせる必要あり
  stroke(0);                                       //黒線
  strokeWeight(10);                                //線の太さ
  textSize(100);                                   //テキストサイズ
  frameRate(30);                                   //30fpsに設定
}

void draw() {
  if(mousePressed){
    //マウスを押しているときの処理
    background(200);                                          //背景を塗りぶして更新
    
    //マウスの位置を角度に変える処理
    translate(width/2, height/2);                             //原点をウインドウの中心に
    float theta = atan2(mouseY - height/2, mouseX - width/2); //座標からθを求める
    deg =int(theta / 3.14 * 180);                         //θを角度に変換
    
    //サーボモーターを壊さないように20度~160度に限定
    if(deg < 20){
      deg = 20;
    }else if(deg > 160){
      deg = 160;
    }
    
    //図形描画
    fill(0, 0, 255);  //青色
    line(0, 0, 140, 49);                            //角度の始めの描画
    line(0, 0,-140, 49);                            //角度の終わりの描画
    arc(0, 0, 300, 300, radians(20), radians(deg)); //中心点のx, 中心点のy, 幅, 高さ, 始点の角度, 終点の角度
    text(deg, -110, -55);                            //角度の値を描画
    port.write(deg);                                //角度をArduinoへ送信
    
  }else{
    //マウスを押していないときの処理
    background(200);                                //背景を塗りぶして更新
    fill(255, 0, 0);  //赤色
    translate(width/2, height/2);                   //原点をウインドウの中心に
    text(deg, -110, -55);                            //テキストを表示
    line(0, 0,  140, 49);                           //角度の始めの描画
    line(0, 0, -140, 49);                           //角度の終わりの描画
    arc(0, 0, 300, 300, radians(20), radians(deg)); //中心点のx, 中心点のy, 幅, 高さ, 始点の角度, 終点の角度
  }
}

 

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

 

動作確認

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

  1. Arduinoのスケッチ書き込み
  2. Processingスケッチ実行
  3. マウスを/\の間でクリックしたままで動かしてみる
  4. サーボモータが表示されている角度になる

 

Processingのウィンドウ画面に/\が現れます。

/\の間をマウスをクリックしながら動かすことで以下の動作をするようにしています。

  • /\の間を青色の扇グラフィックが増えたり減ったりする
  • マウスを離した所で止まり赤色となる
  • その扇グラフィックに合わせて上部に角度が表示される
  • 角度をArduinoへ送信

 

下記に動作させているときの動作写真を抜粋してのせておきます。
※クリックしていると青、離していると赤です。

Processing ウィンドウサーボモータ
初期値
Processing-lesson18-01
Processing-lesson18-02
クリック
した状態で
77度
Processing-lesson18-03Processing-lesson18-04
150度で
マウスを
離した状態
Processing-lesson18-05Processing-lesson18-06

 

簡単ですが、サーボモータのコントローラーが完成です。

色々とグラフィックを変えて遊ぶのも面白いと思います。

 

まとめ

Processing 入門 Lesson 18【サーボモータとコントローラー】はここまで。

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

1.簡易的なコントローラーを作って遊ぶ!
2.ArduinoとProcessingの通信方法を理解
3.サーボモーターの復習

 

知らない関数も調べれば、ネットにごろごろ説明が転がっています。

簡易的ではありますが、コントローラの完成です。

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

 

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

次回は、これまでと逆バージョンを考えています。

  • これまで:Processing → Arduino
  • 次回:Processing ← Arduino

 

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%

さらに、初回チャージで1000ポイントもらえるキャンペーンも実施中!

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

 

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

コメント

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