Arduino RF Haberleşme - 433 Mhz Alıcı Verici


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.


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] = 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 yorum
Unknown
admin
Kasım 16, 2015 ×

hocam iyi akşamlar VirtualWire Kütüphanesi ile servo kütüphani birlikte kullanınlınca hata veriyo o sorunu nasıl çözebilriz acaba

Reply
avatar
Unknown
admin
Kasım 17, 2015 ×

burda ki rf kütüphanesi ele servo kütüphanesi birlikte çalışmıyo nasıl düzeltebiliriz onu

Reply
avatar
mvaslan
admin
Kasım 18, 2015 ×

Sanırım bu işinize yarayacaktır arkadaşlar..
http://electronics.stackexchange.com/questions/67967/problems-using-servo-h-and-virtualwire-h-in-arduino

Reply
avatar
3d Printer
admin
Temmuz 02, 2016 ×

Bununla ben kapı felan gibi şeyleri açma işlemi yapabilir miyim ki?

Reply
avatar
mvaslan
admin
Temmuz 02, 2016 ×

Evet. 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..

Reply
avatar
Unknown
admin
Ağustos 21, 2016 ×

2 yada daha fazla servo motoru kontrol etmek istersek nasıl yapabiliriz?

Reply
avatar
Unknown
admin
Ekim 01, 2016 ×

mrb;
öğrenmeli nasıl bir şey düşünmeliyim acaba?

Reply
avatar
Unknown
admin
Ekim 17, 2016 ×

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

Reply
avatar
mvaslan
admin
Ekim 17, 2016 ×

Elbette 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.

Reply
avatar
Adsız
admin
Aralık 28, 2016 ×

RF konusunda bulabileceğiniz en sade anlatım. Kusursuz çalışıyor, teşekkürler.

Reply
avatar
Adsız
admin
Aralık 29, 2016 ×

anlık görüntü aktarımını bu mödüllerle nasıl yapabilirim yardımcı olursanız çok sevinirim

Reply
avatar
Adsız
admin
Aralık 30, 2016 ×

Merhabalar, 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?

Reply
avatar
mvaslan
admin
Aralık 30, 2016 ×

Teşekkürler. İyi çalışmalar.

Reply
avatar
mvaslan
admin
Aralık 30, 2016 ×

Gö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.

Reply
avatar
mvaslan
admin
Ocak 02, 2017 ×

Merhaba 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
mesaj = String(Tamsayi);
Kalıbını kullanarak. Sonra normal gönderme işlemine devam et. İyiçalışmalar.

Reply
avatar
Adsız
admin
Ocak 05, 2017 ×

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

#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);

}

Reply
avatar
mvaslan
admin
Ocak 05, 2017 ×

mesaj=char(sayac); // Burada hata veriyor.
Bu satırdan önce integer olan sayac değerini String değikene çevirmelisin.. Yani ;

sayac = String(sayac);
Bu şekilde bir dene..

Reply
avatar
Adsız
admin
Ocak 06, 2017 ×

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 :(

Reply
avatar
mvaslan
admin
Ocak 12, 2017 ×

Merhaba biraz geç cevap vermek durumunda kaldım kusura bakmayın. Sorununuz düzeldi mi acaba ?

Reply
avatar
fer
admin
Ocak 14, 2017 ×

Merhaba,

Alıcı üzerindeki paraziti nasıl alabilirim ?

Reply
avatar
mvaslan
admin
Ocak 14, 2017 ×

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/

Reply
avatar
Unknown
admin
Mart 23, 2017 ×

433 mhz lık modul ıle led yakıp sondure bılırmıyz 2 tane uno ıle
yenı 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

Reply
avatar
Unknown
admin
Mart 30, 2017 ×

Arduinho uno ile step motorla rf alıcı verici işr otomatik perde kontrol edicem yazılım için yardım edebilecek varmı

Reply
avatar
mehmet
admin
Mart 31, 2017 ×

Merhabalar, ü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?

if(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;
}

Reply
avatar
Serhat bakan
admin
Nisan 30, 2017 ×

merhaba benimde bir sorunum var acaba yardımcı olabilir misiniz?

Reply
avatar
Serhat bakan
admin
Nisan 30, 2017 ×

konveyor 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
avatar
Unknown
admin
Haziran 24, 2017 ×

İ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.

Reply
avatar
Unknown
admin
Eylül 26, 2017 ×

alıcı kdodunu alttaki gibi değiştirirseniz daha koly kullanabilirsiniz.

Serial.println(mesaj);
mesaj=""; ///bunu ekleyin
i=0; ///bunu da
}
if(mesaj == "LedON")

Reply
avatar
Unknown
admin
Eylül 26, 2017 ×

alıcı kdodunu alttaki gibi değiştirirseniz daha koly kullanabilirsiniz.

Serial.println(mesaj);
mesaj=""; ///bunu ekleyin
i=0; ///bunu da
}
if(mesaj == "LedON")

Reply
avatar
Admin
admin
Kasım 24, 2018 ×

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.

if(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;
}

Reply
avatar
Unknown
admin
Nisan 21, 2019 ×

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?

Reply
avatar
Unknown
admin
Ocak 12, 2020 ×

Merhaba. 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.

Reply
avatar
Unknown
admin
Aralık 01, 2021 ×

1 alıcıyı 2 farklı vericiyle haferleştirme işini nasıl yapabilirim

Reply
avatar
Unknown
admin
Mayıs 03, 2023 ×

Merhaba. 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

Reply
avatar