前提・実現したいこと
ラズベリーパイと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用の配線例となっています。前図のセンサーの配線と置き換えて頂きたいです。)