[DIY]: Arduino ile Navigasyon Işık Uygulaması

Arduino ile Navigasyon Işık Uygulaması

Sümer bey, strobe ledleri yüksek akım ile süreceğiniz belirtmişsiniz ama gözün parlaklı algısı lineer değil logaritmiktir (bir doktora söylenecek bir laf değil ama :lol: ). Yani LED akımını iki katına çıkarsanız bile göz onu iki kat parlaklaşmış olarak algılamaz. Nacizane, akımı yukseltmenin cok da faydalı olmayacağını düşünüyorum. Bir de ukalalık olarak almazsanız kodunuzu sizin stilinize bağlı kalarak yazsam hemen hemen şu şekilde yazardım.



Kod:
/* Uçak ışıklandırma sistemi projesi. Her iki kanat ucunda birer navigasyon lambası (solda kırmızı sağda yeşil).
 Kanat uçlarında birer beyaz strobe light. Gövdenin altında kırmızı strobe light. Dikey stabun tepesinde kırmızı beacon.
 V03'teki değişiklik, rxpwm sinyalinin interruptlar ile okunuyor oluşu. */

#include <MsTimer2.h>

int nav1 = 2; // Sol kanat ucu, kırmızı NAV light
int nav2 = 3; // Sağ kanat ucu yeşil NAV light
int strobe1 = 4; // Sol kanat ucu beyaz strobe light
int strobe2 = 5; // Sağ kanat ucu beyaz strobe light
int strobe3 = 6; // Gövde altı kırmızı strobe light
int beacon = 10; // Dikey stab ucu kırmızı beacon LED. PWM çıkışlı uç olmalı.
int rxpin = 8; // Alıcıdan gelen kontrol sinyali girişi

int rxflag = 0; // chkrx altprogramında beklemeyi engellemek için flag
int rxpwm = 0;
int mode = 0; // 0: LED'ler OFF. 1: NAV. 2: Beacon. 4: Strobe => NAV + Beacon + Strobe = 1 + 2 + 4 = 7
int beaconvalue = 33; // Beacon için minimum ışık düzeyi
int beaconstep1 = 11; // Beacon adımı
int beaconstep2 = 37;
int yon = 1; // Beacon artış azalış değişkeni. 1 ya da -1
int rxyon = 1;
int strobetiming; // Şu an için kullanılmıyor
unsigned long timer; // Genel zamanlama değişkeni


void setup () {
//  Serial.begin(9600);
    pinMode(nav1, OUTPUT);
    pinMode(nav2, OUTPUT);
    pinMode(strobe1, OUTPUT);
    pinMode(strobe2, OUTPUT);
    pinMode(strobe3, OUTPUT);
    //pinMode(beacon, OUTPUT); //analogWrite için OUTPUT tanımlamaya gerek yok.
    MsTimer2::set(90, beaconwrite);
    MsTimer2::start();
}

void loop() {
//  Serial.println(mode);
    switch (mode) {
        case 1: // NAV = 1
            navs_on();
            break;
        case 2: // Beacon = 2
            mode = mode + 1; // Sadece beacon kullanılmıyor, dolayisi ile bir ust mode seviyesine gec, bunu da ilerisi icin hazir tut
            break;
        case 3: // NAV + Beacon = 1 + 2 = 3
            navs_on();
            break;
        case 4: // Strobe = 4
            mode = mode + 1; // Sadece Strobe kullanılmıyor, dolayisi ile bir ust mode seviyesine gec, bunu da ilerisi icin hazir tut
            break;
        case 5: // NAV + Strobe = 1 + 4 = 5
            mode = mode + 1; // NAV + Strobe kullanılmıyor, dolayisi ile bir ust mode seviyesine gec, bunu da ilerisi icin hazir tut
            break;
        case 6: // Beacon + Strobe = 2 + 4 = 6
            mode = mode + 1; // Beacon + Strobe kullanılmıyor, dolayisi ile bir ust mode seviyesine gec, bunu da ilerisi icin hazir tut
            break;
        case 7: // NAV + Beacon + Strobe = 1 + 2 + 4 = 7
            navs_on();
            strobeon();
            break;
        default: // LEDs off
            switchoff();
    }
}

void switchoff() { // Tüm LED'leri kapatan altprogram
    digitalWrite(nav1, LOW);
    digitalWrite(nav2, LOW);
    digitalWrite(strobe1, LOW);
    digitalWrite(strobe2, LOW);
    digitalWrite(strobe3, LOW);
    //digitalWrite(beacon, LOW); // PWM kullanılacaksa, karisiklik olmaması icin digital write kullanilmamali
    analogWrite(beacon, 0);
}

