@ejoel creo que tenemos un poco mas de experiencia que tu en estas cosas. Yo al menos desde 2014 respondo por problemas de Arduino. En todos los casos he visto cuestiones que al OP se le pasan por alto pero tienen relevancia.
Ejemplo: yo tengo un circuito con Arduino que funciona perfecto. Enciendo un tubo fluorescente con arrancador VIEJO (balasto y disparo por capacitor y bulbo) y el arduino se vuelve loco, dime, por qué ocurre?
En tu caso, tu accionas directamente un motor y cuando lo haces podría ocurrir que falle el sensor, ahora dices que a baja temperatura esto no ocurre porque te he leído
Entonces tal vez no tenga que ver con el motor pero no descartes las hipotesis que te brindamos porque justamente has venido para que te brindemos ideas, asi que al menos has una prueba o simplemente observa si hay relación entre motor y falla del sensor.
Hipotesis 2:
Aún no formulo nada pero veamos que surge. Escribiré por un momento a ver si surge alguna idea.
Hoja de datos del DS18B20 según MAXIM (ojala que sea de MAXIM y no sea un clon Chino, ojo con eso).
Según la hoja de datos lee desde -55°C to +125°C entonces no hay razón para problemas pero no es el caso.
Desde 2 a 8°C funciona bien al menos por el período indicado.
Pero a -24°C falla presentando -127°C
Leyendo el manual he encontrado esto:
Valores de resistencias pull-up para DS18B20
Para que la comunicación con el DS18B20 funcione, requerimos una resistencia “pull-up” en el pin DQ.
La siguiente tabla resume los valores de resistencias pull-up que sugerimos emplear de acuerdo a la distancia a la que colocaremos el sensor (longitud del cable).
Podemos experimentar colocando la resistencia en el lado del sensor o del microcontrolador hasta conseguir el mejor resultado en distancias grandes.
- Distancia Valor de resistencia
- Hasta 5 metros 4.7 kΩ
- 5 a 10 metros 3.3 kΩ
- 10 a 20 metros 2.2 kΩ
- 20 a 50 metros 1.2 kΩ
Considera hacer una corrección en tu resistencia Pull-up si hiciera falta de acuerdo a la distancia.
El error mas común parece ser de CRC. El dispositivo hace una verificación y como no coincide da error.
En este comentario sugieren hacer un powercycle, aclaro es de otro microcontrolador pero sirve la idea general!
I do get them occasionally too, but for that reason the sample in this library does check the CRC and performs some additional read attempts to get a good reading.
That way I do get almost no wrong readings anymore. You can play with the retry count and also perform some sensor reset (implicitly performed with DS18B20::readPowerSupply()) if the error doesn’t go away.
Sugieren hacer un reset. En este mismo micro hacen esto que ahora compararé con nuestra librería
float DS18B20::getTemperature(){
ds->reset();
//ds->select(addr); // <-- replace this with the following line
ds->write(0xCC); // Skip ROM for single drop bus
ds->write(0x44); // start conversion, with parasite power on at the end
delay(750); // 750ms for 12bit read
// we might do a ds.depower() here, but the reset will take care of it.
ds->reset();
//ds->select(addr); // <-- replace this with the following line
ds->write(0xCC); // Skip ROM for single drop bus
ds->write(0xBE); // Read Scratchpad
...
}
Hacen 2 resets. veamos la librería que usamos nosotros.
Bueno, dirás este este divagando pero en la búsqueda de otra posible causa he encontrado un posible problema
Resulta que la secuencia de lectura no debe interrumpirse y da la casualidad que interrupciones que pueden ocurrir en un programa podrian ser responsables de fallos aleatorios.
Tienes alguna interrupción en tu código?