質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

IoT

IoT(Internet of Things)とは、インターネットがコンピュータなどの情報・通信機器のネットワークだけでなく、世の中のある様々なモノに接続されて自動認識・自動制御・遠隔計測などの能力を備えることです。「モノのインターネット」と一般的にいわれます。

Q&A

解決済

1回答

1232閲覧

wait_for_motion(), wait_for_no_motion() の使い方が分かりません

Alex_M

総合スコア32

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

IoT

IoT(Internet of Things)とは、インターネットがコンピュータなどの情報・通信機器のネットワークだけでなく、世の中のある様々なモノに接続されて自動認識・自動制御・遠隔計測などの能力を備えることです。「モノのインターネット」と一般的にいわれます。

0グッド

0クリップ

投稿2020/11/17 12:09

前提・実現したいこと

モーションセンサーを用いて、動作を検知したらターミナルにその旨を出力したい。

使用しているもの
・Raspberry Pi ZERO WH
・モーションセンサーHC-SR501

今回の質問では、タイトルの通りプログラム中の

Python

1wait_for_motion() 2wait_for_no_motion()

の動作や使い方をご教授いただきたいです。
試みている内容は参考程度になれば幸いです。

発生している問題・エラーメッセージ

プログラムを実行し、待機状態となります。
センサーの前で手を動かすと、ターミナルに検知したことが出力されます。
ここまでは正しくできているような気がしますが、そのあとセンサーの前で何も動かさない状態でも一定間隔で検知したことが出力され続けます。

(配線等は適切にできているものと思われます。またセンサーは複数個で試し、全て同じ結果です)
→プログラム中のどこかに間違いがあるのでは、と考えました。

該当のソースコード

Python

1from gpiozero import LED 2from gpiozero import MotionSensor 3 4green_led = LED(17) 5pir = MotionSensor(4) 6toggle_pin = 22 7green_led.off() 8counter = 0 9 10def main_loop(): 11 global counter 12 while True: 13 pir.wait_for_motion() 14 print("Motion Detected") 15 green_led.on() 16 counter = counter + 1 17 print(counter) 18 pir.wait_for_no_motion() 19 green_led.off() 20 print("Motion Stopped") 21 22if __name__ == '__main__': 23 main_loop()

試したこと

死ぬほどググりましたが、検索する力と英語力が及ばず目当ての情報にたどり着けませんでした。(リファレンスなど)

補足情報(FW/ツールのバージョンなど)

こちらの動画を参考に(完全再現)しています
version:Python 2.7.16

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thkana

2020/11/19 13:12

リファレンスは https://gpiozero.readthedocs.io/en/stable/api_input.html#motionsensor-d-sun-pir のようですが。 焦電センサの仕様がわかりませんが、出力がオープンコレクタで、VDDにプルアップしてやらないと電位が安定しない、とかいうことはないですか? > 一定間隔で検知したことが出力され続けます その状態で、センサーのOUTに行っている線を引っこ抜いてGNDに繋いだらどうなりますか。
Alex_M

2020/11/20 03:12 編集

リファレンス、ありがとうございます。まだラズパイを始めたばかりで、恥ずかしながらGPIO ZEROのリファレンスの存在を知りませんでした。。。 >その状態で、センサーのOUTに行っている線を引っこ抜いてGNDに繋いだらどうなりますか。 これはセンサーのOUTをセンサーのGNDに繋ぐということでしょうか? 追記:解決いたしました!ありがとうございます!
guest

回答1

0

自己解決

自己解決いたしましたので記述します。

参考にした動画とAmazonに記載されている片式と、私の手元にある片式が異なっておりました。
いくつかの片式があるようで、ピンや連続検知と単発検知のトリガーの部分も多少異なっているようです。
Amazonなどで購入した場合、どのデータシートを見るのか分からない場合があるので、頑張って探すしかないかもしれません。

python

1wait_for_motion(timeout=None) 2#Pause the script until the device is activated, or the timeout is reached. 3 4wait_for_no_motion(timeout=None) 5#Pause the script until the device is deactivated, or the timeout is reached.

↑処理の様子からおそらくそれぞれ検知もしくは非検知の状態を待つ、もしくはタイムアウトを設定する場合はその時間に達するまでこの状態を実行を保持する(?)。ということだと思います。

リファレンスを送っていただいた方、ありがとうございました。

もし同じ部分で悩んでいる方の参考になれば幸いです。

投稿2020/11/20 05:18

Alex_M

総合スコア32

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問