Raspberry Pi mit MCP3208

Der MCP3208 ist ein 12Bit Analog/Digitalwandler, der im Gegensatz zum MCP3008 eine höhere Auflösung hat und einfacher zu beschaffen ist. Leider kann man Programme und Verkabelung nicht 1:1 von dem 3008 übernehmen, dazu sind einige Modifikationen nötig, um ihn zum Laufen zu bekommen. Wenn es interessiert kann ich folgenden Beitrag empfehlen, in dem die Gründe sehr gut erklärt werden. Ich möchte hier aber nur darauf eingehen, wie man ihn einfach nutzen kann.

Bauteile:

  • Raspberry Pi
  • 2x 4,7kOhm 1/4 Watt Widerstand
  • 1x 100nF Kondensator
  • 1x MCP 3208
  • diverse analoge Sensoren

Die Verkabelung habe ich von dem Beitrag MCP3208 on RaspberryPi abgeschaut und leicht verändert. Der Beitrag erklärt sehr gut, warum einige Bauteile bei Dem MCP3208 wichtig sind, die man im Allgemeinen bei dem MCP3008 nicht braucht.

Die von mir verwendeten Sensoren brauchen 5V genau wie der 3208. Für die Sensoren habe ich die rechte Seite ebenfalls mit der Spannung versorgt. Es ist zu beachten, dass der MCP3208 ‚überkopf‘ installiert ist, da ich den Pi links und die Ausgänge rechts gebraucht habe.

Aufbau:

Raspberry Pi MCP3208 Verkabelung
Raspberry Pi MCP3208 Verkabelung

Installation:

Ich habe einen Pi-Zero genutzt, da das ganze eine Wetterstation zum Steuern von einer Bewässerungsanlage und eines Mähroboters genutzt werden soll und somit permanent im Garten installiert wird.

Nach der Installation des Betriebssystems muss erstmal die SPI-Schnittstelle eingeschaltet werden. Dies geschieht über die Rasp-config:

sudo raspi-config

hier im Menu 5 (Interfacing Options)
den Punkt P4 SPI Enable/Disable automatic loading of SPI kernel module aktivieren.

dann wie immer die beiden Befehle:

sudo apt-get update
sudo apt-get upgrade 

ausführen.

Danach, wenn nicht schon geschehen Python installieren:

sudo apt-get install python

Nun sollte man sich ein Verzeichniss anlegen, in dem die Programme abgelegt werden.

mkdir mcp3208
cd mcp3208/

Wir brauchen noch eine Library:

pip install spidev

Editor aufrufen:

nano analog.py

Und dann sollte man folgendes Python-Programm einfügen:

#!/usr/bin/python

import spidev
import time
import os

# SPI bus oeffnen
spi = spidev.SpiDev()
# bei dem Aufbau oben ist der Bus auf der Null, die ist aenderbar, man kann sogar mehrere anschiessen
spi.open(0,0)
spi.max_speed_hz=1000000

# Die Funktion um die Daten aus dem 3208 zu lesen
# Channel ist der Anschluss (0-7)
# Hier erkennt man die Umrechnung von den 8 Bit auf die 12 Bit
def ReadChannel(channel):
  adc = spi.xfer2([ 6 | (channel&4) >> 2, (channel&3)<<6, 0])
  data = ((adc[1]&15) << 8) + adc[2]
  #adc = spi.xfer2([1,(8+channel)<<4,0])
  #data = ((adc[1]&3) << 8) + adc[2]
  return data

# Die Kanäle benenneb
water_channel = 0
rain_channel = 1

# Wie lange ist die Pause zwischen den Messvorgaengen
delay = 1

while True:

# Die Sensoren auslesen:
  water_level = ReadChannel(water_channel)
  rain_level = ReadChannel(rain_channel)

# Die Werte ausgeben (sind zwischen 0 und 4096)

  print "--------------------------------------------"
  print("water: {} ".format(water_level))
  print("rain : {} ".format(rain_level))

# Und warten
  time.sleep(delay)

Und dann das Programm starten:

sudo python analog.py

Die Werte dann zu interpretieren hängt vom Sensor ab. Hier ist dann leider Testen angesagt.

Abbrechen kann man mit STRG-C