فهرست مطالب:
- مرحله 1: اجزای مورد نیاز
- مرحله 2: تنظیم آهنگها و محیط
- مرحله 3: راه اندازی GiggleBot
- مرحله 4: تنظیم تیونر (از راه دور)
- مرحله 5: تنظیم GiggleBot
- مرحله 6: اجرای GiggleBot با خاموش بودن NeoPixels
- مرحله 7: اجرای GiggleBot با روشن بودن نئوپیکسل ها
تصویری: تنظیم GiggleBot Follower Line - Advanced: 7 Step
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:55
در این دستورالعمل بسیار کوتاه شما می خواهید GiggleBot خود را تنظیم کنید تا از خط سیاه پیروی کند. در این آموزش دیگر GiggleBot Line Follower ، ما مقادیر تنظیم را سخت کدگذاری کردیم تا مطابق با آن سناریو کار کند. ممکن است بخواهید با به دست آوردن دستاوردهای دیگر ، رفتار را بهتر کنید.
در این آموزش ، ما 2 اسکریپت را به شما نشان می دهیم که هر دو می توانند در میکروهای مختلف BBC بارگذاری شوند: بیت به گونه ای که یکی از آنها در GiggleBot قرار داده شود و با دکمه دیگر ، از 2 دکمه برای رفتن به منو و تنظیم متفاوت استفاده می شود. مولفه های. ارسال این پارامترهای به روز شده از طریق رادیو انجام می شود.
مرحله 1: اجزای مورد نیاز
به موارد زیر نیاز خواهید داشت:
- ربات GiggleBot برای micro: bit.
- x3 باتری AA
- x2 BBC micro: بیت - یکی برای GiggleBot و دیگری یکی برای کنترل پارامترها از راه دور عمل می کند.
- باتری برای میکرو بی بی سی: بیت - مانند باتری موجود در بسته میکرو: بیت بی بی سی.
ربات GiggleBot را برای میکرو بی بی سی تهیه کنید: بیت اینجا
مرحله 2: تنظیم آهنگها و محیط
شما همچنین باید آهنگهای خود را (بارگیری ، چاپ ، برش و نوار کاشی) بسازید و سپس محیط را تنظیم کنید (IDE و زمان اجرا).
از آنجا که این آموزش بسیار مرتبط با این آموزش دیگر با عنوان GiggleBot Line Follower است ، فقط به آنجا بروید و مراحل 2 و 3 را دنبال کنید و سپس به اینجا برگردید.
در مورد IDE ، می توانید از ویرایشگر Mu استفاده کنید و برای زمان اجرا ، باید GiggleBot MicroPython Runtime را بارگیری کنید. زمان اجرا را می توانید از اسناد آن در اینجا بارگیری کنید. به بخش شروع کار مستندات بروید و دستورالعمل های مربوط به تنظیم محیط را دنبال کنید. در حال حاضر ، نسخه v0.4.0 زمان اجرا استفاده می شود.
مرحله 3: راه اندازی GiggleBot
قبل از چشمک زدن زمان اجرا به GiggleBot ، مطمئن شوید که سرعت و نرخ بروزرسانی مورد نظر خود را برای GiggleBot انتخاب کرده اید: به طور پیش فرض ، سرعت روی 100 (متغیر base_speed) و نرخ به روز رسانی روی 70 (متغیر update_rate) تنظیم شده است.
با توجه به پیاده سازی فعلی ، بالاترین میزان بروزرسانی 70 است و اگر run_neopixels روی True تنظیم شود ، تنها 50 قابل دستیابی است. بنابراین ، به نوعی ، می توانید بگویید که نرخ به روزرسانی پیش فرض دقیقاً در لبه کارهایی است که میکرو بی بی سی می تواند انجام دهد.
فقط برای ثبت ، سنسور دنبال کننده خط می تواند 100 بار در ثانیه به روز رسانی کند.
توجه: در اسکریپت زیر ممکن است فضاهای خالی وجود داشته باشد و به نظر می رسد این به دلیل مشکل در نمایش GitHub Gists باشد. روی اصل مطلب کلیک کنید تا شما را به صفحه GitHub منتقل کند ، جایی که می توانید کد را کپی و جایگذاری کنید.
GiggleBot PID Line Follower Tuner (برای تنظیم آن به ریموت نیاز است) - xjfls23
از واردات microbit* |
از واردات gigglebot* |
از utime import sleep_ms ، ticks_us |
وارد کردن رادیو |
ustruct وارد کنید |
# راه اندازی مجدد رادیو و نئوپیکسل GB |
radio.on () |
neo = init () |
# زمان سنجی |
نرخ_بهروزرسانی = 70 |
# مقدار پیش فرض افزایش |
Kp = 0.0 |
Ki = 0.0 |
Kd = 0.0 |
نقطه تنظیم = 0.5 |
trigger_point = 0.0 |
حداقل_سرعت = 0.2 |
base_speed = 100 |
last_position = نقطه تنظیم |
انتگرال = 0.0 |
run_neopixels = غلط |
center_pixel = 5# جایی که پیکسل مرکزی لبخند در GB قرار دارد |
# turquoise = tuple (map (lambda x: int (x / 5)، (64، 224، 208))) # رنگ برای ترسیم خطا با نئوپیکسل ها |
# فیروزه = (12 ، 44 ، 41) # که دقیقاً فیروزه فوق در بالا توضیح داده شده است |
error_width_per_pixel = 0.5/3# حداکثر خطا تقسیم بر تعداد قطعات بین هر نئوپیکسل |
defupper_bound_bound_speed_reducer (abs_error ، trigger_point ، above_bound ، small_motor_power ، high_motor_power): |
مبنای_سرعت جهانی |
اگر abs_error> = trigger_point: |
# x0 = 0.0 |
# y0 = 0.0 |
# x1 = محدوده_بالایی - نقطه_تحریک |
# y1 = 1.0 |
# x = abs_error - نقطه_تحریک |
# y = y0 + (x - x0) * (y1 - y0) / (x1 - x0) |
# مثل |
y = (abs_error - trigger_point) / (above_bound - trigger_point) |
قدرت_حرکتی = سرعت_پایه * (کوچکترین_قدرت_حرکتی + (1- سال) * (بالاترین_قدرت_حرکتی - کوچکترین_قدرت_حرکتی)) |
بازگشت موتور_قدرت |
دیگری: |
بازگشت پایه پایه * بالاترین_قدرت_حرکتی |
اجرا = غلط |
previous_error = 0 |
مجموع_زمان = 0.0 |
مجموع_شمارش = 0 |
whileTrue: |
# اگر دکمه a فشار داده شده است ، دنبال کنید |
if button_a.is_pressed (): |
اجرا = درست |
# اما اگر دکمه b فشار داده شود ، دنبال کننده خط را متوقف کنید |
if button_b.is_pressed (): |
اجرا = غلط |
انتگرال = 0.0 |
previous_error = 0.0 |
display.scroll ('{} - {}'. فرمت (total_time ، total_counts) ، تأخیر = 100 ، انتظار = نادرست) |
زمان کل = 0.0 |
مجموع_شمارش = 0 |
pixels_off () |
متوقف کردن() |
sleep_ms (500) |
اگر اجرا شود isTrue: |
# سنسورهای خط را بخوانید |
زمان شروع = ticks_us () |
# بررسی کنید که آیا سود Kp/Kd را از راه دور به روز کرده ایم |
تلاش كردن: |
Kp، Ki، Kd، trigger_point، min_speed_percent = ustruct.unpack ('fffff'، radio.receive_bytes ()) |
set_eyes () |
onlyTypeError: |
عبور |
راست ، چپ = سنسور_خوان (LINE_SENSOR ، BOTH) |
خط # در سمت چپ است هنگامی که موقعیت <0.5 |
وقتی موقعیت> 0.5 باشد ، خط # در سمت راست است |
# خط در وسط است وقتی موقعیت = 0.5 است |
# میانگین حسابی وزنی است |
تلاش كردن: |
موقعیت = راست /شناور (چپ + راست) |
onlyZeroDivisionError: |
موقعیت = 0.5 |
اگر موقعیت == 0: موقعیت = 0.001 |
اگر موقعیت == 1: موقعیت = 0.999 |
# از کنترلر PD استفاده کنید |
خطا = موقعیت - نقطه تنظیم |
انتگرال += خطا |
تصحیح = Kp * error + Ki * انتگرال + Kd * (error - previous_error) |
previous_error = خطا |
# محاسبه سرعت موتور |
motor_speed = above_bound_linear_speed_reducer (abs (error) ، point set * trigger_point ، setpoint ، min_speed_percent ، 1.0) |
leftMotorSpeed = سرعت_موتور + تصحیح |
rightMotorSpeed = motor_speed - تصحیح |
# نئوپیکسل ها را روشن کنید تا نشان دهد GiggleBot به کدام سمت باید حرکت کند |
if run_neopixels isTrueand total_counts٪ 3 == 0: |
برای i inb '\ x00 / x01 / x02 / x03 / x04 / x05 / x06 / x07 / x08': |
neo = (0 ، 0 ، 0) |
برای i inb '\ x00 / x01 / x02 / x03': |
ifabs (error)> error_width_per_pixel * i: |
اگر خطا <0: |
neo [center_pixel + i] = (12 ، 44 ، 41) |
دیگری: |
neo [center_pixel - i] = (12 ، 44 ، 41) |
دیگری: |
درصد = 1- (error_width_per_pixel * i -abs (error)) / error_width_per_pixel |
# پیکسل فعلی را روشن کنید |
اگر خطا <0: |
# neo [center_pixel + i] = tuple (نقشه (lambda x: int (x * درصد) ، فیروزه ای)) |
neo [center_pixel + i] = (int (12* درصد) ، int (44* درصد) ، int (41* درصد)) |
دیگری: |
# neo [center_pixel - i] = tuple (نقشه (lambda x: int (x * درصد) ، فیروزه ای)) |
neo [center_pixel - i] = (int (12* درصد) ، int (44* درصد) ، int (41* درصد)) |
زنگ تفريح |
neo.show () |
تلاش كردن: |
# کلیپ موتورها |
در صورت باقی ماندن موتور سرعت> 100: |
leftMotorSpeed = 100 |
rightMotorSpeed = rightMotorSpeed - leftMotorSpeed +100 |
if rightMotorSpeed> 100: |
rightMotorSpeed = 100 |
leftMotorSpeed = leftMotorSpeed - rightMotorSpeed +100 |
اگر leftMotorSpeed <-100: |
leftMotorSpeed = -100 |
if rightMotorSpeed <-100: |
rightMotorSpeed = -100 |
# موتورها را فعال کنید |
set_speed (leftMotorSpeed ، rightMotorSpeed) |
راندن() |
# چاپ ((خطا ، سرعت موتور)) |
جز: |
# در صورت برخورد با مشکل غیر قابل رفع |
عبور |
# و فرکانس حلقه را حفظ کنید |
end_time = ticks_us () |
delay_diff = (زمان پایان - زمان شروع) /1000 |
total_time += delay_diff |
total_counts += 1 |
if1.0/ update_rate - delay_diff> 0: |
خواب (1.0/ نرخ_بهروزرسانی - تاخیر_دفعه) |
مشاهده rawgigglebot_line_follower_tuner.py میزبانی شده توسط ❤ توسط GitHub
مرحله 4: تنظیم تیونر (از راه دور)
کار بعدی که ما باید انجام دهیم این است که زمان اجرا + اسکریپت را به میکرو بی بی سی 2: bit فلش کنیم. این میکرو: بیت دوم به عنوان یک کنترل از راه دور برای GiggleBot عمل می کند ، که برای تنظیم پارامترهای زیر استفاده می شود:
- Kp = افزایش نسبی برای کنترل کننده PID.
- Ki = افزایش انتگرال برای کنترل کننده PID.
- Kd = سود مشتق شده برای کنترل کننده PID.
- trigger_point = نقطه ای که در درصد بین حداقل و حداکثر سرعت GiggleBot بیان می شود و در آن سرعت به صورت خطی کاهش می یابد تا به حداقل سرعت برسد.
- min_speed_percent = حداقل سرعت بیان شده در درصد حداکثر سرعت.
2 متغیر دیگر که می توان تنظیم کرد مستقیماً در اسکریپتی که در GiggleBot قرار دارد سخت کدگذاری شده است: update_rate و base_speed که نشان دهنده حداکثر سرعت است. همانطور که در مستندات توضیح داده شده است ، حداکثر سرعتی که می توان برای GiggleBot تنظیم کرد 100 است که برای GiggleBot ما نیز مقدار پیش فرض است.
توجه: در اسکریپت زیر ممکن است فضاهای خالی وجود داشته باشد و به نظر می رسد این به دلیل مشکل در نمایش GitHub Gists باشد. روی اصل مطلب کلیک کنید تا شما را به صفحه GitHub منتقل کند ، جایی که می توانید کد را کپی و جایگذاری کنید.
GiggleBot Remote PID Line Follower Tuner (به قسمت دیگر نیاز دارد) - xjfls23
از واردات microbit* |
از utime import sleep_ms |
وارد کردن رادیو |
ustruct وارد کنید |
# عنصر اول افزایش Kp است |
عنصر دوم افزایش Ki است |
عنصر سوم افزایش Kd است |
# چهارمین عنصر نقطه شروع برای کاهش سرعت موتورها است (0 -> 1) |
# 5 عنصر حداقل سرعت موتور است که در درصد بیان می شود (0 -> 1) |
سود = [0.0 ، 0.0 ، 0.0 ، 1.0 ، 0.0] |
stepSize = 0.1 |
شماره 0 و 1 برای عنصر اول |
شماره 2 و 3 برای عنصر دوم |
currentSetting = 0 |
defshowMenu (): |
display.scroll ('{} - {}'. فرمت (currentSetting ، افزایش [int (currentSetting /2)]) ، تاخیر = 100 ، انتظار = نادرست) |
radio.on () |
showMenu () |
whileTrue: |
به روز شده = غلط |
if button_a.is_pressed (): |
currentSetting = (currentSetting +1)٪ (2*5) |
به روز شده = درست |
if button_b.is_pressed (): |
if currentSetting٪ 2 == 0: |
افزایش # افزایش زمانی که currentSetting 0 یا 2 یا.. |
ifint (currentSetting /2) در [0، 2]: |
سود [int (currentSetting /2)] += 10* stepSize |
دیگری: |
به دست می آورد [int (currentSetting /2)] += stepSize |
دیگری: |
افزایش # افزایش زمانی که جریان 1 یا 3 یا.. |
ifint (currentSetting /2) در [0، 2]: |
سود [int (currentSetting /2)] -= 10* stepSize |
دیگری: |
به دست می آورد [int (currentSetting /2)] -= stepSize |
radio.send_bytes (ustruct.pack ('fffff'، *gains)) |
به روز شده = درست |
در صورت بروزرسانی: |
showMenu () |
sleep_ms (200) |
مشاهده rawgigglebot_line_follower_configurator.py میزبانی شده توسط ❤ توسط GitHub
مرحله 5: تنظیم GiggleBot
GiggleBot را در مسیر قرار دهید ، آن را روشن کرده و بگذارید اجرا شود. در همین حال ، شما دائماً باید آن را در مسیر قبلی قرار دهید و دستاوردها/پارامترها را با میکرو دیگر بی بی سی تنظیم کنید: بیتی که در دست دارید.
برای راه اندازی GiggleBot ، دکمه A را روی میکرو BBC: bit GiggleBot فشار دهید و آن را متوقف کرده و در نتیجه تنظیم مجدد حالت آن را روی دکمه B فشار دهید.
در میکرو BBC: bit از راه دور ، با فشردن دکمه A ، همه گزینه های منوی شما را مشاهده می کنید و دکمه B مقدار مربوطه را افزایش/کاهش می دهد. مثل این است که ساعت را روی داشبورد ماشین قدیمی تنظیم کنید. گزینه ها به این صورت است:
- گزینه های 0-1 برای افزایش Kp است.
- 2-3 گزینه برای افزایش Ki است.
- 4-5 گزینه برای افزایش Kd است.
- 6-7 گزینه برای تنظیم نقطه تنظیم برای لحظه ای است که موتورها کند می شوند.
- 8-9 گزینه برای تنظیم حداقل سرعت است.
به خاطر داشته باشید که اعداد زوج در منو برای افزایش مقادیر مربوطه هستند و برای موارد فرد دقیقاً برعکس است.
همچنین ، با فشار دادن دکمه B روی میکرو بی بی سی GiggleBot: bit ، در صفحه ساخته شده با نئوپیکسل آن تعداد میلی ثانیه سپری شده از آخرین بازنشانی و تعداد چرخه هایی که ربات طی کرده است را خواهید دید - با این دو می توانید محاسبه کنید میزان بروزرسانی ربات
در نهایت و مهمتر از همه ، من 2 تنظیم برای GiggleBot ارائه کرده ام. یکی از آنها برای زمانی است که LED های Neopixel خاموش هستند و دیگری برای موارد دیگر است. LED های Neopixel برای نشان دادن خطا در کدام جهت تجمع یافته است.
مجموعه اول تنظیم پارامترها (با LED های NeoPixel خاموش)
- Kp = 32.0
- کی = 0.5
- Kd = 80.0
- trigger_setpoint = 0.3 (که 30٪ است)
- min_speed_percent = 0.2 (که 20 is است)
- base_speed = 100 (معروف به حداکثر سرعت)
- update_rate = 70 (در حال اجرا در @70Hz)
مجموعه دوم تنظیم پارامترها (با LED های NeoPixel روشن)
- Kp = 25.0
- کی = 0.5
- Kd = 35.0
- trigger_setpoint = 0.3 (که 30٪ است)
- min_speed_percent = 0.3 (که 30 is است)
- base_speed = 70 (معروف به حداکثر سرعت)
- update_rate = 50 (در حال اجرا در @50Hz)
- همچنین ، متغیر run_neopixels باید در اسکریپتی که روی میکرو: بیت GiggleBot بارگیری می شود ، روی True تنظیم شود. این باعث می شود LED های NeoPixel به گونه ای چشمک بزنند که نشان دهند خطا در کدام جهت انباشته می شود.
مرحله 6: اجرای GiggleBot با خاموش بودن NeoPixels
این یک مثال از اجرای GiggleBot با پارامترهای تنظیم اول است که در مرحله قبل یافت شد. در این مثال LED های NeoPixel خاموش هستند.
مرحله 7: اجرای GiggleBot با روشن بودن نئوپیکسل ها
این یک مثال از اجرای GiggleBot با مجموعه دوم پارامترهای تنظیم است که در مرحله 5 یافت شده است. در این مثال LED های NeoPixel روشن هستند.
توجه کنید که چگونه در این مثال ، GiggleBot کار دشواری را دنبال می کند - این به این دلیل است که LED های Neopixel زمان CPU میکرو بی بی سی را "می خورند": بیت. به همین دلیل مجبور شدیم میزان بروزرسانی را از 70 به 50 کاهش دهیم.
توصیه شده:
تنظیم کننده ولتاژ قابل تنظیم LM317: 6 مرحله
LM317 تنظیم کننده ولتاژ قابل تنظیم: در اینجا ما می خواهیم در مورد تنظیم کننده های ولتاژ قابل تنظیم صحبت کنیم. آنها مدارهای پیچیده تری نسبت به خطی نیاز دارند. می توان آنها را برای تولید خروجی های مختلف ولتاژ ثابت بسته به مدار و همچنین ولتاژ قابل تنظیم از طریق پتانسیومتر استفاده کرد. من
PCB Design for Line Follower Robot - Arnab Kumar Das: 4 Step
PCB Design for Line Follower Robot - Arnab Kumar Das: این پروژه فرض می کند که ما قبلاً انتخاب قطعات را انجام داده ایم. برای اینکه یک سیستم به درستی کار کند ، درک آنچه که هر جزء از نظر قدرت ، ولتاژ ، جریان ، فضا ، خنک کننده و غیره نیاز دارد مهم است همچنین درک
منبع تغذیه DC قابل تنظیم با استفاده از تنظیم کننده ولتاژ LM317: 10 مرحله
منبع تغذیه DC قابل تنظیم با استفاده از تنظیم کننده ولتاژ LM317: در این پروژه ، من یک منبع تغذیه DC ولتاژ قابل تنظیم ساده با استفاده از IC LM317 با نمودار مدار منبع تغذیه LM317 طراحی کرده ام. از آنجا که این مدار دارای یک یکسو کننده پل داخلی است ، بنابراین می توانیم مستقیماً منبع تغذیه 220V/110V AC را در ورودی متصل کنیم
قسمت 3: GPIO: ARM Assembly: Line Follower: TI-RSLK: 6 Step
قسمت 3: GPIO: ARM Assembly: Line Follower: TI-RSLK: سلام. این قسمت بعدی است که در آن ما از مونتاژ ARM (به جای زبان سطح بالاتر) استفاده می کنیم. الهام بخش این دستورالعمل آزمایشگاه 6 کیت آموزش سیستم روباتیک Texas Instruments یا TI-RSLK است. ما از میکروفون استفاده می کنیم
آبیاری گیاهان سرپوشیده با NodeMCU ، سرور محلی Blynk و Blynk Apk ، نقطه تنظیم قابل تنظیم: 3 مرحله
آبیاری گیاهان سرپوشیده با NodeMCU ، سرور محلی Blynk و Blynk Apk ، نقطه تنظیم قابل تنظیم: من این پروژه را ساخته ام زیرا گیاهان داخلی من باید سالم باشند حتی وقتی در تعطیلات به مدت طولانی هستم و ایده این را دوست دارم تمام موارد احتمالی که در خانه من اتفاق می افتد را از طریق اینترنت کنترل یا حداقل نظارت کنم