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
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.
È sicuramente comodo acquistare un kit completo, ecco il link:
Nome |
ARTICOLI IN QUESTO KIT |
LINK |
|---|---|---|
Raphael Kit |
337 |
Puoi anche acquistarli separatamente dai link sottostanti.
INTRODUZIONE COMPONENTE |
LINK DI ACQUISTO |
|---|---|
- |
Schema elettrico
Nome T-Board |
fisico |
WiringPi |
BCM |
|---|---|---|---|
SPICE0 |
pin24 |
10 |
8 |
SPIMOSI |
pin19 |
12 |
10 |
SPIMISO |
pin21 |
13 |
9 |
SPISCLK |
pin23 |
14 |
11 |
Procedure sperimentali
Passo 1: Costruisci il circuito.
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
Questa sezione importa il modulo
spidevper comunicare con l’ADC MCP3008 tramite SPI, il modulotimeper i ritardi e il modulomathper i calcoli logaritmici necessari nella conversione della temperatura.import spidev import time import math
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
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
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)
Gestisce l’eccezione KeyboardInterrupt (Ctrl+C) per una terminazione corretta del programma. Chiude l’interfaccia SPI per rilasciare la risorsa.
except KeyboardInterrupt: spi.close()