前回から,MINDSTORMS ROBOTICS INVENTION SYSTEM(RIS1.0)に付属しているSpirit.ocxというActiveXコントロールを使ってExcelのVBA(Visual Basic for Applications)でプログラミングを行っている。前回はキー操作で車を動かすリモートコントロールプログラムを作った。今回はMind Stormsの本体RCXにダウンロードして実行するマルチタスクのプログラムを作ってみたい。
なぜか近頃,私はMindStormsがやりたくてたまらないのだ。かずとこうしろうは,「何をしているんだろう」と少し距離をおいて見ているだけだ。ほのちゃんは私と一緒に,小さなものを作っては「さくひん,さくひん。とっといてね。」と,壊すわけにはいかない,なんだかわからないものを大量生産している。
MindStormsには,標準で2種類のセンサーが付いている,何かにぶつかったことを検知するタッチセンサーと,光の反射を読み取り,暗い明るいの判断をするライトセンサーである。RCXはIRタワーと通信するために赤外線の入出力機能を持っている。赤外線の出力機能とライトセンサーを組み合わせると,ぶつかる前に障害物をよける接近センサーが作れる。赤外線を定期的に出力し,反射する光の値をチェックして大きな変化が現れたら,何かに近づいたと判断し,ぶつかる前に回避することができるのだ。
お掃除ロボットの作りかけを改造して,赤外線の反射をライトセンサーで読み取るようにした。
ライトセンサーを支えているのは2人の「レゴのおじちゃん」である。このロボットを見て,こうしろうは「細かいところに,こっとるね」といかにもレゴ好きらしいコメントをした。かずは「部品探すが面倒だっただけやろ」と冷たいが的確なコメントを残した。
Spirit.ocxを使って,VBAでプログラムを作ると,RCXがマルチタスクで動くことが実感できる。
まずはユーザーフォーム(UserForm)を作りDownLoadボタンでプログラムをRCXにダウンロードできるようにする。
-------------------------------------------------------------------
Private Sub UserForm_Activate()
Spirit1.InitComm
End Sub
-------------------------------------------------------------------
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Spirit1.CloseComm
End Sub
-------------------------------------------------------------------
ユーザーフォーム(UserForm)のActivate時にシリアルポートを初期化し,QueryCloseでシリアルポートをクローズするのはお約束である。
DownLoadボタンクリック時イベントに,RCXにダウンロードするプログラムを記述していく。まず,いちいち,Spirit1と書かなくてもすむように,With修飾を行う。RCXには0~4の5つのプログラムを入れる場所があるので,SelectPrgm 4で選択する。
タスクは3つ定義した。タスク0がmainタスクであり,プログラムはタスク0から開始される。
-------------------------------------------------------------------
Private Sub btnDownLoad_Click()
With Spirit1
.SelectPrgm 4 'プログラムスロット5を指定
.BeginOfTask 0 'タスク0の開始
.SetSensorType 0, 3 'ポート1のセンサーを3:光センサーに設定
.SetSensorMode 0, 0, 0 'ポート1のセンサーが未加工の値を返すように設定
.SetFwd "02" '回転方向を順方向に
.On "02" 'モーターをオン
.StartTask 1 'タスク1開始
.StartTask 2 'タスク2開始
.EndOfTask
-------------------------------------------------------------------
タスク0ではまず,ポート1につないだセンサーは光センサーであり,未加工の値を返すことを指定している。そしてモーターの回転方向を順方向に設定し,車をスタートさせると同時にタスク 1と2を開始している。
-------------------------------------------------------------------
.BeginOfTask 1
.Loop 2, 0 '無限ループ
.SendPBMessage 2, 0 '赤外線出力
.Wait 2, 10 '1/10秒 Wait
.EndLoop
.EndOfTask
-------------------------------------------------------------------
タスク1では, Loop文で無限ループを作り,SendPBMessageとWaitの組み合わせで,0.1秒ごとに赤外線を出力している。
-------------------------------------------------------------------
.BeginOfTask 2
.Loop 2, 0 '無限ループ
.SetVar 0, 12, 0 '光センサーの値を変数0に
.SumVar 0, 2, 100 '変数0の値に100加算
.If 12, 0, 0, 0, 0 '光センサーの値と変数0の値を比較
.AlterDir "02" '方向を変える
.Wait 2, 50 '0.5秒間バック
.SetFwd "0" '左右の方向を変えて,曲がる
.SetRwd "2"
.Wait 2, 50
.SetFwd "02" '回転方向を順方向に戻す
.EndIf
.EndLoop
.EndOfTask
.PlaySystemSound 2 'ダウンロード完了のサウンド
End With
MsgBox "DownLoad 完了!"
End Sub
-------------------------------------------------------------------
タスク2では,光センサーの値の変化により障害物に近づいたことを検知し,車の進行方向を変えている。まず,SetVarで光センサー(12)の値を変数(0)に記憶し,SumVarでその値に100を足している。
次のIf文がちょっとわかりにくい。12,0,0,0,0の真ん中の0が>を意味する比較演算子なのである。つまり12,0 > 0,0,左辺の12,0は光センサーの最新の値であり,右辺が変数0の値である。変数0の値は光センサーの直前の値+100なので,左辺と右辺に100を超える違いが認められる場合に,AlterDirでバックし方向を変え,また進み出す。
テストしてみると,タンスや壁の5cmぐらい前で,何かに接近したことを感知し方向を変え,部屋の中を四角く動き回った。
これにて,父の夏休みの自由研究は終了。
第131話 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選 世界的設計事務所が共演