সুচিপত্র:

GiggleBot: 8 ধাপের সাহায্যে একটি লিডার-নির্দেশিত রোবট তৈরি করুন
GiggleBot: 8 ধাপের সাহায্যে একটি লিডার-নির্দেশিত রোবট তৈরি করুন

ভিডিও: GiggleBot: 8 ধাপের সাহায্যে একটি লিডার-নির্দেশিত রোবট তৈরি করুন

ভিডিও: GiggleBot: 8 ধাপের সাহায্যে একটি লিডার-নির্দেশিত রোবট তৈরি করুন
ভিডিও: Redstone Learning Showcase: Gradual Lighting System - Gigglebot Charging Station 2024, নভেম্বর
Anonim
গিগলবট দিয়ে একটি লিডার-নির্দেশিত রোবট তৈরি করুন
গিগলবট দিয়ে একটি লিডার-নির্দেশিত রোবট তৈরি করুন
গিগলবট দিয়ে একটি লিডার-নির্দেশিত রোবট তৈরি করুন
গিগলবট দিয়ে একটি লিডার-নির্দেশিত রোবট তৈরি করুন
গিগলবট দিয়ে একটি লিডার-নির্দেশিত রোবট তৈরি করুন
গিগলবট দিয়ে একটি লিডার-নির্দেশিত রোবট তৈরি করুন

এই টিউটোরিয়ালে, আমরা একটি গোলকধাঁধার সমস্যাগুলি মোকাবেলা করার জন্য GiggleBot তৈরি করছি।

আমরা GiggleBot- এ একটি সার্ভো মাউন্ট করছি যেখানে আমরা একটি দূরত্ব সেন্সর সংযুক্ত করি। চলার সময়, সার্ভোটি পিছনে পিছনে ঘুরতে যাচ্ছে যাতে দূরত্ব সেন্সর প্রতিটি বাধা পর্যন্ত দূরত্ব পরিমাপ করতে পারে। এটি অনেকটা LIDAR সেন্সরের মত কাজ করে যা সাধারণত অনেক বেশি ব্যয়বহুল।

একই সময়ে, গিগলবট এই তথ্যটি একটি দূরবর্তী বিবিসি মাইক্রোতে পাঠাচ্ছে: বিট যা তার 5-বাই -5 ম্যাট্রিক্স এলইডি-তে তার আপেক্ষিক অবস্থান বাধাগুলির সাথে প্রদর্শন করে।

আপনার কাজ হল GiggleBot- এ নেভিগেট করতে সক্ষম হওয়া অন্য বিবিসি মাইক্রো: বিট -এ কি দেখানো হয়েছে তা দেখে। GiggleBot নিয়ন্ত্রণ করতে, দূরবর্তী বিবিসি মাইক্রো: বিট বোতাম ব্যবহার করা হয়।

যে মজা মত শোনাচ্ছে! আসুন আমরা এটিতে নেমে যাই, আমরা?

ধাপ 1: প্রয়োজনীয় উপাদান

প্রয়োজনীয় উপাদান
প্রয়োজনীয় উপাদান

আমাদের প্রয়োজন হবে:

  1. একটি GiggleBot।
  2. বিবিসি মাইক্রোর জন্য একটি ব্যাটারি প্যাক: বিট। এটি বিবিসি মাইক্রো: বিট এর প্যাকেজের সাথে আসে।
  3. GiggleBot এর জন্য x3 AA ব্যাটারী।
  4. GiggleBot- এর সাথে দূরত্ব সেন্সর সংযুক্ত করার জন্য একটি গ্রোভ ক্যাবল।
  5. ডেক্সটার ইন্ডাস্ট্রিজের একটি সার্ভো কিট।
  6. x3 বিবিসি মাইক্রো: বিটস। একটি GiggleBot এর জন্য এবং একজন দূর থেকে রোবটকে নিয়ন্ত্রণ করতে ব্যবহার করত।
  7. ডেক্সটার ইন্ডাস্ট্রি থেকে একটি দূরত্ব সেন্সর।

বিবিসি মাইক্রোর জন্য GiggleBot রোবট পান: এখানে একটু!

ধাপ 2: রোবট একত্রিত করা

রোবট একত্রিত করা
রোবট একত্রিত করা
রোবট একত্রিত করা
রোবট একত্রিত করা

গিগলবটকে প্রোগ্রাম করার জন্য প্রস্তুত করার জন্য, আমাদের এটি একত্রিত করতে হবে, যদিও অনেক কিছু করার দরকার নেই।

GiggleBot এর নীচে তার কম্পার্টমেন্টে 3 AA ব্যাটারি োকান।

