タッチ液晶から、Arduinoに接続したサーボモータを操作する
はじめに
このシリーズでは、Arduinoに7インチタッチディスプレイGT-SPシリーズを接続し、様々なプロジェクトを進める過程を解説しています。
前回はGT Design Studioを活用して、センサーからのデータをより見やすいデザインに変換して表示する方法をお伝えしました。今回は装飾されたスライダーを設置し、Arduinoに接続されたサーボモーターの制御をしてみます。
この記事を読むにあたって、前回の内容(「Arduinoから得られた値を、視認性の高いデザインにする」)が基礎となります。そこで紹介したオブジェクトの装飾技術などを応用しますので、まだの方はぜひ前回の記事もご覧ください。

サーボモーターへの接続

今回のプロジェクトでは、SG90というモデルのマイクロサーボモーターを使用します。サーボモーターのPWMピン、5Vの電源ピン、そしてGNDピンを適切に接続します。具体的には、PWMピンをArduinoのD13ピンに接続しました。
GT-SPと Arduinoの配線については省略しています。詳細が必要な場合は前回までの記事を参照してください。

また、サーボモーターの動作を視認しやすいように白い棒を貼り付けてあります。

GT Design Studioでの画面の作成
今回は、サーボモーターを操作するためにスライダーオブジェクトを採用します。スライダーは直感的に細かい調整が可能で、サーボモーターの制御に最適です。ユーザーがパラメーターを感覚的に理解しやすく、精密な操作が求められるサーボモーターの調整に役に立ちます。デザイン面では、背景、フォント、文字サイズの調整に加え、テキストオブジェクトの配置やスライダーオブジェクトの色を新たに変更しました。これにより使い勝手と視認性を高めます。
ほとんどのデザイン周りの作業手順は、 前回の記事を参照しながら進められます。 今回は新たにテキストの配置(Align) の設定とスライダーの色を設定を行いました。
タッチスクリーンに書き込むオブジェクトの配置
最初のステップとして、プロジェクトの基礎を形成するオブジェクトを配置します。最終的な目標は、視認性の良いレイアウトを実現することです。この段階では、テキストオブジェクトとスライダーオブジェクトを適切な位置に設置します。今回はシンプルな配置にしてみました。

オブジェクトの割り当ては以下のとおりです。
・オブジェクト0 … TEXT_0
・オブジェクト1 … SLIDER_0
・オブジェクト2 … TEXT_1
なおTEXT_1のテキストには「0.0 deg」とデフォルトの数値を仮で入れてあります。

スライダーオブジェクトの設置に際しては、オブジェクトのサイズがシステムのパフォーマンスに大きく影響を及ぼすようです。オブジェクトサイズが大きいと、描画処理やイベント処理の負荷が増加し、結果として動作のスムーズさが損なわれています。
この問題に対処するためには、オブジェクトのサイズを適切に調整し、画像で示されている小さい高さ程度に保つことが推奨されます。これによりシステムの負荷を軽減し、よりスムーズな動作を実現できます。
この現象は次期アップデートで改善される予定となっており、 大きなスライダーオブジェクトの配置も可能になるようです。
スライダーのイベント設定
スライダーのイベントには「DATA_TX」=「SLIDER_0」[VAL]を与えます。「DATA_TX」を「New ACTION」より追加した後「TX_TYPE」の項目で「TX_VAL」>「=」を選択。その次に「VAL」の項目で「OBJ」>「PAGE_0」>「SLIDER_0」を選択。新たに出現した「VAL_PRP」には「VAL(Value)」を設定します。

テキストの装飾や設定
「TEXT_0」には、「Melete Medium」フォント、サイズ16、行間24を設定しています。一方「TEXT_1」には、「Melete Light」フォント、サイズ48、行間80を適用しています。これらの設定方法については、前回の記事で詳しく解説していますので、そちらをご参照ください。
フォントの選択やサイズ、行間の設定は、デザインの視認性や読みやすさに大きく影響しますので、適切な設定をオススメします。

