viernes, 5 de febrero de 2016

Lectura ADC Raspberry Pi (GPIO) con un MCP3202 o MCP3008

No todo en la electronica son unos y ceros (1-0) tambien tenemos dispositivos, sensores, medicion de voltajes, corrientes que van desde el 0 en adelante. Desafortunadamente en la Raspberry Pi no hay un una entrada donde conectemos directamente algo analogo y no lo lea pero afortunadamente tenemos algo llamado SPI, lo cual nos permite la lectura de 2 puertos dentro GPIO en la Raspberry Pi para obetener datos análogos (CE0 y CE1).

Elementos de SPI

SCLK - Serial CLocK 
CE   - Chip Enable (Chip Select) (Dos puertos CE0 y CE1) 
MOSI - Master Out Slave In 
MISO - Master In Slave Out 

Sin embarho el SPI master driver esta deshabilitado por default en la raspberry, pero es muy fácil habilitarlo, solo tenemos que teclear una línea de código en la consola para quitarlo de la lista negra o bien hacerlo desde raspi-config.

Manual:

- sudo sed -i 's/blacklist spi\-bcm2708/\#blacklist spi-bcm2708/g' /etc/modprobe.d/raspi-blacklist.conf
- sudo reboot

Automático:

- sudo raspi-config

Una vez habilitado tenemos los siguientes pines del GPIO funcionales.

 MOSI P1-19, MISO P1-21, SCLK P1-23, CE0  P1-24 y CE1  P1-26

Ya tenemos habilitado el SPI, lo que para empezar a hacer pruebas necesitamos los siguiente:
  1. MCP3202 ó MCP3008
  2. Python y Python-dev
  3. Spidev 
Para instalar python python-dev realizar:
sudo apt-get install python-dev python






Para instalar spidev:

- git clone git://github.com/doceme/py-spidev
- cd py-spidev/
- sudo python setup.py install

Recordemos que el MCP3202 es un chip de 2 canales codificado a 12 bits por lo tanto vamos a estar leyendo valores de 0 - 4095 y el MCP3008 es un chip de 8  canales codificado  a 10 bits teniendo valores desde 0 - 1023. Eso se evalua en el código para la manipulación de datos. Los chips deben conectarse de la siguiente manera.

 
Rojo: V+
Negro: GND
Naranja: CLOCK
Amarillo: MOSI
Azul: MISO
Violeta: CE

Los canales es donde va a entrar la línea de lo que queremos medir y vamos a manipular tanto el canal como el puerto CE que deseamos medir mediante el siguiente script:

Para crear el script creamos un archivo con extensión .py

Con esto podemos a jugar con los numeros de los canales o de los CE para ver y entender el funcionamiento correcto.

Espero que les haya servido, realmente es una excelente herramienta para hacer medicion de sensores ya que por lo regular estos nos arrojan numeros que van de 0 en adelante.