[DIY]: LiPo'lu harici buji kızdırıcısı

Sumer Yamaner

Moderator
Katılım
17 Eyl 2013
Mesajlar
8,773
Tepkime puanı
23,158
Yaş
61
Konum
İstanbul
Web sitesi
www.sumeryamaner.com
İlgi Alanı
Uçak
Giderek daha az sıklıkta nitro model kullanıyor olsam da bazen gerekiyor. Örneğin birkaç haftadır Hezarfen'deki aşırı rüzgar nedeniyle eski göz ağrılarımdan 046'lık P51'i devreye soktum. Üzerinde OS 55 AX motor var. Uçak çok eski. Gövde daracık.

Oturup onboard kızdırıcı takmak için uğraşmak lazım. Hiç işime gelmedi. Ama harici buji kızdırıcılarının en büyük sorunu pilleri. NiCd ya da NiMh olan bu piller çok kısa zamanda ömürlerini dolduruyorlar. Ayrıca benim almış olduklarım (ki 2008 ve 2009 yıllarına ait) kesin olarak yeni nesil NiMh değil eski, hızla şarj yitiren NiMh içeriyor. Bu durumda şöyle oluyor:
Öğleden sonra işi gücü ayarlayıp sahaya kaçıyorsun. Vaktin kısıtlı. Ama motor çalışmıyor. Çünkü kızdırıcının pili bitik. Biraz şarj ediyorsun. Bir sorti için motor çalışıyor. İkinci sortiye yine yok. Sinir bozucu!!!

Dediğim gibi ideal çözüm onboard kızdırıcı ama her uçak için uygun olmayabiliyor. O zaman harici kızdırıcının yumuşak karnı olan pile bir çözüm üretelim diye düşündüm.

Herhangi bir 2S LiPo ya da LiFe kullanabiliyoruz. Ben T konnektörlü yapmayı uygun buldum şimdilik. Ama belki daha sonra plaket ile pili tek bir plastik kutuya koyup dışarıya bir şarj bağlantısı alabilirim. Bekleme süresince sistem uyku moduna geçtiği için akım tüketimi mikroamper düzeyinde kalıyor. Kaldı ki oldu da pil bitti, onbeş dakikada yeterince şarj etmek mümkün.

Prototip bu:

You must be registered for see images attach


Butona basınca 15 saniye boyunca buji enerjilendiriliyor. Pil gerilimi sürekli izlenip pile verilen enerjinin sabit kalmasına çalışılıyor. Onbeş saniye sonra akım kesiliyor. Uyku moduna geçiliyor. Yazılıma ekleyeceğim tek şey, arada butona basıldığında onbeş saniyeyi baştan başlatması özelliği olacak.

You must be registered for see images attach


Kod:

Kod:
// Harici buji kızdırıcı
// 2S LiXX için
// İşlemci Attiny85
// Buton girişi PB3 (Attiny85 pin 2)
// PWM çıkışı PB0 (Attiny85 pin 5)
// LED çıkışı PB1 (Attiny85 pin 6)
// Voltage sense ADC2 (Attiny85 pin 3)


#include <avr/sleep.h>

#define BUTTON 3
#define LED 2
#define SENSE 2
#define PWMOUT 0
#define PWMMAX 60
#define PWMMIN 35

int voltlimit;
int maxvolt;
int minvolt;
int voltage;
int outpwm;
unsigned long timer;
byte flag;

ISR(PCINT0_vect)
{
}

void setup()
{
  pinMode(LED, OUTPUT);
  pinMode(PWMOUT, OUTPUT);
  pinMode(BUTTON, INPUT_PULLUP);
  digitalWrite(LED, HIGH);
  delay(1000);
  minvolt = 600;
  maxvolt = 960;
}

void loop()
{
  digitalWrite(PWMOUT, LOW);
  digitalWrite(LED, LOW);
  sleep();
  checkvolt();
  timer = millis();
  while(!flag)
  {
    pwmon();
    if ((millis() - timer) > 15000)
    {
      digitalWrite(PWMOUT, LOW);
      flag = 1;
      blinkfast();
    }
  }
}

void checkvolt()
{
  flag = 0;
  voltage = analogRead(SENSE);
  if (voltage < minvolt)
  {
    blinkled();
    flag = 1;
  }
}

void blinkled()
{
  for (int n = 0; n < 15; n++)
  {
    digitalWrite(LED, HIGH);
    delay(300);
    digitalWrite(LED, LOW);
    delay(300);
  }
}

void blinkfast()
{
  for (int n = 0; n < 15; n++)
  {
    digitalWrite(LED, HIGH);
    delay(100);
    digitalWrite(LED, LOW);
    delay(100);
  }
}

void pwmon()
{
  voltage = analogRead(SENSE);
  if (voltage < minvolt) voltage = minvolt;
  if (voltage > maxvolt) voltage = maxvolt;
  outpwm = map(voltage, minvolt, maxvolt, PWMMAX, PWMMIN);
  analogWrite(PWMOUT, outpwm / 4);
  digitalWrite(LED, HIGH);
}

void sleep()
{
  GIMSK |= _BV(PCIE);                     // Enable Pin Change Interrupts
  PCMSK |= _BV(PCINT3);                   // Use PB3 as interrupt pin
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);    // replaces above statement
  sleep_enable();                         // Sets the Sleep Enable bit in the MCUCR Register (SE BIT)
  sei();                                  // Enable interrupts
  sleep_cpu();                            // sleep
  cli();                                  // Disable interrupts
  PCMSK &= ~_BV(PCINT3);                  // Turn off PB3 as interrupt pin
  sleep_disable();                        // Clear SE bit
  sei();                                  // Enable interrupts
}
 
Moderatör tarafında düzenlendi:
LiPo'lu harici buji kızdırıcısı

Sümer abi merhaba.Acaba kodu C dilinde mi yazdınız merak ettim.C programlamayı mühendislikte ders olarak aldım geçen dönem.Kolay gelsin.
 
LiPo'lu harici buji kızdırıcısı

Yine bos durmuyor, yeni projelere imza atiyorsun abi :bravo: :thumbup:

Paketleme olarak kucuk bir lipo ile karti bir arada yapsan nasil olur abi. Tipki bizim helilerde kullandigimiz backup uniteler gibi ??



Bu RESMİ görmek için izniniz yok. Giriş yap veya üye ol
Bu RESMİ görmek için izniniz yok. Giriş yap veya üye ol
 
LiPo'lu harici buji kızdırıcısı

Tamer Öztürk' Alıntı:
Sümer abi merhaba.Acaba kodu C dilinde mi yazdınız merak ettim.C programlamayı mühendislikte ders olarak aldım geçen dönem.Kolay gelsin.

Arduino Integrated Development Environment'in dili bu. Ama C bazlı. C yazarsan da tanıyor.

Mehmet Kucuksari' Alıntı:
Yine bos durmuyor, yeni projelere imza atiyorsun abi :bravo: :thumbup:

Paketleme olarak kucuk bir lipo ile karti bir arada yapsan nasil olur abi. Tipki bizim helilerde kullandigimiz backup uniteler gibi ??

Çok mantıklı olur... Sanırım iki versiyon yapacağım. Birisi böyle bir kullanıma hazır ünite diğeri elde var olan pillerin bağlanabileceği bir ünite.
 
[DIY]: LiPo'lu harici buji kızdırıcısı

Sümer abi bir de Mehmet abinin resmini attığı backup ünitelerden yapsan ya.. :D
 
[DIY]: LiPo'lu harici buji kızdırıcısı

Bundan birtane bende sipariş edebilirim Sümer abi. :laugh:

Yalnız starter'in liposu 3S, mümkünse bu da 3S destekli olursa tadından yenmez olur. :hoppa:

Emre'nin fikri backguard da mükemmel bir proje bence. :thumbup:
 
[DIY]: LiPo'lu harici buji kızdırıcısı

Emre Kaman' Alıntı:
Sümer abi bir de Mehmet abinin resmini attığı backup ünitelerden yapsan ya.. :D

Ne olduğunu kavrayınca yaparım. :D :D .D

Türker Akgün' Alıntı:
Bundan birtane bende sipariş edebilirim Sümer abi. :laugh:

Yalnız starter'in liposu 3S, mümkünse bu da 3S destekli olursa tadından yenmez olur. :hoppa:

Emre'nin fikri backguard da mükemmel bir proje bence. :thumbup:

3S uyumlu yapmak sadece iki satır kod değişikliği gerektiriyor. Hallederiz. :)
 
[DIY]: LiPo'lu harici buji kızdırıcısı

Kod optimizasyonu buymuş... Uyku modları, ADC kapatılması, BOD iptali vs vs... Bekleme durumunda çekilen akımı 700 mikroamperden 190 mikroampere düşürdüm. :)
2200 mAh LiPo'yu tam şarjlı halde takarsak, yaklaşık 482 günde bitiyor hiç kullanılmazsa. :D
Bence kabul edilebilir bir güç yönetimi bu...

Şu an tek sorun işin mekanik kısmı. Buji kızdırıcı kafası lazım. Artık kullanım dışı kalmış kızdırıcıları toplayıp bir şeyler yapacağım.

Kodun V6.3 sürümü:

Kod:
// Harici buji kızdırıcı
// 2S LiXX için
// İşlemci Attiny85 @ 1MHz internal
// Buton girişi PB3 (Attiny85 pin 2)
// PWM çıkışı PB0 (Attiny85 pin 5)
// LED çıkışı PB1 (Attiny85 pin 6)
// Voltage sense ADC2 (Attiny85 pin 3)


#include <avr/sleep.h>

#define BUTTON 3
#define LED 2
#define SENSE 2
#define PWMOUT 0
#define PWMMAX 60
#define PWMMIN 35

int voltlimit;
int maxvolt;
int minvolt;
int voltage;
int outpwm;
volatile unsigned long timer;
byte flag;

ISR(PCINT0_vect)
{
  timer = millis();
}

void setup()
{
  pinMode(LED, OUTPUT);
  pinMode(PWMOUT, OUTPUT);
  pinMode(BUTTON, INPUT_PULLUP);
  digitalWrite(LED, HIGH);
  delay(1000);
  minvolt = 600;
  maxvolt = 960;
  GIMSK |= _BV(PCIE);                     // Enable Pin Change Interrupts
  PCMSK |= _BV(PCINT3);                   // Use PB3 as interrupt pin
}

void loop()
{
  digitalWrite(PWMOUT, LOW);
  digitalWrite(LED, LOW);
  sleep();
  while(digitalRead(BUTTON)) sleep();
  checkvolt();
  timer = millis();
  while(!flag)
  {
    pwmon();
    if ((millis() - timer) > 15000)
    {
      digitalWrite(PWMOUT, LOW);
      flag = 1;
      blinkfast();
    }
  }
}

void checkvolt()
{
  flag = 0;
  voltage = analogRead(SENSE);
  voltage = analogRead(SENSE);
  if (voltage < minvolt)
  {
    blinkled();
    flag = 1;
  }
}

void blinkled()
{
  for (int n = 0; n < 15; n++)
  {
    digitalWrite(LED, HIGH);
    delay(300);
    digitalWrite(LED, LOW);
    delay(300);
  }
}

void blinkfast()
{
  for (int n = 0; n < 15; n++)
  {
    digitalWrite(LED, HIGH);
    delay(100);
    digitalWrite(LED, LOW);
    delay(100);
  }
}

void pwmon()
{
  voltage = analogRead(SENSE);
  if (voltage < minvolt) voltage = minvolt;
  if (voltage > maxvolt) voltage = maxvolt;
  outpwm = map(voltage, minvolt, maxvolt, PWMMAX, PWMMIN);
  analogWrite(PWMOUT, outpwm / 4);
  digitalWrite(LED, HIGH);
}

void sleep()
{
  cli();
  ADCSRA &= B01111111;                    // Disable ADC
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);    // replaces above statement
  sleep_enable();                         // Sets the Sleep Enable bit in the MCUCR Register (SE BIT)
  sleep_bod_disable();
  sei();                                  // Enable interrupts
  sleep_cpu();                            // sleep
  cli();                                  // Disable interrupts
  sleep_disable();                        // Clear SE bit
  ADCSRA |= B10000000;                    // Enable ADC
  sei();                                  // Enable interrupts
}
 
[DIY]: LiPo'lu harici buji kızdırıcısı

Sümer Yamaner' Alıntı:
Kod optimizasyonu buymuş... Uyku modları, ADC kapatılması, BOD iptali vs vs... Bekleme durumunda çekilen akımı 700 mikroamperden 190 mikroampere düşürdüm. :)
2200 mAh LiPo'yu tam şarjlı halde takarsak, yaklaşık 482 günde bitiyor hiç kullanılmazsa. :D
Bence kabul edilebilir bir güç yönetimi bu...
482 gün :eek: :eek: Daha ne olacak abi :thumbup: :hoppa:
 
[DIY]: LiPo'lu harici buji kızdırıcısı

Elimde 2S2P bir LiPo vardı. Oldukça küçük boyutlu. Plaketi ona tespit ettim. LiPo kablolarını doğrudan lehimledim. Balans ucunu şarj için kullanacağım. Elimde uygun boyutta shrink olmadığı için bantladım tümünü.

[attachimg=1]

Buji kafası henüz bulunamadığı için şimdilik krokodiller kullanacağım.
Alet çantada şurada burada bulunacağı için yazılımda bir değişiklik yaptım. Butona tek basışta değil çift tıklama ile devreye giriyor. Devredeyken butona tekrar tıklayınca 15 saniyelik süre sıfırlanıyor ve yeniden başlıyor. Ama butona basıp bir saniye basılı tutarsam kendini kapatıyor. Yazılım sürümü V6.4 oldu bu durumda. :D
 

Ekli dosyalar

  • pic06001.jpg
    pic06001.jpg
    47.5 KB · Görülme: 119
Saha testlerine başlıyoruz diyorsun yanı abi :bravo:


Sent from my iPhone using Tapatalk
 
[DIY]: LiPo'lu harici buji kızdırıcısı

Mehmet Kucuksari' Alıntı:
Saha testlerine başlıyoruz diyorsun yanı abi :bravo:


Sent from my iPhone using Tapatalk

Saha testleri yüzde yüzlük bir başarı ile tamamlandı. Şimdi doğrudan lehimli pilin uzun süreli takibi yapılacak. Bir de buji maşası takılınca işlem tamamdır.
 
[DIY]: LiPo'lu harici buji kızdırıcısı

Sümer Yamaner' Alıntı:
Saha testleri yüzde yüzlük bir başarı ile tamamlandı. Şimdi doğrudan lehimli pilin uzun süreli takibi yapılacak. Bir de buji maşası takılınca işlem tamamdır.
Bu durumda gelsin Siparisler diyoruz :hoppa: :yuppi:
 
[DIY]: LiPo'lu harici buji kızdırıcısı

Emeğine bilgine sağlık üstad saygılar hayretler ;D ;D :saygilar:
 
[DIY]: LiPo'lu harici buji kızdırıcısı

Yaklaşık bir sene olmuş ve LiPo o zamanki şarjı ile halen kullanılıyor. Güzel de bir buji kafası adapte edildi aradan geçen zamanda.
Pazar günü sipariş günüydü. Sevgili Deniz Pulse Display'den sonra bir de bozuk kızdırıcı ile geldi. Onarmamı istedi. EVde inceledim. Dandik bir entegre ile yapılmış. Azamî 3A çıkışı var. Halbuki buji kızdırıcı akımı 3.5A'den başlamalı. Onarmak için SMD entegreyi söküp, aynısından bulup lehimlemek gerek. Ben onunla uğraşacağıma kendi tasarımımı ondaki buji kafasına monte ederek olayı çözdüm. Çözerken de biraz daha ArGe yaptım. 2S-3S otomatik tanıma ve ayar sistemini geliştirdim. Çok daha tutarlı bir kızdırma sağlayabildim.
Hem güzel de oldu. :)

[attachimg=1]

[attachimg=2]

[attachimg=3]

Pil bağlandığında (bunu soketli yaptım) self test sonrası LED 1 saniye yanıp sönüyor. Sonra bağlanan pile göre ya iki (2S) kez ya da üç (3S) kez yanıp sönüyor. Eğer pil hücre başına 3.5V altında ise LED 10 kez yanıp sönüyor ve beklemeye geçiyor. Kızdırıcıyı aktive etmeye kalkarsak yine LED'i 10 kez yakıp söndürüyor. Yani LiPo'yu elden geldiğince koruyoruz.
Kızdırıcıyı çalıştırmak için butona çift tıklıyoruz. LED yanıyor. Eğer LED yanıp sönüyorsa pil bitik demektir.
Kızdırıcı 15 saniye sonra kendini kapatıyor ve LED 15 kez hızlı hızlı yanıp sönüyor.
Kızdırıcı aktifken butona basıp iki saniye basılı tutulursa kızdırıcı kapanıyor. Butona basılıp hemen bırakılırsa 15 saniyelik süre yeniden başlıyor.
 

Ekli dosyalar

  • pic001.jpg
    pic001.jpg
    109.4 KB · Görülme: 54
  • pic002.jpg
    pic002.jpg
    77.5 KB · Görülme: 55
  • pic003.jpg
    pic003.jpg
    87.6 KB · Görülme: 54