Skip to content

Arduino

Emir HAMURCU edited this page Aug 15, 2023 · 6 revisions

Varsayılan yapılandırmada, bir Arduino Pro Mini özel bir PCB'ye bağlanmış olarak kullanılır.

PCB, Raspberry Pi, Arduino, servo motorlar ve MPU6050'yi güvenli bir şekilde güç yönetim kartına bağlamak için tasarlanmıştır. Daha fazla bilgi için Elektronik bölümüne bakabilirsiniz.

Arduino Sketch

Arduino kodu, Raspberry Pi'den bağımsız olarak çalışacak şekilde tasarlanmıştır ve servo motorları kontrol etmek, MPU6050 ve batarya gerilimini okumak gibi görevleri üstlenir.

Raspberry Pi'ye bağlantı isteğe bağlıdır, ancak servo motor pozisyonlarının ayarlanmasını ve batarya geriliminin okunmasını gerektiğinde mümkün kılar. Bağlantı olmadığında, Arduino servo motorları çalıştırmaya ve robotu bağımsız olarak hareket ettirmeye devam eder. Bu, Raspberry Pi mevcut olmadığında veya robotun "başsız" (kelimenin mizahi anlamıyla) bir şekilde, örneğin bir gösterim veya pil ömrünü uzatmak için kullanıldığında faydalı olabilir.

Yapılandırma

Config.h dosyası, Arduino kodu için yapılandırmayı içerir. Bu, servo motor aralıklarını, başlangıç pozisyonlarını ve pin atamalarını içerir.

Servo motor aralıkları, modules/config.py dosyası ve arduino_sketch/Config.h dosyasında tanımlanmıştır. Bu, donanım yapılandırmanızla eşleşmelidir.

Servolar başlatıldıktan sonra, Arduino yazılımı bu aralıklar dışında servo motorların hareket etmesini engeller. Bu, servo motorların ve robotun zarar görmesini önlemek içindir.

Modüller

Arduino kodu, modüllere ayrılmıştır ve her biri belirli bir görevden sorumludur. Bu, kodun kolayca genişletilip değiştirilebilmesini sağlar.

  • arduino_sketch.ino - Ana kod dosyasıdır. Bu, setup ve loop fonksiyonlarını içerir ve modülleri başlatır.
  • ServoManager.h - Servo kontrol modülüdür. Bu, servo motorları başlatma ve kontrol etme işlemlerinden sorumludur.
  • InverseKinematics.h - Ters kinematik modülüdür. Bu, belirli bir açı seti için servo motor pozisyonlarını hesaplamaktan sorumludur.
  • PiConnect.h - Raspberry Pi bağlantı modülüdür. Bu, Raspberry Pi'ye seri bağlantıyı başlatma ve seri port üzerinden veri okuma ve yazma işlemlerinden sorumludur.
  • Order.h - PiConnect modülü tarafından gereklidir.
  • Config.h - Yapılandırma dosyasıdır. Bu, servo motor aralıklarını, başlangıç pozisyonlarını ve pin atamalarını içerir.

Ters Kinematik

IK (Inverse Kinematics) modülü oldukça basittir ve şu anda sadece tek bir ekseni hesaplar (diz ve kalça arasındaki bacak yüksekliği). Bu değerler, açı hesaplamalarını gerçek servo pozisyonlarına dönüştürmek için aralık ve başlangıç pozisyonunu dikkate alan ofsetlerle güncellenir.

Servo yöneticisindeki güvenlik kontrolleri sayesinde, IK modülü robotu zarar verecek geçersiz bir konuma hareket ettiremez.

Raspberry Pi Bağlantısı

V2'de, Raspberry Pi bağlantısı bir seri yönetim kütüphanesi kullanıyordu. Bu aynı kütüphane V3'te de mevcut olup, ancak şu anda doğru şekilde çalışmıyor. Bu durum yakında çözülecektir.

Bu modül, Order.h sabitlerini kullanarak arduino ve Raspberry Pi arasında gönderilen veri türünü ve hangi tür değeri bekleyeceğini belirler.

Pil İzleme

Özel PCB üzerinde bir gerilim bölücü bulunduğundan, arduinonun A0 pini, robotun güncel besleme gerilimini alır. Eğer bu bir pil ise, değer kod içinde 0 ile 1024 arasında haritalanan bir min ve max aralığı arasında dalgalanacaktır.

