Bu projenin asıl çıkış noktası "PIC16F1824 ve ESP8266-01 ile WiFi RGBW LED sürücü (Android telefon desteği ile)" projesidir. Özellikle projenin alüminyum çubuk LED'lerin kullanımı (alüminyum çubuk led kutularının) öngörüldüğü ve özellikle küçük bir yapı olarak tasarlandı. O kadar ki, Serit LED için bağlantı noktaları klemens yerine LED çubuk doğrudan lehimlenecek şekilde ve besleme girişi olarak adaptör girişi kullanılacak şekilde tasarlandı. Bir Alüminyum kutu içine yerleştirilecekse zaten bu gereklidir.
Projedeki PCB üzerinde bağlantıların isim ve tanımları Piyasada yer alan LED bağlantıları değişiklik gösterebilmektedir. Bu nedenle bağlantı yapılmadan önce kontrol edilmesi yerinde olur.
Temelde bu projedeki her bir kanal kendi başına mini mono gibi davranır. Ama 3 renk olarak bağlayıp birleştirildiği zaman sonuç RGB olarak bilinen birlikte yandığı zaman beyaz (ideal şartlarda) ışığı oluşturan kırmızı, yeşil ve mavi renkleri sürmektedir.
Tablet ile birlikte projedeki devre
Devreye besleme verilip LED'ler ışık verdiği zaman %50 ile ışık verecektir. Temel düşünce ilk anda kullanıcı yanında cep telefonu olmayabileceği veya ilk anda aktif olmayacağı yönünde idi. Daha sonra istenildiği gibi cep telefonu veya tablet üzerinden ayarlanması mümkündür.
Şerit LED üzerinde gösterilmiş değişik renkler
Alüminyum tüp içine konmuş Şerit LED görünümleri.
Projeye yukarıdaki gibi bir şerit LED bağlanarak da kullanımı mümkündür. 5 metre kadar olan ürün ile kullanım durumunda devre küçük bir kutuya konması yerinde olacaktır.
Sözü edilen kutu buna benzer bir ürün olabilir..
Wifi ile devrenin PCB genişlikleri aynıdır. Dolayısı ile her ikisi de aynı kutuya birlikte girebilirler.
Şerit LED ucuna takılmış miniRGB devresi. Tek yapılması gereken şerit LED konumlanıp miniRGB ucuna besleme adaptörü bağlamak.
Şerit LED bu şekilde çalıştırmak pek iyi olmasa da (LED'ler ısınmaya başlıyor, nomalde yerleştirildikleri yerlerde ısıyı yapıştırıldıkları yüzeye aktarıyorlar) görülmesi açısından önemli idi.
Adaptör girişine uygun fişi olan 12Volt adaptör(*)
1
Devre için kutu
PCB yapısına uygun kutu(*)
1
Aynı zamanda işin içinde cep telefonu veya tablet olduğu için App inventor kitabının bir konusudur. Android cep telefonu veya tablet için programlar sayfasından erişilebilir.
Blog yayınlarımızı takip ediyorsanız; "PIC16F1824 ve ESP8266-01 ile WiFi RGBW LED sürücü (Android telefon desteği ile)" projesini görmüşsünüzdür. Ama haberleşme için ile de wifi kullanımı zorunlu olmasın istedik ve buna alternatif olarak kullanılabilecek bluetooth gördük. Piyasada yaygın olarak satılan bluetooth modüllere, eklediğimiz küçük bir adaptör kartı ile projeyi gerçekleştirme işimizi hızlandırdı.
Elbette ki;2. kitap App Inventor kitabının konusudur.
Eleman
Tanımı
Miktarı
10uF elektrolitik
radyal (çap 5mm, yükseklik 7.5mm)
3
100uF elektrolitik
radyal
1
470pF
SMD 805
1
100nF
SMD 805
3
SB1100
sckottky diyot
1
LED
SMD 805
1
2x4 sıra pin dişi
bacak arası 2.54mm
1
330uH
kondansator tipi bobin
1
adaptor girişi
90 derece adaptor girişi
1
RTR040N03
Sot23 N kanal lojik level mosfet
4
1k
SMD 805
4
2k2
SMD 805
1
10R
SMD 805
4
10k
SMD 805
6
3k6
SMD 805
1
1k2
SMD 805
2
0,33R 1/2W
½ W dip direnç
1
dik buton
90 derece 2 bacaklı 6x6 tak buton
1
MC34063
Soic 8 /150mil
1
PIC16F1824
Soic 14 /150mil
1
LM1117-3V3
SOT223 3.3V regülator
1
3A sigorta
kart tipi 3A sigorta
1
6'lı klemens
90 derece bacak arası 5,08mm
1
5'lı sıra pin
bacak arası 2.54mm erkek
1
RGBW modül
R,G,B,W renkler için 12V LED modül (*)
1
12Volt Adaptör
Adaptör girişine uygun fişi olan 12Volt adaptör(*)
1
Devre için kutu
PCB yapısına uygun kutu(*)
1
Buradaki en önemli malzemeyi eklemeyi unutmayalım : HC06 veya HC05 bluetooth modül.
Filmde 1.kitap sen de yap projeleri arasında yer alan USB programlayıcı ile HC06 modülün ayarlarının nasıl değiştirilebileceği anlatılmaktadır.
Devre daha önceki paylaşımlardan tanıdık gelmiştir. 12V adaptör girişinin yanındaki buton bu proje için kullanılabilir değildir.
Proje kullanılan HC06 bluetooth modül. Modül altındaki PCB bu proje için özel olarak geliştirdiğimiz bir üründür. (Adaptör kartı üzerindeki görünümü)
Devrenin boş elemanları yok iken gösterilen hali görülmektedir. Yukarıda eleman listesi verildiğine monte edilmesi gerekir. Görüldüğü gibi çoğu eleman yüzey montaj tipindedir.
Devrenin kullanım açısından; klemens uçlarına LED uçlarını bağlayın. RGB LED olarak geçen şeritlerin ortak ucu +'dir . +Uç devrenin + ucuna bağlanır. Şerit LED'in diğer uçları uygun bağlantı oluşturacak şekilde renk uçların girilir.
Beyaz LED'de aynı şekilde + ucu devrenin +ucuna bağlanır ve beyaz LED'in diğer ucu da beyaz uç girişine bağlanır.
+12Volt adaptör girişen takılır. Devre ilk anda tüm renkler ve beyaz %50 ışık verir.
Cep telefonundan bluetooth bağlantısı yapılır. Program çalıştırılır, bluetooth seçimi yapılır ve renkler veya beyaz ışık şiddeti ayarlanabilir.
Kitapları ortaya piyasaya sürünce, Arduino öğrenmek isteyen kullanıcılarlardan, set olarak ürünümüzün olup olmadığı öğrenmek istedikler. Set olarak bir Arduino ürünümüz olmadığı için bu yönde bir tasarıma yöneldik.
İlk olarak Arduino UNO olarak bilinen modelin işlemcisi üzerinden gitmek istediğimizde gördük ki bacak sayısı oldukça yetersizdi ve birçok donanım yerleştirmek istediğimizde anahtarla uğrammaız gerekiyordu. Tabii bu donanımları bir arada kullanmak istediğimizde oldukça sınırlayıcı olacaktı.
Bunun üzerine bizde Arduino Mega (ATMEGA2560) işlemcisi üzerine yönelmeyi tercih ettik. Donanımın geniş olanaklarına rağmen bazı noktalarda yine de anahtar kullanmak durumunda kaldık. Çünkü aynı anda iki donanım takılı ise iletişim sorunlarına yol açacaktı. Anahtar kullanılan modüllerden biri RGB sürücüsü, diğeri ise Wifi modüllerin bulunduğu bölüm idi.
Proje üzerine eklenen modüllere ek olarak, İşlemcinin bulunduğu bölüm Arduino UNO bacak bağlantılarına eş değer olarak yerleştirilmiş olarak (elbette MEGA formatında) düzenlenmiştir.
Modülleri
Rotay encoder
Buzer
DS18B20 dijital ısı sensörü
DHT11 Dijital nem sensörü
NTC ısı ile direnci değişen eleman
PTC ısı ile direnci değişen eleman
LDR ışık ile direnci değişen eleman
Hall manyetik alan sensör
Potansiyometre
4 adek LED çıkış izleme
4 Adet buton giriş
LCD ekran için bağlantı (arkaplan aydınlatma aç/kapa seçeneği ile)
2x16 Karakter LCD için bağlantı ( boyutları farklı olsa da, 1x8,1x16,1x20,2x8, 2x20 gibi karakter LCD'ler de kullanılabilir. Fakat soket farklılığı olabilir.)
24C04 EEPROM bağlantı. (aynı sokete diğerinin yerine 24C02 de takılabilir.)
7x4 seman LED ekran
DS1307 gerçek zaman saati. (yedekleme pili desteği ile)
MikroSD kart yuvası
HC06 veya HC05 için bağlantı. (5V ile beslenen modeller için)
ESP8266-01 için bağlantı klemensi
ESP8266-07 bağlantı klemensleri
NRF24C01 Mesh bağlantı
RGB LED modül.
Nextion bağlantı için port
Kendi devrenizi kurabileceğiniz BreadBord
Arduino
UNO bacak bağlantısıyla uyumlu konnektörler.
Tüm kartı besleyebilecek ve gerektiğinde dışarı besleme verebilen modül.(Doğru akım ile beslenmesi girilse de bağlantı yönü önemli değildir.)
Dikkatinizi çekmiştir, kartın alt tarafında eklenti gibi duran bir bölümü var. Bu bölümdekiler gerektiğinde veya istediniz de, ayrı bir yerde kullanmak üzere eklenmiş devrelerdir. İstediğiniz zaman bu bölümleri ana devre üzerinden kırıp kullanabilirsiniz.
Bu devreler soldan sağa doğru olmak üzere;
wifi üzerinden haberleşmeli Anne zili;
bipolar step motor sürücü;
wifi veya bluetooth haberleşmeli oyuncak araba kontrol devresi;
Bu modül aslında bebeğin olan annelerin en büyük sorunu üzerine oluşturuldu.
Bir bebeğiniz var ve onu uyuttunuz. Kimse uyandırmasın diye de zilin üzerine "bebek uyuyor, lütfen zile basmayın" yazdınız. Peki insanlar sizin bu uyarınızı dikkate alır mı? (Hiç sanmıyorum) Pek çok hanımın sıkıntısı işte bu noktada ortaya çıkıyor. "Lütfen zile basmayın bebek uyuyor"uyarısının dikkate almaması sonucu, bebeğin uyanması garanti. (Anlatıldığına göre bu çok yaşanılan bir sorunmuş)
İşte bu noktada kapı zilini devre dışı bırakıp devreye bu modül alınıyor, telefonunuza yöneldirilmiş zili isterseniz, telefonunuzun sesini kısıp, titreşim ile de kapıda birinin varlığını anlayabilirsiniz.
Kod örnekleri
Karakter LCD
Kart üzerindeki 2x16, 2x20 ,4x16 veya 4x20 karakter LCD bağlantısı için kullanılabilecek kod örneği aşağıda verilmiştir. (örnek 2x16 LCD üzerinde gösterilmiştir)
LCD kart üzerine uygun şekilde yerleştirilir .
USB kablosu bilgisayar ile bağlantısı yapılır
Program yüklenir,
trimpot yardımı ile ekrandaki görüntü kontrastı ayarlanır.
KOD:
constintLCD_LED=13;#include<LiquidCrystal.h>constintLCD_RW=11;//RS,E,D4,D5,D6,D7LiquidCrystallcd(12,10,43,44,45,46);//lcd bacak tanımları// the setup function runs once when you press reset or power the boardvoidsetup(){// initialize digital pin 13 as an output.pinMode(38,OUTPUT);pinMode(LCD_LED,OUTPUT);//lcd arkplan aydınlatma bacağıpinMode(LCD_RW,OUTPUT);//lcd yazma izni kontrol hep lojik-lowdigitalWrite(LCD_LED,HIGH); //arka plan aydınlatması açılırdigitalWrite(LCD_RW,LOW);// set up the LCD's number of columns and rows:lcd.begin(16,2);// Print a message to the LCD.lcd.print("Elektronik");lcd.setCursor(0,1);lcd.print("Kontrol");}// the loop function runs over and over again forevervoidloop(){;}
Yukarıda verilen kodun 2x16 karakter LCD üzerindeki görünümü
Karakter LCD üzerinde sayıcı
Haydi Başla projesinde Karakter LCD ile ilgi örnek bir önceki başlık altında verilmişti.
Burada LCD üzerinde 1 saniyelik adımlarla sayan bir sayıcının değerini ekran üzerinde görüntülenmesi örneği verilecektir. İlk satırda "Saniye Sayaci:" (LCD üzerinde "ı" karakteri yer almadığı için) gösterilirken, ikinci satırda sayılan değer gösterilmektedir.
KOD:
//1 saniyelik LCD sayıcı//Arduino sürümü:1.6constintLCD_LED=13;#include<LiquidCrystal.h>constintLCD_RW=11;//RS,E,D4,D5,D6,D7LiquidCrystallcd(12,10,43,44,45,46);//lcd bacak tanımlarıunsignedlongEskiSaat=0;//mills() için sayaçconstlonginterval=1000;//1 saniye için zamanlayıcı aralığıintsayac=0;//sayıcı için// the setup function runs once when you press reset or power the boardvoidsetup(){// initialize digital pin 13 as an output.pinMode(38,OUTPUT);pinMode(LCD_LED,OUTPUT);//lcd arkplan aydınlatma bacağıpinMode(LCD_RW,OUTPUT);//lcd yazma izni kontrol hep lojik-lowdigitalWrite(LCD_LED,HIGH);digitalWrite(LCD_RW,LOW);// set up the LCD's number of columns and rows:lcd.begin(16,2);// Print a message to the LCD.lcd.print("Saniye Sayaci:");lcd.setCursor(0,1);lcd.print("0");}// the loop function runs over and over again forevervoidloop(){unsignedlongSaat=millis();if(Saat-EskiSaat>=interval){// son saati kaydetEskiSaat=Saat;sayac++;//sayıcı değerini 1 artırif(sayac==1000){sayac=0;}lcd.setCursor(0,1);lcd.print(sayac);}}
şeklinde bir koddur.
LCD'nin örnek görünümü. Alttaki satırda görülen değer sayıcının o anki değerini göstermektedir.
programın çalışması esnasında ekranda görüler birkaç değeri kapsamaktadır.
Karakter LCD üzerinde Scratch programı ile "Kontrol Cepte" yazdırma
Scratch programı görsel olarak (blokların sürüklenme ile) ve düzenlenerek programlama yapabilme imkanına sahiptir. Dolayısı ile kullanıcı olarak temel kodlama dili bilinmese de bloklar yardımı ile istenilen işlemin gerçekleştirilmesi mümkündür.
Scratch üzerindeki program için bu grup yeterlidir. Program 1. satırda "Kontrol" yazdırırken, 2. satırda "Cepte" yazdıracaktır. Görünüm sürekli yenilenecektir. (istenirse son satıra bir tanede 5 saniyelik gecikme eklenebilir.
Programın nasıl yapıldığı ve Haydi başla üzerinde çalışmasını gösterir.
LED Ekran (4x7 segman) üzerinde bir değer gösterme
2x7 segman ekran üzerinde rakamları gösteren iki örnek içerir.
Birincisi rakamlar doğrudan registerlere yazılır.
KOD:
//Haydi başla üzerinden MAX7219 ile LED ekran üzerinde 1,2,3,4 gösterilmesi//arduino sürüm: 1.6 //MAX7219 için hazır kütüphane kullanılmamıştır.#include<SPI.h>constintmax7219_en=47;//max7219 çip izni// the setup function runs once when you press reset or power the boardvoidsetup(){// initialize digital pin 13 as an output.pinMode(max7219_en,OUTPUT);//max7219 çip enable bacağına çıkış//max7219 başlangıç kodlarıdigitalWrite(max7219_en,HIGH);//max7219 izin yok//spi başlangıç rutinleriSPI.setBitOrder(MSBFIRST);SPI.setClockDivider(SPI_CLOCK_DIV128);// MAX7219 başlama rutinleriSPI.begin();MAX7219Transfer(0x0F,0x01);//tüm segmanlar aktifdelay(500);MAX7219Transfer(0x0F,0x00);//tüm segmenler sönük..// Enable mode BMAX7219Transfer(0x09,0xFF);//rakamsal kodlama.// Use lowest intensityMAX7219Transfer(0x0A,0x01);//LED ışık yoğunluğu// Only scan one digitMAX7219Transfer(0x0B,0x03);//sadece a6 dijit for(inti=1;i<5;i++){MAX7219Transfer(i,0x7F);}// Turn on chipMAX7219Transfer(0x0C,0x01);MAX7219Transfer(0x01,0x00);MAX7219Transfer(0x02,0x00);MAX7219Transfer(0x03,0x00);MAX7219Transfer(0x04,0x00);//ekrana yazılan değerlerMAX7219Transfer(0x01,1);MAX7219Transfer(0x02,2);MAX7219Transfer(0x03,3);MAX7219Transfer(0x04,4);}// the loop function runs over and over again forevervoidloop(){;}voidMAX7219Transfer(uint8_taddress,uint8_tvalue){//max7219'a veri gönderme adımları// max7219 izni verdigitalWrite(max7219_en,LOW);// register adresi gönderSPI.transfer(address);// değeri gönderSPI.transfer(value);// max7219 erişime kapalı.digitalWrite(max7219_en,HIGH);}
Registerler doğrudan 1,2,3,4 yazılır ve program yüklendiğinde ekranda görülen.
ikincisinde registerlere yazma işi bir fonksiyon üzerinden çağrılır. (kendi programını geliştirenler için daha kolay)
KOD:
//Haydi başla üzerinden MAX7219 ile LED ekran üzerinde 1,2,3,4 gösterilmesi//arduino sürüm: 1.6//MAX7219 için hazır kütüphane kullanılmamıştır.#include<SPI.h>constintmax7219_en=47;//max7219 çip izni// the setup function runs once when you press reset or power the boardvoidsetup(){// initialize digital pin 13 as an output.pinMode(max7219_en,OUTPUT);//max7219 çip enable bacağına çıkış//max7219 başlangıç kodlarıdigitalWrite(max7219_en,HIGH);//max7219 izin yok//spi başlangıç rutinleriSPI.setBitOrder(MSBFIRST);SPI.setClockDivider(SPI_CLOCK_DIV128);// MAX7219 başlama rutinleriSPI.begin();MAX7219Transfer(0x0F,0x01);//tüm segmanlar aktifdelay(500);MAX7219Transfer(0x0F,0x00);//tüm segmenler sönük..// Enable mode BMAX7219Transfer(0x09,0xFF);//rakamsal kodlama.// Use lowest intensityMAX7219Transfer(0x0A,0x01);//LED ışık yoğunluğu// Only scan one digitMAX7219Transfer(0x0B,0x03);//sadece a6 dijitfor(inti=1;i<5;i++){MAX7219Transfer(i,0x7F);}// Turn on chipMAX7219Transfer(0x0C,0x01);MAX7219Transfer(0x01,0x00);MAX7219Transfer(0x02,0x00);MAX7219Transfer(0x03,0x00);MAX7219Transfer(0x04,0x00);//ekrana yazılan değerlerLEDekrana_yaz(5,6,7,8);}// the loop function runs over and over again forevervoidloop(){;}voidLEDekrana_yaz(uint8_thane1,uint8_thane2,uint8_thane3,uint8_thane4){//ekrana değerleri yazdırmak için...MAX7219Transfer(0x01,hane1);MAX7219Transfer(0x02,hane2);MAX7219Transfer(0x03,hane3);MAX7219Transfer(0x04,hane4);}voidMAX7219Transfer(uint8_taddress,uint8_tvalue){//max7219'a veri gönderme adımları// max7219 izni verdigitalWrite(max7219_en,LOW);// register adresi gönderSPI.transfer(address);// değeri gönderSPI.transfer(value);// max7219 erişime kapalı.digitalWrite(max7219_en,HIGH);}
Register fonksiyon üzerinden yazılır. LEDekrana_yaz(5,6,7,8);
LED ekran üzerinde sayıcı
Burada önceki örnekte yer alan LED ekranda gösterilen rakamların 1 saniyelik adımlarla sayan sayıcının (0 ile 9999 aralığı) değerinin LED ekranda gösterilmesi hedeflenmektedir.
Ekran üzerindeki hanelerin soldaki değer 0 olduğu zaman hane söndürülmektkedir.
KOD:
//Haydi başla üzerinden MAX7219 ile LED ekran üzerinde 4 hane sayıcı gösterilmesi//arduino sürüm: 1.6//MAX7219 için hazır kütüphane kullanılmamıştır.#include<SPI.h>constintmax7219_en=47;//max7219 çip izniunsignedlongEskiSaat=0;//mills() için sayaçconstlonginterval=1000;//1 saniye için zamanlayıcı aralığıintsayac=0;//sayıcı için// the setup function runs once when you press reset or power the boardvoidsetup(){// initialize digital pin 13 as an output.pinMode(max7219_en,OUTPUT);//max7219 çip enable bacağına çıkış//max7219 başlangıç kodlarıdigitalWrite(max7219_en,HIGH);//max7219 izin yok//spi başlangıç rutinleriSPI.setBitOrder(MSBFIRST);SPI.setClockDivider(SPI_CLOCK_DIV128);// MAX7219 başlama rutinleriSPI.begin();MAX7219Transfer(0x0F,0x01);//tüm segmanlar aktifdelay(500);MAX7219Transfer(0x0F,0x00);//tüm segmenler sönük..// Enable mode BMAX7219Transfer(0x09,0xFF);//rakamsal kodlama.// Use lowest intensityMAX7219Transfer(0x0A,0x01);//LED ışık yoğunluğu// Only scan one digitMAX7219Transfer(0x0B,0x03);//sadece a6 dijitfor(inti=1;i<5;i++){MAX7219Transfer(i,0x7F);}// Turn on chipMAX7219Transfer(0x0C,0x01);MAX7219Transfer(0x01,0x00);MAX7219Transfer(0x02,0x00);MAX7219Transfer(0x03,0x00);MAX7219Transfer(0x04,0x00);//ekrana yazılan değerlerLEDekrana_yaz(0x0f,0x0f,0x0f,0);}// the loop function runs over and over again forevervoidloop(){//1 saniye oluşturmaunsignedlongSaat=millis();if(Saat-EskiSaat>=interval){// son saati kaydetEskiSaat=Saat;sayac++;//saniye sayıcı değerini 1 artırif(sayac==10000){sayac=0;}// haneler için değişkenleruint8_th1=0;uint8_th10=0;uint8_th100=0;uint8_th1000=0;//sayac değerini hanelere ayırmah1=sayac%10;h10=(sayac/10)%10;h100=(sayac/100)%10;h1000=(sayac/1000)%10;//soldaki haneler "0" ise söndürif(h1000==0){h1000=0x0f;if(h100==0){h100=0x0f;if(h10==0){h10=0x0f;}}}// oluşturulan değerleri LED ekrana göndermeLEDekrana_yaz(h1000,h100,h10,h1);}}voidLEDekrana_yaz(uint8_thane1,uint8_thane2,uint8_thane3,uint8_thane4){//ekrana değerleri yazdırmak için...MAX7219Transfer(0x01,hane1);MAX7219Transfer(0x02,hane2);MAX7219Transfer(0x03,hane3);MAX7219Transfer(0x04,hane4);}voidMAX7219Transfer(uint8_taddress,uint8_tvalue){//max7219'a veri gönderme adımları// max7219 izni verdigitalWrite(max7219_en,LOW);// register adresi gönderSPI.transfer(address);// değeri gönderSPI.transfer(value);// max7219 erişime kapalı.digitalWrite(max7219_en,HIGH);}
sayıcı çalışırken resmi çekilmiş birkaç değer görünümü.
HaydiBaşla projesinde projesinde 1 saniye aralıkla sayan sayıcının LED ekran üzerinde görütülenmesi.