Índice:

Display do carro Arduino: 7 etapas (com imagens)
Display do carro Arduino: 7 etapas (com imagens)

Vídeo: Display do carro Arduino: 7 etapas (com imagens)

Vídeo: Display do carro Arduino: 7 etapas (com imagens)
Vídeo: Amazing arduino project 2024, Julho
Anonim
Image
Image
Arduino Car Display
Arduino Car Display
Arduino Car Display
Arduino Car Display

Eu construí um monitor baseado em diagnóstico on-board (OBD-II) usando um LCD TFT de 7 da Adafruit, um Teensy 3.6, o adaptador Freematics OBD-II I2C e alguns sensores de backup cheep que encontrei na Amazon. O monitor tem duas páginas: um para quando meu Honda Accord estiver em movimento e outro para quando estiver em marcha à ré.

Quando meu carro está em movimento, o RPM, MPH, porcentagem de carga do motor, tensão da bateria, temperatura da cabine e temperatura do líquido de arrefecimento do motor são exibidos (existem várias outras estatísticas do veículo disponíveis para exibição, se alguém não quiser).

Quando meu carro dá ré, o Teensy 3.6 compatível com o IDE do Arduino lê uma imagem de bitmap animada do meu carro que encontrei online, exibe-a e, em seguida, lê os sensores de backup. Cada um dos quatro sensores tem sua distância em pés mais uma animação atrás do carro que muda de cor com base na proximidade do objeto do carro (apenas verde significa <5 pés, verde e amarelo significa <2,6 pés, e verde, amarelo, e vermelho significa <1 pé).

Finalmente, adicionei a capacidade de escurecer a tela à noite.

O resultado final parece ótimo e funciona muito bem no meu carro. Acabei até instalando no console central, que foi um processo totalmente diferente que não vou entrar neste instrutível. A lista de peças que usei para criar este display LCD está abaixo.

1) Adaptador Freematics OBD-II - $ 35

2) Sensores de backup - $ 15

3) Display LCD TFT de 7 - $ 38

4) Driver de monitor LCD baseado em SPI - $ 35

5) Teensy 3,6 - $ 30

6) Level Shifter - $ 4

7) 74HC125 Tri State Buffer IC - US $ 6 pelo pacote de 2 (tenho certeza que você pode encontrar este cheeper em outro lugar)

8) Cartão MicroSD> = 1 GB - $ 4

9) Fio, capacitores e resistores.

10) LP3470-2.93 IC de reinicialização ao ligar - $ 2

11) (opcional): Sensor de Temperatura DS18B20 - $ 8

12) (opcional): Divisor OBD-II - $ 10

13) (opcional): Adicione um cabo de fusível do circuito - $ 8 para pacote de 5

Etapa 1: Lendo os sensores de backup

Lendo os sensores de backup
Lendo os sensores de backup
Lendo os sensores de backup
Lendo os sensores de backup
Lendo os sensores de backup
Lendo os sensores de backup
Lendo os sensores de backup
Lendo os sensores de backup

Esta etapa é complicada porque esses sensores de backup se comunicam com um transceptor e, em seguida, com um pequeno LCD, conforme visto na imagem acima. Eu queria uma maneira de me livrar do visor deles e usar o meu próprio. Com a ajuda de um site que encontrei após algumas pesquisas no Google (Hackeando sensores de estacionamento reverso), consegui ler o protocolo de comunicação proprietário que o transceptor envia para a tela LCD. Por alguma razão, o protocolo de comunicação não é típico, como I2C, UART, CAN, USB, etc. e o protocolo difere dependendo do fornecedor. Recomendo enfaticamente que você compre o conjunto que indiquei acima se for usar meu código, porque ele foi escrito especificamente para esses sensores.

Antes de desconectar o LCD fornecido por eles, examinei os três fios que ligam o transceptor e o LCD. Havia um fio vermelho de + 5 V, um fio terra preto e um fio azul. Depois de conectar meu osciloscópio ao fio azul e aterramento, vi um traço semelhante à imagem vista acima, mas não exatamente (usei a imagem do site no link acima). Meu rastreamento teve um bit de início de duração mais longa HIGH, seguido por 17 bits de duração mais curta. Os bits 0-5 após o bit de início não continham informações úteis. Os bits 6 a 8 correspondem ao sensor A, B, C ou D. Os bits 9 a 16 correspondem ao comprimento em metros. Incluí um esboço do IDE do Arduino que lê os sensores e envia os dados pelo console serial.

Etapa 2: Criar a imagem bitmap e colocá-la em um cartão MicroSD

Criar a imagem bitmap e colocá-la em um cartão MicroSD
Criar a imagem bitmap e colocá-la em um cartão MicroSD
Criar a imagem bitmap e colocá-la em um cartão MicroSD
Criar a imagem bitmap e colocá-la em um cartão MicroSD

Usei um software gratuito de edição de fotos chamado GIMP para cortar e redimensionar uma imagem do meu carro da vista de cima. Em seguida, exportei a imagem como uma imagem de bitmap de 24 bits chamada "car.bmp" que tem 110 pixels por 250 pixels. Eu carreguei isso em um cartão microSD e coloquei o cartão microSD em meu microcontrolador Teensy 3.6.

