Mikroişlemci kontrollü switch

Sumer Yamaner

Moderator
Katılım
17 Eyl 2013
Mesajlar
9,188
Tepkime puanı
23,910
Yaş
62
Konum
İstanbul
Web sitesi
www.sumeryamaner.com
İlgi Alanı
Uçak
Dün sahada bir arkadaşımızın 60 cc benzinli motorunda sorun vardı. İğne ayarlarını elden geçirdik. Gayet güzel oldu. Zaten motor OS idi ve karbüratörü gerçekten de kolay ayarlanabilen bir tip. Ama özellikle tam gazda motorda kesiklikler oluyordu. Sorunun karbüratörden olmadığı çok net idi. Buji şapkasının hali hoşuma gitmediği için önce oradan başladık işe ama bir değişiklik olmadı. Daha sonraki denemelerde ateşleme voltaj göstergesinin göz kırptığını farkettik. Araştırmalara devam edince ateşleme hattında kullanılan klasik switch gövdesine dokunulduğunda elektriğin gidip geldiğini farkettik.
Hezarfen ekibimizde genel bir kill switch fobisi vardır. Elektroniğe güvenemezler. Nasıl oluyorsa 50 - 60 cc benzinli uçağın titreşimine rağmen mekanik switchlere çok güveniyorlar. Ben de bir ara çözüm düşünmeye başladım. Uzaktan kumandalı bir kill switch'ten korkmalarının bir sebebi, yanlışlıkla havada eli butona gidip motoru stop ettirme korkusuydu. Hatırlayacağınız gibi akıllı kill switch ile bu sorunu kökünden çözmüştük. Ama madem bu korku var, bari mekaniği ortadan kaldırıp yine butonla açılıp kapatılan bir switch yapalım diye düşündüm.
Planladığım sistem şöyle:
Her ne kadar Arduino ile test edilecek ise de nihai üründe 8 bacaklı bir Attiny85 yer alacak.
Bir buton olacak. Bir LED ve batarya giriş ve çıkışı.
Anahtarlama işlemi klasik olarak bir NPN transistörün süreceği bir logic level P channel MOSFET ile yapılacak. Yani sistemin kaldırabileceği azami akım 30 - 40 Amper düzeyinde oluyor bu şekilde.
LED beklendiği üzere çalışma durumunu gösterecek. Ancak yakıp söndürülerek bazı mesajlar da iletilebilir ileride. Örneğin düşük giriş gerilimi durumunda ikaz edebilir. Ya da çok renkli LED kullanılabilir bu amaçla. Ben ilk porototipte fanteziye kaçmadan en basit sistemi denemek istediğim için şimdilik sadece ON ve OFF konumunu gösterecek bu LED.
Bir tane de buton olacak. Butona basıp belirli bir süre (örneğin üç saniye) basılı tutunca sistem durum değiştirecek. Yani açıksa kapanacak, kapalıysa açılacak.
Bu aşamada kod oldukça kolay gibi duruyor. Ama ileride eklenecekler ile oldukça karmaşık bir şey çıkabilir ortaya.
Gelişmeleri buradan duyuracağım...

------------------------------------------------------------------------------------------------------------------
08.09.15
Kısa bir video ile demo...

Bu VIDEOYU görmek için izniniz yok. Giriş yap veya üye ol
 
Sümer Yamaner' Alıntı:
.....
Hezarfen ekibimizde genel bir kill switch fobisi vardır. Elektroniğe güvenemezler. Nasıl oluyorsa 50 - 60 cc benzinli uçağın titreşimine rağmen mekanik switchlere çok güveniyorlar. Ben de bir ara çözüm düşünmeye başladım. Uzaktan kumandalı bir kill switch'ten korkmalarının bir sebebi, yanlışlıkla havada eli butona gidip motoru stop ettirme korkusuydu. Hatırlayacağınız gibi akıllı kill switch ile bu sorunu kökünden çözmüştük. Ama madem bu korku var, bari mekaniği ortadan kaldırıp yine butonla açılıp kapatılan bir switch yapalım diye düşündüm.
....
Albert Einstein amcamız boşuna mı "Ön Yargıları Yıkmak,Atomu Parçalamaktan Zordur" demiş abi :laugh: :D

Ama Hezarfen grubu sana ne kadar teşekkür etse azdır. Her türlü elektronik problemlerde tam ve müşteriye özel çözümlerler 7x24 hizmettesin abi :bravo: :halay:
 
tamam beyler dağılın ;D

abi sana diyecek pek bir şey yok artık bence. var da yok işte :coolxf: BRAVO...
 
Sümer abi, led olarak WS2812'leri kullanmayı denemeni şiddetle tavsiye ederim. LED'in kendi üzerinde IC var ve bu sayede istenilen sayıda LED istenilen herhangi FARKLI görevlere(daha doğrusu renklere :) ) atanarak, ve arduino'da(ya da attiny'de) tek bir pin işgal ederek kulanılabiliyor.

Yanlız, logic level mosfet için niye NPN sürücüye gerek olduğunu anlayamadım Sümer Abi, Attiny85 3v3 ile mi çalışacak ?
 
Zafer'ciğim o LED'leri hemen mercek altına alıyorum.
Attiny 5 V ie çalışacak. Çıkışta artı ucu kontrol edebilmek için P Channel MOSFET gerekiyor. P Channel MOSFET'in gate'ini doğrudan mikroişlemcinin çıkışına bağlarsam MOSFET sürekli iletimde kalır.
 
Mikroişlemci kontrollü switch

Arduino Uno ile test yaptım. Tam istediğim gibi...
Kod aşırı derecede basit. Butona basılı olup olmadığına bakıyor ve basıldı ise 2500 milisaniye boyunca bırakılıp bırakılmadığını kontrol ediyor. Arada bırakıldıysa başa dönüyor. Bırakılmadıysa durumu değiştiriyor. Yani ON ise OFF yapıyor. OFF ise ON yapıyor. Bunu çıkışa ve LED'e aktarıyor. Sonra butonun hala basılı olabileceği olasılığına karşı bırakılmasını bekliyor ve aynen devam ediyor.

Kod:
// Elektronik switch denemesi

const int buton = 4; // Buton 4 numaralı digital girişte
const int LED = 1; // LED 1 numaralı digital çıkışta
const int out = 0 // MOSFET kontrol çıkışı 0 numaralı digital çıkışta
boolean durum = 0; // ON-OFF durumunu içeren değişken
unsigned long frame;
byte flag;



void setup() 
{
  pinMode(buton, INPUT_PULLUP);
  pinMode(LED, OUTPUT);
}

void loop() 
{
  digitalWrite(LED, durum);
  digitalWrite(out, durum);
  flag = 0;
  if(digitalRead(buton) == LOW)
  {
    frame = millis();
    flag = 1;
    while((millis() - frame) < 2500)
    {
      if(digitalRead(buton) == HIGH) flag = 0;
    }
    if(flag == 1)
    {
      durum = !durum;
      digitalWrite(LED, durum);
      while(digitalRead(buton) == LOW)
        {
        }
    }
  }
}

[attachimg=1]
 

Ekli dosyalar

  • Electronic Switch.jpg
    Electronic Switch.jpg
    64.6 KB · Görülme: 126
Mikroişlemci kontrollü switch

Plaket tasarımını da tamamladım. Ancak boyutları küçültebilmek için (3 cm X 3.25 cm) portlar değişti. Yazılımda port değerleri plakete uygun olarak yeniden düzenlenecek. Bu akşam baskı ve prototip üretimini tamamlayabilirim sanırım...

[attachimg=1]

Bu aşamada yapmam gereken iş şu: İşlemcinin uyku modları ve geçişler iyice anlaşılacak ve butona basılmadığı zamanlarda uyku modunda kalması sağlanacak. Bu şekilde uçuş günleri arasında pilin ayrılma ihtiyacının ortadan kalkması sağlanmaya çalışılacak.
 

Ekli dosyalar

  • Electronic Switch Board.jpg
    Electronic Switch Board.jpg
    122.3 KB · Görülme: 117
Mikroişlemci kontrollü switch

Sümer Yamaner' Alıntı:
Plaket tasarımını da tamamladım. Ancak boyutları küçültebilmek için (3 cm X 3.25 cm) portlar değişti. Yazılımda port değerleri plakete uygun olarak yeniden düzenlenecek. Bu akşam baskı ve prototip üretimini tamamlayabilirim sanırım...
Abi hız olarak sana yetişmemiz mümkün değil :bravo: :laugh:

Sümer Yamaner' Alıntı:
Bu aşamada yapmam gereken iş şu: İşlemcinin uyku modları ve geçişler iyice anlaşılacak ve butona basılmadığı zamanlarda uyku modunda kalması sağlanacak. Bu şekilde uçuş günleri arasında pilin ayrılma ihtiyacının ortadan kalkması sağlanmaya çalışılacak.
Abi Hazerfen grubu şimdi bu şahane özellikten de huylanıp kullanmamazlık yapmasınlar ;D Örneğin "Ben uçarken yanlışlıkla UYKU moduna geçerse" diye düşünenler çıkabilir :lollol: :lol:
 
Mikroişlemci kontrollü switch

Kendileri uyku moduna geçmesinler de... [emoji14]

SM-N910C cihazımdan Tapatalk kullanılarak gönderildi
 
Bu gibi sistemlerde butona basıldığında bir tepki gelmesi kullanıcı açısından iyi oluyor. O nedenle kodu biraz değiştirdim. Butona basıldığında LED yanıp sönmeye başlıyor. Bu da kullanıcıya butona bastığını gösteren bir geribildirim. Tabii butonun bağlantılarının sağlam olduğunu da anlatıyor bu davranış. Eğer üç saniye dolmadan buton bırakılırsa LED eski durumuna dönüyor. Yani sistem OFF ise sönüyor, ON ise yanıyor. Üç saniye boyunca buton bırakılmazsa sistem ON - OFF dönüşümünü gerçekleştiriyor.

Kod:
// Elektronik switch denemesi

const int buton = 3; // Buton 3 numaralı digital girişte
const int LED = 2; // LED 2 numaralı digital çıkışta
const int out = 1; // MOSFET kontrol çıkışı 1 numaralı digital çıkışta
boolean durum = 0; // ON-OFF durumunu içeren değişken
unsigned long frame;
byte flag;
boolean ledstatus;



void setup() 
{
  pinMode(buton, INPUT_PULLUP);
  pinMode(LED, OUTPUT);
}

void loop() 
{
  digitalWrite(LED, durum);
  digitalWrite(out, durum);
  flag = 0;
  if(digitalRead(buton) == LOW)
  {
    frame = millis();
    flag = 1;
    while((millis() - frame) < 2500)
    {
      if(digitalRead(buton) == HIGH)
      {
        flag = 0;
        frame = millis() - 3000;
        ledstatus = 0;
      }
      digitalWrite(LED, ledstatus);
      ledstatus = ! ledstatus;
      delay(200);
    }
    if(flag == 1)
    {
      durum = !durum;
      digitalWrite(LED, durum);
      while(digitalRead(buton) == LOW)
        {
        }
    }
  }
}

Bu kod yukarıda vermiş olduğum baskılı devreye göre düzenlenmiş durumda. Birazdan baskı işini yapacağım ama plaket kesip delmek için saat çok geç oldu. O da yarın akşama kalacak.
 
Mikroişlemci kontrollü switch

Sümer Yamaner' Alıntı:
Bu gibi sistemlerde butona basıldığında bir tepki gelmesi kullanıcı açısından iyi oluyor. O nedenle kodu biraz değiştirdim. Butona basıldığında LED yanıp sönmeye başlıyor. Bu da kullanıcıya butona bastığını gösteren bir geribildirim. Tabii butonun bağlantılarının sağlam olduğunu da anlatıyor bu davranış. Eğer üç saniye dolmadan buton bırakılırsa LED eski durumuna dönüyor. Yani sistem OFF ise sönüyor, ON ise yanıyor. Üç saniye boyunca buton bırakılmazsa sistem ON - OFF dönüşümünü gerçekleştiriyor.
Abi sen kesinlikle yanlış meslek seçmişsin. Bu kadar güzel ve ince ayrıntılara önem veren birisi olarak senin "DIZAYN Muhendisi" falan olman gerekiyormus ;)

Sümer Yamaner' Alıntı:
Bu kod yukarıda vermiş olduğum baskılı devreye göre düzenlenmiş durumda. Birazdan baskı işini yapacağım ama plaket kesip delmek için saat çok geç oldu. O da yarın akşama kalacak.
1 günde 1 proje.... Sana proje dayandıramıyoruz abi :laugh: :D
 
Yok yaa... Bu gerçekten de çok basit bir proje oldu. Kod LED yakıp söndürmek kadar basit. Ama işim bitmedi. İşlemciyi butona basılmayan dönemlerde uykuya yatırmalıyım ki gereksiz yere pil harcaması olmasın. Ayrıca farkındaysan proje üretimim çok yavaşladı. Nerede o eski projeler. :D
 
Mikroişlemci kontrollü switch

Sümer Yamaner' Alıntı:
Yok yaa... Bu gerçekten de çok basit bir proje oldu. Kod LED yakıp söndürmek kadar basit. Ama işim bitmedi. İşlemciyi butona basılmayan dönemlerde uykuya yatırmalıyım ki gereksiz yere pil harcaması olmasın. Ayrıca farkındaysan proje üretimim çok yavaşladı. Nerede o eski projeler. :D
Yavaşlar tabii ki abi. Yapılabileceklerin çoğunu kısa sürede yaptın ve bitirdin :laugh: :D

Şu uyku modunu bence bir kere daha düşün abi. İnan bu şahane özellik nedeniyle ürüne çamur atıp, kullanmayacaklar abi :)
 
Prototip üretimi tamam. İstenilen şekilde çalışıyor. Ama henüz sleep mode yani güç tasarrufu sistemi yok. Yani böyle kullanılacak olursa uçuş günü sonunda pili devreden ayırmak lazım. Bugün sleep mode ayrıntılarını hatmettim. Gecenin ilerleyen saatlerinde uygulamaya geçerim diye umuyorum.

[attachimg=1]
 

Ekli dosyalar

  • pic0001.jpg
    pic0001.jpg
    38.4 KB · Görülme: 72