Merhaba arkadaşlar. Arduino projelerinde kullanılan kablosuz iletişim seçeneklerinden biri olan Radyo Frekansları ile haberleşme sisteminde kullanılan basit ve ucuz araçlardan biri olan 433Mhz’lik alıcı verici modülünün kullanımından bahsedeceğim bu yazımda. Ürünü buradan temin edebileceğiniz gibi daha ucuz ve ücretsiz kargo seçenekleriyle Çin'den de sipariş edebilirsiniz.
Konumuza dönecek olursak bu yazıda bu modülün arduino ile kullanımı ve haberleşme konusunda verilerin hangi türde nasıl gönderildikleri ile ilgili bilgiler de yazımızda yer alacak.
Arduino ile modül arasındaki bağlantı örneği aşağıda verilmiştir. Alıcı-Verici devrelerinin data pinlerinin yerleri kullanıcının isteğine bağlı olarak değiştirilebilir.
Konumuza dönecek olursak bu yazıda bu modülün arduino ile kullanımı ve haberleşme konusunda verilerin hangi türde nasıl gönderildikleri ile ilgili bilgiler de yazımızda yer alacak.
Arduino ile modül arasındaki bağlantı örneği aşağıda verilmiştir. Alıcı-Verici devrelerinin data pinlerinin yerleri kullanıcının isteğine bağlı olarak değiştirilebilir.
Alıcı-Verici modülü hakkında genel donanımsal özellikler ise şu şekildedir;
Alıcı - Transmitter :
Çalışma Voltajı: 3V - 12V max
Çalışma Voltajı: 40mA max , min 9mA
Rezonans Modu: (SAW)
Modulasyon Modu: ASK
Çalışma Frekansı: 315MHz ya da433MHz
Transmission power: 25mW (315MHz 12V'da)
Frekans hatası: +150kHz (max)
Hızı: 10Kbps'den az
Modül açık alanda 90m mesefede haberleşme sağlayabiliyor.
Verici - Receiver :
Çalışma Voltajı: 5.0VDC +0.5V
Çalışma Akımı: ≤ 5.5mA max
Çalışma Yöntemi: OOK/ASK
Çalışma Frekansı: 315MHz - 433.92MHz
Band Genişliği: 2MHz
Hassasiyet: excel –100dBm (50Ω)
Okuma hızı: -<9.6Kbps (at 315MHz and -95dBm)-
Anten bağlantısı kablosusz bağlantı verimi artıracaktır.
Bu modül için hazırlanmış olan VirtualWire Kütüphanesini buradan indirebilirsiniz. Modülün Arduino yazılımı şekilde örneklendirilebilir.
Verici-Transmitter kısmında kullanılan arduino kodları şu şekildedir.
//Arduino Verici-Transmitter kodları
#include <VirtualWire.h> // İlgili Arduino kütüphanesi
char*mesaj; // Gönderilecek mesajın yazıldığı değişken
void setup()
{
vw_set_ptt_inverted(true);
vw_set_tx_pin(12); // Verici modülün data pin bağlantısı
vw_setup(4000);
}
void loop()
{
mesaj="Hello World !" ;
vw_send((uint8_t *)mesaj, strlen(mesaj));
vw_wait_tx();
delay(5000);
}
Yukarıda verici sistemde yer alan arduino kodlarında mesaj char değişkeni üzerine yazılan Hello World ! mesajı beş saniyelik periyotla ile gönderilmektedir. Modül bu mesajı baştan sona her bir karakterini teker teker gönderir ve alıcı sistem de mesajı bu şekilde alır. Gelin şimdi alıcı sistem için gerekli kodları inceleyelim.
Alıcı - Receiver kısmında kullanılan arduino kodları şu şekildedir.
//Arduino Alıcı-Receiver Kodları
#include <VirtualWire.h> // İlgili Arduino Kütüphanesi
char*mesaj; // Alınan mesajın yazıldığı değişken
void setup()
{
Serial.begin(9600);
vw_set_ptt_inverted(true);
vw_set_rx_pin(12);
vw_setup(4000);
vw_rx_start();
}
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if(vw_get_message(buf, &buflen))
{
for(int i=0;i<buflen;i++)
{
Serial.print(char(buf[i]));
}
}
}
Yukarıdaki kodda ise; gelen verinin her bir karekteri/elemanı buf[] adlı diziye yazılır. Buf dizisinin eleman sayısı olan buflen gönderilen verinin toplam karakter sayısı kadardır.Gönderdiğimiz “Hello World !” mesajında boşluklar da dahil 13 tane karakter bulunur. Ve buf[0]’dan buf[12]’ye kadar toplam 13 elemanlı dizi oluşur. Gönderilen mesajın baştan sona her bir karakteri bu dizinin elemanlarına yazılır. Biz bu mesajı Serial monitör üzerinde görüntülemek için birçok yöntem kullanabiliriz. Yukarıdaki kodda olduğu gibi yalnızca Serial monitöre yazma işlemi için gelen mesajın her bir karakterinin sırasıyla yan yana print edilerek yazıldığı bir döngü kullanılabilir. Nitekim yukarıdaki kodda gelen mesajın toplam karakter sayısına göre sonlanacak olan bir for döngüsü oluşturulmuştur. Bu döngünün her adımında ise gelen mesajın bir karakteri ekrana yazılmıştır. Bu işlem çok hızlı gerçekleştiği için biz bunu sanki mesaj direk ekrana yazılmış gibi görebiliriz. Ama böyle olmayacaktır. İsterseniz Serial.print komutundan sonra 1 saniyelik bekleme kodu koyarak bu işlemi gözlemleyebilirsiniz. Bu işlem bize sadece gelen veriyi görüntülemekte yardımcı olur.
Peki ! Eğer gelen veri bir komut sisteminde kullanılacak ya da gelen mesaj bir if/else yapısında bir kontrol işlemine sokulacaksa ne yapmamız gerekir. Bu durumda gelen mesajı komut amaçlı kullanacağımız başka bir değişken üzerinde birleştirir ve tek bir karaktere dönüştürmüş oluruz. Bunu da şu şekilde yapalım. Farz edelim ki; verici sistemden alıcı sisteme bir ledi yakmak için LedON komutu gönderilsin. Alıcı sistem de bu komutu aldığında ilgili ledi yaksın yada bir motoru çalıştırsın. Örnekler çoğaltılabilir. İlk Verici kodunu LedON mesajı gönderecek ve bu işlemi sadece bir kez yapacak şekilde değiştirelim. Aşağıdaki gibi...
Verici Sistem LedON komutu gönderen Arduino kodu
#include <VirtualWire.h> // İlgili Arduino Kütüphanesi
char*mesaj; // Alınan mesajın yazıldığı değişken
void setup()
{
Serial.begin(9600);
vw_set_ptt_inverted(true);
vw_set_rx_pin(12);
vw_setup(4000);
vw_rx_start();
mesaj="LedON";
vw_send((uint8_t *)mesaj, strlen(mesaj));
vw_wait_tx();
}
void loop()
{
//Burada bir döngü oluşturmadan setup kısmında bir kez mesaj gönderilir
}
Alıcı Sistem LedON Komutu Yorumlayan Arduino Kodu
#include <VirtualWire.h>
int i=0;
String mesaj; // Vericiden gelen verinin tamamının aktarıldığı değişken
String s; //Dönüşüm işlemi için gerekli ara değişkenler
char c;
void setup()
{
Serial.begin(9600);
vw_set_ptt_inverted(true);
vw_set_rx_pin(12);
vw_setup(4000);
pinMode(13, OUTPUT);
vw_rx_start();
}
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if(vw_get_message(buf, &buflen))
{
for(i;i<buflen;i++) // buflengelen verinin oluşturduğu buf[] disinin eleman sayısı
{
c=char(buf[i]); //
s=String(c); // Vericiden gelen veriyi bütün bir komuta dönüştürme işlemi
mesaj+= s; //
}
Serial.println(mesaj);
}
if(mesaj == "LedON")
{
digitalWrite(13,HIGH);
}
}
Yukarıdaki kodda verici üzerinden karakterler halinde gönderilen bir komutun karakterlerinin birleştirilip bütün bir komut haline dönüştürülmesi işlemi yapılmıştır. İlk örnekte gönderilen mesaj için elimizde bir dizi halinde sadece mesajların sırasıyla karakterleri bulunmaktaydı ve bu karakterler sırasıyla ayrı ayrı serial monitöre yazılmasıyla gelen mesaj görünür hale getirilmişti. Bu örnekte ise gelen mesajın alıcı sistemde bir eyleme dönüşmesi için birleştirilme işlemi uygulanmıştır. Bu yapabilmek için STRING veri tiplerinin birbiri ile toplanması ya da ilk değere başka bir değer eklenmesi özelliği kullanılarak verici sistem üzerinden gelen karakterler bir bütün haline getirilir. Bu işlemde önce gelen mesajın/komutun karakterlerinden oluşan buf[] dizisinin her terimi sırasıyla char veri tipine dönüştürülür. Hemen ardından ilgili karakter char veri tipinden string veri tipine dönüştürülür. Bu string veriler “mesaj” adlı değişkende toplanarak bir bütün haline getirilir. Sonra bu komut herhangi bir koşul operatöründe kullanılabilir. Yukarıda da görüldüğü gibi vericiden gelen LedON komutu alıcı sistem kısmında bir ledi aktif hale getirmişti. Bu başka sistemlerde motor ya da başka bir çevre elemanı olabilir.
Son uygulama örneği ise RF üzerinden integer değer göndererek bir çevre elemanının durumunu anlık olarak değiştirecek bir program olsun. Böyle bir sistemde bir motorun hızını, bir step ya da servo motorun açısını değiştirebilir ve yahut bir lambanın parlaklığını değiştirebilirsiniz. Ya da başka sayısal işlemler için kullanabilirisiniz. GPS bilgileri, sıcaklık değeri vs. vs.. gibi örneklerle çoğaltılabilir..
Aynı verici sistem Arduino kodunda bir değişiklik yapalım daha doğrusu bir mesaj yerine sayı gönderelim. Yeniden yazmıyorum. Yukarıdakilerden birinden değiştirebilirsiniz. Gelen bu sayısal değeri alıp bir sayısal işlemde kullanan bir program da alıcı sistem için yazalım. Burada alınan veri daha önce de bahsettiğimiz gibi sayısal değer gereken tüm uygulamalarda kullanabiliriz.
Bu farklı bit dönüştürücü işlemleri ile de yapılabilir.Bu da farklı bir yöntemdir.
Öncelikle rakamların karakter kodlarını yani ASCIIkodlarını öğrenelim.
i =0 --- 48
i =1 --- 49
i =2 --- 50
i =3 --- 51
i =4 --- 52
i =5 --- 53
i =6 --- 54
i =7 --- 55
i =8 --- 56
i =9 --- 57
Şöyle basite indirgeyecek olursak bizler serialden 0 komutu gönderirken aslında 48 sayısını göndeririz. Diğerleri için de karşılarındaki kodlar geçerlidir. Gönderdiğimiz bu değerler gönderdiğimiz sistemlerde yorumların ve dönüştürülür. İlk örnekteki uygulamanın verici kısmında gönderdiğimiz komut const char olarak 0123456789 olsun. Gönderdiğimiz bu değer alıcı sistemde her bir hanesi/karakteri sırasıyla integer yani tam sayı olarak Serial monitöre yazdırılırsa karşımıza çıkacak olan değer 48495051525354555657 şeklinde olacaktır. Bizler sayısal işlem yapabilmek için bu değerleri uygun dönüşüm ile istediğimiz değerlere çevirmeliyiz. Bunun için yapmamız gereken işlem bir önceki örnekteki mantıkla aynıdır. Aşağıda bunun ile ilgili bir program paylaşıp üzerinden
anlatmaya devam edelim.
#include <VirtualWire.h>
int i=0;
int sub=0;
int sayi[30];// Max 30 elemanlı bir sayı dizisi oluşturalım. Max_Message_Len değerine göre
int aratoplam;
void setup()
{
Serial.begin(9600);
vw_set_ptt_inverted(true);
vw_set_rx_pin(12);
vw_setup(4000);
vw_rx_start();
}
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if(vw_get_message(buf, &buflen))
{
for(i;i<buflen;i++) // buflen gelen verinin oluşturduğu buf[]dizinin eleman sayısı
{
sayi[i]= (int(buf[i])-48);
sub+=(sayi[i])*pow(10,(buflen-(1+i)));
}
aratoplam= 100+sub+1;
Serial.println(aratoplam);
}
}
Bu
örnekte yaptığımız dönüşüm aslında matematikten bildiğimiz taban dönüşümü
işlemidir. Sadece bunu yazmış olduğumuz programa ve gelen veriye göre yeniden
oluşturduk. Biraz vaktimi aldı bu işlem. Sayılar ve değerleri tablosundan
dikkat ederseniz sayılar ve değerleri arasında 48 sayılık bir fark var. Bu
ayrıntıyı kullanarak gelen char verisini integer sayıya dönüştürme işlemi
yapılır. Gelen her bir karakter değeri önce kendi sayı değerine dönüştürülür bu
çıkarma işlemi ile sonra da bir sayı dizisine tam sayı olarak kaydedilir. Sonra
bu tam sayı dizisindeki elemanlar gelen değeri verecek şekilde bir matematiksel
işlemden geçirilir ve sub toplam ifadesine eklenir. Gelen verinin kaç
basamaklı olduğu buflen değişkenine yazıldığı için basamak işlemlerinde bu değer
kullanılır. Lakin en yüksek basamaklı haneyi hesaplarken anlam veremediğim
şekilde sürekli 1 sayı eksik değer veriyor. Bunun için de elde ettiğimiz tam
sayı sub
değerine her zaman +1 ekleyerek işlem yapıyoruz.
Bir
örnek işlem yapacak olursak işlem adımları şu şekilde olur.
Önce
ilk örnekteki verici kodunu düzenleyerek bir sayı değeri gönderelim. Bu işlemi
verici kısmında sürekli ya da sadece bir kez gönderecek şekilde
ayarlayabilirsiniz. Loop kısmındaki kodu setup kısmına yapıştırarak programın
sadece bir kez çalışmasını sağlayabilirsiniz. Örnek olarak 53624 sayısını
gönderelim. Verici sistem bu sayıyı her hanedeki rakamı ASCII kodlarıyla teker
teker gönderir. Bu verileri alan alıcı sistemdeki kodlarda şu işlemler yapılır.
Char
buf[] dizisinin 0’ıncı elemanına 5 karakteri yazılır. Bu karakter için ASCII
kodu tamsayı olarak 53’tür. Yazdığımız kodda bu değer şu şekilde asıl değerine
çevrilir,
sayi[0] = (int(buf[0])-48);
sayi[0] = (int(53)-48);
sayi[0] = (int(53)-48);
sayi[0] = 5;
Ardından
bu sayının ilk hanesini taban işleminden geçirip her bir tabanın toplandığı sub
toplam değerine eklenir.
sub+ = (sayi[i])*pow(10,(buflen-(1+i)));
sub+ = (sayi[0])*pow(10,(buflen-(1+0)));
sub+ = (5)*pow(10,(5-(1+0)));
sub+ = (5)*pow(10,4);
sub+ = 50000;
Olması gereken ama nedense 49999 değerini alıyor sadece en büyük basamak için..
Aynı
işlemler diğer basamaklardaki rakamlar için tekrarlanır ve sub toplam değeri
böylece;
Sub=50000
Sub=53000
Sub=53600
Sub=53620
Sub=53624
Şeklinde
son haline almış olur teorik olarak ama işlemlerde bu değer Sub=53623 olarak
sonuçlanıyor bu yüzden son işlemde sub değerine 1 eklenir.
Gönderdiğimiz
sayı değerini elde ettikten sonra bu değeri gerekli sayısal işlemlerde
kullanabiliriz. Mesela bir servo motora açı değeri göndererek hangi yöne dönmesini
sağlayabiliriz.
RF
433MHZ Alıcı-Verici Modül ile yapmış olduğum uygulamaları sizler için düzenleyip anlatmaya çalıştım. Herkese iyi çalışmalar.
34 yorum
Click here for yorumhocam iyi akşamlar VirtualWire Kütüphanesi ile servo kütüphani birlikte kullanınlınca hata veriyo o sorunu nasıl çözebilriz acaba
Replyburda ki rf kütüphanesi ele servo kütüphanesi birlikte çalışmıyo nasıl düzeltebiliriz onu
ReplySanırım bu işinize yarayacaktır arkadaşlar..
Replyhttp://electronics.stackexchange.com/questions/67967/problems-using-servo-h-and-virtualwire-h-in-arduino
Bununla ben kapı felan gibi şeyleri açma işlemi yapabilir miyim ki?
ReplyEvet. Yapabilirsin. Açma kapama işleri kolay işler. Haberleşme vs kablosuz her işi yapabilirsin. Önemli olan haberleşme hızı ve mesafe..
Reply2 yada daha fazla servo motoru kontrol etmek istersek nasıl yapabiliriz?
Replymrb;
Replyöğrenmeli nasıl bir şey düşünmeliyim acaba?
iyi günler hocam bana tam olarak sıvı seviye rölesinden gelen bilgiyi alıcıdan lc ekrana yansıtmak gerekli bu mümkünmü yardımcı olabilirmisiniz
ReplyElbette mümkün ama bunu bir dizi ekipmanla yapman gerekir. Röleden gelen veriyi bir arduino yada başka bir denetleyici ile yorumlamalı sonra arduino üzerinden RF modül ile göndermeli gönderdiğin veriyi alan başka bir arduino yada denetleyici de bu veriyi alıp LCD ekrana yazmalı.. Daha kısa yöntemleri de olabilir. bazı dönüştürücü entegreler yardımıyla tabi.
ReplyRF konusunda bulabileceğiniz en sade anlatım. Kusursuz çalışıyor, teşekkürler.
Replyanlık görüntü aktarımını bu mödüllerle nasıl yapabilirim yardımcı olursanız çok sevinirim
ReplyMerhabalar, arduinoya yeni başlamış biri olarak sayfanızı yakından takip ediyorum. Takıldığım bir yer var, mesela elimde butona her bastığımda 1 artarak oluşturulmuş integer bir sayı var. Ben bunu RF ile yollamak istesem gitmiyor. Bunu stringe mi çevirmek gerekiyor. Char mı olması lazım?
ReplyTeşekkürler. İyi çalışmalar.
ReplyGörüntü üzerine çok bilgim yok fakat temel mantıkla veri transferi olduğu için yapılabilir fakat 433 mhz lik hız görüntü aktarımı için yeterli olur mu bilmiyorum. Sinyali işlemek için kullanacağın denetleyici de önemli tabi.
ReplyMerhaba arkadaşım. Bunu şu sıralamaya yapmalısın. Buton için bir if koşul yapısı belirleyip içerisinde int sayıyı 1 arttıracaksın tabi sen butona basıp elini çekene kadar birden çok kez saymamalı onun için 50 milisaniyelik bir delay kullan. Sonra o int sayıyı string değere dönüştürerek mesaj değerine kararmalısın yani
Replymesaj = String(Tamsayi);
Kalıbını kullanarak. Sonra normal gönderme işlemine devam et. İyiçalışmalar.
Bahsettiğin şekilde kodları yazdım ama kaç gündür uğraşıyorum bir türlü işin içinden çıkamadım. Email adresin elimde olmadığı için kodu buraya ekliyorum. Sayaç değerini RF ile alıcıya yollayamadım. Mail adresim: sezginardic@hotmail.com
Reply#include
#include
const int CLK = 9; //Set the CLK pin connection to the display
const int DIO = 8; //Set the DIO pin connection to the display
TM1637Display display(CLK, DIO); //set up the 4-Digit Display.
char *mesaj;
const int led_pin = 13;
const int tx_pin = 12;
const int buton = 6; /* Butonun bağlı olduğu pin */
int butonDurumu = 0; /* Butonun durumu */
int sayac = 0; /* butona basılma sayısını tutacak değişken */
void setup()
{
Serial.begin(9600);
pinMode(led_pin, OUTPUT);
pinMode(buton, INPUT);
vw_set_tx_pin(tx_pin);
vw_set_ptt_inverted(true);
vw_setup(4000);
display.setBrightness(0x0a);
}
void loop()
{
butonDurumu = digitalRead(buton);
if(butonDurumu == HIGH) {
sayac ++;
digitalWrite(13,HIGH);
while(butonDurumu == HIGH){
butonDurumu = digitalRead(buton);
}
}else{
digitalWrite(led_pin, LOW);
}
//mesaj="ALİ VELİ"; // Mesela bu şekilde yolluyor
mesaj=char(sayac); // Burada hata veriyor.
vw_send((uint8_t *)mesaj, strlen(mesaj));
vw_wait_tx(); // Bütün mesaj gönderilene kadar bekleyin
Serial.println(sayac);
display.showNumberDec(sayac);
}
mesaj=char(sayac); // Burada hata veriyor.
ReplyBu satırdan önce integer olan sayac değerini String değikene çevirmelisin.. Yani ;
sayac = String(sayac);
Bu şekilde bir dene..
Bahsettiğiniz değişikliği yaptım yine hata verdi. mesaj=String(sayac).c_str(); şöyle birşey denedim bu da mesajı boş gönderdi :(
ReplyMerhaba biraz geç cevap vermek durumunda kaldım kusura bakmayın. Sorununuz düzeldi mi acaba ?
ReplyMerhaba,
ReplyAlıcı üzerindeki paraziti nasıl alabilirim ?
Bu konu hakkında çok bilgim olduğunu söyleyemem fakat 433Mhz çok kaliteli bir frekans değil belki sorun bu olabilir. 2.4 Ghz'lik profesyonel alıcıya ihtiyacınız olabilir. Bunun dışında söyleyecek fikrim yok.Bir Makinacı olarak bende nette öğrendiğim ve geliştirdiğim kadarını paylaşıyorum. Umarım sorunu çözersiniz. Bu sayfayı yöneten arkadaşlarım var elektronik okuyan iletişime geçerseniz belki faydaları dokuna bilir. http://forum.vhdl.club/
Reply433 mhz lık modul ıle led yakıp sondure bılırmıyz 2 tane uno ıle
Replyyenı basladım yukarıda vermıs oldugunuz hello worl ü gönderdım ama led yakıp sondurmeyı çözemedım yardım cı olursanız sevınırım
Arduinho uno ile step motorla rf alıcı verici işr otomatik perde kontrol edicem yazılım için yardım edebilecek varmı
ReplyMerhabalar, üstteki devreyi kurdum sorunsuz güzel çalışıyor teşekkür ederim, alıcı verici iletişimi sağlıklı olarak gerçekleşiyor. bu kodları kullanarak mesaj daki veriyi char tipindeki başka bir *plaka değişkene nasıl atayabilirim acaba? veri tipi dönüşümü nasıl yapabilirim?
Replyif(vw_get_message(buf, &buflen))
{
for(i; i < buflen; i++)
{
c=char(buf [ i ] );
s=String(c);
mesaj+= s;
}
Serial.println(mesaj);
}
const char *plaka = mesaj; //??????????
const char *dplakalar[] =
{
"54AKM01",
"54AKM02",
"54AKM03"
}
for (x = 0; x < len; x++)
{
if (strcmp (plaka, dplakalar[x]) == 0)
{
Gecerli_Plaka();
break;
}
merhaba benimde bir sorunum var acaba yardımcı olabilir misiniz?
Replykonveyor band sistemi yapıyorum ancak chardan int e çevirirken şöyle bir sorunla karşılaştım şimdi sayıyı keypaddan giriyorum o sayıya ulaşınca lcd de bitti yazması gerekiyor 1 den 9 a kadar sorun yok ama 10 11 12 yada 100 dibi sayıları saydıramıyorum
Replyİyi günler çok güzel bir anlatım olmuş teşekkür ederim ama bir sorum olcaktı sizin bu verdiğiniz kodları arduinoya atıyorum ve bağlantılarıda doğru yapmama rağmen haberleşme sağlamıyor mesela ilk attığınız "hello world" yazısı seri port ekranında gözükmüyor ne yapmalıyım yardımcı olursanız sevinirim.
Replyalıcı kdodunu alttaki gibi değiştirirseniz daha koly kullanabilirsiniz.
ReplySerial.println(mesaj);
mesaj=""; ///bunu ekleyin
i=0; ///bunu da
}
if(mesaj == "LedON")
alıcı kdodunu alttaki gibi değiştirirseniz daha koly kullanabilirsiniz.
ReplySerial.println(mesaj);
mesaj=""; ///bunu ekleyin
i=0; ///bunu da
}
if(mesaj == "LedON")
Merhaba. Öncelikle çok teşekkür ederim örnekler için. PIC ile arduinoya veri göndermeye çalışıyorum. aşağıdaki MikroC verici kod parçası ile PIC'li bir devreden, pic'li bir devreye veri gönderip işlem yapabiliyorum. Önden CTRL gönderip sonra veriyi örneğin 1 gönderiyorum. Pic ile çalışmada sıkıntı yok ancak Arduinoda başarılı olamadım. Yazınızdaki 3. kod penceresindeki ledON alıcı örneğini test ediyorum ancak kod başarılı şekilde yüklenmesine rağmen arduino alıcıda işlem yapamıyorum. CTRL1 göndererek test ediyorum ve alıcı verici modüller uygun çiftler halinde. Arduino alıcıda 2400 baud. Nerede hata yapıyor olabilirim.
Replyif(veri > 0) // veri gönderme rutini
{
UART1_Init(2400); // UART modülünü 2400 bps'de başlat
LATB.B6 = 1; // VERİCİ VCC AKTİF
LATB.B4 = 0; // ALICI VCC PASİF
LATC.B0 = 1; // LED AKTİF
Delay_ms(30); // uart modülü stabil çalışma süresi
i = 1;
do {
sayac=i;
i++; //bu kullanım i değişkenini 1 artırır yani i=i+1; ile aynıdır
UART1_Write_Text("CTRL");
UART1_Write(veri);
}while ( i < 6 );
Delay_ms(10);
LATB.B6 = 0; // VERİCİ VCC PASİF
LATC.B0 = 0; // LED PASİF
i = 0;
}
else
{
veri = 0;
sayac = 0;
}
merhaba. yukarıda anlattığınız metin/mesaj gönderme işlemlerini şu linkteki (https://www.robotistan.com/pt2262-4km-menzilli-4-kanal-rf-verici-modul) modul ile de yapabilirmiyim? yoksa belirttiğim modulün iletişimi sadece kanal açık,kanal kapalı şeklindemi gerçekleşiyor?
ReplyMerhaba. Bir röle üzerinde bulunan 433 lük alıcı modülü söktüm uzaktan kumandalı araba projemde uyguladım. Elcik kumandayla kontrol edebiliyorum fakat röle üzerinde elcik kumandayla çok stabil ve hızlı bir şekilde çalışan alıcı modül projemde gecikmeli olarak çalışıyor. Kumandaya basar basmaz almasını nasıl sağlayabilirim.
Reply1 alıcıyı 2 farklı vericiyle haferleştirme işini nasıl yapabilirim
ReplyMerhaba. Bu ürünü Arduino suz bir şekilde uzaktan tetikleme için kullanabilir miyim? Eğer kullanabiliyorsam verici ve alıcının data girişine ne bağlayacağım yardımcı olursanız çok sevinirim şimdiden teşekkürler
ReplyConversionConversion EmoticonEmoticon