Raspberry Pi e MCP3008 - Caronte Consulting
How To Raspberry Pi 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.

Collegamento Raspberry Pi MCP3008

Dopo il collegamento, avviate il vostro Raspberry Pi e digitate il comando:

sudo raspi-config

quindi abilitate la voce SPI.

ARRRR! SCOPRI LE AVVENTURE DEI PIRATI DI CARONTE CONSULTING

SEGUICI SU FACEBOOK

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)

GLI ESPERTI DEL MONITORAGGIO SIAMO NOI

NON PERDERE TEMPO E CHIAMA, DACCI ASCOLTO

Condividi la tua opinione