[DIY]: Arduino ile Rectract - Iniş Takımı Uygulaması

Arduino ile Rectract - Iniş Takımı Uygulaması

Dayanamadım test ettim. Olmuyor!!!

"Retract Open Bitti" mesajı çıktıktan sonra motorun hala çalışmaya devam ediyor olmasını bir türlü açıklayamıyorum.
 
Arduino ile Rectract - Iniş Takımı Uygulaması

Kodu tam olarak inceleyemedim ama "Serial.println("Retract Open Bitti");" ve "Serial.println("Retract Open Bitti");" satırlarından sonra "delay(10)" koyarak deneyebilir misiniz ?
 
Arduino ile Rectract - Iniş Takımı Uygulaması

Zafer Bey mesajınızı okumadan kodun içine daldım ve bir çok hata buldum. Şu anki kod çalışıyor. Ama tek motorla deneyebildim. Yarın iki motorla denemeyi ümit ediyorum. Bir de akım değerlerinin hassas ayarı gerekecek. İşin ilginci açılırken ve kapanırken sıkışma akımları farklı oluyor.
Bu arada kodda hala debug amaçlı Serial.print komutları olabilir...

Kod:
int rxPin = 12; //Alıcı sinyali 12 nolu pinde
int motor_l1 = 3; // Sol retract motoru 3 ve 4 nolu pinlerde
int motor_l2 = 4;
int motor_r1 = 5; // Sağ retract motoru 5 ve 6 nolu pinlerde
int motor_r2 = 6;
int sensor_l = 1; // Sol akım sensörü 1 nolu analog girişte
int cur_l = 0; // Sol akım
int sensor_r = 2; // Sağ akım sensörü 2 nolu analog girişte
int cur_r = 0; // Sağ akım
int ret_com = 1; // Retract komutu Açık = 1 Kapalı = 0
int ret_pos = 1; // Aktüel retract pozisyonu Açık = 1, Kapalı = 0
int rxPWM = 0; //Alıcı sinyalini depolayan değişken
int x = 1; //Motor akım kontrolünde kullanılacak değişiken
int mincur = 420; // Azami negatif akım. Akım sensörüne ve motora göre bu değer değiştirilecek
int normcur = 470; // Beklenen normal pozitif akım. Akım sensörüne ve motora göre bu değer değiştirilecek


// Geçici değişkenler. Akım kontrolü devreye girince iptal edilecekler.
int senspin = 10; // Buton 10 numaralı digital girişe bağlı
int sense = 1; // Butona basıldığında LOW olan değişken




void setup()
{
  Serial.begin(9600);
  pinMode(motor_l1, OUTPUT);
  pinMode(motor_l2, OUTPUT);
  pinMode(motor_r1, OUTPUT);
  pinMode(motor_r2, OUTPUT);
  digitalWrite(motor_l1, LOW);
  digitalWrite(motor_l2, LOW);
  digitalWrite(motor_r1, LOW);
  digitalWrite(motor_r2, LOW);
  
  pinMode(senspin, INPUT); // Akım kontrolü devreye girince iptal edilecek.
  
  rxPWM = pulseIn(rxPin, HIGH, 25000);
  while(rxPWM < 800 || rxPWM > 2200) // Burada valid bir alıcı sinyali bekliyoruz
  {
    rxPWM = pulseIn(rxPin, HIGH, 25000);
  }
  if(rxPWM < 1500)
  {
    ret_com = 0; // PWM 1.5 ms altında retract kapalı komutu
  }
  else
  {
    ret_com = 1; // PWM 1.5 ms üstünde retract açık komutu
  }
//  Serial.print("RET COM = ");
//  Serial.print(ret_com);
//  Serial.print("   RET POS = ");
//  Serial.println(ret_pos);
//  Serial.println("Setup tamam loopa gidiyoruz");
}

