สารบัญ:

สร้างหุ่นยนต์ที่เชื่อมต่อกับเว็บ (ประมาณ $500) (โดยใช้ Arduino และ Netbook): 6 ขั้นตอน (พร้อมรูปภาพ)
สร้างหุ่นยนต์ที่เชื่อมต่อกับเว็บ (ประมาณ $500) (โดยใช้ Arduino และ Netbook): 6 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: สร้างหุ่นยนต์ที่เชื่อมต่อกับเว็บ (ประมาณ $500) (โดยใช้ Arduino และ Netbook): 6 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: สร้างหุ่นยนต์ที่เชื่อมต่อกับเว็บ (ประมาณ $500) (โดยใช้ Arduino และ Netbook): 6 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Samkoon Interface Arduino คลิปเดียวจบ 2024, พฤศจิกายน
Anonim
สร้าง Web Connected Robot (ประมาณ $500) (โดยใช้ Arduino และ Netbook)
สร้าง Web Connected Robot (ประมาณ $500) (โดยใช้ Arduino และ Netbook)
สร้าง Web Connected Robot (ประมาณ $500) (โดยใช้ Arduino และ Netbook)
สร้าง Web Connected Robot (ประมาณ $500) (โดยใช้ Arduino และ Netbook)
สร้าง Web Connected Robot (ประมาณ $500) (โดยใช้ Arduino และ Netbook)
สร้าง Web Connected Robot (ประมาณ $500) (โดยใช้ Arduino และ Netbook)

คำแนะนำนี้จะแสดงวิธีสร้าง Web Connected Robot ของคุณเอง (โดยใช้ไมโครคอนโทรลเลอร์ Arduino และ Asus eee pc) ทำไมคุณถึงต้องการ Web Connected Robot? ให้เล่นด้วยแน่นอน ขับหุ่นยนต์ของคุณจากทั่วทั้งห้องหรือทั่วประเทศ โดยไม่ต้องใช้อะไรมากไปกว่า Skype และเว็บเบราว์เซอร์ (ไม่ต้องติดตั้งอะไรบนคอมพิวเตอร์ควบคุม) หลังจากนั้น? เจาะลึกซอฟต์แวร์และปรับเปลี่ยนตามที่คุณต้องการ เพิ่ม GPS เพื่อให้คุณสามารถดูตำแหน่งที่คุณกำลังขับรถอยู่บนแผนที่ เพิ่มเซ็นเซอร์อุณหภูมิลงในแผนที่การไล่ระดับอุณหภูมิในบ้านของคุณ หรือเซ็นเซอร์โซนาร์เพื่อเพิ่มการควบคุมสิ่งที่คุณกำลังใช้เว็บ ไดรเวอร์สามารถและไม่สามารถวิ่งเข้าไปได้ คุณสมบัติ:

  • ราคาไม่แพง - (~ $500 หากคุณซื้อชิ้นส่วนใหม่และถูกกว่ามากหากคุณขุดในถังอะไหล่ของคุณ)
  • เมื่อใช้งานและควบคุมหุ่นยนต์ต้องใช้เว็บเบราว์เซอร์เท่านั้น - (และ Skype หากคุณต้องการดูว่าคุณกำลังขับรถอยู่ที่ไหน)
  • โอเพ่นซอร์สและปรับเปลี่ยนได้ง่าย - (ใช้ไมโครคอนโทรลเลอร์ Arduino การประมวลผลสำหรับเว็บเซิร์ฟเวอร์ & ซอฟต์แวร์ทั้งหมดสามารถทำงานบน Linux ได้ (โค้ดทั้งหมดได้รับการแสดงความคิดเห็นอย่างหนักเพื่อให้กระโดดและเปลี่ยนแปลงสิ่งต่าง ๆ ได้ง่าย))
  • การออกแบบโมดูลาร์ (ไม่ใช่ระบบที่ผสานรวมอย่างสมบูรณ์ หากคุณต้องการใช้บริการการประชุมทางวิดีโออื่น ไม่ต้องกังวล หรือหากคุณมีตราประทับพื้นฐานแทนที่จะเป็น Arduino เพียงแค่ใส่โค้ดชิ้นเล็ก ๆ แล้วเสียบเข้าไป)

นี่คือวิดีโอสั้นๆ เกี่ยวกับ Web Connected Robot ของฉันที่ถูกขับออกจากห้องครัว

ขั้นตอนที่ 1: ชิ้นส่วนและเครื่องมือ

อะไหล่และเครื่องมือ
อะไหล่และเครื่องมือ

ต้องการเพียงไม่กี่ส่วน: หุ่นยนต์: หุ่นยนต์ควบคุมเซอร์โว Arduino - (SERB) ($ 175 @ oomlout.com) หรือ (สร้างของคุณเอง)

หุ่นยนต์โอเพ่นซอร์สที่ใช้ไมโครคอนโทรลเลอร์ Arduino เป็นสมอง

(สามารถใช้แพลตฟอร์มหุ่นยนต์เซอร์โวคู่ใดๆ ที่มี Arduino ได้ (ตัวเลือกที่ 1) (โปรดส่งข้อความถึงฉันหากคุณพบตัวเลือกอื่นๆ) คอมพิวเตอร์: Asus eee PC 4G ($280) (@Best Buy)

แล็ปท็อปขนาดเล็กราคาไม่แพงที่เหมาะสำหรับการนี้

(แล็ปท็อปเครื่องใดก็ได้ (หรือเดสก์ท็อปถ้าคุณต้องการใช้คอร์ด) ที่สามารถเรียกใช้การประมวลผลภาพร่างได้)โต๊ะแล็ปท็อป: Laser Cut Acrylic ($25 (@ oomlout)) หรือ (สร้างขั้นตอนของคุณเอง 3)

อะครีลิกเพิ่มเติมสองสามชิ้นซึ่งยึดติดกับ (SERB) เพื่อให้เป็นโต๊ะสำหรับแล็ปท็อปที่จะนั่ง

Nuts and Bols: (มีจำหน่ายที่โฮมดีโป)

  • สลักเกลียว 3 มม. x 10 มม. (x4)
  • สลักเกลียว 3 มม. x 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 (letter).pdf (สำหรับกระดาษขนาด Letter))
  • ตรวจสอบอีกครั้งว่าไม่ได้ปรับขนาดเมื่อพิมพ์ (โดยการวัดไม้บรรทัดที่พิมพ์)
  • กาวกับอะครีลิคขนาด 3 มม. (1/8") แล้วตัดชิ้นส่วนออก

การประกอบ:ดาวน์โหลดคู่มือการประกอบ (04-WEBB-Assembly Guide.pdf) ด้านล่างและประกอบโต๊ะแล็ปท็อปเข้าด้วยกัน

ขั้นตอนที่ 3: ซอฟต์แวร์ - (Arduino)

ซอฟต์แวร์ - (Arduino)
ซอฟต์แวร์ - (Arduino)

สำหรับผู้ที่เพิ่งเริ่มใช้ Arduino โปรดดูคู่มือเริ่มต้นใช้งานที่ยอดเยี่ยมที่ Arduino.cc ก่อนอื่นซอฟต์แวร์ที่ทำงานบน Arduino มันเป็นโปรแกรมที่ง่ายมาก สิ่งที่ Arduino ทำคือตรวจสอบพอร์ตอนุกรมเพื่อหาข้อมูล สิ่งที่กำลังมองหาคือการสนทนาที่มีความยาว 5 ไบต์

  • ไบต์ 1-3 (ตรวจสอบไบต์ "AAA")
  • คำสั่ง Byte 4 (บอก Arduino ว่าต้องทำอะไร) (คำสั่งที่รองรับ 'F' - ไปข้างหน้า 'B' - ย้อนกลับ 'L' - ซ้าย 'R' - ขวา 'S' - ความเร็ว 'X' - SetSpeedLeft 'Y' - SetSpeedRight, 'C' - หยุด)
  • ไบต์ 5 พารามิเตอร์ - สำหรับคำสั่งย้าย ค่านี้จะตีความว่าเป็นช่วงเวลา (พารามิเตอร์ * 100 มิลลิวินาที) และสำหรับคำสั่งความเร็วจะคิดเป็นเปอร์เซ็นต์ตั้งแต่ 0-100

โค้ดได้รับการแสดงความคิดเห็นอย่างละเอียดและให้กรอบการทำงานนี้การเพิ่มคำสั่งเพิ่มเติมน่าจะง่ายในการดาวน์โหลด:

  • ดาวน์โหลดไฟล์ zip ที่แนบมา (05-WEBB-Arduino Code.zip)
  • เปิดเครื่องรูดไปยังไดเรกทอรี Arduino Sketch ของคุณ (ค่าเริ่มต้น: My Documents\Arduino)
  • เปิดสภาพแวดล้อมการพัฒนา Arduino และอัปโหลดไปยัง Arduino ของคุณ

ในการคัดลอกและวาง

  • คัดลอกรหัสจากด้านล่าง
  • วางลงในสภาพแวดล้อมการพัฒนา Arduino
  • อัปโหลดไปยัง Arduino ของคุณ

ภาคผนวก: โปรแกรม Arduino

/* * Arduino Controlled Web Connected Robot (WEBB) - Serial Host * สำหรับรายละเอียดเพิ่มเติม โปรดไปที่: https://www.oomlout.com/serb * * พฤติกรรม: Arduino ฟังพอร์ต Serial สำหรับคำสั่ง * ในรูปแบบ 254 88, 88, (COMMAND), (TIME) * คำสั่งที่รองรับ - &aposF&apos - 70 - ไปข้างหน้า * &aposB&apos - 66 - ย้อนกลับ * &aposL&apos - 76 - ซ้าย * &aposR&apos - 82 - ความเร็วขวา * &aposS&apos - 83 - ความเร็ว * &aposX&apos - 88 - Set * &aposY&apos - 89 - SetSpeedRight * &aposC&apos - 67 - หยุด * เวลาที่รองรับ - 0 - 255 (0 ถึง 25.5 วินาที) ค่า * 100 มิลลิวินาที *sp * การเดินสาย: สัญญาณเซอร์โวขวา - พิน 9 * สัญญาณเซอร์โวซ้าย - พิน 10 * * ใบอนุญาต: งานนี้ได้รับอนุญาตภายใต้ Creative Commons * Attribution-Share Alike 3.0 Unported License หากต้องการ * ดูสำเนาใบอนุญาตนี้ โปรดไปที่ * https://creativecommons.org/licenses/by-sa/3.0/ * หรือส่งจดหมายถึง Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * สหรัฐอเมริกา. * */ //--------------------------------------------- ------------------------------//การเริ่มต้นของ ARDUINO SERIAL SERVER PREMBLE//การกำหนดค่าคงที่ที่สอดคล้องกับแต่ละคำสั่ง (รวมถึงหมายเลขโค้ด 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/*เช็คไบต์ทั้งสาม (ใช้เพื่อป้องกันไม่ให้โรบ็อตตอบสนองต่ออนุกรม *data แบบสุ่ม) ปัจจุบันเป็น "AAA" */#define checkByte1 65 // "A"#define checkByte2 65 // "A "#define checkByte3 65 // "A" //-------------------------------------- ------------------------------------// การเริ่มต้นของ ARDUINO CONTROLLED SERVO ROBOT (SERB) PREMBLE#include #define LEFTSERVOPIN 10 // พินที่เซอร์โวด้านซ้ายเชื่อมต่อกับ#define RIGHTSERVOPIN 9 // พินที่เซอร์โวด้านขวาเชื่อมต่อกับเซอร์โว leftServo; เซอร์โวขวาเซอร์โว; int leftSpeed = 50; //ถือความเร็วของหุ่นยนต์ leftServo //เปอร์เซ็นต์ระหว่าง 0 ถึง 100int rightSpeed = 100; //ถือความเร็วของหุ่นยนต์ให้ถูกต้องServo //เป็นเปอร์เซ็นต์ระหว่าง 0 ถึง 100// สิ้นสุด ARDUINO CONTROLLED SERVO ROBOT (SERB) PREAMBLE//------------------- -------------------------------------------------- -----//ทำให้ทุกอย่างพร้อมใช้งานและการตั้งค่า runvoid () { Serial.begin(9600); //เริ่มพอร์ตอนุกรม serbSetup(); //กำหนดสถานะของสิ่งที่จำเป็นทั้งหมด // ปักหมุดและเพิ่มเซอร์โวให้กับร่างของคุณ}//โปรแกรมหลัก loopvoid loop() { serbPollSerialPort(); //ดูที่พอร์ตอนุกรมอย่างต่อเนื่อง //หากมีข้อมูลที่ประมวลผลอยู่}//------------------------------------ ---------------------------------------------------//เริ่มรูทีนเซิร์ฟเวอร์ ARDUINO SERIAL/ * * ประมวลผลคำสั่งที่ส่งไปยังพอร์ตอนุกรมของ Arduino */void serbPollSerialPort(){ int dta; //ตัวแปรเก็บไบต์อนุกรมถ้า (Serial.available() >= 5) { //ถ้า 5 ไบต์อยู่ในบัฟเฟอร์ (ความยาว pf คำขอเต็ม) dta = Serial.read(); if (dta = checkByte1) { // ตรวจสอบไบต์ตรวจสอบครั้งแรก dta = Serial.read (); if (dta = checkByte2) { // ตรวจสอบไบต์ตรวจสอบที่สอง dta = Serial.read (); if (dta = checkByte3) {// ตรวจสอบคำสั่ง int ไบต์ที่สาม = Serial.read (); //ไบต์ที่สี่คือคำสั่ง int param1 = Serial.read(); //ไบต์ที่ห้าคือ param1 interpretCommand(command, param1); // ส่งคำขอแยกวิเคราะห์ไปยังตัวจัดการมัน } } } }}/* * รับคำสั่งและพารามิเตอร์และส่งผ่านไปยังหุ่นยนต์ */void interpretCommand(int command, int param1){if (command == FORWARD){goForward(); ล่าช้า (param1 * 100); goStop();} // ถ้าส่งต่อ 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 set speed else if(command == STOP){goStop();} //if stop else if() คำสั่ง == SETSPEEDLEFT){setSpeedLeft(param1);} // ถ้าตั้งค่าความเร็วซ้ายเป็นอย่างอื่น if(command == SETSPEEDRIGHT){setSpeedRight(param1);} // ถ้าตั้งค่าความเร็วที่ถูกต้อง อย่างอื่น{ // ถ้าคำสั่งที่ไม่รู้จัก ให้ทำ shimmey เล็กน้อย goLeft(); ล่าช้า (150); ไปทางขวา(); ล่าช้า (150); goStop(); }}//---------------------------------------------------------- --------------------//การเริ่มต้นของ ROUTINES ของ ARDUINO CONTROLLED SERVO ROBOT (SERB)/* * ตั้งค่า Arduino ของคุณเพื่อจัดการกับ SERB ของคุณโดยใช้ รูทีนที่รวมอยู่*/void serbSetup(){ setSpeed(leftSpeed); โหมดพิน (LEFTSERVOPIN, OUTPUT); // ตั้งค่าพินสัญญาณเซอร์โวด้านซ้าย // เพื่อส่งออกโหมดพิน (RIGHTSERVOPIN, OUTPUT); //ตั้งค่าพินสัญญาณเซอร์โวด้านขวา //เพื่อส่งออก leftServo.attach(LEFTSERVOPIN); //แนบเซอร์โวซ้าย rightServo.attach (RIGHTSERVOPIN); //ติดเซอร์โว goStop();}/* * ตั้งค่าความเร็วของหุ่นยนต์ระหว่าง 0- (หยุด) และ 100- (ความเร็วเต็มที่) * หมายเหตุ: ความเร็วจะไม่เปลี่ยนความเร็วปัจจุบัน คุณต้องเปลี่ยนความเร็ว * จากนั้นเรียกหนึ่ง ของวิธีการ go ก่อนการเปลี่ยนแปลงจะเกิดขึ้น*/ void setSpeed(int newSpeed){ setSpeedLeft(newSpeed); //ตั้งค่าความเร็วด้านซ้าย setSpeedRight(newSpeed); //กำหนดความเร็วที่เหมาะสม}/* * ตั้งค่าความเร็วของล้อซ้าย */void setSpeedLeft(int newSpeed){ if(newSpeed >= 100) {newSpeed = 100;} //ถ้าความเร็วมากกว่า 100 //ทำให้เป็น 100 if (newSpeed = 100) {newSpeed = 100;} // ถ้าความเร็วมากกว่า 100 // ทำให้เป็น 100 if (newSpeed <= 0) {newSpeed = 0;} // ถ้าความเร็วน้อยกว่า 0 make // มัน 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);}//END OF ARDUINO CONTROLLED SERVO ROBOT (SERB) ROUTINES//------------------------------------------- --------------------------------------------------------------

ขั้นตอนที่ 4: ซอฟต์แวร์ - Robot Laptop (เว็บเซิร์ฟเวอร์)

ซอฟต์แวร์ - หุ่นยนต์แล็ปท็อป (เว็บเซิร์ฟเวอร์)
ซอฟต์แวร์ - หุ่นยนต์แล็ปท็อป (เว็บเซิร์ฟเวอร์)

(การประมวลผลเป็นภาษาโปรแกรมโอเพนซอร์สและสภาพแวดล้อมที่ง่ายต่อการเริ่มต้น สำหรับรายละเอียดเพิ่มเติม ไปที่การประมวลผล) ซอฟต์แวร์ที่ทำงานบนแล็ปท็อปหุ่นยนต์นั้นค่อนข้างง่ายเช่นกัน มันเป็นเว็บเซิร์ฟเวอร์ที่ค่อนข้างพื้นฐาน (ฟังคำขอหน้าเว็บจากเว็บเบราว์เซอร์) ส่วนต่อประสานผู้ใช้ขนาดเล็ก (เพื่อตั้งค่า) และสิ่งอำนวยความสะดวกสำหรับการส่งคำสั่งที่ได้รับจากเว็บเซิร์ฟเวอร์ไปยัง Arduino การติดตั้งอย่างรวดเร็ว: (บนหน้าต่าง)

  • ดาวน์โหลดไฟล์ zip ด้านล่าง (06-WEBB-Processing Webserver (windows exe).zip)
  • เปิดเครื่องรูดและเรียกใช้ไฟล์.exe (_WEBB_WebServer_RobotComputer.exe)

วิธีแก้ไขในการประมวลผล:

  • ดาวน์โหลดไฟล์ zip ด้านล่าง (06-WEBB-Processing Webserver (ไฟล์ต้นฉบับ).zip)
  • เปิดเครื่องรูดที่ใดก็ได้บนคอมพิวเตอร์ของคุณ
  • เปิดสภาพแวดล้อมการประมวลผลและเปิด (_WEBB_WebServer_RobotComputer.pde)

ทดสอบ:

  • เรียกใช้โปรแกรม
  • ในกล่อง #1 จะมีรายการของพอร์ต comm ที่พร้อมใช้งานบนคอมพิวเตอร์ของคุณ (คลิกที่ Arduino ของคุณเชื่อมต่อกับ Arduino (หุ่นยนต์ของคุณจะกระตุกสองสามครั้งในขณะที่คอมพิวเตอร์เชื่อมต่อ และจุดสีฟ้าจะปรากฏขึ้นข้างตัวเลือกที่เลือก คอมพอร์ต)
  • ในกล่อง #2 ทดสอบเพื่อดูว่า Arduino ของคุณเชื่อมต่ออยู่หรือไม่ คลิกลูกศรอันใดอันหนึ่งและหวังว่าหุ่นยนต์ของคุณจะเคลื่อนที่ไปในทิศทางที่ถูกคลิกเป็นเวลาครึ่งวินาที
  • ในกล่อง #3 คลิกปุ่ม "เริ่ม" เพื่อเริ่มเว็บเซิร์ฟเวอร์
  • เปิดเว็บเบราว์เซอร์ (บน Robot Laptop) และไปที่ https://127.0.0.1:12345/ControlPage.html (หวังว่าหน้าเว็บการควบคุมที่มีปุ่มต่างๆ จะปรากฏขึ้น) - รายละเอียดเกี่ยวกับวิธีใช้หน้านี้ในขั้นตอนต่อไป -

เกิดอะไรขึ้น:

  • เว็บเซิร์ฟเวอร์รับฟังพอร์ต 12345 สำหรับคำขอ http (สิ่งที่ส่งเมื่อคุณพิมพ์ที่อยู่หน้าเว็บ)
  • มีคำขอสองประเภทที่ตอบสนอง

1. มันฟังสำหรับ "ControlPage.html" และจะส่งการควบคุมหน้าเว็บ 2 มันฟังคำขอของแบบฟอร์ม "/request?command=F&param1=100" (คำสั่งเหล่านี้แยกวิเคราะห์และส่งไปยัง Arduino (ตัวอย่างนี้จะส่งผลให้ ในหุ่นยนต์ไปข้างหน้าเป็นเวลา 10 วินาที)ภาคผนวก: (รหัสสำหรับเว็บเซิร์ฟเวอร์)

/* * Arduino Controlled Web Connected Robot (WEBB) - เว็บเซิร์ฟเวอร์ * สำหรับรายละเอียดเพิ่มเติม โปรดไปที่: https://www.oomlout.com/serb * * พฤติกรรม: โปรแกรมรอรับคำขอ http (หน้าเว็บ) ในแบบฟอร์ม * "/request ?command=F&param1=100" แล้วส่งต่อไปยัง * Arduino * คำสั่งที่รองรับ - &aposF&apos - 70 - ส่งต่อ * &aposB&apos - 66 - ย้อนกลับ * &aposL&apos - 76 - ซ้าย * &aposR&apos - 82 - ขวา * &aposS&apos - 83& ความเร็ว * &apos - 88 - SetSpeedLeft * &aposY&apos - 89 - SetSpeedRight * &aposC&apos - 67 - Stop * param1&aposs - 0 - 255 (0 ถึง 25.5 วินาที) ค่า * 100 มิลลิวินาที * * ยังทำหน้าที่ควบคุมหน้าเว็บไปยังเบราว์เซอร์หากขอ ControlPage.html * * การทำงาน: 1. คลิกที่พอร์ต Comm ที่ Arduino ของคุณเชื่อมต่ออยู่ * 2. ใช้ปุ่มทดสอบเพื่อดูว่า Arduino ของคุณกำลังฟังอยู่หรือไม่ * (จะเคลื่อนที่ไปในทิศทางที่ถูกคลิกเป็นเวลาครึ่งวินาที) * 3. คลิก เริ่ม และเว็บเซิร์ฟเวอร์ของคุณจะ กำลังรับฟังคำขอ * * * ใบอนุญาต: งานนี้ได้รับอนุญาตภายใต้ Creative Commons * Attribu tion-Share Alike 3.0 Unported License. หากต้องการ * ดูสำเนาใบอนุญาตนี้ โปรดไปที่ * https://creativecommons.org/licenses/by-sa/3.0/ * หรือส่งจดหมายถึง Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * สหรัฐอเมริกา. * */นำเข้า processing.serial.*; //นำเข้าไลบรารีอนุกรมเพื่อใช้ Serial (สำหรับพูดคุยกับ Arduino)import processing.net.*; //นำเข้าเน็ตไลบรารีเพื่อใช้เซิร์ฟเวอร์ (สำหรับสนทนากับอินเทอร์เน็ต)/* ตัวแปรที่เกี่ยวข้องกับพอร์ตอนุกรม */int serialPortIndex = -1; //ดัชนีของพอร์ตอนุกรมที่เราใช้ใน Serial.list() listString commOptions; //ตัวแปรในการจัดเก็บ Serial.list() ดังนั้นจึงไม่จำเป็นต้องโพล //พอร์ตอนุกรมทุกครั้งที่เราต้องการอ้างอิง (โพลทำให้เกิด //กระโดดในเซอร์โว Arduino) SerialPort //ทำให้พอร์ตอนุกรมระบุแอดเดรสได้ตลอดทั้งร่างนี้/* ฟอนต์กราฟิกและการแสดงผลตัวแปรที่เกี่ยวข้อง */ฟอนต์ PFont; //ทำให้ฟอนต์เป็นแบบสาธารณะ ดังนั้นจำเป็นต้องโหลดเพียงครั้งเดียว (Arial-72)/* ตัวแปรที่เกี่ยวข้องกับเครือข่าย */Server wServer; //เซิร์ฟเวอร์ที่จัดการพอร์ตการร้องขอเว็บ = 12345; //พอร์ตที่เซิร์ฟเวอร์รับฟัง toint cycleCount = 0; // นับจำนวนครั้งที่ดำเนินการลูปการวาด (ใช้เพื่อ // ทำให้ข้อความ "กำลังทำงาน") /* ตัวแปรยูทิลิตี้ */ PImage bg; //ภาพพื้นหลังในปัจจุบัน \WEBB-background.png/* * ตัวแปรที่เกี่ยวข้องกับปุ่ม * (ปุ่มต่างๆ ถูกนำมาใช้อย่างคร่าวๆ ขอบเขตจะถูกจัดเก็บ และกราฟิกและข้อความ * วาดบนภาพพื้นหลัง) เช่น ตัวแปรปุ่มเคลื่อนที่จะไม่ย้ายลักษณะที่ปรากฏของปุ่ม */ปุ่ม comm1; ปุ่ม comm2; ปุ่ม comm3; ปุ่ม comm4; //ปุ่มสำหรับเลือกพอร์ตอนุกรมที่ถูกต้องปุ่มขึ้น; ปุ่มขวา; ปุ่มซ้าย; ปุ่มลง;//ปุ่มทิศทางเพื่อทดสอบว่าหุ่นยนต์ตอบสนองปุ่มเว็บเซิร์ฟเวอร์หรือไม่ //ปุ่มสำหรับเริ่มต้นเว็บเซิร์ฟเวอร์/* * ตั้งค่าทุกอย่างขึ้น */void setup() { frameRate(5); //ทำให้ร่างภาพช้าลงเล็กน้อย ดังนั้นจึงไม่ต้องเสียภาษีในระบบ bg = loadImage("WEBB-background.png"); // โหลดรูปภาพพื้นหลัง (เก็บไว้ในโฟลเดอร์สเก็ตช์) ขนาด (700, 400); //กำหนดขนาดของฟอนต์หน้าต่างสเก็ตช์ = loadFont("ArialMT-72.vlw"); //โหลดฟอนต์ที่เราจะใช้ผ่านร่างนี้ commOptions = Serial.list(); //สำรวจพอร์ตอนุกรมและรับรายการพอร์ตที่พร้อมใช้งาน //(การทำเช่นนี้เพียงครั้งเดียวทำให้หุ่นยนต์ไม่กระตุกทุกครั้งที่มีการสำรวจ //พอร์ตอนุกรมถูกสำรวจ) defineButtons(); //กำหนดกรอบสำหรับพื้นหลังแต่ละปุ่ม (bg); // ระบายสีภาพพื้นหลัง (รูปภาพนี้มีกราฟิกปุ่มทั้งหมดอยู่)}/* วงหลักสเก็ตช์ */void draw() { if(cycleCount==0){ //-- call draw routes drawCommBox(); //วาด emelments ใน Comm Box (กล่อง 1) drawTestBox(); // วาดองค์ประกอบทั้งหมดในกล่องทดสอบ (กล่อง 2) drawWebServerBox(); //วาดองค์ประกอบทั้งหมดใน WebServer Box (กล่อง 3) } //-- เรียกกิจวัตรการทำงาน pollWebServer(); //โพลเว็บเซิร์ฟเวอร์เพื่อดูว่ามีการร้องขอใด ๆ เข้ามาผ่านเครือข่ายหรือไม่}//------------------------------------ ----------------------------------------------//เริ่ม รูทีนการวาด (แยกส่วนเพื่อให้โค้ดน่าอ่านยิ่งขึ้น)/* * รูทีนการอัพเดทการวาด (ดำเนินการทุกรอบ) สำหรับรายการในกล่องข้อความ (กล่อง 1) */void drawCommBox(){ เติม(0, 0, 0); // ตั้งค่าการเติมเป็น 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;} text(running, 520, 210); } cycleCount++; //ทุกครั้งที่ผ่าน cycleCount จะเพิ่มขึ้นทีละหนึ่ง} //สิ้นสุดรูทีนของการจับสลาก//------------------------------------- ------------------------------//-------------------------- --------------------------------------------//เริ่มให้บริการตามปกติ/ * * mousePressed ถูกเรียกทุกครั้งที่กดเมาส์ * ตรวจสอบว่าเมาส์อยู่ในกล่องที่มีขอบเขตของปุ่มหรือไม่ * และถ้าเป็นรูทีนที่เหมาะสมจะถูกเรียก*/void mousePressed(){ if(comm1.pressed()) { updateSerialPort(0);} // เปลี่ยนเป็นพอร์ต comm ที่ดัชนี 0 ใน Serial.list() else if(comm2.pressed()) {updateSerialPort(1);} // เปลี่ยนเป็นพอร์ต comm ที่ดัชนี 1 ใน Serial.list() else if(comm3.pressed()) {updateSerialPort(2);} // เปลี่ยนเป็นพอร์ต comm ที่ดัชนี 2 ใน Serial.list() else if(comm4.pressed()) {updateSerialPort(3);} // เปลี่ยนเป็นพอร์ต comm ที่ดัชนี 3 ใน Serial.list() else if(up.pressed()) {sendRobotCommand("F", 5);} //ส่งคำสั่งเพื่อย้ายหุ่นยนต์ไปข้างหน้าเป็นเวลา 0.5 วินาทีอื่น if(left.pressed()) {sendRobotCommand("L", 5);} / / ส่งคำสั่งเพื่อย้ายหุ่นยนต์ไปทางซ้ายเป็นเวลา 0.5 วินาที มิฉะนั้น if(right.pressed()) {sendRobotCommand("R", 5);} // ส่งคำสั่งเพื่อย้ายหุ่นยนต์ไปทางขวาเป็นเวลา 0.5 วินาที มิฉะนั้น if (ลง pressed()) {sendRobotCommand("B", 5);} //ส่งคำสั่งเพื่อย้ายหุ่นยนต์ไปข้างหลังเป็นเวลา 0.5 วินาที มิฉะนั้น if(webServer.pressed()) {startWebServer();} // เริ่ม webServer cycleCount = 0; พื้นหลัง(bg); // ทาสีภาพพื้นหลังใหม่ (รูปภาพนี้มีกราฟิกปุ่มทั้งหมดอยู่) draw();}/* * เรียกเมื่อดำเนินการแล้วจะตรวจสอบเซิร์ฟเวอร์เพื่อดูว่ามีการเชื่อมต่อที่รออยู่หรือไม่ * หากมีการเชื่อมต่อที่รออยู่ ระบบจะดึง ออกคำขอและส่งไปยังรูทีน parseRequest(String) * เพื่อตัดข้อความพิเศษออก จากนั้นจะถูกส่งไปยังรูทีน interpretRequest(String) เพื่อ * เรียกรูทีนการดำเนินการที่เหมาะสม (เช่น ส่งคำสั่งไปยังโรบ็อต)* * คำขอถูกส่งโดยป้อนที่อยู่คอมพิวเตอร์และพอร์ตลงในเว็บเบราว์เซอร์ * สำหรับเครื่องท้องถิ่น "https://127.0.0.1:12345/request?command=F&param1=100" * * ตัวอย่างคำขอ: * GET /request? 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) * ยอมรับ: *//* * ยอมรับภาษา: en-US, en * Accept-Charset: ISO-8859-1, *, utf-8 * การเข้ารหัสที่ยอมรับ: gzip, deflate, bzip2 * โฮสต์: 127.0.0.1:12345 * การเชื่อมต่อ: Keep-Alive * * ตัวอย่างตอบกลับ (สำหรับคำขอที่ประมวลผลแล้ว) * HTTP/1.1 200 ตกลง * การเชื่อมต่อ: ปิด * ประเภทเนื้อหา: ข้อความ/html * * คำสั่ง: F param1: 100 */void pollWebServer(){ if(wServer != null){ //If the webServer กำลังเรียกใช้คำขอไคลเอ็นต์ = wServer.available(); //โหลดไคลเอนต์ถัดไปในบรรทัดใน //เซิร์ฟเวอร์ (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.write("HTTP/1.1 200 OK\nConnection: close\nContent-Type: text/html\n\n" + ตอบกลับ); // ส่งคำตอบ 200 เพื่อบอกว่าคำขอถูก // จัดการและสตริง "ตอบกลับ" เป็นการตอบสนอง wServer.disconnect(request); //ยกเลิกการเชื่อมต่อไคลเอ็นต์ }else if(requestString.indexOf("CONTROLPAGE") != -1){ //หากคำขอนั้นใช้สำหรับการควบคุมหน้าเว็บ String webPageArray = loadStrings("WEBB-ControlPage.html"); //โหลดเว็บเพจควบคุมจาก \data\WEBB-ControlPage.html //(โหลดเป็นอาร์เรย์ของบรรทัด) เว็บเพจสตริง =""; //เพื่อให้การแก้ไขง่ายขึ้น หน้าเว็บเหลือไว้ด้วย //ตัวแบ่งบรรทัด ดังนั้นสิ่งนี้สำหรับ loop striops บรรทัดเหล่านั้นออก for(int i = 0; i portIndex){ // ถ้า portIndex ที่ส่งผ่านเป็นดัชนีที่ถูกต้องใน Serial.list() //(เช่น ไม่ใช่ตัวเลือกที่สามในรายการสอง) serialPortIndex = portIndex; // ตั้งค่าตัวแปร serialPortIndex เป็นดัชนี serialport ใหม่ // (ใช้เพื่อแสดงจุดข้างพอร์ตที่ใช้งานอยู่) } if(serialPortIndex != -1){ // ตรวจสอบว่าพอร์ตได้รับเลือกไว้ก่อนหน้านี้แล้วหาก (serialPort != null){serialPort.stop();} //หากพอร์ต Serial ถูกใช้อยู่แล้วให้หยุดมันก่อนที่จะโหลด SerialPort ใหม่ = new Serial(this, Serial.list()[serialPortIndex], 9600); //สร้าง Serial object ใหม่เพื่อสื่อสารกับ Arduino 9600 Baud }}/* * รับสตริงคำขอ (เช่น: "request?command=F&param1=100") และจะดึงคำสั่ง * และ param1 ออกแล้วส่งต่อไปยัง arduino (การเพิ่มพารามิเตอร์พิเศษหรือคำสั่งที่ไม่ใช่ arduino จะทำที่นี่) */String interpretRequest(String requestString){ String returnValue = "OK"; //เตรียมคำสั่งสตริงตัวแปร returnValue; // สามบรรทัดถัดไปแยกค่าหลังจาก "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=".length());} else{param1String = "0";} if(param1String.indexOf("& ") != -1){ param1String = param1String.substring(0, param1String.indexOf("&"));} else{param1String = param1String;} int param1 = Integer.parseInt(param1String); //เปลี่ยน param1 String เป็น จำนวนเต็ม sendRobotCommand(คำสั่ง, param1); //ส่งคำสั่งไปยังรูทีนที่ส่งไปยัง Arduino returnValue = "command: " + command + " param1: " + param1; // ในขณะนี้เป็นเพียงคำสั่งแยกวิเคราะห์ แต่ส่ง // เป็น html เพื่อให้สามารถรวมการจัดรูปแบบ return returnValue;}/* * รับคำสั่ง (ปัจจุบันคือหนึ่งตัวอักษร) และพารามิเตอร์ (หนึ่งไบต์ 0-255) และส่งไปยัง arduino * ซึ่งกำลังฟังและ reasts * คำสั่งที่รองรับในปัจจุบัน * F -*/void sendRobotCommand(String command, int param1){ println("command: " + command + " time: " + param1); สตริงตรวจสอบสตริง = "AAA"; ถ้า (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; ความกว้าง = iwidth; ความสูง = iheight; } boolean pressed() { if(overRect()) { return true; } else { return false;} } boolean overRect() { if (mouseX >= x && mouseX = y && mouseY <= y+height) { คืนค่าจริง; } อื่น ๆ { คืนค่าเท็จ; } }}

ขั้นตอนที่ 5: ซอฟต์แวร์ - (หน้าเว็บ)

ซอฟต์แวร์ - (หน้าเว็บ)
ซอฟต์แวร์ - (หน้าเว็บ)
ซอฟต์แวร์ - (หน้าเว็บ)
ซอฟต์แวร์ - (หน้าเว็บ)
ซอฟต์แวร์ - (หน้าเว็บ)
ซอฟต์แวร์ - (หน้าเว็บ)

เกือบเสร็จแล้ว ที่เหลือก็แค่คุยกับหุ่นยนต์ของคุณ วิธีพูดคุย: (ผ่านเครือข่ายท้องถิ่น -บน windows-)

  • ค้นหาที่อยู่ IP ในเครื่องของคอมพิวเตอร์แล็ปท็อป เมื่อต้องการทำสิ่งนี้ ให้ไปที่ "Start\Programs\Accesories\Command Prompt" และเมื่อหน้าต่างเทอร์มินัลเปิดขึ้น ให้พิมพ์ "ipconfig" จด "ที่อยู่ IP" และไปที่คอมพิวเตอร์เครื่องอื่นในเครือข่ายท้องถิ่นของคุณ
  • เปิดเว็บเบราว์เซอร์ พิมพ์ "https:// (robot computer ip):12345/ControlPage.html
  • หน้าเว็บการควบคุมควรโหลด ในกล่อง "ที่อยู่ IP" ให้พิมพ์ ip คอมพิวเตอร์หุ่นยนต์
  • เริ่มควบคุมหุ่นยนต์ของคุณ

วิธีรับการพูดคุย: (ทางอินเทอร์เน็ต) ตอนนี้คุณใช้งานได้แล้ว และสามารถพูดผ่านอินเทอร์เน็ตได้เพียงไม่กี่ก้าว

  • (ขั้นตอนที่ยากที่สุด) ตั้งค่าการส่งต่อพอร์ต - คอมพิวเตอร์ของคุณต้องฟังอินเทอร์เน็ตมากกว่าแค่เครือข่ายท้องถิ่น ในการดำเนินการนี้ คุณต้องบอกให้เราเตอร์ของคุณส่งคำขอบางอย่างไปยังคอมพิวเตอร์ที่ควบคุมหุ่นยนต์ สิ่งนี้ค่อนข้างซับซ้อนและเกินขอบเขตของคำแนะนำนี้ อย่างไรก็ตาม หากคุณเยี่ยมชม PortForward.com พวกเขาจะให้ทุกสิ่งที่คุณจำเป็นต้องรู้เกี่ยวกับการกำหนดค่าเราเตอร์ของคุณ (คุณต้องส่งต่อพอร์ต 12345 ไปยังแล็ปท็อปหุ่นยนต์ของคุณ)
  • ถัดไป ค้นพบ IP อินเทอร์เน็ตของคุณ (ไปที่ WhatIsMyIP.com)
  • ในที่สุดก็เริ่ม Skype ตั้งค่าแฮงเอาท์วิดีโอและรับคนที่คุณคุยด้วยให้ไปที่ "https://(internet IP):12345/ControlPage.html"
  • พิมพ์ IP อินเทอร์เน็ตลงในช่อง "ที่อยู่ IP" ในหน้าการควบคุม และหุ่นยนต์ที่เชื่อมต่อเว็บของคุณกำลังถูกขับเคลื่อนจากระยะไกล

ขั้นตอนที่ 6: เสร็จสิ้น

ที่เสร็จเรียบร้อย
ที่เสร็จเรียบร้อย

แค่นั้นแหละ. ฉันหวังว่าคุณจะสนุกกับการขับหุ่นยนต์ของคุณจากที่ไกล หากคุณมีปัญหาใดๆ เกี่ยวกับซอฟต์แวร์หรือฮาร์ดแวร์ โปรดแสดงความคิดเห็น เราจะพยายามช่วยเหลือคุณ หากคุณต้องการดูโครงการที่ละเอียดกว่านี้ โปรดไปที่: oomlout.com

แนะนำ: