HaLake Magazine

コワーキングスペースHaLakeの技術情報発信サイト!IoT,AR,VRなど最新技術情報をお届け!

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

背景

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

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

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

使ったもの

回路の組み立て

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

f:id:asukiaaa:20200601154833p:plain
Arduinoで12V駆動のパトライトを制御するための回路図

組み立てました。

f:id:asukiaaa:20200601155702j:plain
パトライトArduinoで制御するための装置

パトライトの信号線は、「赤、緑、橙、黄、灰」の5本をワイヤストリッパーで被覆線を取り、より線がバラけないようにはんだでまとめました。

f:id:asukiaaa:20200602153530j:plain

パトライトと電源とUSBケーブルを繋ぎました。

f:id:asukiaaa:20200602150346j:plain

ArduinoにFirmataを書き込み

Arduino NanoにFirmataのプログラムを書き込みます。

Arduino IDEで ファイル -> スケッチ例 -> Firmata -> StandardFirmata を選んでFirmataのプログラムを開きます。

f:id:mischief_cat:20200628161629p:plain

Arduino NanoをPCに接続します。 (Windowsに始めて接続する場合は、ドライバがダウンロードされるまで数分待ってください。)

Arduino Nanoが接続されたポートを指定し、書き込みを行います。

f:id:mischief_cat:20200628161154p:plain

シリアルポートの名前は後ほど使うのでメモしておきましょう。

f:id:mischief_cat:20200628160938p:plain

設定が出来たら左上の書き込みボタンで書き込みましょう。成功すれば画像下部のように”~完了しました”と出ます。

プログラムを書き込めれば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の部分を先ほどメモしておいたシリアルポートの名前に変更してください。

単純ではありますが、実行するとこんな感じになります。

f:id:mischief_cat:20200628164707g:plain

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

f:id:mischief_cat:20200628231049g:plain

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

org-technology.com

www.codeflow.site

まとめ

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