জিএসএমভিত্তিক মুভিং মেসেজ ডিসপ্লে

এই টিউটোরিয়ালে আরডুইনো মেগা, ডট ম্যাট্রিক্স ডিসপ্লে প্যানেল এবং SIM808 ভিত্তিক জিএসএম/জিপিআরএস/জিপিএস শিল্ডের সমন্বয়ে একটি জিএসএমভিত্তিক মুভিং মেসেজ ডিসপ্লে তৈরী করা হবে। অর্থ্যাৎ, এসএমএসের মাধ্যমে সাইনবোর্ডের মুভিং মেসেজ পরিবর্তন করা যাবে।

প্রয়োজনীয় যন্ত্রপাতি
পরিমান
প্রোডাক্ট লিংক
Arduino Mega 2560 (China)   1 http://bit.ly/2Izr2cB
GSM/GPRS/GPS Shield (B)   1 http://bit.ly/2z2d9kw
MAX7219 Dot Matrix Display Panel 32X8 P3.75   1 http://bit.ly/2DHbm7d
Male to female jumpers 7 http://bit.ly/2rIu6w2
Male to male jumpers 1 http://bit.ly/2IkA1hy
Sim Card 1  

শিল্ডের ভোল্টেজ রেফারেন্স হিসেবে ৫ ভোল্ট সিলেক্ট করুন।

শিল্ডের তলার সিম সকেটে সিম কানেক্ট করুন।

জিএসএম অ্যান্টেনাকে চিত্রের মতো করে সংযোগ দিন।

UART select সুইচকে D0/D1 চিহ্নিত পাশে রাখুন।

শিল্ডটি সম্পর্কে এবার খুবই গুরুত্বপূর্ণ তথ্য দিচ্ছি। শিল্ডটিতে আসলে Tx ও Rx উল্টো লেখা হয়েছে। SIMRx চিহ্নিত রেইলগুলো আসলে মডিউলের Tx পিন এবং SIMTx চিহ্নিত রেইলগুলো আসলে মডিউলের Rx পিন। শিল্ডটিকে আরডুইনো উনোর উপর বসালে মাঝখানের রেইলের চারটি পিন ডান থেকে যথাক্রমে আরডুইনো উনোর 0,1,2,3 এর সাথে সংযুক্ত হয়ে যাবে। যেহেত্‌ আমরা এই এক্সপেরিমেন্টে উনো ব্যবহার করছি না, সেহেতু, মাঝখানের রেইলটি আমাদের প্রয়োজন নেই।

এবার ৯ ভোল্ট ডিসি পাওয়ার অ্যাডাপটারটি দিয়ে শিল্ডটিতে পাওয়ার দিতে হবে।

ডিসি অ্যাডাপ্টারটিকে শিল্ডে সংযুক্ত করার পর শিল্ডের PWRKEY চিহ্নিত পুশ বাটনটি আনুমানিক তিন সেকেন্ডের জন্য প্রেস করে রাখতে হবে। Net চিহ্নিত লাল এলইডি দ্রুত জ্বলানেভা শুরু করবে। এরপর মডিউলটি সিমের মাধ্যমে জিএসএম নেটওয়ার্ক পেয়ে গেলে লাল এলইডির জ্বলানেভা স্লো হয়ে যাবে।

GSM/GPRS/GPS Shield (B) ও Arduino Mega 2560 এর মধ্যে নিচের কানেকশনটি সম্পন্ন করুন।

Arduino Mega 2560 GSM/GPRS/GPS Shield (B)
12 RX
11 Tx
GND GND

MAX7219 Dot Matrix Display Panel ও Arduino Mega 2560 এর মধ্যে নিচের কানেকশনটি সম্পন্ন করুন।

MAX7219 Dot Matrix Display Panel 32×8 P3.75 V2 Arduino Mega 2560
VCC 5V
GND GND
DIN 51
LOAD 53
Clock 52

সম্পূর্ণ সেটআপটি দেখতে ছিল এরকম।


/* Include the HCMAX7219 and SPI library */
#include <SoftwareSerial.h>
#include <HCMAX7219.h>
#include "SPI.h"

/* Set the LOAD (CS) digital pin number*/
#define LOAD 53
 
/* Create an instance of the library */

SoftwareSerial mySerial(11,12);
HCMAX7219 HCMAX7219(LOAD);
byte Loopcounter;
int Position;
int location;
int len;
String a,b;
char charBuf[1000];

void setup() 
{ 
   Serial.begin(9600);
   

  
  //Serial.write(0x1A);
  
  

  //delay(1000); 
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  

  // set the data rate for the SoftwareSerial port
 mySerial.begin(9600);
 mySerial.println("AT+CMGF=1");
 HCMAX7219.Clear();
  
  /* SCROLL All TEXT 2 TIMES */
  for (Loopcounter = 0; Loopcounter <= 1; Loopcounter++)
  {
    for(Position=0; Position <= 408; Position++)
    {
    HCMAX7219.printMatrix("Default message", Position);
    HCMAX7219.Refresh();
    delayMicroseconds(100);
    }
  }
 
}

/* Main program */
void loop() 
{
  
  if(mySerial.available()){
  
 Serial.write(mySerial.read());
 a=mySerial.readString();
 //b=a.substring(50,1000);
 Serial.print(a);
 
if(a.indexOf("+CMTI")>0)
  {
   //Serial.println(a.substring(13,15));
   //location=a.substring(13,15).toInt();
    mySerial.println("AT+CMGR=1,0");
   // b=mySerial.readString();
    a= mySerial.readStringUntil('%');
    
    Serial.print(a);
    if(a.indexOf("+8801*********")>0)//Replace *** with message sender's mobile number.
  {
    Serial.print(a.substring(78,1000));
    //len=strlen(a.substring(78,800));
    a.substring(78,1000).toCharArray(charBuf,1000);
    len=strlen(charBuf);
    Serial.println(len);
    
   
  }
    delay(100);
    mySerial.println("AT+CMGDA=\"DEL ALL\"\r");




  }
  
 }

  /* Clear the output buffer */
  HCMAX7219.Clear();
  
  /* SCROLL All TEXT 2 TIMES */
  for (Loopcounter = 0; Loopcounter <= 1; Loopcounter++)
  {
     if(len<10)
    {
      for(Position=0; Position <len*30; Position++)
    {
    HCMAX7219.printMatrix(charBuf, Position);
    HCMAX7219.Refresh();
    delayMicroseconds(100);
    }
    }
    else if(10<len<30)
    {
      for(Position=0; Position <len*20; Position++)
    {
    HCMAX7219.printMatrix(charBuf, Position);
    HCMAX7219.Refresh();
    delayMicroseconds(100);
    }
    }
    else{
    for(Position=0; Position <len*10; Position++)
    {
    HCMAX7219.printMatrix(charBuf, Position);
    HCMAX7219.Refresh();
    delayMicroseconds(100);
    }
    }
  }
  if (Serial.available()) {
  mySerial.write(Serial.read());
  
  }
}

কম্পাইল করার আগে অবশ্যই কোডের +8801*********অংশে যে মোবাইল থেকে মেসেজ পাঠাবেন সেই নাম্বারটি লিখতে ভুলবেন না। আমরা ধরে নিচ্ছি এটি জিএসএম নিয়ে আপনার প্রথম প্রজেক্ট নয়। যদি তা হয়ে থাকে তাহলে অনুগ্রহ করে এই টিউটোরিয়ালগুলো আগে পড়ে নিন।

মেসেজ পাঠাতে একটি নিয়ম অনুসরন করতে হবে। মেসেজ প্রতিটি মেসেজের শেষে ‘%’ চিহ্নটি দিতে হবে। এই চিহ্নটি মেসেজের শেষ নির্দেশ করে। নিচে কিছু নমুনা দেখানো হল।

‘%’ চিহ্নের আগ পর্যন্ত মেসেজে যা লেখা হবে তা সিরিয়াল মনিটর এবং ডট ম্যাট্রিক্স প্যানেলে প্রদর্শিত হবে।

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.