void loop()
{
  digitalWrite(motor_l1, LOW);
  digitalWrite(motor_l2, LOW);
  digitalWrite(motor_r1, LOW);
  digitalWrite(motor_r2, LOW);
  rxPWM = pulseIn(rxPin, HIGH, 25000); // Kumanda sinyalini oku ve yorumla
  if(rxPWM < 1500) // Eğer rxPWM 1500'den küçükse kapat komutu geldi demektir yoksa açık komutu geldi demektir
  {
    ret_com = 0; // PWM 1.5 ms altında retract kapalı komutu
  }
  else
  {
    ret_com = 1; // PWM 1.5 ms üstünde retract açık komutu
  }
//  Serial.print("Ret_Com = ");
//  Serial.print(ret_com);
//  Serial.print("  Ret_Pos = ");
//  Serial.println(ret_pos);
  if(ret_com == 0 && ret_pos == 1) // Eğer retract açık konumdaysa ve kapat komutu geldiyse retractlar kapatılacak
  {
    Serial.println("Kapatmaya gidiyoruz");
    RetractClose();
  }
  else if(ret_com == 1 && ret_pos == 0) // Eğer retract kapalı konumdaysa ve aç komutu geldiyse retractlar açılacak
  {
    Serial.println("Açmaya gidiyoruz");
    RetractOpen();
  }
  
  // Retract komutu ile retract pozisyonu aynı ise herhangi bir şey yapılmadan loop'a devam edilecek
}


void RetractOpen() //Retractı açan subroutine
{
  Serial.println("Retract Open");
  digitalWrite(motor_l1, HIGH); // Retract motorları açma yönünde enerjilendirildi
  digitalWrite(motor_l2, LOW);
  digitalWrite(motor_r1, HIGH); // Retract motorları açma yönünde enerjilendirildi
  digitalWrite(motor_r2, LOW);
  x = 1;
  delay(250);
  cur_l = analogRead(sensor_l);
  cur_r = analogRead(sensor_r);
  if(cur_l > normcur) // Beklenen normal akım çekilmezse o kanalda retract bağlı olmayabilir. x değişkeni bir artırılır yani o kanalın işi bitti varsayılır
  {
//    Serial.println("Checkpoint 1");
    digitalWrite(motor_l1, LOW);
    x = x + 1;
  }
  if(cur_r > normcur) // Beklenen normal akım çekilmezse o kanalda retract bağlı olmayabilir. x değişkeni bir artırılır yani o kanalın işi bitti varsayılır
  {
//    Serial.println("Checkpoint 2");
    digitalWrite(motor_r1, LOW);
    x = x + 1;
  }
  while(x < 2)
  {
     rxPWM = pulseIn(rxPin, HIGH, 25000);
     cur_l = analogRead(sensor_l);
     cur_r = analogRead(sensor_r);
     if(cur_l < 400)
     {
//       Serial.println("Checkpoint 3");
       digitalWrite(motor_l1, LOW);
       x = x + 1;
     }

     if(cur_r < 400)
     {
//       Serial.println("Checkpoint 4");
       digitalWrite(motor_r1, LOW);
       x = x + 1;
     }
     if(rxPWM < 1500)
     {
//       Serial.println("Checkpoint 5");
       digitalWrite(motor_l1, LOW);
       digitalWrite(motor_r1, LOW);
       x = 2;
     }
  }
  
  digitalWrite(motor_l1, LOW);
  digitalWrite(motor_r1, LOW);
  ret_pos = 1; // Retract pozisyon değişkenini ters çeviriyoruz ve geri dönüyoruz.
  Serial.println("Retract Open Bitti");
  
// Bu subroutine'den geri döndüğümüzde eğer akım aşılmış ise ret_pos ve ret_com aynı olacak. Alıcı sinyali değiştiyse farklı olacak. Dolayısıyla program hemen diğer subroutine'i çağıracak.
}


void RetractClose() //Retractı kapatan subroutine
{
  Serial.println("Retract Close");
  digitalWrite(motor_l1, LOW); // Retract motorları açma yönünde enerjilendirildi
  digitalWrite(motor_l2, HIGH);
  digitalWrite(motor_r1, LOW); // Retract motorları açma yönünde enerjilendirildi
  digitalWrite(motor_r2, HIGH);
  x = 1;
  delay(250);
  cur_l = analogRead(sensor_l);
  cur_r = analogRead(sensor_r);
  if(cur_l > normcur) // Beklenen normal akım çekilmezse o kanalda retract bağlı olmayabilir. x değişkeni bir artırılır yani o kanalın işi bitti varsayılır
  {
    digitalWrite(motor_l2, LOW);
    x = x + 1;
  }
  if(cur_r > normcur) // Beklenen normal akım çekilmezse o kanalda retract bağlı olmayabilir. x değişkeni bir artırılır yani o kanalın işi bitti varsayılır
  {
    digitalWrite(motor_r2, LOW);
    x = x + 1;
  }
  while(x < 2)
  {
     rxPWM = pulseIn(rxPin, HIGH, 25000);
     cur_l = analogRead(sensor_l);
     cur_r = analogRead(sensor_r);
     if(cur_l < 420)
     {
       digitalWrite(motor_l2, LOW);
       x = x + 1;
     }

     if(cur_r < 420)
     {
       digitalWrite(motor_r2, LOW);
       x = x + 1;
     }
     if(rxPWM >= 1500)
     {
       digitalWrite(motor_l2, LOW);
       digitalWrite(motor_r2, LOW);
       x = 2;
     }
  }
  
  digitalWrite(motor_l2, LOW);
  digitalWrite(motor_r2, LOW);
  ret_pos = 0; // Retract pozisyon değişkenini ters çeviriyoruz ve geri dönüyoruz.
  Serial.println("Retract Close Bitti");  
// Bu subroutine'den geri döndüğümüzde eğer akım aşılmış ise ret_pos ve ret_com aynı olacak. Alıcı sinyali değiştiyse farklı olacak. Dolayısıyla program hemen diğer subroutine'i çağıracak.
}
 
Arduino ile Rectract - Iniş Takımı Uygulaması

işler biraz aksadı. Hafta içi kuramsal döneme geçtik yine. :)
Şu anki kodda belirgin bir sıkıntı yok. İş akım sensöründe bitiyor. Yani akım sensöründen doğru bilgi gelirse yazılım tarafında sorun kalmadı gibi. Akım sensörünün gürültüsü ve tutarsızlığı işi zorlaştırıyor. Eldeki sistemin bazı özelliklerinden yararlanarak farklı bir yaklaşım denemeye karar verdim.

Aşağıdaki şemada motor sürücüsü L293'ü görüyorsunuz. Ben her bir retract için ayrı bir sürücü kullanmaya karar verdim. Sürücü entegrenin içinde dört benzer motor kontrolörü var. Ben bunları çift çift paralel bağlamayı düşünüyorum. Şemada görülüyor. Adamlar zaten öyle güzel bir tasarım yapmışlar ki, karşılıklı neredeyse tüm pinleri birleştirmek yetiyor. :)

Bu sürücü entegrenin muhteşem bir özelliği daha var. Motor için enerji girişi ayrı. Yani entegrenin lojik kısmı ayrı besleniyor çıkış katı ayrı. Bu ne demek? Motorun çalışma yönüne bakılmaksızın motorun çektiği akım tek bir uçtan ve hep aynı yönde akıyor demek. Yani iki yönlü akım sensörü gereği ortadan kalkıyor.

Peki bu durumda neden basit düşünmüyoruz? Bu hatta bir shunt direnci bağlasak. Üzerindeki gerilim düşüşünden akımı hesaplasak??? Şemada görüyorsunuz. Klasik bir "high side current monitor" uygulaması. Normalde shunt direnci uçlarında oluşan gerilimi hassas bir diferansiyel opamp ile kuvvetlendirip kullanmak gerekiyor. Ama burada sanki buna gerek kalmayacak ve bu gerilim değerini doğrudan Arduino'ya okutmak mümkün olacak gibime geliyor. İşte bu akşamın testi bu olacak...

Motor normalde 250 mA akım çekerken sıkışınca 750 mA çekiyordu. Yani 0.47 ohm direnç üzerinde düşecek gerilim normal çalışmada yaklaşık 110 mV, sıkışınca yaklaşık 350 mV. Bu değerler ACS Hall sensörünün çözünürlüğünden belirgin olarak daha yüksek. Bu değerler besleme geriliminden düşülecek. Sistem şöyle çalışacak: Retract açılırken ya da kapatılırken motorlara güç verilir verilmez shunt direncin ucundaki gerilim okunacak. Sonra bu gerilim referans alınarak 300 mV düşüş olduğu anda motor sıkıştı denilerek akım kesilecek.

