کوڈ تلاش کریں

کورس سبق 8 از 10: Raspberry Pi Pico اسمارٹ کار – سبق 8: سروو موٹر اور آبجیکٹ فالو کرنا

یہ سبق کا حصہ ہے: Raspberry Pi Pico 4WD اسمارٹ کار

کورس سبق 8 از 10: Raspberry Pi Pico اسمارٹ کار – سبق 8: سروو موٹر اور آبجیکٹ فالو کرنا

یہ سبق Robojax کی Raspberry Pi Pico Smart Car کورس سے ایک سروو موٹر کی فعالیت اور اسے استعمال کرتے ہوئے آبجیکٹ کو فالو کرنے یا "اپنے ہاتھ کو فالو کرنے" والا روبوٹ بنانے کے بارے میں ہے۔ یہ پروجیکٹ سادہ موٹر کنٹرول سے آگے بڑھ کر یہ ظاہر کرتا ہے کہ کس طرح سروو سے چلنے والے الٹراسونک سینسر کو ذہین Python منطق کے ساتھ ملا کر ایک ایسی کار بنائی جائے جو فعال طور پر اپنی رینج میں موجود آبجیکٹ کو تلاش کرے اور اس کا پیچھا کرے۔ یہ روبوٹکس کا ایک بنیادی تصور ہے، جس سے آپ انٹرایکٹو پروجیکٹس بنا سکتے ہیں جیسے کہ ایک روبوٹ جو کسی شخص کا پیچھا کرتا ہے، ایک ذہین پالتو جانور جو گیند اٹھا کر لاتا ہے، یا ایک خود مختار سیکیورٹی کیمرہ جو حرکت کو ٹریک کرتا ہے۔ یہ سبق ایک دوسرے، آسان پروجیکٹ کا بھی احاطہ کرتا ہے: ایک ایسی کار جو خود بخود ایک مخصوص فاصلے کے زون میں موجود اشیاء کے قریب جاتی ہے، انہیں دھکیلتی ہے، اور پیچھے ہٹ جاتی ہے۔

pi_pico_4WD_follow-hand

ہارڈویئر اور اجزاء

یہ پروجیکٹ SunFounder Raspberry Pi Pico 4WD کار کٹ پر مبنی ہے۔ اس سبق میں استعمال ہونے والے اہم اجزاء یہ ہیں:

  • Raspberry Pi Pico بورڈ
  • موٹرز کے ساتھ 4WD اسمارٹ کار چیسس
  • سروو موٹر (ترجیحاً پائیداری کے لیے دھاتی گیئر والی سروو)
  • الٹراسونک فاصلہ سینسر (HC-SR04)
  • موٹر ڈرائیور بورڈ (کار کٹ کا حصہ)
  • RGB LED (بصری فیڈ بیک کے لیے)
  • بجلی کا ذریعہ (کار کے لیے بیٹری پیک)
PICOBOARDWHITEANGLE2_1200x857

سروو موٹر اس سبق کی فعالیت کا مرکز ہے۔ معیاری DC موٹر کے برعکس جو مسلسل گھومتی ہے، سروو موٹر کو ایک مخصوص کونیی پوزیشن پر گھومنے اور اسے برقرار رکھنے کے لیے ڈیزائن کیا گیا ہے، عام طور پر 0 سے 180 ڈگری کے درمیان۔ یہ اسے الٹراسونک سینسر کو درست طریقے سے نشانہ بنانے کے لیے بہترین بناتا ہے۔ سروو کا معیار اکثر اس کے گیئر کے مواد (پلاسٹک بمقابلہ دھات) اور اس کے ٹارک سے طے ہوتا ہے، جو اس کی طاقت اور پائیداری کا تعین کرتا ہے۔

یہ کیسے کام کرتا ہے

نیچے دیا گیا چارٹ بتاتا ہے کہ کوڈ کیسے کام کرتا ہے۔ 

pi_pico_4WD_follow-hand_flow_chart

وائرنگ گائیڈ

اس سبق کے لیے وائرنگ سیدھی ہے، کیونکہ یہ پہلے سے اسمبل شدہ کار کٹ پر مبنی ہے۔ اہم کنکشن سروو موٹر کا ہے، جسے Pico پر ایک مخصوص GPIO پن سے جوڑنا ضروری ہے۔

ویڈیو میں، انسٹرکٹر سروو کو Raspberry Pi Pico پر پن نمبر 18 سے جوڑتا ہے۔ الٹراسونک سینسر سروو ہارن کے اوپر نصب ہے، جس سے اسے علاقے کو اسکین کرنے کے لیے بائیں اور دائیں گھمایا جا سکتا ہے۔ موٹرز، RGB LED، اور بجلی کے لیے باقی وائرنگ کورس کے پچھلے اسباق سے پہلے سے جڑی ہوئی سمجھی جاتی ہے۔

تفصیلی بصری گائیڈ کے لیے، براہ کرم نیچے دیے گئے وائرنگ ڈایاگرام کا حوالہ دیں۔

