M5StickC and Grove-Temperature_Sensor_V1.2
-
I bought the Grove-Temperature_Sensor_V1.2 and connected to M5StickC. I copied almost all the code from the Seedstudio page (https://wiki.seeedstudio.com/Grove-Temperature_Sensor_V1.2/#software) to convert the analog read to actual temperature, only adding the #include <M5StickC.h> and the M5.begin, but the temperature is way off and very oscillating. I am using pin 32 to read the data, Is it correct? Is it a sensor issue?
For example, a sample output is:
-0.34
-2.32
-4.34
-2.16
-3.89
-4.04
-3.42
-5.16
-4.42
-4.79
-5.24
-5.09
-5.38
-6.61
-6.40
-5.82
-6.96
-6.82
-6.96
-6.89
-6.96
-7.17
-6.96
-8.08
-6.96
-6.96
-7.94And the code is:
#include <M5StickC.h>
#include <math.h>const int B = 4275;
const float R0 = 100000;
const int PIN = 32;void setup() {
M5.begin();Serial.begin(115200);
}
void loop() {
int a = analogRead(PIN);
float R = 1023.0/a-1.0;
R = R0*R;float temperature = 1.0 / (log(R / 10000.0) / B + 1 / 298.15) - 273.15;
Serial.println(temperature);
delay(500);
}Thanks,
Fernando Gonzalez Sidders -
@fsidders I fixed the code, changed 10000 to 100000 in temperature formula, but the temperature is still off and oscillating:
#include <M5StickC.h>
#include <math.h>const int B = 4275; // B value of the thermistor
const float R0 = 100000;
const int PIN = 32;void setup() {
M5.begin();
Serial.begin(9600);}
void loop() {
int a = analogRead(PIN);
float R = 1023.0/a-1.0;
R = R0*R;float temperature = 1.0/(log(R/R0)/B+1/298.15)-273.15; // convert to temperature via datasheet
Serial.println(temperature);
delay(500);
}The temperature displayed now is:
42.42
44.15
42.42
42.85
42.96
45.96
46.07
44.38
44.15
42.74
43.50
42.42
44.15
44.49
42.42
45.16
49.58
42.85 -
i have check the prodcut document.then i find this information, i guess this sensor need calibration:
Nominal B-Constant: 4250 ~ 4299Kif still can't work normal. maybe you could try to contact seeed store
https://wiki.seeedstudio.com/Grove-Temperature_Sensor_V1.2/#specifications
-
I solved the issue, I am getting the correct temperature now.
I changed the code to:
#include <M5StickC.h>
#include <math.h>const int B = 4275;
const float R0 = 100000;
const int PIN = 33;void setup() {
M5.begin();Serial.begin(115200);
}
void loop() {
int a = analogRead(PIN);
float R = 4095.0/a-1.0;
R = R0*R;float temperature = 1.0 / (log(R / R0) / B + 1 / 298.15) - 273.15;
Serial.println(temperature);
delay(500);
}The correct pin was 33, and modified the 1023.0 to 4095.0 in the formula because esp32 is returning values between 0 and 4096. But anyway, the temperature readings were too high. Then, I modified the grove cable (as is explained here https://tinkerfarm.net/projects/the-m5stickc/the-5-volt-danger-with-the-m5stickc/) feeding the temperature sensor with 3.3v instead of 5v. And, now, (with no additional code changes) the temperature is correct.