Doğan Kayadelen
arduino kontrollü fırçasız dc motor sürücü tasarımı kodları devresi

Arduino Kontrollü Sensörsüz Fırçasız DC Motor Sürücü Tasarımı (BLDC Driver)

Arduino ile sensörsüz fırçasız DC motor sürücüsü nasıl yapılır? Sensörlü ve sensörsüz sürücüler arasındaki farklar neler? Ve fırçasız DC motor sürücüsü yapılırken karşılaşılan hatalar nelerdir?

Fırçasız DC Motor (BLDC)

BLDC ‘ler hakkında çok fazla detaya girmeden yazıma devam edeceğim.  Sensörlü ve sensörsüz olmak üzere iki adet BLDC motor vardır. Sensörlü fırçasız motorlarda 3 adet hall sensörü bulunur. Bu sensörler rotor pozisyonunu tespit eder.

bldc motor
bldc motor

Komütasyon nedir? (Commutation)

Türkçe karşılığı değişme, komütasyondur. Sensörden gelen verilere göre mosfetlerin high ve low kısımlarına hangi zamanda enerji verilmesi gerektiğini söyler. BLDC ler için 6 komütasyon vardır. Her 6 komütasyondan sonra bu döngü başa dönerek devam eder.

Sensörsüz Fırçasız DC Motor

Sensörsüz fırçasız motorda hall sensörleri bulunmamaktadır. Bu yüzden rotor pozisyonu zıt elektromotor kuvveti (back electromotive force, bemf) ile tespit edilir. Sensörsüz BLDC motor kontrolünün ana avantajı  düşük sistem maliyetiyken dezavantajı ise, algılanacak yeterli BEMF üretmek için motorun minimum hızda hareket etmesidir.

Fırçasız DC Motor Nasıl Çalışır?

BLDC motor dönmeye başladığında her 3 sarımda zıt elektromotor kuvveti (bemf) oluşturur. Üretilen bu 3 BEMF sinyali hall sensöründeki gibi 120° faz farkı vardır. Aşağıdaki şekilde hall sensörü ve BEMF arasındaki ilişkiye bakalım.

fırçasız dc motor nasıl çalışır
fırçasız dc motor nasıl çalışır

Hall seönsürle BEMF tam anlamıyla senkronize olmadığını rahatlıkla anlayabiliriz. 30 derece faz farkı görülüyor. Her enerjilendirilen bölümde iki sargıya enerji veriliyor. Bunlardan birisi artı diğeri eksi bir diğeri de boşta (literatürde floating olarak geçiyor.) 3. kalan floating sargı yani boştaki sargı ise birazdan anlatacağım zero crossing (sıfır geçiş) olayını tespit etmek de kullanılıyor. Burada yüksekten düşüğe ve düşükten yükseğe her geçişte zero crossing olayını gözlemleyebilmekteyiz.

Sıfır geçiş olayını nasıl tespit edebiliriz?

Sıfır geçiş olaylarını tespit etmenin en kolay yolu karşılaştırıcılar (comparator)kullanmaktır. Atmega işlemcisinde analog comparatorumuz mevcut.  Karşılaştırıcının 3 ana terminali vardır: 2 giriş (pozitif ve negatif) ve bir çıkış. Pozitif voltaj negatif voltajdan yüksekse, karşılaştırıcı çıkışı high ve pozitif voltaj negatif voltajdan düşük ise low çıkışı verir.
Temelde bu proje için 3 karşılaştırıcıya ihtiyaç vardır, bağlantılar aşağıdaki şekilde gösterildiği gibi yapılır (B kısmı için). Her faz benzer bir devre gerektirir.

sıfır geçiş olayını nasıl tespit ederiz zerocrossing
sıfır geçiş olayını nasıl tespit ederiz zerocrossing

Virtual neutral point yani sanal doğa noktası 3 karşılaştırıcı için de aynıdır bu yüzden biz bunları devremizde 3 direnç kullanarak ve her fazdan gelenleri birleştirerek elde ettik.  Boşta kalan sargıda yani üstte bahsettiğimiz floating kısmında zıt elektromotor kuvveti sıfır noktasının pozitif kısmına geçtiğinde karşılaştırıcı low dan high a geçiş yapar. Eğer floatingdeki bemf sıfır noktasının negatif kısmına geöerse karşılaştırıcı da high dan low a geçiş yapar. Bu üç karşılaştırıcı devresinde her faz üzerinde bemf sinyalina karşılık üç dijital sinyal verilir. Bu üç sinyalin kombinasyonu komütasyon sırasını üretmek için  kullanılır.

Sensörsüz Fırçasız DC Motor Sürücüsü İçin Gerekli Devre Elemanları

  • Arduino UNO
  • Fırçasız DC Motor (BLDC)
  • 6 x IRFZ44 N tip mosfet veya eşdeğeri
  • 3 x IR2104 gate mosfet sürücüsü
  • 6 x 33k ohm direnç
  • 3 x 10k ohm direnç
  • 6 x 100 ohm direnç
  • 3 x IN4148 diyot
  • 3 x 10uF kapasitör
  • 3 x 2.2uF kapasitör
  • 2 x buton
  • 12V güç kaynağı
  • Breadboard
  • Erkek erkek ve erkek dişi kablolar

Arduino ile Sensörsüz BLDC Motor Kontrol Devresi

fırçasız sensörsüz dc motor devre gerçeklemesi
fırçasız sensörsüz dc motor devre gerçeklemesi

Tüm toprakları ortak bağlamayı unutmayın özellikle 12V ‘un eksisiyle. Devremizde 2 tane butonumuz var. A0 pinine bağlı olan motorun hızını arttırırken A1 pinine bağlı olan motorun hızını azaltır.

A, B ve C fazlarından çıkan kabloların girdiği ilk üç 33k direnç ve üç 10k direnç voltaj bölücü olarak kullanılmaktadır. Çünkü mikrodenetleyicimize 12V veremiyoruz. En sol kısımda bulunan diğer 33k dirençler ise sanal doğal noktayı (virtual neutral point) oluşturmaktadır. Ve bu pin arduinomuzun 6. pinine bağlanmaktadır.

Arduino UNO kartı, analog bir karıştırıcıya (analog comparator) sahip Atmega328p mikrodenetleyicine sahiptir.  Bu comperatorın pozitif girişi pin6 (AIN0)’dadır yani virtual natural pointte (sanal doğal nokta). Eksi girişi işe A fazının BEMF’i için pin7 (AIN1), B fazının BEMF için A2 (ADC2)pin ve C fazının BEMF için A3 (ADC3) pinine bağlanmıştır. Karşılaştırıcı her seferinde sanal noktayı bir fazın ters elektro motor kuvveti ile karşılaştırır bu işlem yazılımımızda yapılacaktır.

Mosfetlerin high ve low kısımlarını kontrol etmek için IR2104 entegresini yani mosfet sürücülerimizi kullandık. Yüksek ve alçak arasındaki geçişleri biz IN ve SC kontrol hatları üzerinden yapıyoruz. Aşağıda giriş ve çıkışların detaylı sinyalleri verilmiştir.

IR2104 lerin SD girişlerine Arduinomuzun 9, 10 ve 11. pinleri bağlanmıştır. High sidelar için de arduinomuzdan pwm üreteceğiz.

Arduino ile Sensörsüz Fırçasız DC Motor Kontrolü Kodu

pin 9 ve pin 10 > Timer1 (OC1A OC1B) ile ilişkilendiriyoruz. Pin 11 ‘i ise Timer2 (OC2A) modülü ile ilişkilendiriyoruz. Her iki zamanlayıcı modulde pwm sinyali üretmek için tasarlanmıştır. Bu pwm sinyalleri 31 KHz frekansında ve 8 bit çözünürlüğündedir. PWM sinyallerinin buton ile ilişkileri yani hızlanma veya yavaşlama durumları OCR1A, OCR1B ve OCR2A yazmaçlarına yazılarak güncellenir.

Analog karşılaştırıcı, AIN0 pozitif girişini (Arduino pin 6) AIN1 (pin 7), ADC2 (pin A2) veya ADC3 (pin A3) pinlerinden biriyle negatif girişle karşılaştırır. Pozitif pin voltajı negatif pin voltajından yüksek olduğunda, analog karşılaştırıcı ACO’nun çıkışı 1 olacak şekilde (set) ayarlanır ve pozitif pin voltajı negatif pin voltajından düşük olduğunda, ACO temizlenir (clear). Bu projede analog karşılaştırıcı kesmesini (analog comparator interrupt) kullandım . Hem yükselişinde hem düşüşünde (artıdan eksiye eksiden artıya) kesme kullandım böylelikle zero crossing yani sıfır kesme olaylarını mikrodenetleyicimizle yapmış olduk.

Sensörsüz fırçasız dc motor yapmak kolay bir olay değil bu olayı tam olarak anlayabilmek için birden fazla kaynaktan araştırma yapmanız gerekiyor. Araştırmalarınız için mosfet datasheetleri, gate sürücü datasheetleri, kullanacağınız atmega328p nin datasheetini mutlaka okumanızı tavsiye ediyorum.

Sensörsüz Fırçasız DC Motor Sürücü Kontrolü Arduino Kodu

BLDC Proteus Çizimi

brushless dc motor driver circuit
brushless dc motor driver circuit
fırçasız dc motor sürücü devresi mikrodenetleyici kontrollü
fırçasız dc motor sürücü devresi mikrodenetleyici kontrollü

Sürücüsüz Fırçasız DC Motorun Baskı Devre Çizimi (PCB)

bldc baskı devre çizimi
bldc baskı devre çizimi

Çizilen PCB ‘nin 3 boyutlu Görselleştirilmesi

sensörsüz fırçasız dc motor pcb arka yüz
sensörsüz fırçasız dc motor pcb arka yüz
sensörsüz fırçasız dc motor pcb ön yüz
sensörsüz fırçasız dc motor pcb ön yüz
sensörsüz fırçasız dc motor sürücü arduino ile
sensörsüz fırçasız dc motor sürücü arduino ile

Mikro Denetleyici Kontrollü Sensörsüz Fırçasız DC Motor Sürücülerinde Karşılaşılabilecek Hatalar

1- Kullanılacak mosfet yerine başka mosfet kullanmak: Eğer siz bizim yazdığımız mosfet yerine başka mosfet kullanacaksanız her iki mosfetin datasheetine bakarak spesifikasyonların aynı olmasına dikkat ediniz. Örneğin açılıp kapanma süreleri değişirse anahtarlama hızına mosfetler ayak uyduramayabilir.

2- Mosfet sürücüsü olarak IR2101 kullanmak: Bizim belirttiğimiz IR2104 gate sürücüsü yerine ir2101 kullanacaksanız kodda modifikasyon yapmanız gerekmektedir.

3- Motorun olduğu yerde titreyip hareket etmemesi: Bunun bir çok nedeni olabilir ama en muhtemel neden switching işleminin doğru olmaması yani ya kod ya da mosfetler.

4- Pwm sinyalinin başlangıcının 100 ün altına düşmeme sorunu: Kodumuzu detaylı incelediğinizde başlangıç duty 100 olarak ayarlanmış ve duty 0 ile 255 arası değer alabilir fakat siz başlangıç duty değerini 100 ün altına düşürürseniz bemf algılanamayacağı için titreme hareketi yapacaktır. Bunu çözmek için hall sensörlü fırçasız dc motor sürücüsü yapabilir veya farklı bir kodla deneyebilirsiniz.

5- Butonlar yerine potansiyometre kullanamama: Sensörsüz fırçasız dc motor sürücülerinde karşılaşabileceğiniz verdiğimiz tüm hatalar özellikle bu proje için geçerlidir. Örneğin kodumuzda analog karşılaştırıcı ile ADC ‘nin multiplexer’i (çoklayıcı) aynı olduğu için potansiyometre ile denendiğinde karışma ihtimali var o yüzden potansiyometre tercih edilmez.

Bu projenin kodlarını sıfırdan kendim yazmadım hazır olarak aldım fakat detaylı araştırınca aslında çok da zor bir kod olmadığını göreceksiniz sıfırdan tekrar yazmaya zamanım olmadı bu yüzden kod açıklamaları İngilizce zamanım olunca Türkçe olacak şekilde revize edeceğim. Ticari ESC ler (Elektronik Hız Kontrolcü) kadar başarılı bir sürücü olmadığını da belirtelim. Proje çizimini isteyen arkadaşlar yorum veya mail atarak iletişime geçebilir.

r squared python r kare hatası

Regresyon Analizi: R Kare Teorisi ve Python’da Gerçekleştirilmesi (R squared Regression)

Veri analizinde kullanılan yöntemlerden bir tanesi olan (R squared regression) R kare nedir? Python dilinde nasıl kodlanır? ve en önemlisi sonuçlar nasıl yorumlanmalıdır? sorularına cevap vereceğim.

R Kare Teorisi

İlk olarak alttaki grafiğe bakalım. Bu grafikte çalışma süresi arttıkça gelirinde arttığını görebiliyoruz. Buradan regresyon formülümüzü Gelir= Sabit + Δ x Çalışma süresi olarak belirleyebiliriz.

regresyon r kare
regresyon r kare

Burada dependent ve independent verilerimiz;
Çalışma süresi: bağımsız değişken (x)
Gelir: bağımlı değişken (y)

Buradan bir bireyin çalışma süresine bağlı olarak gelirindeki artışı tahmin etmeye çalışıyoruz. Formülde bulunan sabit değişkenini de işe yeni başlayan tecrübesiz bir mühendis adayının aldığı maaş olarak düşünebiliriz.

Regresyon doğrusunun bizim noktalarımıza olabildiğince yakından geçmesi gerekiyor. İşte bunu sağlamak adına noktaların doğruya olan uzaklıklarını hesaplayıp regresyon doğrusunu oluşturabiliriz. Mantık olarak doğruyu noktalara en yakından geçirmek için doğru ile noktalar arasındaki mesafenin minimum olması gerekiyor bunun için en uygun yöntem küçük kareler yöntemi r kare de buradan geliyor aslında.

Artık regresyon eğrisini Yi değeri yani asıl noktamız ile tahmin edilen Yi^ arasındaki mesafenin karelerinin toplamının en düşük olacağı doğru olarak ifade edebiliriz. Tahmin edilen y^ değerinin y değerinden büyük olmasında eksi sayı geleceği için kare alınma işlemi yapılmakta.

regresyon r kare teorisi
regresyon r kare teorisi

Ne yazık ki her y değerine karşılık doğru üzerinde bir nokta karşılık gelmiyor işte karşılık gelmeyen bu noktalara residual yani atık denir. Bu residual değerlerinin kareleri toplamını da RKT = TOPLAM(Yi – Yi^)² yazalım. Son olarak her bir verimizin ortalama doğrumuza olan uzaklığını bulalım. AUKT = TOPLAM(yi – ȳ)²    (ȳ = ortalama mean değeri)

regresyon r kare ortalama
regresyon r kare ortalama

Evet geldik r kare değerimizin teorik olarak hesaplanmasına..
R2 = 1 – (RKT/AUKT)

R kare değerinin olabilecek en iyi hali 1 ‘dir. Fakat bunun için AUKT değerimizin 0 olması gerek yani tüm tahmin edilen değerlerin doğru üstünde olması gerek. Yani çok çok zor 🙂 Python da r squared işlemlerine geçmeden önce üstteki terimleri birer cümleyle daha açıklamak istiyorum. RKT dediğimiz y^ değerlerinin kare hatası, AUKT ise y değerlerinin ortalamasıdır.

R Kare Hatası Python (R squared error in Python with Sklearn)

Yukarıdaki formulü kendi datanıza uygun şekilde kodlayıp çalıştırabilirsiniz. Ben bu yazımda uzun uzadıya bunları yapmak yerine hazır kütüphane kullanarak r kare hatasını python da bir örnek üzerinden göstereceğim.

Yukarıdaki kodu çalıştırdığımızda bakalım r squared hatamız nasıl.

r kare hatası python
r kare hatası python

R squared error değerimiz 0.584415584415584 çıktı evet yani linear regresyonda r kare hatamız oldukça kötü. Başka regresyon çeşitleri uygulayıp r kare hatamızı daha da iyileştirebiliriz.

iir high pass filter stm32f4

IIR Yüksek Geçiren Filtre Tasarımı ve STM32F4 Mikroişlemcisinde Kodlanması

Bugün IIR yüksek geçiren filtre tasarımını matlab ‘de yapıp bu tasarımın stm32f4 mikroişlemcisinde nasıl kodlanılacağını detayları ile beraber vereceğim.

High pass filtre tasarımıza geçmeden önce kullandığım araçlar: MATLAB fdatool, stm32f4 discovery board, konfigurasyon ayarları için cubemx, ide olarak atolic TrueStudio, sinyal jeneratörü ve osiloskop.

Yüksek geçiren filtre tasarımı MATLAB

Öncelikle MATLAB programını açıyoruz. Workspace alanına “fdatool” yazıyoruz. Karşımıza böyle bir ekran geliyor. Yapmak istediğimiz high pass filtre ikinci dereceden, 5kHz kesme frekansı ve örnekleme frekansı 10kHz olsun. Bu ayarları girip “Design Filter” butonuna tıklıyoruz.

fdatool high pass filter
fdatool high pass filter

Daha sonra solda bulunan 4. bloga tıklayıp resimdeki ayarları yapıp “Realize Model” diyoruz. Bu işlem bilgisayarınızın özelliklerine göre 1 – 2 dk zaman alabilir.

fdatool high pass filter design
fdatool high pass filter design

Aşağıdaki şekilde bir block diyagramımız oluştu. Sarı halka içerisindekiler bizim gainlerimiz gibi düşünebiliriz.

fdatool high pass filter block diagram
fdatool high pass filter block diagram

