1 votos

Lectura del bus CAN de un Chevrolet Cruze usando un Arduino Uno

Estoy utilizando el Arduino Uno , Pantalla de bus CAN y Cable OBDII a DB9 utilizando sus bibliotecas proporcionadas . Sólo pude inicializarlo.

Lecturas:

Mientras esté conectado al coche:

  • CAN-Alto: 2,7 V - 3,0 V
  • CAN-Low: 2,4 V - 2,7 V

Mientras no esté conectado al coche:

  • CAN-Alto: ~2,4 V
  • CAN-Bajo: ~2,5 V

Nota: en ambos casos el Arduino está conectado a mi PC por USB (para depuración).

Código de ejemplo:

#include <SoftwareSerial.h>   //Software serial port
#include <Canbus.h>

#define CBRxD 5  // CAN BUS RX
#define CBTxD 4  // TX

#define DEBUG_ENABLED  1

char buffer[512];  //Data will be temporarily stored to this buffer before being written to the file
char tempbuf[15];
char lat_str[14];
char lon_str[14];

int LED2 = 7;
int LED3 = 8;

boolean scan = true;

SoftwareSerial canbusSerial(CBRxD, CBTxD);

void setup() {
    Serial.begin(9600);
    canbusSerial.begin(4800);
    pinMode(0, INPUT);
    pinMode(BTTxD, OUTPUT);
    pinMode(LED2, OUTPUT);

    pinMode(LED3, OUTPUT);

    digitalWrite(LED2, LOW);
    digitalWrite(LED3, LOW);

    setupCanbus();
}

void loop() {
    char recvChar;
    if (canbusSerial.available()) {  // Check if there's any data sent from the remote CAN bus shield
        recvChar = canbusSerial.read();
        Serial.print("CAN: "+recvChar);
    }

    if (scan) {
        digitalWrite(LED3, HIGH);

        if(Canbus.ecu_req(ENGINE_RPM,buffer) == 1) {       /* Request for engine RPM */
            Serial.println(buffer);                        /* Display data on Serial Monitor */
        }
        Serial.println(buffer);

        if(Canbus.ecu_req(VEHICLE_SPEED,buffer) == 1) {
            Serial.println(buffer);
        }Serial.println(buffer);

        if(Canbus.ecu_req(ENGINE_COOLANT_TEMP,buffer) == 1) {
            Serial.print(buffer);
        }Serial.println(buffer);

        if(Canbus.ecu_req(THROTTLE,buffer) == 1) {
            Serial.println(buffer);
        }
        Serial.println(buffer);
        //  Canbus.ecu_req(O2_VOLTAGE,buffer);

        digitalWrite(LED3, LOW);
        delay(100);
    }
}

void setupCanbus() {
    while (!Canbus.init(CANSPEED_250)) {
        Serial.println("CAN Init");
    }
    Serial.println("CAN Init OK");
    delay(1000);
}

2voto

Wim Deblauwe Puntos 2570

Creo que su coche es similar a Opel Astra J . Utiliza GMLAN que es un bus CAN de baja velocidad (33 kbit/s).

He podido leer y enviar datos CAN con el mismo hardware.

Tuve que conectar CAN-H y CAN-L respectivamente al SW-LS-CAN y a masa, según la segunda tabla de la página _Configuración de la interfaz de diagnóstico OBD II de General Motors (GM)_ .

He utilizado el código en https://github.com/Afterglow/arduino-gmlan .

Dime si esto funciona.

0voto

meds Puntos 271

Su código de ejemplo tiene

SoftwareSerial mySerial = SoftwareSerial(4, 5);

Usted tiene

SoftwareSerial canbusSerial(CBRxD, CBTxD);

Lo que se traduce en el orden inverso de las clavijas

SoftwareSerial canbusSerial(5, 4);

Quizás cambiando CBRxD y CBTxD funcionaría.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X