Mục lục:

Tạo một Robot được kết nối web (với giá khoảng 500 đô la) (sử dụng Arduino và Netbook): 6 bước (có Hình ảnh)
Tạo một Robot được kết nối web (với giá khoảng 500 đô la) (sử dụng Arduino và Netbook): 6 bước (có Hình ảnh)

Video: Tạo một Robot được kết nối web (với giá khoảng 500 đô la) (sử dụng Arduino và Netbook): 6 bước (có Hình ảnh)

Video: Tạo một Robot được kết nối web (với giá khoảng 500 đô la) (sử dụng Arduino và Netbook): 6 bước (có Hình ảnh)
Video: Thanh niên lần đầu chưa có kinh nghiệm kiểu#funny #tiktok 2024, Tháng mười một
Anonim
Tạo một Robot được kết nối web (với giá khoảng 500 đô la) (sử dụng Arduino và Netbook)
Tạo một Robot được kết nối web (với giá khoảng 500 đô la) (sử dụng Arduino và Netbook)
Tạo một Robot được kết nối web (với giá khoảng 500 đô la) (sử dụng Arduino và Netbook)
Tạo một Robot được kết nối web (với giá khoảng 500 đô la) (sử dụng Arduino và Netbook)
Tạo một Robot được kết nối web (với giá khoảng 500 đô la) (sử dụng Arduino và Netbook)
Tạo một Robot được kết nối web (với giá khoảng 500 đô la) (sử dụng Arduino và Netbook)

Tài liệu hướng dẫn này sẽ chỉ cho bạn cách xây dựng Robot được kết nối web của riêng bạn (sử dụng vi điều khiển Arduino và máy tính eee của Asus). Tại sao bạn lại muốn có Robot được kết nối web? Để chơi với tất nhiên. Lái robot của bạn từ khắp phòng hoặc khắp đất nước, không sử dụng gì khác ngoài Skype và trình duyệt web (không cần cài đặt gì trên máy tính điều khiển). Sau đó? Tìm hiểu kỹ phần mềm và điều chỉnh nó theo cách bạn muốn, thêm GPS để bạn có thể theo dõi nơi bạn đang lái xe trên bản đồ, thêm cảm biến nhiệt độ vào độ dốc nhiệt độ trên bản đồ trong nhà của bạn hoặc cảm biến sonar để thêm điều khiển trên những gì bạn đang duyệt web trình điều khiển có thể và không thể chạy vào. Đặc trưng:

  • Không tốn kém - (~ $ 500 nếu bạn mua tất cả các bộ phận mới và rẻ hơn đáng kể nếu bạn tìm kiếm xung quanh thùng các bộ phận của mình)
  • Sau khi thiết lập và chạy, điều khiển rô bốt chỉ cần có trình duyệt web - (và Skype nếu bạn muốn xem mình đang lái xe ở đâu)
  • Mã nguồn mở và dễ dàng thích ứng - (sử dụng vi điều khiển Arduino, Xử lý cho máy chủ web và tất cả phần mềm có thể chạy trên Linux (tất cả mã cũng được chú thích nhiều để giúp việc chuyển sang và thay đổi mọi thứ trở nên dễ dàng))
  • Thiết kế mô-đun (không phải là một hệ thống tích hợp hoàn toàn, nếu bạn muốn sử dụng một dịch vụ hội nghị truyền hình khác, đừng lo lắng, hoặc nếu bạn có tem Cơ bản thay vì Arduino, chỉ cần một đoạn mã nhỏ và đưa nó vào)

Đây là video nhanh về việc Robot được kết nối web của tôi được điều khiển ra khỏi nhà bếp.

Bước 1: Bộ phận & Công cụ

Bộ phận & Công cụ
Bộ phận & Công cụ

Chỉ một số bộ phận được yêu cầu: Robot: Robot Servo điều khiển bằng Arduino - (SERB) ($ 175 @ oomlout.com) hoặc (tự tạo)

Một robot mã nguồn mở sử dụng bộ điều khiển vi mô Arduino làm bộ não của nó

