Inhoudsopgave:

Arduino Car Display: 7 stappen (met afbeeldingen)
Arduino Car Display: 7 stappen (met afbeeldingen)

Video: Arduino Car Display: 7 stappen (met afbeeldingen)

Video: Arduino Car Display: 7 stappen (met afbeeldingen)
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Juli-
Anonim
Image
Image
Arduino autodisplay
Arduino autodisplay
Arduino autodisplay
Arduino autodisplay

Ik bouwde een on-board diagnostics (OBD-II) gebaseerd display met een 7 TFT LCD van Adafruit, een Teensy 3.6, de Freematics OBD-II I2C Adapter, en een paar goedkope back-up sensoren die ik op Amazon vond. Het display heeft twee pagina's: een voor als mijn Honda Accord in de aandrijving staat en een voor als hij achteruit rijdt.

Als mijn auto aan het rijden is, worden het toerental, MPH, motorbelastingspercentage, accuspanning, cabinetemperatuur en motorkoelvloeistoftemperatuur weergegeven (er zijn verschillende andere voertuigstatistieken beschikbaar om weer te geven als u deze niet wilt).

Wanneer mijn auto achteruit rijdt, leest de Arduino IDE-compatibele Teensy 3.6 een geanimeerde bitmapafbeelding van mijn auto die ik online heb gevonden, geeft deze weer en leest vervolgens de back-upsensoren. De vier sensoren hebben elk hun afstand in voet plus een animatie achter de auto die van kleur verandert op basis van hoe dicht het object bij de auto is (alleen groen betekent < 5 voet, groen en geel betekent < 2,6 voet, en groen, geel, en rood betekent < 1 voet).

Ten slotte heb ik de mogelijkheid toegevoegd om het scherm 's nachts te dimmen.

Het eindresultaat ziet er geweldig uit en functioneert zeer goed in mijn auto. Uiteindelijk heb ik het zelfs in de middenconsole geïnstalleerd, wat een heel ander proces was waar ik in deze instructable niet op in zal gaan. De lijst met onderdelen die ik heb gebruikt om dit LCD-scherm te maken, staat hieronder.

1) Freematics OBD-II-adapter - $ 35

2) Back-upsensoren - $ 15

3) 7 TFT LCD-scherm - $ 38

4) Op SPI gebaseerde LCD-schermstuurprogramma - $ 35

5) Teensy 3.6 - $ 30

6) Niveauverschuiver - $ 4

7) 74HC125 Tri State Buffer IC - $ 6 voor 2-pack (ik weet zeker dat je deze goedkopere ergens anders kunt vinden)

8) MicroSD-kaart >= 1 GB - $ 4

9) Draad, condensatoren en weerstanden.

10) LP3470-2.93 Power on Reset IC - $2

11) (optioneel): DS18B20 temperatuursensor - $ 8

12) (optioneel): OBD-II-splitter - $ 10

13) (optioneel): voeg een zekeringsnoer toe - $ 8 voor een pakket van 5

Stap 1: Lezen van de back-upsensoren

De back-upsensoren uitlezen
De back-upsensoren uitlezen
De back-upsensoren uitlezen
De back-upsensoren uitlezen
De back-upsensoren uitlezen
De back-upsensoren uitlezen
De back-upsensoren uitlezen
De back-upsensoren uitlezen

Deze stap is lastig omdat deze back-upsensoren communiceren met een zendontvanger en vervolgens met een klein LCD-scherm, zoals te zien is in de bovenstaande afbeelding. Ik wilde een manier om van hun display af te komen en die van mij te gebruiken. Met behulp van een website die ik na wat googlen (Hacken van achteruitparkeersensoren) vond, kon ik het eigen communicatieprotocol lezen dat de transceiver naar het LCD-scherm stuurt. Om de een of andere reden is het communicatieprotocol niet typisch zoals I2C, UART, CAN, USB, enz. en verschilt het protocol per leverancier. Ik raad je ten zeerste aan om de set te kopen die ik hierboven heb gekoppeld als je mijn code gaat gebruiken, omdat deze speciaal voor die sensoren is geschreven.

Voordat ik het LCD-scherm loskoppelde dat ze hadden geleverd, onderzocht ik de drie draden die de transceiver en het LCD-scherm verbinden. Er was +5V rode draad, zwarte aardedraad en een blauwe draad. Nadat ik mijn oscilloscoop op de blauwe draad en aarde had aangesloten, zag ik een spoor dat leek op de afbeelding hierboven, maar niet precies (ik gebruikte de afbeelding van de hierboven gelinkte website). Mijn trace had een HOGE startbit met een langere duur, gevolgd door nog 17 bits met een kortere duur. De bits 0-5 na de startbit hadden geen bruikbare informatie. Bits 6-8 komen overeen met sensor A, B, C of D. Bits 9-16 komen overeen met de lengte in meters. Ik heb een Arduino IDE-schets toegevoegd die de sensoren leest en de gegevens via de seriële console uitvoert.

Stap 2: De bitmapafbeelding maken en op een MicroSD-kaart plaatsen

De bitmapafbeelding maken en op een MicroSD-kaart plaatsen
De bitmapafbeelding maken en op een MicroSD-kaart plaatsen
De bitmapafbeelding maken en op een MicroSD-kaart plaatsen
De bitmapafbeelding maken en op een MicroSD-kaart plaatsen

Ik gebruikte een gratis fotobewerkingssoftware genaamd GIMP om een afbeelding van mijn auto bij te snijden en te vergroten/verkleinen vanuit het bovenaanzicht. Vervolgens heb ik de afbeelding geëxporteerd als een 24-bits bitmapafbeelding met de naam "car.bmp" van 110 bij 250 pixels. Ik heb dit geüpload naar een microSD-kaart en de microSD-kaart in mijn Teensy 3.6-microcontroller gestopt.

De belangrijkste redenen waarom ik voor de Teensy 3.6 koos in plaats van een UNO, was de snelheid waarmee de Teensy een SD-kaart kon lezen en het beeld kon weergeven met behulp van het RA8875-beeldschermstuurprogramma. Met behulp van een UNO duurde het proces ongeveer 8 seconden, terwijl een Teensy 3.6 1,8 seconden duurde.

Stap 3: De hardware aansluiten

De hardware aansluiten
De hardware aansluiten

Adafruit heeft een echt goed uitziende 7 TFT LCD die wordt aangedreven door een IC genaamd de RA8875. Ik heb om twee redenen voor dit beeldscherm en beeldschermstuurprogramma gekozen. Ten eerste zijn er uitgebreide bibliotheken voor het beeldscherm geschreven. Ten tweede kan het beeldschermstuurprogramma praten met elke microcontroller via SPI, wat betekent dat er niet zoveel draden zijn die de microcontroller met de RA8875 verbinden.

Er zijn twee nadelen aan deze opstelling. Ten eerste is er een hardwarefout met het RA8875-bord van Adafruit waarvoor het gebruik van de 74HC125 tri-state buffer-IC nodig is als je een op SPI gebaseerd apparaat zoals een SD-kaart wilt gebruiken. Lees het volgende forum om de hardwarebug beter te begrijpen. Ten tweede is er de relatief lange tijd die nodig is om afbeeldingen naar het LCD-scherm te sturen. De lange tijd die nodig is om een afbeelding naar het LCD-scherm te sturen, is ook te wijten aan de SPI-verbinding, die wordt beperkt door de kloksnelheid van de microntrollers en de grote hoeveelheid gegevens die naar het beeldschermstuurprogramma moet worden verzonden via zeer weinig draden.

Ik heb een Fritzing-schema gemaakt, zodat iedereen die dit scherm wil maken, gemakkelijk kan lezen met welke pinnen op de Teensy 3.6 verbinding wordt gemaakt. Ik heb hieronder een.frz-bestand opgenomen. De enige twee componenten die niet zijn gelabeld, zijn de condensatoren, die een 1F 16V elektrolytische condensator en een 100μF keramische condensator zijn. Ik heb deze toegevoegd om ervoor te zorgen dat de stroom naar de Teensy-microcontroller constant gelijkstroom + 5 V was en geen spanningspieken bevat (misschien niet nodig, maar ik heb ze toegevoegd omdat de spanningstoevoer van een auto snel kan fluctueren, afhankelijk van de belasting van de batterij).

Een paar dingen om te vermelden over de componenten. Ten eerste neemt de niveauverschuiver elk 5V-signaal en verandert het in een veilige spanning van 3,3V Teensy 3.6. Dit is nodig voor zowel de OBD I2C-adapter als de back-upsensor-transceiver. Ten tweede vereisen de I2C-lijnen van de tiener 4.7kΩ pull-up-weerstanden. Ten derde zijn de vier weerstanden die de "nachtdraad" (de dimdraad) en de "back-up-aangrijpdraad" verbinden, nodig om als spanningsdeler te dienen om de 12V-13V-signalen terug te brengen tot ongeveer 2,5-3V-signalen.

UPDATE 22-7-2018: Ik vond dat de interne temperatuursensor van de OBD-I2C-module zeer vreemde cijfers afleverde. Soms werkte het, maar meestal produceerde de module temperaturen boven 400 graden F. Daarom besloot ik mijn eigen ds18b20-temperatuursensor toe te voegen. Je bent van harte welkom om hier elk type temperatuursensor te gebruiken, maar je zult de Arduino-code moeten bewerken.

UPDATE 1-3-19: Teensy 3.6 start niet als het extreem koud is. Ik heb een power-on-resetcircuit toegevoegd om ervoor te zorgen dat het goed opstart.

Stap 4: RA8875-beeldschermstuurprogramma en grafisch ontwerp

RA8875 Displaystuurprogramma en grafisch ontwerp
RA8875 Displaystuurprogramma en grafisch ontwerp

Het RA8875-beeldschermstuurprogramma heeft een bibliotheek met de naam Adafruit_RA8875, die ik heb gebruikt bij het maken van de vormen die op de eerste pagina en de tweede pagina te zien zijn. De bibliotheek voor de RA8875 kan alleen lijnen, rechthoeken, afgeronde rechthoeken, driehoeken, ellipsen en cirkels maken, dus de afbeeldingen moeten op een slimme manier worden ontworpen om complexere vormen te creëren. De grijze ring op de eerste pagina is bijvoorbeeld een volledig grijze cirkel met een grotere diameter, gevolgd door een volledig zwarte cirkel met een kleinere diameter. Ook bevat een klein gedeelte van de back-upsensorpagina 2 driehoeken die zo zijn gerangschikt dat ze een polygoonvorm vormen. Ik deed dit zodat ik de kleur van een afzonderlijk gedeelte van de back-upsensorpagina kon veranderen. Het Arduino-bestand voor het display bevat een reeks punten die ik gebruikte om bij te houden waar de driehoeken en andere vormen waren.

Ik heb deze geweldige website gebruikt om RGB565-kleuren te kiezen en deze in de schets te definiëren, zodat ik niet-standaardkleuren kon gebruiken die al vooraf waren gedefinieerd in de Adafruit_RA8875-bibliotheek.

Wat lettertypen betreft, ondersteunt de Adafruit_RA8875-bibliotheek er slechts één, tenzij u commentaar geeft op een gedeelte van de bibliotheek, waardoor u de lettertypen van de Adafruit_GFX-bibliotheek kunt gebruiken. Ik heb de gewijzigde Adafruit_RA8875-bibliotheek hieronder opgenomen. Ik heb zojuist een paar regels code uitgeschreven en kon toen de lettertypen in de Adafruit_GFX-bibliotheek gebruiken. Om het lettertype met 7 segmenten te gebruiken dat ik in dit project heb gebruikt, moet u ervoor zorgen dat het bestand "FreeSevenSegNumFont.h" zich in de map met lettertypen in de Adafruit_GFX-bibliotheek bevindt.

Stap 5: De schets uploaden

De schets uploaden
De schets uploaden
De schets uploaden
De schets uploaden

Om de schets naar een Teensy 3.6 te uploaden, moet je Teensyduino installeren. Dan moet je de Adafruit_RA8875- en Adafruit_GFX-bibliotheken vervangen in de tienerbibliotheeklocatie (niet je typische locatie in documenten). Op Mac moest ik met de rechtermuisknop op het Arduino-toepassingspictogram in toepassingen klikken en vervolgens navigeren naar /Contents/Java/hardware/teensy/avr/libraries. Op Windows ben ik er vrij zeker van dat het zich onder je C-schijf bevindt in Programmabestanden x86, Arduino en dan de hardwaremap daar. Zodra u dat doet, moet u de locatie van het schetsboek in de Arduino-toepassing wijzigen door deze in de voorkeuren te bewerken naar waar uw tienerbibliotheken zich ook bevinden (d.w.z. /Applications/Arduino.app/Contents/Java/hardware/teensy/avr).

