[No.17]あなたのかわりにしゃべるケロ!

総合・探究

夏休みももう終わり! 公共の場でのマスク生活が続いていますが、会話をするときに口元の表情がわからないのが、ちょっと残念。みなさんの代わりにおしゃべりに合わせてパクパク口を動かしてくれて、楽しく明るい気分にさせてくれる装置を作りましょう!! ギリギリセーフで夏休みの工作にできるお子さんもいるかも!?

小学校~ 中級 80分
今回作る「かわりにしゃべるケロ!」はこんな感じ。他の動物にしても楽しいですよ!

必要なもの&準備

上段左から:SPACEBLOCK通常パッケージ、マイクセンサモジュール、下段左から: 180°マイクロサーボモーター、ジャンパーワイヤ

SPACEBLOCKに拡張パーツを接続する

まずは、今回使用するマイクセンサ、サーボモーターをSPACEBLOCKに接続してみましょう。


接続の全体像

接続の細かい部分は次の図で確認してください。

ピンソケットの位置に注意して接続する

今回つくる装置は、しゃべる音に反応して、カエルの口がパクパク動く仕組みです。入力装置として、マイクセンサを使用して喋る声の大きさを測定し、出力装置としてサーボモーターを使用してカエルの口の部分を動かします。

サーボモーターで動くカエルの工作

先に、カエルの工作分を作っていきましょう。サーボモーターは0°〜180°の範囲で回転させられます。今回は、0°〜90°の範囲で回転させることを想定して、サーボの動きで口を開かせるしくみを考えました。

カエルの工作部分を仮組みする

装飾なしでまず、仮組みをした完成イメージを見てみましょう。下あごのパーツをサーボモーターで動かします。

下あごはサーボモーター0°〜90°の範囲で動くことを想定

順に説明していきましょう。

口の部分は、次の画像の通り段ボールでパーツを作ります。サーボモーターのサーボホーンにストローなどを接着して長さを出します。サーボモーター本体部分、サーボホーン部分をそれぞれのパーツに固定します。なお、仮組みするときは、はがしやすいテープなど簡易的に貼り合わせるのがおすすめです。

口を構成するパーツは3つ

各パーツを次の画像の通り組み合わせて固定して口部分を作ります。顔型パーツを別に用意します。

接着する箇所をよく確認

顔型パーツに、口の部分を垂直に取り付けます。サーボモーターの角度が0°のときに口が閉じた状態。90°で口が最も開いた状態になります。

必要な場所にすき間があいていないとスムーズに動かないので注意

これで仮組みの完成です。サーボで動かす下あごが、どこかにひっかかることなくスムーズに動くか確認しておきましょう。仮組みの状態でプログラミングをしてテストすると、さらに工作の微調整ができます。

ここでは、このまま続けて工作部分を仕上げます。

装飾をして工作部分を仕上げる

仮組みをしたパーツをいったんバラして装飾し、本格的に組み立てましょう。各パーツにふさわしい色の色画用紙を貼りつけました。

鮮やかな色画用紙を貼るだけでカエルらしさアップ

口の部分を順に固定して、さらに顔パーツに接着します。

これで工作部分は完成です! 裏面から紐などをはりつけて壁にぶらさげられるようにしましょう。
SPACEBLOCK本体などが見えないように工作する場合、マイクセンサのマイク部分がかくれないように注意

さて、肝心のプログラムに取りかかりましょう!

マイクセンサの使い方と値チェック

プログラムでは、まずマイクセンサで音の大きさの測定をします。マイクセンサは以前「[11]音楽に連動するパーティーライト」で詳しく使い方を紹介しているので、ここでは簡単に復習します。

マイクセンサの値は、音が大きければ値も大きくなり、音が小さければ値も小さくなります。マイクの感度はセンサについているポテンショメータをドライバなどで回すと調整できます。

感度の調整をするときは軽い力で動く範囲で回す

マイクセンサの値は、「入力」カテゴリーの[《A0》の電圧をアナログ読取]ブロックで値をチェックできます。どのくらいの大きさの音がどのくらいの数値になるのかをチェックしてみましょう。

今回は、実際に適度な距離でしゃべってテストし、小さな雑音に反応しすぎず、だいたい0〜180程度の範囲が多く出るように感度を調整しました。環境によってこの値は変わりますから、0からどのくらいの値まで出ているかメモしておきましょう。

音量をもとにサーボの角度を指定するプログラム

マイクセンサの働きを確認したら、早速プログラムを作っていきましょう。今回のプログラムは、次の図の通りです。とても短いですね!
今回の完成プログラム

プログラムを上から順に説明していきます。

まず、サーボモーターの最初の角度を0°にします。0°の状態が口が閉じた状態です。このプログラムだけを実行して、0°の状態にしてから、口が閉じた状態になるようにサーボモーターに下あごのパーツをはめましょう。

次に、「sound」という名前の変数を追加します。
[繰り返す]ブロックの内側に、変数「sound」にマイクセンサの値を入れるプログラムを作ります。
続いて、サーボモーターの角度を指定します。変数「sound」に入れたマイクセンサの値をもとに角度を計算して、音が大きいほど、口が大きく開くようにします。マイクセンサの値は、さきほどテストしたときに、0〜180の値が出るくらいに調整しました。下あごを動かすサーボモーターは、0°〜90°の範囲で動かします。マイクセンサの値を半分にするとサーボモーターの角度にちょうどよくなりますから、変数「sound」に0.5をかけた値をサーボの角度に指定します。

これでプログラムが完成です! マイクセンサの値を取得してはサーボモーターの角度を変更するという手順をひたすら繰り返すので、電源を入れている間は常に音に反応して口が動きます。

なお、マイクセンサの値をテストしてチェックしたときに、値の範囲が0〜180には調整できなかった方も多いでしょう。そんなときは、次の「チャレンジ!」をみてくださいね。ちょっと計算方法を変えるだけで大丈夫です!

チャレンジ!
今回、マイクセンサ0〜180の値をサーボの角度0°〜90°に計算して変換しましたが、これを図にすると次のようになります。
この場合、たまたま半分にすれば変換でるとわかりやすかったのですが、そんなことばかりではありません。例えば、マイクセンサの値が0〜350までという数値だったら、どうやってサーボの角度を計算したらよいでしょうか?
そんなときに便利なのが次の計算式です。ここでは詳しく説明しませんが、算数や数学で「比」を学ぶと、なんでこんなふうに計算するとよいのかわかるようになります。式の秘密が知りたい場合は、算数や数学が得意な人に聞いてみましょう!
プログラムブロックで作ると次の図の通りです。サーボの角度を指定するところに、上の図で示した計算式の右辺(「=」の右側)作って入れるだけです。マイクセンサの値は変数「sound」に入っているということを思い出してくださいね。
この式を使うと、プログラム全体は次の図の通りになります。
プログラムを作るときは、条件が少し変わっても対応できるようにしておくのがベストです。このプログラムにしておけば、マイクセンサの値の取れ方に応じてすぐに修正することができます。マイクセンサの値をコンソールに表示させて値を確認しながら微調整をしてみてください
SPACEBLOCKにプログラムを転送したら、さっそくおしゃべりしてみましょう。声のタイミングや大きさに反応してカエルがパクパク口を動かすのでなかなか楽しいですよ。
動画でご覧ください!
人が喋っているのにカエルの動きがシンクロしているみたい!
カエルがしゃべっているようなセリフにして楽しんでもいいですね!
部屋で電源をいれたままにしておくと、楽しい話はさらに楽しくなり、ちょっと嫌な気持ちでしゃべっているときでもカエルを見れば「まぁいっか」という気分になれますよ。これで、口が見えないマスク会話も楽しさアップです!!!