RaspberryPiでMoistureSenser(土壌水分計)

MoistureSenser(土壌水分計) を使ってみる

1.ADコンバータはMCP3028の10ビットと12ビット

2.ADコンバータの接続
 16vxx  —- 3.3v
 15VR   —- 3.3V
 14GND— GND
 13CLK —- SCLK
 12Dout—  MSO
 11Din  —  MSI
 10CS  —- CE0
  9DGND — GND

3.MoistureSenserの接続
 赤 3.3V
 黒 GND
 青 CH0

4.データの校正
 完全水没で
     3.3Vで                      5Vで 
 12ビット 2496 2V前後   4095 3.299V
 10ビット  613  1.97V    1023 3.299

メーカーのHPを見ると Arduinoの例で内蔵ADが10ビットだから

 5vで
 0から300  乾燥
 300から700 標準
 700から950 水びたし

 校正結果
 10ビットで使用して
 上記を採用

5.ソースコードは

MP3208msenser10.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#sudo apt-get install python-spidev
import time
import sys
import spidev

spi = spidev.SpiDev()
spi.open(0,0)


def readadc(adcnum):
    r = spi.xfer2([1, 8 + adcnum << 4, 0])
    adcout = ((r[1] & 3) << 8) + r[2]
    return adcout

def readadc12(adcnum):
    if adcnum > 7 or adcnum < 0:    
        return -1
    r = spi.xfer2([4 | 2 | (adcnum >> 2), (adcnum & 3) << 6, 0])
    adcout = ((r[1] & 15) << 8) + r[2]
    return adcout


def convertVolts(data):
    volts = (data * 3.3) / 1023
    #volts = round(volts,4)
    return volts

def convertVolts12(data):
    volts = (data * 3.3) / 4095
    #volts = round(volts,4)
    return volts


if __name__ == '__main__':
    try:
        while True:
            data = readadc(0)  #12ビット readadc12(0)
            print("adc10bit  : {:8.5f} ".format(data))
            volts =convertVolts(data)  #12ビット convertVolts12(0)
            print("adc10volt  : {:8.5f} ".format(volts))

            time.sleep(3)
    except KeyboardInterrupt:
        spi.close()
        sys.exit(0)
カテゴリー iot