如何通过 MCP3008 将 E-201C pH 传感器与树莓派连接起来

时间:2021-01-22 15:13:54

标签: python raspberry-pi spi adc

我正在尝试使用 E-201C Blue Seed Studio pH 传感器测量液体的 pH 值。 我按照adafruit的tutorial通过MCP3008将传感器连接到pi 我还尝试了另一个 tutorial 并且得到了不同的值。 我是将模拟设备连接到树莓派的新手,我对电压的 pH 转换感到困惑。我查看了种子工作室的官方 wiki 页面,还发现一些评论提到我应该编写自己的脚本来与 raspberry pi 交互。有很多教程可用于将 mcp3008 与 pi 连接,但没有通过 ADC 将 pH 传感器与 pi 连接的教程。如果有人帮助我,我会感觉很好。

我还想连接 TDS 传感器,现在我只是连接了 pH 传感器以执行程序。

Source 1

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>Penalty</title>
</head>

<body>
    <form>
        <label>Fine:</label>
        <input type="text" id="speed" size="3">
        <input type="button" value="Submit" onclick="sSubmit()">
    </form>
    <p id="answer"></p>
    <script type="text/javascript">

        function sSubmit() {
            var speed = parseInt(document.getElementById("speed").value);

            var result;

            if (speed <= 60) {
                result = " No fine";
            } else if (speed <= 71) {
                result = "Fine is 100€";
            } else if (speed <= 75) {
                result = "Fine is 170€";
            } else if (speed <= 80) {
                result = "Fine is 200€";
            } else {
                result = "Day-fine ";
            }

            document.getElementById("answer").innerHTML = "<p>" + result + "</p>";
        }

    </script>
</body>

</html>

输出:

# Importing modules
import spidev # To communicate with SPI devices
from time import sleep
import datetime

# To add delay
# Start SPI connection
spi = spidev.SpiDev() # Created an object
spi.open(0,0) 
# Read MCP3008 data
def analogInput(channel):
  spi.max_speed_hz = 1350000
  adc = spi.xfer2([1,(8+channel)<<4,0])
  data = ((adc[1]&3) << 8) + adc[2]
  return data

# Below function will convert data to voltage
def Volts(data):
  volts = (data * 3.3) / float(1023)
  volts = round(volts, 2) # Round off to 2 decimal places
  return volts

while True:
  pH_output = analogInput(0) # Reading from CH0
  pH_volts = Volts(pH_output)
  tds_output = analogInput(1)
  tds_volts = Volts(tds_output)
  print(f"pH : {pH_output} - {pH_volts}, tds : {tds_output} - {tds_volts}")
  sleep(5)

Source 2

pH : 1361129467683753853853498429727072845824 - 4.39074021833469e+36 V, tds : 0 - 0.0 V
pH : 340282366920938463463374607431768211456 - 1.0976850545836725e+36 V, tds : 0 - 0.0 V
pH : 340282366920938463463374607431768211456 - 1.0976850545836725e+36 V, tds : 158456325028528675187087900672 - 5.1114943557589895e+26 V
pH : 2722258935367507707706996859454145691648 - 8.78148043666938e+36 V, tds : 0 - 0.0 V
pH : 0 - 0.0 V, tds : 0 - 0.0 V
pH : 680564733841876926926749214863536422912 - 2.195370109167345e+36 V, tds : 19342813113834066795298816 - 6.23961713349486e+22 V
pH : 85070591730234615865843651857942052864 - 2.744212636459181e+35 V, tds : 0 - 0.0 V
pH : 340282366920938463463374607431768211456 - 1.0976850545836725e+36 V, tds : 2535301200456458802993406410752 - 8.178390969214383e+27 V
pH : 680564733841876926926749214863536422912 - 2.195370109167345e+36 V, tds : 0 - 0.0 V
pH : 2658455991569831745807614120560689152 - 8.575664488934941e+33 V, tds : 0 - 0.0 V
pH : 10633823966279326983230456482242756608 - 3.4302657955739764e+34 V, tds : 4951760157141521099596496896 - 1.5973419861746842e+25 V
pH : 1361129467683753853853498429727072845824 - 4.39074021833469e+36 V, tds : 0 - 0.0 V
pH : 85070591730234615865843651857942052864 - 2.744212636459181e+35 V, tds : 4096 - 13.21 V
pH : 340282366920938463463374607431768211456 - 1.0976850545836725e+36 V, tds : 0 - 0.0 V
pH : 42535295865117307932921825928971026432 - 1.3721063182295906e+35 V, tds : 0 - 0.0 V

输出:

import time
import busio
import digitalio
import board
import adafruit_mcp3xxx.mcp3008 as MCP
from adafruit_mcp3xxx.analog_in import AnalogIn
 
# create the spi bus
spi = busio.SPI(clock=board.SCK, MISO=board.MISO, MOSI=board.MOSI)
 
# create the cs (chip select)
cs = digitalio.DigitalInOut(board.D22)
 
# create the mcp object
mcp = MCP.MCP3008(spi, cs)
 
# create an analog input channel on pin 0 & pin 1
chan0 = AnalogIn(mcp, MCP.P0)
chan1 = AnalogIn(mcp, MCP.P1)
while True:
    print(f"pH : {chan0.value} - {chan0.voltage} V, tds : {chan1.value} - {chan1.voltage} V")
    sleep(5)

0 个答案:

没有答案