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).

Raspberry Pi - Caronte Consulting

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.

Collegamento Raspberry Pi MCP3008

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?

ENTRA IN CONTATTO CON NOI, FACCIAMOCI QUATTRO CHIACCHIERE!

TELEFONO

EMAIL

MESSENGER

WHATSAPP

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.