RF SMS Uygulaması
Bu proje çalışmamızın adı RF-SMS. Nedir bu RF-SMS? Şöyle açıklayayım:
RF radyo sinyalleri kullanarak karşı tarafa kablosuz olarak kısa mesaj şeklinde veri göndermek.
Peki nasıl yapıyoruz? Anlatayım...
RF Modüller
Projede tek taraflı olarak veri transferi gerçekleştirdiğin için
birer tane RF verici ve RF alıcı kullandım. Bunlar 433MHz RF verici ve alıcılar. Hem boyut olarak
küçük hem de çok pahalı olmayan parçalar. Piyasada farklı firmaların ürünlerini bulabilirsiniz. Fakat
ben UDEA ELECTRONICS firmasından almıştım. Tavsiye ederim. Oldukça ucuz. Modulleri kullanmak da gözünüzü
korkutmasın. Çok basit. Zaten vericide ve alıcıda 5'er pin var. Vcc, Gnd, data giriş-çıkış ve anten pinleri.
Uygulamada dikkat etmeniz gereken bir durum ise bu Vcc ve Gnd değerlerini yanlış veya ters vermemek.
Modullerin datasheetlerinde de belitildiği gibi voltaj değeri 0.1V üzerinde değişimlerde kararsız ve
hatalı çalışma durumları oluşabilir. Fazla vermeniz ise modullere zarar verebilir. Peki bu modullerle
ne kadar mesafeden veri gönderip alabiliriz? Yaklaşık 50 mt. (100 mt diyenler de var ama ben denemedim)
Yani basit uygulamalarda kullanılacak ürünler. Eğr adını verdiğim firmadan alırsanız firmanın müşteri
ilişkileri çok iyi, ister ürün almış olun ya da olmayın her zaman sorularınıza cevap alabiliyorsunuz.
Ayrıca yine web sitelerinde faydalı uyulamalar var. Hatta burada yapacağımız uygulamanın sadece karşı
taraf için C dilinde yazılmış programını da bulabilirsiniz.

Alıcı

Verici
Verici Tarafı

Verici devresi yukarıdaki gibi. Malzemeler; 1* dişi seri port (90°) ,
1* MAX232, 4* 22uF kapasitör, 1* 1k direnç, 1* led, 1* adaptör girişi, RF verici ve ister UDEA'dan
alabileceğiniz UHF anten ya da basit yaklaşık 17.5 cm tel. (çok kısa mesafe için antene bile gerek yok!)
Bu devre ne işe yarıyor? Öncelikle ben verileri bilgisayar yazılımı kullanarak gönderiyorum. Bunun için
Visual Basic'de ufak bir program yazdım. Ama siz bu uygulamayı değiştirip bilgisayar yerine klavyesi olan
bir PIC devresi ile de yapabilirsiniz. Neyse... Bilgisayar yazılımından sonra bahsedeceğiz. Ama kısaca şöyle;
Girdiğimiz yazı şeklindeki veriyi karakterlere ayırıp teker teker seri olarak bu devreye gönderiyor. Veriler
MAX232 entegresinden geçip RF vericiden seri olarak 433MHz'de yayınlanıyor. Devre enerjisini gördüğünüz gibi
dışardan alıyor. Peki niye REMOTE PC uygulamasında olduğu gibi direkt seri porttan almadık? Belki yapılabilir. S
eri porttan enerji almanın değişik yolları var ama oradaki uygulamada elde ettiğimiz voltaj tam 5V değil, sadece
PIC'i çalıştırmaya yetecek seviyede. Ama burada bize kararlı 5V lazım. Onun için dışardan pil, adaptör vaya direkt
PC güç kaynağından almak mümkün. Devrede Max232 entegresinin Vcc ve Gnd bacakları gözükmüyor diye bağlamamazlık
yapmayın :).
Alıcı Tarafı