void chkrx() { // Alıcı sinyaline göre mode değişkenini düzenleyen altprogram
    rxpwm = pulseIn(rxpin, HIGH);
    if(rxpwm < 1500) {
        rxflag = 1;
    } else if(rxpwm >= 1500 && rxflag == 0) {
        return;
    } else if(rxpwm >= 1500 && rxflag == 1) {
        rxflag = 0;
        mode = mode + 1;
        if(mode > 7) {
            mode = 0;
        }
    }
}

void navs_on() { // NAV isiklarini ac
    digitalWrite(nav1, HIGH);
    digitalWrite(nav2, HIGH);
}

void beaconwrite() { // Beacon LED2ine analog çıkış veren ve her seferinde parlaklığı bir artıran ya da azaltan altprogram
    chkrx();
    //  if(mode == 0);
    //  {
    //    switchoff();
    //    return;
    //  }
    if((mode == 1) || (mode == 4) || (mode == 5)) {
        analogWrite(beacon, 0); // PWM icin digitalWrite yerine analogWrite kullanilmali, kodun butunlugu icin heryerde ayni olmali
        return;
    }
    if((mode == 2) || (mode == 3) || (mode == 6) || (mode == 7)) {
        analogWrite(beacon, beaconvalue);
        beaconvalue = beaconvalue + (yon * 34);
        if(beaconvalue >= 255) {
            yon = yon * (-1);
            beaconvalue = 255;
        } else if(beaconvalue < 10) {
            yon = yon * (-1);
            beaconvalue = 10;
        }
    }
}

void strobeon() {
    int z = 0;

    digitalWrite(strobe1, HIGH);
    digitalWrite(strobe2, HIGH);
    delay(60);
    
    digitalWrite(strobe1, LOW);
    digitalWrite(strobe2, LOW);
    delay(60);

    digitalWrite(strobe1, HIGH);
    digitalWrite(strobe2, HIGH);
    delay(60);
    
    digitalWrite(strobe1, LOW);
    digitalWrite(strobe2, LOW);
    delay(60);

    digitalWrite(strobe1, HIGH);
    digitalWrite(strobe2, HIGH);
    delay(60);
    
    digitalWrite(strobe1, LOW);
    digitalWrite(strobe2, LOW);
    delay(60);

    digitalWrite(strobe3, HIGH);
    delay(60);
    
    digitalWrite(strobe3, LOW);
    delay(180);

    digitalWrite(strobe3, HIGH);
    delay(60);
    
    digitalWrite(strobe3, LOW);
    delay(380);
}

Multitasking davranışını taklit etmek için kullanılan SimpleTimer, Timer, Metro v.b. bir çok kütüphane var aslında, ki özellikle Soft Timer kütüphanesini Scheduler'e pek benzer bulacaksınız. Ama arduino tarafından sağlanan saatin çok hassas olmamasından kaynaklı olarak, zaman içerisinde kayma yaşanabiliyor. Yani Soft Timer ile, birisi 100 diğeri 200ms sonra çalışan 2 loop tanımladınız. Bir kaç dakika sonra loop'ların zaman değerlerinin örtüşmemeye başladığını farkedeceksiniz. Ama kütüphanenin BlinkTask diye bir özelliği var ki evlere şenlik.



Kod:
#include <SoftTimer.h>
#include <BlinkTask.h>

#define LED_YLW 12
#define LED_BLU 11
#define LED_GRN 10
#define LED_RED 9
#define LED_WHI 8

BlinkTask hb_ylw(LED_YLW, 150, 50, 3, 1150); // 150 ms acik, 50ms kapali, 3 defa tekrar et, 1150ms bekle sonra bastan basla
BlinkTask hb_blu(LED_BLU, 50, 50, 4, 1500);
BlinkTask hb_grn(LED_GRN, 20, 20, 10, 200);
BlinkTask hb_red(LED_RED, 100, 500, 2, 1000);
BlinkTask hb_whi(LED_WHI, 500, 200, 2, 1000);

void setup() {
  hb_ylw.start();
  hb_blu.start();
  hb_grn.start();
  hb_red.start();
  hb_whi.start();
}
 
Arduino ile Navigasyon Işık Uygulaması