(có thể sử dụng bất kỳ nền tảng rô bốt servo kép nào với arduino (tùy chọn 1) (vui lòng nhắn cho tôi nếu bạn phát hiện ra bất kỳ tùy chọn nào khác) Máy tính: Asus eee PC 4G ($ 280) (@Best Buy)

Một máy tính xách tay nhỏ rẻ tiền là hoàn hảo cho mục đích này

(bất kỳ máy tính xách tay nào (hoặc máy tính để bàn nếu bạn muốn chạy với hợp âm) có khả năng chạy Xử lý bản phác thảo đều có thể được sử dụng) Bàn máy tính xách tay: Laser Cut Acrylic ($ 25 (@ oomlout)) hoặc (xây dựng bước 3 của riêng bạn)

Một vài miếng acrylic bổ sung bắt vít vào (SERB) để tạo cho nó một chiếc bàn để máy tính xách tay ngồi

Nuts and Bols: (có sẵn tại kho nhà)

  • Chốt 3mm x 10mm (x4)
  • Chốt 3mm x 15mm (x4)
  • Đai ốc 3mm (x8)

Bước 2: Cắt mảnh & lắp ráp

Cắt mảnh & lắp ráp
Cắt mảnh & lắp ráp
Cắt mảnh & lắp ráp
Cắt mảnh & lắp ráp
Cắt mảnh & lắp ráp
Cắt mảnh & lắp ráp
Cắt mảnh & lắp ráp
Cắt mảnh & lắp ráp

Có ba lựa chọn để có được các phần cho bàn máy tính xách tay của bạn.

các mảnh bàn cắt bằng laser và phần cứng cần thiết có sẵn từ oomlout với giá 25 đô la (tại đây)

Tùy chọn 2: (Cắt trên máy cắt laser của riêng bạn hoặc Ponoko.com)

  • Tải xuống tệp bên dưới (03-WEBB-Acrylic Parts.cdr hoặc 03-WEBB-Acrylic Parts (Ponoko P2).eps)
  • Cắt chúng từ 3mm (1/8 ") Acrylic

Tùy chọn 3: (Cưa cuộn)

  • Tải xuống mẫu cưa cuộn từ bên dưới (03-WEBB-ScrollSaw Pattern (A4).pdf (dành cho khổ giấy A4) hoặc 03-WEBB-ScrollSaw Pattern (letter).pdf (dành cho khổ giấy letter))
  • Kiểm tra kỹ để đảm bảo rằng nó không bị chia tỷ lệ khi in (bằng cách đo các thước in)
  • Dán keo vào một miếng acrylic 3mm (1/8 ") và cắt các miếng ra.

Lắp ráp: Tải xuống hướng dẫn lắp ráp (04-WEBB-Assembly Guide.pdf) bên dưới và lắp bàn máy tính xách tay lại với nhau.

Bước 3: Phần mềm - (Arduino)

Phần mềm - (Arduino)
Phần mềm - (Arduino)

Đối với những người mới sử dụng Arduino, hãy xem hướng dẫn bắt đầu tuyệt vời tại Arduino.cc Trước tiên, hãy tắt phần mềm chạy trên Arduino. Nó là một chương trình rất đơn giản, những gì Arduino làm là theo dõi cổng nối tiếp của nó để tìm dữ liệu. Những gì nó đang tìm kiếm là một đoạn hội thoại dài 5 byte.

  • Byte 1-3 (Kiểm tra byte "AAA")
  • Lệnh Byte 4 (Cho arduino biết phải làm gì) (Các lệnh được hỗ trợ 'F' - Tiến, 'B' - Lùi, 'L' - Trái, 'R' - Phải, 'S' - Tốc độ, 'X' - SetSpeedLeft, 'Y' - SetSpeedRight, 'C' - Stop)
  • Tham số Byte 5 - Đối với các lệnh di chuyển, điều này được hiểu là một khoảng thời gian (Tham số * 100 ms) và đối với các lệnh tốc độ, tỷ lệ phần trăm từ 0-100

Mã được nhận xét kỹ lưỡng và khung này thêm các lệnh bổ sung sẽ dễ dàng.

  • Tải xuống tệp zip đính kèm. (05-WEBB-Arduino Code.zip)
  • Giải nén vào thư mục Arduino Sketch của bạn. (mặc định: Tài liệu của tôi / Arduino )
  • Mở môi trường phát triển arduino của bạn và tải lên Arduino của bạn.

Để sao chép và dán

  • Sao chép mã từ bên dưới.
  • Dán vào môi trường phát triển Arduino.
  • Tải lên Arduino của bạn.

Phụ lục: Chương trình Arduino

/ * * Robot kết nối web được điều khiển bằng Arduino (WEBB) - Máy chủ nối tiếp * Để biết thêm chi tiết, hãy truy cập: https://www.oomlout.com/serb * * Hành vi: Arduino lắng nghe cổng nối tiếp của nó để tìm lệnh * ở định dạng 254, 88, 88, (COMMAND), (TIME) * Các lệnh được hỗ trợ - & aposF & apos - 70 - Tiến * & aposB & apos - 66 - Lùi * & aposL & apos - 76 - Trái * & aposR & apos - 82 - Phải * & aposS & apos - 83 - Tốc độ * & aposX & apos - 88 - SetSpeedLeft * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Dừng * Thời gian được hỗ trợ - giá trị 0 - 255 (0 đến 25,5 Giây) * 100 mili giây * sp * Đấu dây: Tín hiệu Servo phải - chân 9 * Tín hiệu Servo trái - chân 10 * * Giấy phép: Tác phẩm này được cấp phép theo Giấy phép không được báo cáo của Creative Commons * Attribution-Share Alike 3.0. Để * xem bản sao của giấy phép này, hãy truy cập * https://creativecommons.org/licenses/by-sa/3.0/ * hoặc gửi thư đến Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * HOA KỲ. * * / // --------------------------------------------- ---------------------------- // BẮT ĐẦU CỦA ARDUINO SERIAL SERVER MỞ ĐẦU // Định nghĩa các hằng số tương ứng với mỗi lệnh (cũng là số mã ascii) #define FORWARD 70 // F # xác định BACKWARD 66 // B # xác định LEFT 76 // L # xác định RIGHT 82 // R # xác định SETSPEED 83 // S # xác định DỪNG 67 // C # xác định SETSPEEDLEFT 88 // X #define SETSPEEDRIGHT 89 // Y / * Ba byte kiểm tra (được sử dụng để giữ cho rô-bốt không phản hồi dữ liệu nối tiếp ngẫu nhiên *) hiện "AAA" * / # xác định checkByte1 65 // "A" #define checkByte2 65 // "A "#define checkByte3 65 //" A "// -------------------------------------- ------------------------------------ // BẮT ĐẦU CỦA ROBOT SERVO ĐƯỢC ĐIỀU KHIỂN ARDUINO (SERB) PREAMBLE # bao gồm #define LEFTSERVOPIN 10 // Chân của servo bên trái được kết nối với # xác định RIGHTSERVOPIN 9 // Chân của servo bên phải được kết nối vớiServo leftServo; Servo rightServo; int leftSpeed = 50; // giữ tốc độ của robot leftServo // tỷ lệ phần trăm từ 0 đến 100int rightSpeed = 100; // giữ tốc độ của rô bốt rightServo // tỷ lệ phần trăm từ 0 đến 100 // KẾT THÚC CỦA ROBOT SERVO ĐƯỢC ĐIỀU KHIỂN ARDUINO (SERB) PREAMBLE // ------------------- -------------------------------------------------- ----- // Thiết lập mọi thứ và chạyvoid setup () {Serial.begin (9600); // Khởi động cổng nối tiếp serbSetup (); // thiết lập trạng thái của tất cả các chân // cần thiết và thêm các servos vào bản phác thảo của bạn} // Chương trình chính loopvoid loop () {serbPollSerialPort (); // liên tục tìm đến cổng nối tiếp // nếu có dữ liệu nó sẽ xử lý} // ------------------------------ ----------------------------------------- // BẮT ĐẦU CÁC TUYẾN CỦA MÁY CHỦ SERIAL ARDUINO / * * Xử lý các lệnh được gửi đến cổng nối tiếp arduino & aposs * / void serbPollSerialPort () {int dta; // biến giữ byte nối tiếp if (Serial.available ()> = 5) {// nếu có 5 byte trong bộ đệm (độ dài pf một yêu cầu đầy đủ) dta = Serial.read (); if (dta = checkByte1) {// Kiểm tra byte kiểm tra đầu tiên dta = Serial.read (); if (dta = checkByte2) {// Kiểm tra byte kiểm tra thứ hai dta = Serial.read (); if (dta = checkByte3) {// Kiểm tra byte kiểm tra thứ ba int command = Serial.read (); // Byte thứ tư là lệnh int param1 = Serial.read (); // Byte thứ năm là param1pretCommand (command, param1); // gửi yêu cầu đã được phân tích cú pháp tới nó & trình xử lý aposs}}}}} / * * Nhận lệnh và tham số và chuyển nó đến rô bốt * / voidpretCommand (int command, int param1) {if (command == FORWARD) {goForward (); trì hoãn (param1 * 100); goStop ();} // if forward else if (command == BACKWARD) {goBackward (); trì hoãn (param1 * 100); goStop ();} // if ngược else if (lệnh == LEFT) {goLeft (); trì hoãn (param1 * 100); goStop ();} // if left else if (command == RIGHT) {goRight (); trì hoãn (param1 * 100); goStop ();} // if right else if (command == SETSPEED) {setSpeed (param1);} // if set speed else if (command == STOP) {goStop ();} // if stop else if (command == SETSPEEDLEFT) {setSpeedLeft (param1);} // nếu thiết lập tốc độ bên trái khác if (lệnh == SETSPEEDRIGHT) {setSpeedRight (param1);} // nếu đặt tốc độ bên phải else {// nếu lệnh không được công nhận có một chút lung linh quẹo trái(); chậm trễ (150); goRight (); chậm trễ (150); goStop (); }} // ---------------------------------------------- -------------------------- // BẮT ĐẦU CÁC TUYẾN ROBOT (SERB) SERVO ĐƯỢC ĐIỀU KHIỂN ARDUINO / * * thiết lập arduino của bạn để giải quyết SERB của bạn bằng các thói quen bao gồm * / void serbSetup () {setSpeed (leftSpeed); pinMode (LEFTSERVOPIN, OUTPUT); // đặt chân tín hiệu servo bên trái // để xuất pinMode (RIGHTSERVOPIN, OUTPUT); // đặt chân tín hiệu servo bên phải // để xuất ra leftServo.attach (LEFTSERVOPIN); // đính kèm bên trái servo rightServo.attach (RIGHTSERVOPIN); // gắn servo bên phải goStop ();} / * * đặt tốc độ của robot từ 0- (dừng) đến 100- (tốc độ đầy đủ) * LƯU Ý: tốc độ sẽ không thay đổi tốc độ hiện tại, bạn phải thay đổi tốc độ * sau đó gọi một của các phương thức go trước khi thay đổi xảy ra. * / void setSpeed (int newSpeed) {setSpeedLeft (newSpeed); // thiết lập tốc độ bên trái setSpeedRight (newSpeed); // đặt tốc độ bên phải} / * * Đặt tốc độ của bánh bên trái * / void setSpeedLeft (int newSpeed) {if (newSpeed> = 100) {newSpeed = 100;} // nếu tốc độ lớn hơn 100 // thực hiện 100 if (newSpeed = 100) {newSpeed = 100;} // nếu tốc độ lớn hơn 100 // biến nó thành 100 if (newSpeed <= 0) {newSpeed = 0;} // nếu tốc độ nhỏ hơn 0 make // it 0 rightSpeed = newSpeed * 0.9; // chia tỷ lệ tốc độ thành} / * * gửi robot về phía trước * / void goForward () {leftServo.write (90 + leftSpeed); rightServo.write (90 - rightSpeed);} / * * gửi ngược robot * / void goBackward () {leftServo.write (90 - leftSpeed); rightServo.write (90 + rightSpeed);} / * * gửi robot sang phải * / void goRight () {leftServo.write (90 + leftSpeed); rightServo.write (90 + rightSpeed);} / * * gửi robot sang trái * / void goLeft () {leftServo.write (90 - leftSpeed); rightServo.write (90 - rightSpeed);} / * * dừng robot * / void goStop () {leftServo.write (90); rightServo.write (90);} // KẾT THÚC CÁC TUYẾN ROBOT (SERB) SERVO ĐƯỢC KIỂM SOÁT ARDUINO // ---------------------------- -----------------------------------------------

Bước 4: Phần mềm - Máy tính xách tay Robot (WebServer)

Phần mềm - Máy tính xách tay Robot (WebServer)
Phần mềm - Máy tính xách tay Robot (WebServer)

(Xử lý là một môi trường và ngôn ngữ lập trình mã nguồn mở rất dễ bắt đầu. Để biết thêm chi tiết, hãy truy cập Xử lý) Phần mềm chạy trên máy tính xách tay robot cũng khá đơn giản. Nó là một máy chủ web khá thô sơ (lắng nghe các yêu cầu trang web từ trình duyệt web), một giao diện người dùng nhỏ (để thiết lập nó) và các phương tiện để chuyển các lệnh nhận được từ Máy chủ Web đến Arduino. (trên cửa sổ)

  • Tải xuống tệp zip bên dưới (06-WEBB-Máy chủ trang web xử lý (windows exe).zip)
  • Giải nén nó và chạy tệp.exe (_WEBB_WebServer_RobotComputer.exe)

Để chỉnh sửa trong quá trình xử lý:

  • Tải xuống tệp zip bên dưới (06-WEBB-Máy chủ trang web xử lý (tệp nguồn).zip)
  • Giải nén mọi nơi trên máy tính của bạn.
  • Mở môi trường Xử lý và mở (_WEBB_WebServer_RobotComputer.pde)

Để kiểm tra:

  • Chạy chương trình.
  • Trong hộp số 1, sẽ có danh sách các cổng comm có sẵn trên máy tính của bạn (nhấp vào cổng kết nối với Arduino của bạn. (Rô bốt của bạn sẽ giật một vài lần khi máy tính kết nối và một dấu chấm màu lục lam sẽ xuất hiện bên cạnh cổng comm)
  • Trong hộp số 2, hãy kiểm tra xem Arduino của bạn đã được kết nối chưa. Nhấp vào một trong các mũi tên và hy vọng rô bốt của bạn sẽ di chuyển theo hướng đã nhấp trong nửa giây.
  • Trong hộp số 3, nhấp vào nút "Bắt đầu" để khởi động máy chủ web.
  • Mở trình duyệt web (trên Máy tính xách tay Robot) và truy cập https://127.0.0.1:12345/ControlPage.html (hy vọng trang web điều khiển có các nút trên đó sẽ xuất hiện) -Chi tiết về cách sử dụng trang này trong bước tiếp theo -

Điều gì đang xảy ra:

  • Máy chủ Web lắng nghe cổng 12345 cho các yêu cầu http (những gì được gửi khi bạn nhập địa chỉ trang web)
  • Có hai loại yêu cầu mà nó đáp ứng.

1. Nó lắng nghe "ControlPage.html" và sẽ gửi Trang web điều khiển 2. Nó lắng nghe các yêu cầu có dạng "/ request? Command = F & param1 = 100" (các lệnh này được phân tích cú pháp và gửi đến Arduino (ví dụ này sẽ dẫn đến kết quả trong rô bốt sẽ Chuyển tiếp trong 10 giây) Phụ lục: (Mã cho WebServer)

/ * * Robot kết nối web điều khiển bằng Arduino (WEBB) - Máy chủ trang web * Để biết thêm chi tiết, hãy truy cập: https://www.oomlout.com/serb * * Hành vi: Chương trình lắng nghe các yêu cầu http (trang web) trong biểu mẫu * "/ request ? command = F & param1 = 100 "rồi chuyển chúng đến * Arduino * Các lệnh được hỗ trợ - & aposF & apos - 70 - Tiến * & aposB & apos - 66 - Lùi * & aposL & apos - 76 - Trái * & aposR & apos - 82 - Phải * & aposS & apos - 83 - Tốc độ * & aposX & apos - 88 - SetSpeedLeft * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * param1 & aposs - 0 - 255 (0 đến 25,5 Giây) * 100 mili giây * * cũng cung cấp trang web điều khiển cho trình duyệt nếu yêu cầu ControlPage.html * * Hoạt động: 1. Nhấp vào cổng Comm mà Arduino của bạn được kết nối với * 2. Sử dụng các nút kiểm tra để xem arduino của bạn có đang lắng nghe không * (sẽ di chuyển theo hướng được nhấp trong nửa giây) * 3. Nhấp vào Bắt đầu và máy chủ web của bạn sẽ lắng nghe các yêu cầu * * * Giấy phép: Tác phẩm này được cấp phép theo Creative Commons * Attribu tion-Share Alike 3.0 Unported License. Để * xem bản sao của giấy phép này, hãy truy cập * https://creativecommons.org/licenses/by-sa/3.0/ * hoặc gửi thư đến Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * HOA KỲ. * * / import processing.serial. *; // nhập thư viện nối tiếp để sử dụng Serial (để nói chuyện với Arduino) import process.net. *; // nhập thư viện net để sử dụng Máy chủ (để nói chuyện với internet) / * Các biến liên quan đến cổng nối tiếp * / int serialPortIndex = -1; // chỉ mục của cổng nối tiếp chúng ta đang sử dụng trong Serial.list () listString commOptions; // Một biến để lưu trữ Serial.list () nên không cần phải thăm dò // các cổng nối tiếp mỗi khi chúng ta muốn điều chỉnh nó (thăm dò gây ra // nhảy trong arduino servos) Serial serialPort; // Làm cho cổng nối tiếp có thể định địa chỉ trong suốt bản phác thảo này / * Các biến liên quan đến đồ họa và kết xuất * / Phông chữ PFont; // đặt phông chữ ở chế độ công khai để nó chỉ cần được tải một lần (Arial-72) / * Biến liên quan đến mạng * / Server wServer; // Máy chủ xử lý web requestint port = 12345; // Cổng mà Máy chủ lắng nghe toint cycleCount = 0; // Đếm số lần vòng lặp vẽ thực thi (được sử dụng để // tạo hoạt ảnh cho văn bản "đang chạy") / * Biến tiện ích * / PImage bg; // Hình nền hiện tại / WEBB-background.png / * * Các biến liên quan đến nút * (các nút được triển khai rất đại khái, các hộp giới hạn được lưu trữ và đồ họa và văn bản * được vẽ trên hình nền) tức là. các biến nút di chuyển sẽ không di chuyển sự xuất hiện của các nút * / Nút comm1; Nút comm2; Nút comm3; Nút comm4; // Các nút để chọn đúng cổng nối tiếp portButton up; Nút bên phải; Nút trái; Nút xuống; // Các nút hướng để kiểm tra xem rô bốt có đang phản hồi hay khôngButton webServer; // Nút khởi động webServer / * * thiết lập evrything lên * / void setup () {frameRate (5); // Làm chậm bản phác thảo xuống một chút để nó không bị đánh thuế vào hệ thống bg = loadImage ("WEBB-background.png"); // Tải hình nền (được lưu trong thư mục sketch) size (700, 400); // Đặt kích thước của cửa sổ phác thảo font = loadFont ("ArialMT-72.vlw"); // Tải phông chữ chúng ta sẽ sử dụng qua bản phác thảo này commOptions = Serial.list (); // Thăm dò các cổng nối tiếp và nhận danh sách các cổng có sẵn // (chỉ làm điều này một lần duy nhất giúp rô bốt không bị giật mỗi khi nó & aposs // cổng nối tiếp được thăm dò) defineButtons (); // Xác định các hộp giới hạn cho mỗi nền nút (bg); // Vẽ hình nền (hình này có tất cả đồ họa nút trên đó)} / * Vòng lặp chính của bản phác thảo * / void draw () {if (cycleCount == 0) {// - gọi các thói quen vẽ drawCommBox (); // Vẽ các emelments trong Comm Box (hộp 1) drawTestBox (); // Rút ra tất cả các phần tử trong Hộp kiểm tra (hộp 2) drawWebServerBox (); // Rút ra tất cả các phần tử trong Hộp WebServer (hộp 3)} // - gọi các quy trình làm việc PoWebServer (); // Thăm dò ý kiến trên máy chủ web để xem có yêu cầu nào đến qua mạng không} // ------------------------------ ---------------------------------------------- // Bắt đầu các quy trình vẽ (chia nhỏ chỉ để làm cho mã đẹp hơn để đọc) / * * Quy trình cập nhật bản vẽ (thực hiện mỗi chu kỳ) cho các mục trong ô dấu phẩy (ô 1) * / void drawCommBox () {fill (0, 0, 0); // Đặt tô màu đen textFont (font, 15); // Đặt phông chữ ở kích thước phù hợp cho (int i = 0; i 0) {running = running + ".";} // số lượng dấu chấm dựa trên cycleCount if ((cycleCount / 1)> 1) { running = running + ".";} if ((cycleCount / 1)> 2) {running = running + ".";} if ((cycleCount / 1)> 3) {cycleCount = 0;} text (đang chạy, 520, 210); } cycleCount ++; // Mỗi lần thông qua cycleCount được tăng thêm một} // Kết thúc các quy trình Draw // ------------------------------- ------------------------------ // ------------------ ------------------------------------------- // Bắt đầu quy trình dịch vụ / * * mousePressed được gọi mỗi khi con chuột được nhấn. updateSerialPort (0);} // Thay đổi đối với cổng comm tại chỉ mục 0 trong Serial.list () else if (comm2.pressed ()) {updateSerialPort (1);} // Các thay đổi đối với cổng comm tại chỉ mục 1 trong Serial.list () else if (comm3.pressed ()) {updateSerialPort (2);} // Các thay đổi đối với cổng comm tại chỉ mục 2 trong Serial.list () else if (comm4.pressed ()) {updateSerialPort (3);} // Các thay đổi đối với cổng comm tại chỉ mục 3 trong Serial.list () else if (up.pressed ()) {sendRobotCommand ("F", 5);} // Gửi lệnh để di chuyển rô-bốt Tiến thêm 0,5 giây khác if (left.pressed ()) {sendRobotCommand ("L", 5);} / / Gửi lệnh di chuyển rô bốt sang Trái trong 0,5 giây khác if (right.pressed ()) {sendRobotCommand ("R", 5);} // Gửi lệnh di chuyển rô bốt Sang phải trong 0,5 giây khác if (xuống. press ()) {sendRobotCommand ("B", 5);} // Gửi lệnh di chuyển robot Lùi lại trong 0,5 giây khác if (webServer.pressed ()) {startWebServer ();} // Khởi động webServer cycleCount = 0; nền (bg); // Vẽ lại hình nền (hình này có tất cả đồ họa nút trên đó) draw ();} / * * Được gọi sau khi thực thi, nó sẽ kiểm tra Máy chủ để xem có bất kỳ kết nối đang chờ nào không * nếu có kết nối đang chờ nó kéo đưa ra yêu cầu và chuyển nó đến quy trình parseRequest (String) * để loại bỏ văn bản thừa. Sau đó, nó được gửi đến quy trình giải thích (String) để * gọi quy trình hành động thích hợp (tức là gửi hướng dẫn đến rô bốt).* * Yêu cầu được chuyển bằng cách nhập địa chỉ máy tính và cổng vào trình duyệt web * Đối với máy cục bộ "https://127.0.0.1:12345/request?command=F&param1=100" * * Yêu cầu ví dụ: * GET / request? command = F & param1 = 100 HTTP / 1.1 * Tác nhân người dùng: Mozilla / 5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit / 525.19 (KHTML, như Gecko) * Chấp nhận: * // * * Chấp nhận-Ngôn ngữ: en-US, vi * Accept-Charset: ISO-8859-1, *, utf-8 * Accept-Encoding: gzip, deflate, bzip2 * Host: 127.0.0.1:12345 * Kết nối: Keep-Alive * * Ví dụ Trả lời (cho yêu cầu đã xử lý) * HTTP / 1.1 200 OK * Kết nối: đóng * Nội dung-Loại: văn bản / html * * lệnh: F param1: 100 * / void thăm dòWebServer () {if (wServer! = null) {// Nếu webServer đang chạy Client request = wServer.available (); // Nạp Client tiếp theo trong dòng // server (null nếu không có yêu cầu nào đang chờ) if (request! = Null) {// nếu có một quá trình yêu cầu thì nó String fullRequest = request.readString (); // Lưu trữ nội dung yêu cầu dưới dạng chuỗi String ip = request.ip (); // Lưu trữ địa chỉ ip của máy khách dưới dạng chuỗi String requestString = parseRequest (fullRequest.toUpperCase ()); // Loại bỏ tất cả thông tin // thừa chỉ để lại chuỗi yêu cầu (văn bản sau GET) // (chuyển sang chữ hoa để giúp kiểm tra chuỗi dễ dàng hơn) if (requestString.indexOf ("REQUEST?")! = -1) { // Kiểm tra xem yêu cầu có "REQUEST không?" Chuỗi trả lời =pretRequest (requestString); // Gửi yêu cầu tới trình thông dịch yêu cầu request.write ("HTTP / 1.1 200 OK / nConnection: close / nContent-Type: text / html / n / n" + reply); // Gửi câu trả lời 200 để nói rằng yêu cầu đã được xử lý // và chuỗi "trả lời" dưới dạng phản hồi wServer.disconnect (request); // Ngắt kết nối Máy khách} else if (requestString.indexOf ("CONTROLPAGE")! = -1) {// Nếu yêu cầu dành cho trang web điều khiển String webPageArray = loadStrings ("WEBB-ControlPage.html"); // Tải trang web điều khiển từ / data / WEBB-ControlPage.html // (được tải dưới dạng một mảng dòng) String webPage = ""; // Để chỉnh sửa dễ dàng hơn, trang web đã được để lại // ngắt dòng, vì vậy vòng lặp for này sẽ loại bỏ các dòng đó for (int i = 0; i portIndex) {// nếu portIndex được truyền là chỉ mục hợp lệ trong Serial.list () // (tức là không phải tùy chọn ba trong danh sách hai) serialPortIndex = portIndex; // đặt biến serialPortIndex thành chỉ mục serialport mới // (được sử dụng để hiển thị dấu chấm bên cạnh cổng đang hoạt động)} if (serialPortIndex! = -1) {// kiểm tra để đảm bảo rằng một cổng đã được chọn trước đó nếu (serialPort! = null) {serialPort.stop ();} // nếu một cổng Serial đã được sử dụng, hãy dừng nó lại trước khi tải một cổng mới serialPort = new Serial (this, Serial.list () [serialPortIndex], 9600); // Tạo một đối tượng Serial mới để kết hợp với Arduino 9600 Baud}} / * * Lấy một chuỗi yêu cầu (ví dụ: "request? Command = F & param1 = 100") và sẽ loại bỏ lệnh * và param1 và chuyển nó vào arduino (thêm các tham số bổ sung hoặc các lệnh không phải arduino sẽ được thực hiện tại đây) * / StringpretRequest (String requestString) {String returnValue = "OK"; // Chuẩn bị một lệnh String biến returnValue; // Ba dòng tiếp theo trích xuất giá trị sau "command =" // (dòng bổ sung trong trường hợp tham số lệnh nằm ở // cuối yêu cầu và không được theo sau bởi một & 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; // Ba dòng tiếp theo trích xuất giá trị sau" param1 = "// (dòng bổ sung trong trường hợp tham số lệnh ở // cuối yêu cầu và không được theo sau bởi & 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); // Biến chuỗi param1 thành một số nguyên sendRobotCommand (lệnh, param1); // Gửi lệnh tới quy trình sẽ gửi nó tới lệnh Arduino returnValue = ":" + command + "param1:" + param1; // hiện tại chỉ là lệnh được phân tích cú pháp nhưng gửi // dưới dạng html để định dạng có thể được bao gồm return returnValue;} / * * Lấy một lệnh (hiện tại là một ký tự) và một tham số (một byte 0-255) và gửi nó đến arduino * đang lắng nghe và reasts * Các lệnh được hỗ trợ hoàn toàn * F - * / void sendRobotCommand (String command, int param1) {println ("command:" + command + "time:" + param1); String checkString = "AAA"; if (serialPort! = null) {serialPort.write (checkString + lệnh); serialPort.write (byte (param1)); }} // Kết thúc quá trình thiết lập / không thường được gọi là quy trình // ----------------------------------- -------------------------------------------------- // Nút ví dụ và mã RectButton từ ví dụ processing.org với một số thay đổi // được thực hiện chủ yếu để đơn giản hóa và xóa hoạt ảnh cuộn qua // https://processing.org/learning/topics/buttons.html (2008-09-23) lớp Nút {int x, y; int chiều rộng, chiều cao; Nút (int ix, int iy, int iwidth, int iheight) {x = ix; y = iy; width = i width; chiều cao = iheight; } boolean ép () {if (overRect ()) {return true; } else {return false;}} boolean overRect () {if (mouseX> = x && mouseX = y && mouseY <= y + height) {return true; } else {return false; }}}

Bước 5: Phần mềm - (Trang web)

Phần mềm - (Trang web)
Phần mềm - (Trang web)
Phần mềm - (Trang web)
Phần mềm - (Trang web)
Phần mềm - (Trang web)
Phần mềm - (Trang web)

Chà, chúng ta gần như đã hoàn thành tất cả những gì còn lại là nói chuyện với robot của bạn. Để nói chuyện: (qua mạng cục bộ -trên windows-)

  • Khám phá địa chỉ ip cục bộ của máy tính xách tay. Để thực hiện việc này, hãy vào "Start / Programs / Accesories / Command Prompt" và khi cửa sổ terminal mở ra, hãy nhập "ipconfig". Ghi lại "Địa chỉ IP" và chuyển đến một máy tính khác trong mạng cục bộ của bạn.
  • Mở trình duyệt web, nhập "https:// (ip máy tính rô bốt): 12345 / ControlPage.html
  • Trang web điều khiển sẽ tải, trong hộp "Địa chỉ IP", nhập ip máy tính rô-bốt.
  • Bắt đầu điều khiển robot của bạn.

Để nói chuyện: (qua internet) Bây giờ bạn đã có nó hoạt động cục bộ, việc nó nói chuyện qua internet chỉ còn vài bước ngắn nữa.

  • (bước khó nhất) Thiết lập Port Forwarding - Máy tính của bạn cần lắng nghe internet hơn là chỉ mạng cục bộ. Để thực hiện việc này, bạn cần yêu cầu bộ định tuyến của mình chuyển các yêu cầu nhất định đến máy tính điều khiển rô bốt. Điều này hơi phức tạp và vượt xa phạm vi của Sách hướng dẫn này. Tuy nhiên, nếu bạn truy cập PortForward.com, họ sẽ cung cấp cho bạn tất cả những gì bạn cần biết về cách định cấu hình bộ định tuyến của mình (bạn cần chuyển tiếp cổng 12345 tới máy tính xách tay rô bốt của mình)
  • Tiếp theo khám phá IP internet của bạn (truy cập WhatIsMyIP.com)
  • Cuối cùng, khởi động skype thiết lập một cuộc gọi điện video và đưa bất kỳ ai bạn đang nói chuyện đến truy cập "https:// (Internet IP): 12345 / ControlPage.html"
  • Nhập IP internet vào hộp "Địa chỉ IP" trong trang web điều khiển và Robot được kết nối web của bạn đang được điều khiển từ xa.

Bước 6: Hoàn thành

Hoàn thành
Hoàn thành

Đó là nó. Tôi hy vọng bạn sẽ có một khoảng thời gian vui vẻ khi lái robot của mình từ xa. Nếu bạn có bất kỳ vấn đề nào với phần mềm hoặc phần cứng, vui lòng để lại nhận xét và tôi sẽ cố gắng giúp bạn. Nếu bạn muốn kiểm tra các dự án gọn gàng hơn, hãy thử truy cập: oomlout.com

Đề xuất: