モノ創りで国造りを

ハード/ソフト問わず知見をまとめてます

UpBoard使い方まとめ

在庫管理がうっとおしい

モノを色々作っていると、部品の在庫管理が面倒になってきました。
在庫管理は一つ間違うと最終製品の納期遅延につながるし、さらに経理とも絡むので厄介です。
今までは頻繁に個数をチェックしてましたが、部品数が多くなるにつれて時間かかりすぎる。
部品の在庫管理を自動化したい!というモチベーションで、システムを構築することにしました。

在庫管理システムの概要

在庫管理したいモノを大きく分類すると以下のようになります。

重さ\増減 多い(10個以上) 少ない(10個未満)
重い(1g/個以上) A: ネジ、ナット B: Assy品、モジュール品、大きい電子部品
軽い(1g/個未満) C: 汎用の電子部品 D: 用途が限定される電子部品

在庫を自動で管理するために、 Aは重さで個数を管理したいと考えました。
質量計から箱の質量を差し引き、予め入力された1個当たりの質量から自動で個数が算出されるようにします。

その他は、箱に取り付けたスイッチ付きのデバイスで管理したいと考えました。
箱から部品を取り出したら、個数をデクリメントし、箱に部品を入れたら個数をインクリメントします。

データをGoogleスプレッドシートに表示することで、在庫数の確認や発注手配のアラートが出せたりします。
f:id:yuji2yuji:20190625112340p:plain

Rasberry Piより高機能なUpBoard

基板は自作すると一個あたり1,000~1,500円くらいです。
各基板に電源ケーブルを接続するのはイケてないので、電池駆動式にします。
省電力化が重要になります。

各基板のデータを収集しスプレッドシートに抽出する母艦はRaspiで開発するつもりでしたが、
余っていたUpBoardを使う事にしました。

UpBoardは使った事がないので、セットアップ含めて使い方を以下にまとめていきます。

UpBoardのセットアップ

まずはISOを書き込む必要がありますが、とりあえずubilinuxを使用します。
ubilinuxは組み込みLinux用のディストリビューションです。
これを使っておけば、UpBoardのGPIOが簡単に使用可能です。
注)そこそこなメモリがあるので、Ubuntuも使えますが、
GPIOを簡単に使うためには別途カーネルを差し換える必要があるので面倒

1: emutexのHPからubilinuxをダウンロード
2: Rufusをダウンロード
3: RufusでUSBにイメージを書き込む
設定は以下の通り。
f:id:yuji2yuji:20190625113748p:plain

4: USBと優先のキーボードとHDMIをUpBoardに接続する
5: UpBoardに電源を接続する
6: UpBoardが起動するので、ubilinux installer UEFI CD (interactive)を選択する(上から二番目) 7: インストール完了したら、電源抜いて再起動する
8:パスワードを聞かれるので"ubilinux"と入力し起動する。

これで使用できるようになりました。

とりあえずLチカ

GPIOを使えるように以下をターミナルに打ち込みます。

$ sudo apt update  
$ sudo apt upgrade
$ sudo apt install python-rpi.gpio

スクリプトscript.pyを実行する場合は以下のコマンドを打ちます。

$ sudo python script.py

UpBoardのピンアサインはラズパイと互換性があります。
ラズパイのピンアサインは以下の通りです。
f:id:yuji2yuji:20190625131019p:plain
1ピンの位置は基板上の▽マークで記載されています。

GPIOでLチカするために、以下のスクリプトを記載します。
こちらを参考にしました。

import RPi.GPIO as GPIO
import time

LED1=14
LED2=15
GPIO.setmode(GPIO.BCM)
GPIO.setup(LED1, GPIO.OUT)
GPIO.setup(LED2, GPIO.OUT)

flag = 1
while True:
    GPIO.output(LED1, flag)
    GPIO.output(LED2, flag ^ 1)
    flag = flag ^ 1
    time.sleep(1)

14ピンをLED1という名前に割り当てます。
15ピンをLED2という名前に割り当てます。
GPIO.setmode(GPIO.BCM)で役割ピン番号モードに設定します(上図のLinux GPIOの番号を使用する)。
* 基板のピン番号に設定したい場合はGPIO.setmode(GPIO.BOARD)とします。
GPIO.setup(LED1, GPIO.OUT)でLED1をGPIOの出力として使用する設定にします。
GPIO.setup(LED2, GPIO.OUT)でLED2をGPIOの出力として使用する設定にします。

while True:で以下を繰り返すようにします。
1: GPIO.output(LED1, flag)でLED1の出力をflag(1で出力H、0で出力L)にします。
2: GPIO.output(LED2, flag ^ 1)でLED2の出力をflagの反転にします。つまりLED1の逆になります。
3: flag = flag ^1 でflagを反転させます。
4: time.sleep(1)で1秒間待ちます。

これで「LED1が点灯/LED2が消灯」=> 「LED2が点灯/LED1が消灯」を
1秒ごとに繰り返すようになります。

UpBoardとGPIOの使い方まで理解できました。
次はUARTとI2Cを使ってみようと思います。