名刺サイズの超小型PC「ラズパイ」で遊ぶ(第54回)
Nゲージの模型をラズパイで動かす “らずてつ”その3――ポイント切り替えを操作する
前回に引き続き、ラズパイで鉄道模型をコントロールする連載の第3回目はポイントの制御です。鉄道模型のポイントを切り替える方法はさまざまあるようですが、筆者が持っているトミックス製の電動ポイントの場合は、電磁石に電流を流し、ポイントを動作させる部品に付いている磁石を瞬間的に移動させて切り替えています。特にアナログ的な動作は必要ないので、GPIOのHighとLowで信号を出せば切り替えられそうです。
では実際にどのようにして切り替えの指示を出せばいいのでしょうか。電圧や電流量が高い場合はリレーなどを使う必要がありますが、今回はそれほど大電流を必要としていないので、モーターを動かすのにも使った、秋月電子通商で販売されている「TB6612使用 Dual DCモータードライブキット」(以下、TB6612)を使用します。TB6612には制御する端子が2つ付いていますので、それぞれをGPIOにつないで短時間だけ電流を流し、ポイントを切り替えるようにします。
ポイントに電流を流すのは同じくPWMを使います。模型を走らせるときはハードウェアPWMを使いましたが、ポイントの制御はそれほど精度が必要ないので、RPi.GPIOに用意されているソフトウェアPWMを使います。ソフトウェアPWMを使うと、GPIOのどのピンでもPWMが使えます。
具体的な操作方法ですが、デューティー比を100にして電流を流したあと、0.05秒の間隔を置いてデューティー比を0にして電流を止めます。瞬時に切り替わるためこの程度の秒数で問題ありません。あまり長くすると電磁石が熱せられてしまいますので気をつけましょう。
テストとして2本のポイントを接続します。これを踏まえて作ったプログラムが以下のようになります。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
import RPi.GPIO as GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
# ポイント1
straight_1 = 27 # pin11
curve_1 = 22 # pin13
pwm_1 = 17
# ポイント2
straight_2 = 24 # pin11
curve_2 = 25 # pin13
pwm_2 = 23
# ポイント1
GPIO.setup(straight_1, GPIO.OUT)
GPIO.setup(curve_1, GPIO.OUT)
GPIO.setup(pwm_1, GPIO.OUT)
pwm1 = GPIO.PWM(pwm_1, 100)
pwm1.start(0)
# ポイント2
GPIO.setup(straight_2, GPIO.OUT)
GPIO.setup(curve_2, GPIO.OUT)
GPIO.setup(pwm_2, GPIO.OUT)
pwm2 = GPIO.PWM(pwm_2, 100)
pwm2.start(0)
# 初期設定
GPIO.output(straight_1,0)
GPIO.output(curve_1,0)
GPIO.output(straight_2,0)
GPIO.output(curve_2,0)
time.sleep(1)
# ポイント1の切換え
GPIO.output(straight_1,1)
GPIO.output(curve_1,0)
print("Point1 Straight")
pwm1.ChangeDutyCycle(100)
time.sleep(0.05)
pwm1.ChangeDutyCycle(0)
time.sleep(2)
# ポイント1の切換え逆方向
GPIO.output(straight_1,0)
GPIO.output(curve_1,1)
print("Point1 Curve")
pwm1.ChangeDutyCycle(100)
time.sleep(0.05)
pwm1.ChangeDutyCycle(0)
time.sleep(2)
# ポイント2の切換え
GPIO.output(straight_2,1)
GPIO.output(curve_2,0)
print("Point2 Straight")
pwm2.ChangeDutyCycle(100)
time.sleep(0.05)
pwm2.ChangeDutyCycle(0)
time.sleep(2)
# ポイント1の切換え逆方向
GPIO.output(straight_2,0)
GPIO.output(curve_2,1)
print("Point2 Curve")
pwm2.ChangeDutyCycle(100)
time.sleep(0.05)
pwm2.ChangeDutyCycle(0)
time.sleep(2)
pwm1.stop()
pwm2.stop()
print("End")
time.sleep(1)
GPIO.output(straight_1,0)
GPIO.output(curve_1,0)
GPIO.output(straight_2,0)
GPIO.output(curve_2,0)
GPIO.cleanup()
point.py
プログラムを走らせると、1つのポイントが切り替わったあと、もう1つのポイントが切り替わります。これでポイントの操作ができるようになりました。次回はこれまでのやり方を応用して、ポイントを切り替えながら線路を回って走るようにしてみます。
Copyright © ITmedia, Inc. All Rights Reserved.
名刺サイズの超小型PC「ラズパイ」で遊ぶ
今やスマートフォンアプリで何でも完結できてしまう時代。しかし、一から自分の手でデバイスを作り上げ、試行錯誤しながらアイデアを具現化する楽しさは格別です。この連載では、テーマや用途にあわせてマイクロコンピュータ(マイコン)と呼ばれる名刺サイズの超小型PC「Raspberry Pi」(通称ラズパイ)の活用方法から具体的な工作手順までを紹介します。
この記事の著者
関連記事
こんなメディアも見られています
ITmedia NEWSに関連する情報をお探しであれば、こちらのメディアもお役に立てるかもしれません。
SpecialPR
本日の新着記事
アクセスランキング
-
1
米Getty Imagesが破産申請へ AI画像の台頭で経営悪化、「報道写真」軸に年内の再建目指す
-
2
OpenAI従業員、役員会議室に録音装置を仕掛けた疑いでFBIが逮捕
-
3
キャッシュレスサービス「IDARE」、約13万人の個人情報漏えい 残高や取引履歴なども
-
4
Anthropic、自己複製AIの「兆し」を指摘 55ドルのTVボックス15台で26Bモデルが稼働
-
5
Apple、「Welcome home」イベントで発表されたことまとめ 日本でも2製品予約開始
-
6
相次ぐ情報漏えいの一因に「A2B攻撃」 公開アプリを解析し裏側のサーバを狙う手口、NICTが公表
-
7
フランスのスーパー数百店舗で冷蔵設備にサイバー攻撃 温度が最高50度に上昇し食品大量廃棄に
-
8
Character.ai、米連邦破産法11条を申請 Disney系が一部IPのライセンス取得で先行入札
-
9
JR東海、ECサイトの顧客情報約1.5万件漏えいか IDCFへの不正アクセスで「閲覧された可能性を否定できない」
-
10
さいたま市や横須賀市など、防災情報配信システムに不正アクセス 全国でメアド最大313万漏えいか
ITmedia NEWS SNS
インフォメーション
注目情報をチェック
ITmediaNEWSをフォロー
あなたにおすすめの記事PR