LM335...

Hi ! I have got 2 times LM335 from 2 different supplyers at AliExpress. Both give me the same electrical values : about 0,75V with 1mA (datasheet 3V).

Fake devices ?

thx

I'm missing the wiring diagram.

Is your wiring like this?
LM335xx.png
What are the values of V+, R1 and room temperature?

LM335xx.png

Not sure why you have picked the LM335.
It's not really suitable for the Arduino realm, since you need to add a stable ~4volt reference for a stable readout, and you loose a large part of the bottom half of the range of the A/D.
All of this resulting in a poor resolution (steps per degreeC) of ~0.5C at best.

If you want to stay analogue, then an LM35 (5C to 105C) or TMP36 (-40C to +55C) will do much better with 0.1C resolution if coded with the stable internal ~1.1volt Aref.

A digital DS18B20 (16 steps/degreeC) might be easier (no calibration needed).

If you want to reduce the risk of buying fake, then don't order from China.
(A poor man always buys twice).
Leo..

JCA34F:
Is your wiring like this?
LM335xx.png
What are the values of V+, R1 and room temperature?

wiring ok 4V 1K value is about 750mV depending on units with a negative temp coeff (decrease when temp rising) room is about 18°C

Wawa:
Not sure why you have picked the LM335.
It's not really suitable for the Arduino realm, since you need to add a stable ~4volt reference for a stable readout,

according to the datasheet "operating output voltage change" is typical 3mV from 0,4 to 5mA (0,3°C) so no need for good stability : with a lion accu and 390Ohm resistor current is less than 5mA with 4.1V and more than 0.4uA with 3.16V @25°C (or 3.26V @ 35°C). Far enougth for ambiant variations.

and you loose a large part of the bottom half of the range of the A/D.
All of this resulting in a poor resolution (steps per degreeC) of ~0.5C at best.

exact but acceptable in that specific case

If you want to stay analogue, then an LM35 (5C to 105C) or TMP36 (-40C to +55C) will do much better with 0.1C resolution if coded with the stable internal ~1.1volt Aref.
A digital DS18B20 (16 steps/degreeC) might be easier (no calibration needed).

I had same issue with tmp36 at aliExpress (fake devices) ; I use DS18B20 for years... good but expensive to buy and expensive in power (conversion time very long) for battery powered applics.

At end I'll use MCP9700 (1mS enougth to stabilize it at power on = time to start ADC). That chip needs calibration but very cheap.

If you want to reduce the risk of buying fake, then don't order from China.
(A poor man always buys twice).
Leo..

I agree :slight_smile: prices are often very attractive...
I can recommand a strategy : never try to have refund with fake devices, evidences are too difficult to give. Just wait end of delivery time and ask for refund as "no delivery".

Thx

max777:
according to the datasheet "operating output voltage change" is typical 3mV from 0,4 to 5mA (0,3°C) so no need for good stability : with a lion accu and 390Ohm resistor current is less than 5mA with 4.1V and more than 0.4uA with 3.16V @25°C (or 3.26V @ 35°C). Far enougth for ambiant variations.

You seem to forget that temp result depends on TWO things.

  1. Sensor stability (which is ok).
  2. Reference voltage for the A/D (which is potentially bad on the default (5volt) setting).

max777:
At end I'll use MCP9700 (1mS enougth to stabilize it at power on = time to start ADC). That chip needs calibration but very cheap.

Seems to be the same as a TMP36.
500mV offset, and 10mV/degreeC gain.
If you use that whith the internal 1.1volt Aref, then you should have a stable sensor.
Example with 1.1volt Aref attached.
Leo..

const byte tempPin = A0; // connect TPM36 to 3.3volt A0 and (not-shared) ground
float calibration = 0.1039; // calibrate temp by changing the last digit(s) of "0.1039"
float tempC;

void setup() {
  Serial.begin(9600);
  analogReference(INTERNAL); // use internal 1.1volt Aref
}

void loop() {
  tempC = (analogRead(tempPin) * calibration) - 50.0;
  Serial.print("Temperature:  ");
  Serial.print(tempC, 1); // one decimal place
  Serial.print(" C");
  delay(1000); // use a non-blocking delay when combined with other code
}