7月19日 近頃は,夏休みのはじまりが早い。小学6年のかず,中学3年のこうしろう,そして幼稚園年中のほのちゃんは今日から,もう夏休みである。例年なら,家でゴロゴロしているはずのかずは市の水泳大会に出るそうで,毎日プールに通って練習をしている。こうしろうは私がまだ寝ているうちから,封切を待ちわびていた「踊る大捜査線THE MOVIE2」をみようと映画館に出かけていった。
私はというと,納期の迫った仕事から「現実逃避しよ」とMindStormsで遊んでいる。今まで,いくつかのプログラム開発環境を使い,MINDSTORMS ROBOTICS INVENTION SYSTEM(RIS)で作ったロボットを動かしてきた。まず,最初はRIS標準の開発環境でブロックをつなぐようにして,プログラムを作成した。ループやセンサーウォッチャーを使ってロボットをコントロールするプログラムをMINDSTORMSの本体RCXにダウンロードして実行した。次にC言語に似た文法を持つプログラム言語NQCを使って,こうしろうは本格的なプログラムに取り組んだ。
それから,LejOSというRCX用のJavaVM(Javaプログラムの実行環境)でRCXの標準ファームウエアを置き換え,Javaでプログラムを書いてみたりもした。この頃,こうしろうがあまりMINDSTORMSをしなくなったので,Javaはちょっとのぞいてみただけで終わってしまった。
1つやっていないことがある。RIS1.0,1.5にはSpirit.ocxというActiveXコントロールが付属している。このコントロールを使えば,VB(Visual Basic)やVBA(Visual Basic for Applications)などでMINDSTORMSで作ったロボットを動かすことができるのである。Visual Basicでプログラムを作る方法は日経ソフトウエアの2000年5月号に特集されていた。
ここでは,手軽にExcelのVBAでSpirit.ocxを使ってMINDSTROSMを動かす方法を紹介したい。VBAでプログラミングする場合でも,RCXにダウンロードして実行するプログラムを作成することができる。でも,今回はロボットをリモートコントロールするプログラムを作ってみたい。
MINDSTORMSをリモートコントロールするには,アクセサリーキットのリモコン(かずがこのリモコンで遊ぶのが大好きだったので,我が家では「かずのリモコン」と呼ばれている)を使う方法と,
NQCの統合開発環境であるRCXCC(Command Center)やBrickCCに付属するリモートコントロール・ツールを使う方法がある。しかし,本当に作成したロボットの機能,特性を生かそうとしたら,専用のリモコンソフトが必要になる。
今回,リモートコントロールするのは,作りかけのお掃除ロボット。
何の変哲もない車だ。
Spirit.ocxを使うと簡単にリモコンプログラムを作成できる。まずはExcelでVisual Basic Editorを選び,ユーザーフォームを作成する。Spirit.ocxを使うために,ツール(T)-その他のコントロール(A)で,利用可能なコントロールにSpirit Control(Spirit.ocx)を追加する。ツールボックスに赤くLEGOと表示されるコントロールが追加されるので,それをユーザーフォームに貼り付ける。
車を自在に走らせるリモコンを作るので,現在の速度を表示するラベルを配置する。このテキストボックスの下に,YUIHJKBNMとキーボードの配列をメモ書きしてあるように,キー押下でロボットをコントロールするのである。
コマンドボタンを配置して,マウスでクリックすることにより,車を前進,後退,右折,左折させる方法も考えたのだが,マウスでクリックするには,パソコンの画面と動いている車を交互に見て操作しなくてはならない。ゆっくり動くロボットならそれでも構わないのだが,機敏な動作をコントロールするには,ロボットの動きだけに集中できたほうがよい。キーボードで操作できるようにプログラミングして,キー位置を手が覚えてしまえば,パソコンの画面を見る必要がなくなる。
停止キーであるJを中心にU:前進,N:後退,K:右旋回,…と手の位置を移動させなくても操作できるようにユーザーフォームに以下のプログラムを記述した。
------------------------------------------
Dim intSpeed As Integer
Dim intRet As Integer
―――――――――――――――――――――
上記が変数の宣言である。intSpeedには,現在の車のスピードを記憶する。intRetには関数からの戻り値を代入する。
-----------------------------------------
Private Sub UserForm_Activate()
Spirit1.InitComm
intSpeed = 4
Call SpeedSet
End Sub
-----------------------------------------
フォームのActivateイベントで,シリアルポートを初期化するInitCommを実行し,スピードを4にセットするためにSpeedSetサブプロシージャを呼び出している。
Excelでは,フォームの表示,アンロード時に次のような順序でイベントが発生する。
initializeイベント(フォーム表示前)→Activateイベント(フォーム表示後)
QueryCloseイベント(アンロード前)→Terminate Queryイベント(アンロード後)
-----------------------------------------------------------------
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Spirit1.CloseComm
End Sub
-----------------------------------------------------------------
フォームのアンロード前に発生するQueryCloseイベントで,シリアルポートを閉じている。
-----------------------------------------------------------------
Private Sub SpeedSet()
If (Spirit1.SetPower("02", 2, intSpeed)) Then
lblspeed.Caption = intSpeed
Else
MsgBox "ロボットが見つかりません"
End If
End Sub
-----------------------------------------------------------------
SpeedSetサブプロシージャでは,SpiritコントロールのSetPowerメソッドでモーターA,Cのスピードをセット後,ラベルにスピードを表示している。ロボットと通信できずSetPowerがFalseを返した場合,つまり赤外線が届かないときやロボットのスイッチが入っていないときは"ロボットが見つかりません"とメッセージを表示する。
SetPowerメソッドの第1引数はモーターを表す。出力ポートA,B,Cを"0","1","2"と指定する。第2引数は,第3引数であるスピードの設定の仕方を表す。2とした場合,スピードは0から7の範囲で指定する。
次のKeyDownイベントの処理が,このプログラムの中心である。
-----------------------------------------------------------------
Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim StartTime As Single
With Spirit1
Select Case KeyCode
Case vbKeyU
intSpeed = 4
Call SpeedSet
.SetFwd "02"
.On "02"
Case vbKeyN
intSpeed = 4
Call SpeedSet
.SetRwd "02"
.On "02"
Case vbKeyK
intSpeed = 1
Call SpeedSet
.SetFwd "2"
.SetRwd "0"
.On "02"
Case vbKeyH
intSpeed = 1
Call SpeedSet
.SetFwd "0"
.SetRwd "2"
.On "02"
Case vbKeyJ
.Off "02"
Case vbKeyI
.Off "0"
StartTime = Timer
Do While Timer < StartTime + 0.05
Loop
.On "0"
Case vbKeyY
.Off "2"
StartTime = Timer
Do While Timer < StartTime + 0.05
Loop
.On "2"
Case vbKeyB '加速
If (intSpeed < 7) Then
intSpeed = intSpeed + 1
End If
Call SpeedSet
Case vbKeyM '減速
If (intSpeed > 1) Then
intSpeed = intSpeed - 1
End If
Call SpeedSet
End Select
End With
End Sub
-----------------------------------------------------------------
KeyDownイベントには押されたキー値がKeyCodeとして渡ってくるので,Select case文でキー値を判定し,処理を分岐している。
たとえば,Uが押された場合,
――――――――――――――
Case vbKeyU
intSpeed = 4
Call SpeedSet
.SetFwd "02"
.On "02"
――――――――――――――
スピードを4に設定後,.SetFwd "02"でモーターA,Cの回転方向を順方向(Forward)に設定,.Onでモーターを回転させている。With Spirit1とWith修飾を行っているので,Spirit1を省略し.Onのように記述できる。
K,Hキーで右左旋回させるときは,スピードを1に落としている。そうしないと,くるくる回ってしまうからだ。
I,Yキーが押されたら,片方のモーターを少しの間止めて,進行方向を微調整する。リモートコントロールではWaitコマンドが使えないので,Timer関数で現在の時間を取得し,0.05秒間空のループを行うことでしばらくモーターを止めている。
B,Mキーで加速,減速を行う。
プログラムのテストは電池がもったいないので,ACアダプタをつないだ状態で行う。
動作確認した後,「かず,やってみんか?」とリモコン好きのかずを誘う。
キーと機能の対応が身に付くまで苦労して操作していたが,慣れてくるとパソコンの画面を見ないでスピーディに動かせるようになった。
車庫入れだって高速だ。
第130話 Excelでロボットを動かす
あなたにお薦め
今日のピックアップ
-
不要な製品の購入を強いられる、ブロードコムのVMware買収で悪影響
-
米GitHubが「Workspace」を開始、ソフト開発の課題をAIが自動解決
-
Core Ultra搭載の「dynabook R9」、35時間駆動の実力
-
パスワード管理や不正サイト対策はEdgeもChromeも充実、複数機器の同期は選べる
-
コメント関連が使いやすくなった新Acrobat Reader、「クイックツールバー」に集約
-
M3搭載「MacBook Air」とM2搭載モデルを比較、外付けディスプレー2台接続も試す
-
有名人になりすまして投資広告を掲載、SNSで接触してみた結果
-
NECが受注したe-Govのガバクラ移行が大幅遅延、構築手法の途中変更が影響か
-
IIJ公式サイトのPVがある日突然13倍に、バズったわけでも炎上したわけでもない裏側
-
アリババのデジタル人材育成プログラム、世界の起業家や若者4千人以上にノウハウ提供
-
縦長のWebページ全体を画像で保存、メニューから選べるEdgeがChromeより便利
-
「四重苦」で伸び悩む日本市場、なぜ海外スマホメーカーが開拓に本腰を入れるのか
注目記事
おすすめのセミナー
-
「仮説立案」実践講座
例えば「必要な人材育成ができていない」といった課題に、あなたならどう取り組みますか? このセミナ...
-
CIO養成講座 【第35期】
業種を問わず活用できる内容、また、幅広い年代・様々なキャリアを持つ男女ビジネスパーソンが参加し、...
-
改革リーダーのコミュニケーション術
プロジェクトを成功に導くために改革リーダーが持つべき3つのコミュニケーションスキル—「伝える」「...
-
パワポ資料が見違える「ビジネス図解」4つのセオリー
インフォグラフィックスとは、形のない情報やデータなど伝えたいことを分かりやすい形で表現する技法で...
-
間違いだらけの設計レビュー
本セミナーでは、現場で多く見られる間違ったレビューの典型例を示し、そうならないための現場の改善策...
-
オンライン版「なぜなぜ分析」演習付きセミナー実践編
このセミナーでは「抜け・漏れ」と「論理的飛躍」の無い再発防止策を推進できる現場に必須の人材を育成...
-
問題解決のためのデータ分析活用入門
例えば「必要な人材育成ができていない」といった課題に、あなたならどう取り組みますか? このセミナ...
-
業務改革プロジェクトリーダー養成講座【第16期】
3日間の集中講義とワークショップで、事務改善と業務改革に必要な知識と手法が実践で即使えるノウハウ...
注目のイベント
-
日経クロステックNEXT 関西 2024
2024年5月16日(木)~5月17日(金)
-
日経ビジネスCEOカウンシル
2024年5月16日(木)17:00~19:50
-
WEURO DIVERSITY & INCLUSION FORUM
2024年5月17日(金)13:00~17:30(予定)
-
VUCA時代に勝ち残る戦略的サプライチェーン構築に向けて
2024年 5月 24 日(金) 10:00~16:20
-
人手不足を乗り越える 日本の産業界成長のシナリオ2024
2024年5月30日(木)10:20~17:45
-
人的資本経営版:日経ビジネスLIVE 2024 Spring
2024年6月3日(月)~6月5日(水)
-
DX Insight 2024 Summer
2024年6月4日(火)、5日(水)
-
付加価値ある意匠デザインを実現するものづくり技術2024
2024年6月7日(金)10:30 ~ 17:00
-
WOMAN EXPO 2024
2024年6月8日(土)10:00~17:30
-
デジタル立国ジャパン2024
2024年6月10日(月)、11日(火)
おすすめの書籍
-
ソフトバンク もう一つの顔 成長をけん引する課題解決のプロ集団
ソフトバンクにはモバイルキャリア事業以外のもう一つの顔が存在する。本書ではキーパーソンへのインタ...
-
対立・抵抗を解消し合意に導く 改革リーダーのコミュニケーション術
本書は、改革リーダーに必須のコミュニケーション術を3つのスキルの観点からまとめ上げたものです。今...
-
もっと絞れる AWSコスト超削減術
本書ではコスト課題を解決するため、AWSコストを最適化し、テクニックによって削減する具体策を紹介...
-
優秀な人材が求める3つのこと 退職を前提とした組織運営と人材マネジメント
「学生に人気のコンサルであっても、大手企業であっても、せっかく獲得した人材が数年で辞めてしまう...
-
Web3の未解決問題
ブロックチェーン技術を主軸とするWeb3の技術について、現在の社会制度との摩擦と、その先にある新...
-
ロボット未来予測2033
ロボットの用途・市場はどう拡大していくのか。AI実装でロボットはどこまで進化するのか。技術の進展...
日経BOOKプラスの新着記事
-
話題の本 書店別・週間ランキング(2024年4月第4週)
-
「永遠の命」を手にする4つのシナリオ 『「不死」の講義』
-
田内学 幸せに直結する「お金の減らし方」を学べる本
-
はじめに:『企業価値最大化経営』
-
プロほど入らない「○○保険」 貯蓄取り崩しを嫌う心理の不合理
-
昭和人間はなぜ大昔のことを「ついこのあいだ」のように語るのか
-
GWに「30代が読んでおきたい、おすすめビジネス名著」記事まとめ
-
すべての人に訪れる「死」と向き合う 『「不死」の講義』
-
はじめに:『ゼロからわかる マネーの常識 NISA、イデコから保険、税金、住宅ローンまで』
-
「麻布台ヒルズ」必見の建築デザイン6選 世界的設計事務所が共演