Anasayfa Makale Kendin Yap #1 – RGB LED Kasa Aydınlatması ve Mobil Uygulama

Kendin Yap #1 – RGB LED Kasa Aydınlatması ve Mobil Uygulama

Arduino kullanarak kasanız için kendi RGB aydınlatma kontrolcünüzü yapabilir, programını yazarak cep telefonunuzdan renkleri değiştirebilirsiniz. Nasıl mı? Adım adım ilerliyoruz…

Bu videomuzda size RGB LED bağlantısı olmayan eski ve giriş seviyesi anakart kullanıcıları için Arduino tabanlı bir modifikasyondan bahsedeceğiz.

Yazımızdaki yönergeleri takip ettiğinizde siz de kasanıza RGB LED şeritler takabilecek ve hatta Android tabanlı cep telefonunuzdan özel uygulamamız ile bunları kontrol edebilir hale geleceksiniz.

Elbette aynı fonksiyonu sunan hazır kitler de mevcut ve bu yazıda anlatacaklarımız size fazla karmaşık geldiyse veya ilginizi çekmediyse hazır çözümlere yönelebilirsiniz; ancak özellikle belirtmeliyiz ki bizim burada amacımız elimizdeki bir problemi çözerken aynı zamanda bir şeyleri kurcalayıp, öğrenmeye sizleri teşvik etmek.

Bilmeyenleriniz için Arduino, elektronik projeler üretmek için kullanılan açık kaynaklı bir geliştirme platformudur. Uygulama alanına göre pek çok modeli bulunan Arduino’yu USB üzerinden bilgisayarımıza bağlayıp kendi yazılımı ile programlayabiliyor ve ona istediğimiz işleri yaptırabiliyoruz. Bu videoda anlatacaklarımız Arduino, programlama ve hobi elektroniğiyle ilgili temel kavramlara hakim kullanıcılara yöneliktir.

Bu gerekli açıklamaya değindikten sonra gelin malzeme listemize bir göz gezdirelim:

  • 1 adet Arduino Uno

Bu model Arduino’nun giriş seviyesi modeli olup yapacağımız iş için gayet yeterli.

  • 1 adet Arduino Protoshield

Shield yani kalkan dediğimiz parçalar Arduino’nun pinlerine geçerek sabitlenirler. Proto shield ve adından da anlaşılacağı üzere bize elektronik prototipleme için kolaylık sağlayan bir shield olup bir nevi Arduno’ya kat çıkmak olarak düşünülebilir. Arduino’nun tüm pinlerine Proto shield üzerinden erişebilirsiniz.

  • 1 adet MOLEX’ten 12V DC’ye adaptör

Arduino kasamızın içindeyken bilgisayarımızın güç kaynağından aldığımız 12v gücü bu molex’ten 12v dc barrel jack’e dönüştürücü ile Arduino’ya vereceğiz. Arduino Uno modelini 7-12v arasında güçle besleyebiliyoruz.

  • 1 adet HC-06 bluetooth alıcı/verici ünitesi

Bu parçayı Arduino’muzu cep telefonumuz ile bluetooth üzerinden kontrol etmek için kullanacağız.

  •  3x IRLB8721 MOSFET

Bu transistörler 12v’la çalışan RGB LED şeritlerimizi sürmemiz için gerekli. Arduino’nun logic pinleri 5v’la çalışır ve şerit ledlere güç vermek için yetersiz kalır. Bu mosfetler 5v’u 12v’a yükseltecek.

  • RGB şerit Led uzatma kablosu (tek şerit led için)

Bu kabloyu Arduino’dan RGB şerit ledlerimize temiz ve kolay bağlantı yapmak için kullanacağız. Şeritinizin ucunun erkek veya dişi olma durumuna dikkat ederek kablonuzu almayı unutmayın.

  • RGB Çoklayıcı Kablo (birden çok parça şerit led için)

Eğer kasanızın farklı noktalarına birden çok şerit led koymak istiyorsanız bu kablo çok işinize yarayacaktır. Tek RGB çıkışınızı çoklayarak birden çok parça led şeritinizi aydınlatmanızı sağlar. Google’da arattığınızda 3 veya 4’e kadar çoklayan kablolar bulabilirsiniz. Biz çoklayıcımızı modifiye edip tekli ucunu iç kablolarına ayırdık. (3 adet renk kablosu, 1 adet güç kablosu)

  • Farklı uzunluklarda jumper kablolar