সার্ভো প্যাকেজ একত্রিত করুন। সার্ভো এর ঘূর্ণায়মান বাহুতে, GiggleBot এর সামনের সংযোগকারীদের উপর servo ঠিক করতে এটির শেষ গর্তটি ব্যবহার করুন। আপনি তার জায়গায় আরো স্থিতিশীল করতে একটি স্ক্রু এবং/অথবা কিছু তার ব্যবহার করতে পারেন। অথবা আপনি এটি বোর্ডে গরম আঠালো করতে পারেন। আমার ক্ষেত্রে, আমি GiggleBot বোর্ডে servo বাহু বেঁধে একটি স্ক্রু এবং ছোট তার ব্যবহার করেছি।

সার্ভো আর্মকে সার্ভোতে মাউন্ট করার সময়, নিশ্চিত করুন যে সার্ভো ইতিমধ্যে 80 অবস্থানে সেট করা আছে। আপনি gigglebot.set_servo (gigglebot. RIGHT, 80) এ কল করে এটি করতে পারেন। এখানে তার সম্বন্ধে আরও পড়তে পারেন.

পরবর্তী, সার্ভার প্যাকেজের সামনের দিকে দূরত্ব সেন্সরটি রাখুন এবং উপরের উদাহরণের মতো এটি ঠিক করুন।

অবশেষে, 2 I2C পোর্টের যেকোনো একটি গ্রোভ ক্যাবলের সাথে দূরত্ব সেন্সর এবং GiggleBot- এ বসে ডান পোর্টে সার্ভো মোটর সংযুক্ত করুন - তার উপর সঠিক পোর্টটি উল্লেখ করা আছে।

ধাপ 3: আপনার নিজের ধাঁধা তৈরি করুন - চ্ছিক

আপনার নিজস্ব ধাঁধা তৈরি করুন - চ্ছিক
আপনার নিজস্ব ধাঁধা তৈরি করুন - চ্ছিক

এই ক্ষেত্রে, আমি NASCAR এর মতো একটি বন্ধ লুপ ট্র্যাক তৈরির জন্য একগুচ্ছ বাক্স ব্যবহার করেছি।

এই ধাপে, আপনি সত্যিই সৃজনশীল হয়ে উঠতে পারেন এবং আপনি এটিকে কতটা বাঁকা করতে চান বা এটিকে লম্বা করতে পারেন কারণ এটি সত্যিই আপনার উপর নির্ভর করে।

অথবা যদি আপনি মোটেই একটি ট্র্যাক না চান, তাহলে আপনি একটি রান্নাঘর বা একটি বসার ঘরে GiggleBot রাখতে পারেন উদাহরণস্বরূপ - এটি যথেষ্ট ভাল হওয়া উচিত কারণ এখানে প্রচুর দেয়াল এবং বাধা রয়েছে যা আপনাকে এখনও এড়াতে হবে।

ধাপ 4: পরিবেশ স্থাপন

পরিবেশ স্থাপন
পরিবেশ স্থাপন

আপনি মাইক্রোপিথনে বিবিসি মাইক্রো: বিট প্রোগ্রাম করতে সক্ষম হওয়ার জন্য, আপনাকে এর জন্য একটি সম্পাদক (মু সম্পাদক) সেট আপ করতে হবে এবং গিগলবট মাইক্রোপাইথন রানটাইমকে এর রানটাইম হিসাবে সেট করতে হবে। তার জন্য, আপনাকে এই পৃষ্ঠায় নির্দেশাবলী অনুসরণ করতে হবে। এই মুহূর্তে, রানটাইমের ভার্সন v0.4.0 ব্যবহার করা হয়েছে।

ধাপ 5: GiggleBot প্রোগ্রামিং - পার্ট I

প্রথমে, GiggleBot এর স্ক্রিপ্ট সেট আপ করা যাক। এই স্ক্রিপ্টটি GiggleBot এর সার্ভো মোটরকে 160 ডিগ্রী (প্রতিটি দিকে 80 ডিগ্রী) ঘুরাতে বাধ্য করবে এবং একই সাথে প্রতি পালা দূরত্ব সেন্সর থেকে 10 টি রিডিং নেবে।

চালু করা হলে, GiggleBot রিমোট কন্ট্রোল থেকে কমান্ড না পাওয়া পর্যন্ত দাঁড়িয়ে থাকবে। শুধুমাত্র 3 টি কমান্ড থাকতে পারে: এগিয়ে যান, বাম দিকে বা ডানে।

