Folgende Warnungen sind aufgetreten:
Warning [2] Undefined variable $unreadreports - Line: 34 - File: global.php(961) : eval()'d code PHP 8.2.26 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/global.php(961) : eval()'d code 34 errorHandler->error_callback
/global.php 961 eval
/showthread.php 28 require_once
Warning [2] Undefined property: MyLanguage::$thread_modes - Line: 43 - File: showthread.php(1621) : eval()'d code PHP 8.2.26 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/showthread.php(1621) : eval()'d code 43 errorHandler->error_callback
/showthread.php 1621 eval




Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Anschluss Lenkradfernbedienung Ford Focus MK 1
#1
Hey Ho,

Die Tage habe ich herausgefunden wie ich die 2-polige Lenkradferbedienung meines Focus MK1 an unser Projekt anschließe.

Ist gar nicht so schwierig; ich dachte relativ lange das wäre CANBus ist aber eigentlich ne analoge Geschichte.(beim MK1)

Und zwar funktionieren die Knöpfe der Fernbedienung wie ein regelbarer Widerstand, außerdem muss man der Fernbedienung noch 5 V vom Raspberry über einen 200 Ohm Widerstand geben, das Ganze funktioniert dann als Spannungsteiler.
Ist hier sehr schön und übersichtlich beschrieben:
http://www.mikrocontroller.net/topic/20792#153226
inkl. Anschlussplan Ford/Radio und Übersicht der Funktionsweise

Um die verschiedenen Spannungen am Raspberry einzulesen, brauchen wir einen AD-Wandler. ich habe den MCP3008 benutzt der mit ein paar Pins an den GPIO angeschlossen wird und habe mir diesen + den 200 Ohm Widerstand auf eine Lochrasterplatine geschmissen.
Erik Bartmann erklärt das sehr schön auf http://erik-bartmann.de/down/raspberry-pi.html
Dort im Dokument MCP3008 wird sehr genau und SEHR einfach erklärt, wie der MCP an den Raspberry angeschlossen wird.

Softwareseitig stellt Erik Bartmann ebenso in der Datei RaspberryPiSourceCode_0.2.zip
auf der selben Seite ein Phyton-Script zur Verfügung, womit man die Spannungen einließt.
Sinn des ganzen also:
Jede Taste erzeugt einen anderen Wert, diesen kann man per IF abfragen , und dann über die JSON-Schnittstelle von Kodi, Kodi steuern.
Ergebnis: Funktioniert perfekt, wie werkseitig verbaut.
Wenn Interesse besteht, stelle ich mein angepasstens Script gerne zur Verfügung(ist vlt. nicht toll programiert aber fuinktioniert)

Ich hätte übrigens gerne generell eine Kategorie für Ford Fahrzege, wäre das möglich?

Liebe Grüße
Quoti


(PS: In Ermangelung einer Ford Kategorie nochmal hier gepostet, ausserdem denke ich, hier lesen mehr Leute.
Wenn es stört, bitte löschen
Zitieren
#2
Na klar besteht Interesse.

Das von Erik Bartmann und dem MCP3008 hatte ich mir auch angeschaut, aus mangel an Erfahrung, hatte ich es aber gelassen. Ich hab das ganze per Arduino realisiert, die analogen Pins lesen die Spannung über einen Spannungsteiler ein und geben das ganze dann auch wieder über einrn Spannungsteiler raus, ist eigentlich recht simpel.
Zitieren
#3
>Ah cool, dachte vlt. das Thema Ford Focus wäre zu speziell, wobei ich denke, dass es natürlich nicht die einzige Karre ist, die so eine ähnlich funktionierende Lenkradfernebedienung hat.

Das Script ist im Prinzip ein Zusammenspiel aus Erik Bartmanns und von der Seite:
http://www.forum-raspberrypi.de/Thread-r...io-tastern

Die Kodi Steuerung habe ich einmal mit dem Package/CMD Befehl "kodi-send" probiert, was allerdings nicht stabil geklappt hat und später mit dem o.g. Script per JSON, was super funktioniert.
Nur habe ich bis jetzt nicht gecheckt, wie man per JSON "Track weiter/Next usw." realisiert, vieleicht kann mir da einer helfen.
Deswegen habe ich das weiterhin per "kodi-send" gemacht.
Es muss also per "sudo apt-get install kodi-eventclients-kodi-send" vor her installiert werden.


Code:
#!/usr/bin/env python
# coding: utf8

#Python Raspberry Pi GPIO Klasse importieren
import RPi.GPIO as GPIO
import time, os, httplib, json, requests, pdb
from requests.auth import HTTPBasicAuth
# Festlegung der Nutzung der vorgegebenen Nummerierung der GPIOs
GPIO.setmode(GPIO.BCM)

# Namen von True und False zum besseren Verständnis festlegen
HIGH = True  # 3,3V Pegel (high)
LOW  = False # 0V Pegel (low)

# SCI Funktion
def getAnalogData(adCh, CLKPin, DINPin, DOUTPin, CSPin):
   # Pegel definieren
   GPIO.output(CSPin,   HIGH)    
   GPIO.output(CSPin,   LOW)
   GPIO.output(CLKPin, LOW)
       
   cmd = adCh
   cmd |= 0b00011000 # Kommando zum Abruf der Analogwerte des Datenkanals adCh

   # Bitfolge senden
   for i in range(5):
       if (cmd & 0x10): # 4. Bit pruefen und mit 0 anfangen
           GPIO.output(DINPin, HIGH)
       else:
           GPIO.output(DINPin, LOW)
       # Clocksignal negative Flanke erzeugen  
       GPIO.output(CLKPin, HIGH)
       GPIO.output(CLKPin, LOW)
       cmd <<= 1 # Bitfolge eine Position nach links verschieben
           
   # Datenabruf
   adchvalue = 0 # Wert auf 0 zuruecksetzen
   for i in range(11):
       GPIO.output(CLKPin, HIGH)
       GPIO.output(CLKPin, LOW)
       adchvalue <<= 1 # 1 Postition nach links schieben
       if(GPIO.input(DOUTPin)):
           adchvalue |= 0x01
   time.sleep(0.01)
   return adchvalue

# Konfiguration Eingangskanal und GPIOs
CH = 0  # Analog/Digital-Channel
CLK     = 18 # Clock
DIN     = 24 # Digital in
DOUT    = 23  # Digital out
CS      = 25  # Chip-Select

# Pin-Programmierung
GPIO.setup(CLK, GPIO.OUT)
GPIO.setup(DIN, GPIO.OUT)
GPIO.setup(DOUT, GPIO.IN)
GPIO.setup(CS,   GPIO.OUT)

buttons = [2                        , 4                        , 14                     ,15                          , 3                       ]
methods = ['Application.SetVolume'  , 'Application.SetVolume'  ,  'Application.SetMute' , 'Input.ExecuteAction'              'Input.ExecuteAction'          ]
params  = [{ "volume": "decrement" }, { "volume": "increment" },  { "mute": "toggle" }   , { "action": "skipnext" }          , { "action": "skipprevious"}]
user    = 'kodi'
passwd  = ''
port    = '80'

def button_pressed(index):
   url = 'http://localhost:' + port + '/jsonrpc'
   postheaders = {'content-type': 'application/json'}
   command = {"jsonrpc":"2.0", "id": 1, "method": methods[index], "params": params[index]}
   print(methods[index])
   resp = requests.post(url, auth=(user,passwd), data=json.dumps(command), headers=postheaders)

    
while True:
   # Volume -  Taster  
   if (200 <= getAnalogData(CH, CLK, DIN, DOUT, CS) <= 210):
       button_pressed(0)
        
        # Volume +  Taster  
   if (400 <= getAnalogData(CH, CLK, DIN, DOUT, CS) <= 425):
       button_pressed(1)
        
        # Seek +  Taster  
   if (590 <= getAnalogData(CH, CLK, DIN, DOUT, CS) <= 610):
       os.system("kodi-send --action='PlayerControl(Next)'")
        
        # Seek -  Taster  
   if (730 <= getAnalogData(CH, CLK, DIN, DOUT, CS) <= 750):
       os.system("kodi-send --action='PlayerControl(Previous)'")

        # Mode  Taster  
   if (830 <= getAnalogData(CH, CLK, DIN, DOUT, CS) <= 855):
       button_pressed(2)


Falls also jmd. einfällt, wie die JSON NextTrack Methode aussieht, immer her damit.
Auf http://kodi.wiki/view/JSON-RPC_API/v6 habe ich nichts dazu gefunden. zumindest nicht das es geklappt hätte.

Außerdem würde ich gerne eine "ActiveWindow" abhängige Steuerung relaisieren, abe rich gebe zu, dass ich keine Ahnung habe, wie ich JSON Get Functionen in Python einbaue(so schwer kann das eigentlich nicht sein).

Sollte wie gesagt jmd. Interesse haben an der Fritzing Verkabelung von Remote Pin11/12   <--> MCP3008  <--> Raspberry so müsste ich die erstmal erstellen und würde die dann hier hochladen. Wie gesagt bei mir eine kleine Platine(nix besonderes und quasi das erste richtige mal für mich)

@Thedk

Wie hast du das dann weiter realisiert? Wie bist du in den Raspberry rein?
Zitieren
#4
Einfach über die GPIO und das dann über einen Spannungsteiler, da der Arduino 5V an den digitalen Pins ausgibt. Die Pins lassen sich dann ja in Carpc Controller festlegen. Ich warte aber auch noch ganz gespannt auf den neuen Controller Big Grin

Sobald ich das mal im Auto direkt getestet habe und nicht nur am Schreibtisch, poste ich auch eine Anleitung dazu, Schaltpläne und Programme sind fertig. Mein komplettes Projekt aber noch nicht.
Sollte dann auch für alle Lenkradferbedienungen, die auf den selben Prinzip bassieren funktionieren. Dafür muss man dann nur die Lfb mit einem zweiten Programm auslesen und die Werte in das eigentliche Programm eintragen bzw austauschen. Klingt vielleicht kompliziert, ist aber wirklich nur Tasten drücken, gucken was ausgelesen wird und Werte eintragen -> Fertig
Zitieren
#5
Funktioniert denn deine LRF genauso wie meine? Weil es sich etwas komplizierter anhört, oder ich verstehe es falsch. Um welches Auto handelt es sich denn?

Hast du denn Plan von dieser JSON Schnittstelle?

Gesendet von meinem D5803 mit Tapatalk
Zitieren
#6
Ich denke doch, fahre einen Astra G.
Zwischen Masse und der Lfb Leitung verändert sich beim drücken der Widerstand, über einen Spannungsteiler misst das Radio dann die anliegende Spannung. Genau das selbe mache ich auch mit dem Arduino.

JSON Schnittstelle? Wie? Warum?^^ Hat doch bisher nichts damit zu tun.
Zitieren
#7
@Quoti30
http://forum.kodi.tv/showthread.php?tid=183394

@Thedk
Wieviele GPIO brauchst du für deine Lösung?
Zitieren
#8
@Thedk
Ich fange ja das "Drücken" der Tasten mit dem Script ab und steuere Kodi dann per JSON, deswegen fragte ich.
Wenn ich das richtig verstehe geht deine Lösung dann über den CarPC Controller aber erfordert zusätzlich einen Arduino.
Das benötigt meine Lösung ja nicht, sondern nur den 2 € MCP3008 und einen Cent 200 Ohm Widerstand.
Wobei, nichts für ungut, ich war/bin recht froh, diese Lösung gefunden zu haben, bin aber immer offen für andere Lösungen.

@harryberlin
Ja danke nochmal, die Befehlsübersicht habe ich ja oben auch geposted.
"Player.GoTo" scheint das richtige zu sein, das wil aber irgendwie nicht. Ich glaube ich gebe diie Parameter iwie falsch an
Zitieren
#9
hmm, kann meinen link bei dir nicht finden.
auf jeden fall, d musst dir erst die player id holen und dann bei next mitgeben.
so hab ich es.
Code:
('{"jsonrpc": "2.0", "method": "Player.GoTo", "params": { "playerid": %s, "to": "next" }, "id": 1}' % self.player_id())
Zitieren
#10
Ja, genau. Bei mir sind es dann halt ~7€ an Material. Aus Mangel an Erfahrung mit dem Pi war es so für mich die einfachste Lösung.

@Harryberlin
Ich brauch dann entsprechend pro Taste/Funktion einen GPIO, in meinem Fall wären es sechs.
OT: Sag mal, warst/bist du bei Powerpi unterwegs? Ich glaub da hatten wir schon ein paar mal Kontakt gehabt.
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste
RasPiCarProjekt