Sunfounder_Pico4DW-08-Follow-hand-ultrasonic_direction

کوڈ کی وضاحت

اس سبق کے لیے Python کوڈ ایک حسب ضرورت pico_4wd لائبریری کے گرد بنایا گیا ہے، جو پیچیدہ ہارڈویئر تعاملات کو آسان بناتی ہے۔ صارف کے قابل ترتیب حصے اسکرپٹ کے اوپری حصے میں واقع ہیں اور کار کے رویے کو کنٹرول کرتے ہیں۔

یہاں اہم متغیرات ہیں جنہیں آپ اپنے روبوٹ کے "ہاتھ کو فالو کرنے" کے رویے کو حسب ضرورت بنانے کے لیے ایڈجسٹ کر سکتے ہیں:

  • car.RADAR_REFERENCE = 25: یہ زیادہ سے زیادہ فاصلہ سینٹی میٹر میں ہے جسے سینسر "دیکھ" سکتا ہے۔ اس فاصلے سے آگے کوئی بھی چیز نظر انداز کر دی جاتی ہے۔ آپ اسے بڑھا کر کار کو زیادہ حساس بنا سکتے ہیں یا کم کر کے قریبی چیز کی ضرورت پیدا کر سکتے ہیں۔
  • car.RADAR_MAX_ANGLE = 45 اور car.RADAR_MIN_ANGLE = -45: یہ سب سے بائیں (45) اور سب سے دائیں (-45) زاویوں کی وضاحت کرتے ہیں جنہیں سروو اسکین کرے گا۔ یہ کار کے سامنے 90 ڈگری کا میدانِ نظر بناتا ہے۔
  • car.RADAR_STEP_ANGLE = 10: یہ وہ اضافہ (ڈگریوں میں) ہے جو سروو اسکین پوائنٹس کے درمیان حرکت کے لیے استعمال کرتا ہے۔ چھوٹا قدم (مثلاً 5) بہتر ریزولوشن دیتا ہے لیکن مکمل اسکین میں زیادہ وقت لیتا ہے۔ بڑا قدم (مثلاً 15) تیزی سے اسکین کرتا ہے لیکن کم درستگی کے ساتھ۔
  • MOTOR_FORWARD_POWER = 40: یہ موٹر پاور (0-100) سیٹ کرتا ہے جو اس وقت استعمال ہوتی ہے جب کار پتہ چلنے والی چیز کی طرف آگے بڑھ رہی ہو۔ کار کی تعاقب کی رفتار تبدیل کرنے کے لیے اسے ایڈجسٹ کریں۔
  • MOTOR_TURNING_POWER = 40: یہ موٹر پاور سیٹ کرتا ہے جو اس وقت استعمال ہوتی ہے جب کار چیز کا سامنا کرنے کے لیے مڑ رہی ہو۔ زیادہ قدر کار کو زیادہ تیزی سے مڑنے پر مجبور کرے گی۔

main() فنکشن کی مرکزی منطق ایک مسلسل لوپ ہے۔ یہ پہلے car.radar_scan() کو کال کرتا ہے، جو '1' اور '0' کی ایک سٹرنگ لوٹاتا ہے جو ظاہر کرتی ہے کہ آیا ہر اسکین زاویے پر کوئی چیز پائی گئی (ایک '1' کا مطلب ہے کہ کوئی چیز حوالہ فاصلے کے اندر ہے)۔ کوڈ پھر اس سٹرنگ کا تجزیہ کر کے مسلسل '1' کا سب سے بڑا گروپ تلاش کرتا ہے، جو پتہ چلنے والی چیز کے مرکز کی نشاندہی کرتا ہے۔ اس بنیاد پر کہ یہ مرکز اسکین فیلڈ میں کہاں ہے، کار کو بائیں مڑنے، دائیں مڑنے، یا آگے بڑھنے کا حکم دیا جاتا ہے تاکہ وہ چیز کے ساتھ سیدھ میں آئے اور اس کا پیچھا کرے۔

لائیو پروجیکٹ ڈیموسٹریشن

ویڈیو پروجیکٹ کے عملی مظاہرے کی واضح وضاحت فراہم کرتی ہے۔ انسٹرکٹر پہلے ایک ٹیسٹ اسکرپٹ چلاتا ہے تاکہ یہ دکھایا جا سکے کہ سروو موٹر کو 90، 0، اور -90 ڈگری جیسے درست زاویوں پر کیسے منتقل کیا جا سکتا ہے۔ یہ سروو کی رینج کو سمجھنے اور الٹراسونک سینسر کو درست طریقے سے نصب کرنے کے لیے ضروری ہے۔

