micro:bitを使ってみる その2(Make Codeでの開発、サーボモータの制御)
はじめに
今回はmicro:bitを使って、サーボモータの制御を試してみました。
まずはサーボモータ1個のブロックでの制御について確認です。数を増やせば、ロボットアームの制御もできるかと思います。
▼以前の記事はこちら
配線する
▼micro:bitはV2.21を使っています。
micro:bitの信号線でサーボモータ1個を制御します。サーボモータには単三電池4本を直列にして給電します。GNDはmicro:bit、電池、サーボモータで共有します。
▼以下のように配線しました。

▼ブレッドボード変換基板でピンを出して、小型のブレッドボードに差して配線しています。
サーボモータはSG92Rを使っています。
▼秋月電子でいつも買っています。
https://akizukidenshi.com/catalog/g/g108914
▼Amazonでも売っている、SG90系のサーボモータなら同様に制御できるかと思います。
▼電池は充電できるエネループを使っています。
▼電池ボックスとリード線はこちら
サーボモータの制御
ブロックでの動作確認
入出力端子のところにあるサーボのブロックを使います。
▼角度のブロックを使います。

▼P0ピンを180度にするようにします。

この数値を変えてダウンロードすると、その角度にサーボモータが動くことを確認しました。
ループ処理で少しずつ値を増加させてみます。
▼変数を0から変更していくブロックを用います。

カウンターという変数の値を0から180まで変化するようにして、その値を先程のサーボブロックの角度に入れます。
▼基本ブロックのところにある、100ミリ秒の間一時停止するブロックも入れています。

これで100ミリ秒ごとに角度が変化していきます。
▼シミュレーションのサーボモータが動き始めました。

この状態では0から180°変化した後、また0に戻ります。180°になったら、0まで1°ずつ減らしていくようにします。
▼以下のように変更しました。

▼実際の動作動画はこちら。
ブロックと変数でサーボモータの角度を制御できることを確認できました。
端子を変数で代入する
どの端子が使えるのかを確認したかったので、変数として1か所で管理できるようにします。
▼ServoPin1として変数を追加しました。

▼その他にあったデジタルピンを、変数に代入します。

▼以下のようにブロックを並べました。

これで最初にServoPin1に代入される端子を変更するだけで、その後の処理でも端子が変更されます。
P0以外のP1~P16に変更して確認したところ、どのピンでも問題なくサーボモータを制御できることを確認しました。ただし、今回のように端子を変数にすると、サーボモータのシミュレーションは無効になるようでした。
ボタンで制御する
サーボモータの角度を変数で管理し、ボード上のボタンを押すと角度が変化するようにします。
▼入力の、ボタンが押されたときというブロックを追加しました。

▼ServoAngle1という変数を追加しました。変数の値を増やすブロックも用います。

値を確認するために、シリアル通信を用います。
▼一番上にある、1行書きだすというものを使いました。

▼以下のようにブロックを並べました。

この状態で、シミュレーションでも変数の値を確認できるようになっていました。
▼データを表示という選択肢があります。

シリアル通信で出力されるはずのデータが、グラフと数値で表示されていました。
▼ボタンの入力に合わせて値が増減していました。

▼増減が1ずつだと動きが小さかったので、10に変更しました。

▼実際に動かしたときの動画はこちら
ボタンを押して、サーボモータの角度を増減させることができました。
なお、micro:bitのボード上のボタンとピンは重複しているところがあって、一部のピンではボタンを押したときに違う角度になってしまうことがありました。ボード上のボタンを使うのであれば、気を付ける必要がありそうです。
最後に
micro:bitでサーボモータを制御できました。Arduino IDEのシリアルモニタやシリアルプロッタに似ているところがありますが、シミュレーションもできるというのがすごいですね。
ピンの数が少ないので、ロボットアームの制御に使うのであれば入力をどうするか考える必要がありそうです。
▼以前は各軸の角度の増減にボタンを使っていたので、それだけで12ピンぐらい使っていました。可変抵抗を使うとピンを減らせるうえに操作しやすそうだなと思っています。









