Nota

Ciao, benvenuto nella Community Facebook di appassionati SunFounder Raspberry Pi & Arduino & ESP32! Approfondisci Raspberry Pi, Arduino ed ESP32 con altri appassionati.

Perché unirsi?

  • Supporto esperto: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra community e del nostro team.

  • Impara e condividi: Scambia suggerimenti e tutorial per migliorare le tue competenze.

  • Anteprime esclusive: Ottieni accesso anticipato agli annunci di nuovi prodotti e alle anteprime.

  • Sconti speciali: Goditi sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni festive e giveaway: Partecipa a giveaway e promozioni festive.

👉 Pronto a esplorare e creare con noi? Clicca [Qui] e unisciti oggi stesso!

2.2.2 Termistore (MCP3008)

Nota

../_images/mcp3008_and_adc0834.jpg

A seconda della versione del kit, identifica se hai ADC0834 o MCP3008 e procedi con la sezione corrispondente.

Introduzione

Così come la fotoresistenza può rilevare la luce, il termistore è un dispositivo elettronico sensibile alla temperatura che può essere utilizzato per realizzare funzioni di controllo della temperatura, come ad esempio la creazione di un allarme di calore.

Componenti richiesti

In questo progetto, abbiamo bisogno dei seguenti componenti.

../_images/list2_2.2.2_thermistor1.png

È sicuramente comodo acquistare un kit completo, ecco il link:

Nome

ARTICOLI IN QUESTO KIT

LINK

Raphael Kit

337

Raphael Kit

Puoi anche acquistarli separatamente dai link sottostanti.

INTRODUZIONE COMPONENTE

LINK DI ACQUISTO

Scheda di estensione GPIO

ACQUISTA

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Resistore

ACQUISTA

Termistore

ACQUISTA

MCP3008

-

Schema elettrico

Nome T-Board

fisico

WiringPi

BCM

SPICE0

pin24

10

8

SPIMOSI

pin19

12

10

SPIMISO

pin21

13

9

SPISCLK

pin23

14

11

../_images/schematic_2.2.2_thermistor_mcp30081.png

Procedure sperimentali

Passo 1: Costruisci il circuito.

../_images/july24_2.2.2_thermistor_mcp30081.png

Passo 2: Configura l’interfaccia SPI e installa la libreria spidev (vedi Configurazione SPI per istruzioni dettagliate). Se hai già completato questi passaggi, puoi saltarli.

Passo 3: Vai alla cartella del codice.

cd ~/raphael-kit/python-pi5

Passo 4: Esegui il file eseguibile

sudo python3 2.2.2-2_Thermistor_zero.py

Una volta eseguito il codice, il termistore rileva la temperatura ambiente, che verrà stampata sullo schermo dopo il calcolo del programma.

Avvertimento

Se compare l’errore RuntimeError: Cannot determine SOC peripheral base address, fai riferimento a If gpiozero doesn’t work.

Codice

Nota

Puoi Modificare/Resettare/Copiare/Eseguire/Fermare il codice qui sotto. Prima, però, devi andare al percorso del codice sorgente, ad esempio raphael-kit/python-pi5. Dopo aver modificato il codice, puoi eseguirlo direttamente per vederne l’effetto.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import spidev
import time
import math

# Inizializza SPI per MCP3008 (Bus 0, CE0)
spi = spidev.SpiDev()
spi.open(0, 0)  # Bus 0, Dispositivo 0 (CE0)
spi.max_speed_hz = 1000000  # 1 MHz

def read_adc(channel):
    """
    Leggi il valore analogico dal canale MCP3008 (0–7)
    """
    if channel < 0 or channel > 7:
        return -1
    # Formato di comunicazione MCP3008
    adc = spi.xfer2([1, (8 + channel) << 4, 0])
    value = ((adc[1] & 0x03) << 8) | adc[2]
    return value

try:
    while True:
        # Leggi il valore analogico da CH0 di MCP3008
        analogVal = read_adc(0)

        # Converti in tensione (riferimento 3.3V)
        Vr = 3.3 * analogVal / 1023.0

        # Calcola la resistenza del termistore
        Rt = 10000.0 * Vr / (3.3 - Vr)

        # Calcola la temperatura in Kelvin utilizzando l'approssimazione Steinhart–Hart
        tempK = 1.0 / (((math.log(Rt / 10000.0)) / 3950.0) + (1.0 / (273.15 + 25.0)))

        # Converti in Celsius e Fahrenheit
        Cel = tempK - 273.15
        Fah = Cel * 1.8 + 32

        # Stampa la temperatura
        print('Celsius: %.2f °C  Fahrenheit: %.2f °F' % (Cel, Fah))

        # Attendi prima della prossima lettura
        time.sleep(0.2)

except KeyboardInterrupt:
    spi.close()

Spiegazione del codice

  1. Questa sezione importa il modulo spidev per comunicare con l’ADC MCP3008 tramite SPI, il modulo time per i ritardi e il modulo math per i calcoli logaritmici necessari nella conversione della temperatura.

    import spidev
    import time
    import math
    
  2. Inizializza l’interfaccia SPI per MCP3008 sul bus 0 e dispositivo 0 (CE0), impostando la velocità massima dell’orologio SPI a 1 MHz.

    spi = spidev.SpiDev()
    spi.open(0, 0)
    spi.max_speed_hz = 1000000
    
  3. Definisce una funzione per leggere valori analogici da un canale specificato di MCP3008 (0–7). Viene utilizzato il protocollo SPI per comunicare con MCP3008, restituendo un intero a 10 bit (0–1023).

    def read_adc(channel):
        if channel < 0 or channel > 7:
            return -1
        adc = spi.xfer2([1, (8 + channel) << 4, 0])
        value = ((adc[1] & 0x03) << 8) | adc[2]
        return value
    
  4. Implementa un ciclo per leggere continuamente i valori analogici da un termistore collegato a CH0 di MCP3008. Converte la lettura grezza in tensione (basata su un riferimento di 3,3V), poi in resistenza e infine in temperatura utilizzando l’equazione di Steinhart–Hart. La temperatura viene mostrata sia in gradi Celsius che in gradi Fahrenheit. Viene inserito un breve ritardo tra le letture.

    try:
        while True:
            analogVal = read_adc(0)
            Vr = 3.3 * analogVal / 1023.0
            Rt = 10000.0 * Vr / (3.3 - Vr)
            tempK = 1.0 / (((math.log(Rt / 10000.0)) / 3950.0) + (1.0 / (273.15 + 25.0)))
            Cel = tempK - 273.15
            Fah = Cel * 1.8 + 32
            print('Celsius: %.2f °C  Fahrenheit: %.2f °F' % (Cel, Fah))
            time.sleep(0.2)
    
  5. Gestisce l’eccezione KeyboardInterrupt (Ctrl+C) per una terminazione corretta del programma. Chiude l’interfaccia SPI per rilasciare la risorsa.

    except KeyboardInterrupt:
        spi.close()