M5Stack:はい、よくできました。

テレビくん+サーボモータで、何か動かしてみたい!ホントは、手を上げたり下げたりしたかったんだけど、サイズ的に収まりそうになかったので、アンテナを回してみます。(本物のテレビくんはアンテナ回さないけど)

M5Stack でArduinoからのサーボモータ制御は、こちらのページを参考にしました。

OGIMOノート:M5Stack(ESP32)を使い始めてみた
http://ogimotokin.hatenablog.com/entry/2018/07/22/182140

いろいろDefine指定。

#define LEDC_CHANNEL_3 3 //LEDCのチャンネル指定
#define LEDC_TIMER_BIT 16 //LEDCのPWMタイマーの精度設定
#define LEDC_SERVO_FREQ 50 //サーボ信号の1サイクル 50Hz:20ms
#define SERVO_PIN 22 //ServoPWMピン
#define SERVO_MIN_WIDTH_MS 0.6
#define SERVO_MAX_WIDTH_MS 2.4

SERVO_PINは22番を使いました。GROVE A ポートの黄色コードです。

int servo_pwm_count(int v)
{
   float vv = (v + 90) / 180.0 ;
   return (int)(65536 * (SERVO_MIN_WIDTH_MS + vv * (SERVO_MAX_WIDTH_MS -SERVO_MIN_WIDTH_MS)) / 20.0) ;
}

pwm引数はこれで計算してます。(参考ページそのまま使いました)

最初に初期化。

// servoモーター設定
 ledcSetup(LEDC_CHANNEL_3, LEDC_SERVO_FREQ, LEDC_TIMER_BIT) ; // 16ビット精度で制御
 ledcAttachPin(SERVO_PIN, LEDC_CHANNEL_3) ; // CH3をRC SERVOに

delay 入れて、少しずつ動かす。

for(int i = -100 ; i <= 80;i = i + 5){
    int pos = i;
    if(pos > 70){pos = 70;}
    ledcWrite(LEDC_CHANNEL_3, servo_pwm_count(pos)) ;
    delay(125);
}

値の範囲は、うちのサーボだと -100 ~ 75 ぐらいを指定すると可動範囲内に収まりました。個体差あると思います。

かなり無理やりな固定。


決めゼリフ「おきらくごくらく」も言わせたいです!以前から気になっていた音声合成ライブラリ「AquesTalk-ESP32」を使ってみました!

使い方は、こちらのページがくわしいです。

N.Yamazaki’s blog:「AquesTalk-ESP32 Ver.2.0」を使う
http://blog-yama.a-quest.com/?eid=970195

まだライセンスキー入手してないので「ナ行とマ行がすべてヌと発声される」制限かかったままです。

TTS.play("okirakugokuraku",50);
TTS.play("hai',yo'kudekimashita",100);

発声指定はこういう感じで。

シャベッタァァァ!

サーボモータ、今回は体の向きを回転させるのに使ってみます。台ごと回転させる大がかりな仕掛けになった。


これの応用で、仮面ライダージオウの変身アイテム「ライドウォッチ」のスイッチを押して変身してみます!

「なんか…行ける気がする!」