こんにちは、ヨシケンです!
今回は、Arduino互換でタッチパネルが付いたM5Stack Core S3とChatGPTの組み合わせで、話題のAIスタックチャンを使って面白いロボットを作っていきます。
今回の記事の流れ
このデバイスを作るのに必要な部品
今回M5Stackを使ったロボットを作るために、必要な機器は以下のようになっています。
名前、説明 | デバイス |
---|---|
M5Stiack Core S3
ESP32を搭載したArduino互換機。ディスプレイ、BLE、Wi-Fiおよびモーションセンサなどが始めから入っている。 |
|
心拍センサ
耳たぶや指先に付けて、心拍数が測れるセンサ |
|
駆動部分 | 適宜必要に応じて |
GROVEケーブルなど | 適宜必要に応じて |
これらの部品をそろえて、AI自動判別カメラを作っていきます。
1. M5Stack Core S3とChatGPTとAIスタックチャンについて
M5Stack Core S3は、Arduino互換のESP32を搭載した開発キットです。これまでのM5 Stack Coreにタッチセンサ画面、スピーカやカメラが付いた便利なデバイスといえるでしょう。
M5Stack Core S3のスペックはこのようになっています。
マイコン | ESP32S3 デュアルコア Xtensa LX7 (240 MHz) 2.4G Hz WiFi |
---|---|
メモリ |
フラッシュメモリ 16MB PSRAM (擬似SRAM) 8MB |
I/O
|
USB Type-C 3 x Groveポート microSDカードスロット 2インチタッチパネル 30万画素カメラ 1 Wスピーカ 2xマイクロフォン |
センサ |
6軸IMU(3軸加速度計 + 3軸ジャイロスコープ) 3軸地磁気センサ 照度・近接センサ (LTR-553A) |
電源 |
3.7 V 500 mAh内蔵バッテリ DCジャック:9~24 V |
サイズ | 54 x 54 x 31 mm |
このS3を使ってロボット作りに利用するライブラリは、スタックチャンというもの。これはししかわさんがM5Stackを使ったライブラリとして公開してくれているロボット・キットです。
これにChatGPTなどと連携したAIスタックチャンがあります。OpenAIが提供するChatGPTを使って、おしゃべりなどができます。またGoogle Text-to-Speech (STT) を使うことで、音声で話しかけたり、それに対してスピーカから日本語で答えてくれたりも可能です。https://github.com/robo8080/M5Unified_StackChan_ChatGPT
今回は、AIスタックチャンをM5Stack Core S3にインストールして、ChatGPTとGoogle STTでお話しできるロボットを作っていきたいと思います。
2. M5StackのPlatformIO 開発環境作り
今回のM5Stack Core S3を使った作例では、PlatformIOという開発環境で作っていきます。まずはそのために必要な開発環境のセットアップを行なっていきましょう。
Visual Studio Codeを以下サイトからダウンロードして、インストールします。下記から使用しているOSを選んでください。https://code.visualstudio.com/download
VS Codeをダウンロード、インストールしたら、VS Code左側のメニューからExtensionを選び、PlatformIO を検索。PlatformIO IDEが出てきたら、Install ボタンを押します。
その後、左側のPlatformIOボタンを押すとインストールされているのが分かります。これでPlatformIO IDEがインストールできました。
次に、AIスタックチャンのソースコードをVS Codeに追加します。こちらのrobo8080さんのGithubからコードをクローンしておきます。
https://github.com/robo8080/AI_StackChan2
クローンしたM5Unified_AI_StackChanの中に、platoform.iniがあるので、それを Pick a folder から開きます。Platoform.iniの中で、M5Stack Core 3Sを使用するために、11行目にある [platformio] パラメータを esp32-s3-devkitc-1 に設定します。
ここでマイクロSDカードを用意し、wifi.txtのファイルを作成します。ここに以下のようにWi-FiのSSID (XXXX) とパスワード (YYYY)を記述します。
YOUR_WIFI_SSID XXXX
YOUR_WIFI_PASS YYYY
また、別にapikey.txtを作って、Open AIのAPI Keyなどを取得し記述します。
API Keyの取得方法は、AIスタックチャンのサイトに詳細記述がありますので、ご確認ください。
https://github.com/robo8080/AI_StackChan2_README/
apikey.txtファイルに、OpenAIのKey(AAAA)、VoicevoxのKey(BBBB)、Google STTのKey(CCCC)を以下のように記述し、保存します。
YOUR_OPENAI_APIKEY AAAA
YOUR_VOICEVOX_APIKEY BBBB
YOUR_STT_APIKEY CCCC
ここまで済んだら、SDカードをM5Stackに差し、USBケーブルでパソコンに接続します。左下のConnectionからM5Stackの接続が確認できたら、✅を押してBuildします。最初はこのBuildには数分の時間が掛かるので気長に待ちましょう。
Buildが上手くいったら、✅の右側の「→」を押してデータを送信。成功するとM5Stackの画面上にスタックチャンの顔が表れます。
3. AIスタックチャンの使い方
AIスタックチャンがインストールできたら、楽しく使ってみましょう。同じネットワーク上でブラウザから、stack-chan.local/ 経由でさまざまなコマンドを送れます。
まず、stack-chan.local/role と入れて、スタックチャンのキャラ設定をしましょう。以下のように入れていますが、ご自分の好きなキャラにしてみてくださいね。
そして、stack-chan.local/chat?text=〇〇〇 と言葉を入れると、スタックチャンに話しかけられます。VOICEVOXのApikeyを入れているとスタックチャンが発話してくれるでしょう。
さらに、音声認識にiPhoneのショートカット機能を使うと、AppleWatchなどからも操作できます。iPhoneのショートカットを開いて、以下のようなショートカットを設定してください。
これでiPhoneやAppleWatchから話すだけで、スタックチャンを操作することができます。また、パラメータに?voice=4など入れると声を変えることができます(声の種類はREADME に一覧されているので、好きな声を選択できます)。
もちろんS3のタッチパネル画面から操作することも可能です。これまでのM5Stackで並んでいたA、B、Cのボタンを画面上、おおよそ以下の位置に配置しています。
画面のそれぞれの部分を押すと、デフォルトで以下のような機能があります。
Aボタン: 押すとマイクから音声を聞き始めます。7秒ほど聞いて、それをGoogle STTによりテキストにし、返答を返します。
Bボタン: 独り言モードのオンオフを切り替えます。独り言モードだと定期的に不思議な会話を続けます。
Cボタン:「充電中、バッテリのレベルは〇〇%です」と答えます。
まず左側のBボタンを押してみましょう。独り言モードになって勝手に話し始めます。また、Aボタンを押すと話を聞き始め、答えてくれます。
4. スタックチャンのカスタマイズ
スタックチャンが使えるようになったので、機能を追加してカスタマイズしてみましょう。S3には3つのGrove端子が付いているので、そこにセンサを追加してみます。今回はこちらの心拍センサを使います。接続は、5V、GNDとアナログ入力8ピン(PORT A)につなぎます。
こちらにこのセンサを使うライブラリを出してくれているので、それを使わせてもらいます。- PulseSensor Playground –https://github.com/AmbientDataInc/PulseSensorPlayground
このGithubからライブラリをダウンロードし、M5Unified_AI_StackChanフォルダ内のsrc下に、PulseSensorPlayground.cppとPulseSensorPlayground.hを保存。また、utilityというフォルダもsrc以下に配置します。
この心拍センサを読み取れるようスタックチャンのプログラムに修正を加えます。中心となるmain.cppプログラム中に、このライブラリを読み込むように以下の5行を追加してください。
また、setup以下にpulseSensorの記述を加えます。
最後に新たな機能として、report_sensor()を追加します。
void report_sensor(){
int bpm = pulseSensor.getBeatsPerMinute();
delay(1000);
char buff[100];
if(bpm > 0)
sprintf(buff,"今の心拍数は%dです。",bpm);
else
sprintf(buff,"今の心拍数は分かりませぬ。");
avatar.setExpression(Expression::Happy);
Serial.println(buff);
String qtext = "今は心拍数"+String(bpm)+"なので、その健康状態を150字以内で教えて";
exec_chatGPT(qtext);
avatar.setExpression(Expression::Neutral);
}
これをバッテリ読み上げの代わりに画面右側のBボタンを押すと起動するようにします。
再度S3に流し込みます。画面右側のBボタンを押すと、心拍数を読み取り、それに対するコメントを返してくれます。
最後にサーボモータを接続して、スタックチャンを動けるようにしていきます。このようなタイヤが付くサーボモータで、レゴにもくっつくものを使います。
サーボモータの接続は、事前に設定されているPORT Cの端子におこないます。
このような形で、S3のPORT Cに挿します。
このようにS3の下部にはレゴがピッタリはまるようになっているので、これで車輪付きスタックチャンの完成です。
それでは早速動かしてみましょう。AボタンやBボタンを押すと、おしゃべりしながらおずおずと動きます。Cボタンで心拍数を測ってくれて、健康情報も教えてくれます。
センサを変えたり、駆動モータ機構を変えたりして、遊んでみてください!
5. まとめ
今回はタッチパネルやマイク、カメラが付いたM5Stack Core S3を使ったロボット作りを紹介してきました。ChatGPTを使って、界隈で話題のAIスタックチャンをインストールし、面白いロボットになったと思います。
このAIスタックチャンは、喋りかけるとChatGPTを使って適当な回答をしてくれたり、独り言モードで何か場をつないでくれたりします。スマホやAppleWatchと連携して、操作することも可能です。
また、このソースコードをカスタマイズすることで、心拍センサを付け心拍数から健康情報を提供してくれます。最後にはサーボモータとタイヤを使って動けるようにしてみました。
今回の紹介はここまでですが、さらにご自身で新たなセンサや動きをつけてみると面白いでしょう。いろいろカスタマイズして遊んでみてください!
Happy making!