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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Raspberry Pi

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

Python

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

解決済

Raspberry Piで測距センサー(HC-SR04)で距離を計測すると測定結果(距離)が安定しない

skmt33
skmt33

総合スコア8

Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Raspberry Pi

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

Python

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

3回答

0評価

0クリップ

2391閲覧

投稿2020/09/27 07:39

前提・実現したいこと

Raspberry Piで測距センサー(HC-SR04)で距離を計測するプログラムを書いています。
距離をコンソールに表示させるとともに、距離に応じて3つのLEDがそれぞれ点灯するようにしたいです。
具体的には、障害物との距離が50cm未満の時はLED1が点灯し、50cm以上100cm未満の時LED2が点灯し、100cm以上の時はLED3が点灯するようにしたいです。

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

60cmくらいの距離に障害物を置いて、Raspberry Piを起動すると、しばらく(30秒程)は60cmだったり150cmだったりと表示され、それにともないLED2が点灯したりLED3が点灯したりと安定しません。(LED1が点灯することはほとんどありません)
30秒をすぎる頃から安定してLED2のみが点灯するようになります。

想定でも結構ですので原因や対処法を教えていただけませんか?
当方距離センサーに関してはあまり詳しくありません。
今作成中のプログラムは以下です。こちらのサイトを参考にしました。

温度センサーがないので(使用しないので)下記のget_distance関数のtempはデフォルトの15で計算されています。

該当のソースコード

import RPi.GPIO as GPIO import time def pulse_in(pin, value=GPIO.HIGH, timeout=1.0): start_time = time.time() not_value = (not value) # 前のパルスが終了するのを待つ while GPIO.input(pin) == value: if time.time() - start_time > timeout: return 0 # パルスが始まるのを待つ while GPIO.input(pin) == not_value: if time.time() - start_time > timeout: return 0 # パルス開始時刻を記録 start = time.time() # パルスが終了するのを待つ while GPIO.input(pin) == value: if time.time() - start_time > timeout: return 0 # パルス終了時刻を記録 end = time.time() return end - start def get_distance(trig, echo, temp=15): # 出力を初期化 GPIO.output(trig, GPIO.LOW) time.sleep(0.3) # 出力(10us以上待つ) GPIO.output(trig, GPIO.HIGH) time.sleep(0.000011) # 出力停止 GPIO.output(trig, GPIO.LOW) # echo からパルスを取得 dur = pulse_in(echo, GPIO.HIGH, 1.0) # ( パルス時間 x 331.50 + 0.61 * 温度 ) x (単位をcmに変換) x 往復 return dur * (331.50 + 0.61 * temp) * 100 / 2 if __name__ == "__main__": GPIO_TRIG = 21 GPIO_ECHO = 20 OUT01= 17 OUT02 = 13 OUT03 = 23 GPIO.setmode(GPIO.BCM) GPIO.setup(GPIO_TRIG, GPIO.OUT) GPIO.setup(GPIO_ECHO, GPIO.IN) GPIO.setup(OUT01, GPIO.OUT) GPIO.setup(OUT02, GPIO.OUT) GPIO.setup(OUT03, GPIO.OUT) try: while True: kyori = round(get_distance(GPIO_TRIG, GPIO_ECHO)) if kyori < 50: print("50cm未満 : 距離:{0} cm".format(kyori)) GPIO.output(OUT01, GPIO.HIGH) GPIO.output(OUT02, GPIO.LOW) GPIO.output(OUT03, GPIO.LOW) elif 50 <= kyori < 100: print("50cm以上100cm未満 : 距離:{0} cm".format(kyori)) GPIO.output(OUT01, GPIO.LOW) GPIO.output(OUT02, GPIO.HIGH) GPIO.output(OUT03, GPIO.LOW) elif 100 <= kyori: print("100cm以上 : 距離:{0} cm".format(kyori)) GPIO.output(OUT01, GPIO.LOW) GPIO.output(OUT02, GPIO.LOW) GPIO.output(OUT03, GPIO.HIGH) time.sleep(0.01) except KeyboardInterrupt: pass GPIO.cleanup()

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

Raspberry Pi 3 model B
raspbian 9.11
Python 3.5.3

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Raspberry Pi

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

Python

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