Ethernet'e bağlanan cihazlarda sabit ip iyi olabilir, ama belli bir sayının üzerine çıktığı zaman ve özellikle üretilen cihaz sayısı birkaç yüzlere ulaştığında ip takibi, ve özellikle arıza, yenileme gibi işin içine girdiğinde ip takip etmek giderek zorlaşır ki işin içinden çıkılmaz bir hal alır.
Bu noktadaki çözümlerden biri değeri değiştirilebilir ip'dir. Hele ki her cihazın üzerinde cihazın ip'sini görebilir hale getirilirse, çok daha iyi olur.Bu projede "ENC28J60 ve Arduino ile Cep Telefonu haberleşmesi" projesinde anlatılan projeyi bir adım öteye taşıyarak, IP değerini LCD ekran üzerinde görüntüleme ve aynı zamanda ip değerini değiştirilebilir hale getirmeyi amaçlanmaktadır.
Not: Projeye bir buton eklenirse, istenildiği anda default ip değerine geri dönüşü sağlanabilir. IP ayarlarında daha fazla ayrıntılı değişiklik isteyen, kendi geliştirebilir.
Raduino
Arduino UNO modelinde artık bellek yetersizliği ortaya çıkmaya başladığı için, Arduino MEGA eşdeğeri ama UNO boyutlarında bir klon Arduino kullanılacaktır. Hele ki, bir de LCD ve ip değiştirme için kodların da ekleneceği düşünülür ise, iki veya üç tane UNO kullanımı gerekebilir. Böyle bir çözüm işi daha da karıştıracağı düşünülürse. Arduino MEGA kapasitesinde bir model kullanımı yerinde bir çözüm olabilir. Ya da ARM tabanlı bir işlemcinin kullanıldığı bir kart daha iyi olabilir.
Arduino MEGA kartı kullanımı mümkündür, ama bu daha önce paylaşımı yapılan ENC28J60 kartları ile uyum sorununu getirecektir. En azından SPI bacaklarının (MISO, MOSI, CLK ) uçları ne yazık ki farklı pin yerleşimine sahiptir. Bu noktada bizi ilgilendiren UNO pin uyumluluğu (özellikle SPI bacakları). Diğer çözüm SPI bacaklarını uyumlu hale getirmek, ama bu başka bir çözüm yoludur.
Yöneldiğimiz çözüm, UNO bacak uyumluluğu olduğu için, piyasada bir şekilde ulaşılan Raduino kartı oldu. Hiç bir değişiklik yapmadan ENC28J60 ethernet kartı bacakları kullanılabilme imkanı tanımaktadır.
Tek sıkıntısı Raduino üzerinde harici besleme girişi yer almamaktadır. Ama test amacı için uygulamalar da harici besleme girişi, USB portu üzerinden mobil telefon şarj cihazları ile çözülebilmektedir.
Daha fazla bilgi adresinden (http://kontrolcepte.blogspot.com/2017/04/raduino-yerli-arduino.html) ulaşılabilir.
LCD ve I2C
LCD olarak arkaplan aydınlatması olmayan bir model tercih edilecektir. Sonuçta arkaplan aydınlatması LED bile olsa bir enerji ihtiyacı vardır. Kendi adıma o LED'in harcadığı enerjiyi bile kıskanacak durumdayız, çünkü burada oldukça enerjiye ihtiyacı olan ENC28J60 var.LCD haberleşmesi için daha önce paylaşımı yapılan projedeki i2c haberleşmesi kullanılacak. Mega2560'ın çok bacağı olsa bile, diğer projelerde kullanılabilmesi için sadece 2 hat ile haberleşmesini sağlamak için i2c haberleşmesini kullanır. Önceki projede kullanılan ENC28J60 kartı kullanmak isteğinden dolayı en az ek bağlantı gerektirdiği için bu yol seçildi.
Bu bölümün seçimi kullanıma göre değişecektir, çoğunlukla cihazın kullanım yerine göre senede birkaç kereden fazla ip değerine ihtiyaç olmayacaktır. Hele oturmuş bir sistem ise, yıllarca ihtiyaç olmayacaktır. İsteyen bu bölümü sadece ihtiyaç olduğu zaman ip değeri görüntüleyecek şekilde düzenleyebilir. Bu şekilde devrenin enerji tüketimi oldukça düşecektir. İş ek bir butona bakar. Aynı etkinlik ethernet bağlantısından bir komut gönderme şeklinde de yerine getirilebilir.
Sadece IP değeri görüntüleme açısından, LCD olarak 1x16 karakter LCD yeterlidir. Ama çoğumuzun elinin altında en azından 2x16 LCD vardır. Bu yoldan ilerleyerek, 2x16 karakter lcd kullanımı yolu seçildi
Sadece gerekirse, LCD sürücü kartı üzerindeki trimpot ile kontrast ayarı yapılması gerekir. Çok önemli değil ise de bazı üreticilerin LCD ürünleri arasında fark olabiliyor.
Raduino üzerindeki i2c bacakları UNO üzerinde yer aldığı AREF yanındaki konumdadır. (Arduino UNO modelinde olduğu gibi Analog girişlerin olduğu A4 ve A5 bacakları değil tabii. Arduino MEGA modelinde i2c bacakları 20 ve 21. pinlere denk gelir.)
ENC28J60 modülü
Bir önceki projede ayrıntıları anlatılan ENC28J60 entegresi üzerine kurulu bir karttır. Ethernet haberleşmesinin tamamını Arduino üzerindeki SPI bağlantıları üzerinden yürütülür.
Ethernet bağlantısı da RJ45 konnektörü üzerinden sağlanır. Projede kullanılan RJ45 konnektörünün içinde darbe trafosu bulunduğu (2 adet) için projede anlatılan devreler güvenle ethernet hattına bağlanabilir. Hatta yeni sürüm modemler (router) cross kablo kullanılsa bile devrenizin ihtiyacı olan ethernet bağlantısını sağlayabilmektedir.
RJ45 üzerindeki iki adet LED, ethernet modül için kablo bağlantısı yapıldı(hub veya router için) ve ethernet aktivasyonu göstermek için kullanılmaktadır.
Elbette piyasada birçok Arduino ile uyumlu ethernet modülü yer almaktadır. ENC28J60 bunlardan biridir. Kodu uyarlamanız halinde diğer ethernet modülleri ile de kullanabilirsiniz.
ENC28J60 3.3V besleme (kart üzerinde bulunan regülatör) ve 25MHz ile çalışmaktadır. İstenirse bağlanacak işlemciler için saat kaynağı olarak da çalışmaktadır. Yani işlemci için saat kristalı ihtiyacını ortadan kaldırır. Elbette bu seçenektir, Projede zaten Raduino kullanıldığı için (hazır modül) bu seçenek söz konusu olmaz. Eğer birleşik bir proje şeklinde geliştirilmesi düşünülürse mümkündür.
ENC28J60 için anlatılabilecek çok şey olduğu kesin, ne de olsa Microchip 100 sayfanın üzerinde bir datasheet hazırlamış. Ama amacımız ENC28J60 veri kağıdını Türkçe olarak yayınlamak olmadığı için, bu işi ayrıntılı öğrenmek isteyenlere bırakıyoruz.
Kutu
Bu projede bir değişiklik yaparak, projedeki modüllerin içine konulacak fazla karmaşık olmayan bir kutu eklemek istedim.Çoğumuzun o veya bu şekilde bildiği 3D yazıcılar sayesinde 3D ile çizimi oluşturulan bir nesne plastik bir cisme dönüştürülebilmektedir(hatta metal). 3D yazıcılar birçok yöntemi kullansa da, çoğunlukla plastik eritilip üst üste yığılması yöntemi ile istenen nesne üretilebilmektedir.
Projede 3d yazıcılardan biri kullanılarak 2 parçalı bir kutu oluşturulmuştur.
Projede 3d modelin üretilmesi ve üretilen modelin 3d yazıcıda basılması anlatılmayacak. Onun yerine üretilmiş olan parçanın kullanımı ve 3d çizim dosyaları paylaşılacaktır. (stl dosyası olarak)
Kutunun 3d modelin üretilmesinde (çiziminde) Tinkercad ismi ile anılan, web sitesi üzerinde çalışan bir uygulama kullanılmıştır. Çizimden elde edile 3d model dosyası bilgisayara indirilmiştir.
Şekil-5:İki parçalı kutunun dış görünümü.
Kutu devrenin testi için gerekli olmasa da sadece bir seçenektir. Yine de devreyi kutuya koymanın elbette olumlu yanları var.
Şema
Proje de Arduino bölümünü ayrı tutarsak, geriye sadece ENC28J60 ve birkaç tane ayrık eleman ilavesi ile devreyi oluşturuyor. Devre birçok elemanı SMD olacak şekilde tasarlandı ki, Arduino üzerinde kullanılabilecek bir modül olsun. Çünkü PCB üretiminde, kendi imkanlarımızla yapılabilecek bir yapıda olması açısından tek yüzlü karta montaj uygun görüldü.Kısaca devre üzerinden geçecek olursak; R4,R4,R5,R6 dirençleri (49.9 Ohm %1) hat uygunlaştırma dirençleridir.).R1, R2 220R dirençleri RJ45 konnektörü üzerindeki dirençlere akım sınırlama elemanı olarak iş görür. R3 (2K) direnci ENC28J60 için R bias olarak çalışır. R16 (22k) ENC28J60 RESET bacağı için pull_up direnci olarak çalışacaktır. Aynı zamanda devre ilk açıldığında resetleme işlemi için RC zaman sabiti olarak işlev görür. R15 (10k) direnci INT bacağına pull-up direnci olarak iş görür, çünkü ENC28J60 herhangi bir durum, örneğin başlama gibi durumlarda cevap vermemesi halinde işlemcinin kesmeye gitmemesi için int çıkışı garantiye alınmış olur. Burada PCB çiziminde yer almayan ama, şemada gösterilen R8..R13 (1K) direnç devrede test amacı ile devreye eklenmiştir. Şemada gösterilmeyip de, PCB üzerinde gösterilen R14 (0R) jumper olarak devreye monte edilmiştir.
C1 (10uF) kondansatörü ENC28J60 iç beslemesi için gerilim regülatörü filtre kondansatörüdür. Bu regülatör 3.3Voltdan 2.5Volt üretir. C3 (100uF) ve C14 (100nF) kondansatörler U2 (LM1117) giriş filtereleridir. C2 (10uF) ve C13 (100nF) kondansatörleri U2 (LM1117) çıkış filtreleridir. C11 ve C12 (18pF) kondansatörleri ENC28J60 entegresinin osilatör destek kondansatörleridir. Diğer tüm kondansatörler filtre amaçlı devre üzerinde bulunmaktadır.
U2 (LM1117-3V3) gerilim regülatörüdür ve 5Voltdan devre için gereken 3.3V beslemeyi üretir. U3 (74HC125) Arduino ile ENC28J60 arasındaki gerilim seviyesini uygulaştırma amacı ile kullanılmaktadır. U1 (ENC28J60) bu projenin üzerine kurulu olan elemandır ki, ethernet haberleşmesi ile ilgili tüm işlemleri ve Arduino ile ilgili ileştimi yürütür. Arduino ile ethernet hattı arasında köprü görevini yerine getirir.
TR1 (HR911105A) ENC28J60 ile ethernet hattı arasındaki bağlantı ve elektriksel yalıtımı yerine getirir. BB (ferrit beat) ethernet veya HR911105A üzerinden gelebilecek yüksek frekanslı sinyallerin beslemeye ulaşmasını engeller. LED1..LED6 bu devreye test amacı ile monte edilmiş elemanlardır.
Buraya kadar her şey PCB üzerindeki bağlantıla ile sağlandı LCD ise 4 adet kablo +5V, GND SCL ve SDA ENC28J60 modül üzerindeki bağlantı noktalarına bağlanması gerekmektedir. (PCB'yi yeniden çizecek olanlar LCD için ENC28J60 modülü üzerine bir bağlantı konnektörü ekleyebilir.)
Devre üzerinde M1 olarak gösterilen veya PCB üzerinde J1...J4 olarak gösterilen (sıra pinler) Arduino UNO veya benzeri özellikle SPI hatları sıra pinler üzerinde yer alan Arduino modellerinin kullanımına uygundur.
Y1 (25MHz) kristal devrenin çalışması için gereken frekansı üretir.
Montaj
Öncelikle pcb tek yüzlü olarak verilse de isteyen gerekli değişiklikleri yaparak çift yüzlü bastırabilir. Bu şekilde köprüleme elemanlarından kurtulmak mümkündür.
Resim 10: PCB'nin alt yüzdeki elemanlar. (üst yüzden bakıldığında görüldüğü şekildedir.)
Devre montajına öncelikle dip elemanların montajı ile başlanır, U1 istenirse entegre soketi kullanılmadan entegreler doğrudan PCB üzerine monte edilebilirse de, eğer entegre soketi kullanımı, yanan elemanların değiştirilmesi gibi birçok sorundan kurtaracaktır. Montajı sonuna sıra pin ve HR911105A montajının bırakılması iyi olur. SMD elemanlar malzeme listesinde 805 olarak belirtilse de, SMD eleman çizimleri 1206 kılıf monte edilebilecek şekilde yapılmıştır.
Devre montajında tek yüzlü tasarım nedeniyle, çizimde oluşturulmuş tel köprüler unutulmamalıdır. Ne yazık ki, sıra pinler PCB'nin bakır yollarının bulunduğu yüze monte edilmelidir.
Ek PCB olarak fazla bir çizim yok, sadece 6 adet LED için 6 adet bacak (anot) ve bir tane ortak bacak (ortak katot) bağlantısı yeterlidir.
Malzeme Listesi
LM1117-3V3 TO220 | U2 |
74HC125 SOIC | U3 |
ENC28J60 dip28 | U1 |
50R 1/4W dip | R4,R5,R6,R7 |
220R 1/4W dip | R1,R2 |
2K 1/4W dip | R3 |
22k 805 kılıf | R16 |
10k 805 kılıf | R15 |
0R 805 kılıf | R14 |
1K 805 kılıf | R8..R13 |
100nF 1206 kılıf | C4,...C10,C13,C14 |
18p 1206 kılıf | C11,C12 |
10uF/25V | C1,C2 |
100uF/16V | C3 |
LED | LED1...LED6 |
HR911105A | TR1 |
1 adet 40'lı erkek sıra pin | J1..J4 |
İstenirse, e ENC28J60 (28'li dar) için entegre soketi kullanılabilir. Raduino ve ethernet bağlantısı için ethernet kablosu unutulmamalıdır. Raduino için gerekli olan USB kablosunu söylenmesine bile gerek yok.
ENC28J60 projenin çalıştırılması
Besleme Raduino USB portuna bağlı USB kablosu üzerinden 5V olarak sağlanacaktır. İsteyen harici bir güç kaynağı veya taşınabilir cep telefon şarj aletlerini kullanabilir.- LCD ekranı kutu içinde kendine ayrılan bölüme tak
- Raduino üzerine ENC28J60 modülünü pinlerin tümünün birbirine girmesine dikkat ederek, takın
- Birleşik ENC28J60 modülünü ve Raduino modülünü kutuya yerleştir.
- Kutunun üst parçasını yerleştir.
- USB kablosunu Raduino USB girişine takın. (Kare şeklindeki giriş)
- Ethernet kablosunun ENC28J60 modülünü üzerindeki RJ45 girişine takın.
- USB kablosunun diğer ucunu güç kaynağına takın.
- Son olarak ENC28J60 modülündeki RJ45 konnektörüne takılan ethernet kablosunun diğer ucunu modeme takın.
- Her şey tamam ise kutunun kenarındaki LCD ekran üzerinde ip değer görülecektir.
Resim 19: Cihazın montaj aşamaları
Resim 21: Cihazın montaj aşamaları.
İnternetten bağlantısı verilen programı indirin, Arduino IDE uygulamasına yükleyin açın ve Raduino üzerine yükleyin. (ip numarasını kendi ethernet sistemine uygun olduğundan emin olun.)
Her şey tamam ise, Raduino+ENC28J60 modülü çalışmaya başlayacak ve ethernete bağlanacaktır. Bunu modem üzerinden ve ENC28J60 modülü üzerinde yer alan RJ45 konnektörü üzerindeki LED'lerden izlenebilir.
Konu ile ilgili ayrıntılı bilgilerin "ENC28J60 ve Arduino ile Cep Telefonu haberleşmesi" projesinden ulaşabilirsiniz.
Cep Telefonu programı (Android)
Android Cep telefonu (veya tablet) programı "App inventor" ile yazıldı.(veya kodlandı)App inventor sitesine üye olup, kendi uygulamanıza geliştirebilirsiniz. Oluşturduğunuz uygulamanızdan başka bir şeyi bilgisayarınıza bir şey indirmeniz gerekmez. Sadece internet bağlantısı gereklidir. Derlenen uygulama ister bilgisayara, isterse cep telefonunuza indirilebilir. Konu ile ilgili bilgiler kendi sitesinde yer almaktadır.
ip değiştirme için geliştirilen uygulama "ENC28J60 ve Arduino ile Cep Telefonu haberleşmesi" uygulamasına entegre edilmemiştir. (cep telefonu uygulamasına) Sadece Raduino üzerine yazılan kodlamaya entegre edilmiştir. Çünkü cep telefonu uygulamasında sürekli ip değişimi yapılmaz. Tabii daha komplike bir uygulama daha fazla hafıza işgal eder.
Bu noktada girilen yeni ip değeri sadece en sağdaki hanede değişiklik yapılması yerinde olacaktır. Modem (router) ip numarası değiştirilmek istenmiyorsa tabii.
"GÖNDER" butonuna basıldıktan sonra Raduino yeniden başlar ve cihaz yeni ip değerini alır. "ENC28J60 ile Cep" uygulamasını kullanarak yeni ip üzerinden LED yak/söndür işlemleri test edilebilir. Yeni ip ENC28J60+Raduino (Atmega2560) üzerine kaydedilir ve enerji kesilse bile, tekrar besleme verildiğinde kayıtlı ip üzerinden bağlantı kurmaya çalışacaktır.
Şekil-25:LCD ekran üzerinde görülen IP değeri. Bu son noktadan sonrası değiştirilmiş bir değerdir. Kayıtlı değeri: "192.168.0.55" dir.
ip konusunda proje anlatılanları kafanızda bir yere oturtulamıyorsa, internet üzerinde ethernet ve ip bağlantısı konusunda araştırma yapmanız gerekebilir.IP Değiştirme programı
Android App uygulaması daha önce de belirtildiği gibi App inventor üzerinde geliştirildi.Şekil-26:android uygulamasında kullanılan öğelerin isimleri.
Uygulamada değiştirilecek ip'nin girildiği bölüm, programı basit tutmak için 4 bölümü ayrı girilecek şekilde (her biri 0-255) bölündü. Bu giriş kutucukları "IP1", "IP2", "IP3", "IP4" olarak isimlendirildi.
Diğer bir öğemiz bilginin gönderildiği cihazın IP değeridir ki, "ip_no" olarak isimlendirildi. Buraya ip değeri noktaları da girilmesi gerekir.
Girilen cihaz ip değerini kaydetmek için bir buton bulunmaktadır."But_kaydet" olark isimlendirilmiştir.
Son olarak değiştirilmek istenen ip değerinin gönderildiği buton vardır ki, bu "gonder_but" olarak adlandırılmıştır.
Şekil-27:Android App için kodlama.
Sonuç
Proje için gerekli belgeleri buradan indirebilirsiniz.Yazılım açısından üzerinde harcanacak zamana bağlıdır.