Bir başka olasılık ise, iki analog giriş kullanmak. Sürekli olarak shunt direncinin iki ucu ayrı ayrı okunup karşılaştırılacak. Fark 300 mV olduğunda akım kesilecek.

Arduino analog girişinin 5 V'u 1024 adımda okuduğunu düşünürsek giriş hassasiyeti 4.88 mV oluyor. Bu hassasiyetle 100 mV ile 300 mV'u birbirinden rahatlıkla ayıracağını düşünüyorum.

[attachimg=1]


EDİT:
Burada bence en büyük sorun, retract motorları ayrı bir kaynaktan beslendiklerinde (ki hemen daima öyle yapılmalı), eğer kullanılacak pil 5V'tan yüksek bir değerde olursa (ki hemen daima öyle olacak), Arduino sürekli 1023 ölçecek! Bunu önlemek için basit bir gerilim bölücü yapsak, bu sefer de ölçüm hassasiyetini azalmış olacağız. Demek ki ilk aşamada tek kaynaktan besleyip bu hali ile pratikte çalışıp çalışmadığını görmek sonra bir adımn ilerleyerek gerilim bölücü ve farklı kaynağı test etmek gerekecek. Bir an önce eve gitmeliyim! :D
 

Ekli dosyalar

  • L293.jpg
    L293.jpg
    23.3 KB · Görülme: 144
Arduino ile Rectract - Iniş Takımı Uygulaması

Sümer bey, L293D'nin iki çıkışını ben birleştirmezdim. Çünkü ideal şartlarda eşit olan çıkış akımları, gerçek uygulamada asla eşit olmuyor bu de uçlarda ters yönlü kaçak akımlara neden oluyor. Ama sizin uygulamanızda ne olacak gerçekten merak ettim.

Sonradan baktım ki L293D'yi böyle kullanan arkadaşlar da varmış.
 
Arduino ile Rectract - Iniş Takımı Uygulaması

Sümer Yamaner' Alıntı:
Peki bu durumda neden basit düşünmüyoruz? Bu hatta bir shunt direnci bağlasak. Üzerindeki gerilim düşüşünden akımı hesaplasak??? Şemada görüyorsunuz. Klasik bir "high side current monitor" uygulaması. Normalde shunt direnci uçlarında oluşan gerilimi hassas bir diferansiyel opamp ile kuvvetlendirip kullanmak gerekiyor.

Sümer bey zahmet olmazsa sizin okuduğunuz tıp fakültesinin adresini verir misiniz ? İTÜ elektronik fakültesinde bu tarz pratik uygulamalar yoktu, ben gidip sizin fakülteye kayıt yaptıracağım, hiç olmadı derslere kaçak girerim :D.
 
Arduino ile Rectract - Iniş Takımı Uygulaması

"Sürüyorum" değil de "sürmeyi planlıyorum" desek daha doğru olacak. :)
Amaç akım kapasitesini artırıp olası yanma riskini azaltmak. Ya da, her bir retract motoru için ayrı bir L293 kullanılacağına göre her bir L293 içindeki iki sürücüyü "ziyan" etmemek. :D
Çok da gerekli değil aslında.

Linkteki arkadaş da demiş ki: "not strictly necessary"... :D
Aynı şeyleri düşünmüşüz adamla. Bağlantı şeması kolaylığı falan... :)
 
Arduino ile Rectract - Iniş Takımı Uygulaması

Zafer SAHIN' Alıntı:
Sümer bey zahmet olmazsa sizin okuduğunuz tıp fakültesinin adresini verir misiniz ? İTÜ elektronik fakültesinde bu tarz pratik uygulamalar yoktu, ben gidip sizin fakülteye tekrar kayıt yaptıracağım :D.

İTÜ Elektronik Fakültesi'nde bunlar olmaz. Çünkü insanlara "mühendislik" eğitimi verilir. Mühendislik bence bir yaşam biçimidir. Haddim olmayarak ben kendimde de biraz mühendis bakışı olduğunu düşünür bununla da övünürüm. :D
Bu tür pratik uygulamalar ise ancak benim gibi alaylıların ilgisini çeker. O nedenle "bak biz mühendislerden çok biliyoz" diye hava da atabiliriz. Ama bu gerçek değildir. Çünkü "mekteplilik" her zaman çok değerlidir.

Açıkçası ben de L293'ün sürücülerinin paralel bağlanması konusunda sizinle aynı endişeleri taşıyorum. Mektepli birisi olarak siz bunun ayrıntılarını düşünüp planlar, kuramsal olarak kafanıza yatmıyorsa uygulamazsınız. Alaylı yarı cahil olarak ben ise "nolucak yahu en fazla entegreyi yakarız" diyerek kolayca uygularım. Aramızdaki fark bendeki cahil cesaretidir... :D
 
Arduino ile Rectract - Iniş Takımı Uygulaması

Evet eve vardım güç bela. Yemek öncesi ilk test yapıldı. Aşağıda gördüğünüz basit sistem. L293'ün tüm bağlantılarını çizmedim. Sonuçta 0 V'a bağlı iki uç var. Herhangi birini ayırınca motor bir yöne diğerini ayırınca diğer yöne dönüyor. L293'ün motor besleme bacağında seri bir 1 ohm 5 Watt direnç var. Bu direncin entegreye bağlanan bacağı bir gerilim bölücü (iki adet 4.7 kohm direnç) Arduino'nun analog girişlerinden birine bağlanıyor. Burada amaç, L293'ün lojik gerilimi olan 5 V'tan daha yüksek bir gerilimle (örneğin 2S LiFe gibi) motorun sürülme olasılığına karşı ölçüm alanını uyarlayabilmek).
Bu şekilde aşağıdaki kısa kodla ölçüm yapıp gerilim değerlerini izledim. Tabii ki 0 - 1023 aralığından kayıt yaptım. Voltaja çevirmek için uğraşmadım.

Kod:
int x = 0;
int maks = 0;
int minim = 1023;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  x = analogRead(0);
  if(x > maks) maks = x;
  if(x < minim) minim = x;
  Serial.print(x);
  Serial.print("    ");
  Serial.print(minim);
  Serial.print("    ");
  Serial.println(maks);
}

[attachimg=1]

Motor çalışmazken 500 - 510 arası ölçüyor. Motor normal çalışırken 480 - 470 gibi değerlere iniyor. Motoru sıkıştırıp tam durdurursam 430 - 440 oluyor. Ayrıca değerler oldukça stabil ve tutarlı. Yani ACS sensöründeki gibi fıldır fıldır oynamıyor. Bana kullanılabilir gibi geldi.
Bundan sonraki aşamada motoru farklı bir gerilim kaynağından besleyeceğim. 1 Ohm direncin her iki ucunun voltajını da okuyup izleyeceğim. Akım için çok daha realistik değerler vereceği kesin.
 

Ekli dosyalar

  • Current Sensor Deneme.jpg
    Current Sensor Deneme.jpg
    18 KB · Görülme: 102
Arduino ile Rectract - Iniş Takımı Uygulaması

Evde LiPo ya da LiFe yokmuş. O nedenle planları biraz değiştirdim. Tek kaynaklı besleme kullanarak kodu fazlalıklarından arındırıp test ettim. Bu arada açılış ve kapanış için 20 saniyelik bir de timeout timer koydum. Mükemmel oldu! :halay:

Kod:
int rxPin = 12; //Alıcı sinyali 12 nolu pinde
int motor_l1 = 3; // Sol retract motoru 3 ve 4 nolu pinlerde
int motor_l2 = 4;
int motor_r1 = 5; // Sağ retract motoru 5 ve 6 nolu pinlerde
int motor_r2 = 6;
int sensor_l = 1; // Sol akım sensörü 1 nolu analog girişte
int cur_l = 0; // Sol akım
int sensor_r = 2; // Sağ akım sensörü 2 nolu analog girişte
int cur_r = 0; // Sağ akım
int ret_com = 1; // Retract komutu Açık = 1 Kapalı = 0
int ret_pos = 1; // Aktüel retract pozisyonu Açık = 1, Kapalı = 0
int rxPWM = 0; //Alıcı sinyalini depolayan değişken
int x = 1; //Motor akım kontrolünde kullanılacak değişiken
int mincur = 440; // Azami akımda sensör değeri. Akım sensörüne ve motora göre bu değer değiştirilecek
unsigned long timer; // Timeout timer işlevi için