Alıcı devremizde bu. Üzerinde SV1 ile gösterilen eleman RF alıcı modülü,
SL1 LCD ekran, S1 gelen mesajları okumak için kullanacağımız buton, diğer 2 buton ise şimdilik işe yaramayan
ama ileride mesajdaki karakter sayısını 16*2 bir LCD ekranın karakter sayısı olan 32'nin üzerine çıkarmak
istersek cep telefonunda olduğu gibi aşağı yukarı kaydırmak için kullanabiliriz. Peki bu devre ne yapıyor?...
hemen açıklayayım....... PIC için PICBasic Pro dilini kullanarak yazmış olduğum program sayesinde RF olarak
gelen sinyalleri kontrol ediyorum. Verici kısmın bilgisayar yazılımında anlatacağım üzere göndermek istediğim
verinin önüne bir senkronizasyon datası yerleştiriyorum. Bu datayı değiştirmek mümkün. Ben "QQQQ----" şeklinde
ayarladım. Devredeki PIC gelen sinyallerin içinde "QQQQ----" ifadesini yakalamaya çalışıyor. Eğer yakalarsa
bu datanın arkasından gelen verileri ". " (sonlandırma ifadesi) gelene kadar seri olarak aldığı verileri sırayla
bir dizi içine kaydediyor. Eğer senkronizasyon verisi yarım kalırsa ya da bir takım nedenlerden ötürü yanlış
gelirse tekrar başa dönüp baştan taramaya başlıyor ki sonra gelen veriyi düzgün alabilsin. Veri düzgün alınmışsa
LCD ekrana "MESAJ GELDİ, Oku" şeklinde mesaj yazdırıyor ve sizden mesajı okumak için butona basmanızı bekliyor.
Basıp okuduktan sonra yeni mesaj beklemeye başlıyor.
Bu devre enerji için dışa bağımlı yani beslemesini adaptörden ya da pilden (ki bu daha mantıklı) yapılmalı.
Bu devre enerji için dışa bağımlı yani beslemesini adaptörden ya da pilden (ki bu daha mantıklı) yapılmalı.
PIC Programı
lInclude "Modedefs.Bas" 'seri iletişim için gerekli
DEFINE LCD_EREG PORTB 'lcd enable biti b.3
DEFINE LCD_EBIT 3
DEFINE LCD_DREG PORTA 'lcd data bitleri a.0, a.1, a.2, a.3
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB 'lcd rs biti b.4
DEFINE LCD_RSBIT 4
TRISA=%00000000 'tirsA
PORTA=0
TRISB=%00100100 'trisB: b.2 ve b.5 giriş, diğerleri çıkış
PORTB=0
gelen var byte[32] 'gelen dizisi için 32 yer ayır
'CHR VAR BYTE '
i var byte 'for döngüleri için değişken
LCDOUT $FE ,1 ,"RF-SMS PROGRAMI" 'lcd 1. satıra RF-SMS PROGRAMI yaz
LCDOUT $FE ,$C0 ,"SADAN DONMEZ" 'lcd 2. satıra SADAN DONMEZ yaz
PAUSE 500 '500ms bekle
LCDOUT $FE ,1 'ekranı temizle
ANADONGU:
SERIN2 PORTb.2, 3313, [wait ("Q","Q","Q","Q",45,45,45,45), str gelen\32\"."]
'portb.2 den 300 baudrate ile önce QQQQ---- ifadesini bekler
'bu ifade gelmişse arkadan gelen karakterleri sırayla gelen dizisinin içine yazar
'. karakteri gelince okuma biter
SOUND PORTB.1,[119,30,0,13,119,30] 'portb.1'deki buzzerdan biiip-biipppp sesi çıkar
LCDOUT $FE ,1 ,"MESAJ GELDI" 'lcd'ye MESAJ GELDI yazdır
LCDOUT $FE ,$C0 ,"Oku" 'lcd 2. satıra Oku yazdır
PAUSE 500 '500 ms bekle
buton: 'bekle rutini
if portb.5=1 then buton 'portb.5 deki okuma butonuna basılıncaya kadar bekle
LCDOUT $FE ,1 'lcd ekranı temizle
for i=0 to 31 'sırayla
LCDOUT gelen[i] 'gelen dizisindeki verileri yaz
if i=15 then 'indis 15 olduysa
LCDOUT $FE ,$C0 'lcd'de 2. satıra geç
endif
NEXT i
GOTO ANADONGU 'tekrar başa dön
END
DEFINE LCD_EREG PORTB 'lcd enable biti b.3
DEFINE LCD_EBIT 3
DEFINE LCD_DREG PORTA 'lcd data bitleri a.0, a.1, a.2, a.3
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB 'lcd rs biti b.4
DEFINE LCD_RSBIT 4
TRISA=%00000000 'tirsA
PORTA=0
TRISB=%00100100 'trisB: b.2 ve b.5 giriş, diğerleri çıkış
PORTB=0
gelen var byte[32] 'gelen dizisi için 32 yer ayır
'CHR VAR BYTE '
i var byte 'for döngüleri için değişken
LCDOUT $FE ,1 ,"RF-SMS PROGRAMI" 'lcd 1. satıra RF-SMS PROGRAMI yaz
LCDOUT $FE ,$C0 ,"SADAN DONMEZ" 'lcd 2. satıra SADAN DONMEZ yaz
PAUSE 500 '500ms bekle
LCDOUT $FE ,1 'ekranı temizle
ANADONGU:
SERIN2 PORTb.2, 3313, [wait ("Q","Q","Q","Q",45,45,45,45), str gelen\32\"."]
'portb.2 den 300 baudrate ile önce QQQQ---- ifadesini bekler
'bu ifade gelmişse arkadan gelen karakterleri sırayla gelen dizisinin içine yazar
'. karakteri gelince okuma biter
SOUND PORTB.1,[119,30,0,13,119,30] 'portb.1'deki buzzerdan biiip-biipppp sesi çıkar
LCDOUT $FE ,1 ,"MESAJ GELDI" 'lcd'ye MESAJ GELDI yazdır
LCDOUT $FE ,$C0 ,"Oku" 'lcd 2. satıra Oku yazdır
PAUSE 500 '500 ms bekle
buton: 'bekle rutini
if portb.5=1 then buton 'portb.5 deki okuma butonuna basılıncaya kadar bekle
LCDOUT $FE ,1 'lcd ekranı temizle
for i=0 to 31 'sırayla
LCDOUT gelen[i] 'gelen dizisindeki verileri yaz
if i=15 then 'indis 15 olduysa
LCDOUT $FE ,$C0 'lcd'de 2. satıra geç
endif
NEXT i
GOTO ANADONGU 'tekrar başa dön
END
Bilgisayar yazılımı
Projenin bilgisayar tarafındaki programı Visual Basic Programlama dilini kullanarak
oluşturdum. Program oldukça basit. Sadece göndermek istediğiniz veriyi yazıyorsunuz ve gönder butonuna basıyorsunuz.
İşte bu kadar...Program şu anda 32 karaktere izin veriyor. Bunun nedeni ise şu; LCD'de 32 karakter var...
Dediğim gibi devreye koyduğum extra 2 buton ile programı değiştirip bu butonlarla yukarı aşağı yazıları
kaydırarak daha çok karaktere izin verilebilir. Ama ben yapmadım. Bir de şu var: Bilgisayar istediğiniz
kadar karaktere izin veriri ama PIC'in hafızası sınırlı olduğu için bizi bir de bu kısıtlar. Yaptığım denemeye
göre PICBasic Pro dilinde programı yazarsak (ki bu dilde registerlara biz müdahale etmediğimiz için hafıza da
daha çok yer işgel etme durumu oluşuyormuş bu sebeple belki başka bir dil kullanılırsa daha çok karaktere izin
verilebilir!) PIC 16F84 için gelen dizisi 40 elemanlı, bacak bağlantıları tamamen aynı olan PIC 16F628 80 karaktere
izin veriyor. Ama EEPROM bunlara dahil değil. EPPROM'a da bilgi yazılabilir ve sonra kullanılabilir.

Aşağıda projenin board üzerine kurulu halini görüyorsunuz. Baskı devresini
hazırladığımda yayınlarım. Uygulamak isteyenlere her zaman yardımcı olabilirim.

