¿Es posible hacer lecturas de 4hz con el sensor de temperatura DS18S20?

Sí, pero solo con una resolución de 9-10 bits. A resolución completa, 12 bits, el tiempo de conversión es de 750 ms. Con los comandos, reinicio, etc., esto da un poco más de 1hz.

http://www.tempsens.com/

La velocidad de cambio de la lectura de temperatura depende de las propiedades térmicas del paquete del sensor, no de la velocidad a la que lo lee. Los sensores menos costosos, empaquetados en plástico que la mayoría de nosotros usamos, serán los más lentos en responder a los cambios solo porque esa es la naturaleza térmica del plástico. Tenga en cuenta que el pin de tierra de ese paquete tiene más influencia que el paquete en sí, así que haga lo posible para asegurarse de que el pin de tierra esté expuesto a la temperatura que está tratando de medir, o al menos esté aislado térmicamente del aire circundante, a menos que la temperatura del aire es lo que está tratando de medir. Si necesita una respuesta más rápida al cambio de temperatura, deberá prestar atención a mantener todo el dispositivo a la temperatura de interés o cerca de ella y aislada de las temperaturas circundantes.

¡Aclamaciones!

Sí, pero a 9 bits res

DS18B20 problema de velocidad

Escribo aquí los detalles.
Mi código actual que no me convence:

#include

int DS18S20_Pin = 3; // DS18S20 Pin de señal en digital 3
unsigned long startTime = 0;
#define MEASURE_PERIOD 250
// E / S de chip de temperatura
OneWire ds (DS18S20_Pin); // en el pin digital 3

configuración nula (nula) {
Serial.begin (115200);
}

bucle vacío (vacío) {
if ((millis () – startTime)> = MEASURE_PERIOD)
{
startTime + = MEASURE_PERIOD;
temperatura de flotación = getTemp ();
Serial.println (temperatura);
} // solo aquí para ralentizar la salida para que sea más fácil de leer

}

float getTemp () {
// devuelve la temperatura de un DS18S20 en grados Celsius

datos de bytes [12];
byte addr [8];

if (! ds.search (addr)) {
// no más sensores en cadena, reiniciar búsqueda
ds.reset_search ();
retorno -1000;
}

if (OneWire :: crc8 (addr, 7)! = addr [7]) {
Serial.println (“¡CRC no es válido!”);
retorno -1000;
}

if (addr [0]! = 0x10 && addr [0]! = 0x28) {
Serial.print (“El dispositivo no se reconoce”);
retorno -1000;
}

ds.reset ();
ds.select (addr);
ds.write (0x44,1); // comienza la conversión, con el parásito encendido al final

byte presente = ds.reset ();
ds.select (addr);
ds.write (0xBE); // Leer Scratchpad

for (int i = 0; i <9; i ++) {// necesitamos 9 bytes
datos [i] = ds.read ();
}

ds.reset_search ();

byte MSB = datos [1];
byte LSB = datos [0];

float tempRead = ((MSB << 8) | LSB); // usando el cumplido de dos
Float TemperatureSum = tempRead / 16;

return TemperatureSum;

}

El resultado:

22,31
22,31
22,31
22,31
22,31
22,31
22,31
22,31
22,31
22,31
22,31
22,31
22,31
22,31
22,31
22,31
22,31
22,31
22,31
22,31
22,31
22,31
22,31
22,31
22,31
22,31
22,31

No veo por qué no. Creo que necesitaría ajustar su retraso de tiempo entre cada lectura para garantizar su frecuencia de actualización de 4 Hz.
Echa un vistazo ¿Cómo puedo poner exactamente mi sensor a lecturas de 4 Hz?