Home » Notizie » How To » Raspberry Pi e MCP3008
Raspberry Pi e MCP3008
Leggere segnali analogici con Raspberry Pi sfruttando l’MCP3008
Storia breve: con Raspberry Pi non si possono analizzare segnali analogici, punto e basta. Se avete bisogno di leggere un segnale analogico dovete ricorrere per forza ad un aiuto esterno. La configurazione più classica prevede di usare un convertitore analogico/digitale (detto ADC, Analog to Digital Converter).
MCP3008
Roba difficile? No, se usate l’MCP3008, un convertitore analogico digitale prodotto da Microchip (qui il datasheet) che consente di leggere fino ad 8 segnali analogici. Ogni canale di lettura viene codificato con 10 bit (quindi il valore massimo leggibile sarà 210-1 = 1023, mentre il valore minimo sarà 0). Per i meno bisognosi si può usare l’MCP3004, che ha solo 4 canali di lettura. Per comunicare con il mondo, l’MCP3008 usa un sistema di comunicazione classico tra microcontrollore/microprocessore e circuiti integrati: il Serial Peripheral Interface (SPI), una robetta facile da configurare su Raspberry Pi.
La precisione dell’MCP3008 è molto simile a quella di Arduino Uno, quindi questo chip è una buona opzione per prendere confidenza con i circuiti ADC e contemporaneamente avere una discreta precisione.
Installazione dell’ambiente di sviluppo
Come ambiente di sviluppo preferiamo il classico Python, quindi apriamo il terminale ed installiamo:
sudo apt-get update
sudo apt-get install build-essential python-dev python-smbus python-pip
sudo pip3 install spidev
Collegamento
Questo modo di collegare l’MCP3008 al Raspberry Pi è il più semplice e viene definito Software SPI.
Dopo il collegamento, avviate il vostro Raspberry Pi e digitate il comando:
sudo raspi-config
quindi abilitate la voce SPI.
Verifica funzionamento
Per verificare la lettura dall’MCP3008 si può ricorrere ad una semplificazione del codice suggerito da raspibo.org:
import spidev
import time
import math
mcp3008 = spidev.SpiDev(0,0)
adcnum=0 #questo valore identifica il canale da leggere
xferarg=[1,(1+adcnum)<<4,0]
vref = 3.3
ret=mcp3008.xfer2([1,(8+adcnum)<<4,0])
adcout = (((ret[1]&3) << 8) + ret[2]) * 3.3 / 1024
print ((ret[1]&3) << 8) + ret[2], adcout
mcp3008.close()
Libreria Adafruit
È possibile sfruttare la libreria Adafruit per interrogare l’MCP3008 in maniera umanamente comprensibile. Potete installare la libreria con il seguente comando:
sudo pip install adafruit-mcp3008
Una volta installato potete sfruttare il seguente codice (che è una semplificazione del simpletest.py di Tony DiCola) per controllare il funzionamento del convertitore:
import time
import Adafruit_GPIO.SPI as SPI
import Adafruit_MCP3008
CLK = 18
MISO = 23
MOSI = 24
CS = 25
mcp = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI)
print('Reading MCP3008 values, press Ctrl-C to quit...')
print('| {0:>4} | {1:>4} | {2:>4} | {3:>4} | {4:>4} | {5:>4} | {6:>4} | {7:>4} |'.format(*range(8)))
print('-' * 57)
while True:
values = [0]*8
for i in range(8):
values[i] = mcp.read_adc(i)
print('| {0:>4} | {1:>4} | {2:>4} | {3:>4} | {4:>4} | {5:>4} | {6:>4} | {7:>4} |'.format(*values))
time.sleep(0.5)
VUOI LA NOSTRA CONSULENZA?
Scopri alcuni dei nostri prodotti
Caronte Consulting progetta e realizza sistemi hardware e software nel campo dell’Industria 4.0, dotati di una sofisticata ed efficace Intelligenza Artificiale.
I nostri dispositivi sono realizzati su misura alle esigenze del Cliente e permettono di automatizzare completamente i processi industriali, ottimizzando la produzione e creando un risparmio di materie prime e di consumi energetici.