void setup()
{
  pinMode(motor_l1, OUTPUT);
  pinMode(motor_l2, OUTPUT);
  pinMode(motor_r1, OUTPUT);
  pinMode(motor_r2, OUTPUT);
  digitalWrite(motor_l1, LOW);
  digitalWrite(motor_l2, LOW);
  digitalWrite(motor_r1, LOW);
  digitalWrite(motor_r2, LOW);
  
  rxPWM = pulseIn(rxPin, HIGH, 25000);
  while(rxPWM < 800 || rxPWM > 2200) // Burada geçerli bir alıcı sinyali bekliyoruz
  {
    rxPWM = pulseIn(rxPin, HIGH, 25000);
  }
  if(rxPWM < 1500)
  {
    ret_com = 0; // PWM 1.5 ms altında retract kapalı komutu
  }
  else
  {
    ret_com = 1; // PWM 1.5 ms üstünde retract açık komutu
  }
}

void loop()
{
  digitalWrite(motor_l1, LOW);
  digitalWrite(motor_l2, LOW);
  digitalWrite(motor_r1, LOW);
  digitalWrite(motor_r2, LOW);

  rxPWM = pulseIn(rxPin, HIGH, 25000); // Kumanda sinyalini oku ve yorumla
  if(rxPWM < 1500) // Eğer rxPWM 1500'den küçükse kapat komutu geldi demektir yoksa açık komutu geldi demektir
  {
    ret_com = 0; // PWM 1.5 ms altında retract kapalı komutu
  }
  else
  {
    ret_com = 1; // PWM 1.5 ms üstünde retract açık komutu
  }
  if(ret_com == 0 && ret_pos == 1) // Eğer retract açık konumdaysa ve kapat komutu geldiyse retractlar kapatılacak
  {
    RetractClose();
  }
  else if(ret_com == 1 && ret_pos == 0) // Eğer retract kapalı konumdaysa ve aç komutu geldiyse retractlar açılacak
  {
    RetractOpen();
  }
}


void RetractOpen() //Retractı açan subroutine
{
  digitalWrite(motor_l1, HIGH); // Retract motorları açma yönünde enerjilendirildi
  digitalWrite(motor_l2, LOW);
  digitalWrite(motor_r1, HIGH); // Retract motorları açma yönünde enerjilendirildi
  digitalWrite(motor_r2, LOW);
  x = 0;
  delay(250);
  timer = millis();
  while(x < 2)
  {
     rxPWM = pulseIn(rxPin, HIGH, 25000);
     cur_l = analogRead(sensor_l);
     cur_r = analogRead(sensor_r);
     if(cur_l < mincur)
     {
       digitalWrite(motor_l1, LOW);
       x = x + 1;
     }

     if(cur_r < mincur)
     {
       digitalWrite(motor_r1, LOW);
       x = x + 1;
     }
     if(rxPWM < 1500)
     {
       digitalWrite(motor_l1, LOW);
       digitalWrite(motor_r1, LOW);
       x = 2;
     }
     if((millis() - timer) > 20000)
     {
       break;
     }
  }
  
  digitalWrite(motor_l1, LOW);
  digitalWrite(motor_r1, LOW);
  ret_pos = 1; // Retract pozisyon değişkenini ters çeviriyoruz ve geri dönüyoruz.
  
// Bu subroutine'den geri döndüğümüzde eğer akım aşılmış ise ret_pos ve ret_com aynı olacak. Alıcı sinyali değiştiyse farklı olacak. Dolayısıyla program hemen diğer subroutine'i çağıracak.
}


void RetractClose() //Retractı kapatan subroutine
{
  digitalWrite(motor_l1, LOW); // Retract motorları açma yönünde enerjilendirildi
  digitalWrite(motor_l2, HIGH);
  digitalWrite(motor_r1, LOW); // Retract motorları açma yönünde enerjilendirildi
  digitalWrite(motor_r2, HIGH);
  x = 0;
  delay(250);
  timer = millis();
  while(x < 2)
  {
     rxPWM = pulseIn(rxPin, HIGH, 25000);
     cur_l = analogRead(sensor_l);
     cur_r = analogRead(sensor_r);
     if(cur_l < mincur)
     {
       digitalWrite(motor_l2, LOW);
       x = x + 1;
     }

     if(cur_r < mincur)
     {
       digitalWrite(motor_r2, LOW);
       x = x + 1;
     }
     if(rxPWM >= 1500)
     {
       digitalWrite(motor_l2, LOW);
       digitalWrite(motor_r2, LOW);
       x = 2;
     }
     if((millis() - timer) > 20000)
     {
       break;
     }
  }
  
  digitalWrite(motor_l2, LOW);
  digitalWrite(motor_r2, LOW);
  ret_pos = 0; // Retract pozisyon değişkenini ters çeviriyoruz ve geri dönüyoruz.
// Bu subroutine'den geri döndüğümüzde eğer akım aşılmış ise ret_pos ve ret_com aynı olacak. Alıcı sinyali değiştiyse farklı olacak. Dolayısıyla program hemen diğer subroutine'i çağıracak.
}

Bir sonraki adım, 2S LiPo ya da LiFe kullanarak sistemin "mincur" değerini "tune" etmek olacak. Sonra çift motorla denemem gerekiyor.
 
Arduino ile Rectract - Iniş Takımı Uygulaması

İçimden bir ses, mutlu sona yaklaştık diyor abi :)
 
Arduino ile Rectract - Iniş Takımı Uygulaması

Kafamdaki projeler bitince iki gün kodsuz geçti. Ben de biraz library karıştırdım. Ama bir şey farkettim. Yolda olmak keyifli, varmak değil. Dolayısıyla hazır kütüphanelerle iş yapmayı sevmiyorum. Kendi acemice çözümlerimi üretmek daha çok keyif veriyor.
Bu akşam bir süre önce tartıştığımız konuyu test ettim. Yani L293 entegresinin bacaklarını paralel bağlayıp motor sürme konusunu. Epey bir bir o yana bir bu yana motor çevirdim. Herhangi bir sorun, ısınma, takılma olmadı. Bunun sonucunda L293'ün içindeki sürücüleri pekala paralel bağlı kullanabileceğime karar verdim. Yarından itibaren mini Arduino plaketlerinden birini kullanarak sistemi bir pertinaks üzerinde kullanılabilir halde gerçekleştirme çalışmasına başlayacağım. Her şey yolunda giderse Pazar günü retract kontrolcüsünü uçak üzerinde deneme imkanım olacak. Bunu yaptığımda meşhuurr "mincur" değerine de hassas bir ayar çekip sistemi daha iyi çalışır hale getirebilmeyi umuyorum. Tüm bunları becerebilirsem bir sonraki adımda LiPo, LiFe ve NiMh pillerle kullanıldığında "mincur" değerinde oynama gerekip gerekmeyeceğine bakacağım. Eğer ciddi bir farklılık gerekecek ise plaket üzerine jumper koyup farklı besleme kaynaklarına göre farklı "mincur" değerleri atayabilirim. Bakalım buna daha çok var...
 
Arduino ile Rectract - Iniş Takımı Uygulaması

Sümer Yamaner' Alıntı:
Kafamdaki projeler bitince iki gün kodsuz geçti. Ben de biraz library karıştırdım. Ama bir şey farkettim. Yolda olmak keyifli, varmak değil. Dolayısıyla hazır kütüphanelerle iş yapmayı sevmiyorum. Kendi acemice çözümlerimi üretmek daha çok keyif veriyor....
Bir hobi bu kadar mı güzel özetlenir abi :bravo: :thumbup: :halay:
 
Arduino ile Rectract - Iniş Takımı Uygulaması

Sümer abi, (müsaadenizle artık bu şekilde hitap etmek istiyorum) artık ne zaman 3D printer alıp kendi retract'ını yapacaksın ?

Bu RESMİ görmek için izniniz yok. Giriş yap veya üye ol
 
Arduino ile Rectract - Iniş Takımı Uygulaması

Zafer hocam bu haftalarda ben de Prusa i3 toplamayı düşünüyorum , Mendel daha mı iyi olur acaba , ancak burada toplayan bir arkadaşta gördüm , yazılım ve kalibrasyon işinde öyle zorlanmış ki , nerdeyse beni tırstırdı :D