Ducati.ms - The Ultimate Ducati Forum banner

M696 Android Dashboard met Arduino

57K views 73 replies 19 participants last post by  arbtin  
#1 ·
Ik werk al geruime tijd aan dit project, dus het is tijd om mijn ideeën en gedachten te delen. Vorig jaar was ik op zoek naar navigatie en navigatiebevestigingen voor mijn Monster 696. Na lang zoeken kwam ik tot de conclusie dat alle bevestigingen de esthetiek van de motor zouden 'verpesten'. De enige logische plek voor een navigatiesysteem zou op het dashboard zijn, het heeft zelfs de juiste afmetingen. Maar er is natuurlijk een probleem. Als je daar een navigatiesysteem plaatst, blokkeert het je cruciale motorgegevens, zoals toerental, nauwkeurige snelheid, neutraal, etc. mmm

Maar wacht eens, heeft de m696 geen DDA-poort? En kunnen we de gegevens daar niet van lezen? Ja, dat kunnen we (bus)!

Dus ik kocht een Arduino en een canbus-shield en begon met loggen. Op basis van deze post, dacht ik dat het mogelijk moest zijn en na een paar lange dagen zoeken vond ik de antwoorden in de enorme datalogs. Een matrix van de canbus-id's en bytes is hier te vinden.

De volgende stap is het dashboard zelf. Omdat Android het meest open platform is en veel navigatiesystemen beschikbaar heeft, was het de voor de hand liggende keuze. Ik had een manier nodig om mijn motorgegevens weer te geven en toch de navigatie op de achtergrond te tonen. Gelukkig ondersteunt Android zwevende vensters bovenop andere applicaties, een eerste concept van de software ziet er ongeveer zo uit:
Image


Ik denk er ook over om verschillende weergaven te creëren, die je met de normale knoppen op het stuur kunt wisselen, zodat je ook een volledig scherm dashboard kunt krijgen.

En het laatste deel is misschien wel het lastigste deel. Hoe zit het met de esthetiek? Welnu, daar is een oplossing voor, 3D-printen. En dat is een compleet nieuwe wereld voor mij. Dus mijn eerste revisie zag er zo uit:

Image


Ik heb het zo ontworpen dat het originele dashboard er nog steeds is, zonder de afdekking, en een Android Motorola-telefoon eronder past. Het oorspronkelijke plan was om de normale lampjes voor neutraal, knipperlichten, etc. te behouden. Maar het blijkt dat er gewoon niet genoeg ruimte is, zelfs niet als je probeert het licht met plexiglas naar een andere positie te 'geleiden'.

Dus ik moest meer informatie over de CANBUS vinden, zodat ik de originele indicatoren en een beter ontwerp kon overslaan. En met een beetje hulp werd het volgende ontwerp een stuk beter:

Image


Image

Er is nog veel werk te doen, zoals het maken van een goede voedingskabel voor de Arduino met de juiste spanningsregelaars, het refactoren van veel code op zowel Android als Adruino en het maken van een goede pasvorm voor de nieuwe cover. Ik zal de foto's plaatsen zodra de volgende 3D-print arriveert.
 

Attachments

#2 ·
Ik kan me niet eens voorstellen wat je allemaal hebt meegemaakt om zover te komen, maar ik ben IMPONEERD!!! Zoals ze zeggen: "Noodzaak is de moeder der uitvinding". Succes, en beschouw dit serieus als een bedrijf!! De meeste BMW RT / LT-rijders zouden de hoofdprijs betalen voor deze functie.
 
#3 ·
Bedankt jduke, inderdaad, het is een helse reis geweest, er waren veel dagen (en nachten) dat ik het voor gezien zou houden.....

Veel mensen zeggen dat ik er iets commercieels mee moet doen, dus misschien zit er wel iets in, momenteel doe ik het gewoon voor de uitdaging en de lol ;)
 
#8 ·
De startonderbreker zoekt naar een bepaalde frequentiecode van de sleutel (of andersom...) voordat hij start. Misschien zou je de code kunnen "lezen" en in het dashboard kunnen programmeren?? Dat zou natuurlijk de beveiliging die de startonderbreker zou moeten bieden, tenietdoen, maar ik heb meer meldingen van problemen gehoord dan succesverhalen. Zoals ik in een eerdere post al zei, ik heb geen idee wat foske heeft meegemaakt, maar ik heb er vertrouwen in dat als het kon, hij het zou kunnen.
 
#9 ·
Bedankt allemaal voor de positieve feedback! @0612Devil, vanwege de startonderbreker heb ik ervoor gekozen om het dashboard niet te verwijderen, maar de telefoon erop te leggen. Ik heb de bovenste plastic afdekking verwijderd om ruimte te creëren. Maar het is een interessant idee om het originele dashboard volledig te verwijderen, maar op dit moment is daar geen echte behoefte aan.
 
#12 · (Edited)
Dus, ik heb de nieuw gedrukte cover ontvangen, en ik moet zeggen, hij ziet er geweldig uit :D

Er zijn een paar problemen met het ontwerp, maar dat was te verwachten:
- De volumeknop zit vast omdat we hem te strak hebben gemaakt, zoals je op het scherm kunt zien
- hij is niet diep genoeg om goed te passen
- De usb-kabel past nog niet, we moeten er meer ruimte voor maken.
- Het gat voor het scherm moet iets beter uitgelijnd zijn

En het beste van alles, we hebben de achtervoering gemaakt door gewoon een foto te traceren, en dat past heel strak en mooi. (Op de foto staat hij iets lager omdat de schroeven niet pasten).

(de foto's zijn niet zo goed... Windows Phone :|)
 

Attachments

#14 ·
Bedankt Matt360x!

Vandaag heb ik deze full-screen interface geschetst voor wanneer je niet aan het navigeren bent. Ik dacht ook aan een soort racemodus, maar ik wil graag van jullie weten wat voor soort info jullie daarop zouden willen zien. Ideeën?
Een paar dingen die in me opkwamen:
- Rondetijden (gebaseerd op gps-coördinaten?)
- Track map, met je locatie erop (en nog beter, je concurrenten als ze uitgerust zijn met dezelfde GPS tracker)
 

Attachments

#15 ·
Hallo foske, ik wilde je laten weten dat we aan zeer vergelijkbare projecten werken, hoewel ik me op dit moment op een ander aspect concentreer. ;)

Neem het volgende met een korreltje zout:
Ik geloof dat het mogelijk is om de startonderbreker in de Monster 696-serie ECU's uit te schakelen, ik heb het zien adverteren door MotoWheels (leverancier van Rexxer).
Misschien kunt u contact met hen opnemen en ontdekken of het dashboard ook verwijderd kan worden.
Het dashboard heeft enkele missiekritieke sensoren, zoals luchtdruk, die de motorfiets al dan niet kunnen laten starten als ze ontbreken.

Het is echter mogelijk om deze sensoren te emuleren met uw Arduino. ;)
Ik stel voor om het verkeer onmiddellijk te onderzoeken wanneer u de motorfiets inschakelt.
Ik heb geen 696, maar met de apparatuur die ik heb gemaakt, zou het mogelijk zijn om verder onderzoek te doen.

Voorlopig zal ik mijn oorspronkelijke doel blijven nastreven, maar ik ben van plan uw werk nauwlettend in de gaten te houden.
Ik kijk uit naar uw slimme oplossingen voor de uitdagingen waar u van geniet! :D
 
#16 ·
Bedankt voor het advies Impulsive_duc. Ik ben momenteel niet op zoek naar een manier om de startonderbreker te verwijderen, ik vind de extra bescherming die het biedt fijn ;), maar het is goed om te weten dat het mogelijk is.

Momenteel probeer ik een conflict op te lossen tussen mijn canbus shield en de usb host shield. Ik heb de pinnen al veranderd omdat beide shields pin 9 gebruiken, maar om de een of andere reden worden op dit moment, als beide shields tegelijkertijd werken, mijn RPM- en snelheidsgegevens gerapporteerd als 0x00000000. Andere canbus-id's rapporteren normaal gegevens, dus ik denk dat het in de software zit, niet in de hardware.

Ik zou erg geïnteresseerd zijn om uw bibliotheek te zien, dus als u ervoor bent, plaats deze dan op github ;) Ik zal proberen dat ook voor dit project te doen.
 
#17 · (Edited)
Welke shields en mainboard gebruik je? Als je een link naar hun datasheet pagina/wiki kunt geven, zou dat beter zijn. Ik vermoed dat je een Arduino gebruikt met een speciale SPI-header, niet de "Arduino Uno R3" pinnen 10-13 SPI?

(Edit: Ik heb je bericht opnieuw gelezen, je hebt het SPI CS pin probleem al aangepakt. :) Dus ik heb hier de dubbele beschrijving verwijderd.)

Je moet mogelijk de bibliotheek bewerken om toegang te krijgen tot de CS-pinnen via Register in plaats van DigitalWrite, aangezien de DigitalWrite-functie in Arduino gewoon te traag is. (~120ms schakelen?)

Gebruik je ook de CANbus ID-filtermogelijkheid van de MCP2515 of luister je naar alle gegevens op de bus en gebruik je logica binnen je Arduino-code? Zoals de standaard MCP2515-bibliotheek is gecodeerd, is deze EXTREEM inefficiënt. Om een CAN-pakket te lezen, geeft het meer dan 5 SPI CS/schrijf/lees-reeksen uit. Ik heb de bibliotheek verslankt om slechts 1 SPI CS/schrijf/leestransactie uit te voeren om een pakket te lezen. Voor CANbus-ID's met lage arbitrage en een extreem hoge frequentie, zoals RPM en Speed, kan de standaardbibliotheek de SPI-bus gemakkelijk overweldigen. Dit geldt met name als je Arduino's gebruikt met een limiet van 8 MHz (of zelfs 4 MHz!!) SPI prescaler frequentie.

Ik ben erg geïnteresseerd om te weten welk Arduino-apparaat je gebruikt dat zo'n mooi display heeft! Ik weet eigenlijk niet hoe ik GIT moet gebruiken. :) Ik heb er eerder geen tijd in gestoken, omdat ik waarschijnlijk iets doms zal doen, zoals de code van iemand anders overschrijven! Ik vraag CKelley om hulp daarbij, stuur me een PM waar ik moet e-mailen wat ik momenteel heb.
 
#18 ·
PS: Ik heb uw CANbus ID spreadsheet gelezen, heel erg bedankt voor het plaatsen ervan. :) MrCanBus zou erg blij zijn. We moeten dit allemaal online plaatsen, bewerkbaar op één plek, zoals Google Docs, zodat iedereen kan bijdragen. :)

Omdat ik geen tegenstrijdige spreadsheets wil plaatsen, zal ik het PRECIES bestand linken dat ik corrigeer en de correcties tekstueel beschrijven:


Gasklepstand: U zei dat Byte-0 van PID-0x81 varieert tussen 0x1 en 0xc9. Zou dit TPS kunnen zijn als (0xc9 >> 1) in {0.0 - 100.0%} met behulp van {.5%} stappen? Dit zou overeenkomen met wat ik zie in de Siemens firmware...
0xc9 = 201, 0x01 = 1
(201-1) / 2 = 100.0
(1 - 1) / 2 = 0.0​

Motortemperatuur: U vermeldt dit onder PID-0x211 als "Spanning??". Maar uit mijn ervaring met het bewerken van Ducati firmware kan ik u vertellen dat Ducati temperaturen intern bijna universeel opslaat met behulp van "X - 40" conversie. (d.w.z. 30 DEC in f/w betekent -10 'C)

Daarom denk ik dat Byte-1 van PID-0x211 in feite Motortemperatuur is. Het is logisch, aangezien Luchttemperatuur Byte-3 is.

Spanning: Omdat dit informatie met lage prioriteit is, denk ik dat deze in een ID met hoge arbitrage zou staan. Dus waarschijnlijk in PID-0x300. Ik vermoed dat Byte-1 Spanning/10 is om dezelfde reden dat u dacht dat het motortemperatuur was.

Dash tekst: Dit wordt opgeslagen in PID-0x280 en PID-0x290 als ASCII gecodeerde tekst. Het brengt de mogelijkheid met zich mee om het welkomstbericht te vervalsen met een slimme codering. :)
 
#25 · (Edited)
SPREADSHEET BEING CORRECTED:

................
Negeer alles wat ik daar zei. Verdomme, ik wou dat dit forum je technische opmerkingen liet bewerken.... :mad:
Ik heb je datalogs doorgenomen en mijn spreadsheets bijgewerkt naar de site van MrCanBus. Ik heb (denk ik) het volgende gevonden:
  • Snelheid (ABS + ECU, 2 kopieën -- 1 kan de voorwielencoder zijn voor DTC)
  • RPM (ABS + ECU, 2 kopieën -- kan gerelateerd zijn aan DTC)
  • TPS (2 kopieën -- 1 kan APS zijn voor DTC)
  • Tijd + Kilometerstand + Dash-tekst
  • Neutraal + (Mogelijk) Zijstandaard + Run-schakelaar + Koppeling
  • Motortemperatuur + Luchttemperatuur
  • Luchtdruk
  • Spanning