Bu jumper kablolar breadboard üzerinde prototipleme yaparken ve led şeritlere bağlantı yaparken işimize yarayacak.

  • İzolasyon bandı

Modifikasyonumuzun temiz görünmesi ve kısa devre ihtimalinin minimuma inmesi için açıkta olan ve içinden elektrik geçen kabloları bu bantla saracağız.

  • RGB Şerit LED (Maksimum 3 adet 25cm’lik tavsiye ederiz)

Tabiki olmazsa olmazımız RGB şerit ledlerimiz. 4 pinli şerit ledlere ihtiyacımız olacak. 3 tanesi renk kontrolü, 1’i 12v güç pini. Yapıştırıcılı yerine mıknatıslı tercih etmenizi öneririz.

Parçaların Birbirine Bağlanması (Prototipleme)

Önce Arduino Uno’muzun üzerine Proto Shield’ı takıyoruz ve Proto shield ile gelen mini breadboard’u ortadaki boşluğa yapıştırıyoruz.

Sonra breadboard’a 3 adet mosfeti gördüğünüz şekilde takıyoruz. Hemen yanına da HC-06 bluetooth alıcı verici modülümüzü breadboard üzerinde dik duracaK şekilde oturtuyoruz.

Sıra Arduino ile bu bileşenlerin bağlantısını yapmaya geldi. Önce Arduino’dan 5v güç ve toprak hattı çekip sırasıyla broadboard’un kırmızı ve mavi tarafındaki deliklere takıyoruz.

Ardından HC-06’nın VCC pinini breadboard’un güç hattına, GND pinini de toprak hattına bağlıyoruz. Mosfetlerin siyah çıkıntılı kısmı bize bakar konumdayken soldan sağa sonuncu pinlerini toprak hattına bağlamamız gerekiyor.

Mosfetlerin ilk pinlerini de sırasıyla Arduino’nun 3.,5. ve 6. pinlerine bağlıyoruz. Bu pinleri tercih etmemizin sebebi bunların PWM sinyali destekleyen pinler olmaları.

Mosfetlerin bağlantısını tamamlamak için geriye sadece ortadaki pinlerine birer erkekten erkeğe jumper kablo takıp uzatmak kaldı. Bu kablolar RGB LED şeritlerimize bağlanacak.

RGB Led şeritlere baktıysanız 4 pin girişi olduklarını göreceksiniz, peki 4.pine bağlayacağız? 4.pin 12v’luk güç pinidir ve bunu Arduino’nun VIN pininden alıyoruz. Hatırlarsanız Arduino’yu bilgisayarımızın güç kaynağından aldığımız 12v ile besliyorduk. VIN pini bu voltajı değiştirmeden bize sunar. Yaptığımız testlerde VIN pini ile 3 adet 25cm’lik RGB LED şerit aydınlatabildik.

Şimdi geriye Arduino’ya kodu yüklemek ve bluetooth alıcı verici modülün kalan pinlerini Arduino’ya bağlamak kaldı. Bunu en son yapacağız çünkü bluetooth alıcı verici modül Arduino’nun RX ve TX pinlerine bağlanıyor. Arduino’yu USB’ye bağlayıp kod yüklemek için bu pinlere herhangi bir elektronik bileşen takılı olmamalıdır.

Programlama

Kodu birlikte kabaca inceleyelim. Her satır koda değinmiyoruz çünkü başta da belirttiğimiz gibi bu rehberimizi temel düzeyde Arduino bilenlere yönelik hazırladık.

int red;
int green;
int blue;

Başta gördüğünüz gibi kırmızı, mavi, yeşil olarak değişkenlerimizi tanımlıyoruz.

red = EEPROM.read(0);
green = EEPROM.read(1);
blue = EEPROM.read(2);

Void Setup fonksiyonumuzda değişkenlerimizi kodun ilerleyen kısımlarında Arduino’nun dahili hafızası EEPROM’a kaydedeceğimiz için burada o hafızadan okuma gerçekleştiriyoruz. Bu değerleri hafızaya kaydetmemizin sebebi, sistemin gücünü kestiğimizde ayarların kaybolmasını istemediğimiz için.

analogWrite(6,blue); //mavi
analogWrite(3,red); //kırmızı
analogWrite(5,green); //yeşil

