年甲斐もなく疑問続きの今日この頃です。今回疑問は、Jetson NanoのGPIO入力の件。8月の投稿でJetson NanoのGPIO出力、ラズパイのGPIOに似せてあって簡単に使えて嬉しい、などと書いておりました。当然、GPIO入力など以下同文、と思っていたらハマりました。これまた8月の別の投稿でラズパイに接続してみたPIRセンサ(人感センサ)をJetson Nanoに繋ぎ変えてみようとした時です。
※「トホホな疑問」投稿順Indexはこちら
一応、計画としては、PIRセンサの「人を検出した」という信号を割り込みで受けて、何か動かそうというのであります。とりあえず、ハードがちゃんと動くかどうか、単なるGPIO入力として読んでみることにいたしました。GPIO読むだけです。結線さえ間違えずに接続すれば問題ない筈。以前の投稿見ていただければいろいろ書いてますが、ニッセラ製のPIRセンサ、電源、グラウンド以外に信号線は1本だけ、デジタル、ロウアクティブ、
オープンドレイン、ウイークプルアップ(47kΩ)つき
です。電源電圧は3-5V対応ですが、SoC側が3.3V系IOなので、3.3V電源で使用。ラズパイのGPIO端子に接続すれば、人を検知しないときはハイ、人を検知すればロウが返ります。まったく問題ない。
これをJetson Nanoに接続し、
/opt/nvidia/jetson-gpio/samples
の中のプログラム simple_input.py で読み取ることにいたしました。このプログラム、ボードピン12(ラズパイ互換のピン番号18)を入力に設定し、その値を毎秒1回読み取り続け、変化があったら報告する、というだけのもの。さっそくピン番号12(Jetson Nanoにはちゃんとピン番号が印刷されているので間違いますまい。なお、印刷されているのはラズパイ互換番号ではなく、Jetson Nano固有の方)に接続して動かしてみます。
ロウに張り付いたまま、動きませぬ
おかしいので、変化に関わらず毎秒出力とした上で、ピンも40番に換えてみました。修正したプログラムの一部
しかし、駄目です。ロウべったり。もしかするとピン違い?40番ピン(ラズパイ互換番号21)に確実にハイになる信号(3V3)を乱暴にもダイレクトに接続してみると
ハイ
になります。センサ出力に接続するとロウ。人はいないのにロウ。これは、いけません。しかたがないので、信号をオシロで眺めることにいたしました。
ロウです。しかし、人がいる(実際には手をセンサの前にかざしている)ときのロウと、人がいない時のロウのレベルが微妙に違います。コンマ数Vくらいですが、信号がペコペコしている。たまたま、I2Cバスの実験用のプルアップがボードに実装されていたので、これをつかってセンサの信号をプルアップしてみました。人が居ない時のレベルが1Vくらいまで上がりました。
- センサ内蔵のプルアップ(47kΩ)でコンマ3Vくらい
- それに10kΩのプルアップを追加すると1Vくらい
これは、入力設定にしてもハイ・インピーダンスとか、ウイーク・プルアップとかになるわけではなくて、Jetson NanoのIO端子には、数kΩ相当のプル・ダウンついているんじゃないか、と思いいたりました(詳しいことは次回をご参照くだされ)。
とりあえず、空中に2kΩのプルアップを設置!その様子がこちら、
そうして、センサの前にかざした手を引っ込めました。その様子がこちら、
ロウであった信号が、ちゃんとハイに戻るようになりました。オシロで眺めていても、レベルが復活しとります。なんだ、プルアップ抵抗の値が小さすぎたんかいな。Jetson NanoのSoCのデータシートのピンの仕様も読まずにやっておるから、こういうことになるのね。
こんどちゃんとデータシート読みましょ。