名刺サイズの超小型PC「ラズパイ」で遊ぶ(第59回)
Nゲージの模型をラズパイで動かす “らずてつ”その8――スタートボタンを取り付けてみる
ここまでの連載で、鉄道模型をラズパイでコントロールする方法についてイメージがつかめてきたかと思います。そこで最終目標の「トミックスレイアウトベースキット」に似た形で線路を配置し、シミュレーションしていきたいと思います。
まずセンサーですが、2つある引き込み線にそれぞれ1個ずつ、またポイントの近くに1個ずつの計4個を配置します。センサーは以前工作した「TPR-105」です。以前は「S280」の長いレールに取り付けていましたが、短い「S140」のほうが取り回しが効きますので、こちらに変更しました。また「D.C.フィーダーN」の取り付け箇所にTPR-105を通す形で作りましたが、リード線の穴を開けた方がよいと思い、変更しました。
これらを組み込んだのがこちらのレイアウトです。レイアウトベースキットではループを描いていますが省略し、カーブも「280-45」から半径が小さい「C343-45」にしてあります。
また、センサーがしっかりと動作しているのかを知るためにLEDをセンサーの抵抗と並列に入れました。センサー上を模型が通過して反応すると点灯する仕組みです。
さてレイアウトですが、ボタンを押したら模型が走り出すようにしてみたいと思います。ボタンの入力についてはgpiozero「Button」というクラスで扱えます。ボタンが押されたらLEDが点灯する、という仕組みは以下のプログラムで実行できます。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from gpiozero import Button, LED
button = Button(13)
led = LED(26)
try:
while True:
if button.is_pressed:
led.on()
else:
led.off()
except: KeyboardInterrupt
led.off()
button.py
ここではラズパイのGPIO26(37番ピン)にLEDを接続し、ボタンスイッチをGPIO13(33番ピン)とGNDに接続しています。ボタンを押すとLEDが点灯し、Ctrl+Cでプログラムを終了します。
このプログラムを「button.py」として保存しましょう。
$ python3 button.py
と入力すると、ボタンを押すとLEDが光ります。
クラスButtonにはこの他、ボタンが押されるまで入力を待つ「button.wait_for_press()」があります。これを使うことで、ボタンを押したら模型が発車する仕組みを作ることができます。gpiozeroのチュートリアルにあるサンプルプログラムを使うことで、この仕組みを知ることができます。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from gpiozero import Button
button = Button(13)
button.wait_for_press()
print "ボタンが押されました"
buttonpush.py
$ python3 button.py
では実際に模型が発車するようにしましょう。前回、センサーで模型を動かしたものを改造して使います。プログラムは以下のようになります。4つ取り付けたセンサーのうち、引き込み線にある3と4のセンサーを使って反転させています。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from gpiozero import Motor, Button, MCP3008
import time
motor = Motor(forward=20, backward=21)
button = Button(13)
sen03 = MCP3008(channel=2)
sen04 = MCP3008(channel=3)
speed = 0.25 # 模型のスピード
button.wait_for_press()
try:
motor.forward(speed)
while True:
rail3 = round(sen03.value * 100,2)
rail4 = round(sen04.value * 100,2)
print (rail3, rail4)
time.sleep(0.01) #センサーの読み取り間隔
if rail3 >= 50: # フォトセンサーの返り値が50以上であれば反転
motor.stop()
time.sleep(1)
print("sensor1 detected")
motor.backward(speed)
time.sleep(15)
motor.stop()
time.sleep(1)
if rail4 >= 50:
motor.stop()
time.sleep(1)
print("sensor2 detected")
motor.backward(speed)
time.sleep(15)
motor.stop()
time.sleep(1)
else:
motor.forward(speed)
except: KeyboardInterrupt
print ("
Stop")
motor.stop()
movetest3.py
これを「movetest3.py」として保存し、以下を実行してみましょう。引き込み線から発車した列車が、反対の引き込み線で反転して戻ります。
$ python3 movetest3.py
Copyright © ITmedia, Inc. All Rights Reserved.
名刺サイズの超小型PC「ラズパイ」で遊ぶ
今やスマートフォンアプリで何でも完結できてしまう時代。しかし、一から自分の手でデバイスを作り上げ、試行錯誤しながらアイデアを具現化する楽しさは格別です。この連載では、テーマや用途にあわせてマイクロコンピュータ(マイコン)と呼ばれる名刺サイズの超小型PC「Raspberry Pi」(通称ラズパイ)の活用方法から具体的な工作手順までを紹介します。
この記事の著者
関連記事
こんなメディアも見られています
ITmedia NEWSに関連する情報をお探しであれば、こちらのメディアもお役に立てるかもしれません。
SpecialPR
本日の新着記事
アクセスランキング
-
1
なぜ酒蔵の許諾なしに? 「VTuberコラボ日本酒」騒動、主催者が経緯説明 仲介者による調整で「準備進んでいると認識」
-
2
かっぱ寿司「配布前のコラボグッズ、フリマで買わないで」 プリキュアコラボ発表日に注意喚起
-
3
「食事量は1日1200kcal以下、でも肥満」な人を14日間追跡調査 痩せない理由は……米コロンビア大などの研究
-
4
本物そっくり“AI生成レシート“が経費精算の脅威に マネフォ「自力で見破るのは難しい」 企業はどう備える?
-
5
「ペンギンを返して」→「3匹全部採用して」 批判殺到のSuica新キャラ、ファンアートが空気を変えた? SNSの声
-
6
「菜の花がおかしい」――イラストレーター制作うたうマラソン大会ポスターに指摘相次ぐ 事務局がAI使用明かす【訂正あり】
-
7
「壁紙DIY」とイマドキの超短焦点4Kプロジェクターを寝室で試したら検証が止められなくなった
-
8
早すぎる 「めっちゃカメレオン」Switch 2版、即日10万本突破
-
9
農水省の“クソダサ”ポスター話題 「AIよりよっぽど良い」の声も 担当者に狙いを聞いた
-
10
藤井風のリサイタル、公式サイトがインターネット老人会すぎると話題 公民館のチラシみたいだけど東京ドーム開催
ITmedia NEWS SNS
インフォメーション
注目情報をチェック
ITmediaNEWSをフォロー
あなたにおすすめの記事PR