こんばんは!
ゆってぃです。

さっそくですが、前回ご紹介したクラスを使って、DMXでステッピングモータを動かすコードを書きました。
コードはGitHubに置いてあります。

動きは極めてシンプルで、DMXの1ch目でモータが動かすターゲットの目標座標を、2ch目でモータ回転速度をもらい、目標座標に向かってモータを回転させるというものです。
ここで言う目標座標とは、ある基準位置からの距離になります。

Arduinoが起動すると、まずモータ回転させ、ターゲットを基準位置まで移動させます。
(基準位置にはセンサがあることが前提)
ターゲットが基準位置まで来ると、センサが反応しモータが停止します。
その後、DMXで受信した値を元に、基準位置からモータを回転させます。
(DMXでの受信値と基準位置からのステップ数は、DmxStepTable.hで定義しています)

なお、移動中に新しいデータを受信しても無視されます。
簡単なクラスの説明を以下に。
-------------
MainTask:メイン処理です。ステートマシンで動いています。(SystemMain.hにステートの定義があります)

MotorCtrl:モータ制御クラスです。下位モジュールとしてStoppableStepperクラスを持ちます。

ReceiverInterface:ポリモーフィズムの為の抽象クラスです。今回、モータ制御の信号はDMXで受け取りますが、将来的に別の通信(例えば、Artnetなど)になったとしても、具象クラスを入れ替えるだけで移植できるようになっています。

DmxReceiver:ReceiverInterfaceの具象クラスです。下位モジュールとして、Conceptineticsクラスを持ちます。

※Sensorクラスは、現状未使用です。
--------------------
実は人から頼まれてこのコードを書いたのですが、レビューをした結果、どうやら要求と合っていないことが判明しました。
これは要求分析がしっかり出来ていなかったせいです。
そのため、システムが大々的に作り直しになってしまいました。。。
(コードとセットで回路も作ったのですが、幸い、回路のほうはそこまで手直しをしなくてよさそうですが…)
要求分析は大事ですね。依頼側にとっても、出来たものを見て初めてわかることもあるので、要求分析は一緒になってしっかりやっておくべきでした。

で、なんやかんやあって、要求を満たすためには、Stepperクラスの様にモータ制御のために処理をブロッキングする仕組みではダメなことがわかりました。
そこで、次回はL6470を使ってこのシステムを改良します。
幸い、ライブラリがGitHub上にあったので、これを使ってシステムを作りたいと思います。

納期は1ヶ月。間に合うかなぁ。。。
関連記事
スポンサーサイト
コメント
コメントの投稿
トラックバック URL
トラックバック
ご訪問者様
プロフィール

ゆってぃ

Author:ゆってぃ
経歴7年の組み込み系・制御系エンジニアです。
("ど素人"という文言は取りました…笑)
ソフトウェア開発経験ゼロの状態から、なんとか実務がこなせるようになってきた現在に至るまでの経験を、備忘録代わりに綴っていきたいと思います。
入門者の方、大歓迎!
(上級者の方、ごめんなさい…)

あと、ブログには全然関係ないですが、Bumpy Headというバンドのギターをやっています。
ライブ情報なんかも書いたりすることがあるので、その時に「行ってもいいよ~」といった感じのコメントを戴けると、泣いて喜びます(泣)
ブログ読んでくださってる方なら、チケット代サービスしちゃいます!

最後に…滅多に流用することは無いでしょうが、このブログに書かれているソースは、特に指定の無い限りMITライセンスとします。ただし、一部それ以外のものもございますのでご注意下さい。
※ブログのリンク先にあるコードに関しては、リンク先のポリシーに従ってください。

最新記事
最新コメント
カテゴリ
RSSリンクの表示
メールフォーム

名前:
メール:
件名:
本文:

twitter
リンク
ブロとも申請フォーム
スポンサードリンク