দ্রষ্টব্য: নিম্নলিখিত স্ক্রিপ্টে হোয়াইটস্পেস অনুপস্থিত থাকতে পারে এবং এটি GitHub Gists প্রদর্শনে কিছু সমস্যার কারণে বলে মনে হচ্ছে। আপনাকে তার গিটহাব পৃষ্ঠায় নিয়ে যাওয়ার জন্য সারসংকলনে ক্লিক করুন যেখানে আপনি কোডটি কপি-পেস্ট করতে পারেন।

রিমোট নিয়ন্ত্রিত LIDAR- ভিত্তিক GiggleBot

gigglebot আমদানি থেকে*
দূরত্ব_ সেন্সর থেকে আমদানি দূরত্ব সেন্সর
মাইক্রোবিট আমদানি ঘুম থেকে
utime আমদানি ticks_us, sleep_us থেকে
আমদানি ustruct
আমদানি রেডিও
# রোবটটি যদি আগে থেকেই চলতে থাকে তবে তাকে থামান
থামুন ()
# রেডিও সক্ষম করুন
radio.on ()
# দূরত্ব সেন্সর বস্তু
ডিএস = দূরত্ব সেন্সর ()
ds.start_continuous ()
rotate_time = 0.7# সেকেন্ডে মাপা
rotate_span = 160# ডিগ্রি মাপা
rotate_steps = 10
overhead_compensation = 1.05# শতাংশে সংজ্ঞায়িত
time_per_step = 10 ** 6* rotate_time / (rotate_steps* overhead_compensation)
last_read_time = 0
রাডার = বাইটএরে (ঘোরানো_ পদক্ষেপ)
servo_rotate_direction = 0# 0 উপরের দিকে যাওয়ার জন্য (0-> 160) এবং অন্যথায় 1
radar_index = 0
set_servo (অধিকার, 0)
যখন সত্য:
# রাডার থেকে পড়া
যদি ticks_us () - last_read_time> time_per_step:
# দূরত্ব সেন্সর থেকে পড়ুন
রাডার [radar_index] = int (ds.read_range_continuous () /10)
last_read_time = ticks_us ()
মুদ্রণ (রাডার_ইনডেক্স)
# বাম থেকে ডানে সার্ভো ঘোরানোর জন্য যুক্তি করুন
যদি radar_index == rotate_steps -1 এবং servo_rotate_direction == 0:
set_servo (অধিকার, 0)
servo_rotate_direction = 1
elif radar_index == 0 এবং servo_rotate_direction == 1:
set_servo (ডান, rotate_span)
servo_rotate_direction = 0
অন্য:
radar_index += 1if servo_rotate_direction == 0else-1
# এবং রাডার মান পাঠান
radio.send_bytes (রাডার)
চেষ্টা করুন:
# রোবট কমান্ড পড়ুন
lmotor, rmotor = ustruct.unpack ('bb', radio.receive_bytes ())
# এবং মোটরগুলিকে সক্রিয় করুন কোন প্রাপ্ত কমান্ড থাকা উচিত
set_speed (lmotor, rmotor)
ড্রাইভ ()
টাইপ এরর ছাড়া:
পাস

GitHub দ্বারা raw দিয়ে হোস্ট করা rawgigglebot_lidar_robot.py দেখুন

ধাপ 6: রিমোট প্রোগ্রামিং - পার্ট II

যা করা বাকি আছে তা হল ২ য় বিবিসি মাইক্রো: বিট যা রিমোট হিসেবে কাজ করে।

রিমোটটি তার 5-বাই -5 পিক্সেল-তৈরি স্ক্রিনে বাধাগুলির আপেক্ষিক দূরত্ব প্রদর্শন করতে ব্যবহৃত হয়। সর্বাধিক, 10 পিক্সেল চালু হতে চলেছে।

একই সময়ে, রিমোট আপনাকে GiggleBot এর 2 টি বোতাম টিপে রিমোট কন্ট্রোল করার ক্ষমতা দিচ্ছে: এগিয়ে যান, বাম দিকে এবং ডানে।

দ্রষ্টব্য: নিম্নলিখিত স্ক্রিপ্টে হোয়াইটস্পেস অনুপস্থিত থাকতে পারে এবং এটি GitHub Gists প্রদর্শনে কিছু সমস্যার কারণে বলে মনে হচ্ছে। আপনাকে তার গিটহাব পৃষ্ঠায় নিয়ে যাওয়ার জন্য সারসংকলনে ক্লিক করুন যেখানে আপনি কোডটি কপি-পেস্ট করতে পারেন।

রিমোট নিয়ন্ত্রিত LIDAR- ভিত্তিক GiggleBot - রিমোট কোড

