編集履歴一覧に戻る
airpocketのアイコン画像

airpocket が 2023年08月22日12時27分41秒 に編集

初版

タイトルの変更

+

microbitでプラレールハック その1 リモコン/自動運転化

タグの変更

+

Microbit

+

プラレール

メイン画像の変更

メイン画像が設定されました

記事種類の変更

+

製作品

ライセンスの変更

+

(MIT) The MIT License

本文の変更

+

# はじめに この記事は、otamaさんが作成したmicroガタゴッtという作品について説明する記事のその1です。 小学校高学年くらいなら出来る内容だと思いますが、はんだを使うためすこしハードルがたかいかもしれません。 ## microガタゴッtとは maicroガタゴッtは たのしいmicrobitコンテスト2023 にエントリーするために作成されました。 プラレールをハックしてmicrobitをつかって次の4つの機能を追加します。。 ①プラレールをリモコン操作する ②駅位置を検知して自動停発車する ③ポイントをリモコンで切り替える ④自動踏切を作る すべて組み込むとこんな感じに遊べます。 @[youtube](https://www.youtube.com/watch?v=oYZ8JgSuECc) ## この記事について この記事では、microガタゴッtに追加する機能①と②について扱います。 # できたもの プラレールをもう一台のmicrobitからリモコン操作できます。 ![キャプションを入力できます](https://camo.elchika.com/43554a5557906c6a41b2b69f90285198a5bdb21b/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38666662353561372d373433312d346234382d383832642d3565323665663534343465652f34623461386437342d373939642d343138342d613533392d303464346334326439626237/) 自動運転機能では、このように磁石を取り付けたプラレールの上で自動的に停発車します。 ![キャプションを入力できます](https://camo.elchika.com/7b13cae43a532195d7b60f08c9de8bcfe56d5452/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38666662353561372d373433312d346234382d383832642d3565323665663534343465652f34616337623164382d396363352d346230662d383232652d343839316536623334396432/) # 部品表 |部品名|個数|備考| |-|-|-| |micro:bit|2|V1でもV2でもOK| |プラレール動力車|1|今回はトーマスを使いました| |プラレール貨車|1|なるべく大きい方が良い| |プラレール直線レール|1|| |ネオジム磁石|数個|ダイソーで売ってます| |[micro:bit用GROVEシールド v2.0](https://www.switch-science.com/products/5434)|1|| |[GROVE - リレー](https://www.switch-science.com/products/807)|1|| |[M5Stack用ホールセンサユニット](https://www.switch-science.com/products/6558)|1|| |[M5Stack用GROVE互換ケーブル 10 cm](https://www.switch-science.com/products/5213)|1|| |被覆導線|適量|| |小型モバイルバッテリー|1|小さいほどいいです。microbitの電源に使えれば何でもいいです。| 必要な工具はこちら |工具名|備考| |-|-| |ドライバー|プラレールを分解するのに使います。小さめのプラスドライバーが必要だと思います| |ホットボンド|改造部品を固定するのに使います。ダイソーで購入できます| |六角レンチセット|ホールセンサの筐体を分解するのに使います。ダイソーで購入できます| |はんだごてとはんだ|プラレールの回路を改造するのに使います| # リモコン化 リモコン化するには、プラレールのスイッチ部分を分解して、スイッチ部品を除去。本来スイッチの合ったところにリレーを入れます。リレーにはswitch scienceさんで購入したseeedのGROVE リレーを使います。 このリレーの良いところは、駆動電圧が3Vである点と、GROVEケーブルで接続できる点です。 microbitとの接続にはGROVEケーブルを使用します。microbitにはGROVEコネクタが付いていませんので、同じくswitch scienceさんでの購入したseeedのmicro:bit用GROVEシールド v2.0を使用しました。 ## リレーとは リレーとは、電気信号を使って回路のスイッチをON/OFFするための部品です。もっともシンプルな構造のリレーは、電気信号側をON/OFFすると、回路側のスイッチがON/OFFされます。電気信号で回路を直接ON/OFFできないの?と言う疑問を感じた方は大正解です。実はそんなことが出来た方が楽なのですが、使える電流や電圧の大きさの制約があってそううまくはいかないケースもあるのです。 そのため、今回はリレーを使ってプラレールのモーターを動かすための電気回路をON/OFFします。 ![キャプションを入力できます](https://camo.elchika.com/d718b37c73d0dc3e35f05d7cc17fcb8ff1ab9c2f/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38666662353561372d373433312d346234382d383832642d3565323665663534343465652f65646235646538362d633663622d343434382d626265362d663738666435346636613339/) リレーには信号入力用のコネクタと、回路スイッチ用のコネクタがあります。このリレーの場合、白いGROVEコネクタが信号入力用、青いネジ式のソケットが回路側のコネクタです。 ## プラレールの回路を改造する プラレールの回路は非常に簡単です。構成要素は電池とモーターとスイッチのみです。 分解すると、電池のプラスかマイナス側の端子が、モーターの電極につながっています。電池の反対極はスイッチにつながっています。 スイッチはラッチ式になっていて、スイッチ部品についた金具が動くことで、回路を繋いだり切断したりしているはずです。 今回は、このスイッチ部品自体を外してしまいました。スイッチが接続しいていた回路の両端にそれぞれ被覆導線をはんだ付けして、取り外したスイッチの穴あなからプラレールの外側へ引き出しましょう。 この作業が今回のプラレールハックでもっとも難しい工作だと思います。 ![キャプションを入力できます](https://camo.elchika.com/92b1cfb711cb922712526c38c47c80eb9fd353e1/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38666662353561372d373433312d346234382d383832642d3565323665663534343465652f64626263363064342d366239622d343738652d393435662d616664386164313633666336/) 改造前と改造後の回路のイメージです。 ## 結線する プラレールから引き出した2本のケーブルをリレーの回路側端子にそれぞれ接続します。どちらにどちらを接続しても問題ありません。 リレーのGROVEケーブル端子にGROVEケーブルを挿して、GROVEシールドのP0/P14コネクタに接続します。 リレーはプラレールの屋根の上にでもホットボンドで固定してしまいます。 microbitはGROVEシールドに挿します。 電源用のモバイルバッテリーをGROVEシールドに挿します。 リモコン部分の工作は以上です。 # 自動亭発車 自動亭発車機能はホールセンサと言う磁石を検出するセンサをつかって停車位置を検出して行います。例えば駅を配置する部分のレールに磁石を貼りつけて置き、車両の下に取り付けたホールセンサで位置を検出します。 ## ホールセンサの確認 ホールセンサは電源を供給すると動き始めます。ホールセンサの動作確認のために前項で接続したGROVEシールドのP1/P15コネクタにホールセンサを接続します。 通電されているとホールセンサは動いています。 磁石をホールセンサに近づけセンサが感知すると、センサの赤いLEDが光ります。光らない場合は磁石を裏返して同じことをします。N極、S極を識別して反応しますのでどちら向きだと反応するかを把握しておいてください。 ## 磁石を取り付ける プラレールに磁石を取り付けます。固定するにはホットボンドを使用します。何個取り付ける必要があるかは、プラレールのスピードとプログラムの処理速度に依存します。Make Codeを使用する場合、処理速度が遅いので磁石を多めに取り付けた方が良いでしょう。 ![キャプションを入力できます](https://camo.elchika.com/b503f5f5ff348a181a8198d444ea6afee085d50d/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38666662353561372d373433312d346234382d383832642d3565323665663534343465652f63313765386130352d663137352d346534352d396263372d373137386137313831616131/) ## ホールセンサを取り付ける。 ホールセンサは貨車の後部底面に取り付けました、筐体があると厚すぎるため、分解して基板のみ使用します。センサの筐体は六角ネジ一個で固定されているため、ネジをはずして基板を取り出します。基板は貨車の裏面にホットボンドで取り付けます。 ## 結線 テスト時と同様にGROVEシールドのP1/P15コネクタにホールセンサを接続します。 ![キャプションを入力できます](https://camo.elchika.com/6a6b3d858c21f8d56a233e4a805605db6c344b96/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38666662353561372d373433312d346234382d383832642d3565323665663534343465652f66366335386366362d633764632d346364382d626135622d663666343934376363376365/) 全ての装置の結線のイメージです。 # コーディング 今回、microbit公式のmicropython環境でコーディングしました。 送信機側と受信機側をコーディングしています。受信機側がプラレールに載せる側のmicrobitです 送信機側にはポイント切り替え用のコードも含まれていますが、このまま使用しても問題ありません。 送信機側、受信機側ともAボタンを押すたび、プラレールのモーターがON/OFFされます。 また、ホールセンサが磁石を検出するとモーターが停止し、指定秒数後に出発します。 ## 送信機側microbit ```python # Imports go at the top from microbit import * import radio display.show(Image.HAPPY) flag_a = 0 flag_b = 0 radio.on() radio.config(group=1) while True: if button_a.was_pressed(): if flag_a == 0: flag_a = 1 radio.send('a') display.show('a') elif flag_a == 1: flag_a = 0 radio.send('b') display.show('b') if button_b.was_pressed(): if flag_b == 0: flag_b = 1 radio.send('c') display.show('c') elif flag_b == 1: flag_b = 0 radio.send('d') display.show('d') ``` ## 受信機側microbit ```python # Imports go at the top from microbit import * import radio radio.on() radio.config(group=1) display.show(0) flag = 0 # Code in a 'while True:' loop repeats forever while True: if flag == 1: display.show(1) pin0.write_digital(1) if pin1.read_digital() == 0: pin0.write_digital(0) display.show(2) sleep(5000) pin0. write_digital(1) display.show(3) sleep(2000) if flag == 0: display.show(0) pin0.write_digital(0) if button_a.was_pressed(): flag = 1 if button_b.was_pressed(): flag = 0 message = radio.receive() if message == 'a': flag = 1 if message == 'b': flag = 0 ```