11
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Seeed UGAdvent Calendar 2019

Day 21

産業(FA)機器のインターフェース

Last updated at Posted at 2019-12-21

この記事は、「Seeed UG Advent Calendar 2019」 の21日目です。

#1.はじめに

IoT機器のプロトタイピングに大変便利なGroveですが、工場などで使われる産業(FA)機器用のインターフェースが無かったので、自作してみました。
P1090484.JPG

##動作環境
ここでのハードウェア環境は、以下を想定しています。

  • 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の電源が使われています。

(左)スイッチ・ランプの例、(右)リレーの例
(左)スイッチ・ランプの例、(右)リレーの例

これらの機器の基本的な接続方法としては、下記のようになります。(日本・シンク駆動の場合)

(左)出力回路、(右)入力回路
a04-11.png

参考:オリエンタルモータ社さんの解説記事

この方式に倣って、Arduino、RaspberryPiなどで接続する回路を作ってみました。

これらのマイコンボード類は
取り扱う電圧がDC5Vであったり、DC3.3Vであったりして、直接FA機器を制御することは出来ないので、電圧変換をする必要があります。

また、FA機器は、実際の現場でどのような使われ方をするか分かりません。
物理的な衝撃を受けるだけで無く、電気的な衝撃(短絡、過電流など)を受けることもあります。
そのような場合に、Arduino、RaspberryPiを保護する必要もあります。

ここでは、電圧レベルの変換と電気的な絶縁も兼ねる、簡単なレベルコンバータを作ってみました。

3.信号入力

##回路図
信号入力回路

##プログラム

実行すると、ボタンを押されるごとにコンソールにメッセージが表示されます。

gpioin.py
#!/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回点滅します。

gpioout.py
#!/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

11
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?