Merhabalar!
Bu seride, almış olduğum Data Acqusation & Embedded Systems dersi dahilinde verilmiş olan (fazlasıyla esnek) dönem projemden bahsedecek ve geliştirme sürecimi paylaşacağım. Bu ders Elektrik Mühendisliği bölümünde ilk kez açılan bir ders ve dersi açan hocanın söylediğine göre müfredatı henüz tam belli değil. Normal şartlarda öğrencinin yorumlarına göre interaktif olarak gelişecek bir ders olacaktı ve bol bol uygulama yapılacaktı ancak biliyorsunuz bu günlerde normal olan pek birşey yok 😅 Ben de kolay ve eğlenceli bir proje düşünmeye başladım. Lafı uzatmadan olaya giriyorum.
Proje belirlerkenki kriterlerim:
Derste raspberry pi 'ın adı çok geçiyor. Ben bunu bir gereksiz heves/özentilik olarak görüyorum. Genelde ellerini lisans eğitimleri boyunca herhangi bir projeye değdirmemiş olan mühendislik öğrencileri bu şeylerin ismini sık duyuyorlar ve mahareti cihazda sanıyorlar. Maharet kesinlikle enstrümanda değil, müzisyende. Siz yükselmeden özellikle bu ders özelinde Raspberry Pi'ın neden aşırı gerekli olmadığını açıklayayım. Eğer projeniz özellikle küçük alanda yüksek işlem gücü gerektirmiyorsa Raspberry Pi ile yapabileceğiniz şeylerin neredeyse hepsini dizüstü bilgisayarınız ve arduino gibi ucuz bir microcontroller ile prototipleyebilirsiniz. Hatta eski bilgisayarlarda raspi'daki GPIO pinleri gibi kullanabileceğiniz bir paralel port bile olurdu.( Bu konuya ilgi duyanlara şu kitabı öneririm. Biraz outdated ama vizyon açıcı.) Raspberry Pi küçük bir bilgisayar neticede. Ayrıca bende raspi yok :( . Kısacası ben projemde raspi kullanmak istemiyorum; gerek görmüyor ve şu anda böyle bir yatırım yapmak da istemiyorum. Bu sebeple projemi bir laptop ve arduino ile yapacağım. Ancak "hocam laptopla yaptım biraz hantal oldu" diye kendimi açıklamak zorunda olmak istemiyorum. Dizüstü bilgisayarım sistemin bir parçası, bütünleyicisi olsun ve açıklamaya gerek kalmasın.
Kolay olsun. (Bariz sebeplerle)
Pandemi sebebiyle 60 küsür gündür evdeyim ve bu zamanın da %98'i falan odamda geçti (Sıkıldııııııım ! ayrı konu). Artık biraz daha eğlenceli hale gelsin istiyorum bu oda. Doğal olarak bari bir işe yarasın, yenilik olsun, odamı modifiye etsin.
Madem donanım yok bari yazılım döktüreyim.
İşte bütün bunları sağlayacak proje:
RGB ledlerde çok bir maharet yok ama giriş yapalım. Kırmızı, Yeşil, Mavi ve bunların karışımı olan renklerde ışık yayabilen bir diyotdur kendileri(LED = Light Emitting Diode). Her RGB Led aslında bir değil üç diyodun birleşimidir. Her biri farklı frekanslarda ışık yayar ve biz bunları sırasıyla kırmızı yeşil ve mavi olarak görürüz. Bu frekansların farklı oranlarda toplanarak elde edilebilen her frekansı bunlardan elde edebiliriz. Ayrıntılara gireceğim. Kısacası her renkte ışık yayan bir led diyelim.
Bu ledi bilgisayar veya telefon ekranımda olan baskın renge boyamak istiyorum. Bu şu demek:


Gerçekten cool olabilir.
Burada birkaç katman var.
Birincisi baskın rengi gerçek zamanlı olarak almak. Bunun için ne kullanacağıma henüz karar vermedim. Sisteme bağlantı için bluetooth düşünüyorum ve telefonumla da aynı sistemi kullanabilmek istiyorum. araştıracağım.
İkincisi RGB data'sını arduinonun hızlıca parse edebileceği bir frame yapısıyla göndermek. Kafadan atmam gerekirse 3 metre mesafe için 60Hz yenileme hızı hedefliyorum. Bu standartlar için kaynak totoşum. Ama bir şekilde uydururuz kitabına. Hedefin ulaşılabilir olup olmadığını göreceğiz.
Üçüncüsü Led sürme devresinin gerçeklenmesi. Genelde bu rgb ledler, sürme devreleriyle satılıyor. Bunlardan alıp hacklemek isterdim ama bu konuda bir Bahadır Onur Güdürü veya Yasin Yağın değilim. Kısa sürede yapabileceğimi sanmıyorum. Zaten gerek de yok, basit bir mosfeti(aslında üç mosfeti) arduino üzerinden pwm ile module ederek istediğim hedefe ulaşabilirim. Burada önemli nokta mosfet seçimi olacak.
Şimdilik bu kadar. Umarım güzel bir post olur ve başarıyla sonuçlanır. Böyle uzun bir giriş oldu lütfen kusura bakmayın. Bir sonraki post biraz daha teknik konular üzerine olacak. Takipte kalınız.
Yeni eve taşınmam ve başka birçok aksaklık ve yoğunluktan dolayı uzun süredir yazamadım. Bu videoyu dönem sonu teslimi amacıyla çektim, o yüzden çok özenilmiş bir video olmasa da buraya yazacaklarımı içeriyor. RGB.io platformunu geliştirmeye devam etmek istiyorum. Bu süreci buradan paylaşmaya devam edeceğim
Proje başarıyla sonuçlandı, ilk fırsatta buraları yeşillendireceğim
Görüntü işleme çalışmış mıydın sen daha önce hiç ? Çalıştıysan biraz yardım fena
Çok sıkıcı şeyle uğraştım bugün bari birşeylerin yandığını göreyim. Ledlerimizi en azından tek kanaldan deneyelim.
Kodu bile hiç denemedim. Şu an sorun şu olabilir: ledler çok parlak ve ileride rengi gözlem yoluyla ayırt etmem zor olabilir. Yağlı kağıt gerçekten çok kullanışlı bu konuda. Renkleri blend ederek net bir şekilde gösteriyor. Tamamen test amacıyla bir kutuyu kesiyor ve yağlı kağıtla üstünü kapıyorum.
Ortaya sabahları memur
Geceleri afet birşey çıkıyor.
Şimdi zaman geçirmeden tüm kanallara aynı şeyi uyguluyorum. Bundan sonrası artık bol bol kod yazma kısımları. Artık daha çok eğleneceğime eminim. Yorumlarınızı bekliyorum.
Üretim:
Önce bir mosfetlerimizi deneyelim:
Kuracağımız devre bu şemada görülüyor. Sabahtan bir girmiş bulunduk atolyemsi balkonuma. Burası ilk kez böyle bir amaçla kullanılacak, o da heyecanlı.
Hemen ne var ne yok bir kontrol etmeye başlıyorum.
Emektar ihtiyarlar burada. Ancak nano fişi çekmiş :( RIP nano 😥. Uno ile devam edeceğiz. Breadboard'umun olmadığını farkediyorum. Sıkıntı değil, birçok küçük breadboardum var hala. Onları kullanarak bir çalışma tahtası yaratıyorum.
Fritzing dosyasında göründüğü şekliyle devreyi kuruyorum. İlk denemek istediğim şey ne kadar sapmışız lineerlikten. Bunu görmeliyim. Teori şu. İstenen koşullarda 127 değeri için(255/2) ardinonun kontrol pininden 5/2=2.5 V çekmem lazım. Bu değeri Gate-source için kullanınca da 12/2=6 V gerilim elde etmem lazım.
//this code is written for testing and thus, is not failsafe
//by tahameg 193358
void setup() {
pinMode(3, OUTPUT);
}
void loop() {
analogWrite(3, 127);
}
Bu deneyi yaptığımda aldığım sonuç:
Oldukça yüksek bir kayma var. Maksimum ve mimimum pwm değerlerinde sırasıyla 12V ve 0V değerlerini okuyabildiğim için mosfetin karakteristiği ile ilgili bir durum olduğunu anlıyorum. Bunu yazılımla çözebilirim.Bunun için mosfetin karakteristiğini çıkarıyorum. Teker teker değerleri değiştirip kontrol etmek zor olduğundan değerlerin belirli aralıklarla değişmesini sağlayan bir kod yazıp videosunu çekiyorum.
//this code is written for testing and thus, is not failsafe
//by tahameg
void setup() {
Serial.begin(9600);
pinMode(3, OUTPUT);
}
void loop() {
for(int i = 260; i>=0; i--){
Serial.println(i);
if(i>=0 && i<= 255){
analogWrite(3, i);
}
delay(3000);
}
}
11:45 dk'lık uzun bir video çıktı ortaya. Bu veriyi yapılandırılmış bir excel tablosuna kaydediyorum. Bu veri daha sonra lazım olacak.
Bugünü tasarıma ve devrenin prototiplenmesine ayırdım. Tasarım kısmı çok uzun sürmese de prototipleme kısmı gerek bu konudaki deneyimsizliğimden gerekse uzun zamandır elimi bu tür crafting işlerine sürmeyişimden dolayı beklediğimden uzun sürdü. Lafı fazla uzatmadan olaya girmek istiyorum.
Öncelikle devre elemanlarımızı tanıyalım:
LED:
RGB Ledler birçok formda bulunuyor. Doğrudan AC ile beslenen ve standard duylara takılanlar, direk 4 bacaklı olarak arduino başlangıç kitlerinde verilen basit ledlere benzer olanlar vs. Resimde görülen strip tipi 5057 model numarasıyla piyasada oldukça fazla bulunan kullanımı kolay, ucuz ve kullanışlı bir rgb led modülü. Arkası yapışkanlı olarak gelmesi de kullanışlılığı arttırıyor. Az önce saydığım nedenlerden dolayı bunu seçtim. 5 metrelik bir versiyonuna yaklaşım 30 TL verdim.Datasheet'inde yazdığına göre 3 ledden oluşan her bir segment toplam 60 mA akım çekiyor. Bu değer, RGB kanalları full parlaklıkta yakıldığında, yani en parlak "Beyaz" ın çektiği akım. Modül 12VDC ile sürülüyor ve her metresi 20 segmentten oluşuyor. Aynı zamanda R G B kanalları sırasıyla 615-630nm,515-535nm ve 465-480nm aralıklarında frekansta ışık yayıyor. Bir yandan bu ilgileri not almış olduk, bunlar önemli ve lazım olacak.
2. Güç Kaynağı:
Şöyle kaba bir hesapla 1 metresinde 20 segment varsa ve her segment 0.06 A akım çekiyorsa 5 metrelik bir LED strip maksimum 20*0,06*5 = 6A çeker. Ayrıca ben arduino'yu da aynı güç kaynağıyla besleyeceğim ve arduinonun resmi dökümantasyonunda yazıldığına göre güç kaynağından beslendiğinde maksimum 0,9 A akım çeker. Yani herşeyi köklersem 6,9 A akım çekeceğim. 12 V için düşünüldüğünde 6,9*82,8 W'lık bir güç kaynağına ihtiyacım olabilir. Bende 125 W lık bir güç kaynağı var ama taşıması daha kolay olsun diye 12V 5A'lik küçük bir hüç kaynağı aldım. Ayrıca 3 metrelik striple çalışırsam bu güç kaynağıyla güvendeyim.
3. Mosfet:
Arduino'nun pwm pinleri, 5V u 490Hz frekansta kare dalgaya dönüştürür. Kare dalganın duty ratio'su 0-255 değerleri arasında değerler verilerek değiştirilebilir. Benim kare dalga hakkında en sevdiğim şey RMS ve ortalama değerlerinin birbirine eşit olması. Doğal olarak hesaplaması da kolay. Arduino pwm pinleri sayesinde 5-0 V RMS aralığında 19,6 mV çözünürlüğünde DC gerilim gerilim sağlayabilir. Ama stripleri bununla süremiyoruz. Bunun yerine arduinodan gelen sinyali kullanarak bir mosfet'i açıp kapayabilir ve bununla modulasyonu 12 V düzeyine çıkarabiliriz. Teoride güzel ama pratikte birçok sorun var. Örneğin seçilen mosfetin açılıp kapanma hızı, seçilen besleme gerilimi(12V) için Vgs / Vds grafiği herşeyi etkileyecek. Bu bilgiler için datasheet'e bakıyoruz. Ben bunları uzun uzun araştırdım ama yine de yanlış bir tercih yapmış olabilirim. Burada oluşacak hataları yazılımsal yaklaşımlarla çözebileceğime inanıyorum ben yine de. Benim seçtiğim mosfet IRLZ44N. Logic level bir mosfet
Yandaki grafiğe baktığımızda 12V Vds ve 5V Vgs değerinde lineer bölgede çalıştığını görüyoruz. Bu mosfeti seçmemin değeri aynı zamanda 2.5 V değerlerine kadar duyarlu olması.
Not: işten anlayan arkadaşların tavsiye edecekleri şey muhtemelen bir smps tasarımı yapmak olurdu ancak bunun ve ek olarak kontrol devresinin tasarımı ve üretimi için yeterli zaman ve tecrübeye sahip değilim. O yüzden elimdeki olanaklarla idare etmeye çalışıyorum. Bir sonraki aşamada umarım bu upgrade'i beraber yaparız :)
Kalan şeyler malzemeler, bu ledlerin birbirine eklenmesi için kullanılacak bağlantı elemanları, jumper kablolar, breadboardlar resistorler gibi gibi çok da kritik olmayan şeyler. Ancak burada bir uyarı yapmam gerekirse, kablo seçimlerimize mutlaka dikkat etmemiz lazım. Sadece bu proje için değil her projede. Bakır bir kablo ortalama 3A/mm2 akım taşıma kapasitesine sahiptir. Fazlası tehlikeli ısınmalara sebep olur.
https://learn.adafruit.com/adalight-diy-ambient-tv-lighting/pieces şöyle bir şeyle karşılaştım bence tam olarak kafadaki soru işaretlerini giderebilecek bir tutorial olmuş. Projenin ismi de Adalight :D
Tv için çok güzel olur gerçekten. Ufak bir araştırma sonucu arduino gibi bir mikrokontrolörün hdmi verilerini okumak için yavaş kalacağının söylendiğini gördüm hdmi'da clock frekansı 160 Mhz mertebesindeymiş. Yine aynı forumlarda, sonuçta yapılmak istenen renk değerlerini elde etmek olduğu için hdmi'dan vga'ya dönüştürülerek yapılabileceğinden bahsetmişler. Vga'da sinyaller analog olduğu için arduino gibi bir kart ile rahatça işlenebilir.
Öncelikle çok kaliteli ve eğlenceli bir post olmuş :D
Projeyi tam anlamadım. Odanı pc ekranının baskın rengi ile yanan rgb led şeritlerle mi donatacaksın? Philips'in Ambilight tv leri gibi olcak yani. Baya güzel proje bence keşke yazılım tarafında ekran renklerini nasıl alabileceğimi bilseydim. Benim için orası muamma ama Taha Mert Gökdemir için bir engel değil :D Ledlerin genelde high side hep açık oluyor ve low side anahtarlanarak gereken akımın akması sağlanıyor. Led sürücü entegreler bunu kendi yapıyor ama sen bir mosfetle rahatça daha güçlü yapabilirsin. Takipteyim olursa kendim de yapmak istiyorum :D Keşke tv ye de yapabilsek. Atıyorum bir hdmi adaptörü ile istenen her cihaza bunu uygulayabilsek ticari potansiyeli bile var.