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

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

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

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

Q&A

2回答

734閲覧

ラズベリーパイとMQ8水素センサーの接続を教えてください

hydrogen

総合スコア0

Raspberry Pi

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

0グッド

0クリップ

投稿2020/11/08 08:37

編集2020/11/08 09:25

前提・実現したいこと

ラズベリーパイとMQ8を接続し、大気中の水素濃度を検出するシステムを作っています。

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

実行したところ、ADコンバータから読み取った値は0を示したままです。
なぜ0を表示し続けるのか教えて頂きたいです。

該当のソースコード

使用したコードは以下の通りです。
なお、ADコンバータはMCP3208を使用し、センサーはこのような形のものを使用しています。http://wiring.org.co/learning/basics/airqualitymq135.html
また、配線は以下の通りです。
イメージ説明

ソースコード import RPi.GPIO as GPIO from time import sleep import math def readadc(adcnum,clockpin,mosipin,misopin,cspin): if((adcnum>7)or(adcnum<0)): return -1 GPIO.output(cspin,GPIO.HIGH) GPIO.output(clockpin,GPIO.LOW) GPIO.output(cspin,GPIO.LOW) commandout=adcnum commandout |= 0x18 commandout <<= 3 for i in range(5): if (commandout & 0x80): GPIO.output(mosipin,GPIO.HIGH) else: GPIO.output(mosipin,GPIO.LOW) commandout <<= 1 GPIO.output(clockpin,GPIO.HIGH) GPIO.output(clockpin,GPIO.LOW) adcout=0 for i in range(13): GPIO.output(clockpin,GPIO.HIGH) GPIO.output(clockpin,GPIO.LOW) adcout <<= 1 if i>0 and GPIO.input(misopin)==GPIO.HIGH: adcout |= 0x1 GPIO.output(cspin,GPIO.HIGH) return adcout GPIO.setwarnings(GPIO.LOW) GPIO.cleanup() GPIO.setmode(GPIO.BCM) SPICLK=11 SPIMISO=9 SPIMOSI=10 SPICS=8 GPIO.setup(SPIMOSI,GPIO.OUT) GPIO.setup(SPIMISO,GPIO.IN) GPIO.setup(SPICLK,GPIO.OUT) GPIO.setup(SPICS,GPIO.OUT) try: while True: Value = readadc(0,SPICLK,SPIMOSI,SPIMISO,SPICS) adcV=3.3 Volt = Value*adcV/4095.0 ppm = math.e**(1/0.5884*(Volt+0.9206)) print("value:",Value,"Volt:",Volt,"ppm",ppm) sleep(1.0) except KeyboardInterrupt: pass GPIO.cleanup()

試したこと

このセンサーをarduinoで動作させたところ正常に動作したので、センサーに問題は無いと考えています。

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

センサーの配線について追記します。(分かりにくくて申し訳ないです。)
赤色の銅線を5Vに、黒色の銅線をGNDに、黄色の銅線部分をADコンバータのch0部分に接続しています。(画像はarduino用の配線例となっています。前図のセンサーの配線と置き換えて頂きたいです。)
イメージ説明

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

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

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

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

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

coco_bauer

2020/11/08 09:36

MCP3208の1ピンと水素センサーを接続している配線を外して、MCP3208の1ピンをraspberry piの1ピン(3.3V)に接続すると、どうなりますか? 0が表示され続けるなら、MCP3208の辺りの配線に問題があると思われます。
hydrogen

2020/11/08 09:49

現在確認できる状態ではないので、後日確認後にご報告させていただいてもよろしいですか?またその際に新たに質問などさせていただいても大丈夫でしょうか?
guest

回答2

0

データシートを見ると、センサの電源は5Vである必要があります。ただ、それで0になることもないと思います。

配線かなにか間違っているのでしょう。
少なくとも、その結線図で見る限りデータシートや参照先結線例にある負荷抵抗がありません。(負荷抵抗がないと出力は電源電圧側に張り付きそうなものですが)

センサーではなく、可変抵抗かあるいは固定抵抗で分圧した適当な電圧をADCの入力に入れたらどうなりますか?

センサーの結線も図では不明ですし、ADコンバータは世の中に一種類しかないわけではないのでお使いの品種を明らかにしていただかないと(記載ありました、見落としてました)、質問は情報不足でこれ以上はなんとも言えません。

投稿2020/11/08 09:00

編集2020/11/08 09:03
thkana

総合スコア7659

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

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

hydrogen

2020/11/08 09:29

センサーの配線に関して追記いたしました。適当な電圧をADCの入力に入れることは後日また試してみます。プログラミング自体に問題などはありますでしょうか?
thkana

2020/11/08 09:39

見たところ良さそうです。(追試はしていません) 図の配線が現実と合っているかは大丈夫ですか。大丈夫なはず/大丈夫と思う、ではなくて「絶対間違いはない」と言い切れるまで確認してください。ピンが一つずれていたとか、ICが逆挿しとか、ないですね?
hydrogen

2020/11/08 09:52

現在確認できる状態ではないので、後日確認後ご報告させていただいてもよろしいですか?またその際に新たな質問などさせていただいてもよろしいでしょうか?
guest

0

こういう場合のデバッグ法を書いておきます
MCP3208は、SPIでデータ転送しますので、
クロックのラインとデータのラインをオシロスコープでモニタして、データシート通りのクロックがでて、データが出てるのかをチェックします

  • クロックがでてない

クロックを出すコードをチェックします

  • クロックはでてるがデータは出ない

CSなどのピンのレベル、クロック、データ以外のピンのレベルなどをチェックします

  • クロックもデータもきちんとでている

データ取り込み周りのコードをチェックしましょう

投稿2020/11/08 08:56

y_waiwai

総合スコア87800

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

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

hydrogen

2020/11/08 09:55

現在教えて頂いた方法を実行できる状態でないので、後日確認後にご報告させていただきます。その他プログラミングや配線(配線が分かりにくくて申し訳ないです。)などに問題などはありませんでしょうか?助言いただけると幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問