Temperatura motor / temp. exterior en medianav con arduino

« Older   Newer »
 
  Share  
.
  1. pakoto
     
    .
    Avatar

    Daciero experto

    Group
    Administrator
    Posts
    325
    Location
    Almeria

    Status
    Offline
    Necesitaremos;

    -Arduino atmega 168 o 328p
    -2x transceiver canbus tja1050 mcp2515
    -conector obd2 macho para conectar al coche
    -placa dc-dc para reducir de los mas de 14v que da el coche a entre 5-12v que soporta el arduino.

    El esquema de conexión es el siguiente. La parte del esquema de alimentacion se puede sustituir por un DC-DC que venden baratos en aliexpress o ebay, se alimenta la entrada con 16 (14v) y 4-5 (masa) y la salida se conecta a raw y gnd en el arduino.

    jpg

    Luego toca programar el arduino, instalando el arduino ide, copiando las librerias a la carpeta documentos\arduino\librerias, compilando el codigo y subiendolo al arduino.




    CODIGO VERSION 2: Temperatura motor 10s y temperatura exterior 2s de forma ciclica como se ve en el video.


    TIME_MOT 10000UL -> 10 seg
    TIME_EXT 2000UL -> 2 seg

    1 seg = 1000UL. Modificar como se desee.


    #include <mcp_can.h>
    #include <spi.h>
    #define TIME_MOT 10000UL
    #define TIME_EXT 2000UL
    #define DELAY_DATA 10UL
    #define DELAY_DATA2 20UL
    long unsigned int rxId;
    unsigned long timeData = 0;
    unsigned long delayData = 0;
    unsigned long delayData2 = 0;
    unsigned int data = 0x0;
    unsigned int newData= 0x0;
    unsigned int engTemp = 0x0;
    unsigned int extTemp= 0x0;
    bool refreshData = false;
    bool refreshData2 = true;
    byte flag = 1;
    unsigned int temp = 0x0;
    unsigned char len = 0;
    unsigned char rxBuf[8];
    unsigned char stmp[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
    MCP_CAN CAN1(5);
    MCP_CAN CAN2(10);

    void setup(){
    Serial.begin(115200);
    CAN1.begin(CAN_500KBPS, MCP_8MHz);
    CAN2.begin(CAN_500KBPS, MCP_8MHz);
    }

    void loop(){

    CAN1.readMsgBuf(&len, rxBuf);
    rxId = CAN1.getCanId();
    if(rxId == 0x646){CAN2.sendMsgBuf(0x314, 0, 8, rxBuf);}
    if(rxId == 0x5DA){engTemp=rxBuf[0];}
    if(rxId == 0x3B7){extTemp=rxBuf[0];}

    if(flag==1){
    if(timeData + TIME_MOT <= millis()) {refreshData2 = true; flag = 2; timeData=millis();}
    }
    if(flag==2){
    if(timeData + TIME_EXT <= millis()) {refreshData2 = true; flag = 1; timeData=millis();}
    }

    if(flag==1){newData=engTemp;}
    if(flag==2){newData=extTemp;}

    if (!refreshData &&(refreshData2 || delayData2+DELAY_DATA2 <= millis())){
    if (refreshData2){refreshData2=false;}
    delayData2=millis();
    if(newData != data){
    refreshData=true;
    stmp[2]=0xFF;
    CAN2.sendMsgBuf(0x558, 0, 8, stmp);
    delay(10);
    delayData=millis();
    }
    }
    if(refreshData) {
    if(delayData+DELAY_DATA <= millis()) {
    refreshData=false;
    data=newData;
    stmp[2]=data;
    CAN2.sendMsgBuf(0x558, 0, 8, stmp);
    delayData2=millis();
    delayData=millis();
    }
    }else{
    if(delayData+DELAY_DATA2 <= millis()){CAN2.sendMsgBuf(0x558, 0, 8, stmp);delayData=millis();}
    }
    }
     
    .
24 replies since 16/1/2019, 20:34   2282 views
  Share  
.