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.
Ö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.
Ayynen bizde de var o televizyonlardan 😅 İlham kaynağımın o gerçekten, ama burada birbirine paralel bağlı birçok led tek kontrol input u ile beslendiğinden çok daha basit bir proje olacak. Eğlenceli olursa beraberce ilerletiriz zaten. Tüm kodlar dökümentasyon ile birlikte Github'ta olacak.
@Taha Mert Heyecanla bekliyoruz. Öncesi ve sonrası şeklinde odanın değişimini de görmek isteriz :D
Kolay gelsin
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.
TV için yapmayı düşünüyorum ben de. Şöyle bişi pratik olurdu:
Laptoptan ekran paylaşımını yineleme ayarına getireceksin.
HDMI girişine VGA dönüştürücü takacaksın veya direk VGA girişine bağlayacaksın kabloyu.
Kabloyu kesip içindeki hatlardan renkleri okumak için arduino nano ile bir bağlantı yapacaksın.
Prize takılı adaptörün GND sini ledlerin low siteına bir mosfet ile bağlayacaksın.
Nano ile anahtarlayarak istediğin renkleri yaptıracaksın.
VGA işlemek için mikrokontrolöre bile gerek yok sanırım. Ben Eater diye bir youtuberın bir VGA grafik kartını mikrokontrölörsüz yaptığına tanık olmuştum. Çok ilgili olmasa da VGA hattının okunması için gerekli bilgiyi burdan öğrenmiştim. Bırakayım şöyle:
Wowow
Bence işte yine o kadar gg birşeyle uğraşmaya gerek yok. İşte o zaman bi raspi alınabilir. Zaman > $
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.
Ü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
}
}
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
}
}
}
}
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.
Mosfetleri yeni tanıyorum bu yüzden sistemindeki kullanma şeklin hakkında birkaç yorum yapacağım yanılma ihtimalim yüksek. Düzeltirsen sevinirim :D
MOSFETfor short, has an extremely high input gate resistance with thecurrentflowing through the channel between the source and drain being controlled by the gate voltage.
Benim bu wikipedi girdisinden anladığım şey GATE voltajının source-drain arası akımı kontrol ettiği. Yani Ledlerin üzerinden geçecek akımı kontrol ediyor mosfet. Üzerine bir load bağlı değilken voltajı okumak yanıltıcı sonuçlar gösterebilir gibi geldi bana. LED olmasa bile en azından bir direnç bağlayıp okumak daha mantıklı olabilir. Aşağıdaki grafiği doğrulamaya çalışabilirsin böylece sistemi denerken.
Bunun dışında GATE akımını sınırlamak için bir direnç kullanman gerekiyor olabilir emin değilim ama arduinonun bacaklarının 20mA üzerinde akım akıtmaması gerekiyordu hatırladığım kadarıyla. Yani mosfetin GATE'ini açmak için yeterli olmayabilir arduino, öyle bir durumda araya küçük bir transistör atmanın yardımı dokunabilir. Mosfetin datasheetine bakmadım belki de gerek yoktur, inceleyelim;
N-channel mosfet ile devrendeki şematik böyle olacaktır tahminimce;
R2 arduino pinini yüksek akımdan koruyacak. GATE'e 255 PWM yani 5V uygularsan yaklaşık 35 nC yük taşındığında arduino pininden akan akım duracak. Bu arduino için güvenli bir değer mi değil mi bilemedim. 1kHz desek PWM frekansına, saniyede 1000 kere 35nC yük geçecek bu da 35uA akım demek. Evet, arduino bunu rahatlıkla verebilir gibi duruyor sürekli kullanımda, anlık akımlar sıkıntı yaratmıyorsa şahane! Ne transistör ne de R2'deki dirençten kullanman gerekmez.
R1 arduino pini sürmediğinde GATE'i toprağa çekecek bir pull down görevi görüyor böylece mosfeti kapatıyor. Arduino gücü kesilirse parazitik olarak açılmazsa gerek yok buna tabii.
Doğru mu düşünüyorum konuyu anlamış mıyım yoklamak istedim :D Proje çok hızlı ilerliyor bu arada yakın zamanda sonuçları göreceğiz gibi, eline sağlık çok kaliteli içerik!
@Bahadır Onur Güdürü geri bildirim için çok teşekkürler. Bence konuyu aşmışsın, ben bu kadar düşünmemiştim. Pull down resistor kullanmaya gerek görmememin sebebi bu mosfetin spesifik olarak logic level bir mosfet yani düşük gate source gerilimlerinde çalışmak için geliştirilmiş bir mosfet olması. Ama özellikle hangi gerilim düzeyinde ne kadar akım çektiğini ölçmedim. Problem olmayacağını varsaydım. Ayrıca pull-down resistor bir gerilim bölücü işlevi göreceği için mosfetin çalışma aralığını düşürür. Bu sebeple gerçekten gerek olmadıkça pull-down resistor kullanmayı tercih etmiyorum. Yine de deneyeceğim sonuçları yazarım. Tabi ben de çok yeniyim bu alanda yanılıyor olabilirim. Neticede şu an için büyük bir sorun yok. Boşta gerilim ölçümü konusundaki yorumuna diyebileceğim tek şey teoride bu ölçüm tarzının doğru olduğundan eminim ama pratikte başka fenomenler devreye giriyorsa bilemiyorum. Bunu da tekrar deneyeceğim dediğin şekilde
sonuçları yazarım
@Taha Mert İlerleme var mı heyecanlıyız :D
Ç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.
Sabahları memur hali bana 2010 gibi webcam ve benzeri bir kutu kullanarak yaptığım dokunmatik yüzeyi hatırlattı. Birebir aynı görünüyor :D
Laptop touchpadleri o zamanlar benim için uzay çağıydı, web kamerasını kutunun içinden yağlı kağıda çeviriyordum. Parmaklarımın yağlı kağıt üzerine değdiğinde dışarıdan gelen ışığı kestiği için oluşan gölgesini de bir yazılım ayırt ederek fare gibi davranıyordu. Çoklu parmak da destekliyordu fotoğraflara yakınlaştırıyordum :D
Görüntü işleme çalışmış mıydın sen daha önce hiç ? Çalıştıysan biraz yardım fena
Gözümden kaçmış, hayır çalışmamıştım maalesef
Proje başarıyla sonuçlandı, ilk fırsatta buraları yeşillendireceğim
Gelişmeleri bekliyoruz bir video mümkünse bide :D genel ambians nasıl?
@Bahadır Onur Güdürü genel ambians cidden çok iyi değil 😅 bence sebebi hem gecikmeler hem de ledlerin güzel bir şekilde yerleştirememiş olması
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