Ik heb nog steeds je hulp nodig bij het loggen van gegevens. Ik bezit er niet eens een. :p
Veel van het bovenstaande zijn slechts weloverwogen gissingen. Zeer weloverwogen gissingen, maar toch gissingen.
 
#20 · (Edited)
Ja, we zouden zeker een centrale Excel-matrix moeten opzetten, ik zal proberen je opmerkingen te testen en ze aan de matrix toe te voegen. Misschien is de trage SPI-bus de reden dat ik een aantal tegenstrijdige berichten zie...

Ter informatie, ik gebruik momenteel deze setup:
- Arduino Uno R3
- Seed studio canbus
- Keyes host shield
- buck converter (om de interne regulator te omzeilen om stroom te leveren als er geen laptop is aangesloten)

En bedankt voor het aanbod Goayala, het is zeker iets waar ik over nadenk, misschien voor in de toekomst als het prototype zijn eerste run heeft gehad :)
 
#21 ·
Image


Oh wow.

Een paar directe gedachten:
» Wow, dit is episch.
» In plaats van Arduino wil je een ChipKit gebruiken, omdat die snel genoeg kunnen werken om acceptabele graphics te maken. Plus er is een framebuffer-bibliotheek voor.
» Je kunt harsen en mallen gebruiken om eenvoudig het uiteindelijke dashboard te maken. Het mooie is dat je een 3D-geprint onderdeel kunt schuren en afwerken en dat die nu perfecte afwerking het hoofdonderdeel wordt.
» We hebben iets nodig als GitHub, maar dan voor code, CAD-tekeningen en documenten. (Ik haat GitHub ook, het is te moeilijk om workflows op te zetten)
» Zodra de software- en elektronicavereisten zijn afgerond, zullen we de goedkoopste hardware bepalen die het kan uitvoeren. We hebben waarschijnlijk geen aangepaste PCB nodig, aangezien de cruciale beperking het scherm zal zijn.

Over de software voor het scherm:
» Als elke functie in modules zou worden gemaakt, zou het voor de gebruiker (de persoon die op de fiets rijdt) gemakkelijk zijn om functies toe te voegen en te verwijderen.

En voor het geval je het niet hebt gemerkt... WOW!
Chris
 
#22 ·
foske, dit is indrukwekkend werk. Ik heb mijn iPhone 6+ tijdens een trackdag over mijn dashboard vastgemaakt om Harry's Timer te gebruiken in combinatie met een Vbox Sport voor timing en realiseerde me hoe gebrekkig de displays op de meeste motoren zijn. Ik zal je draad met interesse volgen.

Uit nieuwsgierigheid, weet je hoe je de lichtsensor kunt foppen zodat hij denkt dat het altijd donker is? Ik gok dat het een kwestie is van de sensor afdekken, maar ik weet niet zeker of hij toegankelijk is in het display. Ik vind het verzonken display op mijn '12 M1100 moeilijk te lezen. Dat zou een kleine overwinning zijn als het display gemakkelijker te lezen was.
 
#23 ·
Bedankt Chris, even een snelle reactie op je suggesties:
De belangrijkste focus van dit project was het toevoegen van navigatie, en er is veel goede navigatiesoftware voor Android. Dus ik wil me daarvoor aan Android houden. Het enige dat de Arduino doet, is het doorsturen van de canbus-berichten, de graphics worden door Android afgehandeld. Momenteel gebruik ik een Motorola G, maar dat is zeker overkill. De Chipkit klinkt interessant. Ken je projecten die navigatiesoftware op de Chipkit draaien?

De suggestie van harsen en mallen klinkt interessant, ik zal het bekijken.

Voor de software heb ik op dit moment een Android-service gemaakt die de data uitzendt. Het toevoegen van schermen of functionaliteit is dus relatief eenvoudig. (Zelfs voor verschillende apps, denk ik)
Ik wil de hardwareknoppen op het stuur gebruiken om tussen schermen te schakelen. Dus ik heb een paar optocouplers besteld om aan te sluiten op het elektrische systeem, omdat ik niet denk dat ze op de bus zitten. Net als de indicatoren.

