3 puan yazan GN⁺ 2025-02-03 | 1 yorum | WhatsApp'ta paylaş
  • ESP32 RC Cars, ESP32-CAM tabanlı uzaktan kumandalı bir kamera sistemi olup WebSocket üzerinden gerçek zamanlı video akışı ile motor ve servo kontrolünü birlikte gerçekleştirir
  • Python sunucu uygulaması WebSocket iletişimini yönetir ve tarayıcıda ESP32 cihazının görüntüsünü izleyip kontrol etmeyi sağlayan bir web arayüzü sunar
  • Başlıca özellikler; ESP32-CAM’in canlı video akışı, WebSocket komut tabanlı motor-servo kontrolü, kontrol komutu alınmadığında varsayılan duruma döndüren otomatik zaman aşımı ve çok istemcili video kanvasıdır
  • Donanım olarak AI Thinker veya uyumlu bir ESP32-CAM, GPIO’ya bağlı motor ve servo, kararlı bir 5V güç kaynağı ve bir Wi‑Fi ağı gerekir; SD kart isteğe bağlıdır
  • Kontrol komutları MOTOR:<speed>, SERVO:<angle>, CONTROL:<speed>:<angle> biçimindedir; sunucu, birden fazla ESP32 istemcisinin video karelerini ızgara halinde yerleştirip web arayüzüne akıtır

Proje genel bakışı

  • ESP32 RC Cars, ESP32 tabanlı uzaktan kumandalı bir kamera sistemi örneğidir
  • ESP32-CAM gerçek zamanlı görüntüyü WebSocket ile iletir, motor ve servo ise WebSocket komutlarıyla kontrol edilir
  • Python sunucu uygulaması WebSocket iletişimini yönetir ve web arayüzü üzerinden ESP32 cihazlarını görüp kontrol etmeyi mümkün kılar
  • Demo videosu: https://youtu.be/OubYFXmvA1E

Başlıca özellikler

  • ESP32-CAM’den web sunucusuna canlı video akışı gönderir
  • WebSocket komutlarıyla motor ve servo uzaktan kontrol edilir
  • Belirli bir süre boyunca kontrol komutu gelmezse motor ve servo otomatik olarak varsayılan durumlarına döner
  • Sunucu, birden fazla istemcinin video beslemesini dinamik olarak kanvasa yerleştirir

Donanım ve malzemeler

  • Gerekli donanım
    • ESP32-CAM, AI Thinker modülü veya uyumlu kart
    • Uygun GPIO pinlerine bağlı motor ve servo
    • ESP32-CAM için kararlı bir 5V güç kaynağı
    • İletişim için Wi‑Fi ağı
    • Diğer işlevler için gerekirse isteğe bağlı SD kart
  • Kullanılan malzemeler AliExpress’ten alınan kit bileşenleridir
    • Araç şasisi
    • Elektronik hız kontrolcüsü
      • 30A sürümü kullanılmıştır ve BEC çıkışının 5V 3A olması, ESC ve servoyu çalıştırmak için yeterli akımı sağlıyor gibi görünmüştür
    • Pil yuvası
    • 2 adet 18650 3.6V hücre veya 7.4V pil paketi
      • Her ikisi de kullanılmıştır; hücreler başka projelerde daha esnek kullanım sağlar
    • ESP32-CAM
      • Harici antenli model çok önemlidir ve 170 derece balık gözü kamera kullanılmıştır
    • Bluetooth gamepad
      • PS4 kontrolcüsü kullanılmıştır

Kablolama düzeni

  • Araç şasisine dahil olan servonun 3 pinli JST adaptörü çıkarılıp ESP32’ye bağlanabilmesi için 4 pinli JST fişe taşınmıştır
  • Servonun artı ve eksi uçları birleştirilmiş, krimpleme aracıyla 3 pinli dişi JST fiş eklenmiştir
  • ESC’nin beyaz kontrol kablosu 4 pinli JST fişe ve 3 pinli dişi fişe bağlanmıştır

Yazılım yapısı

  • ESP32 kodunda kullanılan kütüphaneler
    • WiFi.h: Wi‑Fi bağlantısı
    • ArduinoWebsockets.h: WebSocket iletişimi
    • esp_camera.h: ESP32-CAM kamera kontrolü
    • ServoControl.h, Esc.h: servo ve motor kontrolü
    • Arduino.h: standart Arduino işlevleri
  • Python sunucu bağımlılıkları aşağıdaki komutla kurulur
sudo apt install python3-aiohttp python3-opencv python3-numpy

Yapılandırma ve çalıştırma

  • ESP32 ürün yazılımı yapılandırması
    • secrets.h içinde Wi‑Fi kimlik bilgileri ve WebSocket sunucu URL’si ayarlanır
