WeMosを使ってみる

LM35DZ(アナログ温度センサー)+MCP3002


WeMosを使ってLM35DZのアナログ温度センサーから温度を読み込んでみます。
WeMosのアナログ入力は最大1Vです。→嘘です 最大3.2Vです。
そこで、以下の様に10-Bit ADCのMCP3002をかませました。
LM35DZの出力には、ノイズを低減するために100マイクロのバイパスコンデンサーを挟んでいます。
最初にキャリブレーションのために、WeMosの3.3Vピンの電圧をテスターで測ります。


次にキャリブレーションが正しいかどうか、以下の回路で確認します。


WeMosのスケッチは以下の通りです。
RefVにはテスターで測った値を指定しています。
/*
 * LM35DZ Temperature sensor using MCP3002
 *
 * MPC3002    LM35ZD      NodeMCU
 * VCC               ---- 3.3V
 * CLK               ---- D5(SCK)
 * Dout              ---- D6(MISO)
 * Din               ---- D7(MOSI)
 * CS                ---- D8(CS)
 * CH0    --- OUT
 *            VCC    ---- 3.3V
 *            GND    ---- GND
 */

#include <SPI.h>

#define RefV  3.28
#define CS    15

void setup() {
  Serial.begin(9600);
  pinMode(CS,OUTPUT);
  digitalWrite(CS, HIGH);
  SPI.begin();
}

void loop() {
  int RawValue;
  float Voltage;
  float temp_c;  // 摂氏値( ℃ )
  uint8_t b1, b2;

  digitalWrite(CS, LOW);
  b1 = SPI.transfer(0x60); // Single-Ended,Channel 0
  //b1 = SPI.transfer(0x70); // Single-Ended,Cnannel 1
  b2 = SPI.transfer(0x00);
  digitalWrite(CS, HIGH);

  RawValue = ((b1 << 8) | b2) & 0x03ff;
  Voltage = (RawValue * RefV) / 1023.0;
  temp_c = Voltage * 100;
  //Serial.print(" RawValue[MCP3002] = ");
  //Serial.print(RawValue);
  Serial.print(" Voltage[MCP3002] = ");
  Serial.print(Voltage);
  Serial.print(" temp_c[MCP3002] = ");
  Serial.println(temp_c);
  delay(2000);
}

IDEのシリアルモニターに、テスターで測った値(今回は3.28V)が表示されれば、キャリブレーションは終了です。


次に回路を一部変更してLM35DZの出力電圧を測ります。

IDEのシリアルモニターに、温度が表示されます。



「高精度温度湿度計 ライフナビD203」と比較すると、1度ほど低めの値となりました。



続く...