সুচিপত্র:

কীভাবে রোবো-বেলহপ তৈরি করবেন: 3 টি ধাপ
কীভাবে রোবো-বেলহপ তৈরি করবেন: 3 টি ধাপ

ভিডিও: কীভাবে রোবো-বেলহপ তৈরি করবেন: 3 টি ধাপ

ভিডিও: কীভাবে রোবো-বেলহপ তৈরি করবেন: 3 টি ধাপ
ভিডিও: Kivabe Meyeder Aador Korte Hoy || Dr. Rubi 2024, নভেম্বর
Anonim

লেখক দ্বারা আরো অনুসরণ করুন:

কিভাবে iRobot Create বৃত্তি মিনি-প্রতিযোগিতায় প্রবেশ করবেন
কিভাবে iRobot Create বৃত্তি মিনি-প্রতিযোগিতায় প্রবেশ করবেন
কিভাবে iRobot Create বৃত্তি মিনি-প্রতিযোগিতায় প্রবেশ করবেন
কিভাবে iRobot Create বৃত্তি মিনি-প্রতিযোগিতায় প্রবেশ করবেন
LOLCats, Meme cats, cat macros, বা বিড়ালের ছবি কিভাবে মজার ক্যাপশন দিয়ে তৈরি করবেন
LOLCats, Meme cats, cat macros, বা বিড়ালের ছবি কিভাবে মজার ক্যাপশন দিয়ে তৈরি করবেন
LOLCats, Meme cats, cat macros, বা বিড়ালের ছবি কিভাবে মজার ক্যাপশন দিয়ে তৈরি করবেন
LOLCats, Meme cats, cat macros, বা বিড়ালের ছবি কিভাবে মজার ক্যাপশন দিয়ে তৈরি করবেন

সম্পর্কে: আমি জিনিসগুলি আলাদা করে নিতে এবং সেগুলি কীভাবে কাজ করে তা খুঁজে বের করতে পছন্দ করি। আমি সাধারণত এর পরে আগ্রহ হারিয়ে ফেলি। জেফ্রিফ সম্পর্কে আরও

চলমান বেলহপ তৈরি করতে iRobot ক্রিয়েট কিভাবে ব্যবহার করতে হয় তা এই নির্দেশযোগ্য দেখায়। এটি ক্যারোলড্যান্সারের নির্দেশাবলীর অনুমতি নিয়ে সম্পূর্ণরূপে উত্তোলন করা হয়েছিল, এবং আমি এটি আমাদের প্রতিযোগিতার নমুনা এন্ট্রি হিসাবে রেখেছিলাম। রবো-বেলহপ আপনার ব্যাগ, মুদি, লন্ড্রি ইত্যাদি বহন করার জন্য আপনার ব্যক্তিগত সহকারী হতে পারে, তাই আপনার কাছে নেই প্রতি. বেসিক ক্রিয়েটের উপরে একটি বিন সংযুক্ত থাকে এবং এর মালিকের আইআর ট্রান্সমিটার অনুসরণ করতে দুটি অন-বোর্ড আইআর ডিটেক্টর ব্যবহার করে। খুব বেসিক সি সফটওয়্যার কোড দিয়ে, ব্যবহারকারী ভারী মুদি সামগ্রী, লন্ড্রির একটি বড় বোঝা, বা আপনার রাতারাতি ব্যাগ রোবো -বেলহপ -এ সুরক্ষিত করতে পারে এবং রোবট আপনাকে রাস্তায়, মলের মাধ্যমে, হলের নিচে বা বিমানবন্দরের মাধ্যমে অনুসরণ করতে পারে - - ব্যবহারকারীকে যেখানেই যেতে হবে বেসিক অপারেশন 1) কমান্ড মডিউল চালু করতে রিসেট বোতামটি টিপুন এবং সেন্সরগুলি আকর্ষিত হচ্ছে পরীক্ষা করুন রোবট খুব কাছের পরিসরে আছে 2) রোবো-বেলহপ রুটিন চালানোর জন্য কালো নরম বোতাম টিপুন 3) গোড়ালিতে আইআর ট্রান্সমিটার সংযুক্ত করুন এবং নিশ্চিত করুন যে এটি চালু আছে। তারপর ঝুড়িটি লোড করুন এবং যান! পরিসীমা (খুব দূরে বা খুব তীক্ষ্ণ কোণে), রোবট ধীর গতিতে সংক্ষিপ্ত দূরত্ব অতিক্রম করবে যদি সিগন্যাল আবার তোলা হয় আবার সিগন্যাল খুঁজে বের করার চেষ্টা 4d) যদি আইআর সিগন্যাল সনাক্ত করা হয় কিন্তু রোবট বাধা দেয়, রোবট বাধা 4 ই এর চারপাশে গাড়ি চালানোর চেষ্টা করবে) মালিকের গোড়ালি হার্ডওয়্যার 1 iRobot ভার্চুয়াল ওয়াল ইউনিট - রেডিওশ্যাক থেকে $ 301 IR ডিটেক্টর - রেডিও শ্যাক থেকে $ 31 DB -9 পুরুষ সংযোগকারী - হোম ডিপো থেকে $ 44 6-32 স্ক্রু - $ 2.502 3V ব্যাটারি, আমি টার্গেট থেকে D1 লন্ড্রি বাস্কেট ব্যবহার করেছি - $ 51 অতিরিক্ত চাকায় রোবট ইলেক্ট্রিক্যাল টেপ, তার এবং সোল্ডার তৈরি করুন