@quito: Bedankt! Ik had niet de kans (moed) om data terug te schrijven. Ik denk dat de sensor en de achtergrondverlichting een gesloten circuit in het dashboard zijn, maar ik weet het niet zeker.
 
#27 ·
Bedankt Chris, even een snelle reactie op je suggesties:
De belangrijkste focus van dit project was het toevoegen van navigatie, en er is veel goede navigatiesoftware op Android. Dus ik wil me daarvoor aan Android houden. Het enige dat de Arduino doet, is het doorsturen van de canbus-berichten, de graphics worden door Android afgehandeld. Momenteel gebruik ik een Motorola G, maar dat is zeker overkill. De Chipkit klinkt interessant. Ken je projecten die navigatiesoftware op de Chipkit draaien?

De suggestie van de harsen en mallen klinkt interessant, ik zal het bekijken.
Ah, navigatie, juist. DAT komt op Android... maar nu moet ik mijn hoofd buigen over het concept van hoe ik een MCU (chipKIT, arduino, etc) daarmee kan combineren. Want als de codering voor Android generiek genoeg is, haalt dat het GUI-werk uit het embedded platform...

Chris
 
#24 ·
Yep, interessant spul. :) Hoewel hij tegen dezelfde CAN-problemen aanloopt als wij of de datalogger. Ik heb foske mijn geoptimaliseerde bibliotheken gegeven om een aantal gegevenscorruptiefouten te proberen op te lossen. (Uiteindelijk heb ik de libs onder de GPL geplaatst, aangezien voor zover ik weet niemand anders de siliconen fix voor de MCP2515-controller heeft gecodeerd.) Alle wegen leiden naar Rome. :p

We moeten deze projecten op gang brengen. Velen liggen al jaren te verpieteren, simpelweg omdat alle info te verspreid was. foske moet nog zijn PID-toewijzingen verifiëren, en ik vraag MrCanBus of hij de master spreadsheet wil hosten. Ik heb ruwe can dumps nodig om hem te helpen, hoewel... geldige, duidelijk gedocumenteerde.

Denk je dat je CannedIce's fiets als testmuilezel kunt aanbieden? Ik kan je de stekkers sturen die je nodig hebt om de ChipKit-logger in de kabelboom te steken, en de code om naar SD te loggen (als ik MrCanBus's eenmaal heb geporteerd).
 
#26 ·
Ik heb veel gewerkt aan het finetunen van het project op alle fronten. 3d, Arduino en Android. Veel hulp kwam van Impulsive_duc, dus heel erg bedankt daarvoor! We hebben goede vooruitgang geboekt bij het identificeren van de gegevens die op CANBUS staan, https://docs.google.com/spreadsheet...dsheets/d/1-NJ9OlGQYTGMzBzwDPYn-aI_7_ign9SCiscKZufx3Uw/edit?pli=1#gid=813963652 en het is erg cool om te zien dat de versnellingsindicator al op de BUS staat. Maar we missen een paar semi-belangrijke dingen zoals indicatoren en brandstofindicator. Ik heb ook mijn nieuwe 3D-geprinte revisie van de lokale printshop, FabLab Breda, ontvangen en alles past echt goed, zelfs de schroefgaten passen precies! :surprise: En om het af te maken, een kleine film die de "racing" interface laat zien met een draaiende motor: http://1drv.ms/1GS17nI De volgende stap is natuurlijk wat bugfixing, maar ik moet ook de elektronica aanpakken zodat ik ermee kan rijden :grin2:
 

Attachments

#28 ·
Ik gebruik momenteel het USB-Can Pro v5.0-protocol, geïmplementeerd in Arduino door Impulsive_duc. Het Android-gedeelte leest deze bytestroom. Ik heb al een simulator gemaakt die recordbestanden gebruikt in plaats van de USB-verbinding, wat de Android-ontwikkeling enorm vergemakkelijkt. Het creëren van een BT-verbinding zou ook heel gemakkelijk te implementeren zijn. Ik denk dat dit een geweldige manier is om het systeem te ontkoppelen. Het heeft wel een manier nodig om terug te praten met de Arduino, want op dit moment is het maar één kant op.