3 Ocak 2013 Perşembe

OBD-II Araç Bilgi Ekranı



Aracın bilgi ekranında gösterilmeyen bazı verileri izlemek, bazılarını da bir araya toplamak için küçük bir projeye başlamıştım. Henüz tam olarak bitmese de sona yaklaştım.

OBD2 soketi bazı markalarda farklılık gösterse de genelde resimdeki gibi 16 pinli bir soket.
Direksiyonun alt taraflarında veya orta konsolda oluyor, C4'lerde kül tablasının altındaydı örneğin. Astra'da vitesin arkasında, kapağın altına gizlenmişti. Seat'da sol altta, yine kapağın altında.



Donanım 2 bölümden oluşuyor.
1.bölüm, OBD portundan verileri alıp işleyen ve seri olarak displaye gönderen modül
2.bölüm, seri dataları işleyip ekrana basan 3.2" lik grafik ekran ve 320x240 çözünürlükte. Üzerinde kendi kontrolcüsü ve donanımsal seri portu var. 





Alınan datalar:
Hız
Motor devri
Motor suyu sıcaklığı
Dış ortam sıcaklığı
Turbo hava girişi sıcaklığı
CAT sıcaklığı
AKÜ voltajı

Yakıt tüketimi ile ilgili bilgiler maalesef hazır olarak gelmiyor. Saatteki yakıt tüketim (lt/h) bilgisi alınabiliyor. ancak anlık tüketim, ortamalama tüketim vs. bilgilerin,
bazı datalardan hesaplanarak çıkartılması gerekiyor. (Araç hızı, MAF sensör bilgisi gibi) Bunların dışında, OBD2'den gelen birçok data var, istenirse bunlar da işlenip kullanılabilir.

Verileri diagnostik portundan okumanın bir kaç yolu var.
ELM çipli bir devre (veya hazır modül) kullanabilirsiniz veya PIC/Ardunio gibi bir kontrolcü kullanabilirsiniz.
ELM kullanacaksanız, daha önceki konularda anlattığım gibi, AT komutlarını kullanabilirsiniz. Bağlantı kurulduktan sonra, mod ve pid değerlerini sorgulamanız yeterli.

Mode: 0x01 için sorgulanacak pid değerleri:
#define ENGINE_COOLANT_TEMP 0x05  //A-40
#define ENGINE_RPM          0x0C  //((A*256)+B)/4
#define VEHICLE_SPEED       0x0D  //A
#define INTAKE_AIR_TEMP     0x0F  //A-40
#define CONT_MODULE_VOLT    0x42  //((A*256)+B)/1000
#define AMBIENT_AIR_TEMP    0x46  //A-40
#define ENGINE_OIL_TEMP     0x5C  //A-40
#define CATALYST_TEMP_B1S1  0x3C  //(((A*256)+B)/10)-40

ELM entegresini veya hazır devreleri kullanmak istemezseniz, diagnostik portla bağlantı kuracak bir arabirime ihtiyacınız olacak. Bunun için microchip firmasının 2515 ve 2551 canbus entegrelerini kullanabilirsiniz. 


Canbus haberleşmesi, bir-iki satırla geçiştirilmeyecek kadar kapsamlı. O nedenle, bunu daha sonraya bırakıyorum. Ben, test için daha önce yaptığım CANBUS arabirimini kullandım.



Modül, OBD2/CANBUS hattına sürekli olarak yukarıdaki sorgu komutlarını gönderiyor ve aşağıdaki şekilde yanıt alıyor. Bu datalar belirli bir formata çevrilip, seri port üzerinden grafik LCD'ye gönderiliyor.



Display devresi, seri porttan gelen bilgileri işleyerek ekrana yazıyor.
Arabirim ve GLCD 5V ile çalışıyor. Deneme için diagnostik portundaki 12V çıkışını kullandım. Kontak kapalı olduğunda bile bu uçta gerilim var. Test için kullanılabilir ancak kalıcı bir uygulama için başka bir yerden +12V almak daha mantıklı.


Yukarıda bahsettiğim grafik display, ELM327 modülünü AT komutları ile sorgulayacak ve gelen dataları işleyecek kapasitede. ELM modülü ile ek bir devre olmadan da okuma yapılabilir.

Burada karşıma çıkacak en büyük sorun, kullandığım ekrana, araç içinde uygun ve güzel bir yer bulmak. tabi bu her model araç için farklı çözümler gerektiriyor.

