আরডুইনো ব্যবহারকারীরা জীবনদশায় Serial লাইব্রেরী সবচেয়ে বেশি ব্যবহার করে থাকে। কিন্তু কেন? এবং ঠিক কোন কোন ক্ষেত্রে Library টি তোমার জন্যও প্রয়োজন হতে পারে? বিষয় গুলো নিয়ে আমরা বিস্তারিত আলোচনা করবো আজকের টিউটরিয়্যালে। আশাকরি মনোযোগ দিয়ে পড়লে, Serial Library’র প্রয়োজনীয়তা এবং ব্যবহার সম্পর্কে তুমি একটি স্পষ্ট ধারণা পেয়ে যাবে।
পূর্বের টিউটোরিয়াল গুলো থেকে ইতিমধ্যে তোমরা আরডুইনোর পাওয়ার ইউনিট, বুটলোডার, ব্রেডবোর্ডে আরডুইনো তৈরি, এবং আরডুইনো IDE ইনস্টল করা শিখে নিয়েছো। যদি ধারাবাহিক ভাবে এবং মনোযোগ দিয়ে বিষয় গুলো প্রাকটিস করে থাকো, আশা করি খুব শিঘ্রই যেকোন ধরণের মাইক্রোকন্ট্রোলার-প্রোজেক্ট তুমি নিজেই তৈরি করতে পারবে।
হ্যালো ওয়ার্ল্ড প্রোজেক্ট :
শিক্ষার্থীরা Programming Language – C ক্লাস গুলোতে সাধারণত Console Application তৈরি করার প্রাকটিস করে থাকে। ফলে প্রোগ্রাম গুলো কম্পিউটারেই অন্যান্য সকল executable (.exe) সফটওয়্যারের মতই Run করে থাকে।
এই Console Application গুলো সাধারণত Operating System এর সহযোগিতা নিয়ে চালু হয়। কিন্তু আমরা যখন Microcontroller এর মধ্যে প্রোগ্রাম রাখবো, তখন সেটি আমাদের কম্পিউটারে নয় বরং মাইক্রোকন্ট্রোলারের মধ্যেই Run করবে। তাই এ ধরণের .exe ফাইল তৈরি করে সেটি চালু করা মাইক্রোকন্ট্রোলারের পক্ষে সম্ভব নয়!
তবে হতাশ হওয়ার কিছু নেই। আমাদের মাইক্রোকন্ট্রোলার যদি তথ্য কম্পিউটারের কাছে পাঠাতে পারে, তাহলে আমরা একটি computer application ব্যবহারের মাধ্যমে Display তে প্রদর্শন করতে পারবো।
Hello World কেন?
প্রত্যেক প্রোগ্রামারের জীবনের প্রথম কোডিং অভিজ্ঞতা শুরু হয় হ্যালো ওয়ার্ল্ড (Hello World) নামক অতি সাধারণ একটি প্রোগ্রামের মাধ্যমে। প্রোগ্রামটির কাজ হলো কম্পিউটার Screen-এ একটি সিম্পল Typical Output Text প্রিন্ট করা।
এই পর্যায়ে ধরেই নেওয়া হয় একজন শিক্ষার্থীর previous কোন প্রোগ্রামিং অভিজ্ঞতা নেই! ফলে শিক্ষার্থীদের উৎসাহ ধরে রাখতে এমন একটি প্রোগ্রামের প্রয়োজন হয় যা continue করতে কোন পূর্ব অভিজ্ঞতার প্রয়োজন নেই।
স্বাভাবিক দৃষ্টিতে প্রোগ্রামটি খুবই সাধারণ মনে হলেও বিষয়টি, প্রথম অবস্থায় একজন প্রোগ্রামারের জীবণের প্রথম coding experience!
কিভাবে কাজ করে?
চলো বিষয়টি আরো একটু স্পষ্ট করি। আমরা চাচ্ছি আমাদের Arduino মাইক্রোকন্ট্রোলার Computer এর কাছে data পাঠাবে এবং আমাদের কম্পিউটারের কাজ হবে সেই data কম্পিউটার-মনিটরে প্রদর্শন করা।
অর্থাৎ এখানে দুইটি electronics device (কম্পিউটার এবং মাইক্রোকন্ট্রোলার) এর মধ্যে কমিউনিকেশন করার বিষয়ে বলা হয়েছে। কম্পিউটারের ক্ষেত্রে খুবই reliable একটি communication port হলো USB। সুতরাং আমরা যদি microcontroller থেকে data গুলো কম্পিউটারের USB Port এ পাঠাতে পারি, তাহলেই কম্পিউটারে সেই ডেটা প্রদর্শন করা সম্ভব হবে।
অপরদিকে আমাদের এই ছোট মাইক্রোকন্ট্রোলার USB সাপোর্ট করে না! মাইক্রোকন্ট্রোলারের ক্ষেত্রে খুবই reliable একটি communication port হলো UART এবং এই ধরণের কমিউনিকেশনে wiring জটিলতা সবচেয়ে কম, অর্থাৎ মাত্র ২টি তারের প্রয়োজন হয়।
তবে এক্ষেত্রে আমাদের এমন একটি converter এর প্রয়োজন হবে, যা UART এর ডেটা গুলো কনভার্ট করে USB Protocol-এ রুপান্তর করবে। এই ধরণের কনভার্টার গুলোকে USB to Serial Converter বলে।
আরডুইনোর সাথেই অলরেডি এই USB to Serial Converter টি জুড়ে দেওয়া হয়েছে। তাই এ পর্যায়ে বিভ্রান্ত হওয়ার কিছু নেই। (এই বিষয়ে বিস্তারিত ভাবে তোমরা পূর্বের টিউটরিয়্যাল থেকে জেনেছো।)
সোর্স কোড
আমরা আরডুইনো প্রোগ্রামিং শুরু করবো, তবে তার আগে আমি তোমাদের একটি মজার বিষয় দেখাতে চাই। তুমি যদি ইতিমধ্যে C Programming জেনে থাকো, তাহলে নিচের ছবিতে থাকা template দুইটিতে একটু মনোযোগ দাও।
বামপাশের প্রোগ্রামটি গতানুগতিক সি প্রোগ্রামিং ক্লাসের একটি সাধারণ template, যা প্রতি ক্লাসেই তোমরা বুঝে বা না-বুঝে রোবটের মতই টাইপ করতে। অপরদিকে ডানপাশের প্রোগ্রামটি আরডুইনোর একটি start-up default template। মনোযোগ দিয়ে লক্ষ্য করলে দেখবে, উভয় প্রোগ্রামের execution flow বা কাজ একই রকম।
বেসিক সি টেমপ্লেট | আরডুইনো টেমপ্লেট |
প্রোগ্রাম execution শুরু হয়, main ফাংশন থেকে। | প্রোগ্রাম execution শুরু হয়, setup ফাংশন থেকে। |
একই কাজের পুনরাবৃত্তি ঘটাবার জন্য while লুপ ব্যবহার করা হয়। | একই কাজের পুনরাবৃত্তি ঘটাবার জন্য loop ফাংশন ব্যবহার করা হয়। |
printf ফাংশনের মাধ্যমে console window তে আউটপুট দেয়। | print ফাংশনের মাধ্যমে Terminal Monitor এ আউটপুট দেয়। |
printf ফংশনটি stdio.h হেডার-ফাইলের মাধ্যমে access করা হয়। | print ফংশনটি Serial ক্লাসের মাধ্যমে access করা হয়। |
printf ফংশনটি ব্যবহারে জন্য stdio.h হেডার-ফাইলটি include করার প্রয়োজন হয়। | print ফংশনটি ব্যবহারে জন্য Serial ক্লাসের সাহায্য নেওয়া হয়। কোন হেডার-ফাইলটি include করার প্রয়োজন নেই। |
প্রোগ্রামঃ
void setup(void) { //Put your code here, to run once: Serial.begin(9600); Serial.print("Hello World!\n"); } void loop(void) { // Put your code here, to run repeatedly: }
প্রোগ্রামের ব্যাখ্যাঃ
Setup Function:
সেটআপ ফাংশন হিসেবে void setup(void) ফাংশনটি প্রোগ্রামের প্রাথমিক সেটআপের কাজগুলো সম্পন্ন করার জন্য ব্যবহার করা হয়। যা আরডুইনো চালু হলে, শুধুমাত্র একবারই রান হয়। সাধারণত এটি হার্ডওয়্যার সেটআপের জন্য ব্যবহার করা হয়। যেমনঃ পিন মোড সেট করা, সিরিয়াল কমিউনিকেশন চালু করা ইত্যাদি।
Comments:
প্রোগ্রামে সিঙ্গেল লাইন কমেন্ট করার জন্য “//” (ডাবল ফরওয়ার্ড স্ল্যাশ) ব্যবহার করা হয়। কমেন্টের মূল কাজ হলো প্রোগ্রামের ব্যাখ্যা লেখা। এর ফলে কোড বুঝতে সহজ হয়। প্রোগ্রামের লজিক কিভাবে কাজ করছে তা সহজ ভাষায় বুঝিয়ে কমেন্টে লিখে দাওয়া যায়। এতে একাধিক প্রোগ্রামার একসাথে কাজও করতে পারবে আবার কোড বুঝতেও সুবিধা হবে। যদি কোনো অংশে সমস্যা থাকে তাহলে কিছু লাইন কমেন্ট করে টেস্ট করা যায়। আবার কোডের কোনো অংশ সাময়িকভাবে বন্ধ রাখতে চাইলে সেটিকে কমেন্ট করা যায়।
অর্থাৎ ডাবল ফরওয়ার্ড স্ল্যাশের দিয়ে শুরু হওয়া যেকোনো লাইন কম্পাইলার উপেক্ষা করে। এটি কোডে কোনো প্রভাব ফেলে না। সাধারণত কোড ব্যাখ্যা করা বা নোট লেখার জন্যই এটি ব্যবহার করা হয়।
BAUD Rate Configuration:
BAUD বলতে বুঝায় “Bits per second Asynchronous Unit Data”। এটি হলো সিরিয়াল কমিউনিকেশনে প্রতি সেকেন্ডে ট্রান্সমিট বা রিসিভ হওয়া data’র সংখ্যা। যা কমিউনিকেশন-স্পিড নির্দেশ করে থাকে। ট্রান্সমিটার এবং রিসিভার উভয়ের BAUD Rate তথা কমিউনিকেশন-স্পিড একই না হলে, সঠিক data আদান-প্রদান সম্ভব নয়।
সিরিয়াল কমিউনিকেশনের জন্য সবচেয়ে বেশি ব্যবহৃত BAUD Rate হলো 9600 bps (Bits per Second)। আরডুইনোতে Serial.begin() ফাংশনের মাধ্যমে BAUD Rate সেট করা হয়।
বেশ কিছু Standard BAUD Rates এর উদাহরণ হলো- 300, 1200, 2400, 4800, 14400, 19200, 38400, 57600, 115200, 230400, 460800, 921600 ইত্যাদি। BAUD Rate উচ্চতর হলে ডেটা ট্রান্সফার দ্রুত হয়, তবে উচ্চ BAUD Rate ব্যবহারের সময় সিগন্যাল ইন্টারফেরেন্স ও ডেটা লসের সম্ভাবনা বাড়তে পারে।
Printing Text:
মাইক্রোকন্ট্রোলারের মধ্যে কি ঘটছে সেটা যেহেতু আমরা দেখতে পাচ্ছি না, debug এক্ষেত্রে খুবই গুরুত্বপূর্ণ একটি বিষয়। সাধারণত debugging এর মাধ্যমে প্রোগ্রামের সমস্যা খুঁজে বের করা, ভ্যারিয়েবলের মান স্ক্রিনে দেখা, বা গুরুত্বপূর্ণ মেসেজ প্রদর্শন করা ইত্যাদি বিভিন্ন ধরণের কাজে Serial Monitor এ প্রায়শ লেখা পাঠাবার প্রয়োজন হয়।
আরডুইনোতে Serial.print() ফাংশন ব্যবহার করে সিরিয়াল মনিটরে ডাটা প্রিন্ট করা হয়।
Loop Function:
একই কাজ বারবার করতে Loop Function ফাংশন ব্যবহার করা হয়। অর্থাৎ যতক্ষণ আরডুইনো বোর্ড অন থাকবে, void loop(void) ফাংশনটি ততক্ষণ চলতে থাকবে।
সেন্সর থেকে ডেটা রিড করা, ডিসপ্লেতে মেসেজ প্রদর্শন করা, এবং সুইচ প্রেস চেক করা ইত্যাদি ধরণের গুরুত্বপূর্ণ কাজ এই Loop ফাংশনে লেখা হয়।
প্রোগ্রাম আপলোডিংঃ
প্রোগ্রাম আপলোডের জন্য প্রথমেই আরডুইনোর USB কেবলটি, তোমার কম্পিউটারের সাথে কানেক্ট করে নাও। তুমি যদি উইনডোজ অপারেটিং সিস্টেম চালিত কম্পিউটার ব্যবহার করে থাকো তাহলে Start বাটনে এ ক্লিক করে Arduino লিখে সার্চ করো। অতঃপর Search Result থেকে আরডুইনোর Launcher Icon টিতে ক্লিক করার মাধ্যমে Arduino IDE টি চালু করে নাও।
Arduino IDE টি চালু হলে, নিচের ছবির মত একটি উইনডোউ দেখতে পাবে। একে “স্কেচ” বলে। আরডুইনোর জন্য প্রোগ্রাম লিখতে এই স্কেচ-উইনডোউ ব্যবহার করা হয়।
এই স্কেচ-উইনডোউতে এখন আমরা “Hello World” প্রোগ্রামটি লিখবো।
প্রোগ্রামটি লেখা শেষ হলে, সর্বপ্রথম Save করে নিতে হবে। এক্ষেত্রে File এ গিয়ে Save As অপশনে ক্লিক করে তোমার পছন্দমত লোকেশনে প্রোগ্রামটি Save করে নিতে পারো।
এখানে আমি লোকেশনের (saved directory) জন্য Desktop সিলেক্ট করেছি এবং File name হিসাবে helloWorld টাইপ করে প্রোগ্রামটি Save করে নিচ্ছি।
Save হয়ে গেলে নিচে মেসেজবারে Done Saving মেসেজটি দেখতে পাবে।
তোমাকে এখন বোর্ড সিলেক্ট করতে হবে। আরডুইনোর বোর্ডের অনেক variant রয়েছে, (যেমন: Arduino UNO, NANO, MEGA) তুমি কোন বোর্ডটি ব্যবহার করছো সেটি এই পর্যায়ে সিলেক্ট করে দিতে হবে। আমি এই মূহুর্তে Arduino UNO R3 ব্যবহার করছি তাই Tools মেনু থেকে Board: হিসাবে Arduino Uno সিলেক্ট করে নিচ্ছি।
এ পর্যায়ে তোমাকে COM পোর্ট সিলেক্ট করতে হবে। (প্রয়োজনে তোমার কম্পিউটারের Device Manager থেকে আরডুইনোর জন্য assign হওয়া COM পোর্ট নম্বরটি দেখে নিতে পারো।)
অতঃপর আবারও Tools মেনু থেকে Port: হিসাবে assign হওয়া COM পোর্ট সিলেক্ট করে দাও। আমার ক্ষেত্রে পোর্ট নম্বর ছিলো COM3, তাই আমি COM3 (Arduino Uno) অপশনটি সিলেক্ট করেছি। (তোমার ক্ষেত্রে পোর্ট নম্বরটি ভিন্ন হতে পারে। এটি নিয়ে উদ্বিগ্ন হওয়ার কিছু নেই।)
এ পর্যায়ে আমরা আমাদের helloWorld.ino প্রোগ্রামটি compile করবো। অর্থাৎ আমাদের Programming Language C/C++ ব্যবহার করে লেখা প্রোগ্রামটিকে এখন আমরা Machine Code এ কনভার্ট করবো। (এই Compilation এর সময় Program এ কোন ভূল থাকলে, compiler তোমাকে সেগুলো মার্ক করে দিবে, এবং তুমি সেগুলো correction করে নেওয়ার সুযোগ পাবে।
Machine Code এ কনভার্ট করা শুনে ভয় পাওয়ার কিছু নেই। তুমি শুধুমাত্র Verify (✓) বাটন ক্লিক করে দাও, বাকি সব কাজ Arduino IDE তোমাকে করে দিবে। প্রোগ্রামটি Compiled হয়ে গেলে নিচের মত Done compiling মেসেজ দেখতে পাবে।
এখন আমাদের সর্বশেষ স্টেপ হলো কনভার্ট হওয়া Machine Code টি Arduino Uno তে ব্যবহৃত ATmega328P মাইক্রোকন্ট্রোলারের ভিতর লোড করা। এজন্য Arduino IDE’র মেনু আইকন থেকে Upload (→) বাটন ক্লিক করে দাও। আপলোড হয়ে গেলে নিচে Done uploading মেসেজ দেখতে পাবে। অর্থাৎ আমাদের লেখা Hello World প্রোগ্রামটি Arduino UNO বোর্ডে আপলোড হয়ে গিয়েছে।
আউটপুটঃ
প্রোগ্রাম আপলোড হওয়ার পর, Output সিরিয়াল মনিটরে দেখতে Serial Monitor উইনডোউটি চালু করতে হবে। এ জন্য Tools মেনু থেকে Serial Monitor অপশনে ক্লিক বা Keyboard Shortcut হিসাবে Ctrl+Shift+M বাটন প্রেস করতে পারো।
অথবা ডানপাশের উপরের দিক (Top Right Corner) থেকে “🔎” আইকনটিতে ক্লিক করলেও সরাসরি Serial Monitor ওপেন হবে।
লক্ষ্য করে দেখো Serial Monitor-এ আমাদের কাঙ্খিত Hello World লেখাটি প্রিন্ট হয়েছে।
লেখকের কথাঃ
আশাকরি তোমরা আমার টিউটরিয়্যাল গুলো পর্যায়ক্রমে ধারাবাহিক ভাবে পড়ার পাশাপাশি হাতে-কলমে প্রাকটিস করছো। সব সময় মনে রাখবে, এসব ক্ষেত্রে প্রাকটিসের কোন বিকল্প নেই।
প্রাকটিস করতে গিয়ে বিষয় ভিত্তিক কোন প্রশ্ন মনে হলে, কমেন্টে আমাকে জানাতে পারো। আমি সব সময় চেষ্ট করে থাকি আমার জ্ঞানের আলোকে তোমাদের সকল প্রশ্নের উত্তর দেওয়ার।
ভালো থেকো। খুব শিঘ্রই ফিরে আসছি পরবর্তী টিউটরিয়্যাল নিয়ে।
আল্লাহ হাফেজ।