Funny Snowman

FunnySnowman > Geek<ギーク>なコトをやってみよっと

ラピロが静止しているときの「ジー」という音を止める。

ゴール設定(ラピロの「ジー」という音を止める)

ラピロの標準ファームウェアでは、#Mコマンドなどの動作を終えたときにサーボモーターの位置を維持してラピロの姿勢を固定する設定になっています。このため、通電中はラピロの手足などを動かすことは出来ないほか、起立した姿勢でも腰や足などのサーボモーターに若干の荷重がかかると「ジーーー」という音が鳴り続けてしまいます。そこで、サーボモーターへの通電を停止するラピロのコマンド[#X]を追加してみます。

ラピロ(Rapiro)を操作する

やってみる

事前準備(Arduinoスケッチの調査)

ラピロの標準ファームウェア[RAPIRO_ver0_0.ino]の13行目にある“#define POWER 17 // Servo power supply control pin”がサーボモーターの電源ピン番号であることが分かる。次に191~192行目に初期値が“digitalWrite(POWER, HIGH);”で定義されており、サーボモーターに常に通電されていることがわかる。同様にラピロのモーションを実行するコマンド[#M]や[#P]のスクリプトにも“digitalWrite(POWER, HIGH);”の記載がある。そして、ラピロの動作が完了して静止姿勢になった時のスクリプト271行目に、何故かサーボモーターへの通電をLOWにする“//digitalWrite(POWER, LOW);”がコメントアウトされていた。↓この辺。

    } else if(endTime + 500 < millis()){
      //digitalWrite(POWER, LOW);
    }
  

予想するに、ラピロが傾いているような無理な姿勢で止まった時にサーボモーターの通電がOFFになるとラピロが転んでしまうからかもしれない。あるいはラピロにモノを持たせて、腕を上げた状態で固定するためとか。

事前準備(Arduinoスケッチの改造)

ラピロに新しい静止コマンド(サーボモーターへの通電を停止する)を追加する。追加するのは248行目周辺(↓この辺)。

        case 'C':
          Serial.print("#C");
          if(bufferTime > 0) {
            Serial.print("F");
          } else {
            Serial.print("0");
          }
        break;
        ※ ← ここに追加する。
        default:
          Serial.print("#E");
        break;
  

新しいコマンドは[#X]。これに続くパラメーターは無く、[#X]のみ。↓こんな感じ。[#X]を送信するとサーボモーターの通電をLOWにする。

        case 'C':
          Serial.print("#C");
          if(bufferTime > 0) {
            Serial.print("F");
          } else {
            Serial.print("0");
          }
        break;
        case 'X':
          Serial.print("#X");
          digitalWrite(POWER, LOW);
        break;
        default:
          Serial.print("#E");
        break;
  

実験(Aruino IDEでラピロを動かす)

スクリプトを書き換えたら、ラピロのメイン基盤に書き込む。次にArduino IDEのメニュー: [ツール]→[シリアルモニタ]を起動して、例えば[#M5]でラピロを動かす。[#M0]でラピロを停止させると、どうですか?ポジションがバッチリなら音はしませんが、微妙に姿勢がズレていると「ジーーーー」って音がする場合があります。その状態で、新コマンド『#X』を送信。おおー。見事に静かになった。サーボモーターへの通電がないので、人の手でラピロの手足を動かすことが出来ちゃいます。続いて[#M5]などを実行すると、ちゃんと通電がHIGHになってラピロが動き出しました。

ラピロ(Rapiro)を操作する

注意(ラピロを停止するタイミング)

新しいコマンド[#X]は、サーボモーターへの通電を停止するコマンドなので、実行する姿勢とタイミングに注意してください。やっちゃダメなのは、例えば、[#M1]で前に歩いている状態の斜め姿勢の時に[#X]を実行しちゃうと、ラピロが脱力して倒れてしまいます。必ず、[#M0]を実行して初期位置である起立の姿勢の時にサーボモーターの電源を停止して、ラピロが転ばないようにしてください。

まとめ(ラピロの「ジー」という音を止める)

ラピロの標準ファームウェア(Ver0.0)では、常にサーボモーターに通電してラピロの姿勢を維持固定しているので、ちょっとでも無理な荷重がかかると「ジーーー」って音がしちゃいます。この間もモーターの電力を消費しているものと思われます。今回、ファームウェアを改造して、新しいコマンド[#X]を追加することで、ラピロが静止姿勢のときにはサーボモーターへの通電を停止して「ジー」という音が出ない様にすることができました。次いでに、ラピロのバッテリー消耗も抑えることができるので、標準で実装してもいいコマンドだと思います。

追伸(GitHubでリクエストされていましたね)

デンマークのDSDenisoさんがVer0.1でほぼ同じスクリプトのStopやSilenceを意味する[#S]コマンド実装をリクエストされていました...。しかも2年前に...。

▲上に戻る