سینسر نصب کرنے کے بعد، "ہاتھ کا پیچھا کریں" کی خصوصیت دکھائی جاتی ہے۔ جب انسٹرکٹر اپنا ہاتھ کار کے سامنے حرکت دیتا ہے، تو سروو پر نصب سینسر بائیں اور دائیں اسکین کرتا ہے۔ کار کی منطق سینسر کے ڈیٹا پر کارروائی کرتی ہے اور پہیوں کو موڑ کر پتہ چلے گئے ہاتھ کی سمت میں اسٹیئر کرتی ہے، اس طرح مؤثر طریقے سے فرش پر اس کا پیچھا کرتی ہے۔ یہ مظاہرہ نمایاں کرتا ہے کہ کار کس طرح کسی چیز کو حرکت کے دوران ٹریک کر سکتی ہے اور اس کے مطابق اپنی سمت ایڈجسٹ کر سکتی ہے۔ ایک دوسرا پروجیکٹ بھی دکھایا گیا ہے، جہاں کار کو پروگرام کیا گیا ہے کہ اگر وہ 10 سے 20 سینٹی میٹر کے درمیان کسی چیز کا پتہ لگائے تو اس کے قریب جا کر اسے دھکیلے، اور اگر چیز بہت قریب آ جائے (10 سینٹی میٹر سے کم) تو پیچھے ہٹ جائے۔

اہم نکات

یہ سبق انٹرایکٹو روبوٹک رویے بنانے کے لیے سروو موٹرز کے استعمال کا ایک بہترین تعارف ہے۔ سروو کو فاصلے کے سینسر کے ساتھ ملا کر، آپ "دیکھنے کی حس" رکھنے والا روبوٹ بنا سکتے ہیں جو اپنے ماحول کو فعال طور پر ٹریک کر سکتا ہے اور اس کا جواب دے سکتا ہے۔ اسکین زاویوں، قدم کے سائز، اور موٹر پاور جیسے پیرامیٹرز کو ٹیون کرنے کی صلاحیت روبوٹ کے رویے پر باریک کنٹرول فراہم کرتی ہے، جو کسی بھی روبوٹکس پروجیکٹ کے لیے ایک اہم مہارت ہے۔

ابواب

  • [00:00] سروو موٹر اور آبجیکٹ فالو کرنے کا تعارف
  • [01:48] کورس کٹ کی خصوصیات اور صلاحیتیں
  • [03:08] سروو موٹر کے آپریشن کو سمجھنا
  • [06:08] پائتھون کوڈ کے ساتھ سروو موٹر کی جانچ
  • [09:59] "ہاتھ کا پیچھا کریں" کی خصوصیت کی وضاحت
  • [10:49] "ہاتھ کا پیچھا کریں" کی فعالیت کا مظاہرہ
  • [15:37] پروجیکٹ: چیز کو دھکیلنا اور پیچھے ہٹنا
  • [18:40] چیز کو دھکیلنے والے پروجیکٹ کا مظاہرہ
  • [19:25] نتیجہ اور اگلے اقدامات

تصاویر

pico-4wd_main
pico-4wd_main
PICOBOARDWHITEANGLE2_1200x857
PICOBOARDWHITEANGLE2_1200x857
pi_pico_4WD_follow-hand
pi_pico_4WD_follow-hand
pi_pico_4WD_follow-hand_flow_chart
pi_pico_4WD_follow-hand_flow_chart
Sunfounder_Pico4DW-08-Follow-hand-ultrasonic_direction
Sunfounder_Pico4DW-08-Follow-hand-ultrasonic_direction
905-Lesson 8/10 Pi Pico 4WD card Python code: follow hand
زبان: C++
# Lesson 8/10 Pi Car Pico 4WD: Follow hand
# Download and resource page https://robojax.com/RJT630

import pico_4wd as car

car.RADAR_REFERENCE = 25
car.RADAR_MAX_ANGLE = 45
car.RADAR_MIN_ANGLE = -45
car.RADAR_STEP_ANGLE = 10
MOTOR_FORWARD_POWER = 40
MOTOR_TURNING_POWER = 40

def main():
    while True:
        radar_data = car.radar_scan()
        if isinstance(radar_data, int):
            continue
        radar_data = [str(i) for i in radar_data]
        radar_data = "".join(radar_data)
        paths = radar_data.split("1")
        length_list = []
        for path in paths:
            length_list.append(len(path))
        if max(length_list) == 0:
            car.move("stop") 
        else:
            i = length_list.index(max(length_list))
            pos = radar_data.index(paths[i])
            pos += (len(paths[i]) - 1) / 2
            delta = len(radar_data) / 3
            if pos < delta:
                car.move("right", MOTOR_TURNING_POWER)
            elif pos > 2 * delta:
                car.move("left", MOTOR_TURNING_POWER)
            else:
                #if radar_data[int(len(radar_data)/2-1)] == "0":
                #    car.move("stop")
                #else:
                car.move("forward", MOTOR_FORWARD_POWER)

try:
    main()
finally:
    car.move("stop")
    car.set_light_off()

وسائل اور حوالہ جات

ابھی تک کوئی وسائل نہیں۔

فائلیں📁

کوئی فائلیں دستیاب نہیں ہیں۔