فهرست مطالب:
- مرحله 1: مواد خود را جمع آوری کنید
- مرحله 2: جعبه ابزار Roomba را برای MATLAB بارگیری کنید
- مرحله 3: به Roomba خود متصل شوید
- مرحله 4: نحوه کنترل اتاق خود را انتخاب کنید
- مرحله 5: Roomba خود را رانندگی کنید
تصویری: تبدیل اتاق خود به یک مریخ نورد: 5 قدم
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:52
مرحله 1: مواد خود را جمع آوری کنید
برای تکمیل این پروژه ، باید مواد زیر را جمع آوری کنید:
1 ربات Roomba
1 کیت تمشک پای
1 دوربین فیلمبرداری
دسترسی به MATLAB
مرحله 2: جعبه ابزار Roomba را برای MATLAB بارگیری کنید
کد زیر را برای نصب جعبه ابزارهای لازم برای تکمیل این پروژه اجرا کنید.
تابع roombaInstall
clc؛
٪ لیست فایل ها برای نصب
files = {'roomba.m'، 'roombaSim.m'، 'roombaSimGUI.m'، 'roombaSimGUI.fig'}؛
٪ محل نصب از
options = weboptions ('CertificateFilename'، '')؛ ٪ به آن می گویند که الزامات گواهی را نادیده می گیرد
server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/' ؛
dlgTitle = 'نصب/بروزرسانی Roomba'؛
٪ نمایش هدف و دریافت تأیید
سریع = {
"این برنامه این فایل های EF 230 Roomba را بارگیری می کند:"
''
strjoin (فایل ها ، '')
''
'به این پوشه:'
''
سی دی
''
'می خواهید ادامه دهید؟ '
};
بوق ؛
yn = questdlg (سریع ،…
dlg عنوان ،…
"بله" ، "نه" ، "بله") ؛
if ~ strcmp (yn ، 'Yes') ، return؛ پایان
٪ لیست پرونده های موجود را دریافت کنید
فایلهای موجود = فایلها (cellfun (exist، files)> 0) ؛
if ~ isempty (فایلهای موجود)
٪ مطمئن شوید که جایگزینی آنها واقعاً مناسب است
prompt = {'شما این فایلها را جایگزین می کنید:'
''
strjoin (فایلهای موجود ، '')
''
"خوب است جایگزین شود؟"
};
بوق ؛
yn = questdlg (سریع ،…
dlg عنوان ،…
"بله" ، "نه" ، "بله") ؛
if ~ strcmp (yn، 'Yes')، return؛ پایان
پایان
٪ بارگیری فایل ها
cnt = 0؛
برای i = 1: length (فایل ها)
f = فایل {i} ؛
disp (['' بارگیری 'f])؛
تلاش كردن
url = [سرور f]؛
websave (f، url، options)؛ ٪ گزینه برای جلوگیری از خطاهای امنیتی اضافه شده است
cnt = cnt + 1؛
گرفتن
disp (['خطا در بارگیری' f])؛
ساختگی = [f '.html']؛
در صورت وجود (ساختگی ، 'فایل') == 2
حذف (ساختگی)
پایان
پایان
پایان
اگر cnt == طول (فایل ها)
msg = 'نصب با موفقیت انجام شد'؛
waitfor (msgbox (msg، dlgTitle))؛
دیگری
msg = 'خطای نصب - برای جزئیات به پنجره فرمان مراجعه کنید'؛
waitfor (errordlg (msg، dlgTitle))؛
پایان
پایان٪ roombaInstall
مرحله 3: به Roomba خود متصل شوید
اکنون زمان آن رسیده است که با استفاده از WiFi به Roomba خود متصل شوید. با استفاده از 2 انگشت ، دکمه های Dock و Spot را همزمان فشار دهید تا Roomba شما روشن یا بازنشانی شود. سپس ، کد r = roomba (# Roomba خود) را در پنجره فرمان MATLAB اجرا کنید تا به ربات خود متصل شوید. پس از اجرای این دستور ، Roomba شما باید آماده حرکت باشد.
مرحله 4: نحوه کنترل اتاق خود را انتخاب کنید
به دو روش می توانید Roomba خود را کنترل کنید: به صورت خودکار یا استفاده از تلفن هوشمند به عنوان کنترل کننده.
اگر رانندگی رومبا را به صورت خودکار انتخاب می کنید ، باید از سه سنسور داخلی استفاده کنید: سنسورهای صخره ای ، سنسورهای برخورد و سنسورهای نور.
برای استفاده از تلفن هوشمند ، ابتدا باید با دنبال کردن مراحل زیر تلفن هوشمند خود را به رایانه وصل کنید.
توجه: برای اتصال صحیح ، رایانه و تلفن هوشمند شما باید در یک شبکه WiFi باشند!
1. برنامه MATLAB را از فروشگاه برنامه دستگاه خود بارگیری کنید.
2. "connector on" را در پنجره فرمان خود تایپ کرده و گذرواژه ای را تنظیم کنید که باید در هر دو دستگاه وارد شود.
3. پس از انجام این کار ، MATLAB آدرس IP رایانه های خود را به شما می دهد. باید به صفحه تنظیمات در برنامه MATLAB در تلفن هوشمند خود بروید و با استفاده از آدرس IP داده شده و گذرواژه ای که قبلاً وارد کرده اید ، یک رایانه اضافه کنید.
4. در پنجره فرمان رایانه خود ، کد m = mobiledev را تایپ کنید و این امر باعث می شود تلفن هوشمند شما به عنوان کنترل کننده Roomba شما راه اندازی شود.
5. رایانه و تلفن هوشمند شما باید آماده کار باشد.
مرحله 5: Roomba خود را رانندگی کنید
اکنون که همه ابزارهای لازم برای ایجاد Mars Rover خود را دارید ، آماده ایجاد کد خود هستید. ما کد زیر را برای رانندگی خودکار و رانندگی با تلفن هوشمند ضمیمه کرده ایم.
رانندگی مستقل
تابع Explore_modified (r)
٪ آرگومان های ورودی: 1 object roomba ، r
٪ آرگومان خروجی: هیچ
٪شرح:
تابع٪ از حلقه نامحدود در حالی که اجازه می دهد تا خودکار باشد استفاده می کند
٪ کاوش در اطراف ربات.
%
٪ funciton همچنین دستوراتی را به roomba ارائه می دهد که در آن باید چه کار کرد
٪ موارد زیر: تماس (ها) چرخ با زمین قطع می شود
object شیء در مقابل یا در دو طرف ربات تشخیص داده می شود ، و a
٪ افت ناگهانی در مقابل یا در هر دو طرف ربات تشخیص داده می شود.
%
instructions دستورالعمل های معمولی شامل دستورات حرکتی است که برای به حداکثر رساندن استفاده شده است
٪ اکتشاف یا اجتناب از خطر شناسایی شده و دستورات برقراری ارتباط
٪ اطلاعات مربوط به کشفیات ربات ها (تصاویر) ، موقعیت (نمودار) ،
٪ و وضعیت (هشدار گیر افتاده) با کاربر از طریق matlab و/یا ایمیل. چند
٪ دستورات صوتی برای لذت اضافه می شوند.
٪ راه اندازی قابلیت های ایمیل
mail = '[email protected]'؛
رمز عبور = 'EF230Roomba'؛
setpref ("اینترنت" ، "SMTP_Server" ، "smtp.gmail.com") ؛
setpref ("اینترنت" ، "E_mail" ، نامه) ؛
setpref ("اینترنت" ، "SMTP_Username" ، نامه) ؛
setpref ('اینترنت' ، 'SMTP_Password' ، رمز عبور) ؛
props = java.lang. System.getProperties؛
props.setProperty ('mail.smtp.starttls.enable' ، 'true') ؛
props.setProperty ('mail.smtp.auth' ، 'true') ؛
props.setProperty ('mail.smtp.socketFactory.class' ، 'javax.net.ssl. SSLSocketFactory') ؛
props.setProperty ('mail.smtp.socketFactory.port' ، '465') ؛
٪ r = roomba (19)
r.epep ('G2 ^^ ، G2 ^^ ، G2 ^^ ، G2 ^^ ، A2 ^^ ، A2 ^^ ، G1 ^^ ، E1 ^^ ، C2 ^^ ، C2 ^^ ، C1 ^^ ، C1 ^^ ، D1 ^^ ، C1 ^^ ، D2 ^^ ، E4 ^^ ، G2 ^^ ، G2 ^^ ، G2 ^^ ، G2 ^^ ، A2 ^^ ، A2 ^^ ، G1 ^^ ، E1 ^^ ، C2 ^^ ، C2 ^^ ، C2 ^^ ، E1 ^^ ، E1 ^^ ، E1 ^^ ، D1 ^^ ، C4 ^^ ') ؛
v =.1 ؛
reflect_datum = 2700 ؛ ٪ مقدار مرجع سنسورهای صخره ای را تنظیم کنید
lightBumper_datum = 200 ؛ ٪ مقدار مرجع سنسورهای سپر نور تنظیم شده است
pos = [0، 0]؛ variable متغیر برای ذخیره موقعیت با مقداردهی اولیه
زاویه = 0 ؛ ٪ تنظیم زاویه مرجع
netangle = 0 ؛ درصد جابجایی زاویه خالص
i = 2 ؛ ٪ iterator برای افزودن سطر به متغیر ذخیره سازی موقعیت
dist = 0؛
r.setDriveVelocity (v ، v) ؛ ٪ start roomba حرکت به جلو
در حالی که حقیقت دارد
Cliff = r.getCliffSensors؛
Bump = r.getBumpers؛
Light = r.getLightBumpers؛
RandAngle = رندی ([20 ، 60] ، 1) ؛ ٪ 1 زاویه تصادفی بین 20 تا 60 درجه ایجاد می کند. برای جلوگیری از گیر افتادن ربات در یک حلقه استفاده می شود
٪ اگر یک یا چند چرخ تماس خود را با زمین قطع کرد ، چه باید کرد:
٪ توقف حرکت ، ارسال یک ایمیل هشداردهنده با تصویر محیط اطراف ،
٪ و از کاربر بخواهید که ادامه دهد یا منتظر کمک باشد
if Bump.rightWheelDrop == 1 || Bump.leftWheelDrop == 1
r. توقف
dist = r.getDistance؛
pos (i، 1) = pos (i-1، 1) + dist * sind (netangle) ؛ ٪ مختصات x را دریافت کنید
pos (i ، 2) = pos (i-1 ، 2) + dist * cosd (netangle) ؛ ٪ دریافت y مختصات
i = i+1 ؛
r.beep ('F#1 ^^، C1 ^^، F#1 ^^، C1 ^^، F#1 ^^، C1 ^^، F#1 ^^، C1 ^^، F#1 ^^ ، C1 ^^ ، F#1 ^^ ، C1 ^^ ، F#1 ^^ ، C1 ^^ ، F#1 ^^ ، C1 ^^ ')
img = r.getImage؛
imwrite (img، 'stuck.png')؛
%--------------------------
imfile = 'stuck.png'؛
موقعیت = savepos (pos) ؛
%---------------------------
sendmail (نامه ، "HELP!" ، "من روی صخره گیر کرده ام!" ، {imfile ، position})
list = {'ادامه' ، 'توقف'}؛
idx = menu ("چکار باید بکنم؟" ، لیست) ؛
اگر idx == 2
زنگ تفريح
پایان
٪ اگر شیئی در جلوی ربات تشخیص داده شود چه باید کرد:
٪ توقف ، حرکت به عقب ، عکس گرفتن ، کاربر را از کشف مطلع کنید
٪ از طریق ایمیل ، 90 درجه بپیچید و به کاوش ادامه دهید
elseif Light.leftCenter> lightBumper_datum || Light.rightCenter> lightBumper_datum || Bump.front == 1
r.stop ؛
dist = r.getDistance؛
pos (i، 1) = pos (i-1، 1) + dist * sind (netangle) ؛ ٪ مختصات x را دریافت کنید
pos (i ، 2) = pos (i-1 ، 2) + dist * cosd (netangle) ؛ ٪ دریافت y مختصات
i = i+1 ؛
r.moveDistance (-. 125) ؛
dist = r.getDistance؛
pos (i، 1) = pos (i-1، 1) + dist * sind (netangle) ؛ ٪ مختصات x را دریافت کنید
pos (i ، 2) = pos (i-1 ، 2) + dist * cosd (netangle) ؛ ٪ دریافت y مختصات
i = i+1 ؛
r.epep ('A1^، A1^، A4^، A2^، G2^، G2^، G4^، Bb2^، Bb2^، Bb3.5^، G1^، A8^')
img = r.getImage؛
imwrite (img ، 'FrontBump.png')
%--------------------------
imfile = 'FrontBump.png'؛
موقعیت = savepos (pos) ؛
%---------------------------
sendmail (نامه ، "هشدار!" ، "من چیزی پیدا کردم!" ، {imfile ، position})
زاویه = 90 ؛
netangle = netangle+angle؛
r.turnAngle (زاویه) ؛
r.setDriveVelocity (v ، v) ؛
٪ اگر شی در سمت چپ ربات تشخیص داده شود ، چه باید کرد:
٪ توقف ، چرخاندن به سمت شی ، پشتیبان گیری ، عکس گرفتن ، هشدار
٪ کاربر کشف شده از طریق ایمیل ، 90 درجه بپیچید و به کاوش ادامه دهید
elseif Light.leftFront> lightBumper_datum || Light.left> lightBumper_datum || Bump.left == 1
r.stop ؛
dist = r.getDistance؛
pos (i، 1) = pos (i-1، 1) + dist * sind (netangle) ؛ ٪ مختصات x را دریافت کنید
pos (i ، 2) = pos (i-1 ، 2) + dist * cosd (netangle) ؛ ٪ دریافت y مختصات
i = i+1 ؛
زاویه = 30 ؛
netangle = netangle+angle؛
r.turnAngle (زاویه) ؛
r.moveDistance (-. 125) ؛
dist = r.getDistance؛
pos (i، 1) = pos (i-1، 1) + dist * sind (netangle) ؛ ٪ مختصات x را دریافت کنید
pos (i ، 2) = pos (i-1 ، 2) + dist * cosd (netangle) ؛ ٪ دریافت y مختصات
i = i+1 ؛
r.epep ('A4^، A4^، G1^، E1^، C3.5^، C2 ^^، C1^، C1^، C2^، D2^، D2^، E8^')
img = r.getImage؛
imwrite (img ، 'LeftBump.png')
%--------------------------
imfile = 'LeftBump.png'؛
موقعیت = savepos (pos) ؛
%---------------------------
sendmail (نامه ، "هشدار!" ، "من چیزی پیدا کردم!" ، {imfile ، position})
زاویه = -90 ؛
netangle = netangle+angle؛
r.turnAngle (زاویه) ؛
r.setDriveVelocity (v ، v) ؛
٪ اگر شی در سمت راست ربات تشخیص داده شود ، چه باید کرد:
٪ توقف ، چرخاندن به سمت شی ، پشتیبان گیری ، عکس گرفتن ، هشدار
٪ کاربر کشف شده از طریق ایمیل ، 90 درجه بپیچید و به کاوش ادامه دهید
elseif Light.rightFront> lightBumper_datum || Light.right> lightBumper_datum || Bump.right == 1
r.stop ؛
dist = r.getDistance؛
pos (i، 1) = pos (i-1، 1) + dist * sind (netangle) ؛ ٪ مختصات x را دریافت کنید
pos (i ، 2) = pos (i-1 ، 2) + dist * cosd (netangle) ؛ ٪ دریافت y مختصات
i = i+1 ؛
زاویه = -30 ؛
netangle = netangle+angle؛
r.turnAngle (زاویه) ؛
r.moveDistance (-. 125) ؛
dist = r.getDistance؛
pos (i، 1) = pos (i-1، 1) + dist * sind (netangle) ؛ ٪ مختصات x را دریافت کنید
pos (i ، 2) = pos (i-1 ، 2) + dist * cosd (netangle) ؛ ٪ دریافت y مختصات
i = i+1 ؛
مکث (1.5) ؛
r.epep ('C1^، C1^، C2^، D2^، D2^، C8^')
img = r.getImage؛
imwrite (img ، 'RightBump.png')
%--------------------------
imfile = 'RightBump.png'؛
موقعیت = savepos (pos) ؛
%---------------------------
sendmail (نامه ، "هشدار!" ، "من چیزی پیدا کردم!" ، {imfile ، position}) ؛
زاویه = 90 ؛
netangle = netangle+angle؛
r.turnAngle (زاویه) ؛
r.setDriveVelocity (v ، v) ؛
٪ اگر صخره در سمت چپ ربات تشخیص داده شود ، چه باید کرد:
٪ توقف ، حرکت به عقب ، گردش به راست ، ادامه کاوش
elseif Cliff.left <reflect_datum || Cliff.leftFront <reflect_datum
r.stop ؛
dist = r.getDistance؛
pos (i، 1) = pos (i-1، 1) + dist * sind (netangle) ؛ ٪ مختصات x را دریافت کنید
pos (i ، 2) = pos (i-1 ، 2) + dist * cosd (netangle) ؛ ٪ دریافت y مختصات
i = i+1 ؛
r.moveDistance (-. 125) ؛
dist = r.getDistance؛
pos (i، 1) = pos (i-1، 1) + dist * sind (netangle) ؛ ٪ مختصات x را دریافت کنید
pos (i ، 2) = pos (i-1 ، 2) + dist * cosd (netangle) ؛ ٪ دریافت y مختصات
i = i+1 ؛
زاویه = -RandAngle؛
netangle = netangle+angle؛
r.turnAngle (زاویه) ؛
r.setDriveVelocity (v ، v) ؛
٪ اگر صخره در سمت راست ربات تشخیص داده شود ، چه باید کرد:
٪ توقف ، حرکت به عقب ، گردش به چپ ، ادامه کاوش
elseif Cliff.right <reflect_datum || Cliff.rightFront <reflect_datum
r.stop ؛
dist = r.getDistance؛
pos (i ، 1) = dist * sind (زاویه) ؛ ٪ مختصات x را دریافت کنید
pos (i ، 2) = dist * cosd (زاویه) ؛ ٪ دریافت y مختصات
i = i+1 ؛
r.moveDistance (-. 125) ؛
angle = RandAngle؛
netangle = netangle+angle؛
r.turnAngle (زاویه) ؛
r.setDriveVelocity (v ، v) ؛
پایان
پایان
کنترل کننده گوشی های هوشمند
گزینه ها = {'خودکار "،" کنترل دستی "}
Prompt = menu ("چگونه می خواهید مریخ نورد را کنترل کنید؟" ، گزینه ها)
m = mobiledev
r = roomba (19)
اگر سریع == 1
کاوش (r)
دیگری
در حالی که حقیقت دارد
مکث (.5)
PhoneData = m. جهت
Azi = PhoneData (1) ؛
پیچ = PhoneData (2) ؛
سمت = PhoneData (3) ؛
اگر طرف> 130 || در صورت ورق خوردن تلفن به طرف پایین -130 the ، roomba را متوقف کرده و حلقه خروج را قطع کنید
r. توقف
r.epep ('C، C، C، C')
زنگ تفريح
elseif Side> 25 && Side <40٪ اگر تلفن بین 25 تا 40 درجه به طرف دیگر بچرخد ، 5 درجه به چپ بپیچید
r.turnAngle (-5) ؛
elseif Side> 40٪ اگر تلفن بیش از 40 درجه به طرف دیگر بچرخد ، 45 درجه به چپ بپیچید
r.turnAngle (-45)
elseif Side -40٪ اگر تلفن بین -25 تا -40 درجه به طرف دیگر بچرخد 5 درجه به راست بپیچید
r.turnAngle (5) ؛
elseif <-40٪ اگر تلفن کمتر از -40 درجه به طرف دیگر بچرخد 45 درجه به چپ بپیچید
r.turnAngle (45)
پایان
If اگر تلفن در نزدیکی عمود نگه داشته شود ، تصویری بگیرید و آن را رسم کنید
اگر پیچ <-60 && تصویر <= 9
r.epep
img = r.getImage؛
فرع فرعی (3 ، 3 ، تصویر)
نمایش (img)
پایان
٪ بر اساس جهت جلو و عقب به جلو و عقب حرکت می کند
اگر Pitch> 15 && Pitch <35٪ اگر گام بین 15 تا 35 درجه به جلو حرکت می کند مسافت کوتاه
٪ قبل از حرکت داده های سپر نور را دریافت کنید
litBump = r.getLightBumpers؛
if litBump.leftFront> 500 || litBump.leftCenter> 500 || litBump.rightCenter> 500 || litBump.rightFront> اگر چیزی در جلوی اتاق باشد و اگر به جلو حرکت کند صدا ایجاد می کند و پیام را نمایش می دهد 500٪
r.beep ('C ^^، F#^، C ^^، F#^')
else٪ move
r.moveDistance (.03) ؛
data دریافت اطلاعات سپر پس از حرکت
Bump = r.getBumpers؛
اگر Bump.right == 1 || Bump.left == 1 || Bump.front == 1
r.epep ('A، C، E')
r.moveDistance (-. 01)
پایان
٪ دریافت اطلاعات سنسور صخره
Cliff = r.getCliffSensors؛
اگر Cliff.left> 1500 || Cliff.left جلو> 1500 || Cliff.rightFront> 1500 || Cliff.right> 1500 if اگر چیزی باعث ایجاد حسگر صخره شود ، آن را مانند گدازه و پشتیبان بگیرید
r.epep ('C ^^، C، C ^^، C، C ^^، C، C ^^، C، C ^^، C، C ^^، C')
r.moveDistance (-. 031)
پایان
پایان
elseif Pitch> 35٪ اگر گام بیشتر از 35 درجه بیشتر مسافت طولانی تری را به جلو حرکت دهید
٪ قبل از حرکت داده های سپر نور را دریافت کنید
litBump = r.getLightBumpers؛
if litBump.leftFront> 15 || litBump.leftCenter> 15 || litBump.rightCenter> 15 || litBump.rightFront> اگر چیزی در جلوی اتاق باشد و اگر به جلو حرکت کند صدا ایجاد می کند و پیام را نمایش می دهد
r.beep ('C ^^، F#^، C ^^، F#^')
else٪ move
r.moveDistance (.3)
data دریافت اطلاعات سپر پس از حرکت
Bump = r.getBumpers؛
اگر Bump.right == 1 || Bump.left == 1 || Bump.front == 1٪ در صورت ضربه زدن به چیزی باعث ایجاد سر و صدا ، نمایش پیام و پشتیبان گیری می شود
r.epep ('A، C، E')
r.moveDistance (-. 01)
پایان
٪ پس از حرکت داده های سنسور صخره را دریافت می کنند
Cliff = r.getCliffSensors؛
اگر Cliff.left> 1500 || Cliff.left جلو> 1500 || Cliff.rightFront> 1500 || Cliff.right> 1500 if اگر چیزی باعث ایجاد حسگر صخره شود ، آن را مانند گدازه و پشتیبان بگیرید
r.epep ('C ^^، C، C ^^، C، C ^^، C، C ^^، C، C ^^، C، C ^^، C')
r.moveDistance (-. 31)
پایان
پایان
elseif Pitch -35٪ اگر گام بین -15 تا -35 درجه سانتیگراد به مسافت کوتاه برمی گردد
r.moveDistance (-. 03) ؛
٪ پس از حرکت داده های سنسور صخره را دریافت می کنند
Cliff = r.getCliffSensors؛
اگر Cliff.left> 1500 || Cliff.left جلو> 1500 || Cliff.rightFront> 1500 || Cliff.right> 1500 if اگر چیزی باعث ایجاد حسگر صخره شود ، آن را مانند گدازه و پشتیبان بگیرید
r.epep ('C ^^، C، C ^^، C، C ^^، C، C ^^، C، C ^^، C، C ^^، C')
r.moveDistance (.04)
پایان
elseif Pitch -60٪ اگر گام بین -35 تا -60 درجه سانتیگراد به مسافت طولانی تری حرکت کند
r.moveDistance (-. 3)
٪ پس از حرکت داده های سنسور صخره را دریافت می کنند
Cliff = r.getCliffSensors؛
اگر Cliff.left> 1500 || Cliff.left جلو> 1500 || Cliff.rightFront> 1500 || Cliff.right> 1500 if اگر چیزی باعث ایجاد حسگر صخره شود ، آن را مانند گدازه و پشتیبان بگیرید
r.epep ('C ^^، C، C ^^، C، C ^^، C، C ^^، C، C ^^، C، C ^^، C')
r.moveDistance (.31)
پایان
پایان
پایان
پایان
توصیه شده:
مجهز به بلوتوث مریخ نورد با Dexter: 9 مرحله
مجهز به کنترل بلوتوث با Dexter: برد Dexter یک کیت آموزشی مربی است که یادگیری وسایل الکترونیکی را سرگرم کننده و آسان می کند. هیئت مدیره تمام اجزای لازم را که یک مبتدی برای تغییر ایده به یک نمونه اولیه موفق نیاز دارد گرد هم می آورد. با وجود آردوینو در قلب خود ، تعداد زیادی از
روباتیک مریخ نورد: 10 قدم
Robotic Rover: سلام ، من Proxy303 هستم ، متخصص رباتیک. در این آموزش ، من به شما آموزش می دهم که چگونه یک ربات خود را مانند یک ربات خود بسازید. من در مورد یکی از آن اتومبیل های کنترل از راه دور که مردم آن را روبات می نامند صحبت نمی کنم. یکی از تعاریف بسیار
نحوه ساخت یک مریخ نورد کنترل شده با حرکت: 4 مرحله
نحوه ساخت یک مریخ نورد کنترل شده با حرکت: در اینجا دستورالعمل های ساخت یک مریخ نورد کنترل شده با حرکت (مریخ نورد مخابراتی از راه دور) آمده است. این دستگاه شامل یک مریخ نورد است که دارای سنسور جلوگیری از برخورد است. فرستنده به جای اینکه از راه دور دست و پا گیر باشد ، یک دستکش خنک است که می توان از آن استفاده کرد
مریخ نورد زیر آب: 3 قدم
زیر آب مریخ نورد: در این پروژه ، ما مشکل اقیانوس های کشف نشده خود را با ایجاد یک مریخ نورد زیر آب حل می کنیم. این مریخ نورد می تواند اعماق زیاد اقیانوس را جمع آوری کرده و داده ها را در محیط اطراف خود جمع آوری کند. بسیاری از شرکت هایی که در
مینی کنجکاوی مریخ نورد: 6 قدم
مینی کنجکاوی مریخ نورد: کنجکاوی چیست؟ کنجکاوی یک مریخ نورد به اندازه خودرو است که برای کشف دهانه گیل در مریخ به عنوان بخشی از ماموریت آزمایشگاه علوم مریخ ناسا (MSL) طراحی شده است. کنجکاوی در کیپ کاناورال در 26 نوامبر 2011 ، ساعت 15:02 راه اندازی شد. UTC. چگونه کار می کند؟ کنجکاوی دارای