.NET対応組み込みデバイス「Netduino」入門(14)
Netduinoでロボットコントロール(前編) ― PLEN.Dを直接動かす
組み立て式のロボット「PLEN.D」に使われているサーボモーターを、NetduinoのPWM出力で制御してみよう。
今回は、Netduinoを使ってPLEN.Dを制御してみたいと思う。
PLEN.Dは、PLEN Projectが開発し、DMM.make ROBOTSから2015年5月に発売が開始された、全長25cmの運動神経抜群な組み立て式のロボットだ。その母体となるのは2005年の2005国際ロボット展でプロトタイプが展示されたPLENであるので、約10年の技術的な蓄積がPLEN.Dにも生かされているといえる。
PLEN.Dの特徴としては、CPUとしてArduino互換なARM7が搭載されたコントロールボードを持ち、18軸のモーターをスマホでコントロールできる点だろう。今回は、このコントロールボードの代わりをNetduinoで代用してしまおうという目論見(もくろみ)である。
PLEN.Dについて
コントロールボード
PLEN.Dのコントロールボードは、24個の3ピンが設置された専用設計のボードとなっている。ファームウェアはArduino互換であり、ファームウェア更新はArduino IDEを使って行う。
サーボモーター
PLEN.Dに使われているサーボモーターは、公式サイトによればデジタルサーボSDR-772となっている。デジタルサーボということは、PWM(パルス信号)により制御可能ということだ。
SDR-772(図3の下)からのケーブル線は3本あり、一番外側の片側だけ白線が入っている。デジタルサーボの場合、白線は伝統的に信号線であり、また、SG90(図3の上)のコネクター方向(下からオレンジ、赤、ブラウン)と合わせてみても、白線がSG90のオレンジ(=信号線)と一致する。もしそうだとすれば、真ん中がVCC、白ではない側がGNDということになる。
また、公開されているコントロールボードの基盤レイアウトからも、白線側を接続する内側(図4の右側)が信号線となっている。
NetduinoのPWM出力
Netduino Plus 2は、デジタル3番
、5番
、6番
、9番
、10番
、11番
の合計6個のPWM出力が可能だ。
PLEN.Dとの接続
NetduinoのPWMでPLEN.Dのサーボモーターが制御できるか、まずは1個で実験してみよう。
PLEN.Dのコントロールボードから左肩を制御している1番
モーターの接続を外し、PWM出力であるデジタル9番
ピンと接続する(図6)。
実際の配線は次のようになる。
NetduinoのPWM出力プログラミング
Visual Studio 2015(※Netduino SDKをインストール済みの環境)では、Micro Frameworkのテンプレートがかなりシンプルになっている。
「Netduino Application (Universal)」テンプレートを選択すれば、Netduinoに必要な参照設定は全て設定された状態でテンプレートが作成される。
ただし、テンプレートから作成した直後は、「SecretLabs.NETMF.Hardware.NetduinoPlus」ではなく「SecretLabs.NETMF.Hardware.Netduino」が参照設定されているので、気になるようならば参照設定を切り替えるといいだろう。
Imports SecretLabs.NETMF.Hardware
Imports SecretLabs.NETMF.Hardware.NetduinoPlus
Namespace SDR772MotorVB
Public Class Program
Sub Main()
Dim Servo = New PWM(Pins.GPIO_PIN_D9)
Do While (True)
Servo.SetPulse(20000, 1000)
Thread.Sleep(1000)
Servo.SetPulse(20000, 1500)
Thread.Sleep(1000)
Servo.SetPulse(20000, 2000)
Thread.Sleep(1000)
Loop
End Sub
End Class
End Namespace
|
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.NetduinoPlus;
using System.Threading;
namespace SDR772MotorCS
{
public class Program
{
public static void Main()
{
var Servo = new PWM(Pins.GPIO_PIN_D9);
while (true)
{
Servo.SetPulse(20000, 1000);
Thread.Sleep(1000);
Servo.SetPulse(20000, 1500);
Thread.Sleep(1000);
Servo.SetPulse(20000, 2000);
Thread.Sleep(1000);
}
}
}
}
|
このコードを実行すると、1秒間隔で、前、中、後と左腕を振る動きをする。
【動画】Netduinoで左肩サーボモーター動作試験
複数のサーボモーターを制御する
左肩のサーボモーターが制御できたので、右肩のサーボモーターも制御してみよう。2つのサーボモーターに5VとGNDの配線を分配するために、ブレッドボードの電源ライン
とGNDライン
を使用する(図9)。
この例では、左肩のサーボモーター1番
はデジタル9番
ピン、右肩のサーボモーター10番
はデジタル10番
ピンと接続している。
Imports SecretLabs.NETMF.Hardware
Imports SecretLabs.NETMF.Hardware.NetduinoPlus
Namespace SDR772MotorVB
Public Class Program
Sub Main()
Dim LeftShoulderServo = New PWM(Pins.GPIO_PIN_D9)
Dim RightShoulderServo = New PWM(Pins.GPIO_PIN_D10)
Do While (True)
LeftShoulderServo.SetPulse(20000, 1000)
RightShoulderServo.SetPulse(20000, 1000)
Thread.Sleep(1000)
LeftShoulderServo.SetPulse(20000, 1500)
RightShoulderServo.SetPulse(20000, 1500)
Thread.Sleep(1000)
LeftShoulderServo.SetPulse(20000, 2000)
RightShoulderServo.SetPulse(20000, 2000)
Thread.Sleep(1000)
Loop
End Sub
End Class
End Namespace
|
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.NetduinoPlus;
using System.Threading;
namespace SDR772MotorCS
{
public class Program
{
public static void Main()
{
var LeftShoulderServo = new PWM(Pins.GPIO_PIN_D9);
var RightShoulderServo = new PWM(Pins.GPIO_PIN_D10);
while (true)
{
LeftShoulderServo.SetPulse(20000, 1000);
RightShoulderServo.SetPulse(20000, 1000);
Thread.Sleep(1000);
LeftShoulderServo.SetPulse(20000, 1500);
RightShoulderServo.SetPulse(20000, 1500);
Thread.Sleep(1000);
LeftShoulderServo.SetPulse(20000, 2000);
RightShoulderServo.SetPulse(20000, 2000);
Thread.Sleep(1000);
}
}
}
}
|
このコードを実行すると、1秒間隔で、前、中、後と左腕を振り、それに合わせて右腕も後、中、前と動く。同じ指定値なのに前後逆になるのはサーボモーターの取り付け方向が逆だからだ。
【動画】複数のサーボモーター制御
まとめ
次回はいよいよI2C接続で16個のPWM出力ができるAdafruit I2C接続16チャンネル12ビットPWM/サーボシールドを使ってPLEN.Dの複数のサーボモーター制御に挑戦する。
※以下では、本稿の前後を合わせて5回分(第12回~第16回)のみ表示しています。
連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。
13. littleBitsではんだ付けなしの電子工作を実現
磁石で電子回路をつないで電子工作が行えるlittleBits。Netduinoと組み合わせると、どのような電子工作が実現できるのか? その可能性を探る。
14. MESHとNetduinoでiOSデバイスとの連携を実現
SONYのスマートDIYキット「MESH」とは? さまざまな連携が実現可能なMESHを使って、NetduinoとiPadを連携をさせてみよう。
15. 【現在、表示中】≫ Netduinoでロボットコントロール(前編) ― PLEN.Dを直接動かす
組み立て式のロボット「PLEN.D」に使われているサーボモーターを、NetduinoのPWM出力で制御してみよう。
16. Netduinoでロボットコントロール(後編) ― 16個のサーボモーターを一度に制御する
連載最終回。前回に引き続き、Netduinoを使ってPLEN.Dを制御してみる。今回は16個のサーボモーターを制御できるボードを使って複雑なロボットの動きを実現する。