mbedとレゴとRCサーボモータ

そろそろmbedにも手を出そうかなーと思っていたところ、安いmbedがあることを知ったのでさっそく買ってみた。

STM32 Nucleo Board STM32F401
なんと¥1,500。

巷の噂でmbedは開発環境がクラウドで、ブラウザだけで開発ができるらしいのでとりあえずLチカだけやってみた。あまりに簡単すぎて思考停止してまった(ハハハ)。

これはいかんということで、”mbed祭り”なるものがあったので参加してみた。
海外から開発者が来ていたり、多数プレゼントがあったりの豪華イベント。

クラウド上の開発環境がかなり便利なことも勉強になったのでメモしておこう。
Platformsに各ボードのピンアサインなどの情報が記載されている。
Handbook・Cookbookから基本的なクラスのサンプルなどを参照・インポートできる。

web

サンプルを参考に使い慣れたRCサーボモータSG-90を使ってみた。
いきなりはまった。1.5msのパルスを出力し中間位置にしたはずがなっていない。

#include "mbed.h"

PwmOut mypwm(PB_3);

DigitalOut myled(LED1);

int main() {
    
    mypwm.period_ms(20);
    mypwm.pulsewidth_us(1500);
      
    while(1) {
        myled = !myled;
        wait(1);
    }
}

電源が5Vで制御パルスが3.3Vだからダメのかと思って、電源を3.3Vにしてみるも変化なし。

パルス幅を可変できるようにボリュームを追加してみた。
パルス幅を変えてみると、3.0msぐらいで中間位置になった。
???2倍?、ミニオシロで波形を確認してみると、パルスの間隔が20msに指定したはずが、10msになっている。よくみるとパルスの幅も設定した値の半分になっている。

#include "mbed.h"
 
PwmOut my_servo(PB_3);
AnalogIn   ain(A5);

int main() {

  int pulse_w = 1500;
  
  my_servo.period_ms(20);
  
  while(1) {
    
    pulse_w = ain.read()*10000;
    
    my_servo.pulsewidth_us(pulse_w);

    printf("%d\n",pulse_w);
    wait(0.05);
  }
}

なんでだろう、何を調べればいいかがまだわからないので今日はとりあえずここまで。でも、調べる過程でアナログ入力とサーボ用のPWM出力とシリアル送信をさくっと使っていた。mbed恐るべし。
バイバイ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です