Tiedonkeruu ajoneuvon CAN-v¤yl¤st¤ Arduino:n ja Raspberry Pi:n avulla

  • View
    2.095

  • Download
    6

Embed Size (px)

DESCRIPTION

Tiedonkeruu ajoneuvon CAN-väylästä Arduino:n ja Raspberry Pi:n avulla. (Jan Rautalin, projektityö Metropolia-amk:ssa)

Text of Tiedonkeruu ajoneuvon CAN-v¤yl¤st¤ Arduino:n ja Raspberry Pi:n avulla

  • Jan Rautalin, 1103482 Tiedonkeruu ajoneuvon CAN-vylst Arduino:n ja Raspberry Pi:n avulla Metropolia Ammattikorkeakoulu 26.12.2013
  • Sisllys Lyhenteet 1 Taustaa 1 2 Johdanto 1 3 Arduino lyhyesti 2 4 Arduino CAN-shield lyhyesti 3 5 Arduinon tarvitsemat ohjelmistot 4 6 Projekti 1, CAN-vyln lukeminen Arduino CAN-shieldill 5 6.1 Ohjelmakoodit 5 6.2 Kytkent ajoneuvoon ja tiedonkeruun kyttminen 8 7 Raspberry Pi lyhyesti 8 ELM 327 sovitin 12 9 Raspberry PI:n tarvitsemat ohjelmistot 12 10 Projekti 2, CAN-vyln lukeminen Raspberry Pi:ll 9 13 10.1 Ohjelmakoodit 13 10.2 Kytkent ajoneuvoon ja tiedonkeruun kyttminen 13 10.3 Paranneltu asennus ajoneuvoon 15 11 Ptelmt Liitteet Liite 1. Muokattu ohjelmakoodi Arduinolle 17
  • Lyhenteet CAN Controller Area Network. Mm. ajoneuvoissa kytetty tiedonsiirtovyl. DIL Dual in-line package. Perinteinen mikropiirien kotelointitapa. Piirin jalat ovat kahdessa riviss. DIL-piiri voidaan juottaa piirikortin lpi tai kytt juotettavaa DIL-kantaa, johon piiri painetaan. GPIO General purpose input/output. Ohjelmoitava digitaalinen sisn/ulostulo. OBD On-board Diagnostics. Ajoneuvoissa kytetty diagnostiikkajrjestelm.
  • 1 1 Taustaa Kiinnostus lukea ajoneuvon CAN-vyln tietoja syntyi kahdesta tekijst. Ensiksikin kytssni olleesta uudehkosta autosta puuttui jhdytysnesteen lmpmittari. Toisaalta olin Metropolia AMK:n opintojaksolla Sulautetut jrjestelmt pssyt tutustumaan mielenkiintoiseen Arduino-mikrokontrolleriin. Niinp muutamien yksinkertaisempien Arduino-projektien jlkeen ptin soveltaa Arduinoa CAN-vyln lukemiseen ja tiedonkeruuseen, mm. kaivatun jhdytysnesteen lmptilatiedon havainnollistamiseksi. Saatuani laitteiston toimimaan ja kytettyni sit useissa ajoneuvoissa, kiinnostuin mys toisesta, hieman vastaavantyyppisest laitteesta, Raspberry Pi:st. Niinp halusin mys tutkia, onnistuuko CAN-vyln lukeminen sill ja miten toteutus eroaisi Arduino-projektista. Etenkin Arduinon ollessa riippuvainen siihen liitetyst kannettavasta tietokoneesta kiinnosti Raspberry Pi itsenisempn kokonaisuutena, onhan se itsessn pienoiskokoinen tietokone, johon on suoraan liitettviss mm. nytt. 2 Johdanto Tmn raportin tarkoitus on johdatella lukijaa aiheen pariin ja antaa joitakin perustietoja projektien toteuttamisesta. Koska tllaiset projektit kuitenkin perustuvat posin henkilkohtaiseen ongelmanratkaisuprosessiin ja asioiden oivaltamisen, ei selostuksen ole siten tarkoitus toimia yksityiskohtaisena rakennusohjeena. Molempien kokoonpanojen osalta ainoastaan itse laitteet on hankittava ostamalla. Muuten kaikki tarvittava, eli avoimeen lhdekoodiin perustuvat ohjelmis- tot/ohjelmointitykalut sek vertaistuki lytyvt luonnollisesti internetist. Tst syyst myskn aivan alkeita, kuten ohjelmistojen asennuksia ei ole tss selostuksessa erityisemmin ksitelty. Perustavaa laatua olevaa ohjelmointityt ei tss yhteydess ole tehty. Aikaansaadut sovellukset perustuvat internetist lydettyihin open source esimerkkikoodauksiin, joita on jonkin verran muokattu. Muutoksien tekemiseen riittnee mink tahansa ohjelmointikielen parissa hankitut perustiedot.
  • 2 Mainittakoon mys, ett tss ksitellyn lisksi internet pursuaa muita kiinnostavia rakenteluprojekteja molemmille alustoille. 3 Arduino lyhyesti Arduino on avoimeen lhdekoodiin perustuva edullinen elektroniikan prototyyppi- ja rakentelualusta. Saatavilla on useampia erilaisia versioita. Tss yhteydess on kytetty Arduino Uno R3:a. Kyseess on noin korttipakan kokoinen laite, joka perustuu AVR ATmega328- mikrokontrolleripiiriin. Laitteessa on 14 ohjelmoitavaa digitaalista ja kuusi analogista sisn/ulostuloa. Perustason liitynt muihin laitteisiin sek virransytt tapahtuvat USB-liittimen kautta. Arduino Uno poikkeaa edukseen muista versioista esim. siten, ett mikli pelkk mikrokontrolleripiiri vaurioituu, se on asennettu ns. DILasennuskantaan ja siten helposti vaihdettavissa. Arduinoon on liitettviss lukuisa mr valmiita oheislaitteita ja omia rakennelmia, joita kutsutaan shieldeiksi. Valmiit shieldit ja omat protokortit kytkeytyvt Arduinoon kortin reunoilla olevien piikkirimojen vlityksell (kuva 1). Virtaa enemmn kuluttavien rakennelmien (mm. relekortti) ohjaamista varten Arduinoon on liitettviss lisvirtalhde. Listiedot ja ohjelmistot: http://arduino.cc Arduino Uno R3 maksaa (joulukuussa 2013) n. 30 euroa. Tuotetta myy ainakin Partco (www.partco.fi).
  • 3 Kuva 1. Kuvassa Arduino Uno R3 sek erikseen ostetut, koekytkentj helpottavat, piikkirimoihin liitettvt ruuviliitosrimat. 4 Arduino CAN-shield lyhyesti Jotta Arduinolla pystyy lukemaan ajoneuvon CAN-vyl, tarvitaan jonkinlainen sovitin. Ers vaihtoehto olisi rakentaa sellainen itse. Tss yhteydess pdyttiin kuitenkin kyttmn valmista shieldi eli Arduinoon liitettv sovitinta. Sopiva lytyi internetist mm. SK Pang Electronicsin sivujen kautta. http://skpang.co.uk/catalog/arduino-canbus-shield-with-usd-card-holder-p-706.html katso mys: https://www.sparkfun.com/products/10039 http://proto-pic.co.uk/can-bus-shield/ Kyseess on ajoneuvon OBD-diagnostiikkaliittimeen kaapelilla liitettv, Microchip:in MCP2515 CAN controller ja MCP2551 CAN transceiver-piireihin perustuva valmiiksi koottu tuote (kuva 2). Kuitenkin auton diagnostiikkaliittimen ja sovittimen vlille tarvit-
  • 4 tava OBD2-DB9 kaapeli on tilattava (tai tehtv) erikseen, samoin Arduinoon liittmiseksi tarvittavat piikkirimat piti ostaa erikseen ja juottaa itse paikoilleen. Kuva 2. Arduinoon liitettv sparkfun.com:in CAN-shield. tarvittavat piikkirimat juotettuina paikoilleen. Kuvassa Arduinoon liittmiseen Itse tilasin ko. tuotteen englantilaisesta Proto-PIC nettikaupasta, kuluja tuli tarvittavan OBD2-DB9 ja piikkirimojen sek lhetyskulujen kanssa (tammikuussa 2013) n. 65 puntaa. 5 Arduinon tarvitsemat ohjelmistot Arduinon ohjelmoimiseksi tarvitaan tietokone sek USB-kaapeli. Lisksi Arduino-sivuilta (http://Arduino.cc ) ladataan ja asennetaan tietokoneelle ohjelmisto Arduino IDE. Tll ohjelmistolla laaditaan tai muokataan Arduinon tarvitsema ohjelmakoodi, tarkistetaan ja knnetn sek ladataan se Arduinon muistiin.
  • 5 Muita projektissa hyvksi havaittuja ohjelmia ovat ohjelmatiedostojen suoraan muokkaamiseen hyvin soveltuva Notepad++ sek sarjaliikenteen lukemiseen ja liikenteen tiedostoon tallentamiseen soveltuva PuTTy-terminaaliohjelma (PuTTy.exe). 6 6.1 Projekti 1, CAN-vyln lukeminen Arduino CAN-shieldill Ohjelmakoodit Arduino IDE:n asentamisen jlkeen ladattiin internetist SK Pang Electronicsin sivuilta http://skpang.co.uk/catalog/arduino-canbus-shield-with-usd-card-holder-p-706.html CAN-shieldille kirjoitetut ohjelmat (CAN-BUS ECU Reader demo sketch v4). Tss projektissa kytettiin examples-hakemiston ecu_reader_logger.ino ohjelmatiedostoa muokattuna sek tehtiin pieni muutoksia canbus.h ja canbus.cpp kirjastotiedostoihin. Viimeistn projektin tss vaiheessa on syyt perehty ainakin jollakin tasolla tietorakenteisiin, joita CAN-vylst ollaan aikeissa lukea. Kiinnostavia ovat OBD PID:t eli tietyille antureille tunnusomaiset parametrit, joita vylss liikkuu. Lhes kaikki automerkit tukevat tiettyj perusparametrej, mutta suurin osa on automerkkien salaamia. Tss keskityttiin vain helposti saatavilla olevien tietojen lukemiseen. Tyypillisi, esimerkkiautossakin (Subaru Forester Diesel vm. 2009) tuettuja ovat kuvassa 5 nkyvt PID:it.
  • 6 Kuva 3. Esimerkkiautossa tuettuja OBD2-protokollan PID:ej Listietoja: http://en.wikipedia.org/wiki/OBD-II_PIDs Kytnnss siis muokattiin canbus.h tiedoston rivej (kuva 5) siten, ett kyselyyn otetaan mukaan vain halutut (tuetut) PID:it. Lisksi muokattiin canbus.cpp tiedostoa siten, ett edellist valintaa vastaavat casekohdat ovat mukana tsskin koodissa (kuva 6).
  • 7 Kuva 4. Canbus.cpp tiedoston case-lauseita. Varsinaista ohjelmakoodia (ecu_reader_logger.ino) muokattiin hieman edellist enemmn. Alkuperinen koodi on kirjoitettu CAN-shieldille, johon on liitetty saman valmistajan yksijohtoista tiedonsiirtoa kyttv Serial LCD eli shieldiin kytketty LCD-nytt sek GPS-moduli (shieldin lisvaruste). Mainittakoon, ett suoraan Arduinolle sovellettua vastaavaa 16x2 LCD-nytt kokeiltiin liitt Arduinon ja CAN-shieldin plle piikkirimojen lpi pinoamalla kolmanneksi shieldiksi, mutta tm kokeilu ei toiminut. Jos siis CAN-shieldin kanssa haluaa kytt LCD-nytt, on hankittava suoraan CAN-shieldiin liitettv saman toimittajan Serial LCD tai valmistettava itse vastaava (kytkent lytyy SK Pang:in sivuilta). Ohjelmakoodia on siis omaa kytt varten lyhennetty noin puoleen ja Serial LCD:n puuttuessa tietojen nyttminen on muutettu tavalliseksi sarjaliikenteeksi, jota voidaan
  • 8 seurata PC:lt ja tarvittaessa tallentaa esim. PuTTy-terminaalin avulla. Kyseinen koodi nkyy liitteess 1. Valmista koodia kokeiltiin useissa eri autoissa, jolloin havaittiin, ett joissakin autoissa kysytyt PID:t nkyivt hyvin, mutta samasta CAN-vyln nimellisnopeudesta (500 kbps) huolimatta joissakin nkyi vain satunnaisia PID:ej. Nytti silt, kun tietojen luku ei oikein olisi pysynyt vauhdissa mukana. Thn auttoi yrityksen ja erehdyksen kautta tehty canbus.cpp tiedoston rivill 125 olevan timeout-arvon 4000 nostaminen 8000:een. Muutoksen jlkeen toiminta on ollut asianmukaista kaikissa kokeilluissa ajoneuvoissa (n. 10 kpl). 6.2 Kytkent ajoneuvoon ja tiedonkeruun kyttminen