首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法从ESP8266/NodeMCU上的VMA320热敏电阻获得准确的温度读数

无法从ESP8266/NodeMCU上的VMA320热敏电阻获得准确的温度读数
EN

Stack Overflow用户
提问于 2018-07-29 14:53:59
回答 1查看 330关注 0票数 0

前几天,我心血来潮在电子商店买了几个VMA320热敏电阻,完全不知道自己会陷入什么境地。我已经这样做好几天了,我只是想不出如何把这个东西发送给我的数据转换成准确的温度读数。我已经阅读了几个指南,并尝试直接从网上使用几个草图,但我总是得到相同的结果。在一个大约70-72°F的房间里,我读到了大约40°F (带有“上拉”配置的代码,这是我的热敏电阻),或者大约150°F (在下拉配置中)。来自模拟引脚的原始数据保持在750左右不变,这让我相信问题一定是我使用的公式(都基于Steinhart-Hart方程)。

该热敏电阻的设计电压为5V,内置10k欧姆电阻。我从我的ESP8266的VIN引脚中拿到了5V的温度读数,并插上了微型USB (虽然我已经测量过了,实际上大约是4.35V),从而得到了上述温度读数。我也试着给热敏电阻供电,而不是用一个12V的直流适配器+一个恰好调到5V的可调降压转换器,但由于未知的原因,这给了我非常不一致的读数。我想我可能是从降压转换器给它送来了太多的电压(因为用万用表测试它需要额外的电线有更多的电压降?),所以我试着在读取串行监视器的同时慢慢地调低电压,看看我是否能把它调整成一个正常的读数--不走运。我已经对热敏电阻施加了一些温和的热,并观察到温度读数如预期的那样尖峰,所以我不认为组件有故障。

我几乎要放弃这个项目了。我对数学不是很在行,对电子学也是个新手,所以老实说,我真的不理解我在代码中输入的公式。我是不是漏掉了什么明显的东西?我是否需要调整公式以考虑4.35而不是5V,如果需要,如何调整?有没有可能我使用的B系数和/或标称温度的变量是错误的,如果是这样,我如何找到正确的值?该组件的用户手册非常稀疏,所以我唯一确定的是它使用了10k欧姆电阻和上拉配置(无论这意味着什么)。

代码语言:javascript
运行
复制
//---------------
byte NTCPin = A0;
#define SERIESRESISTOR 10000
#define NOMINAL_RESISTANCE 10000
#define NOMINAL_TEMPERATURE 25
#define BCOEFFICIENT 3950

void setup()
{
    Serial.begin(115200);
}

void loop()
{
    float ADCvalue;
    float Resistance;
    ADCvalue = analogRead(NTCPin);
    Serial.print("Analog value ");
    Serial.print(ADCvalue);
    Serial.print(" = ");
    //convert value to resistance
    Resistance = (1023 / ADCvalue) - 1;
    Resistance = SERIESRESISTOR / Resistance;
    Serial.print(Resistance);
    Serial.println(" Ohm");

    float steinhart;
    steinhart = Resistance / NOMINAL_RESISTANCE; // (R/Ro)
    steinhart = log(steinhart); // ln(R/Ro)
    steinhart /= BCOEFFICIENT; // 1/B * ln(R/Ro)
    steinhart += 1.0 / (NOMINAL_TEMPERATURE + 273.15); // + (1/To)
    steinhart = 1.0 / steinhart; // Invert
    steinhart -= 273.15; // convert to C
    steinhart = steinhart * 1.8 + 32; // convert to F

    Serial.print("Temperature ");
    Serial.print(steinhart);
    Serial.println("°F");
    delay(1000);
}

上面的代码(以及我找到的所有其他示例草图)使用Steinhart-Hart方程。如果我理解正确的话,它最终要做的是计算一个已知值的电阻(10k欧姆)和热敏电阻(根据温度波动)之间的电阻差,通过从返回的电压推断出来,这就是ADC值所代表的(从0到1023)。我认为。“如果我理解正确”是一个很大的假设,哈哈。最后几条线只是将计算出的电阻换算成开尔文,然后是摄氏度,然后是华氏度。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-29 15:40:11

ADC将输入电压与参考电压进行比较,并在其输出范围内输出相应的值。简单芯片上的参考电压通常是电源电压,在许多芯片上,adc都有自己的参考电压,这是需要注意的。

在您的情况下,ESP8266看起来是3.3V芯片,因此您应该将VMA320上的5V连接到ESP8266上的3.3V

VMA320只是与热敏电阻和参考电阻形成一个电阻分频器,因此实际的电源电压并不重要,它在3.3V电压下也能正常工作

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51577975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档