#define WIFI_SSID "YourWiFiSSID"
#define WIFI_PASSWORD "YourWiFiPassword"
#define WS_SERVER_URL "ws://YourServerIP:Port"
  • Kamera GPIO pinleri AI Thinker ESP32-CAM kartı için önceden yapılandırılmıştır
  • Gerekirse motor ve servo pinleri donanım kurulumuna göre değiştirilir
  • Python sunucu yapılandırması
    • Sunucu betiği, web arayüzü için index.html dosyasıyla aynı dizine yerleştirilir
    • Sunucu aşağıdaki komutla çalıştırılır
python3 app.py

Kullanım ve WebSocket komutları

  • ESP32 kullanım adımları
    • Sağlanan sketch, Arduino IDE veya uyumlu bir platform ile ESP32-CAM’e yüklenir
    • Wi‑Fi ve WebSocket sunucusu bağlantısının başarılı olup olmadığını doğrulamak için seri çıktı kontrol edilir
  • Sunucu kullanım adımları
    • Python sunucu betiği çalıştırılır
    • Tarayıcıda web arayüzü açılarak canlı video akışı izlenir
    • WebSocket bağlantısı üzerinden kontrol komutları gönderilir
  • Desteklenen komutlar
    • MOTOR:<speed>: motor hızını ayarlar, aralık -255 ile 255
    • SERVO:<angle>: servo açısını ayarlar, aralık 0 ile 180
    • CONTROL:<speed>:<angle>: motor hızı ve servo açısını aynı anda kontrol eder

Çalışma ayrıntıları ve sorun giderme

  • ESP32 başlatma aşamaları
    • Belirlenen Wi‑Fi ağına bağlanır
    • ESP32-CAM, video akışına uygun şekilde yapılandırılır
    • Sunucuyla WebSocket bağlantısı kurulur
  • Zaman aşımı işleme, belirli bir süre kontrol komutu gelmezse motor hızını 0a ve servo açısını 90a döndürür
  • Python sunucusu birden fazla ESP32 istemcisiyle WebSocket üzerinden iletişim kurar
  • Sunucu, gelen video karelerini işler, bunları ızgara biçiminde dinamik olarak yerleştirir ve web arayüzüne akıtır
  • Bağlantı sorunu varsa secrets.h içindeki Wi‑Fi kimlik bilgilerini kontrol edin; WebSocket sunucusunun çalıştığından ve erişilebilir olduğundan emin olun
  • Video akışıyla ilgili sorunlarda ESP32-CAM’in güç beslemesinin uygun olduğunu ve kamera başlatma ayarlarını kontrol edin
  • Proje MIT License ile yayımlanmıştır

1 yorum

 
GN⁺ 2025-02-03
Hacker News yorumları
  • Arduino’nun olduğu ama ESP32’nin olmadığı 12 yıl önce benzer bir şey yapmıştım: https://newton-net-pl.translate.goog/2012/01/robot/?_x_tr_sl...
    Eski bir HTC Magic telefonu kamera + Wi‑Fi vericisi olarak kullanıp, seri port ve level shifter ile Arduino’ya bağlayarak servo ve RGB LED’i kontrol etmiştim.
    Bağlantı çok stabil değildi ama epey eğlenceliydi; belki artık projeyi yeni nesil mikrodenetleyicilerle canlandırmanın zamanı gelmiştir.
  • Proje geri bildirimi için teşekkürler; devam ettirmek istiyorum ve PR’lara da açığım.
    Projeyi beğendiyseniz, uzaktan geliştirici arayan birine önermeniz en büyük yardım olur.
    Asıl işim Ruby on Rails geliştiriciliği, ama robotik işlerini de değerlendirebilirim.
  • ESP32 CAM almadan önce harici antenli bir modeli düşünmek iyi olur.
    Şu yazı okunmaya değer: https://www.reddit.com/r/esp32/comments/r7kqtt/esp32cam_supe...
    Bazı tavsiyeleri uygulayana kadar kare hızı oldukça kötüydü.
    • Router yönetim sayfasına göre, direnci yeniden lehimleyip anteni bağlar bağlamaz kararsız 1Mbps’den stabil 20Mbps’ye çıktı.
      0Ω direnci yeniden lehimlemek neredeyse bir macera gibiydi ama sonuçta doğru pine bağladım; sonuç şöyle görünüyor: https://imgur.com/a/LJflZ80
    • Bu projeyi yapmış biri olarak, harici anten neredeyse şarttı.
      Kullandığım antenin bağlantısını README’ye ekledim.
    • Tam modeli önerebilir misin?
  • Harika. ESP32 ile çalışan paletli bir RC tank yaptım ve Bluetooth üzerinden PlayStation 4 kontrolcüsüne bağlayıp kullandım.
    Temel yazılım, Bluetooth kontrolcü kütüphanesiyle yaklaşık 20 satır C koduyla kolayca başlatılabiliyor.
    Daha sonra kullanımı kolaylaştırmak için özellikler ekledim; iki paleti iki stick ile kontrol etmek düşük hızlarda iyi ama iki drone motoru kullanıp neredeyse 20 km/sa hıza çıktığı için başka bir kontrol biçimi gerekiyordu.
    Sonunda DualShock kontrolcünün tetikleriyle devir sınırlı doğrudan palet kontrolü yaptım; yüksek hızlı sürüşte ise sol stick’in yukarı/aşağı hareketini gaz, sağ stick’in sağ/sol hareketini direksiyon olarak kullanıp normal bir RC araba gibi sürülmesini sağladım.
    Temel aldığım aynı 3D baskı modelinin videosu; hız 00:50’den itibaren iyi görünüyor: https://www.youtube.com/watch?v=3Mv_tDY89Zw
    • Gerçekten etkileyici.
      RC yapımını pek bilmiyorum; genelde nasıl kontrol ediliyor? PS4 kontrolcüsünü doğrudan ESP’ye bağlamak mı?
  • FPV’nin büyük sorunu ve uzun süre analog teknolojide kalmasının nedeni gecikme.
    Bu projenin gecikmesinin ne düzeyde olduğunu merak ediyorum.
    • Günümüzde FPV çoğunlukla ExpressLRS[0] kullanıyor; FPV quadcopter’ların kontrol bağlantısı için açık bir protokol ve genellikle ESP32 de kullanıyor.
      FPV quadcopter’larda video tarafı ise ayrışmış durumda. Bazıları sinyal koptuğunda tamamen kesilip yeniden bağlanmak yerine kademeli olarak kötüleştiği için analog kullanıyor; bazıları ise 802.11 tabanlı iletişim kullanıyor ve pratikte oldukça rekabetçi.
      Örneğin Walksnail Goggles video bağlantısında 802.11 kullanıyor; çok açık ya da iyi belgelenmiş olmasa da Chris Rosser’ın çalışmaları gibi içini kurcalayanlar var.
      Bu tür kurulumların gecikmesi, hızlı rekabetçi quadcopter yarışları için bile yeterli görünüyor.
      [0] https://www.expresslrs.org
    • İlgili proje: https://github.com/wooky/esp32-analog-video-over-wifi
      Ve: https://github.com/gyrex/CrystalVideo
    • FPV drone deneyimindeki gibi kıyaslayacak bir ölçütüm yok, ama evdeki kablosuz ağda, diğer tüm ev cihazları bağlıyken bile gecikme sorun olmadı.
      Kare hızı genel olarak ESP32’nin görüntüyü ne kadar hızlı yakalayabildiğiyle sınırlı gibi.
      Python betiğinde FPS ölçtüğümde ESP32’lerden yaklaşık 50fps aldım; yakın zamanda evin dışında denemek için bir seyahat router’ı satın aldım.
  • Benzer bir proje yapmayı düşündüğüm için gecikme deneyimini merak ediyorum.
    Video akışına bakarak uzaktan kontrol mümkün mü? En büyük endişem, çoğu hızda engellerden kaçınmak için fazla yavaş olacak gibi görünmesi.
  • Geçen yıl aynı kiti aldım; yakın zamanda küçük ekranlı bir ESP32 oyun kontrolcüsü de aldım: https://github.com/01studio-lab/pyController
    Zaman bulursam ikisini birleştirip arabayı kontrol ederken ekranda kamera akışını da izlemeyi düşünüyorum.
  • Sonuç daha önemli, yapma keyfi daha az önemliyse, bugünlerde AliExpress’te makul bir 2,5 inç RC araba 30 dolara, bağımsız 5.8GHz analog kamera ise 25 dolara alınabiliyor.
    • Bağımsız derken hepsi bir arada kamerayı kastediyorsan, dahili VTX’i olan kameralar genelde sıradan analogdan bile daha kötüdür ve hâlâ analog gözlük gerekir.
      Numaralı gözlüğe ihtiyacı olmayan ya da kontakt lens kullanan biri için DJI O4 “lite” ve N3 gözlük kombinasyonu çok daha iyi bir seçenek.
  • RC arabayı otomatikleştirmek istiyorsanız keyifle okunabilecek bir yazı.
    Birkaç yıl önceki bir yazı olduğu için bugün benzer sonuçlar daha kolay ya da daha iyi bir yöntemle elde edilebilir: https://hackaday.com/2021/10/25/fast-indoor-robot-watches-ce...
  • Savaş alanında kullanılan FPV quadcopter’ları herkes biliyor, ama kara araçlarına ilgi de giderek artıyor.
    Filmlerdeki Boston Dynamics robot köpeği ile Terminator karışımı görüntülerden tamamen farklılar; ancak mayın döşeme, mayın patlatma, cephenin bir yerinde saklanan askere az miktarda ikmal taşıma gibi daha az göze çarpan “sıkıcı” işlerde çok kullanışlılar.