Yani bir nevi kat sayılarımız. z^-1 ifadesi ise gecikme süresi olacak birazdan onlara geleceğim. Şuan için matlab de işimiz bitti. Artık aldığımız bu block diagram ‘ın stm32f4 mikroişlemcisine nasıl entegre edeceğimiz kaldı.

Stm32f4 ‘de yüksek geçiren filtre uygulaması

Öncelikle block diagramımızın output ve örneklemeleri için ayrı ayrı fonksiyon yazmamız gerekiyor. r[n] ilk örneğimiz sonra r[n-1] daha sonra r[n-2] ilk olarak r[n] ifademizi yazalım. Kontrol dersi alanlar bu denklemi zorlanmadan yazabilecekler diye düşünüyorum. ff1, ff2, fb1, fb2 değerleri halkadaki kat sayılar olarak ifade ettik.

r_n = in * ff1 – r_n1 * fb1 – r_n2 * fb2;

Şimdi output denklemini yazalım.

out = r_n2 + r_n1 * ff2 + r_n;

Burada en önemli kısım örnek geciktirmesidir yani her çevrim tamamlandığında bir örnek geciktirmemiz gerekiyor. Aksi halde yanlış sonuç alacağız bu yüzden  son olarak örneklerimizi geciktirelim.

r_n2 = r_n1;
r_n1 = r_n;

Cubemx programında ADC, DAC ve adc ‘ye tetik vermek için bir timer kurduk bu sadece adc mize tetik verecek saymayacak bu yüzden herhangi bir pine atama işlemi de olmayacak. High pass filter için cubemx ayarlarını yazının en sonunda paylaşacağım koddan rahatlıkla anlayabilirsiniz.

Cubemx ayarlarını yapıp proje dosyamızı oluşturduktan sonra projemizi TrueStudio programında açalım ve “HighPassModule” adında bir klasör oluşturalım bu klasörde highPassModule.h ve highPassModule.c dosyalarımız oluşturalım. Bu klasörü asıl dosya projenin görmesi için ana projenin properties kısmından dosya yolunu eklemeyi unutmayın!!

Header dosyamızı aşağıdaki şekilde stm32f4 mikroişlemcisi için yazalım.

highPassModule.c dosyamızın içerisinde yüksek geçiren filtremizin gerekli fonksiyonlarını yazalım.

Main dosyamız içerisinde highP cut5k; yazalım böylelikle highP yapısında cut5k adında bir örnek aldık artık bu örnek üzerinden dilediğimiz parametrelere erişebiliriz. Burada kat sayıları belirtelim. Bu kat sayılar matlab de block kısmında üçgen bloklara tıklayarak değerlerini görebilirsiniz. Doğruluk açısından . dan sonra tüm rakamları yazdım.

Main içerisinde adc, dac ve timer ‘ı base modunda başlatıyoruz. Şimdi ise interrupt dosyasından kurduğumuz ADC ‘nin kesmesine geliyoruz.

High pass filter stm32f4

Yüksek geçiren filtrenin stm32f4 mikroişlemcisinde kodlanmış halinin tamamı github üzerinden paylaşılıp konuya eklenecektir. Herhangi bir sorunuz varsa yorum kısmında sorabilirsiniz.

Github High Pass Filter Tasarım Kodları : https://github.com/doganKayadelen/highPassFilterOnStm32f4

Yardımlarından dolayı Nazım Yıldız ‘a teşekkürler. Daha detaylı bilgi için http://www.nazimyildiz.com/2016/01/17/iir-filtre-tasarimi-ve-gerceklemesi/

PIC ‘lerde Dış Kesme Nedir, Ne İşe Yarar? (External Interrupt MikroC)

Gömülü sistem programcıların kesinlikle bilmesi gereken konulardan bir tanesi olan external interrupt yani dış kesme nedir, dış kesmenin C dilinde MikroC derleyicisini kullanarak kodlanmasını anlatacağım.

Dış kesme nedir?

Interrupt (kesme) iç ve dış olmak üzere ikiye ayrılır.  Dış kesmeyi kısaca şu şekilde anlatabiliriz. Main fonksiyonu içerisinde normal devam eden herhangi bir işlem varken dışarıdan herhangi bir kesme geldiğinde istediğimiz farklı bir işlem gerçekleşir. Örneğin PortB ‘nin 4. bitinde belli aralıklarla bir led yanıp sönerken dışarıdan bir interrupt gelmesi durumunda PortB ‘nin 5. bitine istediğimiz işlemi yaptırabiliriz. Bir bilgisayarın çalışmasında binlerce interrupt kullanılır. Interrupt’ın bu denli önemli olmasındaki en önemli sebep mikro işlemcilerin seri çalışmasıdır yani bir kod ilk satırdaki komuttan başlayıp alta doğru devam etmesidir.

PIC18F4XK22 Interrupt Özellikleri

Hangi mikro işlemciyle çalışıyorsanız o işlemcinin interrupt özelliklerini tam anlamıyla öğrenmek ve anlamak için kullandığınız mikro işlemcinin datasheet ‘ine bakmalısınız. Ben pic 18f45k22 mikro işlemcisinde proje yaptığım için bu pic ‘in özelliklerine değineceğim.

pic18f45k22 interrupt
pic18f45k22 interrupt

Bu model mikro işlemcilerde kullanılan interruptlara öncelik ataması yapabiliyorsunuz. Interruptların kontrolü için toplam 19 yazmaç kullanılıyor. PIC ‘lerde en önemli 3 tane kontrol biti vardır bunlar: enable bit, flag bit ve gie biti.

GIE biti: Bu bit INTCON yazmacında yer alır. Global Interrupt Enable (Küresel Kesme Etkin) pini tüm periferik olmayan bitleri etkin yapar ve tüm kesme kaynaklarını devre dışı bırakır.

Enable biti:  Bu bit interruptı aktif hale getirmek için kullanılır. Enable biti aktif olmazsa kodladığınız interruptınız çalışmayacaktır.

Flag biti: Dışarıdan kesme geldiğinde bu bit otomatik olarak 1 olur interrupt fonksiyonundan çıkmadan önce bu biti tekrardan sıfır yapmanız gerekiyor.

Bunların haricinde diğer kontrol bitlerine detaylı olarak bakmak için kullanacağınız mikro işlemcinin datasheet ‘ine bakabilirsiniz. C dilinde yukarıda anlattığım external interrupt ‘ın kullanımı hakkında basit bir kod yazalım.

MikroC ‘de Dış Kesme Kodu

External interrupt kullanımı MikroC derleyecisi kullanılarak yazılmıştır. Kodun nasıl yazıldığını videoda detaylı bir şekilde belirttim.

Arduino trafik ışıkları projesi kodları

Arduino İle Trafik Işıkları Projesi ve Kodları

Arduino kullanarak trafik ışığı projesi yapımına başlayalım. Yapacağımız arduino trafik lambası ile birlikte günlük hayatta sıklıkla karşımıza çıkan trafik ışıklarının da mantığını anlamış olacağız. Arduino dersleri serimizin ilk yazısı ile karşınızdayız.

Arduino trafik lambası

Gelin öncelikle trafik ışıklarının nasıl çalıştığının mantığını kavradıktan sonra işlemlere beraber geçelim. Mantığımızı 2 adet yol üzerine kurabiliriz. 1. yoldan geçen araçlar için öncelikle yeşil yandığını varsayarsak diğer yoldaki trafik ışığı kırmızı yanacaktır belli bir süre sonra örneğin 20 saniye sonra trafik ışıkları değişip ikinci yol yeşil yanarak birinci yoldaki trafik ışığı kırmızı yanacak ve birinci yoldaki araçlar duracaktır.

Arduino trafik lambası
Arduino trafik lambası

Arduino trafik ışıkları kod

Bildiğiniz üzere arduino da bir program yazarken önce tanımlamaları yapmak gereklidir bu tanımlamalardan sonra kafanızdaki algoritmayı arduionoya enjekte etmeniz gereklidir. Yukarıda arduino trafik ışıkları projesinin çalışma prensibini anlattık bu mantıkla devam edelim. Ülkemizde sarı ışığın bir amacı olmadığı için bu projemizde sadece kırmızı ve yeşil ışıkları kullanacağız. Bu demek oluyor ki iki yol için bizim öncelikle 4 adet arduinoda pin girişi tanımlamamız gerekir.

Tanımlamalarımız bittikten sonra void setup kısmında tanımladığımız pinlerin giriş mi yoksa çıkış mı olduğunu belirtmemiz gereklidir. Kullandığımız pinleri arduino ekranımızda OUTPUT olarak yazalım. Projenin geliştirilebilmesi açısından bir adet fonksiyon yazıyoruz ki sonra üstüne bir şeyler eklemek istediğimizde kullanıcı dostu olsun.

Oluşturduğumuz fonksiyonun adına changeLigths diyelim burada çalışma mantığına göre low ve high olan pinleri belirtiyoruz örneğin ilk yol ile ikinci yol arasında ne kadar bir süre beklenilmesi gerektiğini arduino da delay(); komutu ile belirliyoruz. Biz delay’i 5000 olarak atadık yani 5 saniye. Daha sonra bu fonksiyonumuzu void loop içerisinde çağırıp kodumuzu tamamlıyoruz.
// light one
int red1 = 10;
int green1 = 8;

// light two
int red2 = 13;
int green2 = 11;

void setup(){
// light one
pinMode(red1, OUTPUT);
pinMode(green1, OUTPUT);

// light two
pinMode(red2, OUTPUT);
pinMode(green2, OUTPUT);
}
void changeLights(){

digitalWrite(green1, LOW);
digitalWrite(red2, LOW);
digitalWrite(green2, HIGH);
digitalWrite(red1, HIGH);
delay(5000);

digitalWrite(red1, LOW);
digitalWrite(green1, HIGH);
digitalWrite(red2, HIGH);
digitalWrite(green2, LOW);
delay(5000);

}
void loop(){

changeLights();
delay(5000);
}
Arduino trafik lambası kodları ve mantığını ilk arduino dersinde elimden geldiği kadar vermeye çalıştım anlamadığınız yerde soru sormaktan çekinmeyin.

MATLAB GUI İle İkili Arama Algoritması (Binary Search Algorithm)

Parçala ve fethet yaklaşımıyla yapılan binary search algorithm yani ikili arama algoritmasının MATLAB GUI ile yaptığım kısmını kodlarla beraber anlatıp paylaşacağım.

Binary search algorithm

İkili arama algoritmasının genel yapısını şu şekilde açıklayabiliriz. İlk olarak dizinin orta noktasını bulmak. Eğer daha önceden belirlediğimiz aranan değer orta noktada bulunduysa program bitecek. Aranan değer bakılan değerden küçükse arrayin küçük elemanlarından devam eder. Algoritmanın mantığını detaylı incelemek isterseniz Sadi Evren Şeker hocamızın yazısına göz atabilirsiniz.

İkili arama algoritması MATLAB

İkili arama algoritmasını sizlere bir MATLAB GUI arayüzü ile göstereceğiz. Random bir array üretip bunu bar grafiği şeklinde GUI ‘de görelim daha sonra aramak istediğimiz sayıyı açılacak kutuya girelim ve son olarak sayımızın kaçıncı indiste olduğunu görelim. binarySearchn.m adlı bir script oluşturuyoruz ve aşağıda matlab kodlarını satır satır takip ediyoruz.

Yukarıda ikili arama algoritması matlab kodu nu görebilirsiniz.

ikili arama algoritması matlab kodu
ikili arama algoritması matlab kodu
İkili arama algoritması (binary search matlab gui)
İkili arama algoritması (binary search matlab gui)

İkili arama algoritması matlab kodundan gördüğünüz üzere binary Search’ün 3 inputu 1 outputu mevcut şimdi MATLAB ‘ın komut satırına (command window) “guide” yazarak MATLAB guisine erişelim ve blank bir proje oluşturalım. Açılan guiye 4 edit text 1 tane push button bir tane de binary search ‘in çalışmasını görmemizi sağlayacak “axes” ekliyoruz.

GUI ‘yı yukarıda ki yeşil butondan çalıştıra tıklıyoruz ve binarySearchn.m dosyasıyla aynı klasöre yüklüyoruz. Yaptığımız GUI ‘nin matlab kodunu açıyoruz ve push buttonun olduğu fonksiyon satırına geliyoruz. Bundan sonraki işlemlerimiz Push button’a tıkladığımızda kutulardan verileri çekmek ve sonrasında binary Search fonksiyonunu çağırmak olacaktır.

Gördüğünüz gibi MATLAB GUI ‘nin pushbutton fonksiyonu altında gerekli işlemleri yaptık. Burada çok sık yapılan hatalardan bir tanesi de edit text içerisinden alınan değerinin okunmaması yönünde bunun nedeni de edit text girilen değerleri string almaktadır siz bunları integer’a yani bir sayıya çevirmelisiniz. Yukarıdaki binary search algorithm kodunda str ‘den int ‘e çevirme işlemini görebilirsiniz.

MATLAB GUI binary search algoritm visualization

Şimdi gui kodunu çalıştırıyoruz. Array uzunluğu, başlangıç, bitiş değerleri girildikten sonra butonumuza tıklıyoruz ve burada bir uyarı kutusu karşımıza geliyor. Bu uyarı kutucuğunda bu kutuyu kapattığınızdan 10 saniye sonra sıralanmış arrayi göreceksiniz ve aramak istediğiniz binary search sayınızı girmenizi söylüyor. Kutu kapanıyor ve sıralanmış bir dizi karşımıza geliyor.

binary search algoritm matlab GUI
binary search algoritm matlab GUI

Daha sonra bu dizide bulmak istediğiniz sayıyı belirleyip 4. oluşturduğumuz edit text içerisine giriyoruz. 5 10 saniye sonra sıralanmış dizimiz bar grafiği şeklinde aradığınız sayı kırmızı kutu içerisinde belirtilerek ve aradığınız sayının indisi kutu içerisinde gösteriliyor.

ikili sıralama algoritması matlab gui
ikili sıralama algoritması matlab gui

 

Üçgen Dalga Osilatör Devresi Periyot ve Genlik Bulma

Osilatör devrelerinde en çok karşımıza çıkan üçgen dalga osilatör devresinin periyotunu ve genliğini (triangular wave generator) bulmayı detaylı bir şekilde inceleyelim.

En çok kullanılan dalga çeşitlerinin başında sinüs ve kare gelirken bir sonraki sırada üçgen dalga gelmektedir. Üçgen dalgasını elde etmek için alttaki devremizi inceleyelim.

Üçgen dalga osilatör devresi

Üçgen dalga osilatör devresi
Üçgen dalga osilatör devresi

A ile gösterilen kısım opamp tetikleyici yani comparator iken B ile gösterilen kısım ise integral alıcıdır. A ‘nın çıkışı kare dalga olup genliği +-Vsat ‘tır ve B ‘nin inverting kısmına uygulanan bir çıkış vardır. Integrator ‘ın çıkışı üçgen dalgayı verir. Üçgen dalga osilatör devresinin çalışma mantığını daha iyi anlamak için, A comparatorunun çıkışını +Vsat olarak farzedelim.

Triangular wave oscillator
Triangular wave oscillator

Bu durum kapasitör üzerinden bir akım akmasını sağlar ve böylelikle aşağı yönde bir eğik yüzey (ramp) oluşmasını sağlar. Aşağıya doğru inen ramp sabit bir değer olan -Vramp ‘e ulaştığında opamp tetikleyicisi A pozitiften negatife bir saturasyon oluşturur (-Vsat). Böylelikle aşağıya inen ramp yön değiştirerek yukarıya doğru harekete geçer ve +Vramp hedefine ulaşır. Bu işlemler aynı sırada tekrarlanarak B integrator ‘ında üçgen dalga gözlenir.

Üçgen dalga osilatörü genlik

+Vsat ‘tan -Vsat ‘a bir değişme olmadan hemen önce P noktasındaki voltajın 0 olduğuna dikkat edelim. Buradan çıkan anlam -Vramp ‘i elde etmek için R2 rezistansını kullanırken + Vsat ‘ı elde etmek için R3 rezistansını kullanıyoruz.

Triangular wave
Triangular wave

Yukarıdakine benzer şekilde comparator kısmı -Vsat ‘tan +Vsat ‘a değiştiğinde integrator kısmının çıkışı aşağıda verilmiştir.

Üçgen dalga genliği bulma
Üçgen dalga genliği bulma

Triangular wave’in peak to peak genliği

Üçgen dalga genliği
Üçgen dalga genliği

Üçgen dalga osilatör periyot

Zaman -Vramp ‘ten +Vramp ‘e geçtiiğinde veya tersi olduğunda üçgen dalganın periyodu yarıya inip T/2 olacaktır. Aşağıda ki I1 ve I2 akımlarının toplamı sıfır olacak şekilde işlemi yapabiliriz.

Üçgen dalga osilatöründe periyot bulma
Üçgen dalga osilatöründe periyot bulma

Pycharm İle Kolay Python ve OpenCV Kurulumu [RESİMLİ ANLATIM]

Python kurulumu ve opencv kurulumu için ayrı ayrı kaynaklara bakarak zaman kaybetmek yerine python ile beraber windows için opencv kurulumunu pycharm kullanarak anlatacağım.

Python Kurulumu

Sisteminize entegre olacak şekilde etkili, hızlı ve kolay öğrenilebilen python dili ile kod yazmaya başlamak için öncelikle python kurulumunu doğru ve eksiksiz bir şekilde yapmanız gerekir. https://www.python.org/downloads/release/python-343/ adresinden windows için python dosyasını indirebilirsiniz burada python indirme işleminde dikkat etmeniz gereken en önemli husus windows sürümünüzü bilgisayar özelliklerine bakarak 32 bit mi yoksa 64 bit mi olduğunu belirlemektir.

32 bit işletim sistemi için x86 adlı dosyayı indirmeniz gerekir. Eğer 64 bit windows kullanıyorsanız x64 adlı dosyayı indirebilirsiniz. Böylece windows için opencv kurulumunu tamamlamış oldunuz.

 

opencv kurulumu

Opencv Kurulumu

Windows kullanıcıları için bir kütüphane olarak yayımlanan opencv kurulumu için ilk olarak https://opencv.org/releases.html adresine gidiyoruz. Yüklediğiniz python sürümü neyse opencv sürümünün de aynı olmasına dikkat edin aksi halde kodlarınızı çalıştırmaya çalıştırdığınızda dll vb. hatalar alabilirsiniz

opencv kurulumu win
opencv kurulumu

Biz opencv kütüphanesini windows için kuracak olduğumuz için buradan “Opencv for windows” yazısına tıklıyoruz. Açılan linkle beraber indirme işlemi başlayacaktır. Opencv indirme işlemini tamamladıktan sonra indirdiğiniz dosyaya tıklayın. Aşağıdaki kutuyu göreceksiniz buradan hangi dizine opencv klasörünü çıkartmak istediğinizi seçiyorsunuz.

Pycharm İle Opencv ve Python Kurulumu

Bu bölümde üstte verilen python kurulumunu yapmamıza gerek kalmadan sizlere nasıl kolay yoldan python kurulumu ve opencv kurulumu yapılacağını anlatacağım.

İlk olarak python düzenleme editörü olan Pycharm ‘ı bilgisayarınıza https://www.jetbrains.com/pycharm/download/ linkten indiriniz.

Pycharm’ı çalıştırdığınızda ilk olarak “Next” butonuna tıklayın daha sonra size hangi klasöre pycharm kurulumu yapmak istediğiniz sorulacak. Pycharm ‘ı kurmak istediğiniz klasörü seçin. Daha sonra pycharm ile beraber python2 veya python3 hangisini kurmak istediğiniz sorulacak eğer bilgisayarınızda python yüklü ise bu adımı geçebilirsiniz.

Pycharm’ın en büyük avantajı da pycharm ide kurarken pythonu da tek tıkla kurmasıdır.

Kurma işlemi bittikten sonra “Run Pycharm Community Edition” tik işareti koyup “Finish” butonuna tıklayın. Pycharm kurulumu python ile beraber tamamlandı.

Şimdi yukarıda indirdiğimiz ve klasöre çıkarttığımız opencv klasörüne girelim buradan. Sırasıyla “build > python > 2.7 > x64 (64 bit windows için) > cv2.pyd” dosyasını kopyalayın.

PycharmProjects adlı dosyanız nereye kurulduysa o dizine gidin bende şu şekilde : “C:\Users\SECURITY\PycharmProjects” Buradan pycharm da oluşturduğunuz klasör adına tıklayın ardından venv > Lib > site-packages klasörüne girin kopyaladığımız cv2.pyd dosyasını buraya yapıştıralım ve tüm işlemler bitti pycharm ile python kurulumu ve opencv kurulumunu tamamlamış olduk.

Ücretsiz backlink siteleri

Güncel ve Ücretsiz Backlink Siteleri 2019

Sitenizin Google ve diğer arama motorlarında daha üst sıralarda çıkması için ücretsiz backlink siteleri hakkında olan SEO kategorisindeki ilk yazımıza başlayalım. Web sitesi sahiplerinin olmazsa olmazı SEO çalışmaları içerisinde oldukça kullanılan ve etkili bir yöntem olan backlink alma ile sitenizi sizin belirlediğiniz anahtar kelimelerde üst sıralara çıkarabilirsiniz. Bir çok backlink kaynağı internette bulunsa bile hem güncel hem de ücretsiz backlink sitelerini bulmak oldukça zordur.Sizler için tek tek özenerek hazırladığımız en kaliteli backlink listesini sürekli güncel olacak şekilde detaylı bir şekilde göstereceğim.

Kaliteli Backlink

SEO ‘nun altın kurallarından ilki yazdığınız içeriğin kalitesidir. İçerik kalitesinden sonra sırada backlink gelmektedir. Google’da üst sıralara çıkmak için kaliteli ve güncel sitelerden backlink almanız gerekir. Otoriter ve kaliteli backlink alırken link aldığınız sitenin Domain Authority (domain otoritesi), Page Authority (sayfa otoritesi), Trustrank gibi değerlere bakabilirsiniz. 2018 yılına girmemizle beraber 2017 yılında kullanılan bazı backlink kaynakları artık kapanmış bazıları ise artık spam niteliğine bürünmüşlerdir. Spam taşıyan backlinkler sitenize fayda yerine zarar verecektir. Bu yüzden en son güncel backlink kaynaklarını sizlerle paylaşmak istedim.

Ücretsiz backlink siteleri kullanmadan önce

İlk hedefiniz yazdığınız içeriğin kalitesi olması gerektiğini yukarıda da belirtmiştim. Günlük olarak sitenize yazı girmeye çalışın daha sonra yavaş yavaş daha önceden belirlediğiniz anahtar kelimelerin bir listesini çıkararak altta vereceğimiz ücretsiz backlink sitelerinden linkleri zamana yayarak sitenize uygulayın. Ücretsiz backlink sitelerinin faydasını dediğim işlemleri doğru bir şekilde yaparak kısa zaman içerisinde görebilirsiniz. Kısacası sitenize backlink almadan önce içerik kalitenizi arttırın daha sonra alttaki backlink listesini doya doya kullanın.