UPDATE 22-07-16: Vanwege het probleem met de interne temperatuursensor waar ik het eerder over had, moest ik een temperatuursensor van de DS18B20-module installeren. Je ziet 4 Arduino-schetsen in het zipbestand. Upload de display_code-schets als u de interne temperatuursensor van de OBD-II I2C-module wilt gebruiken. Upload de display_code_with_new_temperature_sensor-schets als je de DS18B20-module wilt gebruiken die ik hierboven heb gelinkt.

UPDATE 17-11-17: Ik heb verschillende bugs in de software opgelost, waaronder de DS18B20 die een temperatuur van 185 Fahrenheit uitvoerde, het scherm gaat helemaal niet aan bij koud weer en pixels die vast komen te zitten in de verkeerde kleur wanneer het scherm wordt gedimd.

Gebruik vervolgens de afbeelding die ik hierboven heb om ervoor te zorgen dat uw tienerinstellingen overeenkomen met de afbeelding. Ik ontdekte dat het overklokken van de tiener tot 240 MHz de I2C OBD-II-adapter niet toestond om met de tiener te communiceren. Klik ten slotte op uploaden.

Ik schreef behoorlijk uitgebreide opmerkingen in de arduino-schetsbestanden. Kijk daar voor een uitleg over hoe de software werkt. Neem bij vragen gerust contact met mij op. Ik zal proberen ze zo goed mogelijk te beantwoorden. Veel geluk!

Stap 6: 3D-print een LCD-behuizing

3D-print een LCD-behuizing
3D-print een LCD-behuizing
3D-print een LCD-behuizing
3D-print een LCD-behuizing
3D-print een LCD-behuizing
3D-print een LCD-behuizing

Ik heb een boven- en onderdeksel van een 3D-geprint LCD-scherm gemaakt om het 7 -scherm te beschermen. Ik heb de. IPT-uitvindersdeelbestanden en de. STL-bestanden bijgevoegd.

Ik heb ook een onderdeel toegevoegd met de naam backup_sensor_ring.ipt, een ring die past rond die back-upsensoren die ik hierboven heb gelinkt. Mijn auto had al voorgeboorde gaten voor de reservesensoren die te groot waren voor de reservesensoren die ik op Amazon had gekocht, dus ik moest een ring maken die op de reservesensoren zou passen. Als je in je bumper gaat boren met het meegeleverde ronde boorstuk in de set, dan heb je dit onderdeel niet nodig.

Stap 7: OBD-II-poort splitsen, zodat Arduino alleen stroom heeft als de auto draait

OBD-II-poort splitsen, zodat Arduino alleen stroom heeft als de auto rijdt
OBD-II-poort splitsen, zodat Arduino alleen stroom heeft als de auto rijdt
OBD-II-poort splitsen, zodat Arduino alleen stroom heeft als de auto rijdt
OBD-II-poort splitsen, zodat Arduino alleen stroom heeft als de auto rijdt
OBD-II-poort splitsen, zodat Arduino alleen stroom heeft als de auto rijdt
OBD-II-poort splitsen, zodat Arduino alleen stroom heeft als de auto rijdt

Ik realiseerde me kort na het installeren van mijn display dat het display altijd aan was, zelfs als de auto uit stond. Toen ik naar de OBD-II-pinout keek, ontdekte ik dat de 12V-voedingslijn naar de OBD-II-connector altijd rechtstreeks op de batterij is aangesloten.

Om dit te omzeilen, kocht ik een OBD-II-splitter, knipte de draad door naar pin 16 op een van de twee connectoren op de splitter en verbond die afgeknipte draad vervolgens met een circuitdraad.

Vervolgens ging ik met mijn multimeter naar de zekeringkast aan de bestuurderszijde en testte de bestaande zekeringen om te zien welke zekering stroom kreeg nadat de sleutel in het contact was gedraaid.

Ten slotte heb ik de add-a-circuitdraad aangesloten op de zekering die ik heb gevonden, zodat het display nu alleen wordt ingeschakeld als mijn auto rijdt. Doe wat onderzoek naar hoe u een circuit op de juiste manier aan uw auto kunt toevoegen. Ik vond deze youtube-tutorial een goede.

Aanbevolen: