この記事は、「Seeed UG Advent Calendar 2019」 の21日目です。
#1.はじめに
IoT機器のプロトタイピングに大変便利なGroveですが、工場などで使われる産業(FA)機器用のインターフェースが無かったので、自作してみました。
##動作環境
ここでのハードウェア環境は、以下を想定しています。
- Raspberry Pi 3+
- Raspbian Buster (2019年9月版)
- Python 3.5
~ $ uname -a
Linux RaspberryPi 4.19.75-v7+ #1270 SMP Tue Sep 24 18:45:11 BST 2019 armv7l GNU/Linux
#2.回路の考え方
FA機器は多くの場合、DC24Vの電源が使われています。
これらの機器の基本的な接続方法としては、下記のようになります。(日本・シンク駆動の場合)
この方式に倣って、Arduino、RaspberryPiなどで接続する回路を作ってみました。
これらのマイコンボード類は
取り扱う電圧がDC5Vであったり、DC3.3Vであったりして、直接FA機器を制御することは出来ないので、電圧変換をする必要があります。
また、FA機器は、実際の現場でどのような使われ方をするか分かりません。
物理的な衝撃を受けるだけで無く、電気的な衝撃(短絡、過電流など)を受けることもあります。
そのような場合に、Arduino、RaspberryPiを保護する必要もあります。
ここでは、電圧レベルの変換と電気的な絶縁も兼ねる、簡単なレベルコンバータを作ってみました。
3.信号入力
##プログラム
実行すると、ボタンを押されるごとにコンソールにメッセージが表示されます。
#!/usr/bin/env /usr/bin/python3
# -*- coding: utf-8 -*-
import time
import RPi.GPIO as GPIO
# 制御対象のポート
PORT = 21
def callback_gpio(gpio_pin):
"""
GPIO入力コールバック
"""
# 該当ポートの値を読み込み
ch_val = GPIO.input(gpio_pin)
# ボタンが押されたメッセージ
print(" Callback: GPIO [ %d ch ] > %d" % (gpio_pin, ch_val))
# GPIO初期化
GPIO.setmode(GPIO.BCM)
# ピンを入力設定し、プルアップ抵抗を有効化
GPIO.setup(PORT, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# ボタンを押された(離された)ときのコールバック関数を設定
# ・GPIO.BOTH:立ち上がり/立ち下がりで検知
# ・bouncetime:チャタリングを無視する時間(ms)
GPIO.add_event_detect(PORT, GPIO.BOTH,
callback=callback_gpio, bouncetime=100)
try:
print(" -- GPIO IN Test --")
# 無限ループで待機
while True:
time.sleep(1.0)
except KeyboardInterrupt:
# Ctrl-Cが押されたとき
# コールバック関数を削除
GPIO.remove_event_detect(PORT)
# GPIO解放
GPIO.cleanup()
print("done.")
4.信号出力
##プログラム
実行すると、LEDが10回点滅します。
#!/usr/bin/env /usr/bin/python3
# -*- coding: utf-8 -*-
import time
import RPi.GPIO as GPIO
# 制御対象のポート
PORT = 26
# (複数指定する場合の書き方)
# PORT = [26, 19]
# 点滅間隔(s)
INTERVAL = 0.2
# GPIO初期化
GPIO.setmode(GPIO.BCM)
# ピンを出力設定し、初期は消灯状態にする
GPIO.setup(PORT, GPIO.OUT, initial=GPIO.LOW)
print(" -- GPIO OUT Test --")
# 10回点滅
for i in range(10):
# 点灯
GPIO.output(PORT, GPIO.HIGH)
time.sleep(INTERVAL)
# 消灯
GPIO.output(PORT, GPIO.LOW)
time.sleep(INTERVAL)
# GPIO解放
GPIO.cleanup()
print("done.")
#5.インターフェース・ボード
実際に使えるインターフェース・ボードを作ってみました。
##(1)Raspberry PiのHAT
GitHubに公開しました。(2020/3/29)
プロトタイピングとして使える様に、4入力・4出力を任意のRaspberryPiのピンで制御できるようにしています。
(RaspberryPi側のピンは、QIコネクタで繋ぎ替えが出来ます)
また、(本文では言及していませんが)国内外のFA仕様に使える様に、シンク(NPN)/ソース(PNO)の切替も出来ます。
##(2)Grove規格互換
Grove規格(GPIO)互換のボードを作ってみました。
※12/21時点、まだ公開できてないです、すみません!!
GitHub