Daha sonra hafızadan okuduğumuz değerleri uyguluyoruz ve RGB LED şeritlere ilgili renkleri göstermesi için sinyalleri yolluyoruz. Void Setup fonskiyonu altında yazılan kodlar sadece Arduino açıldığında uygulandığı için burası sadece kayıtlı ayarların geri yüklenmesi olarak düşünülebilir.

Void Loop fonsiyonuna baktığımızda bluetooth üzerinden bir veri akışı olduğunda kırmızı, mavi, yeşil pinlerini gelen değere göre RGB şeritlere gönderip, hafızayı da ona göre güncelliyoruz.

void parseData() { // split the data into its parts

char * strtokIndx; // this is used by strtok() as an index

strtokIndx = strtok(tempChars,","); // get the first part - the string
red = atoi(strtokIndx);

strtokIndx = strtok(NULL, ","); // this continues where the previous call left off

green = atoi(strtokIndx); // convert this part to an integer

strtokIndx = strtok(NULL, ",");
blue = atoi(strtokIndx);

}

Kodumuzun geri kalan kısmında bluetooth üzerinden cep telefonundan gelen ve virgüllerle ayrılan sayısal değerleri nasıl parse edeceğimizi, yani ayıracağımızı gösteren kodlar var. Bu kodlar Arduino’ya her virgül gördüğünde değerleri bir sonraki değişkene kaydetmesi gerektiğini söylüyor.

Mesela siz cep telefonunuzdan MAVİ rengi seçip uyguladığınızda bluetooth üzerinden Arduino’ya <0,0,255> verisi gönderiliyor. İlk değer kırmızıyı temsil ediyor, ikinci yeşili, üçünde de maviyi. Arduino bu kod sayesinde kırmızıya 0, yeşile 0 vermesi gerektiğini yani o renkleri kapatması gerektiğini anlıyor, maviye de 255 değerini veriyor ki 255 8bitlik PWM aralığındaki en yüksek değerdir. Bu da mavi rengi sonuna kadar açacağımız anlamına geliyor.

Bu kodları Arduino’ya yüklemek için önce USB B’den A’ya kabloyla Arduino’muzun bilgisayarımıza bağlantısını yapıyoruz. Bazı sürücülerin yüklendiğini görebilirsiniz, yükleme işlemi biter bitmez bilgisayarımızdaki Arduino IDE yazılımını çalıştırıyoruz. Eğer yüklü değilse www.arduino.cc adresinden indirebilirsiniz.

Kodun Tamamı:

#include <EEPROM.h>

#define tempCycle 1000U //Multi threading...
unsigned long tempLastMillis = 0;

const byte numChars = 32;
char receivedChars[numChars];
char tempChars[numChars];

int red;
int green;
int blue;

boolean newData = false;

void setup() {
Serial.begin(9600);
pinMode(3, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);

red = EEPROM.read(0);
green = EEPROM.read(1);
blue = EEPROM.read(2);

analogWrite(6,blue); //mavi
analogWrite(3,red); //kırmızı
analogWrite(5,green); //yeşil

}

void loop() {

recvWithStartEndMarkers();
if (newData == true) {
strcpy(tempChars, receivedChars);
parseData();
showParsedData();
newData = false;
analogWrite(6,blue);
analogWrite(3,red);
analogWrite(5,green);
EEPROM.update(0,red);
EEPROM.update(1,green);
EEPROM.update(2,blue);

}

}

void recvWithStartEndMarkers() {
static boolean recvInProgress = false;
static byte ndx = 0;
char startMarker = '<';
char endMarker = '>';
char rc;

while (Serial.available() > 0 && newData == false) {
rc = Serial.read();

if (recvInProgress == true) {
if (rc != endMarker) {
receivedChars[ndx] = rc;
ndx++;
if (ndx >= numChars) {
ndx = numChars - 1;
}
}
else {
receivedChars[ndx] = '\0'; 
recvInProgress = false;
ndx = 0;
newData = true;
}
}

else if (rc == startMarker) {
recvInProgress = true;
}
}
}

void parseData() { // split the data into its parts

char * strtokIndx; // this is used by strtok() as an index

strtokIndx = strtok(tempChars,","); // get the first part - the string
red = atoi(strtokIndx);

strtokIndx = strtok(NULL, ","); // this continues where the previous call left off
green = atoi(strtokIndx); // convert this part to an integer

strtokIndx = strtok(NULL, ",");
blue = atoi(strtokIndx);

}

