Ir al contenido

← Todas las funcionalidades

Banco de ensayo de fusiblesRaspberry PLC 19R1-WireAdquisición

Leer un DS18B20 por 1-Wire sin ninguna librería

Un DS18B20 en un Raspberry PLC necesita tres cosas: un pull-up de 4.7 kOhm, una línea en /boot/config.txt (dtoverlay=w1-gpio,gpiopin=8) y unas cuarenta líneas de Python puro — el kernel expone el sensor como un fichero de texto en sysfs. Este ejemplo añade validación CRC y un filtro de ruido de 0.6 °C, tal como se usa para registrar la temperatura ambiente en un banco de ensayo de fusibles real en producción, donde la corriente de fusión depende de ella.

Por qué importa la temperatura ambiente en un banco de ensayo

Un fusible ensayado a su corriente nominal a 23 °C se comporta distinto a 35 °C — la integral de fusión se desplaza con la temperatura ambiente. Registrar la temperatura junto a cada ensayo hace el informe defendible: si una muestra falla por poco, el certificado muestra las condiciones térmicas en las que falló.

La interfaz sysfs, sin pip install

Una vez cargado el overlay, cada sensor aparece como /sys/bus/w1/devices/28-*/w1_slave. Al leerlo devuelve dos líneas: un veredicto CRC y t=23125 (miligrados). El ejemplo localiza el dispositivo con glob, comprueba que el CRC dice YES y parsea el entero — descartando cualquier lectura corrupta en lugar de propagarla.

Filtrar el parpadeo

Las lecturas brutas del DS18B20 oscilan unas décimas de grado, lo que hace parpadear el display del HMI y contamina los informes. El filtro conserva el último valor aceptado y solo lo actualiza cuando el cambio alcanza 0.6 °C — lo bastante pequeño para seguir la deriva real, lo bastante grande para ignorar el ruido de conversión.

Un fragmento de la implementación

Tal cual del ejemplo desplegado en el Raspberry PLC 19R — cópialo libremente:

def find_sensor():
    """Return the path of the first DS18B20 detected, or None."""
    devices = glob.glob(SENSOR_GLOB)
    return devices[0] if devices else None

El ejemplo completo es un programa entero — cabecera de conexionado, setup y bucle principal — listo para adaptar a tu aplicación.

Preguntas frecuentes

¿Puedo conectar varios sensores DS18B20 al mismo pin?

Sí, 1-Wire es un bus. Cada sensor tiene un código ROM único de 64 bits y aparece como su propio directorio 28-* en sysfs, así que el mismo código de parseo funciona por dispositivo.

¿Por qué GPIO8 en lugar del GPIO4 por defecto?

En el Raspberry PLC algunos pines por defecto están ocupados por el hardware de E/S industrial. El overlay acepta cualquier GPIO libre con el parámetro gpiopin; GPIO8 es el que usaba el cableado del banco.

¿Con qué frecuencia puedo muestrear el sensor?

Una conversión de 12 bits tarda unos 750 ms, así que muestrear cada 2 s es holgado. De todos modos la temperatura ambiente cambia despacio — el banco la registra una vez por ensayo más un refresco del display en vivo.

Funcionalidades relacionadas