CarPi: Anschluss der Rückfahrkamera

Wenn man schon einen Monitor (und erst recht mit einem angeschlossenen Rechner) in ein Auto einbaut, liegt doch der Einsatzzweck nahe, dass man auch eine Rückfahrkamera einbaut, sofern sie nicht bereits schon im Auto verbaut ist.

Das von mir verwendete Display hat mehrere Video-Eingänge, so auch einen Cinch-Video-Eingang. Eine Kamera mit einem solchen Ausgang habe ich auch gefunden.

Die Betriebsspannung für die Kamera wird an die Spannungsversorgung für das Rückfahrlicht angeschlossen, damit die Kamera nur in Betrieb ist, wenn auch der Rückwärtsgang eingelegt ist. Zusätzlich hat die Kamera noch zwei Schaltleitungen, die Spannung führen, wenn auch die Kamera mit Spannung versorgt ist. Diese Leitungen verwende ich, um das Display automatisch umzuschalten bzw. den Eingangskanal automatisch zu wechseln. Bei dem Pollin-Display ist ein Board mit physischen Buttons dabei, die gedrückt werden müssen, damit der Kanalwechsel ausgeführt wird. Um z. B. von HDMI auf FBAS zu wechseln, muss der Select-Button 3 mal gedrückt werden. Dieses Button-Board habe ich aber bei meinem Radio innen verbaut, das bedeutet, dass ich nicht mehr an die Buttons heran komme. Ich habe den Select-Button nach außen neben das Display geführt (in dem entsprechenden Beitrag zu sehen), aber trotzdem will ich nicht per Hand den Kanal wechseln müssen, wenn ich den Rückwärtsgang einlege. Aus diesem Grund wollte ich zusätzlich noch eine Umschaltung per Software ermöglichen.

Hardware

Realisiert sind die Knöpfe auf dem Board über verschiedene Widerstände, die beim Drücken der Buttons die anliegende Spannung nach unten ziehen. Ein einfaches Spannung anlegen (z. B. über einen GPIO-Pin) ist also nicht möglich. Also muss ein elektrischer Schalter her, den ich per Software schalten kann. Am einfachsten wird das über einen Transistor realisiert. Ich nutze dafür den NPN-Transistor BC548B. An dessen Basis wird über einen Widerstand ein freier GPIO-Pin angeschlossen. Der Kollektor wird an SAR1 des Button-Boards angeschlossen, der Emitter an GND.

Damit ich noch ermitteln kann, ob die Kamera eingeschaltet, d. h. der Rückwärtsgang eingelegt ist, muss ich das entsprechende Signal abgreifen. Dieses beträgt ja im Autospannungsnetz 12 Volt. Für die GPIO-Pins des Raspberry Pi is das aber bei Weitem zu viel. Aus diesem Grund nutze ich einen entsprechenden DC/DC-Wandler, der die 12 Volt auf 3,3 Volt herunterregelt. Der positive Ausgang wird dabei an einen freien GPIO-Pin angeschlossen.

Software

Nachdem die Vorbereitung abgeschlossen ist, habe ich ein Python-Skript geschrieben, das beim Systemstart ausgeführt wird.

import time
import RPi.GPIO as GPIO

HIGH = 1
LOW = 0

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

GPIO.setup(26, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(21, GPIO.OUT)

lastState = not GPIO.input(26)

def switch():
    for i in xrange(3):
        GPIO.output(21, GPIO.HIGH)
        time.sleep(.2)
        GPIO.output(21, GPIO.LOW)
        time.sleep(.2)

try:
    while 1:
        # reverse gear and showing kodi
        if GPIO.input(26) and lastState:
            switch()
            lastState = LOW

        # forward gear and showing reverse cam
        if not GPIO.input(26) and not lastState:
            switch()
            lastState = HIGH

        time.sleep(.5)

finally:
    GPIO.cleanup()

Das Skript konfiguriert GPIO26 (Pin 37) als Eingang mit aktiviertem Pulldown-Widerstand. Der GPIO21 (Pin 40) dient als Ausgang und dabei als Verbindung zum Transistor.

Am Beginn wird der Status lastState auf den negierten Wert des GPIO26 gesetzt. Wenn der Rückwärtsgang eingelegt ist, hat GPIO26 den Wert HIGH, lastState ist dann also LOW. Ist der Rückwärtsgang nicht eingelegt, kehren sich die Werte entsprechend um.

In der Schleife wird geprüft, ob der Rückwärtsgang eingelegt ist und zusätzlich derzeit Kodi angezeigt wird (GPIO.input(26) and lastState). Ist das der Fall, wird die Funktion switch aufgerufen, die 3 mal hintereinander HIGH und LOW sendet, das das Drücken auf den Button simuliert. Außerdem wird nun lastState auf LOW gesetzt, was bedeutet, dass das Bild der Kamera angezeigt wird.
Das andere Umschalten erfolgt, wenn der Rückwärtsgang herausgenommen wird und vorher das Kamerabild gezeigt wurde.