Na het behalen van zijn rijbewijs kwam zoonlief er als snel achter dat de ST niet de gemakkelijkste auto is om te parkeren. De ST is namelijk een Duitse ST-2 zonder parkeersensoren of achteruitrijcamera. Zeker als je een lesauto gewend bent met zowel parkeersensoren als een achteruitrijcamera is dat even wennen.
Hij was er dus al snel uit dat er dus een achteruitrijcamera moet komen. Hierbij hebben we de afweging gemaakt tussen een aftermarket en originele achteruitrijcamera. Ik weet niet van wie hij dit heeft maar hij vind originaliteit belangrijk. Alle functionaliteit, waaronder ook de dynamischeparkeer lijnen en de zoom functie moeten zoveel mogelijk werken.
Eerst hebben we de mogelijkheden bekeken om een aftermarket kofferbak greep met achteruitrijcamera te plaatsen en zelf de dynamische parkeerlijnen over het camerabeeld te projecteren. Dit is echter relatief complex en de kosten voor de benodigde componenten lagen vrij hoog. Al snel kwamen we dus tot de conclusie dat een originele achteruitrijcamera de betere keuze zou zijn.
Oorspronkelijk was de Focus MK3 voorzien van een achteruitrijcamera met IPMB (camera) module. Hierbij communiceert de camera met de IPMB welke verantwoordelijk is voor het activeren van de camera en het genereren van de dynamische parkeerlijnen en zoomfunctie. Van dit systeem is echter bekend dat het niet goed of zelfs helemaal niet werkt i.c.m. SYNC 3.
In de loop van 2014 heeft Ford het achteruitrijcamera systeem herzien. De IPMB module is komen te vervallen. Dit systeem maakt gebruik van een nieuwer type LINbus camera welke direct vanuit de BCM wordt aangestuurd. Hierbij is nieuwer type BCM toegepast. De oudere types ondersteunen dit niet. Van dit systeem is bekend dat het ook prima werkt i.c.m. SYNC 3.
Uiteindelijk hebben we voor een mooie prijs in de USA een nieuwe originele LINbus camera kunnen vinden. Vervolgens in Duitsland ook de originele houder voor de camera besteld (voor de helft van de prijs als in Nederland).
De ST is echter eind 2012 geproduceerd en heeft dus geen BCM welke deze achteruitrijcamera ondersteund. Dit lossen we op door de achteruitrijcamera zelf vanuit een eigen externe module aan te sturen.
Inmiddels heb ik een eerste versie gebouwd op basis van relatief goedkope componenten:
- 12 Volt micro relais (de camera wordt vanuit de module van spanning voorzien).
- LED.
- TJA 1021 LINbus transceiver.
- MCP 2515 CANbus transceiver.
- WeAct STM32F405RGT6 MCU.
- 12 Volt → 5 Volt buck converter.
De module wordt geprogrammeerd vanuit de Arduino IDE op basis van de C++ programmeertaal.
Wat deze module doet:
- Schakelt de achteruitrijcamera (relais) in op basis van het selecteren van de achteruit versnelling (CANbus).
- Schakelt de achteruitrijcamera uit op basis van snelheid boven de 7 KM/H (CANbus).
- Schakelt de achteruitrijcamera uit op basis van tijdvertraging (CANbus).
- Registreert de stuurhoek wanneer de achteruit versnelling is geselecteerd (CANbus).
- Stuurt de achteruitrijcamera aan (LINbus).
Om te beginnen moesten we de juiste CANbus adressen en berichten achterhalen voor de achteruit versnelling, het snelheidssignaal en de stuurhoek. Met andere woorden, ik had een CANbus sniffer nodig. In het verleden had ik al eens een stukje hardware gebouwd dat werkt met het CANHacker V2 programma. Dit programma is echter inmiddels behoorlijk verouderd en doet niet alles wat ik zou willen. Derhalve heb ik maar besloten mijn eigen programma te schrijven. Dit programma is gebaseerd op Python.
Naast de mogelijkheid om het CANbus netwerk te monitoren heb ik ook meteen de mogelijkheid geïmplementeerd om ook het LINbus netwerk te monitoren.
Als sniffer hardware gebruik ik de eerder gebouwde module maar nu met een aangepaste programmering. Enerzijds omdat alle functionaliteit van de module goed te kunnen testen. Anderzijds omdat ik dan geen aparte hardware hoefde te bouwen.
Het main tabblad bied de mogelijkheid om te verbinden met de hardware (via USB), het gewenste CANbus protocol te selecteren (Intel of Motorola), de programma modus te selecteren (CANbus, LINbus of beide tegelijk) en een log met alle communicatie te genereren. Daarnaast heb ik ook 2 CAN trigger functies geïmplementeerd welke afzonderlijk kunnen worden in en uitgeschakeld. Dit maakt het mogelijk om het relais te laten schakelen op basis van een specifiek CANbus adres en byte. Tevens heeft het programma een simulatie functie.
Het CAN tabblad bied de mogelijkheid om alle op het netwerk aanwezige communicatie uit te lezen. Daarnaast heb ik een filter functie geïmplementeerd welke het mogelijk maakt om op 1 of meerdere CANbus adressen te filteren. Wanneer het filter actief is geeft het programma onder in het scherm de gefilterde ruwe data en indien bekend ook de betekenis/gecalculeerde waarde weer. Dit is echter nog beperkt omdat van lang niet alle CANbus adressen en bytes bekend is waar ze van zijn. Daarnaast is er een log functie waarbij ook het filter invloed heeft op hetgeen er naar de log wordt geschreven.
Naast het CAN tabblad is er een LIN tabblad welke dezelfde functionaliteit heeft maar dan voor het LINbus netwerk
Tenslotte heb ik een Plot tabblad geïmplementeerd. Dit tabblad biedt de mogelijkheid om op basis van een geselecteerd CANbus addres en (bekende) functie een meter of grafiek te genereren. Deze functie geeft de mogelijkheid om tegelijkertijd 2 verschillende meters of grafieken weer te geven.
Het programma heeft vooralsnog 1 nadeel. Het vereist een behoorlijk krachtige processor en veel werkgeheugen. Ik gebruik zelf een laptop met I5 Processor en 16 GB werkgeheugen en dit is echt het minimum. Vooralsnog beschouw ik dit programma alleen voor eigen gebruik maar wellicht dat ik het later op GitHub zet
Met behulp van dit programma was het eenvoudig om de voor mij (voor de achteruitrijcamera) relevante CANbus adressen te achterhalen en te ontcijferen:
CAN ID 0x010 – Stuurhoek
- Bytes 6 & 7
- Formule: Stuurhoek in graden = (Raw - 0x8000) × 0.0572958°
CAN ID 0x080 – Achteruitversnelling
- Byte 0
- Voorbeeld: 90 = Niet in achteruit / B0 = Achteruit
CAN ID 0x130 – Voertuigsnelheid
- Bytes: 6 en 7
- Formule: Snelheid (km/h) = Raw × 0,01
- Voorbeeld: 05 DC = 15,00 km/h / 07 D0 = 20,00 km/h
De volgende stap wordt het uitlezen en analyseren van de LINbus communicatie. Hiervoor ga ik gebruik maken van mijn Kuga. Die heeft (af fabriek) namelijk ook een LINbus camera. Dit geeft de mogelijkheid om de communicatie tussen de BCM en de camera uit te lezen, te analyseren en op basis daarvan de camera van de Focus aan te sturen.
Wanneer ook de benodigde LINbus communicatie bekend is zal ik eerst een testopstelling bouwen zodat alles uitvoerig kan worden getest voordat het in de ST zal worden ingebouwd.