「TEXT_1」のプロパティにて、「Text0」>「Test0 Align X」のValueを選択し、「RIGHT」に設定しました。
スライダーの最大値、デザインの調整
スライダーのプロパティを調整し、スライダーが最も右端にある際に1023という値を出力するように設定します。「SLIDER_0」のプロパティにて、「Option」>「Max. Value」のValueを選択し、「1023」に設定しました。この1023という数値は、アナログ入力が提供する全範囲を活用するために選ばれています。
この設定により、スライダーの微細な変化を正確に検出し、サーボモーターの角度を細かく正確に制御できます。これにより、サーボモーターの動きが滑らかになり、正確な位置決めが容易になります。


「SLIDER_0」のプロパティにて、「Color」>「Shaft Color」と「Handle Color」のそれぞれのValueを選択し設定しています。
「Shaft Color」は「濃い緑色(0x00007F00)」、「Handle Color」は「少し明るい緑色(0x0000BF00)」をそれぞれ設定しています。なお、色の変更方法は前回の記事をご参照ください。
デザインの確認

最終的に、上記の説明に沿ったプレビュー画面が完成しました。フォントに関しては、前回の記事で使用したものを引き続き利用しています。
「TEXT_1」オブジェクトは、Arduinoから送信される値を表示するために受信側として機能します。そのため、このオブジェクトに対するイベントアクションの設定は不要です。
タッチスクリーンに書き込むプロジェクトの作成
Arduinoのプログラムにおいて、サーボモーターの制御は特に難しい部分ではありません。Arduinoにはサーボモーターを簡単に操作できるようにするためのサーボモーターライブラリが用意されています。
サーボライブラリを使用するには、まずライブラリをプログラムに含める必要があります。これには、プログラムの最初に#include という行を追加してあげればよいです。その後、サーボオブジェクトを作成し、使用するピンにサーボをアタッチします。そして、write()関数を使用してサーボモーターを特定の角度に動かせます。
プログラム解説
今回のプロジェクトの重要なポイントは、GT Design Studioで設定したスライダーの最大値(1023)をサーボモーターの角度制御に適用するために、マッピング関数を使用したことです。
具体的には、以下のコード行でスライダーの値(0から1023の範囲)をサーボモーターの動作範囲(0度から180度)に変換しています。
int servoAngle = map(gtspValue, 0, 1023, 0, 180);
このマッピングにより、スライダーの位置(数値)とサーボモーターの角度が精密に一致するようになりました。これは、ユーザーがスライダーを動かすことでサーボモーターを直感的に制御するためです。
さらに、シリアル通信を通じて、スライダーの値がどのようにサーボモーターの角度にマッピングされているかを確認できます。これは、以下のコード行で実現されています。
Serial.print(“Servo Angle: “);
Serial.println(servoAngle);
この行は動作には不要ですが、このデバッグにより開発者はサーボモーターの動きをリアルタイムでモニタリングできます。これによりシステムの動作を正確に理解できます。
実行結果
スライダーの最大値を1023に設定し、その値をサーボモーターの角度制御にマッピングする手法は、細かい制御が求められる場面で特に有効です。この方法を採用することで、スライダーの微細な動きがサーボモーターの角度変化に直接反映され、より繊細な操作が可能になります。

ただし、使用しているサーボモーター(SG90)が小数点以下の角度制御に対応しているかは確認が必要です。SG90のような一般的なサーボモーターは、非常に細かい角度の制御には最適化されていない場合があります。そのため、このマッピング手法は、より高精度な制御が可能な機器やアプリケーションでの応用が想定されます。
例えば精密な位置決めが求められるロボティクスや、細かい動きを再現する医療機器など、高度な制御精度を必要とする分野でこの手法を活用できます。入力値の範囲を広げることで出力の精度を向上させるアプローチは、特定のサーボモーターに限らず、さまざまな精密機器に応用可能です。
次回はGT Design Studioの様々なオブジェクトを利用し、動作を変更するプロジェクトを紹介します。
