LM358不是LM35

粗心大意

想在我的自动浇花系统上增加一个温度显示功能,就是读取室温然后显示在屏幕上。

然后手头有一堆各种温度传感器。

  • 最常用的LM35
  • 能同时测量温湿度的DHT11
  • 用的比较广的ds18b20

这些用起来都很方便。
但是发现我的Grove Starter Kit Plus 里有一个温度传感器,套件里的东西都是模块化的,带连线,支持插到对应的口上就可以啦,那么就用它啦。

然后用我不带眼镜的近视眼看了一下模块上的芯片,没太看清楚具体细节,但是看到了LM35几个字。
那么就是小case啦, LM35咱用过无数次啦,so easy

然后编码,编译,运行
什么鬼,怎么出来的是250摄氏度,这是室温!!如果硬件没错、程序没错,现在我已经熟了!!

哪里出错了呢,LM35用起来没啥难度啊。
传感器的输出电压与摄氏温度呈线性关系,0℃时输出为0V,每升高1℃,输出电压增加10mv。
因此根据A/D转换读回来的电压,可以轻易计算出环境温度啊?
这么简单的事情,怎么会错??

LM358不是LM35

于是各种查错,最后实在没办法了,看看套件自带的示例程序吧。

const int pinTemp = A1;

// Define the B-value of the thermistor.
// This value is a property of the thermistor used in the Grove - Temperature Sensor,
// and used to convert from the analog value it measures and a temperature value.
const int B = 3975;

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

void loop()
{
    // Get the (raw) value of the temperature sensor.
    int val = analogRead(pinTemp);

    // Determine the current resistance of the thermistor based on the sensor value.
    float resistance = (float)(1023-val)*10000/val;

    // Calculate the temperature based on the resistance value.
    float temperature = 1/(log(resistance/10000)/B+1/298.15)-273.15;

    // Print the temperature to the serial console.
    Serial.println(temperature);

    // Wait one second between measurements.
    delay(1000);
}

怎么这么复杂,还有那个B-value是什么鬼?还有我什么时候用热敏电阻(thermistor)啦?我就用个LM35啊!

等等,让我仔细看看模块。
眼神不行,于是想了个办法,用手机拍照,然后放大看,什么居然是LM358,不是LM35!
这根本不是一个东西呀
LM35是温度传感器
LM358是双运算放大器

模块上还有个米粒大的东西,旁边丝印写着NTC。
原来是用的NTC热敏电阻+LM358做的温度传感器。

所谓的B值:

 B  K 
B 
B=T1*T2/(T2-T1)ln(RT1/RT2)
RT1   T1  K 
RT2   T2  K 
T1T2  K 

原来我用的是李鬼,不是李逵。
好吧,既然知道是啥,也好用,就不纠结了,直接把代码集成到我的浇花系统里了。

教训

通过这个事情,我觉得自己不能做差不多先生了。还好这次只是把NTC+LM358当成了LM35,没有酿成大祸。如果是接差其它原件,轻则烧坏板卡(Intel Edison这一套1500多元啊),重则酿成火灾或者导致我受伤就惨了,我可以不想做诺贝尔啊

H2
H3
H4
3 columns
2 columns
1 column
4 Comments