void showParsedData() {

Serial.print("R ");
Serial.println(red);
Serial.print("G ");
Serial.println(green);
Serial.print("B ");
Serial.println(blue);

Serial.print("EEPROM 1: ");
Serial.println(EEPROM.read(0));
Serial.print("EEPROM 2: ");
Serial.println(EEPROM.read(1));
Serial.print("EEPROM 3: ");
Serial.println(EEPROM.read(2));

}

Program açıldıktan sonra Araçlar menüsüne oradan Kart menüsüne gelip kullandığınız Arduino versiyonuna tıklayın, bizim durumumuzda doğru seçenek Uno olacak. Ardından yine araçlar menüsündeki port seçeneğine gelip Arduino hangi porta takılıysa onu seçiyoruz.

Tüm bu küçük detayları da hallettikten sonra kodu programa kopyalayıp yapıştırabilirsiniz. Yüklemek için de burada görmüş olduğunuz sağ ok butona basıyoruz ve herşey yolunda giderse Arduino bize kodun başarılı şekilde yüklendiğini söyleyecektir.

Kod yüklendikten sonra HC-06 bluetooth alıcı&verici’nin TXD pinini Arduino’nun RX pinine, alıcı&vericinin RXD pinini de Arduino’nun TX pinine takıyoruz, yani ters pinlere bağlıyoruz.

Şimdi RGB Led şeritimizi veya şeritlerimiziArduino’ya bağlamaya hazırız. Eğer tek şerit bağlayacaksanız malzeme listemizde belirttiğiniz tekli, birden çok şerit led bağlayacaksanız çoklayıcılıyı uzatma kablosuna ihtiyacınız var. Elinizdeki dişi ve erkek uçlu jumper kablolar ile bu uzatma kablolarına bağlantı yapabilirsiniz.

Mosfetlerimizin ortanca pinlerini ve 12v elektriği içeren Arduino’nun VIN pinini doğru şekilde RGB led şeritimizin uzatma kablosuna bağlıyoruz ve çıkmaması için izolasyon bantıyla etrafını kaplıyoruz. Uzatma kablolarında genellikle bir ok bulunur. Bu ok size hangi pinin 12v olduğunu söyler. Kablonun diğer ucuna da rgb led şeritimizi bağladıktan sonra Arduino’ya güç verebiliriz.

Bu adımdan sonra sıra Android tabanlı cep telefonunuza uygulamamızı yüklemekte
ve bluetooth ayarlarını yapmakta.

Telefonunuzun bluetooth ayarlarına gelin ve bluetooth’u etkinleştirin. Yakınlardaki aygıtları tarattığınızda HC-06 isimli aygıtın bulunduğunu farkedeceksiniz. HC-06 ile telefonunuzu eşleyin. Bu işlem için sizden şifre istenirse “1234” girebilirsiniz.

Uygulama için Massachusetts Teknoloji Enstitüsü M.İ.T.’nin App Inventor isimli geliştirme platformunu kullandık ve kaynak kodlarını da size sunuyoruz, video açıklamalarından hem telefonunuza yüklemek için .apk dosyasına hem de geliştirmek için .aia formatına ulaşabilirsiniz. Uygulamayı geliştirmek için App Inventor’a .aia dosyasını yüklemeniz yeterli.

Uygulamayı .aok dosyasıyla telefonunuza kurup çalıştırdıktan sonra bağlan butonuna basıp listeden HC-06’yı seçin.

Ve artık Arduino’ya bağlısınız. Dilediğiniz renk değişiklerini yaptıktan sonra Uygula butona bastığınızda RGB şeritleriniz o renkte yanacak ve ayarlarınız Arduno’ya kaydedilecektir.

Bu projenin sıvı soğutma pompanızı, fanlarınızı kontrol eden ve üzerindeki sıcaklık sensörü ile kasa içi sıcaklığınızı size raporlayan daha gelişmiş bir versiyonu da yapmıştım. Okuduğunuz bu yazıdaki Technopat’a uyarladığım sadeleştirilmiş versiyonudur. [email protected]’ten bana ulaşarak istemeniz durumunda gelişmiş versiyonunun kodlarını ve Android uygulamasını da size gönderebilirim. Merak edenler için böyle bir şey:

Umarız projemiz işinize yaramıştır, benzer içerikler için bizi takip etmeye devam edin.

Uygulama ve kodları aşağıdaki bağlantıda bulabilirsiniz. Kaynak kodlarını görüntülemek için.AIA dosyasını App Inventor’a yüklemeniz gerekmektedir.

İndirme Bağlantısı…