Zafer Bey birazdan "benim tarzımla" yazdığınız koda bakacağım da bu blink olayı çok ayıp olmuş. :D :) Her şeyi library yaparsa bana yazacak kod kalmıyor! :D

LED akımına gelince. Daha önce bir 4013 (RC Switch için), bir 555 ve bir de 4017 kullanarak, 4017'nin çıkışlarını değişik diyot kombinasyonları ile birleştirerek aynen şimdi yaptığım strobe ışıklarını yapmıştım. 1 W power LED kullanmıştım. Gün ışığında olabilecek en yüksek ışık çıkışını elde etmek için 4017'den çıkan diyot kombinasyonu ile birer BD135 güç transistörünü sürmüş, 2S LiPo ile power LED'leri öndirençsiz beslemiştim. Yaklaşık 50 - 60 milisaniyelik çakmalarda öndirençli ve akım kontrollü olana göre belirgin olarak daha iyi sonuç vermişti. Bu uygulamada da o uygulamadan kalan deneyimlerim ışığında benzer bir sürücü planlayacağım strobe LED'leri için. Diğerleri ise muhtemelen bir transistör bir MOSFET içerecek sabit akım kaynağı ile sürülecekler.
 
Arduino ile Navigasyon Işık Uygulaması

Yok artık...



Amanınnn neler varmış! :D
 
Arduino ile Navigasyon Işık Uygulaması

Arkadaşlar, Banggood'dan verdiğim Arduino siparişim geleli 1 hafta kadar oluyor. Geldiğinden beri tezgahın üzerinde duruyor ve gözüme bir tırtıl'dan farklı görünmüyor. Şu ana kadar elimde ufak tefek başka işler olduğu için ilişkimiz platonik olmaktan öteye gidemedi. Ama en baştan konulara bir göz atarak başlayayım bakayım ne olacak?
 
Arduino ile Navigasyon Işık Uygulaması

Sümer Yamaner' Alıntı:
Abicim verdiğim simülatör linkine göz attın mı?

Evet, ama Uno ve Micro seçeneği var, benim Nano yok. Neyse, birinin üzerinde biraz kafa yormak en azından alıştırma olur!
 
Arduino ile Navigasyon Işık Uygulaması

Abi sen projeni Uno ile geliştir. Aynı kod Nano'da çalışır. Portlar aynı. Boyut farklı sadece.
 
Arduino ile Navigasyon Işık Uygulaması

Evet arkadaşlar, çok mutluyum! :halay: Kartımı kurduktan sonra, Zafer bey'in verdiği örnekteki mal mal durma programını yükledim, hakkaten duruyor! :eek: Sonra, blink programını yükledim, üzerindeki kırmızı led bana göz kırpmaya başladı, sevindim. Hatta değişiklik yapıp iki kısa yanma sonrası bir uzun sönme bile yaptım. :)

Sonra, elimde direnç vs olmadığı için, Uno ile Sümer bey'in verdiği simülatöre başladım ve blink programını yükleyip, harici kırmızı ledi yakıp söndürdüm! :halay: Bu simülatör çok işe yarayacağa benziyor.

Arduino dersimi çalışmaya devam ediyorum. Ama biraz sindirmem lazım! :rolleyes:
 
Arduino ile Navigasyon Işık Uygulaması

Omer Erkan' Alıntı:
Evet arkadaşlar, çok mutluyum! :halay: ......

Arduino dersimi çalışmaya devam ediyorum. Ama biraz sindirmem lazım! :rolleyes:
Vay abim harikasın :thumbup: Artık sen de aktif bir DIY grubu üyesisin :halay: :yuppi:
 
Arduino ile Navigasyon Işık Uygulaması

Banggood benim çok karışık (!) arduino siparişlerimi bir türlü tam olarak gönderemedi :D siparişleri üçe beşe bölüp, sonra onu ona bunu buna karıştırdıkları gibi, bir de aradan eksik de gönderdiler. Sonra korkarım eksik olan ürün yerine tamamen başka bişey gönderecekler... Arada Rasim'e de aldık bi set, onu da eksik göndermişler. En son mailde B12 vitamini ve naneli şeker tavsiye ettim unutkanlığa karşı ve zihin açar diye. Yine yanlış gönderirlerse okunmuş pirinç, okunmuş su ve bir de 2b kalem ve kalemtraş göndercem kendilerine :lollol:
 
Arduino ile Navigasyon Işık Uygulaması

Emre Kaman' Alıntı:
....... En son mailde B12 vitamini ve naneli şeker tavsiye ettim unutkanlığa karşı ve zihin açar diye. Yine yanlış gönderirlerse okunmuş pirinç, okunmuş su ve bir de 2b kalem ve kalemtraş göndercem kendilerine :lollol:
Emre resmen koptum ya " okunmuş pirinç" :lollol: :lol: :lollol: :lol:
 
Arduino ile Navigasyon Işık Uygulaması

Emre Kaman' Alıntı:
Banggood benim çok karışık (!) arduino siparişlerimi bir türlü tam olarak gönderemedi :D siparişleri üçe beşe bölüp, sonra onu ona bunu buna karıştırdıkları gibi, bir de aradan eksik de gönderdiler. Sonra korkarım eksik olan ürün yerine tamamen başka bişey gönderecekler... Arada Rasim'e de aldık bi set, onu da eksik göndermişler. En son mailde B12 vitamini ve naneli şeker tavsiye ettim unutkanlığa karşı ve zihin açar diye. Yine yanlış gönderirlerse okunmuş pirinç, okunmuş su ve bir de 2b kalem ve kalemtraş göndercem kendilerine :lollol:

Yaa o kadar da abartmayın. Sıfır kargo bedeli ile mal alıyoruz. Adamlar da siparişi bekletmek yerine olanı gönderiyorlar diğerini de sonra gönderiyorlar. Tek sorunları stok takibi. Siparişi verip ödeme yapıyorsun. Ertesi gün mail geliyor. "Şu şu item yok iptal mi edelim bekler misiniz" diye. O arada paket parçalanmış ve kısmen gönderilmiş oluyor. Ama bir şekilde geliyor. :)
Geçen Karaköy'deydim. Üç buçuk dolarlık Arduino Nano (klon) kartı 35 liraya satıyorlar!!!
 
Arduino ile Navigasyon Işık Uygulaması

Sümer Yamaner' Alıntı:
Yaa o kadar da abartmayın. Sıfır kargo bedeli ile mal alıyoruz. Adamlar da siparişi bekletmek yerine olanı gönderiyorlar diğerini de sonra gönderiyorlar. Tek sorunları stok takibi. Siparişi verip ödeme yapıyorsun. Ertesi gün mail geliyor. "Şu şu item yok iptal mi edelim bekler misiniz" diye. O arada paket parçalanmış ve kısmen gönderilmiş oluyor. Ama bir şekilde geliyor. :)
Geçen Karaköy'deydim. Üç buçuk dolarlık Arduino Nano (klon) kartı 35 liraya satıyorlar!!!

Ona hiç bir diyeceğim yok abicim, BG olmasa hiç uğraşılmaz bu işlerle de, o bedava kargo olayında da bi çakallık yapıyorlar. Mesela 23,35 olan bi siparişi 25'e tamamlayım da beleş kargo gelsin diyorum, arayıp 2 dolarlık malzeme buluyorum, bir bakıyorum, siparişi ikiye bölmüş, şimdi 2 kere 1,30 istiyor takipli kargo için :D Ona da razıyım, ama paketten eksik çıkan malzeme hiç çekilmiyor. 3 dolarlık pro mini için on kere mailleştik, ben 20 tane resim gönderdim.. 3 dolarını geçtim, 1 ay daha beklemek sorun. Neyse, dediğin gibi bir şekilde geliyor en azından.

Not: Arkadaşlar malezya kargosuna denk gelirseniz yaşadınız. 4 günde İstanbul upim'e giren paketim oldu malezya kargosuyla. Hatta bundan sonra not olarak yazıp rica etmeyi planlıyorum malezya'ya verin diye :D Çin kargosunun uçak bir havalanıyor, 15 gün konamıyor..
 
Arduino ile Navigasyon Işık Uygulaması

Emre, dur bir daha söylesene.

- Okunmuş pirinç
- Nane şekeri
- ...

Ben de bunları paket yapıp direnc.net'e göndereceğim. Adamlardan Logic Level Mosfet (IRLZ) istedim yarısını normal mosfet gönderdiler(IRFZ). 13.6Mhz RFID etiketi istedim, 125 Khz gönderdiler. 10 tane IDC konnektör istedim, konnektörlerin sadece yarısını(5 tanesini değil, her bir konnektörün yarısını :D ) gönderdiler. Arduino'yu seven direncine katlanır, yapacak bir şey yok :D.