প্রথমেই বলে নেই অরডুইনো হোলো বহুল জনপ্রিয় ওপেন সোর্স হার্ডওয়্যার প্লাটফরম। এটা দিয়ে আপনি অনেক দ্রুত আপনার যেকোনো প্রোজেক্ট শুরু করতে পারেন, সেটা হতে পারে একটা এলইডি(LED) জ্বালানো থেকে শুরু করে আপনার ঘরের যাবতীয় কাজ অটোমেশন করে ফেলা। তাহলে বলতে পারেন এই লেখাটির উদ্দেশ্য কি? অরডুইনো শেখানো, যদি তাই হয় তবে শিরোনামের সাথে যাচ্ছেনাতো।
উত্তরঃ আমি আপনাদের অরডুইনো শেখাবো না। আমি দেখাবো কিভাবে অরডুইনো দিয়ে মাইক্রোকন্ট্রোলার প্রোগ্রাম করা যায়। এখন আপনার প্রশ্নটি হতে পারে সেটা করার জন্য তো অন্যান্ন সফটওয়্যার এবং হার্ডওয়্যার রয়েছে! আপনি ঠিকই ধরেছেন, কিন্তু ওইসব প্রোগ্রামার গুলো খুবই ব্যয় সাপেক্ষ। আর আপনার কম্পিউটারে যদি সিরিয়াল পোর্ট না থাকে তবে পড়ে যাবেন মহা ঝামেলায়। তো সেই হিসেবে অরডুইনো দিয়ে মাইক্রোকন্ট্রোলার প্রোগ্রাম করা তুলনামুলক সস্তা। কারন আপনি একবার একটা অরডুইনো কিনলে সেটা আরোও অন্যান্ন অনেক কাজে ব্যবহার করতে পারবেন। তাহলে চলুন শিখে ফেলি কাজটি কিভাবে করা যায়। কখন কোনটা কাজে লেগে যায় তা কি বলা যায়।
আমাদের কাজের সুবিধার্তে আমাদের কাজটাকে কয়েকটা ভাগে ভাগ করে নেব। সুতরাং প্রক্রিয়াগুলো হবেঃ
১. উপকরনগুলি যোগার করা।
২. অরডুইনো বোর্ডে ArduinoISP প্রোগ্রামকে আপলোড করা।
৩. আমরা যে মাইক্রোকন্ট্রোলারটিকে প্রোগ্রাম করার সিদ্ধান্ত নিয়েছি সেটিকে অরডুইনো বোর্ডের সাথে সংযুক্ত করা।
৪. মাইক্রোকন্ট্রোলারটিকে প্রোগ্রাম করার জন্য যাবতীয় সফটওয়্যার ইন্সটল করা।
৫. মাইক্রোকন্ট্রোলারটিকে প্রোগ্রাম করার জন্য এর Makefile এর কনফিগারেশন পরিবর্তন করা।
৬. আমাদের প্রোগ্রামটিকে লিখে ফেলা।
৭. সবশেষে প্রোগ্রামটিকে মাইক্রোকন্ট্রোলারে আপলোড করা এবং ফলাফল বিশ্লেষণ করা।
সবগুলি উপকরন যোগার করার পর আমাদের প্রথম কাজ হবে ArduinoISP প্রোগ্রামটাকে অরডুইনো বোর্ডে আপলোড করা। এজন্য আমাদের Arduino IDE সফটওয়্যার আমাদের কম্পিউটারে ইন্সটল করা থাকতে হবে। না থাকলে এই লিঙ্ক https://www.arduino.cc/en/Main/Software এ যেয়ে ডাউনলোড করে ইন্সটল করে নিন। এবার Arduino IDE ওপেন করেন। এবার ধাপে ধাপে চিত্রের মত করে অনুসরন করুন।
File মেনু থেকে Examples মেনুতে যান, এখন দেখেন সাব মেনু লিস্টগুলোতে ArduinoISP টা দেখাচ্ছে। ওইটাতে ক্লিক করে ওপেন করেন। নিচের চিত্র খেয়াল করুন।
এবার Tools মেনুতে যান। Board মেনু থেকে Arduino/ Genuino Uno বোর্ড সিলেক্ট করুন। নিচের চিত্র খেয়াল করুন।
এবার Board এর নিচে Port মেনু থেকে যে পোর্টে কমিউনিকেট করতে চান সেটা সিলেক্ট করুন। নিচের চিত্র খেয়াল করুন।
এবার Tools এর Programmer মেনু থেকে ArduinoISP সিলেক্ট করুন। নিচের চিত্র খেয়াল করুন।
এবার Sketch মেনু থেকে Upload এ ক্লিক করুন। অথবা চিত্রে দেখানো আপলোড বাটনে ক্লিক করুন।
কিছুক্ষন পরে আপনি আপলোড হয়েছে এই মর্মে একটি সাকসেস মেসেজ পাবেন। নিচের চিত্রের মত।
আমি এই টিউটিরিয়ালে যে মাইক্রোকন্ট্রোলার ব্যবহার করবো সেটা এটমেল এর Atmega8A । সবচেয়ে ভালো হয় যদি আপনি Atmega8 সিরিজের কোনো মাইক্রোকন্ট্রোলার সংগ্রহ করতে পারেন। না করতে পারলেও কোনো আসুবিধা নেই। এই পদ্ধতিতে আপনি Atmega16, Atmega32, Atmega328 ইত্যাদি মাইক্রোকন্ট্রোলার প্রোগ্রাম করতে পারবেন। নিচের ছবিতে Atmega8A পিন ডায়াগ্রামটা দেখুন।
এই মাইক্রোকন্ট্রোলারটির ১, ১৭, ১৮, ১৯ পিনগুলির দিকে লক্ষ্য করুন। ১ নম্বর পিন হচ্ছে রিসেট পিন। ১৭ নম্বর পিন হচ্ছে MOSI। ১৮ নম্বর পিন হচ্ছে MISO এবং ১৯ নম্বর পিন হচ্ছে SCK। মাইক্রোকন্ট্রোলারটিকে প্রোগ্রাম করার সময় আমাদের এই পিনগুলো ব্যবহার করতে হবে। এখন কথা হচ্ছে আপনি এটমেল সব মাইক্রোকন্ট্রোলারে এই পিনগুলি পাবেন, শুধু পিন নম্বর ভিন্ন হতে পারে। তাতে কোনো অসুবিধা নেই। শুধু পিন কনফিগারেশন এর নিয়ম ঠিক থাকলেই হোলো।
এখন অরডুইনো এর ১০ নম্বর পিনের সাথে আপনার মাইক্রোকন্ট্রোলারটির রিসেট পিনের সাথে তার দিয়ে কানেক্ট করুন। এবার অরডুইনো এর ১১ নম্বর পিন মাইক্রোকন্ট্রোলার এর MOSI পিনের সাথে কানেক্ট করুন। এটা আমার ক্ষেত্রে ১৭ নম্বর পিন। আপনি যদি একই মাইক্রোকন্ট্রোলার ব্যবহার করে থাকেন তবে আপনার পিন নম্বরও ১৭ হবে। অন্যথায় মিলিয়ে দেখুন। এরপর অরডুইনো এর ১২ পিনের সাথে MISO পিন কানেক্ট করুন। এরপর অরডুইনো এর ১৩ নম্বর পিনের সাথে মাইক্রোকন্ট্রোলার এর SCK পিনটি কানেক্ট করুন। এখন মাইক্রোকন্ট্রোলারে পাওয়ার এবং গ্রাউন্ড কানেকশন দিতে হবে। এটা আপনি অরডুইনো এর ৫ ভোল্ট পিনের সাথে মাইক্রোকন্ট্রোলারটির VCC পিন এবং যেকোনো একটি গ্রাউন্ড পিনের সাথে মাইক্রোকন্ট্রোলার এর GND পিনের সাথে কানেক্ট করিয়ে দিন। আপাতত আপনার অরডুইনোর সাথে মাইক্রোকন্ট্রোলারটির সংযোগ পরিপূর্ণ হলো।
তবে এখনো একটি কাজ বাকি আছে সেটা হচ্ছে এলইডি(LED) পিনকে কানেক্ট করানো। এইখানে একটা ব্যাপার পরিষ্কার করে নেই। আমি আমার ব্যবহৃত মাইক্রোকন্ট্রোলারটির D পোর্টের সকল পিনকে আউটপুট পিন হিসেবে নির্ধারন করে দিয়েছি। তাই আমি এলইডি(LED) এর পজেটিভ প্রান্তকে D পোর্টের ৬ নম্বর বা মাইক্রোকন্ট্রোলারের ১২ নম্বর পিনের সাথে কানেক্ট করেছি। আপনি এটা আপনার মতো করে কানেক্ট করে নিবেন। আর এলইডি(LED) এর গ্রাউন্ড পিনের সাথে অরডুইনো বা মাইক্রোকন্ট্রোলারের GND পিনের সাথে কানেক্ট করলেই হলো। অনেকটা নিচের ছবির মতো।
প্রথমেই আমাদের যেই সফটওয়্যারটা লাগবে সেটা হচ্ছে WinAVR। আপনি এই সফটওয়্যারটা পাবেন এই লিঙ্ক এ গেলে https://sourceforge.net/projects/winavr/files/। কোনো কনফিগারেশন পরিবর্তন না করেই ইন্সটল করুন।
এবার ডেস্কটপ এ একটি ফোল্ডার তৈরি করুন এবং যেকোনো একটি নাম দিন। যেমন আমি দিয়েছি avr। এখন এই ফোল্ডারের ভিতরে একটি ফাইল তৈরি করুন আর নাম দিন Makefile। মনে রাখবেন এই ফাইলের কোনো এক্সটেনশন হবেনা, শুধু Makefile হবে। এবার আপনার পছন্দের যেকোনো ফাইল এডিটরে যেয়ে ফাইলটি ওপেন করুন। আর তাতে নিচের কোডটুকু কপি করে পেস্ট করুন।
# DEVICE The AVR device you compile for # CLOCK Target AVR clock rate in Hertz # OBJECTS The object files created from your source files. This list is # usually the same as the list of source files with suffix ".o". # PROGRAMMER Options to avrdude which define the hardware you use for # uploading to the AVR and the interface where this hardware # is connected. # FUSES Parameters for avrdude to flash the fuses appropriately. DEVICE = atmega8 CLOCK = 8000000 PROGRAMMER = -c arduino -P COM3 -b 19200 OBJECTS = main.o FUSES = -U lfuse:w:0xe1:m -U hfuse:w:0xd9:m ###################################################################### ###################################################################### # Tune the lines below only if you know what you are doing: AVRDUDE = avrdude $(PROGRAMMER) -p $(DEVICE) COMPILE = avr-gcc -Wall -Os -DF_CPU=$(CLOCK) -mmcu=$(DEVICE) # symbolic targets: all: main.hex .c.o: $(COMPILE) -c $< -o $@ .S.o: $(COMPILE) -x assembler-with-cpp -c $< -o $@ # "-x assembler-with-cpp" should not be necessary since this is the default # file type for the .S (with capital S) extension. However, upper case # characters are not always preserved on Windows. To ensure WinAVR # compatibility define the file type manually. .c.s: $(COMPILE) -S $< -o $@ flash: all $(AVRDUDE) -U flash:w:main.hex:i fuse: $(AVRDUDE) $(FUSES) install: flash fuse # if you use a bootloader, change the command below appropriately: load: all bootloadHID main.hex clean: rm -f main.hex main.elf $(OBJECTS) # file targets: main.elf: $(OBJECTS) $(COMPILE) -o main.elf $(OBJECTS) main.hex: main.elf rm -f main.hex avr-objcopy -j .text -j .data -O ihex main.elf main.hex # If you have an EEPROM section, you must also create a hex file for the # EEPROM and add it to the "flash" target. # Targets for code debugging and analysis: disasm: main.elf avr-objdump -d main.elf cpp: $(COMPILE) -E main.c
এবার কিছু যায়গায় পরিবর্তন করুন আপনার হার্ডওয়্যার ফিটিংস অনুযায়ী। চলুন ব্যাখা করি কোথায় কেমন পরিবর্তন করতে হবে। ১০ নম্বর লাইনে দেখুন লেখা আছে DEVICE = atmega8। কারন আমি এই মাইক্রোকন্ট্রোলারটি ব্যবহার করেছি। এখানে আপনি যেটা ব্যবহার করছেন সেটির নাম দিবেন। এরপর ১১ নম্বর লাইনে আছে CLOCK = 8000000। আমি যেহেতু মাইক্রোকন্ট্রোলারের ডিফল্ট 8MHz ক্লক ব্যবহার করেছি তাই আমি এটা দিয়েছি। আপনি আপনার মত করে পরিবর্তন করে নিন বা যেমন আছে তেমন রেখে দিন।
এরপর ১২ নম্বর লাইনে আছে PROGRAMMER = -c arduino -P COM3 -b 19200। আপনার কি মনে আছে আপনি যখন Arduino IDE দিয়ে অরডুইনো বোর্ডে প্রোগ্রাম আপলোড করেছিলেন তখন কোন পোর্ট সিলেক্ট করেছিলেন। সুতরাং এখন আপনি COM3 এর স্থানে আপনি যে পোর্ট সিলেক্ট করেছিলেন সেটা লিখুন। এবার আসি সবচেয়ে গুরুত্ত্বপূর্ণ লাইন ১৪ নম্বরে। এখানে আছে FUSES = -U lfuse:w:0x64:m -U hfuse:w:0xdd:m -U efuse:w:0xff:m। এইটা লেখার সময় সাবধান থাকুন। কারন এটা ভুলভাল হলে আপনার মাইক্রোকন্ট্রোলারটি একেবারে বাতিল হয়ে যেতে পারে। আর আপনার মাইক্রোকন্ট্রোলারের ক্ষেত্রে আপনি কি লিখবেন তা যদি বুঝতে না পারেন তবে এই
http://www.engbedded.com/fusecalc/ ওয়েবসাইট এ চলে যান। আপনি যে মাইক্রোকন্ট্রোলারটি নিয়ে কাজ করছেন সেইটা সিলেক্ট করুন। একেবারে নিচের দিকে -U lfuse:w:0x64:m -U hfuse:w:0xdd:m এইরকম কিছু দেখতে পাবেন, ওটা কপি করে পেস্ট করুন। ওটা আপনার বাই-ডিফল্ট ফিউস বিট। এবার ফাইলটি সেভ করুন।
আমরা আমাদের কাজের একদম শেষের দিকে চলে এসেছি। এখন আমরা আমাদের মাইক্রোকন্ট্রোলারটির জন্য প্রোগ্রাম লিখবো। আপনি আপনার প্রোজেক্ট ফোল্ডারের ভিতরে main.c নামে আরও একটি ফাইল তৈরি করুন। এই ফাইলেই আমরা আমাদের প্রয়োজনীয় কোডটুকু লিখবো। এখন আপনার ফাইল এডিটর দিয়ে ফাইলটি ওপেন করুন। তাতে নিচের কোডটুকু কপি করে পেস্ট করুন আগের মতোই।
#define F_CPU 1000000 // CPU frequency for proper time calculation in delay function #include <avr/io.> #include <util/delay.h> int main(void) { DDRD = 0xFF; //Nakes PORTC as Output while(1) //infinite loop { PORTD = 0xFF; //Turns ON All LEDs _delay_ms(1000); //1 second delay PORTD= 0x00; //Turns OFF All LEDs _delay_ms(1000); //1 second delay } }
আপনি ৮ নম্বর লাইনে দেখছেন আমি D পোর্টকে আউটপুট পোর্ট হিসেবে নির্ধারন করেছি। আপনি আপনার প্রয়োজন অনুযায়ী পরিবর্তন করে নিতে পারেন। আশা করি পরের কোডটুকু বুঝতে অসুবিধা হবেনা। তারপরও যদি বুঝতে সমস্যা হয় তবে টিউমেন্টর ঘর তো খোলাই রইলো।
এখন আপনি কমান্ড প্রম্পট ওপেন করুন। এখন যেখানে আপনি প্রোজেক্ট ফোল্ডার তৈরি করেছেন কমান্ডলাইন দিয়ে ওই ফোল্ডারে প্রবেশ করুন। এখন আপনার কমান্ডলাইনে লিখুন make flash। আপনি দেখবেন কিছুক্ষনের মধ্যেই আপনার প্রোগ্রামটি মাইক্রোকন্ট্রোলারে আপলোড হয়ে গেছে এবং এলইডি(LED) টি জ্বলানেভা করছে। অনেকটা নিচের চিত্রেও মত।
হয়ে গেলো আপনার অরডুইনো দিয়ে মাইক্রোকন্ট্রোলার প্রোগ্রাম করা। এখন আপনি চাইলে একই পদ্ধতিতে আরো জটিল প্রোগ্রাম করে আপনার প্রোজেক্ট গুলো তৈরি করতে পারেন। আপনার সফলতার কামনায় এখানেই শেষ করছি। তবে হ্যাঁ আপনার শুরু থেকে শেষ পর্যন্ত কোথাও বুঝতে যদি কোনো সমস্যা হয়, তবে অবশ্যই টিউমেন্ট করবেন। আমি চেস্টা করবো সেটা বুঝিয়ে দেওয়ার জন্য। আর কোথাও আমার ভুল চোখে পড়লে শুধরে দেবার আমন্ত্রন রইলো। আর আপনাদের সৌজন্যে আমার প্রোগ্রামটার একটা ভিডিও দিয়ে দিলাম।
আমি সুদর্শন বিশ্বাস। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 14 বছর 2 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 3 টি টিউন ও 18 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 0 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।
টিউন ভিউ হচ্ছে না কেন? একটু উন্নত টিউন করতে হবে সম্ভবত ।