.. note:: ¡Hola! Bienvenido a la Comunidad de Entusiastas de SunFounder Raspberry Pi, Arduino y ESP32 en Facebook. Sumérgete más en el mundo de Raspberry Pi, Arduino y ESP32 con otros entusiastas. **¿Por qué unirse?** - **Soporte Experto**: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo. - **Aprende y Comparte**: Intercambia consejos y tutoriales para mejorar tus habilidades. - **Avances Exclusivos**: Obtén acceso anticipado a nuevos anuncios de productos y adelantos. - **Descuentos Especiales**: Disfruta de descuentos exclusivos en nuestros productos más nuevos. - **Promociones y Sorteos Festivos**: Participa en sorteos y promociones de temporada. 👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy mismo. .. _2.2.2_py_pi5: 2.2.2 Termistor =================== .. note:: .. image:: ../img/mcp3008_and_adc0834.jpg :width: 25% :align: left Dependiendo de la versión de su kit, identifique si tiene **ADC0834** o **MCP3008** y continúe con la sección correspondiente. Introducción --------------- Al igual que una fotorresistencia puede detectar la luz, un termistor es un dispositivo electrónico sensible a la temperatura que puede usarse para funciones de control de temperatura, como hacer una alarma de calor. Componentes Necesarios ------------------------------ En este proyecto, necesitamos los siguientes componentes. .. image:: ../python_pi5/img/2.2.2_thermistor_list.png Definitivamente es conveniente comprar un kit completo, aquí está el enlace: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nombre - COMPONENTES EN ESTE KIT - ENLACE * - Kit Raphael - 337 - |link_Raphael_kit| También puedes comprarlos por separado en los enlaces a continuación. .. list-table:: :widths: 30 20 :header-rows: 1 * - INTRODUCCIÓN DEL COMPONENTE - ENLACE DE COMPRA * - :ref:`cpn_gpio_board` - |link_gpio_board_buy| * - :ref:`cpn_breadboard` - |link_breadboard_buy| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_resistor` - |link_resistor_buy| * - :ref:`cpn_thermistor` - |link_thermistor_buy| * - :ref:`cpn_adc0834` - \- Diagrama Esquemático -------------------------- .. image:: ../python_pi5/img/2.2.2_thermistor_schematic_1.png .. image:: ../python_pi5/img/2.2.2_thermistor_schematic_2.png Procedimientos Experimentales --------------------------------- **Paso 1:** Construir el circuito. .. image:: ../python_pi5/img/2.2.2_thermistor_circuit.png **Paso 2:** Ir a la carpeta del código. .. raw:: html .. code-block:: cd ~/raphael-kit/python-pi5 **Paso 3:** Ejecutar el archivo ejecutable. .. raw:: html .. code-block:: sudo python3 2.2.2_Thermistor_zero.py Con el código en ejecución, el termistor detecta la temperatura ambiente, que se imprimirá en la pantalla una vez que finalice el cálculo del programa. .. warning:: Si recibe el mensaje de error ``RuntimeError: Cannot determine SOC peripheral base address``, consulte :ref:`faq_soc` **Código** .. note:: Puedes **Modificar/Restablecer/Copiar/Ejecutar/Detener** el código a continuación. Pero antes de eso, necesitas ir a la ruta del código fuente como ``raphael-kit/python-pi5``. Después de modificar el código, puedes ejecutarlo directamente para ver el efecto. .. raw:: html .. code-block:: python #!/usr/bin/env python3 # -*- coding: utf-8 -*- import ADC0834 import time import math # Inicializar el módulo ADC0834 ADC0834.setup() # Ejecutar el proceso en un bloque try-except try: while True: # Leer el valor analógico del sensor analogVal = ADC0834.getResult() # Convertir el valor analógico a voltaje Vr = 5 * float(analogVal) / 255 # Calcular la resistencia del termistor Rt = 10000 * Vr / (5 - Vr) # Calcular la temperatura en Kelvin temp = 1 / (((math.log(Rt / 10000)) / 3950) + (1 / (273.15 + 25))) # Convertir Kelvin a Celsius Cel = temp - 273.15 # Convertir Celsius a Fahrenheit Fah = Cel * 1.8 + 32 # Imprimir la temperatura en Celsius y Fahrenheit print('Celsius: %.2f C Fahrenheit: %.2f F' % (Cel, Fah)) # Esperar 0.2 segundos antes de la siguiente lectura time.sleep(0.2) # Manejar KeyboardInterrupt para una terminación adecuada except KeyboardInterrupt: # Limpiar recursos de ADC0834 ADC0834.destroy() **Explicación del Código** #. Esta sección importa la biblioteca ADC0834 para la conversión de analógico a digital, la biblioteca time para implementar retardos y la biblioteca math para realizar operaciones matemáticas. .. code-block:: python #!/usr/bin/env python3 # -*- coding: utf-8 -*- import ADC0834 import time import math #. Inicializa el módulo ADC0834 para habilitar la lectura de valores analógicos. .. code-block:: python # Inicializar el módulo ADC0834 ADC0834.setup() #. Implementa un bucle infinito para la lectura continua de datos. El bucle lee el valor analógico de un termistor, convierte este valor a voltaje, calcula la resistencia del termistor y luego traduce esta resistencia en mediciones de temperatura en Kelvin, Celsius y Fahrenheit. También muestra las lecturas de temperatura en Celsius y Fahrenheit, haciendo una pausa de 0.2 segundos entre cada lectura. .. code-block:: python # Ejecutar el proceso en un bloque try-except try: while True: # Leer el valor analógico del sensor analogVal = ADC0834.getResult() # Convertir el valor analógico a voltaje Vr = 5 * float(analogVal) / 255 # Calcular la resistencia del termistor Rt = 10000 * Vr / (5 - Vr) # Calcular la temperatura en Kelvin temp = 1 / (((math.log(Rt / 10000)) / 3950) + (1 / (273.15 + 25))) # Convertir Kelvin a Celsius Cel = temp - 273.15 # Convertir Celsius a Fahrenheit Fah = Cel * 1.8 + 32 # Imprimir la temperatura en Celsius y Fahrenheit print('Celsius: %.2f C Fahrenheit: %.2f F' % (Cel, Fah)) # Esperar 0.2 segundos antes de la siguiente lectura time.sleep(0.2) #. Captura una excepción KeyboardInterrupt para terminar el programa de manera adecuada e incluye instrucciones de limpieza para los recursos de ADC0834 al finalizar. .. code-block:: python # Manejar KeyboardInterrupt para una terminación adecuada except KeyboardInterrupt: # Limpiar recursos de ADC0834 ADC0834.destroy()