Python yazılımında pil izlemeyi kullanmak için bu aralık, battery.py modülünde güncellenebilir. Daha fazla bilgi için Modüller bölümüne bakınız.

MPU6050 (ivmeölçer ve jiroskop)

MPU6050 desteği, MPU6050 sensörünü dahil ederek projenin yeteneklerini artırır. Bu özellik, hareket algılama ve yönelim tespitini çizime entegre etme yeteneği sunar ve denge iyileştirmeleri için geniş bir yelpazede olasılıklar sunar.

Başlarken: Çizimin Config.h dosyasında, geliştiriciler MPU6050_ENABLED seçeneğini (varsayılan olarak etkin) yorumlayarak özelliği etkinleştirme veya devre dışı bırakma esnekliğine sahiptir. MPU6050, i2c arabirimi kullanılarak Arduino'nun altına özel PCB'ye bağlanabilir.

Hata Ayıklama: Kolay hata ayıklama ve görselleştirme için geliştiriciler, MPU6050_DEBUG seçeneğini kullanarak seri çiziciyi etkinleştirebilir. Bu, sensör verilerinin gerçek zamanlı izlenmesini sağlar, ayarlama ve optimizasyona yardımcı olur.

İşlevsellik ve Kullanım: MPU6050 Desteği özelliğinin mevcut sürümü, temel olarak denge ile ilgili uygulamalar için eğim değerini kullanmaya odaklanmıştır. Ancak bir yuvarlanma değeri de üretildiğini belirtmek önemlidir, bu da gelecekteki sürümlerde genişletilmiş işlevsellik potansiyeline işaret eder.

Özelliğin temel işlevi, MPU6050 sensörünün sürekli çalışmasını içerir, bu da hareketi ve yönelimi izler. Bu verileri Arduino döngüsüne entegre ederek özellik, kalça ofsetini ayarlayarak ve servoları hareket ettirerek herhangi bir eğimi otomatik olarak telafi eder.

Animasyon

Arduino kodu, herhangi bir seri komut olmadığında rasgele animasyonların gerçekleşmesine izin verecek şekilde yapılandırılmıştır. Bu, rasgele etrafına bakma ve bacak pozisyonunu hafifçe ayarlama gibi hareketler içerir.

Seri pinler aracılığıyla bağlantı

Raspberry Pi'nin GPIO 14 ve 15 (tx ve rx) pinleri, Arduino'nun tx ve rx pinlerine (her iki yönde de tx -> rx bağlantısı!) mantıksal seviye kaydırıcı aracılığıyla bağlanmalıdır, çünkü Pi 3.3V ve Arduino (muhtemelen) 5V'dur.

Seri pinler aracılığıyla Arduino'ya yükleme

Arduino üzerindeki yazılımı Raspberry Pi üzerinden Arduino IDE kullanarak doğrudan güncelleyebilirsiniz.

Seri pinler aracılığıyla yükleme yapmak için, Arduino'yu IDE'nin 'uploading' (derleme sonrası) işlemine başladığı noktada reset düğmesine basmanız gerekmektedir. Aksi takdirde bir senkronizasyon hatası görüntülenecektir.

PCB düzeni

Arduino'ya bağlanmak üzere özel bir PCB tasarlanmıştır. Bu, circuits klasöründe bulunabilir.

0ccb3ebe-da46-438c-abb7-b29bec448e0a

Pinler

  • A0 - Pil gerilimi (gerilim bölücü aracılığıyla)
  • D2-D11 - Servo PWM
  • A4 - MPU6050 SDA
  • A5 - MPU6050 SCL
  • TX - Seri TX (Pi'ye)
  • RX - Seri RX (Pi'den)
  • Güç (5V ile etiketlenmiş), 5V güç kaynağı girişi (alt pin), toprak (orta pin) ve pil veya güç kaynağından gelen giriş gerilimi (üst pin).
  • Bridge - İki pin, 5V güç hattını Arduino'nun RAW pinine bağlar. Bu, Arduino'nun 5V hattından veya köprü devre dışı bırakıldığında USB portundan beslenmesine izin verir.
  • OUT - Harici gerilim izleme bileşeni için. Giriş gerilimini (üst pin) ve toprağı (alt pin) çıktılar.
  • Pi - Giriş gerilimini (5V DEĞİL!) ve seri bağlantıyı Raspberry Pi'ye aktarır. Pinler üstten alta doğru: Arduino TX, Arduino RX, GND, VIN.