ধাপ 1: আইআর সেন্সর আবরণ

ক্রিয়েট রোবটের সামনের অংশে IR সেন্সরের একটি ছোট চেরা ছাড়া সব কভার করার জন্য বৈদ্যুতিক টেপ সংযুক্ত করুন। ভার্চুয়াল ওয়াল ইউনিট ভেঙে ফেলুন এবং ইউনিটের সামনে ছোট সার্কিট বোর্ড বের করুন। এটি কিছুটা জটিল কারণ এখানে প্রচুর লুকানো স্ক্রু এবং প্লাস্টিকের মাউন্ট রয়েছে। আইআর ট্রান্সমিটার সার্কিট বোর্ডে থাকে। আইআর প্রতিফলন এড়াতে আইআর ট্রান্সমিটারকে টিস্যু পেপারের টুকরো দিয়ে েকে দিন। সার্কিট বোর্ডকে একটি স্ট্র্যাপ বা ইলাস্টিক ব্যান্ডের সাথে সংযুক্ত করুন যা আপনার গোড়ালির চারপাশে মোড়ানো যায়। ব্যাটারিগুলিকে সার্কিট বোর্ডে সংযুক্ত করুন যাতে আপনি ব্যাটারিগুলি একটি আরামদায়ক জায়গায় রাখতে পারেন (আমি এটি তৈরি করেছি যাতে আমি আমার পকেটে ব্যাটারি রাখতে পারি)।

দ্বিতীয় আইআর ডিটেক্টরকে ডিবি -9 সংযোগকারীতে সংযুক্ত করুন এবং কার্গো বে ইপোর্ট পিন 3 (সিগন্যাল) এবং পিন 5 (গ্রাউন্ড) োকান। ক্রিয়েট -এ বিদ্যমান আইআর সেন্সরের শীর্ষে ২ য় আইআর ডিটেক্টর সংযুক্ত করুন এবং টিস্যু পেপারের কয়েকটি স্তর দিয়ে coverেকে দিন যতক্ষণ না ২ য় আইআর ডিটেক্টর নির্গতকারীকে এমন দূরত্বে দেখতে না পায় যা আপনি ক্রিয়েট রোবটকে থামাতে চান। তোমাকে আঘাত করা থেকে। আপনি রিসেট বোতামটি চাপার পরে এটি পরীক্ষা করতে পারেন এবং যখন আপনি স্টপ দূরত্বে থাকবেন তখন অ্যাডভান্স এলইডি দেখতে পাবেন।

ধাপ 2: ঝুড়ি সংযুক্ত করুন

6-32 স্ক্রু ব্যবহার করে ঝুড়ি সংযুক্ত করুন। আমি শুধু তৈরি রোবটের শীর্ষে ঘুড়িটি মাউন্ট করেছি। এছাড়াও পিছনের চাকায় স্লাইড করুন যাতে আপনি ক্রিয়েট রোবটের পিছনে ওজন রাখুন।

