فهرست مطالب:
- مرحله 1: قطعات و ابزارها
- مرحله 2: برش قطعات و مونتاژ
- مرحله 3: نرم افزار - (Arduino)
- مرحله 4: نرم افزار - روبات لپ تاپ (وب سرور)
- مرحله 5: نرم افزار - (صفحه وب)
- مرحله ششم: تمام شد
تصویری: ساخت یک ربات متصل به وب (با هزینه حدود 500 دلار) (با استفاده از آردوینو و نت بوک): 6 مرحله (همراه با تصاویر)
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:58
این دستورالعمل به شما نشان می دهد که چگونه می توانید ربات متصل به وب خود (با استفاده از میکروکنترلر آردوینو و رایانه Asus eee pc) بسازید. چرا می خواهید یک ربات متصل به وب داشته باشید؟ البته برای بازی ربات خود را از سراسر اتاق یا در سراسر کشور رانندگی کنید ، از اسکایپ و مرورگر وب بیشتر استفاده نکنید (چیزی برای نصب بر روی رایانه کنترل کننده). بعد از آن؟ به نرم افزار وارد شوید و آن را به هر نحوی که دوست دارید تنظیم کنید ، GPS اضافه کنید تا بتوانید مکان مورد نظر خود را بر روی نقشه تماشا کنید ، سنسورهای دما را برای ترسیم گرادیان های دمای خانه خود اضافه کنید ، یا سنسورهای سونار برای افزودن کنترل بر آنچه در وب هستید رانندگان می توانند و نمی توانند به آن برخورد کنند امکانات:
- ارزان - (اگر همه قطعات جدید را خریداری کنید 500 پوند و اگر در سطل قطعات خود گشت و گذار کنید بسیار ارزان تر است)
- پس از راه اندازی کنترل ربات فقط به یک مرورگر وب نیاز دارید - (و اگر می خواهید محل رانندگی خود را ببینید اسکایپ)
- منبع باز و به راحتی قابل تطبیق - (با استفاده از میکروکنترلر آردوینو ، پردازش برای سرور وب و همه نرم افزارها می توانند بر روی لینوکس اجرا شوند (برای کدگذاری و تغییر کارها همه کد نیز کاملاً توضیح داده شده است))
- طراحی ماژولار (نه یک سیستم کاملاً یکپارچه ، اگر می خواهید از سرویس ویدئو کنفرانس متفاوتی استفاده کنید ، نگران نباشید ، یا اگر یک تمبر اصلی دارید نه یک آردوینو ، فقط یک قطعه کد کوچک را درست کرده و آن را داخل دستگاه قرار دهید)
در اینجا ویدئویی سریع از بیرون راندن ربات متصل به وب من از آشپزخانه وجود دارد.
مرحله 1: قطعات و ابزارها
فقط چند قسمت مورد نیاز است: ربات: ربات سروو کنترل شده آردوینو - (SERB) ($ 175 @ oomlout.com) یا (خودتان بسازید)
یک ربات منبع باز که از یک میکروکنترلر آردوینو به عنوان مغز استفاده می کند
(می توان از هر پلتفرم ربات سروو دوگانه با آردوینو استفاده کرد (گزینه 1) (در صورت مشاهده سایر گزینه ها به من پیام دهید) کامپیوتر: Asus eee PC 4G (280 دلار) (بهترین خرید)
یک لپ تاپ کوچک ارزان قیمت که برای این منظور مناسب است
(از هر لپ تاپ (یا دسکتاپ اگر می خواهید با آکورد اجرا شود) با قابلیت اجرای طرح های پردازشی می توان استفاده کرد) میز لپ تاپ: اکریلیک برش لیزری (25 دلار (@ oomlout)) یا (مرحله 3 خود را بسازید)
چند قطعه اکریلیک اضافی که روی یک (SERB) پیچ می خورند و میز تحریر لپ تاپ را به آن می دهند
آجیل و پیچ: (موجود در انبار خانه)
- پیچ 3 میلی متر در 10 میلی متر (x4)
- پیچ 3 میلی متر در 15 میلی متر (x4)
- مهره 3 میلی متری (x8)
مرحله 2: برش قطعات و مونتاژ
سه گزینه برای تهیه قطعات برای میز لپ تاپ شما وجود دارد. برش گزینه 1: (خرید از oomlout.com)
قطعات میز برش لیزری و سخت افزار مورد نیاز از oomlout با قیمت 25 دلار در دسترس است (اینجا)
گزینه 2: (برش با دستگاه برش لیزری خود یا Ponoko.com)
- فایل زیر را بارگیری کنید (03-WEBB-Acrylic Parts.cdr یا 03-WEBB-Acrylic Parts (Ponoko P2).eps)
- آنها را از 3 میلی متر (1/8 ") اکریلیک برش دهید
گزینه 3: (Scroll Saw)
- الگوی اره اسکرول را از زیر بارگیری کنید (03-WEBB-ScrollSaw Pattern (A4).pdf (برای کاغذ با اندازه A4) یا 03-WEBB-ScrollSaw Pattern (حرف).pdf (برای کاغذ با اندازه حروف))
- هنگام چاپ مجدد بررسی کنید که آیا اندازه گیری نشده است (با اندازه گیری خط کش های چاپ شده)
- به قطعه ای از اکریلیک 3 میلی متری (1/8 اینچ) بچسبانید و قطعات را برش دهید.
مونتاژ: راهنمای مونتاژ (04-WEBB-Assembly Guide.pdf) را در زیر بارگیری کرده و میز لپ تاپ را کنار هم قرار دهید.
مرحله 3: نرم افزار - (Arduino)
برای کسانی که تازه وارد آردوینو شده اند ، راهنمای شروع عالی را در Arduino.cc ببینید ، ابتدا نرم افزاری را که بر روی آردوینو اجرا می شود ، بررسی کنید. این یک برنامه بسیار ساده است ، کاری که آردوینو انجام می دهد نظارت بر درگاه سریال خود برای داده ها است. چیزی که به دنبال آن است یک مکالمه 5 بایت است.
- بایت 1-3 (بررسی بایت های "AAA")
- Byte 4 Command (به آردوینو می گوید که چه کار کند) (دستورات پشتیبانی شده 'F' - Forward ، 'B' - Backward ، 'L' - Left ، 'R' - Right ، 'S' - Speed ، 'X' - SetSpeedLeft ، "Y" - SetSpeedRight ، "C" - Stop)
- بایت 5 پارامتر - برای دستورات move این یک فاصله زمانی (پارامتر * 100 میلی ثانیه) و برای دستورات سرعت درصدی از 0-100 تفسیر می شود.
کد کاملاً توضیح داده می شود و با توجه به این چارچوب ، افزودن دستورات اضافی باید آسان باشد. برای بارگیری:
- فایل فشرده ضمیمه شده را بارگیری کنید. (05-WEBB-Arduino Code.zip)
- در فهرست Arduino Sketch خود را از حالت فشرده خارج کنید. (به طور پیش فرض: اسناد من / Arduino)
- محیط توسعه arduino خود را باز کرده و در Arduino خود بارگذاری کنید.
برای کپی و جایگذاری
- کد زیر را کپی کنید.
- در محیط توسعه آردوینو بچسبانید.
- در آردوینو خود بارگذاری کنید.
پیوست: برنامه آردوینو
/ * * ربات متصل به وب کنترل شده آردوینو (WEBB) - میزبان سریال * برای اطلاعات بیشتر به آدرس زیر مراجعه کنید: https://www.oomlout.com/serb * * رفتار: آردوینو برای فرمان * با فرمت 254 به پورت سریال خود گوش می دهد ، 88 ، 88 ، (COMMAND) ، (TIME) * دستورات پشتیبانی شده - & aposF & apos - 70 - Forward * & aposB & apos - 66 - Backward * & aposL & apos - 76 - Left * & aposR & apos - 82 - Right * & aposS & apos - 83 - Speed * & aposX & aposL - 88 - SetS * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - توقف * زمانهای پشتیبانی شده - 0 - 255 (0 تا 25.5 ثانیه) مقدار * 100 میلی ثانیه * sp * سیم کشی: سیگنال سروو راست - پین 9 * سیگنال سروو چپ - پین 10 * * مجوز: این اثر دارای مجوز Creative Commons * Attribution-Share Alike 3.0 License Unported می باشد. برای * مشاهده نسخه ای از این مجوز ، از * https://creativecommons.org/licenses/by-sa/3.0/ * دیدن کنید یا نامه ای به Creative Commons ، 171 Second * Street، Suite 300 ، سان فرانسیسکو ، کالیفرنیا 94105 ارسال کنید ، * ایالات متحده آمریکا. * */// ------------------------------------------------- ---------------------------- // شروع سرور پیش فرض ARDUINO // تعریف ثابت های مربوط به هر فرمان (همچنین شماره کد ascii) #define FORWARD 70 // F#define BACKWARD 66 // B#define LEFT 76 // L#define RIGHT 82 // R#define SETSPEED 83 // S#define STOP 67 // C#define SETSPEEDLEFT 88 // X #define SETSPEEDRIGHT 89 // Y/ *سه بایت چک (برای جلوگیری از پاسخگویی ربات به داده های سریال *تصادفی) در حال حاضر "AAA" */#define checkByte1 65 // "A" #define checkByte2 65 // "A "#define checkByte3 65 //" A "// ------------------------------------------ ------------------------------------ // شروع ARDUINO CONTROLLED SERVO ROBOT (SERB) PREAMBLE#شامل #define LEFTSERVOPIN 10 // پین سروو سمت چپ به#define RIGHTSERVOPIN 9 // پین سرووی راست بهServo leftServo متصل است ؛ سروو راست Servo؛ int leftSpeed = 50؛ // سرعت روباتهای leftServo را نگه می دارد // درصدی بین 0 تا 100int rightSpeed = 100؛ // سرعت روبات ها را درست نگه می دارد Servo // درصدی بین 0 تا 100 // END OF ARDUINO CONTROLLED SERVO ROBOT (SERB) PREAMBLE // ------------------- ------------------------------------------------------ ----- // همه چیز را آماده می کند و اجرا می شود setvoid setup () {Serial.begin (9600)؛ // پورت سریال serbSetup () را راه اندازی می کند ؛ // وضعیت همه پین های مورد نیاز // را تنظیم می کند و سرویس ها را به طرح شما اضافه می کند} // حلقه حلقه اصلی برنامه () {serbPollSerialPort ()؛ // به طور مداوم به پورت سریال نگاه می کند // در صورت وجود داده ، آن را پردازش می کند} // ------------------------------ ----------------------------------------- // شروع روالهای سرور ARDUINO/ * * دستورات تحویل داده شده به پورت سریال arduino & aposs */void serbPollSerialPort () {int dta؛ // متغیر برای نگه داشتن بایت سریال if (Serial.available ()> = 5) {// اگر 5 بایت در بافر باشد (طول pf یک درخواست کامل) dta = Serial.read ()؛ if (dta = checkByte1) {// بررسی اولین بایت چک dta = Serial.read ()؛ if (dta = checkByte2) {// بررسی بایت چک دوم dta = Serial.read ()؛ if (dta = checkByte3) {// بررسی سومین بایت چک int int = Serial.read ()؛ // چهارمین بایت دستور int param1 = Serial.read () است. // پنجمین بایت param1 interpretCommand (command، param1) است؛ // درخواست تجزیه شده را به آن ارسال می کند & aposs handler}}}}}/ * * فرمان و پارامتر را می گیرد و به ربات ارسال می کند */void interpretCommand (int command، int param1) {if (command == FORWARD) {goForward ()؛ تأخیر (param1 * 100) ؛ goStop ()؛} // if forward else if (command == BACKWARD) {goBackward ()؛ تأخیر (param1 * 100) ؛ goStop ()؛} // اگر به عقب دیگر if (command == LEFT) {goLeft ()؛ تأخیر (param1 * 100) ؛ goStop ()؛} // در صورت باقی ماندن if (command == RIGHT) {goRight ()؛ تأخیر (param1 * 100) ؛ goStop ()؛} // if right else if (command == SETSPEED) {setSpeed (param1)؛} // if setting speed else if (command == STOP) {goStop ()؛} // if stop else if (command == SETSPEEDLEFT) {setSpeedLeft (param1)؛} // در صورت تنظیم سرعت چپ در غیر این صورت (command == SETSPEEDRIGHT) {setSpeedRight (param1)؛} // در صورت تنظیم سرعت مناسب دیگر {// اگر فرمان ناشناس کمی شیمیم انجام دهید به سمت چپ()؛ تأخیر (150) ؛ رفتن سمت راست()؛ تأخیر (150) ؛ goStop ()؛ }} // -------------------------------------------------- -------------------- روالهای موجود*/void serbSetup () {setSpeed (leftSpeed) ؛ pinMode (LEFTSERVOPIN ، OUTPUT) ؛ // پین سیگنال سروو سمت چپ // را به خروجی pinMode (RIGHTSERVOPIN ، OUTPUT) تنظیم می کند ؛ // پین سیگنال سروو راست را // برای خروجی leftServo.attach (LEFTSERVOPIN) تنظیم می کند ؛ // سروو سمت چپ rightServo.attach (RIGHTSERVOPIN) را متصل می کند ؛ // اتصال مستقیم سروو goStop () ؛}/ * * سرعت ربات را بین 0- (متوقف) و 100- (سرعت کامل) تنظیم می کند * توجه: سرعت سرعت فعلی را تغییر نمی دهد باید سرعت را تغییر دهید * سپس با یکی تماس بگیرید از روشهای پیش از ایجاد تغییرات.*/ void setSpeed (int newSpeed) {setSpeedLeft (newSpeed)؛ // تنظیم سرعت چپ setSpeedRight (newSpeed) ؛ // سرعت راست را تنظیم می کند}/ * * سرعت چرخ چپ را تنظیم می کند */void setSpeedLeft (int newSpeed) {if (newSpeed> = 100) {newSpeed = 100؛} // اگر سرعت بیشتر از 100 // باشد 100 اگر (newSpeed = 100) {newSpeed = 100؛} // اگر سرعت بیشتر از 100 باشد // اگر 100 (newSpeed <= 0) {newSpeed = 0؛} // اگر سرعت کمتر از 0 باشد // it 0 rightSpeed = newSpeed * 0.9؛ // سرعت را مقیاس می کند}/ * * روبات را به جلو ارسال می کند */void goForward () {leftServo.write (90 + leftSpeed) ؛ rightServo.write (90 - rightSpeed) ؛} / * * ربات را به عقب * /void goBackward () {leftServo.write (90 - leftSpeed) ارسال می کند ؛ rightServo.write (90 + rightSpeed)؛} / * * ربات را به راست * /void goRight () {leftServo.write (90 + leftSpeed) ارسال می کند ؛ rightServo.write (90 + rightSpeed) ؛}/ * * روبات را به سمت چپ */void goLeft () {leftServo.write (90 - leftSpeed) ارسال می کند ؛ rightServo.write (90 - rightSpeed) ؛}/ * * ربات را متوقف می کند */void goStop () {leftServo.write (90) ؛ rightServo.write (90)؛} // روتین های پایان ARDUINO CONTROLLED SERVO ROBOT (SERB) // ---------------------------- ---------------------------------------------------
مرحله 4: نرم افزار - روبات لپ تاپ (وب سرور)
. این یک وب سرور نسبتاً ابتدایی (گوش دادن به درخواست های صفحه وب از یک مرورگر وب) ، یک رابط کاربری کوچک (برای راه اندازی آن) و امکانات انتقال دستورات دریافت شده از سرور وب به Arduino است. برای نصب سریع: (روی پنجره ها)
- فایل زیپ زیر را بارگیری کنید (06-WEBB-Processing Webserver (windows exe).zip)
- آن را از حالت فشرده خارج کرده و فایل.exe (_WEBB_WebServer_RobotComputer.exe) را اجرا کنید
برای ویرایش در پردازش:
- فایل زیپ زیر را بارگیری کنید (06-WEBB-Processing Webserver (فایل های منبع).zip)
- هر جایی از رایانه خود را از حالت فشرده خارج کنید.
- محیط Processing را باز کرده و (_WEBB_WebServer_RobotComputer.pde) را باز کنید
برای آزمایش:
- برنامه را اجرا کنید.
- در کادر شماره 1 لیستی از پورت های ارتباطی موجود در رایانه شما وجود دارد (روی پورت Arduino که به آن متصل هستید کلیک کنید. (با اتصال کامپیوتر ، ربات شما چند بار تکان می خورد و یک نقطه فیروزه ای در کنار انتخاب شده ظاهر می شود) پورت کام)
- در کادر شماره 2 تست کنید تا ببینید آیا آردوینو شما متصل است. روی یکی از فلش ها کلیک کنید و امیدوارم ربات شما به مدت نیم ثانیه در جهت کلیک شده حرکت کند.
- در کادر شماره 3 بر روی دکمه "شروع" کلیک کنید تا وب سرور راه اندازی شود.
- مرورگر وب را باز کنید (روی لپ تاپ روبات) و از https://127.0.0.1:12345/ControlPage.html دیدن کنید (امیدوارم صفحه وب کنترل با دکمه هایی روی آن ظاهر شود) -جزئیات نحوه استفاده از این صفحه در مرحله بعد -
چه اتفاقی می افتد:
- سرور وب برای درخواستهای http به پورت 12345 گوش می دهد (آنچه هنگام تایپ آدرس صفحه وب ارسال می شود)
- دو نوع درخواست وجود دارد که او به آنها پاسخ می دهد.
1. به "ControlPage.html" گوش می دهد و صفحه وب کنترل را ارسال می کند. 2. به درخواست های فرم "/request؟ command = F & param1 = 100" گوش می دهد (این دستورات تجزیه و به آردوینو ارسال می شوند (این مثال نتیجه می دهد در ربات به مدت 10 ثانیه به جلو حرکت می کند) ضمیمه: (کد وب سرور)
/ * * روبات متصل به وب کنترل شده آردوینو (WEBB) - وب سرور * برای اطلاعات بیشتر به آدرس زیر مراجعه کنید: https://www.oomlout.com/serb * * رفتار: برنامه به درخواستهای http (صفحه وب) در فرم * "/درخواست گوش می دهد ؟ command = F & param1 = 100 "و سپس آنها را به * Arduino * فرمانهای پشتیبانی شده - & aposF & apos - 70 - Forward * & aposB & apos - 66 - Backward * & aposL & apos - 76 - Left * & aposR & apos - 82 - Right * & aposS & apos - 83 - Speed * & aposX & apos - 88 - SetSpeedLeft * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * param1 & aposs - 0 - 255 (0 تا 25.5 ثانیه) مقدار * 100 میلی ثانیه * * همچنین در صورت درخواست ControlPage.html * * صفحه کنترل وب را به مرورگر ارائه می دهد. عملکرد: 1. بر روی پورت Comm که آردوینو به آن متصل است کلیک کنید * 2. از دکمه های تست استفاده کنید تا ببینید آیا آردوینو شما گوش می دهد * (نیم ثانیه در جهت کلیک شده حرکت می کند) * 3. روی Start کلیک کنید و وب سرور شما به درخواست ها گوش دهید * * * مجوز: این اثر دارای مجوز Creative Commons * Attribu است tion-Share Alike 3.0 License Unported. برای * مشاهده نسخه ای از این مجوز ، از * https://creativecommons.org/licenses/by-sa/3.0/ * دیدن کنید یا نامه ای به Creative Commons ، 171 Second * Street، Suite 300 ، سان فرانسیسکو ، کالیفرنیا 94105 ارسال کنید ، * ایالات متحده آمریکا. * */import processing.serial. *؛ // وارد کردن کتابخانه سریال برای استفاده از Serial (برای مکالمه با آردوینو) import processing.net.*؛ // وارد کردن کتابخانه خالص برای استفاده از سرور (برای صحبت با اینترنت)/ * متغیرهای مربوط به پورت سریال */int serialPortIndex = -1؛ // فهرست پورت سریال مورد استفاده ما در Serial.list () listString commOptions؛ // متغیری برای ذخیره Serial.list () در این صورت نیازی به نظرسنجی // پورت های سریال در هر زمان که بخواهیم به آن اشاره کنیم (نظرسنجی باعث // پرش در سرویس های arduino می شود) SerialPort؛ // پورت سریال را در تمام این طرح قابل آدرس دهی می کند/ * فونت متغیرهای مربوط به گرافیک و ارائه *//PFont ؛ // فونت را عمومی می کند بنابراین فقط باید یک بار بارگیری شود (Arial-72)/ * متغیرهای مرتبط با شبکه */سرور wServer ؛ // سروری که پورت درخواستهای وب را مدیریت می کند = 12345؛ // پورتی که سرور به آن گوش می دهد cycleCount = 0؛ // تعداد دفعات اجرای حلقه رسم (که برای // متحرک سازی متن "در حال اجرا" استفاده می شود)/ * متغیرهای سودمندی */PImage bg؛ // تصویر پس زمینه در حال حاضر / WEBB-background.png/ * * متغیرهای مرتبط با دکمه * (دکمه ها بسیار خشن اجرا می شوند ، جعبه های محدوده ذخیره می شوند و گرافیک و متن * روی تصویر پس زمینه کشیده می شود) یعنی. حرکت متغیرهای دکمه ظاهر دکمه ها را جابجا نمی کند */Button comm1؛ دکمه comm2؛ دکمه comm3 ؛ دکمه comm4؛ // دکمه های انتخاب پورت سریال صحیح دکمه سمت راست ؛ دکمه سمت چپ ؛ دکمه پایین ؛ // دکمه های جهت آزمایش اینکه آیا ربات پاسخ می دهد یا خیرButton webServer ؛ // دکمه شروع وب سرور/ * * همه چیز را تنظیم می کند */void setup () {frameRate (5)؛ // طرح را اندکی کند می کند تا به سیستم مالیات وارد نکند bg = loadImage ("WEBB-background.png")؛ // بارگذاری تصویر پس زمینه (ذخیره شده در پوشه طرح) اندازه (700 ، 400) ؛ // اندازه اندازه پنجره طرح = loadFont ("ArialMT-72.vlw") را تنظیم می کند ؛ // فونتی را که در این طرح استفاده می کنیم بارگذاری می کند commOptions = Serial.list ()؛ // از پورت های سریال نظرسنجی می کند و لیستی از پورت های موجود را دریافت می کند // (این کار را فقط یکبار انجام می دهید تا ربات هر زمان که تداخل پیدا کند & aposs // نظرسنجی شود) defineButtons ()؛ // کادرهای محدود کننده برای هر پس زمینه دکمه (bg) را تعریف می کند. // تصویر پس زمینه را رنگ آمیزی می کند (این تصویر دارای تمام گرافیک های دکمه روی آن است)}/ * حلقه اصلی را ترسیم می کند */void draw () {if (cycleCount == 0) {//- روالهای قرعه کشی drawCommBox ()؛ // رسوبات را در Comm Comm (جعبه 1) drawTestBox () ترسیم می کند. // همه عناصر موجود در Test Box (کادر 2) drawWebServerBox () را ترسیم می کند. // همه عناصر موجود در WebServer Box (کادر 3)} را ترسیم می کند //- فراخوانی روال های کاری pollWebServer ()؛ // از سرور وب نظرسنجی می کند تا ببیند آیا درخواستی از طریق شبکه وارد شده است // // ------------------------------ ----------------------------------------------//شروع از رسم روالها (تقسیم شدن فقط برای خواندن بهتر کد)/ * * روال به روز رسانی قرعه کشی (در هر چرخه اجرا می شود) برای موارد موجود در جعبه comm (کادر 1) */void drawCommBox () {fill (0، 0، 0) ؛ // Fill را روی textFont مشکی (فونت ، 15) تنظیم کنید ؛ // اندازه فونت را برای (int i = 0؛ i 0) {running = running + "."؛}} تنظیم کنید // تعداد نقاط بر اساس cycleCount if ((cycleCount /1)> 1) { در حال اجرا = در حال اجرا + "."؛} if ((cycleCount / 1)> 2) {running = running + "."؛} if ((cycleCount / 1)> 3) {cycleCount = 0؛} متن (در حال اجرا ، 520 ، 210) ؛ } cycleCount ++؛ // هر بار از طریق cycleCount یک برابر افزایش می یابد // // روالهای پایان Draw // ------------------------------- ------------------------------ // ------------------ ---------------------------------------------- // شروع روالهای سرویس/ * * mousePressed هر بار که ماوس را فشار می دهید فراخوانی می شود * بررسی می کند که آیا ماوس در هر کدام از جعبه های محدود کننده دکمه * وجود دارد یا اگر روال مناسب آن است */void mousePressed () {if (comm1.pressed ()) { updateSerialPort (0)؛} // تغییرات در پورت comm در index 0 در Serial.list () در غیر این صورت (comm2.pressed ()) {updateSerialPort (1)؛} // تغییرات در پورت comm در فهرست 1 در Serial.list () else if (comm3.pressed ()) {updateSerialPort (2)؛} // تغییرات در پورت comm در فهرست 2 در Serial.list () در غیر این صورت (comm4.pressed ()) {updateSerialPort (3) ؛} // تغییرات در پورت comm در فهرست 3 در Serial.list () در غیر این صورت اگر (up.pressed ()) {sendRobotCommand ("F"، 5)؛} // یک فرمان برای ارسال روبات به جلو برای 0.5 ارسال می کند ثانیه دیگر اگر (left.pressed ()) {sendRobotCommand ("L" ، 5)؛} / /فرمان جابجایی روبات را برای 0/5 ثانیه در سایر موارد ارسال می کند: pressed ()) {sendRobotCommand ("B"، 5)؛} // فرمانی را برای حرکت روبات به عقب برای 0.5 ثانیه ارسال می کند اگر (webServer.pressed ()) {startWebServer ()؛} // چرخه webServer را شروع می کند 0 پس زمینه (bg) ؛ // تصویر پس زمینه را مجدداً رنگ آمیزی می کند (این تصویر دارای تمام گرافیک های دکمه روی آن است) رسم () ؛}/ * * پس از اجرا ، سرور را بررسی می کند تا ببیند آیا اتصالی در انتظار وجود دارد * در صورت وجود اتصال انتظار کشیده شده است. درخواست را خارج کرده و به روال parseRequest (String) * منتقل می کند تا متن اضافی حذف شود. سپس به روال interpretRequest (String) ارسال می شود تا * روال عملکرد مناسب را فراخوانی کند (یعنی ارسال دستورالعمل به ربات).* * با وارد کردن آدرس و پورت رایانه ها به مرورگر وب ، درخواست ارسال می شود * برای دستگاه محلی "https://127.0.0.1:12345/request؟command=F¶m1=100" * * مثال درخواست: * GET/درخواست؟ command = F & param1 = 100 HTTP/1.1 * User-Agent: Mozilla/5.0 (Windows؛ U؛ Windows NT 5.1؛ en-US) AppleWebKit/525.19 (KHTML ، مانند Gecko) * پذیرش: * // * * Accept-Language: en-US، fa * Accept-Charset: ISO-8859-1، *، utf-8 * Accept-Encoding: gzip، deflate، bzip2 * میزبان: 127.0.0.1:12345 * اتصال: زنده نگه دارید * * مثال پاسخ (برای درخواست پردازش شده) * HTTP/1.1 200 OK * اتصال: بستن * نوع محتوا: text/html * * فرمان: F param1: 100 */void pollWebServer () {if (wServer! = null) {// اگر وب سرور در حال اجرا Client request = wServer.available ()؛ // Client بعدی را در خط در سرور // بارگذاری کنید (null در صورت عدم درخواست در انتظار) if (request! = null) {// در صورت وجود فرایند درخواست آن String fullRequest = request.readString ()؛ // ذخیره محتویات درخواست به عنوان یک رشته String ip = request.ip ()؛ // آدرس IP مشتریان را به عنوان یک رشته ذخیره کنید String requestString = parseRequest (fullRequest.toUpperCase ()) ؛ // تمام اطلاعات اضافی // را حذف کنید فقط رشته درخواست (متن بعد از GET) // (برای سهولت در آزمایش رشته به حروف بزرگ منتقل می شود) if (requestString.indexOf ("REQUEST؟")! = -1) { // بررسی می کند که آیا درخواست "REQUEST" دارد؟ پاسخ رشته = interpretRequest (requestString) ؛ // درخواست را به request interpreter request.write ارسال می کند ("HTTP/1.1 200 OK / n اتصال: بستن / n محتوا-نوع: text/html / n / n" + پاسخ)؛ // پاسخ 200 را ارسال می کند تا بگوید درخواست // رسیدگی شده است و رشته "reply" به عنوان پاسخ wServer.disconnect (درخواست) ؛ // اتصال Client} در غیر این صورت if (requestString.indexOf ("CONTROLPAGE")! = -1) {// اگر درخواست مربوط به صفحه کنترل وب است String webPageArray = loadStrings ("WEBB -ControlPage.html") ؛ // صفحه وب کنترل را از / data / WEBB-ControlPage.html // بارگذاری می کند (به عنوان آرایه ای از خطوط بارگذاری می شود) String webPage = ""؛ // برای سهولت ویرایش ، صفحات وب // با شکست خطوط باقی می ماند ، بنابراین این حلقه خطوط را برای (int i = 0؛ i portIndex) {// در صورتی که portIndex منتقل شده یک فهرست معتبر در Serial.list () // (یعنی در لیست دو گزینه سه نیست) serialPortIndex = portIndex؛ // متغیر serialPortIndex را بر روی فهرست پورت سریال جدید تنظیم کنید // (این مورد برای نمایش نقطه در کنار درگاه فعال استفاده می شود)} if (serialPortIndex! = -1) {// بررسی کنید تا مطمئن شوید که درگاه قبلی انتخاب شده است اگر (serialPort! = null) {serialPort.stop ()؛} // اگر از پورت سریال قبلاً استفاده می شود ، قبل از بارگیری یک serialPort = جدید Serial (این ، Serial.list () [serialPortIndex] ، 9600) ، آن را متوقف کنید. // ایجاد یک شیء سریال جدید برای ارتباط با Arduino 9600 Baud}}/ * * یک رشته درخواست (مانند: "request؟ command = F & param1 = 100") می گیرد و فرمان * و param1 را برداشته و به arduino (افزودن پارامترهای اضافی یا دستورات غیر arduino در اینجا انجام می شود) */String interpretRequest (String requestString) {String returnValue = "OK"؛ // متد متغیر returnValue String را آماده می کند ؛ // سه خط بعدی مقدار را پس از "command =" // استخراج می کنند (خط اضافی در صورتی است که پارامتر فرمان در // درخواست نهایی باشد و با & if (requestString.indexOf ("COMMAND =") دنبال نشود.)! = -1) {command = requestString.substring (requestString.indexOf ("COMMAND =") + "COMMAND =". length ())؛} else {command = "Z"؛} if (command.indexOf (" & ")! = -1) {command = command.substring (0، command.indexOf (" & "))؛} else {command = command؛} String param1String؛ // سه خط بعدی مقدار را بعد از" param1 = "// (خط اضافی در صورتی است که پارامتر فرمان در // پایان درخواست باشد و با & if (requestString.indexOf (" PARAM1 = ")! = -1) {param1String = requestString.substring (requestString.indexOf ("PARAM1 =") + "PARAM1 =". طول ())؛} else {param1String = "0"؛} if (param1String.indexOf ("&")! = -1) {param1String = param1String.substring (0، param1String.indexOf ("&"))؛} else {param1String = param1String؛} int param1 = Integer.parseInt (param1String)؛ // رشته param1 را به یک تبدیل می کند عدد صحیح sendRobotCommand (فرمان ، param1) ؛ // دستور را به روتین ارسال می کند که آن را به Arduino returnValue = "command:" + command + "param1:" + param1؛ // در حال حاضر فقط دستور تجزیه شده اما ارسال // به عنوان html ارسال می شود تا قالب بندی را وارد کنید return returnValue؛}/ * * یک فرمان (در حال حاضر یک حرف) و یک پارامتر (یک بایت 0-255) می گیرد و آن را به arduino * که در حال گوش دادن است و دوباره تنظیم می کند * دستورات پشتیبانی شده فعلی * F - */void sendRobotCommand (دستور رشته ، int param1) {println ("command:" + command + "time:" + param1)؛ String checkString = "AAA"؛ if (serialPort! = null) {serialPort.write (checkString + فرمان) ؛ serialPort.write (بایت (param1)) ؛ }} // پایان راه اندازی/معمولاً معمول نامیده نمی شود // -------------------------------------- ------------------------------------------------------ // دکمه مثال و کد RectButton از processing.org مثال با برخی تغییرات // بیشتر برای ساده سازی و حذف رول انیمیشن // https://processing.org/learning/topics/buttons.html (2008-09-23) کلاس دکمه {int x، y؛ عرض int ، ارتفاع ؛ دکمه (int ix ، int iy ، int iwidth ، int iheight) {x = ix؛ y = iy ؛ عرض = عرض ارتفاع = ارتفاع ؛ } boolean pressed () {if (overRect ()) {return true؛ } else {return false؛}} boolean overRect () {if (mouseX> = x && mouseX = y && mouseY <= y+height) {true true؛ } else {return false؛ }}}
مرحله 5: نرم افزار - (صفحه وب)
خوب ، ما تقریبا تمام کرده ایم تنها چیزی که باقی مانده است صحبت با ربات شماست. برای صحبت کردن: (از طریق یک شبکه محلی -در پنجره ها-)
- آدرس IP محلی رایانه لپ تاپ را کشف کنید. برای انجام این کار به "Start / Programs / Accesories / Command Prompt" بروید و وقتی پنجره ترمینال باز شد "ipconfig" را تایپ کنید. "آدرس IP" را بنویسید و به رایانه دیگری در شبکه محلی خود بروید.
- مرورگر وب را باز کنید ، "https:// (robot ip computer): 12345/ControlPage.html را تایپ کنید
- صفحه وب کنترل باید بارگیری شود ، در کادر "آدرس IP" رایانه روبات ip را تایپ کنید.
- کنترل ربات خود را آغاز کنید.
برای صحبت کردن: (از طریق اینترنت) اکنون که آن را به صورت محلی کار می کنید ، صحبت کردن از طریق اینترنت فقط چند قدم کوتاه با شما فاصله دارد.
- (سخت ترین مرحله) راه اندازی Port Forwarding - رایانه شما باید به اینترنت گوش دهد نه فقط به شبکه محلی. برای این کار باید به روتر خود بگویید که درخواست های خاصی را به رایانه ای که ربات را کنترل می کند منتقل کند. این کمی پیچیده است و از محدوده این دستورالعمل فراتر می رود. با این حال ، اگر از PortForward.com دیدن می کنید ، همه آنچه را که باید در مورد پیکربندی روتر خود بدانید به شما می دهد (باید پورت 12345 را به لپ تاپ روباتان ارسال کنید)
- سپس IP اینترنت خود را کشف کنید (از WhatIsMyIP.com دیدن کنید)
- سرانجام اسکایپ را ویدئویی برقرار کنید و با کسی که صحبت می کنید دیدار کنید "https:// (IP اینترنت): 12345/ControlPage.html"
- IP اینترنت را در کادر "آدرس IP" در صفحه کنترل وارد کنید و ربات متصل به وب شما از راه دور رانده می شود.
مرحله ششم: تمام شد
خوب همین. امیدوارم اوقات خوشی را با رانندگی ربات خود از راه دور سپری کنید. اگر با نرم افزار یا سخت افزار مشکلی دارید ، نظر خود را بنویسید و من سعی می کنم به شما کمک کنم. اگر می خواهید پروژه های مرتب تری را بررسی کنید ، به آدرس زیر مراجعه کنید: oomlout.com
توصیه شده:
[ربات آردوینو] چگونه می توان یک ربات ضبط حرکتی ساخت - ربات انگشت شست - سرو موتور - کد منبع: 26 مرحله (همراه با تصاویر)
[ربات آردوینو] چگونه می توان یک ربات ضبط حرکتی ساخت | ربات انگشت شست | سرو موتور | کد منبع: ربات انگشت شست از پتانسیومتر سروو موتور MG90S استفاده شده است. بسیار سرگرم کننده و آسان است! کد بسیار ساده است. فقط در حدود 30 خط است. به نظر می رسد یک حرکت ضبط است. لطفاً هر گونه سوال یا بازخوردی بگذارید! [دستورالعمل] کد منبع https: //github.c
55 اینچ ، نمایش قاب عکس دیجیتال 4K با قیمت حدود 400 دلار: 7 مرحله (همراه با تصاویر)
55 اینچ ، نمایش قاب عکس دیجیتال 4K با قیمت حدود 400 دلار: آموزش های زیادی در مورد چگونگی ساخت یک قاب عکس دیجیتال عالی با رزبری pi وجود دارد. متاسفانه rpi از وضوح 4K پشتیبانی نمی کند. Odroid C2 به راحتی می تواند وضوح 4K را اداره کند اما هیچکدام از این آموزش های rpi برای واحد C2 کار نمی کند. طول کشید
روش جدید ساخت یک فروسیال هزینه کمتر از 3 دلار !!!: 6 مرحله (همراه با تصاویر)
روش جدید ساختن فرو سیال هزینه کمتر از 3 دلار !!!: فرو سیال -& nbsp؛ ماده ای که در شرایط عادی مایع است ، اما در حضور میدان مغناطیسی به حالت جامد در می آید. من روش جدیدی برای ساختن فروسیال خانگی پیدا کردم و می خواهم آن را با شما دوستان به اشتراک بگذارم. مزیت پروژه من هزینه است. آی تی
دستگاه تمیز کردن حرفه ای خود را با هزینه کمتر از 80 دلار بسازید و تا 3000 دلار و بیشتر پس انداز کنید .: 6 مرحله (همراه با تصاویر)
ماشین تمیز کردن حرفه ای خود را با هزینه کمتر از 80 دلار بسازید و تا 3000 دلار و بیشتر ذخیره کنید. چگونه می توان سوابق را به درستی تمیز کرد؟ راه های زیادی در اینترنت وجود دارد. روشهای ارزان تر مانند Knosti یا Discofilm بلکه
کیف Neet Fet EeePC / Netbook خود را با حدود 8 دلار تهیه کنید (و 91 دلار صرفه جویی کنید به جای خرید از Redmaloo): 5 مرحله (همراه با تصاویر)
خودتان کیف پول Neeeet EeePC / Netbook خود را با حدود 8 دلار تهیه کنید (و 91 دلار صرفه جویی کنید به جای خرید از Redmaloo): این دستورالعمل به شما نشان می دهد که چگونه یک لپ تاپ شخصی ، بسیار زیبا و زیبا و حتی کیف نت بوک بهتر بسازید. نت بوک شما را ذخیره می کند ، یک موس موس به شما می دهد ، احساس می کنید از چیزی منحصر به فرد ، زیبا و دست ساز استفاده می کنید و احساس گوسفند