SG90サーボパンチルト雲台をESP32-Camで動かすスケッチ改造

公開

前回組み立てた、 SG90 サーボを使った ESP32-Cam パンチルト 雲台に命を吹き込むべく、Espressif社謹製サンプル スケッチ を元に様々な改良を施したRevisited版スケッチを改変して、WebUIから パンチルト 操作できるようにします。

ESP32-Cam Revisitedスケッチをベースに

今回の改造のベースにするのは、ESP32-Cam謹製サンプルスケッチを元に様々な改良を施したRevisited版です(実際の導入記事はこちら)。

このスケッチへ以降の手順で、パンチルト制御のサーボ機能を実装します。

 

esp32-cam-webserver.ino の改造

先ず、メインスケッチ冒頭でサーボライブラリと、ついでにESP32-Camの起動時に頻発するBrownout現象対策に必要なファイルをインクルードします。

Arduino IDEのライブラリマネージャでESP32Servoをインストールしておきます。

図1.ESP32Servoライブラリ

図1.ESP32Servoライブラリ

次に関数定義より上方で、様々な初期設定をしているところに、サーボ関連の初期設定を挿入します。

 

その下方にある setup() 関数の中に、Brownout現象回避のおまじないと、サーボオブジェクトの設定と初期ポジショニング命令を挿入します。

ここで、パンとチルト各サーボを servo.write() で動かす際には、間に適当な遅延 delay() を挟まないと、瞬間的な電圧降下でデバイスが再起動してしまうので注意。

 

app_httpd.cpp の改造

以上でサーボ制御するオブジェクトは実装できました。続いて app_http.cppを開き、上・下・左・右・中のパンチルトアクションを定義します。

まず、冒頭で同様にサーボライブラリをインクルード。

次に、メインスケッチから変数や定数の引き継ぎを宣言しているところへ、以下のサーボ関連の変数を加えます。

その下方に列挙されている様々なハンドラから、 cmd_handler と言うハンドラを見つけます。ここにはカメラ設定をWebUIで変えた際の振る舞いが記述されているので、

if 文の最後に、次の5つのサーボアクションの定義を追加します。

これにより、WebUIこそまだ実装していませんが、ブラウザなどから以下の要領で直接URLをリクエストすることで、パンチルト操作ができるようになりました。

図2.安定化電源でパンチルトのテスト

図2.安定化電源でパンチルトのテスト

index_ov2640.h UIの改造

最後にWebUIから上述のサーボアクションを呼び出せるようにしましょう。

UIはカメラモジュールがOV2640の場合は、 index_ov2640.h に記述されています。ファイル中ほどに Frame Duration Limit の設定と Preferences の間をみつけ、

ここにサーボアクション用のボタンを挿入します。

その下方の <script> タグの中では、 <button> タグエレメントを定数に格納して onClick アクションを付与、それによって呼び出される関数でクエリ文字列を非同期発信する仕組みがJavsScriptで記述されています。

既存のコードを参考にしながら、次の3箇所にスクリプトを追加します。

まずは <script> 始まってすぐの定数定義部分で、5つのサーボボタンを定数に格納。

const 文の列記の下方にある updateConfig 関数の下へ、次のサーボアクション用関数を追加。

ファイルの終わりにはUIの様々な部品への onClick が定義されているので、 swapButton.onclick の下辺りに、サーボボタンの onclick を追加します。

スケッチの改変は以上です。コンパイルしてESP32-Camへ書き込めば、WebUIからパンチルト制御できるようになります。

図3.WebUIにパンチルトボタン追加

図3.WebUIにパンチルトボタン追加

※なお、今回はオリジナルのコーディングに沿って追加しましたが、スケッチサイズを気にするなら、 <button> タグ内に直接 onClick イベントを貼って関数を呼び出す方がシンプルになるでしょう。

 

パンチルト基台の製作

仕上げに前回ブレッドボードで組んだ配線とキャパシタをユニバーサル基板に移植し、適当な鉛の重りと共に樹脂ケースを収めました。

図4.パンチルト基台の製作

図4.パンチルト基台の製作

重りを入れて自倒するようなことはなくなりましたが、サーボの動きが速すぎて揺れてしまうので、サーボをゆっくり動かすライブラリを探してみようと思います。

図5.ESP32-Camパンチルトの完成

図5.ESP32-Camパンチルトの完成


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA