İçeriğe Yönlendir

OBD2 Soketinden ELM327 WIFI + Esp8266 Geliştirme Kartı ile Veri Okuma


Ömer Sarıgül

Recommended Posts

Ömer Sarıgül

Bir süredir merak ettiğim bir konuydu, dün itibariyle aracımın ECU'sundan bilgi okuması yapıp gelen bilgiye göre bir işlem yapmayı basitçe başardım. 

Elimde daha önceden öğrenmek için aldığım Nodemcu(esp8266) kartım vardı. Bunu elm327 ile wifi üzerinden haberleştirip ecudan gelen motor devir verisine göre 3 ledi yaktım. Devir 0-1500 arası iken yeşil, 1500-3000 arası sarı, 3000 üzerine çıkınca kırmızı yanıyor. 

Özetle bir elektronik karta yazılan Arduino kodlar ile obd2 verilerini analiz edip basitçe istediklerimizi yaptırabiliriz. 

Sadece elektronik mezunuyum basit pic mikrodenetleyici kodları ötesinde aşırı bir yazılımcı bilgim yoktur. Yapay zeka ile kodları geliştirerek oluşturdum düzenleme yaptırdım. 

Bu konuyu kendini geliştirmek isteyenler için bir başlangıç olması adına açmak istedim. 

Sizde kendinize özel işler yapabilirsiniz. 

Örneğin

+ eski model araçlara LCD Hud display projesi olabilir. 

+ Hararet durumlarında sesli ikazlar 

+ Motor verilerinin, anlık arıza kodlarının bağlanacak bir display üzerinden takibi,

Vs aklınıza gelen başka projeler de olabilir. 

Birçoğunu obd programları ile telefondan yapabiliyoruz, programın bize vermedikleri ilginç projeler yapmak isteyen olabilir.

Yüksek düzey kodlama bilgisine ihtiyaç duymadan yapay zekayla kod yazabilir ve pratikte karta yükleyip çalıştırabilir.

Benim elm327 wifi özellikte ve geliştirme kartım(ESP8266) da wifi bağlantısı var. PC Arduino ide veya Arduinodroid uygulaması ile cep telefonu tabletten otg üzerinden program yazıp yüklenebilir. 

 

**USB Serial monitör uygulamaları üzerinden kartın çalışma durumu takip edilebiliyor AT komutları yollayabiliriz. Bu bana programı tasarlarken yapay zekaya hataları giderme adına çok yardımcı oldu.

 

**Not: Kartı ev ağına bağlayıp akıllı ev sistemleri de tasarlanabilir, kartın özellikleri dahilinde html sayfası oluştup yayın yaptırmak uzaktan erişmek mümkün(uzaktan sürekli bağlantı için gerekli sabit ip vs olması gerekir diye düşünüyorum bunun hakkında çok bilgim yok sadece ip ye bağlanıp "merhaba dünya" mesajı yazdırma ötesinde işlem yapmadım).

 

İlgisi olabilecekler için umarım yararlı paylaşım olmuştur. 

 

Aşağıda yapay zeka ile oluşturduğum obd2 kodlar. Kodlar üzerinde oynamak geliştirmek yapay zeka ile çok kolay.

 

#include <ESP8266WiFi.h>

 

const char* ssid = "WiFi-OBDII";

const char* password = "";

 

WiFiClient client;

 

#define LED_YESIL D1

#define LED_SARI D2

#define LED_KIRMIZI D3

 

void sendCommand(String cmd)

{

  client.print(cmd + "\r");

  delay(200); // cevap bekleme süresi

}

 

String readResponse()

{

  String response = "";

  unsigned long start = millis();

  while (millis() - start < 1000)

  {

    while (client.available())

    {

      char c = client.read();

      response += c;

    }

  }

  return response;

}

 

int parseRPM(String response)

{

  int idx = response.indexOf("41 0C");

  if (idx == -1) return 0;

 

  response = response.substring(idx + 5); // "41 0C " sonrası

  response.replace("\r", "");

  response.replace("\n", "");

  response.trim();

 

  // A ve B byte'larını ayır

  int a, b;

  sscanf(response.c_str(), "%x %x", &a, &b);

 

  return ((a * 256) + b) / 4;

}

 

void setup()

{

  Serial.begin(115200);

  pinMode(LED_YESIL, OUTPUT);

  pinMode(LED_SARI, OUTPUT);

  pinMode(LED_KIRMIZI, OUTPUT);

 

  WiFi.begin(ssid, password);

  Serial.print("WiFi baglantisi bekleniyor");

  while (WiFi.status() != WL_CONNECTED)

  {

    delay(500);

    Serial.print(".");

  }

  Serial.println("\nWiFi baglandi");

 

  if (!client.connect("192.168.0.10", 35000))

  {

    Serial.println("ELM327 baglanamadi.");

    while (1);

  }

 

  Serial.println("ELM327 baglandi. AT komutlari gönderiliyor...");

 

  sendCommand("ATZ"); readResponse(); // Reset

  sendCommand("ATE0"); readResponse(); // Echo off

  sendCommand("ATL0"); readResponse(); // Linefeeds off

  sendCommand("ATSP0");readResponse(); // Auto protocol

}

 

void loop()

{

  sendCommand("010C");

  String response = readResponse();

 

  Serial.println("Gelen: " + response);

 

  int rpm = parseRPM(response);

  Serial.println("RPM: " + String(rpm));

 

  // LED kontrol

  if (rpm > 3000) {

    digitalWrite(LED_YESIL, LOW);

    digitalWrite(LED_SARI, LOW);

    digitalWrite(LED_KIRMIZI, HIGH);

  }

  else if (rpm > 1500) {

    digitalWrite(LED_YESIL, LOW);

    digitalWrite(LED_SARI, HIGH);

    digitalWrite(LED_KIRMIZI, LOW);

  }

  else {

    digitalWrite(LED_YESIL, HIGH);

    digitalWrite(LED_SARI, LOW);

    digitalWrite(LED_KIRMIZI, LOW);

  }

 

  delay(1500); // 1.5 saniyede bir sorgu

}

  • Beğen 5
  • Teşekkür 1
Yorum bağlantısı
Gökhan Tuna

Emeginize saglik, sayenizde ilk firsatta esp8266 temin edip evde bir kac deneme yapacagim..

 

Yalniz size kodun bu kismini ("while (1);") veren yapay zekaya selamimi soyleyin ;)

Yorum bağlantısı
Ömer Sarıgül
Gökhan Tuna yazdı:

Emeginize saglik, sayenizde ilk firsatta esp8266 temin edip evde bir kac deneme yapacagim..

 

Yalniz size kodun bu kismini ("while (1);") veren yapay zekaya selamimi soyleyin ;)

Kolay gelsin @Gökhan Tuna bey.

Yapay zeka selamı aldı. Kodlara laf yok diyor.  Sağolsun ne desek kodlamaya döküyor. Hep program bilgim çok yüksek olsun isterdim. Şimdi sadece ne yapmak isteğimi söylüyorum o hemen elimdeki karta göre bütün programı tasarlıyor. Kodlama hataları düzenlemede çok başarı, hata veren kısmı veriyorum hemen başka yoldan deneyelim yenisi ile düzeltelim diyerek anında çözüyor. Artık iş hayal gücümüze kalmış.

  • Beğen 1
Yorum bağlantısı
  • Konuyu Görüntüleyenler   0 kullanıcı

    Sayfayı görüntüleyen kayıtlı kullanıcı bulunmuyor.

×
×
  • Yeni Oluştur...