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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Raspberry Pi

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

Python

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

Q&A

解決済

1回答

3099閲覧

RaspberryPiで超音波センサを制御する時のエラー

退会済みユーザー

退会済みユーザー

総合スコア0

Raspberry Pi

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

Python

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

0グッド

0クリップ

投稿2019/04/15 07:09

前提・実現したいこと

以下の参考記事にしたがって、超音波距離センサ(HC-SR04)をRaspberryPiで使って値を取得しようとしています。
参考記事

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

記事に掲載されている通りにセンサを接続し、コードを書いたのですが、以下のエラーが出てどのように修正すればいいか検討がつきません。

$ python sample.py sample.py:47: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings. GPIO.setup(TRIG_PIN, GPIO.OUT) Traceback (most recent call last): File "sample.py", line 52, in <module> calc_distance(TRIG_PIN, ECHO_PIN, 10, v) File "sample.py", line 32, in calc_distance distance = v * t/2 TypeError: unsupported operand type(s) for *: 'int' and 'NoneType'

該当のソースコード

Python

1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3import RPi.GPIO as GPIO 4import time 5 6#HIGH or LOWの時間測 7def pulseIn(PIN, start=1, end=0): 8 if start == 0: 9 end = 1 10 t_start = 0 11 t_end = 0 12 #ECHO_PINがHIGHである時間を計測 13 while GPIO.input(PIN) == end: 14 t_start = time.time() 15 while GPIO.input(PIN) == start: 16 t_end = time.time() 17 return t_end - t_start 18 19#距離計測 20def calc_distance(TRIG_PIN, ECHO_PIN, num, v=34000): 21 for i in range(num): 22 #TRIGピンを0.3[s]だけLOW 23 GPIO.output(TRIG_PIN, GPIO.LOW) 24 time.sleep(0.3) 25 #TRIGピンを0.00001[s]だけ出力(超音波発車) 26 GPIO.output(TRIG_PIN, True) 27 time.sleep(0.00001) 28 GPIO.output(TRIG_PIN, False) 29 #HIGHの時間計測 30 t = pulseIn(ECHO_PIN) 31 #距離[cm] = 音速[cm/s] * 時間[s]/2 32 distance = v * t/2 33 print(distance, "cm") 34 #ピン設定解除 35 GPIO.cleanup() 36 37#TRIGとECHOのGPIO番号 38TRIG_PIN = 14 39ECHO_PIN = 15 40 41#気温24[℃]の場合の音速[cm/s] 42v = 33150 + 60*24 43 44#ピン番号をGPIOで指定 45GPIO.setmode(GPIO.BCM) 46#TRIG_PINを出力、ECHO_PINを入力 47GPIO.setup(TRIG_PIN, GPIO.OUT) 48GPIO.setup(ECHO_PIN, GPIO.IN) 49GPIO.setwarnings(False) 50 51#距離計測(TRIGピン番号、ECHO_PIN番号、計測回数、音速[cm/s]) 52calc_distance(TRIG_PIN, ECHO_PIN, 10, v)

試したこと

distance = int(v) * int(t/2)

といったようなことも試みましたが、エラーが出ました。

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

Python 2.7.13

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

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

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

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

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

guest

回答1

0

ベストアンサー

pulseIn関数の内容が参考記事とは異なりますね。
t = pulseIn(ECHO_PIN)において関数の引数start1なので戻り値がNoneになっています。
そのためtNoneになり提示エラーが発生しているようです。

投稿2019/04/15 07:23

can110

総合スコア38233

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問