Proje istediğim gibi gelişirse, ilerleyen zamanlarda, aracın kendi multimedya sistemini kullanmayı düşünüyorum.

VAG araçlarında (vw, seat, audi, skoda) kullanılan RCD/RNS510 medya cihazının, geri görüş kamerası için bir video girişi bulunuyor. Bu giriş bir kontak girişiyle tetikleniyor.



Okunan ve işlenen dataları PAL formatında göndermek, -zahmetli olsa da- mümkün. Yine bu bilgiler, MFD üzerinde de izlenebilir. 

devam edecek...


linkler:
ELM327 ile OBD-II Haberleşmesi -1
ELM327 ile OBD-II Haberleşmesi -2
ARDUINO-CANBUS

2 Ocak 2013 Çarşamba

ELM327 ile OBDII haberleşmesi -II



Elimizde ELM çipli bir okuyucu olduğunu düşünelim. bununla, OBD portundan bilgi okumak istiyoruz. Elinizdeki bluetooth destekli bir modelse, öncelikle yapmanız gereken, bluetooth bağlantısını kurmak ve bağlantı için atanan sanal COM portun hangisi olduğunu belirlemek.
Hyperterminal programını açın, modülü bağladığınız portu seçin. Baud hızını ayarlayın. (modüle göre değişmekle beraber genelde default olarak 38400 baud kullanıyorlar) 
Bağlantı kurulduğunda veya 'ATZ' komutu gönderdiğinizde aşağıdaki gibi bir yanıt gelmeli.

ATZ
ELM 327 v1.X
>

Bu yanıtı aldıysanız bağlantı kurulmuş demektir.  ELM birden fazla protokolü destekliyor ancak ben burada, CAN protokolünü kullandığımızı varsayıyorum.

Protokol ve hızı otomatik ayarlaması için aşağıdaki komutu gönderiyoruz.

>ATSP 0
>OK

Artık istediğiniz bilgileri sorgulayabilirsiniz.

Sorgulama kodu  'Mode' ve 'PID' olmak üzere 2 bayttan oluşur.
Mode 01, anlık dataları okumak için kullanılır.

PID ise, okunacak sensör bilgisinin kodudur. 
örneğin; PID 0x05, 'Soğutma suyu sıcaklığı' değeridir.

bu konuda detaylı bilgiyi
http://en.wikipedia.org/wiki/OBD-II_PIDs adresinde bulabilirsiniz.
Mode
(hex)
PID
(hex)
Data bytes returnedDescriptionMin valueMax valueUnitsFormula
01004PIDs supported [01 - 20]
01014Monitor status since DTCs cleared. (Includes malfunction indicator lamp (MIL) status and number of DTCs.)
01022Freeze DTC
01032Fuel system status
01041Calculated engine load value0100 %A*100/255
01051Engine coolant temperature-40215°CA-40

'Soğutma suyu sıcaklığı' değerini okumak için aşağıdaki şekilde mode ve PID değerini gönderin.

> 01 05
> 41 05 7B

burada 7B sorgumuzun sonucudur, değeri desimale çevirip formülü uygularsak (bu komut için A-40) 123-40 = 83°C değerini buluruz.

Araçların çoğu standard PID'leri desteklese de, her araçda tüm komutlar okunamayabiliyor. Aracınızın hangi PID'leri desteklediğini görmenin de kolay bir yolu var.
PID 00, 20, 40 ,60 ve 80 aracın desteklediği PID numarasını geri döndürür.


>01 00 sorgusunun yanıtı 4 bayttır ve bu 4 bayt, 0x01 ile 0x20 arasındaki 32 adet PID'in hangilerinin desteklendiğini gösterir.

Örneğin:

>01 00
>41 00 BE 1F A8 13


             B    E    1    F    A    8    1        3              
            ---- ---- ---- ---- ---- ---- ----  ----------
supported?  1011 1110 0001 1111 1010 1000 0001  0  0  1  1
PID num     1234 5678 9ABC DEF. .... .... .... 1D 1E 1F 20

Bu şekilde, aracınızın desteklediği komutları alabilir ve  sorgulama yapabilirsiniz.
Burada sadece anlık sensör bilgilerinin alınması konusunda bilgi vermeye çalıştım. Diğer modlarda arıza bilgilerini almak, arıza ışığını söndürmek, araca ait diğer bilgileri almak mümkün.

OBD2 ile ilgili örnek uygulama için <Araç Bilgi Ekranı> linkine bakabilirsiniz.


Link:
ELM327 ile ODBII haberleşmesi -I


Kaynak:
wikipedia.org


17 Aralık 2012 Pazartesi

RF Alıcı / Verici modüllerle çalışmak


 RF Alıcı/Vericiler
Kısa mesafeli ve düşük hızlı kablosuz kontrollerde DORJI'nin modülleri oldukça kullanışlı.
Alıcı-verici modülleri sürmenin birkaç yolu var.

HT12E ve HT12D entegreleri ile 8 bit adreslenebilir verici-Alıcı yapabilirsiniz. HT12 dökümanlarında, uygulama örnekleri mevcut. Bu entegre doğrudan RF modüllere bağlanabilir ve fazla bir devre elemanı da gerektirmez.


Bu entegreleri kullanmak istemezseniz, herhangi bir PIC de kullanabilirsiniz.

Modüllerin PIC ile kullanımına ait basit bir 
örnek yapmak istersek;




Ben DORJI'nin modüllerini kullandım, benzer modüller piyasada kolaylıkla bulunabiliyor.
(Elimde daha önce almış olduğum Laipac firmasının TLP serisi modülleri, mesafe olarak dorji'nin modüllerinden 2-3 kat daha uzağa gidiyor.) genel olarak kodlama mantığı aynı. 

(Örnekler MicroPascal içindir)


Verici devresi:
Verici modülü PIC'in bir portuna bağlayın. (soft uart kullanıyoruz) Bu portu aşağıdaki şekilde tanımlayın.

Soft_Uart_Init(PORTA, 0, 1, 1200, 1); //PORTA.0 Rx (kullanılmıyor)
                                      //PORTA.1 Tx

                                      //1200 baud 
//eşzamanlama bilgisi
Soft_Uart_Write($AA); //10101010
Soft_Uart_Write($AA);
Soft_Uart_Write($AA);
Soft_Uart_Write($AA);
Soft_Uart_Write($AA);
Soft_Uart_Write($FF); //11111111
Soft_Uart_Write($FF);
Soft_Uart_Write($FF);
Soft_Uart_Write($FF);
Soft_Uart_Write($FF);
//data
Soft_Uart_Write(84);   //ascii T
Soft_Uart_Write(88);   //ascii X
Soft_Uart_Write(84);   //ascii T

Soft_Uart_Write(69);   //ascii E
Soft_Uart_Write(83);   //ascii S
Soft_Uart_Write(84);   //ascii T

Datadan önce eşleme bilgisini göndermek gerekiyor, sonra istediğiniz uzunlukta
data gönderebilirsiniz. Tek yönlü haberleşmede "data alındı" bilgisi alamayacağınızdan, periyodik olarak dataları göndermek daha iyi. Paketlerden biri kaybolsa da, diğeri ulaşacaktır. Paket gönderme arasındaki süreyi de deneyerek en aza indirebilirsiniz.

Preamble/senkron kullanımı konusunda nette detaylı bilgi bulabilirsiniz.
(bu konuda UDEA firmasının dökümanlarından da faydalanabilirsiniz. bakınız)

Alıcı devresi:
Alıcı modülü PIC'in bir portuna bağlayın.

Soft_Uart_Init(PORTA, 0, 1, 1200, 1); //PORTA.0 Rx

kontrol_byte1 := Soft_Uart_Read(err);
kontrol_byte2 := Soft_Uart_Read(err);


//T ve X dataları ard arda alınmışsa, 4 byte data al
if (kontrol_byte1 = 84) and (kontrol_byte2 = 88) then begin
   for i:=0 to 3 do    

      data[i] := Soft_Uart_Read(err);
end;


Ben kablosuz sıcaklık sensörü için bu şekilde kullanıyorum.
Verici modülde dikkat edilmesi gereken; anten devreye çok yakın ise, PIC'in RF sinyalinden etkilenmesi mümkün olabiliyor. Devreyi metal bir kutuya koyarak veya PIC'e ekranlama yaparak bunun önüne geçilebilir.

Modüllerin dökümanlarına, alttaki linklerden ulaşabilirsiniz.


http://www.dorji.com/docs/data/DRA887TX.pdf
http://www.dorji.com/docs/data/DRA887RX.pdf

12 Aralık 2012 Çarşamba

ELM327 ile OBDII haberleşmesi


Araçların, arıza kodu, anlık veri vs. gibi bilgilerini aşağıdaki devre ile izleyebilir,
hataları silebilirsiniz.
Aşağıda, ELM327 devre şeması mevcut, yeni model araçlar, CAN protokolünü desteklediğinden, devrenin 
tamamını yapmanıza gerek yok. (ISO ve J1962 bağlantıları)
Ancak piyasada çok uygun fiyatlara (ELM entegresini orjinalinden daha ucuza) hazır devreler bulmak mümkün. Devreyle uğraşmak istemiyorsanız, hazır modüllerden birini alabilirsiniz. Bunlar RS232 kablolu veya bluetooth'lu olabilir.



Resimde görülen modül ve benzerlerini 15-20$ civarında bulabilirsiniz.
Devreyi yapmak isteyenler için de şema aşağıda. 




Bazı markalarda farklılık gösterse de genelde OBD2 soketi ve bağlantıları aşağıdaki gibidir.


ELM327 için PC ve Android tabanlı yazılımlar mevcut. Tablet PC veya cep telefonlarında
Torque pro yazılımı kullanabilirsiniz. PC için de Scan Master yazılımı oldukça başarılı.

Harici bir yazılımla kullanılabileceği gibi, kendi yazılımınızı geliştirmeniz (veya bir mikrokontrolcü ile ELM'den bilgi almanız) mümkün. Bir PIC ile araca ait bazı bilgileri okuyup bir ekrana yazdırabilirsiniz.

Her araçtan tüm veriler okunamayabiliyor ancak genel olarak temel anlık verileri almak mümkün.



torque pro uygulaması


scan master yazılımı

 
ELM327 üzerinden kendi kodunuzu yazarak, ihtiyacınız olan verileri alabilirsiniz.
Yazının sonraki bölümlerinde, OBD portuna bilgi gönderme ve okuma konusunda detaylı bilgi bulabilirsiniz.

27 Ağustos 2012 Pazartesi

220V AC IR DIMMER


RC5 protokolü kullanan herhangi bir kumanda ile kontrol edebileceğiniz güzel bir devre.
Işık şiddetini, 10 kademe olarak azaltıp arttırabilir, açıp kapatabilirsiniz. aynı zamanda 2 dakika gecikmeli kapanma özelliği de mevcut.

Devrede IR alıcı olarak 38KHz'lik TSOP serisi kullanabilirsiniz. (TSOP1738 veya 1238)
TRIAC olarak TIC206 kulanılmış olsa da, muadilleri ile de sorunsuz çalışır. (BTA12 gibi) Burada dikkat edilmesi gereken, TRIAC'ın gate ucunda kullanılan direnç değeridir. Bunun yerine 1kohm'luk bir trimpot bağlayarak sorunsuz çalışan değere kadar ayarlayın ve yerine sabit direnç takın. BTA12-600 kullanacaksanız, 100 ohm direnç uygundur.

Kumanda olarak philips, vestel, lg, digitürk kumandaları kullanılabilir. Programlama için;
SW1 butonuna 11 saniye basılı tutun, lamba yarı güçte yanacak ve led yanıp sönecektir. Bundan sonra, kumandada atama yapacağınız 4 tuşa sırasıyla basın. (her tuşta, ışık ve led sinyal verecektir)

Tuşlar:
1-aç/arttır
2-azalt
3-uyku modu (2 dakika sonra kapat)
4-kapat

Dört tuşu da atadığınızda, ışık sönecek ve çalışmaya hazır olacaktır. SW1 butonunu aynı zamanda aç/kapat için de kullanabilirsiniz. Butonu kullanmak istemiyorsanız, programlamadan sonra sökebilirsiniz.


devre şeması





Gerekli hex dosyaları ve diğer bilgileri, kendi sitesinden indirebilirsiniz.
http://www.elektronika.ba/617/ir-light-dimmer-v1/

Başka bir 220V AC dimmer uygulaması için:
220V AC Dimmer

22 Temmuz 2012 Pazar

555 ile PWM motor/LED sürücü





Devredeki motor yerine led (şerit led vs.) bağlanabilir. Mosfet olarak,
IRFZ44 veya muadilleri kullanılabilir.





Led sürülecekse, D3 diyotunu kullanmaya gerek yoktur. Soğutucu kullanmadan, 5 metre
şerit led sorunsuz şekilde çalıştırılabilir. Devre ile bilgisayar fanlarının da hız kontrolü yapılabilir.