Merhabalar. Bu projede RF haberleşme modülü
kullanarak PIC16f628A mikrodenetleyicisi ile DC motor kontrolü anlatılmıştır.
İki buton yardımıyla motor sadece sağa ve sola dönderilmektedir. Siz, bu
devreyi isteğinize göre geliştirebilirsiniz. Örneğin hız ayarı yapabilir veya
stop butonu koyarak motoru istediğiniz zaman durdurabilirsiniz.
Çok çeşitli haberleşme teknikleri vardır.
Kablosuz olarak veri aktarımı yapmak için bu projede teknik olarak RF haberleşme
kullanılmıştır. RF haberleşme, Radyo Frekansı üzerinden bir alıcı ve bir verici
cihaz arasında veri iletimine verilen isimdir.
“ Radyo dalgaları ya da radyo sinyalleri 3 KHz ile 3000 GHz arasında oldukça geniş bir frekans aralığını kapsar. Bu aralıkta VLF, LF, MF, HF, VHF, UHF şeklinde belirli bantlara ayrılmıştır. Aşağıdaki şekilde radyo dalgalarının elektromanyetik spektrum üzerindeki frekans dağılımı ve isimlendirilmiş bant aralıkları gösterilmiştir. Haberleşme uygulamalarında bu bantların sadece belirli bölümleri kullanılmaktadır. Bunlardan ISM (Industrial Scientific Medical band) bandı birçok ülkede telsiz iletişimi için sertifika veya lisansa gerek olmadan belirli bir çıkış gücü sınırlamasına uyarak, üzerinden yayın yapılabilen bir banttır. Ülkemizde ISM bandının yaygın olarak kullanılan frekansları, 315 MHz, 418 MHz, 433,92 MHz, 868 MHz, 915 MHz, ve 2.4 GHz frekanslarıdır.”[1]
· Very Low
Frequency (VLF)
· Low Frequency
(LF)
· Medium Frequency
(MF)
· High Frequency
(HF)
· Very High
Frequency (VHF)
· Ultra High
Frequency (UHF)
· Super High
Frequency (SHF)
· Extremely
High Frequency (EHF)
Haberleşmede
en önemli problem verinin sağlıklı, hızlı ve ulaşabileceği en uzak noktaya
iletilmesi problemidir. Bu problemi çözmek için modülasyon dediğimiz tekniğe
başvuruyoruz. Modülasyon, iletmek istediğimiz düşük frekanslı bilgi işaretinin
yüksek frekanslı taşıyıcı işarete bindirilerek istenilen uzaklığa taşınması
olayıdır. Modülasyonun da kendi arasında türleri vardır.
-Mesaj işareti ve Modüle edilmiş işaretler-
Modülasyon sonucundaki
modüleli işaret istenilen yere ulaştığında burada bulunan demodülatör sayesinde
taşıyıcı sinyal ile bilgi sinyali ayrıştırılarak bilgi sinyali elde edilmiş
olur. Demodülatör kısmında alçak geçiren veya band geçiren filtre
bulunmaktadır.
RF ALICI |
RF VERİCİ |
Öncelikle haberleşmenin sağlıklı bir şekilde
yapılabilmesi için verici modül tarafından “Preamble” mesajının gönderilmesi
gerekmektedir. Bu işlem, alıcı modülün uyandırılması şeklinde tabir edilebilir
ve alıcı modülün, göndermiş olduğumuz verileri düzgün bir şekilde alabilmesi
için şarttır. Sonra senkron ve ardından data bitleri yollanır. Bu projede
preamble mesajı 0x55 (0101 0101) olarak ayarlanmıştır. Siz, 0xAA (1010 1010)
olarak veya daha farklı şekilde ayarlayabilirsiniz.
Anten Boyu Hesabı:
Devre Şeması |
Malzemeler:
1
adet RF alıcı-verici modül
1
adet L293D motor sürücü entegresi
2
adet pic 16f628A
2
adet 10 K direnç
2
adet buton
1
adet DC motor
2
adet 7805 regülatör
Program CCS C Kodu:
VERİCİ:
#include
<16f628A.h>
#fuses
INTRC_IO,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOCPD
#use delay
(clock=4000000)
#use rs232
(baud=9600, xmit=PIN_B2, rcv=PIN_B1)
void
preamble(){ // (Preamble: donanım senkronizasyonunu sağlamak için.)
putc(0x55);
putc(0x00);
putc(0xff);
return;
}
void main(){
setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı
setup_timer_2(T2_DISABLED,0,1); // T2
zamanlayıcısı devre dışı
setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı
set_tris_a(0xFF); // A portu komple giriş
set_tris_b(0x00); // B portu komple çıkış
output_b(0x00); // B portu temizlendi
while(1)
{
preamble();
if(!input(pin_a0)) // A0 pini 0 volt ise A bilgisini yolla
{
putc('A');
}
if(!input(pin_a1)) // A1 pini 0 volt ise B
bilgisini yolla
{
putc('B');
}
}
}
ALICI:
#include
<16f628A.h>
#fuses
INTRC_IO,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOCPD
#use
delay(clock=4000000)
#use
rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1)
char a;
void main(){
setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı
setup_timer_2(T2_DISABLED,0,1); // T2
zamanlayıcısı devre dışı
setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı
set_tris_b(0xFF); // B portu komple giriş
set_tris_a(0x00); // A portu komple çıkış
output_a(0x00); // A portu temizlendi
while(1){
a=getc(); // Gelen bilgiyi a değişkenine
ata
if(a=='A') // A bilgisi geldi ise motor
sağa dönsün
{
output_high(pin_A0);
output_low(pin_A1);
}
if(a=='B') // B bilgisi geldi ise motor sola
dönsün
{
output_low(pin_A0);
output_high(pin_A1);
}
}
}
Kaynaklar
1-
Odtü Robot Topluluğu
sitesi :http://www.robot.metu.edu.tr
paylaşım için teşekkürler
YanıtlaSilMerhabalar
YanıtlaSilYazmış olduğunuz yazılımı 16f946 için denedim ancak çalışmıyor.
Merhaba ben daha önceleri udea firmasının modülleri ile çalışmıştım. Fakat hız problemi yaşamıştım. 300bps i geçince mesafe çok kısalıyordu. Bu modülleri altın dedektörü sisteminde kullandık. Fakat mesafe sorunlarımız var.
YanıtlaSil