前回から,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で接近センサーを作る
あなたにお薦め
日経クロステックNEXT 東京 2024
-
「すごくうまくいったら20年後にノーベル賞」、CTOオブ・ザ・イヤー受賞者が講演
-
「スケール則が急速に改善」、プリファード岡野原氏が生成AIの進化を解説
-
AI導入は「使う側の気持ちの理解が必要」、ソニー・ホンダモビリティ川西社長
-
「半導体と光が融合した世界がくる」、NTT才田氏が描く未来の情報処理
-
建設分野で3Dプリンターやロボットの活用進む、働き方改革で高まる期待
-
「40年前から変わっていない」現場を変える、建設RXコンソーシアム12の技術
-
「日本は2030年付近にデジタル通貨導入」、CBDCなどの最新動向を記者が解説
-
ダイヤモンド半導体やチップレットの開発が加速、専門記者の講演から
-
なぜ日清食品HDのデジタル施策は現場に根付くのか、成田CIOが秘訣を明かす
-
「建設現場の自動化で3割省人化へ」、国土交通省の廣瀬技監が語るi-Con2.0
今日のピックアップ
-
東京ガス子会社で個人情報416万件が漏洩した可能性、業務委託元の51事業者に飛び火
-
ベクトルDBを使うシステムの肝は速度、検索精度とのバランスが良い基盤を選ぶ
-
テンセントの緊急地震速報サービス、アプリで遠方被災地の情報を受信する機能も
-
ノーベル化学賞受賞のAlphaFold2は、合成生命の時代を切り開いた
-
誰もPython自体には興味がない、大人気言語の残酷な現実
-
検索上位に潜む詐欺ショップ、特徴を押さえて不自然なら購入を控えよう
-
グローバル・単一基盤・AIで勝つ、ワークデイ日本法人の古市社長が語る事業戦略
-
割り勘もQRコード決済で楽々、年の瀬までに知りたいPayPayの送金機能の3種
-
DXに必要なカルチャーとマインドのシフト、「正しい違和感」を強制的に持たせよ
-
「部下に言いづらいことをうまく伝えられない」という悩み
-
トヨタがオープンソース支援組織を設立、狙いは「社内カルチャーの変革」
-
機能豊富なApple Pencil Pro、紛失時は「探す」アプリで場所を特定
注目記事
おすすめのセミナー
-
ITリーダー養成180日実践塾 【第14期】
8回のセミナーでリーダーに求められる“コアスキル”を身につけ、180日間に渡り、講師のサポートの...
-
ITリーダー養成50日集中塾 【第20期】
ITの世界で活躍する女性がリーダーとしてさらに力を発揮できるようになるトレーニングプログラムです...
-
確実に効果が出るAWSコスト削減テクニック
本セミナーで講師が解説するAWSコスト削減のテクニックは、ITの現場で試行錯誤しながら編み出した...
-
生成AIの導入&業務活用実践講座
生成AIの導入・活用に欠かすことのできない、生成AI技術の基本や安全な使用方法、業務や事業への応...
-
CIO養成講座 【第36期】
業種を問わず活用できる内容、また、幅広い年代・様々なキャリアを持つ男女ビジネスパーソンが参加し、...
-
業務改革プロジェクトリーダー養成講座【第17期】
3日間の集中講義とワークショップで、事務改善と業務改革に必要な知識と手法が実践で即使えるノウハウ...
注目のイベント
おすすめの書籍
-
Arduino IDEで作る! ESP32完全ガイド
本書は、中国Espressif Systems社が開発するマイコン「ESP32」を使った電子工作...
-
ミドル世代を襲う人生100年時代
ミドル世代の不安(老後資金不安症・社会的孤立症など)の原因は「人生100年時代」にあります。その...
-
データサイエンス数学ストラテジスト[上級]公式テキスト
DX人材は数学スキルがマストに。そのスキルを証明する資格・データサイエンス数学ストラテジスト[上...
-
Microsoft 365で仕事効率超アップ Copilot&アプリ連携活用術
本書は、Microsoft 365のアプリやサービスの中から便利で仕事に役立つものを厳選して、具...
-
これ1冊で丸わかり 完全図解 ネットワークプロトコル
本書は、日経NETWORKに掲載したネットワークプロトコルに関連する主要な記事をまとめており、様...
-
超・品証へ 品質コンプライアンス実践ガイド その組織では不正を防げない
2024年6月、トヨタ自動車の法規認証試験を巡る不正が明らかになりました。どうすれば不正を防ぎ、...
日経BOOKプラスの新着記事
-
ディープフェイクが大量生成され「情報の終焉」が到来する
-
「がんばりすぎず力を抜こう」という時代、あなたの働く理由は
-
話題の本 書店別・週間ランキング(2024年9月第5週~10月第1週)
-
『ジオストラテジクス マンガで読む地政学』を編集者が熱弁
-
時間が余ってもテストを見直さない子ども 理由は性格ではない
-
「100冊の知恵」限りある時間を有意義に使うためのバケットリスト
-
組織で働く人は必読 人気哲学者が厳選「ビジネス教養の哲学本」
-
はじめに:『ミドル世代を襲う人生100年時代 お金・健康・老後の不安やストレスを克服する』
-
10万人を診た精神科医が教える 怒りがこみ上げたときの対応
-
「うちの子、嘘をついている?」 疑う前に知っておきたい記憶の性質