アフィリエイト広告を利用しています

広告

posted by fanblog

Jetson Nano - その11: GPIOでドア開閉を検出する (準備)

○はじめに

どうせJetson Nanoをドア近くに設置する予定なので、ついでにGPIOを使ってドアの開閉を検出する仕組みを入れておきたいと思います。

順番としては、ハードの工作を行い、ソフトウェアではGPIOのコードをインストールします。


○準備

以下のドアの開閉を検出するスイッチを使います。
昔、DAISOに似た様のが販売されていたのすが、最近、全く見なくなりました。
実は今回、リードスイッチとマグネット以外使わないので、一から作っても良い気がします。

LEDライト マグネットスイッチ式 白色LED

新品価格
¥110 から
(2021/2/28 15:09時点)




そのほかに、ハンダゴテ、1kohmの抵抗とかジャンパーなの道具や小さい部品が必要になります。
今まで持ってない方は以下のようなワンセットになっているのを持っていると何かと便利かもしれません。







○手順(工作)
ちなみにこのスイッチの構造は、 ここに 回路図を含めて詳しく書かれています。

1) 購入したスイッチを分解します。

IMG_5873.png


IMG_5874.png



2) リードスイッチ以外の部品を全て半田を使って外します。

IMG_5878.png



3) 1kOhmの抵抗を追加して、以下の回路図になるようにします。
schma.png


もし、今のジャンパーをそのまま使うなら、以下の作業が必要かと思います。
  a) リードスイッチとGNDのショート。
  b) 1kohmを電源の前に付加する。

私はこんな感じになりました。
元々付いてた線が心許ないので、線を付け直しています。
(緑: 電源、オレンジ: GPIO、白: GND)

IMG_5884.png



実は・・・ 上記に行き着くまでに、色々トラブルがあり時間がかかりました。
簡単に言うと、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の状態を確認する制御ですが、割り込みやイベントでの検出もできるようです。






トラックバック

コメント

お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのコメント

×

この広告は30日以上新しい記事の更新がないブログに表示されております。

Mobilize your Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: