আরডুইনোতে ইপিরমের ব্যবহার – প্র্যাক্টিকাল প্রজেক্ট সহ।

কেমন আছেন সবাই? আশাকরি ভাল আছেন। আমিও ভাল আছি। অনেকদিন পর টেকটিউনসের পাতায় একটি লেখা দিলাম। ব্যস্ততার কারণে ব্লগিং সময় দিতে পারিনা।

আরডুইনো নিয়ে আজকের টিউটোরিয়ালে আমরা শিখব কিভাবে আরডুইনোর ইপিরমের ব্যবহার করতে হয়। মাইক্রোকন্টোলারে ইপিরম খুবই কমন একটি শব্দ। EEPROM এর সম্পূর্ণ অর্থ হল electrically erasable programmable read-only memory.
আরডুইনোর(ATmega328p) ইপিরমের সাইজ 2KB. তবে এর থেকে বেশী ডেটা সংরক্ষণের প্রয়োজন হলে এক্সারনাল ইপিরম ব্যবহার করা যেতে পারে।

ইপিরমের ব্যবহার - এক্সটারনাল ইপিরম
16Kb এর ইক্সটারনাল ইপিরম

শুরুতেই বলে রাখা ভাল যে, আমি ইলেকট্রনিক্স/ইলেকট্রিক্যাল ইঞ্জিনিয়ারিং এর কোন স্টূডেন্ট নই। জেনারেলের স্টুডেন্ট। ইলেকট্রনিক্স নিয়ে কাজ করতে ভাল লাগে তাই করি। আর ডিজিটাল ইলেকট্রনিক্সেও পথচলা খুব বেশী দিনের নয়। তাই, স্বাভাবিক ভাবেই লেখাতে ভূলভ্রান্তি থাকতে পারে। যদি সেরকম কিছু পেয়ে থাকেন তাহলে আমাকে জানালে লেখা আপডেট করে দিবো।

মাইক্রোকন্টোলারে স্থায়ীভাবে ডেটা সংরক্ষণের জন্য ইপিরমের ব্যবহার করা হয়ে থাকে। আরডুইনোতে নিজস্ব ইপিরম লাইব্রেরী থাকায় অন্যান্য মাইক্রোকন্টোলার অপেক্ষা আরডুইনোতে ইপিরমের ব্যবহার অনেক সহজ।

ইপিরমের ব্যবহার

রিমোট দিয়ে এসি লোড নিয়ত্রণ করার সার্কিট হয়ত আপনারা অনেকে দেখে কিংবা ব্যবহার করে থাকবেন। যেখানে বিদ্যুৎ চলে গিয়ে আবার আসলে লোড গুলো আগের অবস্থায় থাকে।

আরেকটু সহজে বুঝিয়ে বলি, মনে করুন আপনি একটি রিমোট কন্টোল ডিভাইস কিনেছেন যেটা দিয়ে রুমের ফ্যান, লাইট অন অফ করেন। ফ্যান চলছে হঠাৎ বিদ্যুৎ চলে গেল, কিছুক্ষণ পর আবার এল। তখন ফ্যান আবার চলতে থাকে। এই যে বিদ্যুৎ চলে যাবার আগে ফ্যান চলছিল এই বিষয় টা ডিভাইস মনে রাখে এবং বিদ্যুৎ এলে আবার ফ্যান চালু করে দেই...এই কাজটাই মূলত ইপিরম ব্যবহার করে করা হয়। তবে বাজারের সব ডিভাইসেই এই সুবিধা থাকেনা। 😛

বিদ্যুৎ চলে যাবার সাথে সাথেই প্রয়োজন অনুযায়ী ইপিরমে ডেটা সংরক্ষণ করা হয় যাতে বিদ্যুৎ এলে ডিভাইস আগের অবস্থায় ব্যাক করতে পারে।

ইপিরম লাইব্রেরীর ফাংশন

ইপিরম লাইব্রেরীর ৪ টি ফাংশন রয়েছে (আমার জানা মতে)। তবে এর মধ্যে দুইটি ফাংশন বহুল ব্যবহৃত এবং অত্যাধিক প্রয়োজনীয়। ফাংশন দুইটি হলঃ

  1. EEPROM.write()
  2. EEPROM.read()

EEPROM.write() ফাংশন দিয়ে ইপিরমে ডেটা রাইট করা হয়। এই ফাংশনের প্যারামিটার দুইটি।

EEPROM.write(address, value)

প্রথম প্যারামিটার হল address এখানে একটা এড্রেস ডিফাইন করে দিতে হয়, যেই এড্রেসে ডেটা রাইট করা হবে। আর দ্বিতীয় প্যারামিটার হল value এখানে কি মান সংরক্ষণ করা হবে সেইটা দিতে হয়। তবে এটা মনে রাখা ভাল যে, value বাইট আকারে সংরক্ষণ করা হয়। যার মান 0 থেকে 255 এর মধ্যে হতে হবে। চলুন একটা উদাহরণ দেখে নিই তাহলে পরিস্কার হয়ে যাবে।

EEPROM.write('led', 1)

উপরের উদাহরণে দেখুন আমরা led নামে একটা এড্রেস ডিফাইন করেছি এবং তার মান দিয়েছি 1 .

Note: ইপিরমে ডেটা রাইট করতে মাত্র ৩.৩ মিলিসেকেন্ড সময় লাগে এবং ইপিরমের লাইফ সার্কেল হল 100,000। অর্থাৎ ১ লক্ষ্যবার ইপিরমে ডেটা লেখা/মুছে ফেলা যায়। তাই, এ ব্যাপারে অবশ্যই যত্নশীল হওয়া প্রয়োজন। 🙂

এবার আসুন EEPROM.read() ফাংশনের কাজ নিয়ে জানা যাক। নাম শুনেই এর কাজ সম্পর্কে আশাকরি বুঝতে পেরেছেন। এই ফাংশন দিয়ে ইপিরম থেকে ডেটা রিড করা হয়। EEPROM.read() ফাংশনের প্যারামিটার একটা।

EEPROM.read(address)

প্যারামিটারে সেই এড্রেস দিতে হয় যেখান থেকে ফাংশনটি ডেটা তুলে আনবে। যদি এমন কোন এড্রেস দেওয়া হয় যেখানে কখনও ডেটা রাইট করা হয়নি তাহলে ফাংশনটি 255 রিটার্ন করবে। উদাহরণঃ

EEPROM.read('led')

তাহলে এই (led) এড্রেস থেকে ডেটা হিসাবে কত রিটার্ন করবে বলুন তো? হুম্ম ঠিকই বলেছেন 1 রিটার্ন করবে। তো আশাকরি বুঝতে পেরেছেন। চলুন এবার প্যাক্টিকাল প্রজেক্ট দেখা যাক।

প্র্যাক্টিকাল প্রজেক্ট

আমরা এমন একটা প্রজেক্ট বানাবো যেটা এন্ড্রয়েড মোবাইল দিয়ে ব্লুথের মাধ্যমে কন্টোল করা যাবে। খুবই সিম্পল। এন্ড্রয়েড ফোন থেকে আরডুইনোতে ডেটা হিসাবে 1 সেন্ড করলে একটি এলইডি জলে উঠবে আর 0 সেন্ড করলে এলইডি নিভে যাবে। এলইডি এর স্থানে রিলে কিংবা ট্রায়াক ব্যবহার করে এসি লোডও কন্টোল করা যাবে। এটা নিয়ে পরবর্তীতে কোন লেখা দিবো।

যা যা লাগবেঃ

  • Arduino UNO R3
  • HC5 Bluetooth Module
  • Red LED
  • 220 Ohm Resistor
  • Some wire

এবার নিচের ড্রায়াগ্রাম অনুযায়ী আরডুইনো, এলইডি এবং ব্লুটুথ মডিউলের মধ্যে কানেকশন দিন। সঠিকভাবে কানেকশন দিবেন। নাহলে ব্লুটুথ মডিউল নষ্ট হয়ে যাবে।

ইপিরমের ব্যবহার - কানেকশন ড্রায়াগ্রাম
কানেকশন ড্রায়াগ্রাম

কানেকশনঃ

  • Arduino RX (Pin 0) -> Bluetooth Module TX
  • Arduino TX (Pin 1) -> Bluetooth Module RX
  • Arduino Pin 13 -> 220 Ohm Resistor -> LED +
  • Arduino GND -> LED -

কোডিং

খুবই সিম্পল একটা কোড লিখেছি আমরা। নিচের কোডটুকু কপি করে Arduino IDE তে পেষ্ট করুন। কিংবা টিউনের শেষে ডাউনলোড সেকশন থেকে .ino ফাইল টা ডাউনলোড করে Arduino IDE ওপেন করতে পারেন। Arduino IDE না থাকলে এখান থেকে (For windows, For android) ডাউনলোড করুন।

/*
 Contibuter: S.k.joy
 Web: http://skjoy.info
 E-mail: [email protected]
*/

// include the EEPROM library code:

#include <EEPROM.h>

    
    int LED= 13;  
    char input;  
    byte value;
    
    void setup(){  
      
      Serial.begin(9600);  
      
      /* Set LED as output */
      pinMode(LED, OUTPUT);
    }  
      
    void loop(){  
      if(Serial.available()>0){  
        
        /* Catch data from android via bluetooth module */
        input= Serial.read();  
        
        if(input=='1'){
          /* If receive 1 from android, trun on led */  
          digitalWrite(LED, HIGH);
          EEPROM.write('led', 1);
          delay(200);  
        }  
        if(input=='0'){
           /* If receive 0 from android, trun off led */  
          digitalWrite(LED, LOW);
          EEPROM.write('led', 0);  
          delay(200);  
        }
      }
      else{

       /* Read value from eeprom if Serial unavailable */
       value = EEPROM.read('led');
        
        if(value == 1){
           /* If receive 1 from eeprom trun on led */
          digitalWrite(LED, HIGH);
         }
         if(value == 0){
            /* If receive 1 from eeprom trun off led */
           digitalWrite(LED, LOW);
         }   
      }  
        
    }  

কোড ব্যাখা

যদিও কোডের মধ্যে টিউমেন্ট আকারে কোডের ব্যাখা দেওয়া হয়েছে, তারপরেও ছোট করে একটু ব্যাখা দেবার চেষ্টা করছি।

  • ৯ নং লাইনে ইপিরমের লাইব্রেরী যুক্ত করা হয়েছে।
  • ১২ নং লাইনে LED নামে একটি ভেরিয়েবল নিয়ে তাতে আরডুইনো ১৩ নং পিনকে স্টোর করা হয়েছে। এরপর ২১ নং লাইনে pinMode ফাংশনের মাধ্যমে LED ভেরিয়েবলে থাকা ১৩ নাম্বার পিনকে আউটপুট হিসাবে ডিফাইন করা হয়েছে।
  • ২৫ নং লাইনে if কন্ডিশনের মাধ্যমে চেক করা হয়েছে যে এন্ড্রয়েড থেকে ব্লুটুথ মডিউলের মাধ্যমে কোন ডেটা পাঠানো হচ্ছে কিনা।
  • ৩০ নং লাইনে চেক করা হচ্ছে যে, এন্ড্রয়েড থেকে যে ডেটা পাঠানো হচ্ছে সেটা ১ কিনা। যদি ১ হয় তাহলে এলইডি অন (৩২ নং লাইন) করো এবং ইপিরমে led নামক এড্রেসে মান হিসাবে ১ স্টোর করো।
  • ৩৬ নং লাইনে চেক করা হচ্ছে যে, এন্ড্রয়েড থেকে যে ডেটা পাঠানো হচ্ছে সেটা ০ কিনা। যদি ০ হয় তাহলে এলইডি অফ (৩৮ নং লাইন) করো এবং ইপিরমে led নামক এড্রেসে মান হিসাবে ০ স্টোর করো।
  • ৪৩ নং লাইনে else কন্ডিশনের মাধ্যমে বলা হচ্ছে এন্ড্রয়েড থেকে যদি কোন ডেটা না আসে তাহলে else কন্ডিশনের মধ্যে থাকা কোডগুলো কাজ করো। বোর্ডে পাওয়ার দিলেই else কন্ডিশনের মধ্যে থাকা কোডগুলো কাজ করা শুরু করবে।
  • ৪৬ নং লাইনে ইপিরম থেকে ডেটা রিড করা হচ্ছে।
  • ৪৮ নং লাইনে চেক করা হচ্ছে ইপিরমে যে ডেটা স্টোর হয়ে আছে সেটা ১ কিনা। যদি ১ হয় তাহলে এলইডি অন করো।
  • ৫২ নাম্বার লাইনে চেক করা হচ্ছে ইপিরমে যে ডেটা স্টোড় হয়ে আছে সেটা ০ কিনা। যদি ০ হয় তাহলে এলইডি অফ করো।

আশাকরি বোঝাতে পেরেছি। যারা প্রোগ্রামিং বেসিক টা জানেন তাদের কোডগুলো বুঝতে কষ্ট হবার কথা নয়। নতুনদের কথা মাথায় রেখেই একটু ব্যাখা দেবার চেষ্টা। 😛

এবার কোড কম্পাইল করে বোর্ডে আপলোড করার পালা। কিন্তু তার আগে আরডুইনো এবং ব্লুটুথ মডিউলের মধ্যে কানেকশন গুলো খুলে ফেলুন। প্রতিবার কোড আপলোড করার আগে এই কাজটি অবশ্যই করবেন। নাহলে আপনার এবং আমার সাধের ৩০০ টাকা দামের ব্লুটুথ মডিউলটা চিরদিনের জন্য নষ্ট হয়ে যাবে।  🙁

খুলেছেন? তাহলে এবার বোর্ডে কোড গুলো আপলোড করুন। আপলোড হয়ে গেলে বোর্ড থেকে পাওয়ার সাপ্লাই বিছিন্ন করে উপরের ড্রায়াগ্রাম অনুযায়ী ব্লুটুথ মডিউলের আরডুইনোর কানেকশন দিন। এবার বোর্ডে পাওয়ার সাপ্লাই দিন। দেখবেন, ব্লুটুথ মডিউলে একটি লাল এলইডি জলা নেভা করতে থাকবে।

এবার আপনার এন্ড্রয়েড ফোনের ব্লুটুথ অন করে সার্চ করুন। HC-05 নামে একটি ডিভাইস পাবেন। ঐটার সাথে পেয়ার করুন। পার্সওয়ার্ড চাইলে 1234 দিবেন। এবার এখান থেকে LED নামে এপটা ডাউনলোড করে আপনার এন্ড্রয়েড ফোন ইন্সটল করুন (একটু বিজ্ঞজনেরা Bluetooth terminal দিয়েও কাজ চালাতে পারবেন)।

এপসটি ওপেন করুন তাহলে পেয়ার করা ব্লুটুথ ডিভাইসের লিষ্ট পাবেন।

ইপিরমের ব্যবহার - জয়ের বাংলা ব্লগ
পেয়ার করা ডিভাইসের লিষ্ট

সেখান থেকে HC-05 সিলেক্ট করুন। তাহলে আপনার এন্ড্রয়েড ফোন ব্লুটুথ মডিউলের সাথে কানেক্ট হয়ে যাবে। বুঝবেন কিভাবে যে কানেক্ট হয়েছে? কানেক্ট হলে ব্লুটুথ মডিউলের লাল রঙ এর এলইডির জলা নেভার স্পিড অনেক কমে যাবে এবং এপস টাতে Connected লেখা দেখিয়ে নতুন স্ক্রিনে চলে যাবে। যেখানে ON এবং OFF নামে দুইটি বাটন পাবেন। 😛

ইপিরমের ব্যবহার -এপসের ইউজার ইন্টারফেস
এপসের ইউজার ইন্টারফেস

এবার ON বাটনে ক্লিক করুন। সবকিছু ঠিকঠাক থাকলে আরডুইনোর ১৩ নং পিনের সাথে যুক্ত করা এলইডি টি জ্বলে উঠবে। OFF বাটনে ক্লিক করলে এলইডি টি নিভে যাবে।

ইপিরমের কার্যকারিতা চেক করা

এবার ইপিরমের কার্যকারিতা চেক করার পালা। এলইডি জলা অবস্থায় আরডুইনো বোর্ড থেকে পাওয়ার সাপ্লাই বিচ্ছিন্ন করুন। আবার সংযোগ দিন। কি দেখছেন? এলইডি নিজে থেকেই জ্বলছে তাইনা? তার মানে আপনি সফল হয়েছেন এবং সবকিছু একেবারে ঠিকঠাক কাজ করছে। (আহা কি আনন্দ আরডুইনোতে) 🙂

বিঃদ্রঃ সবকিছু রিয়েল হার্ডওয়ারে চেক করা। এটা ১০০% কাজ করে। আমার ফোনের ক্যামেরা টা তেমন ভালনা। তাই আর রিয়েল হার্ডওয়ারের ছবি দিলাম না। তবে একটা ভিডিও দিলাম।

See Video

ডাউনলোড

আপনাদের সুবিধার্তে ডাউনলোড লিংকগুলো একত্র করে দিলাম। আশাকরি ড্রপবক্স থেকে ডাউনলোড করতে কোন অসুবিধা হবেনা। 🙂

আরডুইনোতে ইপিরমের ব্যবহার নিয়ে এটাই ছিল আমার জগাখেচুরি টাইপের বিরক্তিকর লেখা। 😛 জানিনা কতটুকু বোঝাতে পেরেছি। তবে চেষ্টা করেছি সহজভাবে বোঝাতে। কোথাও বুঝতে অসুবিধা হলে অবশ্যই টিউমেন্টের মাধ্যমে জানাবেন। ভাল থাকবেন সবাই। সময় সুযোগ হলে দেখা হবে পরবর্তীতে লেখাতে। 🙂

Level 2

আমি এস কে জয়। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 12 বছর 11 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 41 টি টিউন ও 494 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 4 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।

সেরকম দামী কেউ না। খুব সাধারণ একজন মানুষ।প্রোগ্রামিং আর ইলেকট্রনিক্স সব থেকে বেশী ভাল লাগে। তাই এই দুইটাকেই জীবনের কাজ আর শখ হিসাবে যুক্ত করে নিয়েছি।ভাল লাগে শিখতে আর শেখাতে।ব্যাস এতটুকুই!


টিউনস


আরও টিউনস


টিউনারের আরও টিউনস


টিউমেন্টস

প্রিয় টিউনার ,

আমি টেকটিউনস কমিউনিটি ম্যানেজার, শোয়াইব, টেকটিউনস থেকে আপনার সাথে অফিসিয়ালি যোগাযোগ করতে চাচ্ছি।

টেকটিউনস থেকে আপনার সাথে অফিসিয়ালি যোগাযোগ করার জন্য http://techtun.es/2obSQxE লিংকটিতে ক্লিক করে আপনার সাথে যোগাযোগের প্রয়োজনীয় তথ্য সাবমিট করে আমাদের সাহায্য করবেন আশা করছি।

সাবমিট করার পর আমাদের এই ম্যাসেজের রিপ্লাই আপনার কাছ থেকে আশা করছি।

ধন্যবাদ আপনাকে।