パトライトをArduino + Firmata + Pythonで制御してみた

 

背景

工場などの装置で「パソコン <-> 機器への信号入出力」をPLCやシーケンサを中継器として実現しようとする場面があり、その構成であればArduino+Firmataで十分だと思うので、パトライトの制御をArduino+Firmataで行ってみました。

パトライトとは工場などで使われている信号灯です。 Arduinoとはプログラムを書き込んで動作するマイコンを搭載した装置です。 Firmataとは、Arduinoに書き込むことでシリアル通信でパソコンからArduinoのピンの状態を読み取ったり制御したりできる仕組みです。

なお、パトライトにはUSB接続で使えるものもあるため、PCと連携する用途ならそれを利用するのが良いと思います。 今回はPCからの信号出力の例として、あえて12Vで駆動するパトライトを利用しました。

使ったもの

回路の組み立て

パトライトは12Vで駆動するため、Arduinoだけでは制御できません。 そのためMOSFETパトライトの点灯と消灯を制御できる回路を作り、そのMOSFETArduinoからの信号で制御することで、Arduinoで点灯と消灯を制御できるようにしました。

Arduinoで12V駆動のパトライトを制御するための回路図

組み立てました。

パトライト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制御できないので今回は光らせませんでした。こんな感じです。

参考にさせて頂いたサイトの紹介

org-technology.com

www.codeflow.site

まとめ

Arduino + Firmata + Pythonで、パソコンからパトライトを制御できました。 別の装置をパソコンから制御したい場合は、Arduinoで制御できる回路を組めば記事の内容を適用できます。 PLC+パソコンで制御している部分を、Arduino+Firmata+Pythonで置き換えてみるのはいかがでしょう?

コメント

このブログの人気の投稿

Phaser3 + Typescriptを使ってRPGゲームの基礎を作ろう!その2

M5Stackで、においセンサー(TGS2450)を使ってみる。(LCDに表示編)

Phaser3 + Typescriptを使ってRPGゲームの基礎を作ろう!その1