- Gerekli malzemeler:
- GSM Modülü:
- AT komutlarını kullanarak GSM modülü ile iletişim kurmak:
- Devre şeması:
- PIC Mikrodenetleyicinizin Programlanması:
- Simülasyon:
- GSM ve PIC kullanarak arama yapma ve alma:
GSM modülleri, özellikle projemiz uzaktan erişim gerektirdiğinde kullanmak büyüleyicidir. Bu modüller, normal cep telefonumuzun yapabileceği, arama yapma / alma, SMS gönderme / alma, GPRS kullanarak internete bağlanma vb. Gibi tüm işlemleri yapabilir. Ayrıca bu modüle normal bir mikrofon ve hoparlör bağlayabilir ve telefonunuzla sohbet edebilirsiniz. mobil aramalar. Bu, bir Mikroişlemci ile arayüz oluşturulabilirse birçok yaratıcı projeye kapı açacaktır. Bu nedenle, bu eğitimde , GSM modülünü (SIM900A) PIC mikro denetleyicimizle nasıl Arabirim yapabileceğimizi öğrenecek ve GSM Modülünü kullanarak arama yaparak ve alarak bunu göstereceğiz. Daha önce arama ve mesajlaşma için Arduino ve Raspberry Pi ile arayüz oluşturduk:
- Arduino ve GSM Modülünü kullanarak Çağrı ve Mesaj
- Raspberry Pi ve GSM Modülünü kullanarak Çağrı ve Mesaj
Gerekli malzemeler:
- PIC Mikrodenetleyici (PIC16F877A)
- GSM modülü (SIM900 veya diğerleri)
- Bağlantı telleri
- 12V Adaptör
- PicKit 3
GSM Modülü:
GSM modülü, AT komut modu kullanılarak herhangi bir mikrodenetleyici olmadan da kullanılabilir. Yukarıda gösterildiği gibi, GSM modülü, bir MAX232 modülü kullanılarak bilgisayara doğrudan arayüzlenebilen bir USART adaptörüyle birlikte gelir veya Tx ve Rx pinleri onu bir Mikroişlemciye bağlamak için kullanılabilir. Bir mikrofonun veya bir Hoparlörün bağlanabileceği MIC +, MIC-, SP +, SP- vb. Gibi diğer pinleri de fark edebilirsiniz. Modül, normal bir DC varil jakı üzerinden 12V adaptörle çalıştırılabilir.
SIM kartınızı modülün yuvasına takın ve açın, bir güç LED'inin Yandığını fark etmelisiniz. Şimdi bir dakika kadar bekleyin ve her 3 saniyede bir yanıp sönen kırmızı (veya başka bir renkte) LED görmelisiniz. Bu, Modülünüzün SIM kartınızla bağlantı kurabileceği anlamına gelir. Artık modülünüzü Telefon veya herhangi bir Mikrodenetleyici ile bağlamaya devam edebilirsiniz.
AT komutlarını kullanarak GSM modülü ile iletişim kurmak:
Tahmin edebileceğiniz gibi, GSM modülü Seri iletişim yoluyla iletişim kurabilir ve yalnızca bir dili anlayabilir, bu da " AT komutları " dır. GSM modülüne söylemek veya sormak isteyebileceğiniz her ne olursa olsun, yalnızca AT komutları aracılığıyla olmalıdır. Örneğin, modülünüzün aktif olup olmadığını bilmek istiyorsanız. "AT" gibi bir komut istemelisiniz (göndermelisiniz) ve modülünüz "Tamam" yanıtını verecektir.
Bu AT komutları veri sayfasında iyi bir şekilde açıklanmıştır ve burada resmi veri sayfasında bulunabilir. Tamam! Tamam! 271 sayfalık bir veri sayfasıdır ve bunları okumak günler sürebilir. Bu yüzden, bunu yakında kurup çalıştırmanız için aşağıda bazı en önemli AT komutlarını verdim.
AT |
Onay için Tamam ile Yanıtlar |
+ CPIN'de? |
Sinyal Kalitesini Kontrol Edin |
+ COPS AT? |
Servis sağlayıcı adını bulun |
ATD96XXXXXXXX; |
Belirli bir numaraya çağrı, noktalı virgülle biter |
AT + CNUM |
SIM kartın numarasını bulun (bazı SIM'ler için çalışmayabilir) |
ATA |
Gelen Aramayı Cevaplama |
ATH |
Mevcut Gelen aramayı sonlandırın |
AT + COLP |
Gelen çağrı numarasını göster |
AT + VTS = (sayı) |
DTMF numarasını gönderin. (Numara) için mobil klavyenizdeki herhangi bir numarayı kullanabilirsiniz |
AT + CMGR |
AT + CMGR = 1 ilk pozisyonda mesajı okur |
AT + CMGD = 1 |
İlk pozisyondaki mesajı sil |
AT + CMGDA = ”TÜMÜNÜ SİL” |
Tüm mesajları SIM'den sil |
AT + CMGL = ”TÜMÜ” |
SIM'den gelen tüm mesajları okuyun |
AT + CMGF = 1 |
SMS yapılandırmasını ayarlayın. "1" yalnızca metin modu içindir |
AT + CMGS = "+91 968837XXXX" > CircuitDigest Metni
|
Burada 968837XXXX belirli bir numaraya SMS gönderir. “>” Gördüğünüzde metni girmeye başlayın. Metni göndermek için Ctrl + Z tuşlarına basın. |
AT + CGATT? |
SIM kartta internet bağlantısını kontrol etmek için |
AT + CIPSHUT |
TCP bağlantısını kapatmak, internetten bağlantıyı kesmek anlamına gelir |
AT + CSTT = "APN", "kullanıcı adı", "Geçiş" |
APN ve Geçiş anahtarınızla GPRS'e bağlanın. Ağ Sağlayıcısından edinilebilir. |
AT + CIICR |
SIM kartta veri paketi olup olmadığını kontrol edin |
AT + CIFSR |
SIM ağının IP'sini alın |
AT + CIPSTART = "TCP", "SUNUCU IP", "PORT" |
TCP IP bağlantısı kurmak için kullanılır |
+ CIPSEND'TE |
Bu komut, sunucuya veri göndermek için kullanılır |
Devre şeması:
GSM modülünü PIC mikro denetleyiciyle Arabirim için bağlantı şeması aşağıda gösterilmiştir.
GSM modülünün Tx ve Rx pinlerini sırasıyla PIC MCU PIC16F877A'nın Rx ve Tx pinleri ile arayüzledik. Bu, her ikisi arasında Seri bağlantı kuracaktır. Ayrıca, hem GSM hem de PIC modülünü ortak bir zemine oturtmayı unutmayın. GSM modülümüzün durumunu öğrenmek için bir LCD ekran da kullandık. Bağlantılar tamamlandıktan sonra, donanımınız aşağıdaki gibi görünecektir.
PIC Perf panosu, PIC mikro denetleyicisinin nasıl kullanılacağını öğrendiğimiz PIC eğitim serimiz için yapıldı. Tüm bu temel bilgileri atlayacağım için, Pickit 3 kullanarak bir programı nasıl yazacağınızı bilmiyorsanız MPLABX ve XC8 kullanan PIC Mikroişlemci eğitimlerine geri dönmek isteyebilirsiniz.
PIC Mikrodenetleyicinizin Programlanması:
Bu proje için eksiksiz program, bu eğitimin altında bulunabilir. Burada bazı önemli işlevleri ve kod parçalarını açıklayacağım. Bu programda ayrıca PIC Mikrodenetleyici ile Arayüz LCD'den gelen bir LCD kodları vardır, LCD'nin PIC mikrodenetleyici ile nasıl kullanılabileceğini merak ediyorsanız bu öğreticiyi ziyaret edebilirsiniz.
Daha önce de belirtildiği gibi, Seri iletişim modu aracılığıyla AT komutlarını kullanarak PIC ve GSM arasında iletişim kuracağız. Bu nedenle, ilk olarak PIC mikro denetleyicimizdeki USART iletişim modülünü Initialize _SIM900 () kullanarak başlatmalıyız ; işlevi. Bu fonksiyonun içinde Tx ve RX pinlerini bildiriyoruz ve Asenkron alış ve iletimi 9600 baud hızında ve 8 bit modunda başlatıyoruz.
// *** SIM900 için UART'ı başlatın ** // void Initialize_SIM900 (void) {// **** UART **** için I / O pinlerini ayarlama // TRISC6 = 0; // TX Pin çıkışı olarak ayarlanmış TRISC7 = 1; // RX Pin giriş olarak ayarlandı // ________ I / O pinleri set __________ // / ** Gerekli baud hızı için SPBRG kaydını başlat ve hızlı baud_rate için BRGH ayarla ** / SPBRG = 129; // SIM900, 9600 Baud hızında çalışır, yani 129 BRGH = 1; // yüksek baud_rate için // _________ Baud_rate ayarının sonu _________ // // **** Eşzamansız seri bağlantı noktasını etkinleştir ******* // SYNC = 0; // Eşzamansız SPEN = 1; // Seri bağlantı noktası pinlerini etkinleştirin // _____ Eşzamansız seri bağlantı noktası etkinleştirildi _______ // // ** İletim ve alım için hazırlanalım ** // TXEN = 1; // iletimi etkinleştir CREN = 1; // alımı etkinleştir // __ UART modülü yukarı ve iletim ve alım için hazır __ // // ** 8 bit modu seçin ** // TX9 = 0; // 8 bit alım seçildi RX9 = 0;// 8 bit alım modu seçildi // __ 8 bit modu seçildi __ //} // ________ UART modülü Başlatıldı __________ //
Şimdi GSM modülümüzden / modülümüzden bilgi okuyup yazmamız gerekiyor. Bunun için _SIM900_putch (), _SIM900_getch (), _SIM900_send_string (), _SIM900_print () işlevlerini kullanıyoruz. Bu işlevler, verileri seri olarak okumak veya yazmak için TXREG ve RCREG gibi İletme ve alma arabellek kaydını kullanır.
// ** UART'a bir bayt tarih gönderme işlevi ** // void _SIM900_putch (char bt) {while (! TXIF); // TX arabelleği boş olana kadar programı tutun TXREG = bt; // Verici tamponunu alınan değerle yükleyin} // _____________ İşlev sonu ________________ // // ** UART'tan bir baytlık tarih alma işlevi ** // char _SIM900_getch () {if (OERR) // Hata olup olmadığını kontrol edin { CREN = 0; // Hata ise -> CREN'i Sıfırla = 1; // Hata ise -> Sıfırla} while (! RCIF); // programı RX tamponu serbest dönüş olana kadar basılı tutun RCREG; // değeri alın ve ana işleve gönderin} // _____________ İşlevin sonu ________________ // // ** dizeyi bayta dönüştürme işlevi ** // void SIM900_send_string (char * st_pt) {while (* st_pt) // varsa bir char _SIM900_putch (* st_pt ++);// onu bir bayt verisi olarak işle} // ___________ Fonksiyonun sonu ______________ // // ** Değiştirilmiş Kodların Sonu ** // void _SIM900_print (unsigned const char * ptr) {while (* ptr! = 0) {_SIM900_putch (* ptr ++); }
Yukarıdaki işlevler evrenseldir ve herhangi bir uygulama için değiştirilmeleri gerekmez. Sadece kaba bir giriş yapmaları için açıklandılar. Anlamak istiyorsanız, onların derinliklerine dalabilirsiniz.
Şimdi ana fonksiyonumuzun içinde, USART bağlantısını başlatıyoruz ve aşağıdaki kod satırını kullanarak "AT" gönderdiğimizde bir "Tamam" alıp alamayacağımızı kontrol ediyoruz.
do {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Modül bulunamadı"); } while (! SIM900_isStarted ()); // GSM'nin "Tamam" ı geri göndermesini bekleyin Lcd_Set_Cursor (2,1); Lcd_Print_String ("Modül Algılandı"); __delay_ms (1500);
SIM900_isStarted () işlevi ; GSM'e "AT" gönderecek ve ondan "Tamam" cevabını bekleyecektir. Evet ise, 1 başka 0 döndürür;
Modül algılanmazsa veya herhangi bir bağlantı sorunu varsa LCD ekranda "Modül bulunamadı" mesajı görüntülenir, aksi takdirde Modül algılandı mesajı görüntülenir ve aşağıdaki adıma SIM kartın algılanıp algılanmayacağını kontrol ederiz. kod satırı.
/ * SIM kartın algılandığını kontrol edin * / do {Lcd_Set_Cursor (2,1); Lcd_Print_String ("SIM bulunamadı"); } while (! SIM900_isReady ()); // GSM'nin "+ CPIN: READY" geri göndermesini bekleyin Lcd_Set_Cursor (2,1); Lcd_Print_String ("SIM Algılandı"); __delay_ms (1500);
SIM900_isReady () işlevi "AT + CPIN?" GSM'ye bağlanır ve ondan “+ CPIN: HAZIR” yanıtını bekler. Evet ise, 1 başka 0 döndürür;
Bir SIM kart bulunursa, LCD'de SIM algılandı görüntülenir. Daha sonra, “ ATD mobilenumber ” komutunu kullanarak bir arama yapmayı deneyebiliriz ; ”. Burada örnek olarak numaramı ATD93643159XX; olarak kullandım. Orada ilgili cep telefonu numaranızı değiştirmeniz gerekir.
/ * Telefon Görüşmesi Yapın * / do {_SIM900_print ("ATD93643XXXXX; \ r \ n"); // Burada 93643XXXXX Lcd_Set_Cursor (1,1) numarasına bir çağrı yapıyoruz; Lcd_Print_String ("Çağrı Yapma…."); } while (_SIM900_waitResponse ()! = SIM900_OK); // ESP "Tamam" ı geri gönderene kadar bekleyin Lcd_Set_Cursor (1,1); Lcd_Print_String ("Çağrı Yapıldı…."); __delay_ms (1500);
Çağrı yapıldığında, LCD'de Çağrı Yapıldı mesajı görüntülenir ve belirtilen numaraya bir gelen çağrı almanız gerekir.
Ayrıca GSM modülüne bağlı cep telefonu numarasını arayabilir ve aşağıdaki kodu kullanarak LCD ekranınızdan haberdar olabilirsiniz.
while (1) {if (_SIM900_waitResponse () == SIM900_RING) // Gelen çağrı olup olmadığını kontrol edin {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Gelen Çağrı !!."); }}
GSM modülü gelen bir çağrı algıladığında, LCD modülünün ikinci satırında Gelen çağrı mesajını gösterecektir. _SIM900_waitResponse () işlevi, GSM modülünden gelen verileri kontrol edecektir. WaitResponce () nedeniyle "RING" ile eşdeğer olan SIM900_RING'i aldığında, "Gelen çağrı" durumunu görüntüleyeceğiz.
GSM modülünü kullanarak hemen hemen her türlü aktivasyonu gerçekleştirmek için kendi fonksiyonlarınızı oluşturabilirsiniz. Eğer şeylerin kodlanmış olmasını istiyorsanız, aşağıdaki gibi herhangi bir AT komutu göndermek için __SIM900_print () işlevini kullanabilirsiniz.
_SIM900_print ("AT + CPIN? \ R \ n");
Komutun sona erdiğini belirtmek için tüm komutunuzun "\ r \ n" ile takip edilmesi gerektiğini unutmayın.
Simülasyon:
Programın nasıl çalıştığını anladıktan sonra simülasyonu deneyebilir ve ihtiyaçlarınıza uyacak şekilde değişiklikler yapabilirsiniz. Simülasyon size çok zaman kazandıracak. Simülasyon Proteus kullanılarak yapılmıştır ve aşağıdaki gibi görünmektedir.
Gördüğünüz gibi, Programın beklendiği gibi yanıt verip vermediğini kontrol etmek için Proteus'ta sanal terminal seçeneğini kullandık. Açılır iletişim kutusu aracılığıyla değerleri besleyebiliriz. Örneğin, çalıştır'a bastığımızda, yukarıdaki gibi siyah bir iletişim kutusu görünecek ve AT'yi gösterecektir, bu, GSM modülünü AT gönderdiği anlamına gelir, şimdi kutuya "OK" yazıp enter tuşuna basarak PIC'e yanıt verebiliriz. ve PIC buna yanıt verecektir. Benzer şekilde tüm AT komutlarını deneyebiliriz.
GSM ve PIC kullanarak arama yapma ve alma:
Kodun ve donanımın nasıl çalıştığını anladıktan sonra, aşağıdaki programı PIC'e yükleyin ve modülü açın. Her şey yolunda giderse, LCD'nizde "Modül Algılandı", "SIM algılandı" ve "Arama Yapıldı" ifadeleri görünmelidir. "Arama yapıldı" ifadesini gördüğünüzde, programda belirtilen numaraya gelen bir arama alacaksınız.
Ayrıca GSM modülünde bulunan numarayı aramayı deneyebilirsiniz ve LCD'nizde SIM'in arandığını belirtmek için "Gelen arama" mesajı görüntülenir.
Projenin tam çalışması aşağıdaki videoda gösterilmektedir. Umarım projeyi anladınız ve yapmaktan zevk almışsınızdır. İşlerin yolunda gitmesi konusunda herhangi bir sorun yaşarsanız, sorunuzu yorum bölümüne veya Forumlarımıza gönderin, size yardımcı olmaktan memnuniyet duyarım.