Güncel Ücretsiz Backlink Siteleri 2018

  1. https://soundcloud.com : Sound cloudu bilmeyen yoktur. Öncelikle siteye girerek sağ üstte bulunan “Create Account” kısmına tıklayın burada Facebook veya Google hesabınızla kayıt olun daha sonra “Settings” sayfasına girdikten sonra “Content” kısmına tıklayıp sitenize anahtar kelimeden ücretsiz backlink alabilirsiniz.
  2. https://store.steampowered.com/join/ : Steam’ın sitesine Facebook veya Google ile üye oluyoruz daha sonra sağ üstte kullanıcı adımıza tıklayarak “Profili Görüntüle” butonuna tıklıyoruz. Özet kısmında ” [url=dogankayadelen.com.tr] İnternet sitesi bağlantısı [/url] ” bağlantısını kullanının ücretsiz backlink hazır.
  3. http://www.bizsugar.com/ : Sitelerde paylaşılan haber ve içeriklerin paylaşıldığı Domain Rating (DR) değeri 78 olan kaliteli bir backlink kaynağı. Sağ üst köşeden üye olun. “Submit an article” kısmına tıklayarak sitenizdeki yazı linkini yapıştırın ilerleyin daha sonra 2 3 cümlelik bir yazı girerek “Submit” kısmına tıklayın. Dilerseniz profilden de web site kısmından backlink alabilirsiniz.
  4. https://github.com/CVC4/CVC4/issues/ : Github yazılımcıların sıklıkla kullandığı bir web depolama servisidir. Github aracılığıyla ücretsiz backlink almak için verdiğimiz linke gidiyoruz. Oradan sağ üstte “New issue” butonuna tıklayıp kayıt olduktan sonra anahtar kelimenize link vererek kaliteli bir backlink sitesinden linkimizi alıyoruz.
  5. https://themeforest.net : En büyük website tasarım ve eklenti satıcısı olan themeforest ile ücretsiz ve kaliteli backlink sahibi olmanız çok kolay. Search console’a hızlı bir şekilde düştüğü için zor bulunur. Öncelikle siteye üye olun daha sonra herhangi bir tema konusuna girin daha sonra yorum alanına gelip <a href=”https://dogankayadelen.com.tr”>ÜCRETSİZ BACKLİNK</a> şeklinde yazıp gönderin. Bu sayede anahtar kelimeye backlinkiniz hazır.
George Orwell 1984

George Orwell 1984 Konusu ve Kitap Hakkındaki Yorumlarım

1984 konusu kitabın adından da anlaşılacağı üzere 1984 yıllarında geçiyor ve kitap genel olarak Okyanusya da olan bitenleri göz önüne seriyor. George Orwell ‘ın muhteşem kült eseri 1984 gelecek hakkında oldukça tutarlı bilgiler içeriyor. Kitabın ilk sayfasından son sayfasına kadar olan benzersiz kurgu sizi her sayfaya hayran ediyor. 1984 romanına baktığımızda bireylerin her daim takip edildiği, bireyselliğin tamamen yok edildiği ve insanların her an izlendiği bir dünya gözümüze çarpıyor. Tür olarak distopya ve bilim kurgu seviyorsanız ve en iyi distopya kitabını merak ediyorsanız bu kitabı listenize dahil etmelisiniz.

George Orwell 1984

Büyük birader adlı parti kitabın ana konusu olarak öne çıkıyor. 1984 ‘ün en önemli farklarından bir tanesi de hem o zamanı hemde geleceği görebilmeniz olacaktır. Baş karakter olan Winston bir sevgili edinir fakat bu parti gereği tamamen yasaktır tele ekranlar her yerde herkesi kayıt altına almaktadır. İlk başlarda her ne kadar gizli bir şekilde ilişkileri devam etse de kitabın sonlarına doğru bu ilişki öğrenilir ve Julia ve Winston için dayanılmaz bir işkence başlar. Birbirlerini çok seven Winston ve Julia adım adım işkenceye maruz kalırlar. Böylelikle partiye karşı gelme gibi bir düşünceyi Winston’ın kafasından silmeyi planlamaktadır. Sadece Winston için değil diğer parti karşıtı kişilerde bu işkence sonucu partiye bağlı hale gelmektedirler. 1984 kitabında işkencenin son aşaması ise 101 nolu oda olacaktır.1984 ‘ün distopyasında sıklıkla duyacağınız bazı kavramlar

okyanusya 1984
okyanusya 1984
  • Okyanusya: Oldukça büyük bir ülke Amerikanın tamamı, Yeni Zelanda, Avustralya, Güney Afrikayı kapsar.
  • Büyük biraderin gözü üstüne: Partinin tanrısı Büyük birader her şeyi görür.
  • INGSOS: İngiliz sosyalizmi
  • Gerbak Gerçek Bakanlığı: 1984 ‘ün en dikkatimi çeken kısımlarından bir tanesi gerçek bakanlığının amacı geçmişi partinin kendi istekleri doğrultusunda değiştirmektir. Gerbak ‘ta parti üyeleri her türlü yazılı, sözlü ve görüntülü kaynakları partiye ters bir durum olduğunda değiştirerek geçmişi yok etmeye çalışır.
  • Berbak Barış Bakanlığı: Savaş barıştır sözüne sıkça rastlayacaksınız parti insanları bir arada tutmak için herhangi bir savaş olmasa bile tele ekranlardan diğer devletlerle savaşın kazanıldığını söyleyerek halkı elinde tutmaya çalıştığını ispatlamaktır.
  • Sevbak Sevgi Bakanlığı: Winston’ın ve bazı parti üyelerinin girdiği 101 numaralı odanın bulunduğu kısımdır.

    sevgi bakanlığı 1984

  • Varbak Varlık Bakanlığı: Halkın ekonomisini düzenlemekle görevlidir. Kalitesiz üretim yaparak halkı güçsüz düşürür böylece halkın üretimini baltalar çünkü fakir halkı yönetmek onlar için daha kolaydır.
  • Proleterler: Halkın %80 ‘inden fazlasını oluşturan kesimdir. En alt tabakadır ve bu tabaka özgürdür çünkü fakir olan bu halk isyan çıkartabilecek bir yapıya sahip değillerdir. Olsa bile düşünce polisi hemen önlerini kesecektir.

1984 kitap

Orwell ‘ın 1984 romanını okuduktan sonra geleceğe yönelik ne kadar doğru bir kurgunun oluştuğunu sizde göreceksiniz. Son olarak 1984 kitabında en çok beğendiğim bir sözü yazarak yazımı bitirmek istiyorum. “Devrim yapmak için diktatör olunmaz, diktatör olmak için devrim yapılır.”