How to write an Arduino Library | নিজেই লিখুন আরডুইনো লাইব্রেরি
আরডুইনো আইডিইতে প্রোগ্রাম লিখতে হলে আমরা বেশকিছু লাইব্রেরি ব্যবহার করি। কিছু লাইব্রেরি আরডুইনোতেই ইন-বিল্ট। যেমনঃ Liquidcrystal.h, SD.h, servo.h ইত্যাদি।
কিছু কিছু লাইব্রেরি আবার ইন্টারনেট থেকে ডাউনলোড করে ইন্সটল করে নিতে হয়। যেমন, TFT.h, TinyGPS.h, ইত্যাদি আরও অনেক লাইব্রেরি। ইন্টারনেটে আরডুইনো লাইব্রেরির সহজলভ্যতা আরডুইনোর প্রজেক্টগুলোকে করেছে সংক্ষিপ্ত এবং সকলের জন্য সহজ। লাইব্রেরি ইন্সটল করে কয়েকলাইন কোড লিখলেই প্রজেক্ট শেষ। কিন্তু, যদি এমনকোনো ডিভাইস নিয়ে আমাদের কখনও কাজ করতে হয়, যার লাইব্রেরি রেডিমেড নেই? আমরা কি পারব ইন্টারনেটের উপর নির্ভর না করে নিজেদের লাইব্রেরি নিজেরাই লিখতে?
এই টিউটোরিয়ালে আমরা শিখব লাইব্রেরি লেখা। উদাহরন হিসেবে বেছে নিলাম Gravity: Analog Turbidity Sensor For Arduino। এই সেন্সরটি পানির টারবিডিটি অর্থ্যাৎ, পানি কতটা ঘোলা তা নির্ণয় করে। Turbidity sensor এর আউটপুট পিন থেকে অ্যানালগ রিড করে প্রথমে ভোল্টেজে রুপান্তর করে নিতে হয়। অর্থ্যাৎ,
Voltage=analogvalue*5.00/1024.00
তারপর এই ভোল্টেজ থেকে একটি সূত্রের সাহায্যে টারবিডিটি নির্ণয় করা হয়। সূত্রটি হচ্ছে,
Turbidity=-1120*Voltage²+5720voltage-4352.9
এই Turbidity sensor এর জন্যই আমরা একটি আরডুইনো লাইব্রেরি তৈরী করব। আগেই বলে রাখি, টারবিডিটি সেন্সরটি ব্যবহার করা খুবই সহজ। কোনোরকম লাইব্রেরি ছাড়াই অল্প কয়েকলাইন কোড লিখেই ব্যবহার করা যায়। যেহেতু, লাইব্রেরি লেখা শিখতে একটি খুব সহজ কিন্তু কার্যকর একটি উদাহরন দরকার, তাই এই সেন্সরের জন্যই লাইব্রেরি লেখা হল।
প্রয়োজনীয় যন্ত্রপাতি | পরিমাণ | প্রোডাক্ট লিংক |
Arduino UNO-R3 | 1 | এখানে ক্লিক করুন |
Gravity: Analog Turbidity Sensor For Arduino | 1 | এখানে ক্লিক করুন |
Male to male jumpers | 3 | এখানে ক্লিক করুন |
সার্কিট কানেকশনঃ
আরডুইনো এবং টারবিডিটি সেন্সরের মধ্যে নিচের কানেকশনটি সম্পন্ন করুন।
Arduino UNO-R3 | Turbidity sensor |
5V | VCC |
GND | GND |
A0 | Output |
লাইব্রেরি ও মূল প্রোগ্রামঃ
যেকোনো আরডুইনো লাইব্রেরিতে দুটি ফাইল থাকবেই। একটি হল, .cpp আরেকটি .h। সুতরাং আজকে উদাহরনস্বরুপ যে প্রোগ্রামটি লিখব তাতে তিনটি ফাইল থাকবে। যার মধ্যে দুটি হল লাইব্রেরি ফাইল, আরেকটি মূল প্রোগ্রাম।
প্রথমে আমরা আরডুইনো আইডিইতে একটি নতুন ফাইল ওপেন করবো। যার নাম হবে-turbidity.ino। এরপর add new tab এ ক্লিক করে দুটি নতুন ট্যাব যোগ করব।
একটির নাম দেব turbidity.h। আরেকটির নাম দেব turbidity.cpp।
turbidity.h– এটি হচ্ছে হেডার ফাইল। এই ফাইলে সকল ক্লাস এবং ক্লাসের অন্তর্ভুক্ত অবজেক্ট এবং ফাংশনগুলোকে ডিভাইন করা হবে।
উপরের ছবিটি হচ্ছে turbitity.h অংশের কোড। এখানে Turbidity নামে একটি ক্লাস ডিফাইন করা হয়েছে। ক্লাসটিতে রয়েছে একই নামের একটি কন্সট্রাকটর। আরও আছে দুটি ফাংশন ফাংশন দুটির নাম হচ্ছে voltagecalc() এবং turbiditycalc(). এই ফাংশনদুটি যথাক্রমে টারবিডিটি সেন্সরের অ্যানালগ আউটপুট ভোল্টেজ এবং টারবিডিটি হিসাব করবে। turbidity.ino ফাইলটির শুরুতেই turbidity.h ফাইলটি ইনক্লুড করতে হবে।
turbidity.cpp-এই ফাইলের শুরুতেও turbidity.h কে ইনক্লুড করে নিতে হবে। turbidity.h এ যেসকল কন্সট্রাকটর এবং ফাংশন ডিফাইন করা হয়েছে, সেই ফাংশনগুলো লেখা হবে।
এখানে, শুরুতেই sensorvalue নামক একটি ইন্টিজার টাইপ গ্লোবাল ভ্যারিয়েবল ডিক্লেয়ার করা হয়েছে।আমাদের এক্সপেরিমেন্টে টারবিডিটি সেন্সরের আউটপুট আরডুইনোর A0 পিনের সাথে কানেক্ট করা ছিল। তাই, এখানে আমরা লিখেছি-
int sensorvalue=A0;
এরপরেই আরেকটি voltage নামক একটি ফ্লোট টাইপ গ্লোবাল ভ্যরিয়েবল ডিক্লেয়ার করা হয়েছে।
float voltage;
voltagecalc() নামক ফাংশনটি যেহেতু Turbidity Class এর সদস্য, তাই ফাংশনের নামের শুরুতে Turbidity:: লেখা হয়েছে।
float Turbidity::voltagecalc()
{
int sensorvalue=analogRead(sensorpin);
float voltage=sensorvalue*5.00/1024.00;
return(voltage);
}
এই ফাংশনটি A0 পিনের অ্যানালগ ভ্যালু রিড করে sensorvalue নামক ভ্যারিয়েবলে সেইভ করে। তারপর সেন্সরভ্যালুকে ভোল্টেজে রুপান্তর করে voltage নামক ভ্যারিয়েবলে জমা রাখে।
এই ফাংশনটিকে কল করলে ভাংশনটি ভোল্টেজ রিটার্ন করবে।
একইভাবে turbiditycalc() নামক ফাংশনটি ভোল্টেজ থেকে টারবিডিটি হিসাব করে টারবিডিটি রিটার্ন করবে।
float Turbidity::turbiditycalc()
{
float ax2=-1120.40*voltage;
ax2=ax2*voltage;
float bx=5742.30*voltage;
float c=-4352.90;
float turbidity=ax2+bx+c;
return(turbidity);
}
এবার মূল প্রোগ্রামে যাওয়া যাক।
turbidity.ino– এটি হচ্ছে মূল প্রোগ্রাম।
turbidy.cpp ফাইলে যে ফাংশনগুলো লেখা হয়েছে সেগুলোকেই মূল প্রোগ্রামে কল করা হবে। আগেই বলা হয়েছে প্রোগ্রামের শুরুতে অবশ্যই turbidity.h হেডার ফাইলকে ইনক্লুড করে নিতে হবে।
এখানে, Turbidity ক্লাসটির একটি অবজেক্ট ডিক্লেয়ার করা হয়েছে।
Turbidity turbidity;
সেটআপ ফাংশনে ৯৬০০ বড রেটে সিরিয়াল কমিউনিকেশন শুরু করা হয়েছে।
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
লুপ ফাংশনে Turbidity ক্লাসের voltagecalc() এবং turbiditycalc() ফাংশনকে কল করা হয়েছে।
void loop() {
// put your main code here, to run repeatedly:
Serial.print("Voltage:");
Serial.print(turbidity.voltagecalc());
Serial.print(", ");
Serial.print("Turbidity:");
Serial.println(turbidity.turbiditycalc());
delay(2000);
}
এবং এই .ino ফাইলটি আরডুইনোতে আপলোড করার পর আমরা সিরিয়াল মনিটরে টারবিডিটি সেন্সরের আউটপুট দেখতে পাব।
লাইব্রেরি ইন্সটল করাঃ কোডটি যেখানে সেইভ হয়েছে সেই ফোল্ডারে যান। তারপর .cpp ও .h ফাইলদুটো কপি করুন।
তারপর, আপনার কম্পিউটারে আরডুইনো যে ড্রাইভে ইন্সটল করা সেই ড্রাইভে Arduino ফোল্ডারে ক্লিক করুন। তারপর libraries ফোল্ডারের ভেতরে turbidity নামক একটি নতুন ফোল্ডার খুলুন। তারপর কপি করা ফাইলদুটো ওখানে পেস্ট করে দিন। লাইব্রেরিটি ইন্সটল হয়ে গেছে। ভবিষ্যতে অন্য যেকোনো প্রোগ্রামে এই লাইব্রেরিকে ইনক্লুড এবং ব্যবহার করা যাবে।
এবার ছোট্ট আরও একটা কাজ বাকি। এটা না করলেও এই লাইব্রেরি ভালোভাবেই কাজ করবে। তবে ফার্নিশড লুকের জন্য এটি প্রয়োজন। প্রোগ্রামের ছবিগুলোতে লক্ষ্য করুন, ক্লাস এবং ফাংশনগুলোর নাম কমলা রঙয়ে লেখা। এটা কিন্তু শুরু থেকেই এমন ছিল না। কি-ওয়ার্ড হাইলাইটিং এর জন্য, লাইব্রেরিটি যে ফোল্ডারে একটু আগেই সেইভ করা হল, সেই ফোল্ডারে keywords.txt(সব ছোট হাতের হতে হবে) নামক একটি টেক্সট ফাইল ক্রিয়েট করুন।
এবার টেক্সট ফাইলটিতে আমাদের তৈরী করা লাইব্রেরির ক্লাস এবং ফাংশনগুলোর নাম লিখুন। ক্লাসগুলোকে KEYWORD1 এবং ফাংশনগুলোকে KEYWORD2 হিসেবে ডিফাইন করতে হবে। ক্লাস/ফাংশনের নাম এবং KEYWORD1/2 এর মাঝখানে একটি ট্যাব দেওয়া প্রয়োজন।
আমাদের লাইব্রেরি বানানো শেষ।
পরবর্তী টিউটোরিয়ালে আমরা এই লাইব্রেরি ব্যবহার করেই একটি টারবিডিটি মিটার তৈরী করব।