Nゲージの模型をラズパイで動かす “らずてつ”その6――センサーで模型をコントロールする:名刺サイズの超小型PC「ラズパイ」で遊ぶ(第57回)
鉄道模型の運転をラズパイで制御する仕組みに挑戦。
前回は線路にセンサーを設置するところまでを解説しました。今回はそのセンサーで模型を制御してみましょう。Pythonのプログラムは前回ご紹介した通り、GPIO ZeroでADコンバーターのMCP3008をコントロールする方が簡単ですので、模型本体とポイントについて、当初のRPi.GPIOによる制御からGPIO Zeroに変更して進めていきます。
なお、GPIO Zeroを使うことにより、利用している「TPR-105」の接続方法が変わります。「PWM A」「PWM B」として用意されているピンはGPIOではなく3.3Vの端子に接続しますので注意してください。
GPIO Zeroでモーターを使うためには「Motor」というAPIを使います。前後に動かす場合は「forward」と「backword」で指定します。前後に動かすプログラムは以下のようになります。
#!/usr/bin/env python # -*- coding: utf-8 -*- from gpiozero import Motor from gpiozero import MCP3008 import time motor = Motor(forward=20, backward=21) sen01 = MCP3008(channel=0) speed = 0.18 time.sleep(1) motor.forward(speed) time.sleep(10) motor.stop() time.sleep(1) motor.backward(speed) time.sleep(10) motor.stop() motortest.py
記述したら動かしてみましょう。
$ python motortest.py
前後に模型が動いたかと思います。ここで「motor.forward(speed)」と「motor.backward(speed)」と指定していますので、9行目に定義した変数「speed」の数字を増減することでスピードが変わります。「0〜1」までの間で指定します。
さて、模型を動かす手順が分かったところで、いよいよセンサーによる制御へと移っていきましょう。TPR-105は前回述べたとおり、本体の左側にある赤外線LEDから発光された光を、右側にある反射型フォトトランジスタで受信して値を返します。そこで車両の底に白い紙を貼り付けて赤外線LEDの光を反射させてセンサーで読み取るようにしました。
まずはどのような値になっているのか調べます。模型をずっと動かし、センサーの上に来たときの値の変化を見てみます。プログラムは以下のようになります。
#!/usr/bin/env python # -*- coding: utf-8 -*- from gpiozero import Motor from gpiozero import MCP3008 import time motor = Motor(forward=20, backward=21) sen01 = MCP3008(channel=0) speed = 0.18 # 模型のスピード time.sleep(1) try: while True: rail1 = round(sen01.value * 100,2) print (rail1) time.sleep(0.05) motor.forward(speed) except: KeyboardInterrupt motor.stop() movetest.py
プログラムを保存したら、以下のようにして走らせてみましょう。
$ python movetest.py
列車が右回りに動いてセンサーの上を通過したときに、以下のようにセンサーからの値が変わるのを確かめられます。なお今回は、モーターのスピードを簡単に変えられるように「speed」という変数を作りました。Ctrl+Cを押すと停止します。
8.06 8.16 8.06 8.16 8.06 8.06 8.16 8.16 8.06 8.16 8.55 9.04 10.31 13.43 19.69 15.1 33.66 ←通過しているところ 33.37 ←通過しているところ 94.24 ←通過しているところ 94.53 ←通過しているところ 34.73 ←通過しているところ 27.6 15.68 9.62 18.42 9.53 9.82 7.87 8.16 8.16 8.16 8.16 8.16 8.16 8.06 8.16 8.06 ……(続く)
続いて、センサーの上を通過すると動きが変わるようにしてみましょう。その際の動作ですが、何もなければ左回りに模型が動くようにし、センサーを通ったらいったん停止して逆行するという形にしました。プログラムは以下の通りです。
#!/usr/bin/env python # -*- coding: utf-8 -*- from gpiozero import Motor from gpiozero import MCP3008 import time motor = Motor(forward=20, backward=21) sen01 = MCP3008(channel=0) speed = 0.18 # 模型のスピード time.sleep(1) try: while True: rail1 = round(sen01.value * 100,2) print (rail1) time.sleep(0.01) #センサーの読み取り間隔 if rail1 >= 50: # フォトセンサーの返り値が50以上であれば反転 motor.stop() time.sleep(2) motor.backward(speed) time.sleep(10) motor.stop() time.sleep(2) else: motor.forward(speed) except: KeyboardInterrupt motor.stop()
TPR-105を手で遮ったとき、Maxの状態だと100程度、何もしなければ7〜9程度の値を返しましたので、センサーに捉えられるよう、50以上であれば反転して動作させるようにしてあります。ただし光センサーなので、部屋が明るすぎると反応しないことがあります。その時はフォトセンサーの返り値を大きくするなどして対応してください。
なお「time.sleep(0.01)」はセンサーの読み取り間隔です。あまり大きくしてしまうとセンサーの反応が鈍くなりますので、値を少なめにしています。
次回はこれを元に、もう一歩上の動きができるようにしてみます。
関連記事
- Nゲージの模型をラズパイで動かす “らずてつ”その1――鉄道模型とラズパイをつなぐ
今回から鉄道模型の運転をラズパイで制御する仕組みに挑戦します。 - Nゲージの模型をラズパイで動かす “らずてつ”その2――制御の準備
鉄道模型の運転をラズパイで制御する仕組みに挑戦します。 - Nゲージの模型をラズパイで動かす “らずてつ”その3――ポイント切り替えを操作する
鉄道模型の運転をラズパイで制御する仕組みに挑戦します。 - Nゲージの模型をラズパイで動かす “らずてつ”その4――タイミングを合わせて車両を走らせる
鉄道模型の運転をラズパイで制御する仕組みに挑戦します。 - 部屋の二酸化炭素濃度を測定しよう ラズパイでCO2センサーを作る
ラズパイを使ってCO2を計測し、部屋の換気をする目安にしてみましょう。 - 550円の「Raspberry Pi Pico」でIoT その1:気温と湿度、気圧を測定する
独自開発のチップ「RP2040」を搭載したマイコンボード「Raspberry Pi Pico」でセンサーデバイスをテスト。 - ラズパイで「Windows 10 on ARM64」を動かす(オーバークロック編)
ラズパイにARMプロセッサ向けの「Windows 10 on ARM64」をインストールしてみた。今回はオーバークロックで快適動作を実現。 - ラズパイで「Windows 10 on ARM64」を動かす(インストール編)
ラズパイにARMプロセッサ向けの「Windows 10 on ARM64」をインストールしてみた。 - ラズパイで「Windows 10 on ARM64」を動かす(事前準備編)
ラズパイにARMプロセッサ向けの「Windows 10 on ARM64」をインストールしてみた。 - ラズパイ一体型キーボード「Raspberry Pi 400」レビュー 特例制度のWeb申請で“技適なし”を回避した
かつての“マイコン”を思わせるラズパイ一体型キーボード「Raspberry Pi 400」のレビューのファーストインプレッションをお届け。海外製品を日本国内で使うために気を付けるべきポイントも紹介。 - ラズパイ一体型キーボード「Raspberry Pi 400」の性能は? ベンチマークテストで従来モデルと比べた
かつての“マイコン”を思わせるラズパイ一体型キーボード「Raspberry Pi 400」でベンチマークテストを実施。その実力とは? - ラズパイで気温と湿度を測定、LINEで通知を受け取る 〜前編〜
今回は温湿度センサーモジュールとラズパイを組み合わせ、LINEと連携させる方法を紹介します。 - ラズパイを無線LANルーター化する 〜アクセスポイント編〜
家庭内で無線LANルータを使っている人は多いかと思います。今回はそのルーター機能をラズパイに持たせて、ラズパイを使った無線LANルーターの構築方法についてご紹介します。 - 本格的な撮影が楽しめる公式カメラモジュール「Raspberry Pi High Quality Camera」を試す
小さなマイクロコンピュータ「Raspberry Pi」(通称ラズパイ)で作る、自分だけのガジェット。Raspberry Pi公式のカメラとして本格的な撮影が楽しめる「Raspberry Pi High Quality Camera」を紹介します。 - ラズパイで新型コロナウイルス解析に参加する 〜Ubuntu Serverの構築編〜
小さなマイクロコンピュータ「Raspberry Pi」(通称ラズパイ)で作る、自分だけのガジェット。今回はラズパイで。
Copyright © ITmedia, Inc. All Rights Reserved.