[TUTORIAL] - Computador de bordo através do TID

Faça você mesmo as instalações e manutenções em o seu Corsa.
Responder
ChavesHe
:: Super ::
Mensagens: 54
Registrado em: Sexta-feira 29 2016f Janeiro 2016 10:49:16 AM
Localização: Osasco - SP
Modelo do veiculo: CORSA HATCH PREMIUM 1.4 ECONOFLEX
Ano de fabricação: 2009

Re: RE: Re: [TUTORIAL] - Computador de bordo através do TID

Mensagem por ChavesHe »

cansei escreveu:Faça os testes com calma. Aquele sketch de teste que está na minha pasta no Google Drive está funcionando?
Cheque se os 3 fios do SCL, SDA e MRQ estão ligados certos na placa e no TID. Se inverter um deles aí não vai aparecer nada na tela mesmo.
Fiz um monte de teste, peguei os arquivos do drive e nada, fiz outro código do zero e nada...
Testei em 2 Arduino e tbm não deu, devo ter fechado algum curto e queimado...

Vou bloquear ele e desbloquear para ver se acontece alguma coisa.

Enviado de meu Vibe K5 Plus usando Tapatalk
ChavesHe
:: Super ::
Mensagens: 54
Registrado em: Sexta-feira 29 2016f Janeiro 2016 10:49:16 AM
Localização: Osasco - SP
Modelo do veiculo: CORSA HATCH PREMIUM 1.4 ECONOFLEX
Ano de fabricação: 2009

Mensagem por ChavesHe »

Fiz o bloqueio e desbloqueio de novo e funcionou...
Tirei do carro e parou de funcionar...

Se eu ligar errado os cabos gera erro e ele não funciona mesmo com o cabo ligado correto depois.

Resumindo está funcionando é apenas queimei o arduíno.


Enviado de meu Vibe K5 Plus usando Tapatalk
cansei
:: Piquet ::
Mensagens: 319
Registrado em: Quinta-feira 06 2008f Março 2008 10:30:35 PM
Localização: São Paulo - SP
Modelo do veiculo: CORSA HATCH 1 8 FLEXPOWER
Ano de fabricação: 2004

Mensagem por cansei »

Que estranho, não tive esse problema com os TIDs que mexi.
ChavesHe
:: Super ::
Mensagens: 54
Registrado em: Sexta-feira 29 2016f Janeiro 2016 10:49:16 AM
Localização: Osasco - SP
Modelo do veiculo: CORSA HATCH PREMIUM 1.4 ECONOFLEX
Ano de fabricação: 2009

Mensagem por ChavesHe »

Eae galera blz?

Adicionei a função de temperatura interna sem problemas aproveitando quero criar um "gerenciamento" do A/C mas estou com o seguinte problema.

1- Aparece na tela o simbolo 4 quando a temperatura está acima da programada.
Ação: Funcionando perfeitamente

2- Apaga da tela o simbolo 4 quando a temperatura chega na programada.
Ação: Aparece "Até Logo!" e o simbolo "EON".

Método utilizado.

1 - Criado um item no menu para mostrar a temperatura.
2 - Criado uma função para o termômetro que chamada junto com a Ativade_led.
3 - Criado uma função para ligar e desligar o A/C na temperatura chamada junto com a Ativade_led.

Seria possível deixar-las em background mas fazer com eles rode a cada 30 secs?
fialho
:: Wind ::
Mensagens: 9
Registrado em: Quinta-feira 30 2015f Abril 2015 07:33:20 PM
Localização: São Paulo - SP
Modelo do veiculo: CORSA (DEMAIS)
Ano de fabricação: N/I

Mensagem por fialho »

Cansei, ainda está rolando a venda da placa? Tem um tempo que estou acompanhando e finalmente peguei meu corsa C.

2 Duvidas:

1) o meu é aquele 12/12 com airbag, como faço pra saber se ele tem BCM? (eu acho que tem mas queria confirmar)
2) o meu é o peladão que não vem nada (apesar do airbag rs), o TID, é apenas puxar os fios de alimentação né? (Igual esse tuto aqui https://www.youtube.com/watch?v=rsKnyW76elo)

Desde já obrigado
cansei
:: Piquet ::
Mensagens: 319
Registrado em: Quinta-feira 06 2008f Março 2008 10:30:35 PM
Localização: São Paulo - SP
Modelo do veiculo: CORSA HATCH 1 8 FLEXPOWER
Ano de fabricação: 2004

Mensagem por cansei »

ChavesHe escreveu:Eae galera blz?

Adicionei a função de temperatura interna sem problemas aproveitando quero criar um "gerenciamento" do A/C mas estou com o seguinte problema.

1- Aparece na tela o simbolo 4 quando a temperatura está acima da programada.
Ação: Funcionando perfeitamente

2- Apaga da tela o simbolo 4 quando a temperatura chega na programada.
Ação: Aparece "Até Logo!" e o simbolo "EON".

Método utilizado.

1 - Criado um item no menu para mostrar a temperatura.
2 - Criado uma função para o termômetro que chamada junto com a Ativade_led.
3 - Criado uma função para ligar e desligar o A/C na temperatura chamada junto com a Ativade_led.

Seria possível deixar-las em background mas fazer com eles rode a cada 30 secs?
Legal, eu sempre quis fazer isso mas meu carro nem tem A/C hehe

Eu precisava ver no detalhe o que vc fez... anexa o seu código pra eu dar uma olhada nele e aí eu aproveito e vejo essa questão de rodar em background a cada 30 segundos, da pra fazer isso sim.

fialho escreveu:Cansei, ainda está rolando a venda da placa? Tem um tempo que estou acompanhando e finalmente peguei meu corsa C.
Está rolando sim, entra em contato com o Guilherme que é ele que está gerenciando as vendas: gui_brandao_srs@hotmail.com
fialho escreveu:2 Duvidas:

1) o meu é aquele 12/12 com airbag, como faço pra saber se ele tem BCM? (eu acho que tem mas queria confirmar)
Só pelo ano já da pra dizer que não tem. Até onde sei só os corsas até 2006 saiam com BCM.

Pra saber se tem ou não é só ver como vc faz pra acender a luz do teto. Se no seu carro vc puxa o botão pra acender então seu carro não tem BCM. Se vc aperta o botão pra acender então ele tem BCM.

Mas já te falo que pro computador de bordo é indiferente ter BCM ou não viu, o que muda é só a questão da alavanca R/S.
fialho escreveu:2) o meu é o peladão que não vem nada (apesar do airbag rs), o TID, é apenas puxar os fios de alimentação né? (Igual esse tuto aqui https://www.youtube.com/watch?v=rsKnyW76elo)

Desde já obrigado
Pra ter o computador de bordo funcionando vc precisa pegar no mínimo os fios de alimentação (12V pós chave, 12V permanente, terra) e fio da velocidade (tanto esse quanto os outros 3 fios que mencionei vc encontra no chicote do som).

Legal esse vídeo, pode seguir as instruções deles.
ChavesHe
:: Super ::
Mensagens: 54
Registrado em: Sexta-feira 29 2016f Janeiro 2016 10:49:16 AM
Localização: Osasco - SP
Modelo do veiculo: CORSA HATCH PREMIUM 1.4 ECONOFLEX
Ano de fabricação: 2009

Mensagem por ChavesHe »

Cansei,

Segue o código, coloquei somente a parte do A/C.

Leitura do termômetro.

Código: Selecionar todos

void tempe_ac()
{
      byte type_s;
      byte data[12];
     
      byte addr[8];
      
      if ( !ds.search(addr)) {
        ds.reset_search();
        return;
      }

      // the first ROM byte indicates which chip
      switch (addr[0]) {
        case 0x10:
          type_s = 1;
          break;
        case 0x28:
          type_s = 0;
          break;
        case 0x22:
          type_s = 0;
          break;
        default:
          return;
      }

      ds.reset();
      ds.select(addr);
      ds.write(0x44, 1);        // start conversion, with parasite power on at the end

      ds.reset();
      ds.select(addr);
      ds.write(0xBE);         // Read Scratchpad

      for (byte i = 0; i < 9; i++) {           // we need 9 bytes
        data[i] = ds.read();
      }

      int16_t raw = (data[1] << 8) | data[0];
      if (type_s) {
        raw = raw << 3; // 9 bit resolution default
        if (data[7] == 0x10) {
          // "count remain" gives full 12 bit resolution
          raw = (raw & 0xFFF0) + 12 - data[6];
        }
      } else {
        byte cfg = (data[4] & 0x60);
        if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
        else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
        else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
        //// default is 12 bit resolution, 750 ms conversion time
      }
      celsius = (float)raw / 16.0;
      
      dtostrf(celsius,4,0,texttemp);  
}

Item do menu mostrando a temperatura interna.

Código: Selecionar todos

void menu_Ac()
{
  if (flagAc == 0)
  {
    calcula_intervalo();
    if (intervaloMiliSecs < 100)
      mydisplay.display_message(F("A/C"),10);
    else if (intervaloMiliSecs > 1000 && intervaloMiliSecs < 1300)
      mydisplay.display_message(F("A/C"),2);
    else if (intervaloMiliSecs > 1700 && intervaloMiliSecs < 2000)
      mydisplay.display_message(F("A/C"),2);
      
    else if (intervaloSecs >= 4)
    {
      flagAc = 1;
      //secs = 0;
    }
  }
  else if (flagAc == 1)
  {
    calcula_intervalo();
    if (intervaloMiliSecs >= 2000)
    {
      
      sprintf(textfinal, "Ti %s c", texttemp);
      mydisplay.display_message(textfinal,254);
      exibe_simbolo_colchete();
      zera_intervalo();
    }
  }
}
Função para ligar e desligar o A/C.

Código: Selecionar todos

void re_ac()
{
  
  //Aciona o rele
  if ( celsius > 25 ){
  //digitalWrite(8, HIGH);
  mydisplay.display_symbol(4);
  }
  else if (celsius < 25) {
  //Desliga o rele
  //digitalWrite(8, LOW);
  mydisplay.clear_symbol(4);
  }
}
cansei
:: Piquet ::
Mensagens: 319
Registrado em: Quinta-feira 06 2008f Março 2008 10:30:35 PM
Localização: São Paulo - SP
Modelo do veiculo: CORSA HATCH 1 8 FLEXPOWER
Ano de fabricação: 2004

Mensagem por cansei »

Eu precisava ver o código completo pra ver como vc está chamando cada função e pra te ajudar a construir o contador de tempo de 30 segundos (ou ver se da pra aproveitar algum outro que já ta no código), mas com o que vc postou já da pra dar algumas sugestões.


O código da leitura do termômetro vc ta chamando continuamente, não é? Se vc colocou a função no atividade_led então ela ta sendo chamada continuamente por 1 segundo, e no outro segundo ela não é chamada.
É esse código que vc quer rodar a cada 30 segundos? Se sim, é bom fazer isso sim. Temperatura é algo que muda devagar então vc não precisa ficar lendo ela toda hora.

Aproveite e tire a última linha, a "dtostrf(celsius,4,0,texttemp);". Vc já tem a temperatura armazenada na variável celsius, essa linha do dtostrf vc usa só quando for exibir a temperatura no TID.


O código pra exibir na tela eu tirei umas linhas de exibição do texto "A/C" (vc usa multiplas linhas do jeito que tava quando vc tem um texto maior que 10 caracteres e precisa fazer scroll dele na tela, nesse caso o texto "A/C" da pra exibir numa tacada só). E coloquei o dtostrf aqui.

Código: Selecionar todos

void menu_Ac()
{
  if (flagAc == 0)
  {
    calcula_intervalo();
    if (intervaloMiliSecs < 100)
      mydisplay.display_message(F("A/C"),255);
    else if (intervaloSecs >= 4)
      flagAc = 1;
  }
  else if (flagAc == 1)
  {
    calcula_intervalo();
    if (intervaloMiliSecs >= 2000)
    {
      dtostrf(celsius,4,0,texttemp);
      sprintf(textfinal, "Ti %s c", texttemp);
      mydisplay.display_message(textfinal,254);
      exibe_simbolo_colchete();
      zera_intervalo();
    }
  }
}

A função para ligar e desligar o A/C vc tb colocou no atividade_led?
Se sim (o que eu acredito ser o caso) vc tb pode chamar ela uma vez a cada 30 segundos, cai na mesma situação que eu comentei aí em cima. Essa função aqui é interessante vc chamar ela logo depois de fazer a leitura de temperatura.

E o problema que eu desconfiei estar causando o EON acender com o carro ligado está aqui. Vc não pode acionar os símbolos toda hora, eles são as funções mais pesadas que tem no TID e acontece todo tipo de maluquice quando se faz isso.

Aqui eu vou sugerir também que vc procure as funções "exibe_simbolo_colchete" e "apaga_simbolo_colchete" e crie funções equivalentes para o símbolo 4, e o código de acionamento vai ficar assim:

Código: Selecionar todos

void re_ac()
{
 
  //Aciona o rele
  if ( celsius > 25 ){
  //digitalWrite(8, HIGH);
  exibe_simbolo_cr();
  }
  else if (celsius < 25) {
  //Desliga o rele
  //digitalWrite(8, LOW);
  apaga_simbolo_cr();
  }
}
ChavesHe
:: Super ::
Mensagens: 54
Registrado em: Sexta-feira 29 2016f Janeiro 2016 10:49:16 AM
Localização: Osasco - SP
Modelo do veiculo: CORSA HATCH PREMIUM 1.4 ECONOFLEX
Ano de fabricação: 2009

Mensagem por ChavesHe »

Canse,

Show de bola!

O rele aciona e desliga mas o simbolo cr não some da tela kkkk mas deve ser alguma coisa q eu fiz errado, vou olhar com calma e te falo.

Como pedido segue a chamada das funções.

Código: Selecionar todos

void coisas_a_fazer_sempre(bool extras)
{
  if (extras == 1)
  {
    /*
      Colocar dentro deste if a chamada de funções extras ao computador de bordo
      que vocês venham a desenvolver que precisem rodar em background e que em
      algum momento use a função "atraso".
      
      Dentro dessas funções extras que vocês criarem, use a função atraso com o 
      segundo parâmetro igual a 0, da seguinte forma "atraso(TempoEmMiliSegundos,0);"
      
      Esta ação é obrigatória para evitar um loop infinito.
      
      Caso a função extra não use a função "atraso" mas precise trabalhar em background
      (independente do menu selecionado no TID), faça a chamada para ela de fora
      deste if.
      
      Caso a função extra não precise rodar em background, pode chamá-la de dentro
      do "switch (IndiceMenu)" criando um menu específico para sua função.
    */
   
    

  }  
  /* Coloque logo abaixo a chamada de funções extras que não vão usar a função "atraso" 
     mas que precisam trabalhar em background */
 // LED_atividade();
  tempe_ac();
  re_ac(); 

  
  //Leitura do min e max da bateria
  int sensorValue = analogRead(A0);
  float voltage = sensorValue * (5.0 / 1023.0);
  vin = voltage / (R2/(R1+R2));
  if (vin < vmin)
  {
    vmin = vin;
  }
  if (vin > vmax)
  {
    vmax = vin;
  }
ChavesHe
:: Super ::
Mensagens: 54
Registrado em: Sexta-feira 29 2016f Janeiro 2016 10:49:16 AM
Localização: Osasco - SP
Modelo do veiculo: CORSA HATCH PREMIUM 1.4 ECONOFLEX
Ano de fabricação: 2009

Mensagem por ChavesHe »

ChavesHe escreveu:Canse,

Show de bola!

O rele aciona e desliga mas o simbolo cr não some da tela kkkk mas deve ser alguma coisa q eu fiz errado, vou olhar com calma e te falo.

Como pedido segue a chamada das funções.

Código: Selecionar todos

void coisas_a_fazer_sempre(bool extras)
{
  if (extras == 1)
  {
    /*
      Colocar dentro deste if a chamada de funções extras ao computador de bordo
      que vocês venham a desenvolver que precisem rodar em background e que em
      algum momento use a função "atraso".
      
      Dentro dessas funções extras que vocês criarem, use a função atraso com o 
      segundo parâmetro igual a 0, da seguinte forma "atraso(TempoEmMiliSegundos,0);"
      
      Esta ação é obrigatória para evitar um loop infinito.
      
      Caso a função extra não use a função "atraso" mas precise trabalhar em background
      (independente do menu selecionado no TID), faça a chamada para ela de fora
      deste if.
      
      Caso a função extra não precise rodar em background, pode chamá-la de dentro
      do "switch (IndiceMenu)" criando um menu específico para sua função.
    */
   
    

  }  
  /* Coloque logo abaixo a chamada de funções extras que não vão usar a função "atraso" 
     mas que precisam trabalhar em background */
 // LED_atividade();
  tempe_ac();
  re_ac(); 

  
  //Leitura do min e max da bateria
  int sensorValue = analogRead(A0);
  float voltage = sensorValue * (5.0 / 1023.0);
  vin = voltage / (R2/(R1+R2));
  if (vin < vmin)
  {
    vmin = vin;
  }
  if (vin > vmax)
  {
    vmax = vin;
  }
Achei o problema do cr.


Obs. Não sei como edita o post.
Responder
  • Tópicos Semelhantes
    Respostas
    Exibições
    Última mensagem

Voltar para “Tutoriais”