○はじめに どうせJetson Nanoをドア近くに設置する予定なので、ついでにGPIOを使ってドアの開閉を検出する仕組みを入れておきたいと思います。
順番としては、ハードの工作を行い、ソフトウェアではGPIOのコードをインストールします。
○準備 以下のドアの開閉を検出するスイッチを使います。
昔、DAISOに似た様のが販売されていたのすが、最近、全く見なくなりました。
実は今回、リードスイッチとマグネット以外使わないので、一から作っても良い気がします。
そのほかに、ハンダゴテ、1kohmの抵抗とかジャンパーなの道具や小さい部品が必要になります。
今まで持ってない方は以下のようなワンセットになっているのを持っていると何かと便利かもしれません。
○手順(工作) ちなみにこのスイッチの構造は、
ここに 回路図を含めて詳しく書かれています。
1) 購入したスイッチを分解します。
2) リードスイッチ以外の部品を全て半田を使って外します。
3) 1kOhmの抵抗を追加して、以下の回路図になるようにします。
もし、今のジャンパーをそのまま使うなら、以下の作業が必要かと思います。
a) リードスイッチとGNDのショート。
b) 1kohmを電源の前に付加する。
私はこんな感じになりました。
元々付いてた線が心許ないので、線を付け直しています。
(緑: 電源、オレンジ: GPIO、白: GND)
実は・・・
上記に行き着くまでに、色々トラブルがあり時間がかかりました。 簡単に言うと、Jetson Nanoチップとピンヘッダの間にレベルシフタがあり、その内部抵抗が作用して、Highに張り付いたり、Lowに張り付いたりと本当に苦労しました。テスタ接続時だけ問題なく動作したりと・・
1) フォーラムでも同じ問題に直面した人がおり、解決方法も
ここ に書かれています。今回、その回路図をそのまま使いました。
2) 同じようにトラブルにあった方が、Jetson Nanoに使用されているレベルシフタについて
こちら に書かれています。
3) フォーラムで同様にGPIOが動作しなくて、Jetson Nanoチップ側の内部抵抗の話が
ここ に書かれています。今回は関係ないですが。。
○手順(SW - GPIO) 次にソフトウェア側の設定になります。
1) JetsonのGPIOのインストール。
ここ に書いてある通りにマニュアルでインストールしていきます。
グループの作成。
sudo groupadd -f -r gpio sudo usermod -a -G gpio your_user_name 以下のコマンドでルールのダウンロードをコピー。
git clone https://github.com/NVIDIA/jetson-gpio.git cd /jetson-gpio sudo cp lib/python/Jetson/GPIO/99-gpio.rules /etc/udev/rules.d/ システムをリブート。
○動作確認 1) Jetson Nanoにスイッチを接続。
ここにあるピンマップ に従って以下のように接続。
1PIN (3.3V) - 電源 6PIN(GND) - GND 7PIN (gpio216) - GPIO 2) sampleプログラム (simple_input.py)を修正。
sample/simple_input.pyを接続したピンの環境に合う様に修正。
Raspberry Piのピン番号ではわかりにくいので、Jetsonボードのピン番号に修正します。
a) import RPi.GPIO as GPIO =>
import Jetson.GPIO as GPIO b) input_pin = 18 =>
input_pin = 7 c) GPIO.setmode(GPIO.BCM) =>
GPIO.setmode(GPIO.BOARD) 3) 実行
python3 simple_input.py ○デモ マグネットを近づけると、こんな感じで反応しているのがわかります。
これをドアに取り付けて、カメラ入力の1フレーム毎にチェックする感じにしようかと思っています。
このサンプルコードは1秒ごとのGPIOの状態を確認する制御ですが、割り込みやイベントでの検出もできるようです。
VIDEO