パトライトをArduino + Firmata + Pythonで制御してみた
背景
工場などの装置で「パソコン <-> 機器への信号入出力」をPLCやシーケンサを中継器として実現しようとする場面があり、その構成であればArduino+Firmataで十分だと思うので、パトライトの制御をArduino+Firmataで行ってみました。
パトライトとは工場などで使われている信号灯です。 Arduinoとはプログラムを書き込んで動作するマイコンを搭載した装置です。 Firmataとは、Arduinoに書き込むことでシリアル通信でパソコンからArduinoのピンの状態を読み取ったり制御したりできる仕組みです。
なお、パトライトにはUSB接続で使えるものもあるため、PCと連携する用途ならそれを利用するのが良いと思います。 今回はPCからの信号出力の例として、あえて12Vで駆動するパトライトを利用しました。
使ったもの
- パソコン
Pythonの3系とArduino IDEをインストールしてください。 - Arduino Nano (互換機)
- mini USBケーブル
Arduino NanoをPCに接続するために、microではなくminiのUSBケーブルが必要です。 - ブレッドボード
- ジャンパワイヤ
- n-ch MOSFET 3個
記事では手元にあったMOSFETを使いましたが、パトライトの電流量は100mA前後なので、容量が200mAのmosfetでも動かせます。 - 10kΩ抵抗 3本
紹介しているリンクの抵抗は100本入りなので、1パックあれば良いです。 - 12V電源
- DCジャックDIP化キット
- パトライト LR5-301型 ポール取付+円形ブラケット・キャブタイヤケーブル+点灯・ブザー無し(PJN)
棒なしの背が低いのが良ければ「直付け・キャブタイヤケーブル+点灯・ブザー無し(WJN)」を買うのが良いと思います。 - ワイヤストリッパー、はんだ、はんだごて
パトライトの信号線の導電部をむき出すのに利用します。
回路の組み立て
パトライトは12Vで駆動するため、Arduinoだけでは制御できません。 そのためMOSFETでパトライトの点灯と消灯を制御できる回路を作り、そのMOSFETをArduinoからの信号で制御することで、Arduinoで点灯と消灯を制御できるようにしました。

組み立てました。

パトライトの信号線は、「赤、緑、橙、黄、灰」の5本をワイヤストリッパーで被覆線を取り、より線がバラけないようにはんだでまとめました。
パトライトと電源とUSBケーブルを繋ぎました。
ArduinoにFirmataを書き込み
Arduino NanoにFirmataのプログラムを書き込みます。
Arduino IDEで ファイル -> スケッチ例 -> Firmata -> StandardFirmata を選んでFirmataのプログラムを開きます。
Arduino NanoをPCに接続します。 (Windowsに始めて接続する場合は、ドライバがダウンロードされるまで数分待ってください。)
Arduino Nanoが接続されたポートを指定し、書き込みを行います。
シリアルポートの名前は後ほど使うのでメモしておきましょう。
設定が出来たら左上の書き込みボタンで書き込みましょう。成功すれば画像下部のように”~完了しました”と出ます。
プログラムを書き込めればPythonからシリアル通信で制御できるArduinoになります。
パソコンからPythonでパトライトを制御
Firmataを制御するのに便利なライブラリがあるので、それを利用します。 Pythonのコンソールを開き、下記のコマンドを実行するとライブラリをインストールできます。
pip install pyfirmata
プログラム
import pyfirmata, time pin1 = 4#赤 pin2 = 5#黄 pin3 = 6#緑 port = 'hogehoge' board = pyfirmata.Arduino(port) i = 0 while i == 0: board.digital[pin1].write(1) time.sleep(1) board.digital[pin2].write(1) time.sleep(1) board.digital[pin3].write(1) time.sleep(1) board.digital[pin1].write(0) board.digital[pin2].write(0) board.digital[pin3].write(0) time.sleep(1)
このプログラムを使う場合はプログラム上記の
port = 'hogehoge'
hogehogeの部分を先ほどメモしておいたシリアルポートの名前に変更してください。
単純ではありますが、実行するとこんな感じになります。
またPWMを試しに使ってみました。
import pyfirmata import time port = ('hogehoge') board = pyfirmata.Arduino(port) it = pyfirmata.util.Iterator(board) it.start() pin1 = board.get_pin('d:5:p') pin2 = board.get_pin('d:6:p') for i in range(100): pwm_num = i * 0.01 pin1.write(pwm_num) time.sleep(0.05) for i in range(100): pwm_num = i * 0.01 pin2.write(pwm_num) time.sleep(0.05)
赤に使っている4番ピンはPWM制御できないので今回は光らせませんでした。こんな感じです。
参考にさせて頂いたサイトの紹介
まとめ
Arduino + Firmata + Pythonで、パソコンからパトライトを制御できました。 別の装置をパソコンから制御したい場合は、Arduinoで制御できる回路を組めば記事の内容を適用できます。 PLC+パソコンで制御している部分を、Arduino+Firmata+Pythonで置き換えてみるのはいかがでしょう?
コメント
コメントを投稿