【ミーア】頭を何回か連続で撫でると最初デレから段階的に嫌がるようにする。
はじめに
おしゃべり猫型ロボット「ミーア」は頭に取り付けたTTP223のタッチセンサーを介して、頭を撫でると音声を再生できる。
この仕組みを利用して、何回か連続で頭を撫でると、最初は嬉しがるが、徐々に警戒し始め、撫ですぎると、嫌がってそっぽを向くという機能を実現したい
要件定義
下記で要件定義した。
音声再生中 or 音声再生後 7 秒未満で再度頭を触る行為を下記回数で連続で行ったら、回数に応じて固定の音声を流す。こちらは、アプリやサーバーとは連携せずに、デバイス側のみで完結の機能
4回目のタッチでのフレーズ (まだ嬉しい)
eye_expression:happy
「なでてくれて、気持ちいいニャ〜」
「こんなにかまってくれて、嬉しいにゃ〜」
「君の手はあったかいにゃ~」
「もっとナデナデして!幸せだニャ〜。」
「また触ってくれた!気持ちいいにゃん」
5回目のタッチでのフレーズ (少し警戒し始める)
eye_expression:disgust
「5回目かにゃ?ちょっと休憩しようかニャァ。」
「ねえ、ちょっとくらいは僕のプライバシー、尊重してくれるかニャ?」
「そんなに触ると照れちゃうニャ。」
「もうちょっと自分の時間がほしいニャ。」
「そろそろいい加減にしてほしいにゃ…。」
6回目のタッチでのフレーズ (明らかに嫌がる)
eye_expression:anger
「触り過ぎニャ!もう少し距離を置きたいニャ。」
「仕事してるからもう触らないでニャン!」
「さよならニャン!」
「しゃべり疲れたから、スリープモード入るニャン!」
「しゃべりすぎて口疲れたニャァー」
7回目以降:sleep
タッチ回数と音声再生ロジック
・タッチのカウント: ESP32とTTP223タッチセンサーを使用して、タッチの回数をカウント
・7秒以内のタッチ: タッチが7秒以内に連続して行われた場合、カウントを増やす
・7秒以上の間隔でのタッチ: タッチが7秒以上開いた場合、カウントをリセットする
・7回目の特別な条件: 7回目のタッチ後は、10秒間タッチがなければカウントをリセットする。これは7回タッチされた後のみ適用される条件
・音声と表情の再生: タッチ回数に応じて、事前にインストールされた固定の音声ファイルを再生し、目の表情も言葉に応じて変化させる
・音声は声優さんに依頼して新規録音
DB:phraseテーブルにtypeとkindを追加
音声や目の表情のデータを格納しているclocky.dbというデータベースのphraseテーブルに下記を追加
phrase_type: “default” – システムのデフォルトフレーズや機能に関するフレーズを格納。これは、standard.mp3と同じく、アプリで性格や方言を切り替えるに関わらず、esp32内に残り続けるフレーズ群。現状、タッチ回数による音声やスリープモード前後のフレーズなどを想定。
kind:フレーズのタイプを指定。今回はタッチ回数に対応するフレーズ群ということで、touch_response_4, touch_response_5, touch_response_6 を作成し、対応するvoice_pathも指定
voice_path:実際に再生する音声ファイル。例えば、同じkind(touch_response_4)に複数のvoice_pathがあるが、これは、タッチ回数が連続4回の時に候補のvoice_pathからどれか1つをランダムに取得して再生することで、ユーザーに飽きさせないようにするため
ButtonManager.cpp:タッチ回数のロジックを作成
タッチに関する処理は、ButtonManager.cppファイルにまとめているので、既存のhandleButtonPress関数(タッチした時の処理)に、タッチ回数に関する処理を追加する。
タッチが7秒以内に連続するとカウントが増え、7秒以上の間隔があるとカウントがリセットされる。7回タッチされた後、10秒間タッチがなければカウントはリセ、、
続きは、こちらで記載しています。