Arduino ile SIM800C arayan numara çekme projesi, gelen çağrıların numaralarını yakalayıp kaydetmek isteyenler için güçlü bir başlangıç noktasıdır. Ev güvenliği, çağrı merkezi veya erişim kontrolü gibi uygulamalarda hangi numaranın aradığını bilmek kritik olabilir. Bu rehberde SIM800C modülünün CLIP özelliğini kullanarak arayan numarayı Arduino ile nasıl okuyacağınızı, bağlantıları ve geliştirilmiş kodu adım adım bulacaksınız.
SIM800C ile Arayan Numara Çekme Projesi Neden Önemli?
GSM modülleri yalnızca SMS veya arama yapmak için değil, gelen çağrıları algılamak için de kullanılır. SIM800C, AT+CLIP komutuyla arayan numara bilgisini seri porttan gönderir. Bu sayede Arduino, numarayı okuyabilir, isterseniz SD karta yazabilir veya bir ekranda gösterebilir. Özellikle uzaktan erişim, alarm sistemleri ve otomasyon projelerinde bu özellik büyük kolaylık sağlar. Geleneksel sabit hatlarda olduğu gibi SIM kart hattınızda arayan numara görüntüleme servisinin aktif olması gerektiğini unutmayın; çoğu GSM operatörü bu hizmeti varsayılan olarak sunar.
Gerekli Malzemeler ve Arduino Bağlantı Şeması
Proje için bir Arduino Uno veya uyumlu kart, SIM800C modülü, aktif bir SIM kart, 3.7V-4.2V 2A kapasiteli güç kaynağı veya Li-Po pil, jumper kablolar ve isteğe bağlı olarak regüle devre gereklidir. SIM800C modülünün TX pini Arduino'nun D10 pinine, RX pini D11 pinine bağlanır. GND hattı ortaklanmalıdır. Modülün VCC veya lityum port girişinden besleme yapılabilir; ancak 5V-12V aralığı modül üzerindeki regülatöre göre değişebilir, bu yüzden modülün belgelerine göz atın.
Besleme ve PWRKEY Uyarıları
SIM800C gibi GSM modülleri, şebeke çekimi sırasında ani akım çeker. Bu nedenle besleme 3.4V-4.4V arasında ve en az 2A kapasiteli olmalıdır. Zayıf veya kalitesiz kablo, modülün kapanmasına veya ağa kayıt olamamasına neden olur. Ayrıca modülü başlattıktan sonra PWRKEY pinine yaklaşık 1-2 saniyelik düşük darbe uygulanarak modül açılmalıdır. Bazı modüllerde bu pin otomatik tetiklenir, ancak devrenizde manuel kontrol gerekiyorsa bu adımı atlamayın.
Arayan Numara (CLIP) Verisi Nasıl Okunur?
SIM800C'ye gelen bir arama olduğunda seri porttan önce RING satırı, ardından +CLIP satırı gönderilir. Örnek bir çıktı şu şekildedir:
RING
+CLIP: "+905468422222",145,"",0,"",0
Bu satırda tırnak içindeki +905468422222 değeri arayan numaradır. Numarayı çekmek için AT+CLIP=1 komutuyla CLIP bildirimi açılmalıdır. Arduino tarafında gelen veri satır satır okunup +CLIP ile başlayan satır içinden tırnak işaretleri arasındaki bölüm alınır. Bu yöntem, karakter karakter okumaya göre çok daha kararlıdır ve ek karakterlerden etkilenmez.
Arduino SIM800C Arayan Numara Çekme Kodu ve Açıklaması
Aşağıdaki kod, yazılım seri portu üzerinden SIM800C ile haberleşir. Kurulumda CLIP bildirimi açılır, sinyal kalitesi ve SIM kart durumu kontrol edilir. Döngüde ise gelen her satır incelenir; +CLIP satırındaki tırnak içindeki numara ayrıştırılır ve seri monitöre yazdırılır. Bu sayede istediğiniz numaraya göre eylem tetikleyebilirsiniz.
Kodun Çalışma Mantığı
Kod, gsm.readStringUntil('\n') ile her satırı okur. Satır +CLIP: ile başlıyorsa, indexOf ile ilk ve ikinci tırnak işareti bulunur. İki tırnak arasındaki metin arayanNo değişkenine atanır. Böylece numara +90 ile birlikte tam olarak elde edilir. Daha sonra istenirse bu numara bir if koşuluyla karşılaştırılır veya bir veri tabanına gönderilir. Kod, önceki sürümdeki sayaç ve bayrak karmaşasını ortadan kaldırarak daha okunabilir ve bakımı kolay hale gelmiştir.
Geliştirilmiş Arduino Kodu
#include <SoftwareSerial.h>
SoftwareSerial gsm(10, 11); // Arduino RX, TX
const unsigned long TIMEOUT = 10000;
String arayanNo = "";
void setup() {
Serial.begin(9600);
gsm.begin(9600);
Serial.println("SIM800C arayan numara yakalama sistemi başlatılıyor...");
delay(3000);
gsm.println("AT");
goster();
gsm.println("AT+CLIP=1");
goster();
gsm.println("AT+CSQ");
goster();
gsm.println("AT+CCID");
goster();
gsm.println("AT+CREG?");
goster();
gsm.println("AT+CBC");
goster();
}
void loop() {
arayanNumaraYakala();
}
void arayanNumaraYakala() {
if (gsm.available()) {
String satir = gsm.readStringUntil('\n');
satir.trim();
// CLIP satırını bul: +CLIP: "+905xxxxxxxxx",145,"",0,"",0
if (satir.startsWith("+CLIP:")) {
int ilkIndex = satir.indexOf('"');
int sonIndex = satir.indexOf('"', ilkIndex + 1);
if (ilkIndex != -1 && sonIndex != -1 && sonIndex > ilkIndex) {
arayanNo = satir.substring(ilkIndex + 1, sonIndex);
Serial.print("Arayan Numara: ");
Serial.println(arayanNo);
if (arayanNo == "+905468422222") {
Serial.println("Hiber Bilişim arıyor.");
}
arayanNo = "";
}
}
}
delay(50);
}
void goster() {
delay(500);
while (Serial.available()) {
gsm.write(Serial.read());
}
while (gsm.available()) {
Serial.write(gsm.read());
}
}
Test ve Sık Karşılaşılan Sorunlar
Devreyi kurduktan sonra Arduino'ya kodu yükleyin ve seri monitörü 9600 baud hızında açın. Modülün ağa kayıt olması için birkaç saniye bekleyin. Cep telefonunuzdan SIM kartınızı arayın; seri monitörde önce RING, ardından Arayan Numara satırını görmelisiniz. Eğer numara görünmüyorsa SIM kartınızın arayan numara gösterme servisini operatörünüzden kontrol edin. Ayrıca beslemenin yetersiz olması, baud hızının uyuşmaması veya PWRKEY pininin tetiklenmemesi en sık karşılaşılan sorunlardır. Bağlantı kablolarının kısa ve sağlam olmasına özen gösterin.
Arduino ile SIM800C arayan numara çekme projesi, gelen çağrıları takip etmek için düşük maliyetli ve esnek bir çözümdür. AT+CLIP komutu ve satır tabanlı ayrıştırma sayesinde numara bilgisi güvenilir biçimde elde edilir. Bu rehberdeki bağlantıları ve geliştirilmiş kodu kullanarak kendi çağrı izleme sisteminizi kurabilirsiniz.
Bu projeyi kurduktan sonra gelen aramaları SD karta kaydetmeyi veya belirli numaralara göre röle tetiklemeyi deneyin. Sorularınızı ve sonuçlarınızı yorumlarda paylaşmayı unutmayın.