Os principais motivos pelos quais optei pelo Teensy 3.6 em vez do UNO foi a velocidade com que o Teensy podia ler um cartão SD e exibir a imagem usando o driver de vídeo RA8875. Usando um UNO, o processo levou cerca de 8 segundos, enquanto um Teensy 3.6 levou 1,8 segundos.

Etapa 3: Conectando o Hardware

Conectando o Hardware
Conectando o Hardware

A Adafruit tem um LCD TFT de 7 muito bonito que é acionado por um IC chamado RA8875. Eu escolhi este monitor e driver de vídeo por dois motivos. Primeiro, existem várias bibliotecas pré-escritas para o monitor. Segundo, o driver de vídeo pode se comunicar com qualquer microcontrolador sobre SPI, o que significa que não há muitos fios conectando o microcontrolador ao RA8875.

Existem duas desvantagens nesta configuração. O primeiro é o fato de que há um bug de hardware com a placa RA8875 da Adafruit exigindo o uso do IC de buffer tri-state 74HC125 se você quiser usar qualquer dispositivo baseado em SPI, como um cartão SD. Para entender mais completamente o bug de hardware, leia o seguinte fórum. Em segundo lugar, é o tempo relativamente longo que leva para as imagens serem enviadas ao LCD. Além disso, a longa quantidade de tempo que leva para uma imagem ser enviada ao LCD se deve à conexão SPI, que é limitada pela velocidade do relógio dos microntroladores e pela grande quantidade de dados que precisam ser enviados ao driver de vídeo durante muito poucos fios.

Eu criei um esquema do Fritzing para que qualquer pessoa que queira criar este display possa ler facilmente a quais pinos do Teensy 3.6 se conectam. Incluí um arquivo.frz abaixo. Os únicos dois componentes que não estão rotulados são os capacitores, que são um capacitor eletrolítico de 1F 16V e um capacitor de cerâmica 100μF. Incluí-os para garantir que a alimentação do microcontrolador Teensy fosse DC + 5V estável e não contivesse picos de tensão (pode não ser necessário, mas os incluí porque a alimentação de tensão de um carro pode flutuar rapidamente dependendo da carga da bateria).

Algumas coisas a serem mencionadas sobre os componentes. Primeiro, o deslocador de nível pega qualquer sinal de 5 V e o transforma em uma tensão segura Teensy 3.6 de 3,3 V. Isso é necessário para o adaptador OBD I2C, bem como para o transceptor do sensor de backup. Em segundo lugar, as linhas I2C dos adolescentes requerem resistores pull up de 4,7 kΩ. Terceiro, os quatro resistores conectando o "fio noturno" (o fio de escurecimento) e o "fio de engate reserva" são necessários para servir como um divisor de tensão para trazer os sinais de 12V-13V para cerca de 2,5-3V.

ATUALIZAÇÃO 22/07/18: Achei que o sensor de temperatura interno do módulo OBD-I2C estava exibindo números muito estranhos. Às vezes funcionava, mas na maioria das vezes, o módulo estava emitindo temperaturas acima de 400 graus F. Por causa disso, decidi adicionar meu próprio sensor de temperatura ds18b20. Você é mais que bem-vindo para usar qualquer tipo de sensor de temperatura aqui, mas terá que editar o código do Arduino.

ATUALIZAÇÃO 19/03/01: Teensy 3.6 não inicia quando está extremamente frio. Eu adicionei um circuito de reinicialização de energia para garantir que ele inicialize corretamente.

Etapa 4: Driver de vídeo RA8875 e design gráfico

Driver de vídeo RA8875 e design gráfico
Driver de vídeo RA8875 e design gráfico

O driver de vídeo RA8875 tem uma biblioteca chamada Adafruit_RA8875, que usei ao criar as formas que são vistas na primeira e na segunda página. A biblioteca do RA8875 só pode criar linhas, retângulos, retângulos arredondados, triângulos, elipses e círculos, portanto, os gráficos devem ser projetados de maneira inteligente para criar formas mais complexas. Por exemplo, o anel cinza na primeira página é, na verdade, um círculo cinza completo de diâmetro maior, seguido por um círculo preto completo de diâmetro menor. Além disso, uma pequena seção da página do sensor de backup contém 2 triângulos dispostos de forma que formem um polígono. Fiz isso para poder alterar a cor de uma seção individual da página do sensor de backup. O arquivo Arduino para a exibição contém uma matriz de pontos que usei para rastrear onde os triângulos e outras formas estavam.

Usei este ótimo site para escolher cores RGB565 e defini-las no esboço para que pudesse usar cores não padrão já predefinidas na biblioteca Adafruit_RA8875.

Em termos de fontes, a biblioteca Adafruit_RA8875 suporta apenas uma, a menos que você comente uma seção da biblioteca, o que permite usar as fontes da biblioteca Adafruit_GFX. Incluí a biblioteca Adafruit_RA8875 modificada abaixo. Eu apenas comentei algumas linhas de código e pude usar as fontes na biblioteca Adafruit_GFX. Além disso, para usar a fonte de 7 segmentos que usei neste projeto, certifique-se de que o arquivo "FreeSevenSegNumFont.h" que eu esteja na pasta fonts na biblioteca Adafruit_GFX.