নোট: - রোবটটি বেশ কিছুটা লোড বহন করতে পারে, কমপক্ষে 30 পাউন্ড। - ছোট আকারটি লাগেজ বহন করার জন্য এটি সবচেয়ে কঠিন অংশ বলে মনে হয়েছিল - আইআর খুব মেজাজী। সম্ভবত ইমেজিং ব্যবহার করা ভাল কিন্তু এটি অনেক বেশি ব্যয়বহুল

ধাপ 3: সোর্স কোড ডাউনলোড করুন।

সোর্স কোড ডাউনলোড করুন।
সোর্স কোড ডাউনলোড করুন।

সোর্স কোড অনুসরণ করে, এবং একটি টেক্সট ফাইলে সংযুক্ত করা হয়:

/*************************************************** *********** আইআর সেন্সর ** তৈরি একটি ভার্চুয়াল প্রাচীর অনুসরণ করবে (অথবা যে কোন আইআর ** বাহিনী-ক্ষেত্র সংকেত পাঠাবে) এবং আশা করি প্রক্রিয়াতে বাধা এড়াবে ***************** ****************************************************** **/#include interrupt.h> #include io.h>#include#include "oi.h"#define TRUE 1#define FALSE 0#define FullSpeed 0x7FFF#SlowSpeed 0x0100#define SearchSpeed 0x0100#define ExtraAngle 10#define SearchLeftAngle 125#সংজ্ঞায়িত SearchRightAngle (SearchLeftAngle - 1000) #define CoastDistance 150#define TraceDistance 250#define TraceAngle 30#define BackDistance 25#define IRDetected (~ PINB & 0x01) // states#define Ready 0#defollow following 1#define #ডিফল্ট সার্চিং লেফট 3 olatile uint16_t timer_cnt = 0; volatile uint8_t timer_on = 0; volatile uint8_t sensors_flag = 0; volatile uint8_t sensors_index = 0; volatile uint8_t sensors_in [Sen6Size]; volatile vintolat_instole_instole_instole_instole_instole_sinto volatile uint8_t inRange = 0; // Functionsvoid byteTx (uint8_t value); void delayMs (uint16_t time_ms); void delayAndCheckIR (uint16_t time_ms); void delayAndUpdateSensors (স্বাক্ষরবিহীন int time_ms); অকার্যকর void baud (uint8_t baud_code); অকার্যকর ড্রাইভ (int16_t বেগ, int16_t ব্যাসার্ধ); uint16_t randomAngle (void); void defineSongs (void); int main (void); 0; // সেট আপ করুন এবং মডিউল চালু করুন (); LEDBothOff; powerOnRobot (); byteTx (CmdStart); বাড (Baud28800); ~ 0x01; // ইনপোর্টপোর্টবি হতে কার্গো বে ইপোর্ট পিন 3 সেট করুন | = 0x01; // সেট কার্গো ইপোর্ট পিন 3 পুলআপ সক্ষম // প্রোগ্রাম লুপথের (TRUE) {// শুধু সতর্কতা ড্রাইভ (0, RadStraight) হিসাবে থামুন; // সেট LEDsbyteTx (CmdLeds); byteTx (((সেন্সর [SenVWall])? LEDPlay: 0x00) | (ইনরেঞ্জ? LEDAdvance: 0x00)); 10 সেন্সর [SenCliffR])) {বাইটেক্স (CmdLeds); ? LED2On: LED2Off; inRange? LED1On: LED1Off; সুইচ (অবস্থা) {কেস রেডি: যদি (সেন্সর [SenVWall]) {// লিডারিফ (ইনরেঞ্জ) {ড্রাইভ (0, RadStraight); ড্রাইভ স্ট্রেটড্রাইভ (স্লোস্পিড, রেডস্ট্রেইট); অবস্থা = অনুসরণ;}} অন্য {// বিম্যাঙ্গেল = 0; দূরত্ব = 0; অপেক্ষা_কাউন্টার = 0; পাওয়া = FALSE; ড্রাইভ (SearchSpeed, RadCCW); state = SearchingLeft;} break; case following: if (sensors [SenBumpDrop] & BumpRight) {distance = 0; angle = 0; drive (-SlowSpeed, RadStraight); state = BackingTraceLeft;} else if (sensors [SenBumpDrop] & BumpLeft) {distance = 0; angle = 0; drive (-SlowSpeed, RadStraight); state = BackingTraceRight;} অন্যথায় (সেন্সর [SenVWall]) {// চেক করুন লিডারিফ (ইনরেঞ্জ) {ড্রাইভ (0, RadStraight); রাষ্ট্র = রেডি;} সাইক্লিডিস্টেন্স = 0; ড্রাইভ (স্লোস্পিড, রেডস্ট্রেইট); স্টেট = ওয়াসফ্লোয়িং;} ব্রেক; কেস ওয়াস ফলো করা: যদি (সেন্সর [সেনবাম্পড্রপ] এবং বাম্পরাইট) {দূরত্ব = 0; কোণ = 0; ড্রাইভ (-স্লোস্পিড, রেডস্ট্রাইট);;} অন্যথায় যদি (সেন্সর [SenBumpDrop] এবং BumpLeft) {distance = 0; angle = 0; drive (-SlowSpeed, RadStraight); state = BackingTraceRight;} else if (sensors [SenVWall]) {// lead to the proximity for leaderif (inRange) {ড্রাইভ (0, RadStraight); অবস্থা = R eady;} else {// drive straightdrive (FullSpeed, RadStraight); state = অনুসরণ করে;} break; case SearchingLeft: if (found) {if (angle> = ExtraAngle) {drive (SlowSpeed, RadStraight); state = following;} else {drive (SearchSpeed, RadCCW);}} else if (sensors [SenVWall]) {found = TRUE; angle = 0; if (inRange) {drive (0, RadStraight); state = Ready;} else {drive (SearchSpeed, RadCCW);}} else if (angle> = SearchLeftAngle) {drive (SearchSpeed, RadCW); wait_counter = 0; state = SearchingRight;} else {drive (SearchSpeed, RadCCW);} break; case SearchingRight: if (found) {if (-angle> = ExtraAngle) {drive (SlowSpeed, RadStraight); state = অনুসরণ করা হচ্ছে {ড্রাইভ (SearchSpeed, RadCCW);}} অন্যথায় যদি (wait_counter> 0) {wait_counter -= 20; ড্রাইভ (0, RadStraight);} অন্যথায় (কোণ = অনুসন্ধান RightAngle) {drive (0, RadStraight); wait_counter = 5000; angle = 0;} else {drive (SearchSpeed, RadCW);} break; case TracingLeft: if (sensors [SenBumpDrop] & BumpRight) {distance = 0; angle = 0; ড্রাইভ (-SlowSpeed, RadStraight); state = BackingTraceLeft;} অন্যথায় (সেন্সর [SenBumpDrop] & BumpLeft) {ড্রাইভ (0, RadStraight); state = Ready;} অন্যথায় (সেন্সর [SenVWall]) {// চেক লিডারিফ (ইনরেঞ্জ) {ড্রাইভ (0, RadStraight); রাজ্য = প্রস্তুত;} অন্যথায় ড্রাইভ (SlowSpeed, RadStraight);} অন্যথায় যদি (! (-কোণ> = TraceAngle)) {ড্রাইভ (SearchSpeed, RadCW);} অন্যথায় {দূরত্ব = 0; } break; case TracingRight: if (sensors [SenBumpDrop] & BumpRight) {drive (0, RadStraight); state = Ready;} অন্যথায় (সেন্সর [SenBumpDrop] & BumpLeft) {distance = 0; angle = 0; drive (- SlowSpeed, RadStraight); state = BackingTraceRight;} অন্যথায় যদি (সেন্সর [SenVWall]) {// লিডারিফ (inRang) এর কাছাকাছিতা পরীক্ষা করে e) {drive (0, RadStraight); state = Ready;} else {// drive straightdrive (SlowSpeed, RadStraight); state = following;}} else if (! (distance> = TraceDistance)) {drive (SlowSpeed, RadStraight);} অন্যথায় যদি (! if (sensors [SenVWall] && inRange) {drive (0, RadStraight); state = Ready;} else if (angle> = TraceAngle) {distance = 0; angle = 0; drive (SlowSpeed, RadStraight); state = TracingLeft; } else if (-distance> = BackDistance) {drive (SearchSpeed, RadCCW);} else {drive (-SlowSpeed, RadStraight);} break; case BackingTraceRight: if (sensors [SenVWall] && inRange) {drive (0, RadStraight); state = Ready;} else if (-angle> = TraceAngle) {distance = 0; angle = 0; drive (SlowSpeed, RadStraight); state = TracingRight;} else if (-distance> = BackDistance) {drive (SearchSpeed, RadCW);} অন্যথায় {ড্রাইভ (-SlowSpeed, RadStraight);} break; default: // stopdrive (0, RadStraight); state = Re ady; break;} delayAndCheckIR (10); delayAndUpdateSensors (10);} // cliff বা userbutton শনাক্ত করা হয়েছে, স্থিতিশীল হওয়ার অনুমতি দিন (উদা,, বোতাম রিলিজ করার জন্য) ড্রাইভ (0, RadStraight); delayAndUpdateSensors (2000);}}} // সিরিয়াল সেন্সর মান সংরক্ষণ করতে বাধা গ্রহণ করে। msSIGNAL (SIG_OUTPUT_COMPARE1A) এ সময় বিলম্বের জন্য UDR0 = value;} // সেন্সর মান আপডেট না করে ms এ নির্দিষ্ট সময়ের জন্য বিলম্ব করুন বিলম্ব এড়িয়ে যান আইআর ডিটেক্টরভয়ে বিলম্ব এন্ডচেক আইআর (uint16_t time_ms) {uint8_t timer_val = 0; = IRDetected; timer_val = timer_cnt;}} inRange = (inRange> = (time_ms >> 1));} // এমএস -এ নির্দিষ্ট সময়ের জন্য বিলম্ব এবং সেন্সর মান আপডেট করুন বিলম্ব এন্ড আপডেট সেন্সর (uint16_t time_ms) {uint8_t temp; timer_on = 1; timer_cnt = time_ms; while (timer_on) {if (! sensors_flag) {for (temp = 0; তাপমাত্রা Sen6Size; temp ++) সেন্সর [temp] = sensors_in [temp]; // আপডেট চলমান মোট দূরত্ব এবং angledistance += (int) ((sensors [SenDist1] 8) | sensors [SenDist0]); angle += (int) ((sensors) [সেনএং 1] 8) | সেন্সর [সেনএং 0]); // সেট I/O পিনস DDRB = 0x10; (WGM12) | _BV (CS12)); OCR1A = 71; TIMSK1 = _BV (OCIE1A); // rx interruptUBRR0 = 19; UCSR0B = (_BV (RXCIE0) | _BV (TXEN0) | _BV (RXEN0) | UCSR0C = (_BV (UCSZ00) | _BV (UCSZ01)); ! RobotIsOn) {RobotPwrToggleLow; delayMs (500); // এই রাজ্যে বিলম্ব // PowerDlayMs (100) টগল করার জন্য নিম্ন থেকে উচ্চ রূপান্তর; // এই রাজ্যে বিলম্ব // স্টার্টআপের জন্য বিলম্ব}} // তৈরি করুন এবং মডিউল বউড (uint8_t baud_code) {if (baud_code = 11) {byteTx (CmdBaud); UCSR0A | = _BV (TXC0); byteTx (baud_code); / ট্রান্সমিট সম্পূর্ণ না হওয়া পর্যন্ত অপেক্ষা করুন (! অন্যথায় যদি (baud_code == Baud38400) UBRR0 = Ubrr38400; যদি (baud_code == Baud9600) UBRR0 = Ubrr9600; অন্যথায় যদি (baud_code == Baud4800) UBRR0 = Ubrr4800; অন্যথায় যদি (baud_code == Baud2400) UBRR0 = Ubrr2400; baud_code == Baud600) UBRR0 = Ubrr600; অন্যথায় যদি (baud_code == Baud300) UBRR0 = Ubrr300; ব্যাসার্ধ) {byteTx (CmdDrive); byteTx ((uint 8_t) ((বেগ >> 8) এবং 0x00FF)); & 0x00FF));}

প্রস্তাবিত: