尝试读取和转换一个NTC10k B=3950传感器与AD/DA PCF8591转换器使用Raspberry使用python。如图所示(除了AD转换器之外,无法为我的PCF8591找到一条线路):配线
使用以下python代码:
[12:45:03] openhabian@openHABianPi:~$ cat read_pcf8591.py
#!/usr/bin/env python
import math
from smbus import SMBus
bus = SMBus(1)
print("Read the A/D")
print("Control C to stop")
bus.write_byte(0x48, 0) #set control register to channel
last_reading =-1
while(0 == 0):
reading = bus.read_byte(0x48)
if(abs(last_reading - reading) >2):
milivolts = reading*(3300/1024)
degC = (milivolts - 500) / 10
print("Temp: " + str(degC) + " Reading : " + str(reading) + " milivolts: " + str(milivolts))
last_reading = reading这给了我以下结果(我用手加热传感器):
[12:43:23] openhabian@openHABianPi:~$ ./read_pcf8591.py
Read the A/D
Control C to stop
Temp: -10 Reading : 134 milivolts: 402
Temp: -9 Reading : 137 milivolts: 411
Temp: -10 Reading : 134 milivolts: 402
Temp: -11 Reading : 131 milivolts: 393
Temp: -12 Reading : 128 milivolts: 384显然,转换为摄氏是错误的,我如何才能适当地转换为摄氏?读过Steinhart公式,但不知道(我的知识也有限,我是初学者)如何使用.也有一些医生指向校准,同样也不知道.如果有人能帮我或指出正确的方向,我将非常感激。
谢谢!诚挚的问候,
发布于 2017-10-01 08:52:49
这里的数学并不简单--也许值得去寻找是否有人已经做过,并给出了一个形式为"T=blah(V)“的方程,其中T是你想要的温度,V是你测量的电压。如果它存在的话,它将是一个讨厌的方程,因为你所拥有的电位除法器在电阻和电压之间建立了一个非线性关系,而热敏电阻在温度和电阻之间有一个对数关系。你可以用欧姆定律写出一个表达式,用热敏电阻给出ADC输入电压,你可以用Steinhar表达式得到热敏电阻。因此,很容易在第一个中替换第二个,得到“V=blah(T)”形式的(丑陋的)表达式;但是您想要"T=blah(V)“
如果我找不到已经做过这件事的人,我会倾向于把V=blah(T)公式输入类似枫树的东西,让计算机代数的魔力给我T=blah(V)版本,如果它存在的话。这可能是一种你可以用铅笔和纸做的计算--但我没有试过,我也不会打赌。
一种更容易的方法,因为您可能需要自己校准系统无论如何,是接受您将需要一个基于测量的解决方案。所以我的方法是把热敏电阻悬挂在一个装有水的小容器里,加热它,同时用温度计和Pi从ADC装置读出的数字来测量真实的温度。我会在我关心的温度范围内做这件事--从零度到100度,从碎冰开始逐渐沸腾是很容易的。最后,你会得到一张与温带有关的表格,每隔一段时间,例如,2摄氏度,到Pi寄存器读数,在整个感兴趣的温度范围内。然后,当Pi寄存器读取与表中的确切点不对应时,您可以编写一些代码,在图表中的附近点之间进行内插(这很少会发生)。根据所要求的精度,有多种方法进行这种插值。
这是一个关于电气工程和数学的问题,你可能会从一个专门研究这些问题的论坛那里得到一个更好的答案--当你把数学整理好的时候,实际的编程是微不足道的。
https://stackoverflow.com/questions/46501748
复制相似问题