Etapa 5: enviando o esboço

Carregando o Sketch
Carregando o Sketch
Carregando o Sketch
Carregando o Sketch

Para fazer o upload do esboço para um Teensy 3.6, você precisará instalar o Teensyduino. Em seguida, você precisará substituir as bibliotecas Adafruit_RA8875 e Adafruit_GFX no local da biblioteca diminuta (não em sua localização típica em documentos). No Mac, eu tinha que clicar com o botão direito do mouse no ícone do aplicativo Arduino nos aplicativos e navegar para / Contents / Java / hardware / teensy / avr / libraries. No Windows, tenho quase certeza de que está na unidade C em Arquivos de programas x86, Arduino e na pasta de hardware. Depois de fazer isso, você precisará alterar a localização do caderno de desenho no aplicativo Arduino editando-o nas preferências de onde suas bibliotecas menores estão (ou seja, /Applications/Arduino.app/Contents/Java/hardware/teensy/avr).

ATUALIZAÇÃO 22/07/16: Por causa do problema do sensor de temperatura interno que mencionei anteriormente, tive que instalar um sensor de temperatura do módulo DS18B20. Você verá 4 esboços do Arduino no arquivo zip. Carregue o esboço display_code se quiser usar o sensor de temperatura interno do módulo OBD-II I2C. Carregue o esboço display_code_with_new_temperature_sensor se quiser usar o módulo DS18B20 que eu vinculei acima.

ATUALIZAÇÃO 17/11/17: Corrigi vários bugs no software, incluindo o DS18B20 gerando uma temperatura de 185 Fahrenheit, a tela não ligava em tempo frio e os pixels ficavam presos na cor errada quando a tela estava escurecida.

Em seguida, use a imagem que tenho acima para ter certeza de que as configurações de sua adolescência correspondem à imagem. Descobri que fazer overclock no minúsculo para 240 MHz não permite que o adaptador I2C OBD-II se comunique com o minúsculo. Finalmente, basta clicar em upload.

Escrevi comentários bastante extensos nos arquivos de esboço do Arduino. Procure aqui uma explicação de como o software funciona. Sinta-se à vontade para entrar em contato comigo em caso de dúvidas. Tentarei respondê-las da melhor maneira possível. Boa sorte!

Etapa 6: imprimir em 3D uma caixa de LCD

Impressão 3D de uma caixa de LCD
Impressão 3D de uma caixa de LCD
Impressão 3D de uma caixa de LCD
Impressão 3D de uma caixa de LCD
Impressão 3D de uma caixa de LCD
Impressão 3D de uma caixa de LCD

Criei uma tampa superior e inferior de LCD impressa em 3D para proteger o monitor de 7 . Anexei os arquivos. IPT da peça do inventor, bem como os arquivos. STL.

Também incluí uma parte chamada backup_sensor_ring.ipt, que é um anel que se ajusta ao redor dos sensores de backup que vinculei acima. Meu carro já tinha orifícios pré-perfurados para sensores de backup que eram grandes demais para os sensores de backup que comprei na Amazon, então tive que criar um anel que caberia nos sensores de backup. Se você for perfurar seu pára-choque com a broca circular incluída no conjunto, não precisará dessa peça.

Etapa 7: Dividir a porta OBD-II para que o Arduino tenha energia apenas quando o carro estiver funcionando

Dividindo a porta OBD-II para que o Arduino tenha energia apenas quando o carro estiver funcionando
Dividindo a porta OBD-II para que o Arduino tenha energia apenas quando o carro estiver funcionando
Dividindo a porta OBD-II para que o Arduino tenha energia apenas quando o carro estiver funcionando
Dividindo a porta OBD-II para que o Arduino tenha energia apenas quando o carro estiver funcionando
Dividindo a porta OBD-II para que o Arduino tenha energia apenas quando o carro estiver funcionando
Dividindo a porta OBD-II para que o Arduino tenha energia apenas quando o carro estiver funcionando

Logo depois de instalar meu display, percebi que ele estava sempre ligado, mesmo quando o carro estava desligado. Olhando para a pinagem OBD-II, descobri que a linha de alimentação de 12 V para o conector OBD-II está sempre conectada diretamente à bateria.

Para contornar isso, comprei um divisor OBD-II, cortei o fio que vai para o pino 16 em um dos dois conectores no divisor e, em seguida, conectei esse fio cortado a um fio de circuito adicionado.

Então, usando meu multímetro, fui até a caixa de fusíveis do lado do motorista e testei os fusíveis existentes para ver qual fusível ligou depois que a chave foi colocada na ignição.

Por fim, conectei e adicionei um fio de circuito ao fusível que localizei, de forma que a tela agora só ligue quando meu carro estiver funcionando. Pesquise como adicionar um circuito ao seu carro de maneira adequada. Eu achei este tutorial do youtube bom.

Recomendado: