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.
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login