CanBus parametrar till Surfplattan via Blåtand.

Inspirerade av dessa "byggen": Car Dash Tablet och
Canbus-reverse-engineering-with-arduino-and-ios
Skaffade ett Blåtandskort (HC-06) till Canbus kortet för att kunna skicka parametrar till Surfplattan.
Tyvärr är man ingen Android programmerare så denna app RemoteXY får duga.
5 parametrer i den fria versionen så det blev 3 temp, långtext + batteri spänningen.

Man går in på RemoteXY hemsida och skapar sin design som man sedan kopierar in i Arduino
programmet (med lite modifikationer).
https://saab9000vector.blogspot.com/2018/12/remotexy-kod.html
Batterispänningen spänningsdelar jag ner till en analog ingång. (med 33k och ett 68 k motstånd)
Konverterar värdet i programet så att det stämmer hyfsat.

Det negativa är att SID meddelanderna inte funkar 100% försökt avlasta programet lite och
minus grader visas som 255 och under , får väl modifiera lite på koden...

RemoteXY kod.

// RemoteXY select connection mode and include library
#define REMOTEXY_MODE__SOFTSERIAL
#include <SoftwareSerial.h>
#include <RemoteXY.h>
// RemoteXY connection settings
#define REMOTEXY_SERIAL_RX 2
#define REMOTEXY_SERIAL_TX 3
#define REMOTEXY_SERIAL_SPEED 9600


// RemoteXY configurate 
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
  { 255,0,0,44,0,80,0,8,13,0,
  67,4,9,11,20,5,134,26,11,67,
  4,38,11,20,5,134,26,11,67,4,
  66,11,20,5,134,26,11,67,4,64,
  44,20,5,134,26,11,129,0,10,22,
  18,6,17,73,110,110,101,45,32,32,
  32,32,32,32,32,32,32,75,121,108,
  97,114,45,32,32,32,32,32,32,85,
  116,101,116,101,109,112,0 };
 
// this structure defines all the variables of your control interface
struct {

    // output variable
  char INtemp[11];  // string UTF8 end zero
  char Coolant[11];  // string UTF8 end zero
  char OUTtemp[11];  // string UTF8 end zero
  char Voltage[11];  // string UTF8 end zero
    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0

} RemoteXY;
#pragma pack(pop)
//           END RemoteXY include          //
  double temp = 24;

void setup()
{
  RemoteXY_Init (); 
}

void loop()
{
  RemoteXY_Handler ();  
if(currentSek-rXYtime >= 4)   {   //uppdaterar rXY värderna vart 4dje sek.
  //      value, ? , decimals, rXY label   tillagt manuellt
  dtostrf(ITemp, 0, 0, RemoteXY.INtemp);  
  dtostrf(CTemp, 0, 0, RemoteXY.Coolant);
  dtostrf(OTemp, 0, 0, RemoteXY.OUTtemp);
  dtostrf(battVolt, 0, 1, RemoteXY.Voltage);
  rXYtime = currentSek;      }

//----------- batteri voltage
    battVolt = analogRead(battPin);     // 1024 = 5 volt = ca.15 volt
   //battVolt = 967 ;  // test
    battVolt = (5*battVolt)/1024 ;    // konverterar analoga värdet till volt 0-5 volt
    battVolt = ((33+68)/33 *battVolt)*10 ; // kontverterar 5 till 12 volt (analog in)
    battVolt = battVolt/10 ;
}

Styrning av Halvljus automatiken med ljussensorn för inst.panelen.

Tänkte rationalisera bort ljussensorena som styr halvljus automatiken.
Så tar ljussensorvärdet ifrån instrumentpanelen.
Det är 2 8bitars värden men jag använder bara ett,

case 0x410: //-------   Light Dimm Sensor values
                   // (Integer value is between about 1800h(6144 dec) to 2C00h(11264 dec))
value=3 ;CanbusRead(); LSensor0 = Rx;
value=4 ;CanbusRead(); LSensor1 = Rx;  // använder endast Lsensor1 värdet för styrning av halvljuset.

Sedan använder jag ganska grov hystres för att undvika flip-flopande lampor.

  if (LSensor1 <= 5  && lightOn == 0) {Status = 2; request = 1; lightOn = 1; digitalWrite(lightOnOUT,HIGH); }  // Halvljus På 01-05 hystres 
  if (LSensor1 >= 15 && lightOn == 1) {Status = 2; request = 1; lightOn = 0; digitalWrite(lightOnOUT,LOW); }  // Halvljus Av








Testningen går ju lite långsam eftersom det är kolsvart både till och från jobbet.
Och styrningen går via det gamla Arduino kortet tillsvidare. Ändringen i det gamla kortet.

pinMode(headLightPinCan, INPUT);    // halvljus Ingång, från Can-kortet
 //---------------------------- HALVLJUS AUTOMATIK
        headLightCan = digitalRead(headLightPinCan);
       if (headLightCan == 1 && lightOn == 0) {                                                          
                digitalWrite(headlightPin,HIGH);  // tänder halvljuset   
                delay(50); lightOn = 1; 
                headLightTimer = currentSekund ; // Sätter timer tid          
            } //{lightOn = 1;}
       if (headLightCan == 0 && lightOn == 1) {
                digitalWrite(headlightPin,LOW);
                delay(50); lightOn = 0; 
                headLightTimer = currentSekund ; // Sätter timer tid
              }

Grotta ner sig i CANbus med Arduino

Köpt på mig MCP2515 CANbus kort och ett Arduino Pro Micro kort.
Installtion av Arduino kortet hittar man här:
https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide/all
och så här kopplar man inkl. 12 volts reg på RAW och GND.















Sen kan man krympa ner den mer än detta men som vanligt tar vi det senare......

Här är koden och tanken är att man filtrerar bort all information man inte vill ha med.
Det är ju mycket babbel på CANbusen.

// demo: CAN-BUS Shield, receive data
#include <mcp_can.h>
//#include <mcp_can_dfs.h>
#include <SPI.h>

long unsigned int rxId;
unsigned char len = 0;
unsigned char rxBuf[8];
unsigned long OLDmilliSek;
MCP_CAN CAN0(10);                // Set CS to pin 9
#define CAN0_INT 2                  //tillagt

void setup()
{
  Serial.begin(9600);
  //CAN0.begin(MCP_ANY, CAN_33K3BPS, MCP_16MHZ);
  //CAN0.begin(CAN_47K619BPS,2);              // init can bus :CAN_33K3BPS baudrate = 33.3(GMLAN) with 8MHZ change 2 to 1 run with 16mhz oscilator
  //CAN0.begin(CAN_33K3BPS,1);                // CAN0.begin(CAN_47K619BPS,1);   CANbus-I
  CAN0.begin(CAN_500KBPS,1);                // CANBUS-P powertrain
  //pinMode(CAN0_INT, INPUT);                            // Configuring pin for /INT input
  pinMode(2, INPUT);                            // Setting pin 2 for /INT input
  Serial.println("MCP2515 Library Receive CAN BUS Example...");
}

void loop(){
  unsigned long currentmilliSek = millis(); // / 1000 ;  //unsigned long värde i sekunder
    if(digitalRead(CAN0_INT)== LOW)                         // If pin 2 is low, read receive buffer
    {
      CAN0.readMsgBuf(&len, rxBuf);              // Read data: len = data length, buf = data byte(s)
      rxId = CAN0.getCanId();                    // Get message ID
      if(rxId == 0x439 ){ //  290= steeringwheel || rxId == 0x530 om Id = ACC 520 eller 530 0x280 crusies byte 4
        //filtrerar bort 439h - SPA distance
      } else {
      Serial.print("ID: ");
      Serial.print(rxId, HEX);
      Serial.print("  Data: ");
      for(int i = 0; i<len; i++)                // Print each byte of the data
      {
       if(rxBuf[0] < 0x80) {                     // shows changed Status
        if(rxBuf[i] < 0x10)                     // If data byte is less than 0x10, add a leading zero
        {
          Serial.print("0");
        }
        Serial.print(rxBuf[i], HEX);
        Serial.print(" ");
      }                                 // satus change end
      }
      Serial.print("  ");Serial.print(currentmilliSek-OLDmilliSek);Serial.println();
      OLDmilliSek=currentmilliSek;    // tidstämpel
    }                                     // filter end
    }
}


Små irriterande fel....

Fukt och kondens i en av DRL lamporna. (inte bara bilden som är grumlig)
Tillslut så fick jag sprätta i sär den och torka ur den och sedan borra två hål för att
jämna ut fuktskillnaden.
Sen passade jag på att montera en slangklämma för att minska DRL spolningen.


SRS larm en hel dag är inte kul.

Men med Tech2 fick jag fram felkoden och kunde se att
en av rattkuddarna visde för högt ohm-tal.
Så bort med kudden och motionerade kontakterna även den
till kontaktrullen. Sen var det frid och fröjd ett tag.







Smattrande kupefläkt.....tydligen kan löv smita in i fläkten.
Försökte med både trycklufts pistol och dammsugarslang få bort
lövet (from hell). Men lyckade bara tillfälligt flytta det och inte vill jag mecka bort vindrute torkar armmarna mm. för ett löv.
Höjer volymen på stereon tills
den ruttnar bort eller nått.
Blev en tilltäppnigs projekt med skumplast och en kort plast skarv.
som blivit svart målad nu. Nu ska väl inte nya löv smita in.....

9000 nya Framlampor (Depo)

Fick en anmärkning på besiktningen på diffus ljusbild vilket var väntat.
Jag hade försökt fräscha upp reflektorerna med lite silver spray (får försöka med alu.folie nästagång)

Nya lyktor låg och väntade och med lite modifieringar så är dom redo för montering.
Den manuella höjdjusteringen byttes mot orginal motorjusteringen.

Bort med justerpinnen och bort med den manuella justeringen och lyktfästet lirkade
man loss åt sidan.
Stödfästet i botten fick också modifieras lite för att passa. Sågade 2 jack och satte dit skumplast
så att kroken hakar fast ordentligt i lyktan.
 















Sedan fick jag på en lykta tabort en extra isolering
på P-ljus lampan. Fjäder och isolering gjorde att
lampan inte bottnade efter det så passade allt.

Så nu är dom klara för montering. Varde ljus.

Nya DRLer + spolning

DRL lever ett hårt liv efter vintern så hade en fått en stenskott och dom var både skitiga och slitna.
Beställde ny och bytte ut dom samtidigt så kopplade jag in elen där det redan fanns framdraget el för dimljusen. Stiftade in 2 kablar vit kabel blev jord och blå-grön DRL spänning.

När jag hade fronten borta så passade jag på att koppla in
spolning på DRL ljusen ska även skaffa skyddsfilm för
dom så får vi se om dom överlever lite bättre.
Kopplade in spolningen för den vanliga vindrutespolningen.
2 T-stycken och 2 L-kopplingar + spolmunstycken som
är till Volvo. 



9000 utbyte av passagerarkrockkudde till handskfack.

Har alltid stört mig på passagerarkrockkudden och avsaknaden av handskfack.
Så nu flev det ett utbyte. Monterade fem 10 ohms motstånd parallellt för att ersätta krockkudden.
(mätte upp 2,1 ohm). Två buntband för fixering och 2 kabelskor 1,5 mm till kontakten.
Sedan bar det iväg till skroten för att borra bort fästen.
Montage av fästena :
Och med lite trixande (gäller att få kabelstammen på plats) fick man handskfacket på plats.
Det jag saknar nu är sparkskyddet under det som fanns på skroten var lite väl mosad.
Passade på att fräsha upp en av strålkastarna som blivit mossig. Övre och undre reflektor delen fick lite silverfärg (borde varit värmetålig färg men, men). Har beställt 2 nya för att kunna byta framöver.
Jag får lägga till att jag kommer montera tillbaks kudden iochmed att besiktningen kräver att
kudden måste finns kvar oavsett den är inkopplad eller inte.

Ny Surfplatta

lite större och mycket snabbare...tyvärr så är det svårt att hitta en större surfplatta som passar i
ramen för gamla stereon. Men det blev en bra infästning med skruvarna för gamla stereon och
gummi packningar. Och Av/På knappen hamnade på ovansidan som man måste vänja sig vid.
Surfplattan
 Och ramen fick modifieras för att passa (det återstår lite filande)