মাইক্রোবিট আমদানি ঘুম, প্রদর্শন, button_a, button_b থেকে
আমদানি ustruct
আমদানি রেডিও
আমদানি গণিত
radio.on ()
rotate_steps = 10
rotate_span = 160# ডিগ্রীতে
rotate_step = rotate_span / rotate_steps
সর্বোচ্চ_দূরত্ব = 50# সেন্টিমিটারে
side_length_leds = 3 # পিক্সেলের # মাপা
রাডার = বাইটএরে (ঘোরানো_ পদক্ষেপ)
xar = bytearray (rotate_steps)
yar = bytearray (rotate_steps)
save_xar = bytearray (rotate_steps)
save_yar = bytearray (rotate_steps)
মোটর_স্পিড = 50
যখন সত্য:
অবস্থা = radio.receive_bytes_into (রাডার)
যদি অবস্থা না হয়:
# display.clear ()
c, val inenumerate (রাডার) এর জন্য:
যদি রাডার [c] <= max_distance:
# প্রতিটি দূরত্বের 2 ডি স্থানাঙ্ক গণনা করুন
কোণ = rotate_steps / (rotate_steps -1) * rotate_step * c
কোণ += (180- rotate_span) /2.0
x_c = math.cos (কোণ * math.pi /180.0) * রাডার [c]
y_c = math.sin (কোণ * math.pi /180.0) * রাডার [c]
# 5x5 মাইক্রোবিট ডিসপ্লেতে ফিট করার জন্য দূরত্ব স্কেল করুন
x_c = x_c * (side_length_leds -1) / সর্বোচ্চ_দূরত্ব
y_c = y_c * (পার্শ্ব_দৈর্ঘ্য_লেড +1) / সর্বোচ্চ_দূরত্ব
# প্রতিস্থাপন স্থানাঙ্ক
x_c += (side_length_leds -1)
y_c = (side_length_leds +1) - y_c
# গোলাকার স্থানাঙ্ক ঠিক কোথায় এলইডি পাওয়া যায়
যদি x_c - math.floor (x_c) <0.5:
x_c = math.floor (x_c)
অন্য:
x_c = math.ceil (x_c)
যদি y_c - math.floor (y_c) <0.5:
y_c = math.floor (y_c)
অন্য:
y_c = math.ceil (y_c)
xar [c] = x_c
yar [c] = y_c
অন্য:
xar [c] = 0
yar [c] = 0
display. clear ()
x, y inzip (xar, yar) এর জন্য:
display.set_pixel (x, y, 9)
# মুদ্রণ (তালিকা (জিপ (xar, yar, রাডার)))
stateA = button_a.is_pressed ()
stateB = button_b.is_pressed ()
যদি stateA এবং stateB:
radio.send_bytes (ustruct.pack ('bb', motor_speed, motor_speed))
মুদ্রণ ('এগিয়ে')
যদি StateA এবং StateB না হয়:
radio.send_bytes (ustruct.pack ('bb', motor_speed, -motor_speed))
মুদ্রণ ('বাম')
যদি না stateA এবং stateB:
radio.send_bytes (ustruct.pack ('bb', -motor_speed, motor_speed))
মুদ্রণ ('ডান')
ifnot stateA এবং not StateB:
radio.send_bytes (ustruct.pack ('bb', 0, 0))
মুদ্রণ ('স্টপ')

GitHub দ্বারা raw দিয়ে হোস্ট করা rawgigglebot_lidar_remote.py দেখুন

ধাপ 7: রিমোট স্ক্রিনের ব্যাখ্যা

"লোড হচ্ছে =" অলস "GiggleBot নিয়ন্ত্রণ করুন, আপনার নিম্নলিখিত বিকল্প আছে:

  1. গিগলবটকে এগিয়ে নিয়ে যেতে বোতাম এ এবং বোতাম টিপুন।
  2. বাম দিকে GiggleBot ঘুরানোর জন্য A বোতাম টিপুন।
  3. ডানদিকে GiggleBot ঘুরানোর জন্য B বোতাম টিপুন।

কোন দিকে সবচেয়ে কাছের বাধাগুলি সনাক্ত করা হয়েছে তা দেখতে, কেবল রিমোটের (দূরবর্তী বিবিসি মাইক্রো: বিট যা আপনি ধরে রেখেছেন) স্ক্রিনটি দেখুন। আপনি GiggleBot এর দিকে না তাকিয়ে দূর থেকে নিয়ন্ত্রণ করতে সক্ষম হবেন।

প্রস্তাবিত: