Innehållsförteckning:

Gör en webbansluten robot (för cirka $ 500) (med en Arduino och en Netbook): 6 steg (med bilder)
Gör en webbansluten robot (för cirka $ 500) (med en Arduino och en Netbook): 6 steg (med bilder)

Video: Gör en webbansluten robot (för cirka $ 500) (med en Arduino och en Netbook): 6 steg (med bilder)

Video: Gör en webbansluten robot (för cirka $ 500) (med en Arduino och en Netbook): 6 steg (med bilder)
Video: GÖR EN MUSIKVIDEO 2024, November
Anonim
Gör en webbansluten robot (för cirka $ 500) (med en Arduino och en Netbook)
Gör en webbansluten robot (för cirka $ 500) (med en Arduino och en Netbook)
Gör en webbansluten robot (för cirka $ 500) (med en Arduino och en Netbook)
Gör en webbansluten robot (för cirka $ 500) (med en Arduino och en Netbook)
Gör en webbansluten robot (för cirka $ 500) (med en Arduino och en Netbook)
Gör en webbansluten robot (för cirka $ 500) (med en Arduino och en Netbook)

Denna instruktionsbok visar dig hur du bygger din egen webbanslutna robot (med hjälp av en Arduino mikrokontroller och Asus eee pc). Varför skulle du vilja ha en webbansluten robot? Att leka med förstås. Kör din robot från hela rummet eller från hela landet, med bara Skype och en webbläsare (inget att installera på den styrande datorn). Efter det? Gräv in i programvaran och anpassa den hur du vill, lägg till en GPS så att du kan titta på var du kör på en karta, lägg till temperatursensorer för att kartlägga temperaturgradienter i ditt hus eller ekolodsgivare för att lägga till kontroller på vad du är på webben förare kan och kan inte stöta på. Funktioner:

  • Billigt - (~ $ 500 om du köper alla delar nya och betydligt billigare om du gräver runt i din reservdel)
  • När du väl har startat kontrollen av roboten krävs bara en webbläsare - (och Skype om du vill se vart du kör)
  • Öppen källkod och enkelt anpassningsbar - (använder en Arduino -mikrokontroller, bearbetning för webbservern och all programvara kan köras på Linux (all kod är också kraftigt kommenterad för att göra det enkelt att hoppa in och ändra saker))
  • Modulär design (inte ett helt integrerat system, om du vill använda en annan videokonferenstjänst behöver du inte oroa dig, eller om du har en grundstämpel snarare än en Arduino bara en liten bit kod och placerar den i)

Här är en snabb video av min Web Connected Robot som körs ut ur köket.

Steg 1: Delar och verktyg

Delar och verktyg
Delar och verktyg

Endast några delar krävs: Robot: Arduino Controlled Servo Robot - (SERB) ($ 175 @ oomlout.com) eller (gör din egen)

En öppen källkodrobot som använder en Arduino-mikrokontroller som hjärnan

(alla dubbla servosrobotplattformar med en arduino kan användas (alternativ 1) (meddela mig om du upptäcker andra alternativ) Dator: Asus eee PC 4G ($ 280) (@Best Buy)

En liten billig bärbar dator som är perfekt för detta ändamål

(vilken bärbar dator som helst (eller stationär om du vill köra med ett ackord) som kan köras Bearbetningsskisser kan användas) Laptop Skrivbord: Laserskärning Akryl ($ 25 (@ oomlout)) eller (bygg ditt eget steg 3)

Några ytterligare akrylstycken som skruvas fast på en (SERB) för att ge den ett skrivbord för den bärbara datorn att sitta på

Nuts and Bols: (finns hemma)

  • 3 mm x 10 mm bult (x4)
  • 3 mm x 15 mm bult (x4)
  • 3 mm mutter (x8)

Steg 2: Skärbitar och montering

Skärbitar och montering
Skärbitar och montering
Skärbitar och montering
Skärbitar och montering
Skärbitar och montering
Skärbitar och montering
Skärbitar och montering
Skärbitar och montering

Det finns tre alternativ för att få bitar till ditt bärbara skrivbord. Skäralternativ 1: (Inköp från oomlout.com)

laserskurna skrivbitar och nödvändig hårdvara är tillgängliga från oomlout för $ 25 (här)

Alternativ 2: (Skär på din egen laserskärare eller Ponoko.com)

  • Ladda ner filen nedan (03-WEBB-akryldelar. Cdr eller 03-WEBB-akryldelar (Ponoko P2).eps)
  • Skär dem från 3 mm (1/8 ") akryl

Alternativ 3: (Scroll Saw)

  • Ladda ner rullningssågmönstret nedan (03-WEBB-ScrollSaw-mönster (A4).pdf (för papper i A4-storlek) eller 03-WEBB-ScrollSaw-mönster (bokstav).pdf (för papper i bokstavstorlek))
  • Dubbelkolla att den inte har skalats vid utskrift (genom att mäta de tryckta linjalerna)
  • Limma till en bit av 3 mm (1/8 ") akryl och skär ut bitarna.

Montering: Ladda ner monteringsguiden (04-WEBB-Assembly Guide.pdf) nedan och sätt ihop det bärbara skrivbordet.

Steg 3: Programvara - (Arduino)

Programvara - (Arduino)
Programvara - (Arduino)

För de som är nya på Arduino, kolla in den fantastiska guiden för att komma igång på Arduino.cc Först av programvaran som körs på Arduino. Det är ett mycket enkelt program, vad Arduino gör är att övervaka sin seriella port för data. Vad den letar efter är en konversation som är 5 byte lång.

  • Byte 1-3 (Kontrollera byte "AAA")
  • Byte 4 -kommando (berättar för arduino vad man ska göra) (Kommandon som stöds 'F' - framåt, 'B' - bakåt, 'L' - vänster, 'R' - höger, 'S' - hastighet, 'X' - SetSpeedLeft, 'Y' - SetSpeedRight, 'C' - Stop)
  • Byte 5 -parameter - För flyttkommandon tolkas detta som ett tidsintervall (parameter * 100 ms) och för hastighetskommandona en procentandel från 0-100

Koden kommenteras noggrant och med tanke på detta ramverk bör det vara enkelt att lägga till ytterligare kommandon.

  • Ladda ner den bifogade zip -filen. (05-WEBB-Arduino Code.zip)
  • Packa upp till din Arduino Sketch -katalog. (standard: Mina dokument / Arduino )
  • Öppna ditt arduino -utvecklingsmiljö och ladda upp till din Arduino.

Att kopiera och klistra in

  • Kopiera koden underifrån.
  • Klistra in i Arduino -utvecklingsmiljön.
  • Ladda upp till din Arduino.

Bilaga: Arduino -programmet

/ * * Arduino Controlled Web Connected Robot (WEBB) - Seriell värd * För mer information besök: https://www.oomlout.com/serb * * Beteende: Arduino lyssnar på sin seriella port för ett kommando * i format 254, 88, 88, (KOMMANDO), (TID) * Kommandon som stöds - & apos F & apos - 70 - Framåt * & apos B & apos - 66 - Bakåt * & aposL & apos - 76 - Vänster * & aposR & apos - 82 - Höger * & aposS & apos - 83 - Hastighet * & aposX & apos - 88 - SetSpeedL * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * Tider som stöds - 0 - 255 (0 till 25,5 sekunder) värde * 100 millisekunder * sp * Ledningar: Höger servosignal - pin 9 * Vänster servosignal - pin 10 * * Licens: Detta verk är licensierat under Creative Commons * Attribution-Share Alike 3.0 Unported License. För att * se en kopia av denna licens, besök * https://creativecommons.org/licenses/by-sa/3.0/ * eller skicka ett brev till Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * USA. * */// ----------------------------------------------------- ---------------------------- // START AV ARDUINO SERIAL SERVER PREAMBEL // Definiera konstanter som motsvarar varje kommando (även ascii-kodnumret) #define FRAMÅT 70 // F#definiera BACKWARD 66 // B#definiera VÄNSTER 76 // L#definiera HÖGER 82 // R#definiera SETSPEED 83 // S#definiera STOPP 67 // C#definiera SETSPEEDLEFT 88 // X #define SETSPEEDRIGHT 89 // Y/ *De tre kontrollbyten (används för att hindra roboten från att svara på slumpmässiga seriella *data) för närvarande "AAA" */#definiera checkByte1 65 // "A" #define checkByte2 65 // "A "#define checkByte3 65 //" A "// -------------------------------------- ------------------------------------ // START AV ARDUINO KONTROLLERAD SERVO ROBOT (SERB) PREAMBEL#inkluderar #define LEFTSERVOPIN 10 // Stiftet som den vänstra servon är ansluten till#definiera RIGHTSERVOPIN 9 // Stiftet som den högra servon är ansluten tillServo leftServo; Servo rightServo; int leftSpeed = 50; // håller robotarnas hastighet leftServo // en procentsats mellan 0 och 100int rightSpeed = 100; // håller robotarnas hastighet rätt Servo // en procentsats mellan 0 och 100 // SLUT AV ARDUINO KONTROLLERAD SERVO ROBOT (SERB) PREAMBEL // ------------------- ---------------------------------------------------------- ----- // Får allt igång och löser in void setup () {Serial.begin (9600); // Startar seriell port serbSetup (); // ställer in tillståndet för alla nödvändiga // pins och lägger till servon i din skiss} // Huvudprogrammet loopvoid loop () {serbPollSerialPort (); // ser kontinuerligt till serieporten // om det finns data behandlar den den // // ------------------------------ ----------------------------------------- // START AV ARDUINO SERIAL SERVER ROUTINES/ * * Behandlar kommandon som levereras till arduino & aposs seriella port */void serbPollSerialPort () {int dta; // variabel för att hålla seriebyten om (Serial.available ()> = 5) {// om 5 byte finns i bufferten (längd pf en fullständig begäran) dta = Serial.read (); if (dta = checkByte1) {// Kontrollerar efter första kontrollbyte dta = Serial.read (); if (dta = checkByte2) {// Kontrollerar efter andra kontrollbyte dta = Serial.read (); if (dta = checkByte3) {// Kontrollerar efter tredje kontroll byte int kommando = Serial.read (); // Fjärde byte är kommandot int param1 = Serial.read (); // Femte byte är param1 interpretCommand (kommando, param1); // skickar den analyserade förfrågan till den & aposs -hanteraren}}}}}/ * * Tar kommandot och parametern och skickar den till roboten */void interpretCommand (int kommando, int param1) {if (command == FORWARD) {goForward (); fördröjning (param1 * 100); goStop ();} // om framåt annars if (kommando == BACKWARD) {goBackward (); fördröjning (param1 * 100); goStop ();} // om bakåt annat om (kommando == VÄNSTER) {goLeft (); fördröjning (param1 * 100); goStop ();} // om den lämnas annars if (command == RIGHT) {goRight (); fördröjning (param1 * 100); goStop ();} // om rätt annat om (kommando == SETSPEED) {setSpeed (param1);} // om du ställer in hastighet annars om (kommando == STOPP) {goStop ();} // om stopp annars om (kommando == SETSPEEDLEFT) {setSpeedLeft (param1);} // om du ställer in vänster hastighet annars om (command == SETSPEEDRIGHT) {setSpeedRight (param1);} // om du ställer in rätt hastighet annars {// om okänt kommando gör lite skumt gå till vänster(); fördröjning (150); gå rätt(); fördröjning (150); goStop (); }} // ---------------------------------------------- -------------------------- // START AV ARDUINO KONTROLLERADE SERVO ROBOT (SERB) RUTINER/ * * ställer in din arduino för att adressera din SERB med de inkluderade rutinerna*/void serbSetup () {setSpeed (leftSpeed); pinMode (LEFTSERVOPIN, OUTPUT); // ställer in vänster servosignalstift // för att mata ut pinMode (RIGHTSERVOPIN, OUTPUT); // ställer in höger servosignalstift // för att mata ut leftServo.attach (LEFTSERVOPIN); // fäster vänster servo rightServo.attach (RIGHTSERVOPIN); // fäster höger servo goStop ();}/ * * ställer in robotens hastighet mellan 0- (stoppad) och 100- (full hastighet) * OBS: hastigheten ändrar inte den aktuella hastigheten du måste ändra hastigheten * ring sedan en av go -metoderna innan ändringar inträffar.*/ void setSpeed (int newSpeed) {setSpeedLeft (newSpeed); // ställer in vänster hastighet setSpeedRight (newSpeed); // ställer in rätt hastighet}/ * * Ställer in hastigheten för det vänstra hjulet */void setSpeedLeft (int newSpeed) {if (newSpeed> = 100) {newSpeed = 100;} // om hastigheten är större än 100 // gör det 100 if (newSpeed = 100) {newSpeed = 100;} // om hastigheten är större än 100 // gör det till 100 if (newSpeed <= 0) {newSpeed = 0;} // om hastigheten är mindre än 0 gör // det 0 rightSpeed = newSpeed * 0,9; // skalar hastigheten för att vara}/ * * skickar roboten framåt */void goForward () {leftServo.write (90 + leftSpeed); rightServo.write (90 - rightSpeed);} / * * skickar roboten bakåt * /void goBackward () {leftServo.write (90 - leftSpeed); rightServo.write (90 + rightSpeed);} / * * skickar roboten höger * /void goRight () {leftServo.write (90 + leftSpeed); rightServo.write (90 + rightSpeed);}/ * * skickar roboten vänster */void goLeft () {leftServo.write (90 - leftSpeed); rightServo.write (90 - rightSpeed);}/ * * stoppar roboten */void goStop () {leftServo.write (90); rightServo.write (90);} // END OF ARDUINO CONTROLLED SERVO ROBOT (SERB) ROUTINES // ---------------------------- -----------------------------------------------

Steg 4: Programvara - Robot Laptop (WebServer)

Programvara - Robot Laptop (WebServer)
Programvara - Robot Laptop (WebServer)

(Processing är ett öppen källkodsprogram och miljö som är superenkelt att komma igång med. För mer information besök Processing) Programvaran som körs på robotens bärbara dator är också ganska enkel. Det är en ganska rudimentär webbserver (lyssnar efter webbsideförfrågningar från en webbläsare), ett litet användargränssnitt (för att ställa in det) och faciliteter för att överföra kommandon som tas emot från webbservern till Arduino. För att installera snabbt: (på windows)

  • Ladda ner zip-filen nedan (06-WEBB-Processing Webserver (windows exe).zip)
  • Packa upp den och kör.exe -filen (_WEBB_WebServer_RobotComputer.exe)

Så här redigerar du under bearbetning:

  • Ladda ner zip-filen nedan (06-WEBB-Processing Webserver (källfiler).zip)
  • Packa upp var som helst på din dator.
  • Öppna bearbetningsmiljön och öppna (_WEBB_WebServer_RobotComputer.pde)

Att testa:

  • Kör programmet.
  • I ruta #1 kommer det att finnas en lista över tillgängliga comm -portar på din dator (klicka på den som din Arduino är ansluten till. (Din robot kommer att rycka några gånger när datorn ansluter, och en cyan prick kommer att visas bredvid den valda comm port)
  • Testa i ruta 2 för att se om din Arduino är ansluten. Klicka på en av pilarna och förhoppningsvis kommer din robot att röra sig i den klickade riktningen i en halv sekund.
  • I ruta #3 klickar du på "Start" -knappen för att starta webbservern.
  • Öppna en webbläsare (på robotbärbar dator) och besök https://127.0.0.1:12345/ControlPage.html (förhoppningsvis visas kontrollwebbsidan med knappar på) -Detaljer om hur du använder den här sidan i nästa steg -

Vad händer:

  • Webbservern lyssnar på port 12345 för http -förfrågningar (vad skickas när du skriver in en webbsideadress)
  • Det finns två typer av förfrågningar den svarar på.

1. Den lyssnar efter "ControlPage.html" och skickar kontrollwebbsidan 2. Den lyssnar efter förfrågningar i formuläret "/request? Command = F & param1 = 100" (dessa kommandon analyseras och skickas till Arduino (detta exempel skulle resultera i i roboten som går framåt i 10 sekunder) Bilaga: (Koden för WebServer)

/ * * Arduino Controlled Web Connected Robot (WEBB) - Webbserver * För mer information besök: https://www.oomlout.com/serb * * Beteende: Programmet lyssnar efter http (webbsida) förfrågningar i formuläret ""/begäran ? command = F & param1 = 100 "och skickar dem sedan till * Arduino * Kommandon som stöds - & apos F & apos - 70 - Framåt * & aposB & apos - 66 - Bakåt * & aposL & apos - 76 - Vänster * & aposR & apos - 82 - Höger * & aposS & apos - 83 - Hastighet * & aposX & apos - 88 - SetSpeedLeft * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * param1 & aposs - 0 - 255 (0 till 25,5 sekunder) värde * 100 millisekunder * * serverar även kontrollwebbsidan till webbläsaren om du ber om ControlPage.html * * Användning: 1. Klicka på Comm -porten som din Arduino är ansluten till * 2. Använd testknapparna för att se om din arduino lyssnar * (rör sig i den riktning som du klickar på i en halv sekund) * 3. Klicka på Start så kommer din webbserver att lyssna efter förfrågningar * * * Licens: Detta verk är licensierat under Creative Commons * Attribu tion-Share Alike 3.0 Unported License. För att * se en kopia av denna licens, besök * https://creativecommons.org/licenses/by-sa/3.0/ * eller skicka ett brev till Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * USA. * */import processing.serial. *; // importera det seriella biblioteket för att använda Serial (för att prata med Arduino) import processing.net.*; // importera nätbiblioteket för att använda Server (för att prata med internet)/ * Seriell portrelaterade variabler */int serialPortIndex = -1; // indexet för den seriella porten vi använder i Serial.list () listString kommOptioner; // En variabel att lagra Serial.list () i så att det inte är nödvändigt att polla // de seriella portarna varje gång vi vill referera den (polling orsakar ett // hopp i arduino -servon) Serial serialPort; // Gör den seriella porten adresserbar i hela denna skiss/ * Grafiska och återgivningsrelaterade variabler */PFont -teckensnitt; // gör teckensnittet offentligt så det behöver bara laddas en gång (Arial-72)/ * Nätverksrelaterade variabler */Server wServer; // Servern som hanterar webbförfrågningsint port = 12345; // Porten som servern lyssnar till int cycleCount = 0; // Räknar antalet gånger draw loop utförs (används för att // animera den "körande" texten)/ * Utility Variables */PImage bg; // Bakgrundsbilden för närvarande / WEBB-background.png/ * * Knapprelaterade variabler * (knappar implementeras mycket grovt, begränsningsrutor lagras och grafik och text * ritas på bakgrundsbilden) dvs. variabler i rörliga knappar kommer inte att flytta knapparnas utseende */Button comm1; Knapp comm2; Knapp comm3; Knapp comm4; // Knapparna för att välja rätt serieportKnapp upp; Knapp till höger; Knapp kvar; Knapp ned; // Riktningsknapparna för att testa om roboten svararButton webServer; // Knappen för att starta webServer/ * * ställer in allt */void setup () {frameRate (5); // Saktar ner skissen lite så att det inte är lika belastande på systemet bg = loadImage ("WEBB-background.png"); // Läser in bakgrundsbilden (lagrad i skissmappen) storlek (700, 400); // Ställer in storleken på skissfönstret font = loadFont ("ArialMT-72.vlw"); // Läser in teckensnittet vi kommer att använda genom denna skiss commOptions = Serial.list (); // Undersöker seriella portar och får en lista över tillgängliga portar // (gör detta bara en gång hindrar roboten från att rycka varje gång den & aposs // seriell port undersöks) defineButtons (); // Definierar gränsrutorna för varje knappbakgrund (bg); // Målar bakgrundsbilden (denna bild har all knappgrafik på sig)}/ * Skisserna huvudslinga */void draw () {if (cycleCount == 0) {//- call draw routines drawCommBox (); // Ritar emelementen i Comm Box (ruta 1) drawTestBox (); // Ritar alla element i testboxen (ruta 2) drawWebServerBox (); // Ritar alla element i WebServer-rutan (ruta 3)} //- arbetsrutiner för anrop av pollWebServer (); // Frågar webbservern för att se om några förfrågningar har kommit in via nätverket} // ------------------------------ ----------------------------------------------//Början av rita rutiner (dela upp bara för att göra koden snyggare att läsa)/ * * Rita uppdateringsrutin (utförs varje cykel) för objekt i comm -rutan (ruta 1) */void drawCommBox () {fill (0, 0, 0); // Ställ fyllningen till svart textFont (typsnitt, 15); // Ställ in teckensnittet på rätt storlek för (int i = 0; i 0) {running = running + ".";} // antalet punkter är baserat på cycleCount if ((cycleCount /1)> 1) { running = running + ".";} if ((cycleCount / 1)> 2) {running = running + ".";} if ((cycleCount / 1)> 3) {cycleCount = 0;} text (running, 520, 210); } cycleCount ++; // Varje gång genom cycleCount ökas med en} // Slutet av Draw-rutiner // ------------------------------- ------------------------------ // ------------------ ------------------------------------------- // Start av servicerutiner/ * * mousePressed kallas varje gång musen trycks ned detta * kontrollerar om musen är inne i någon av knappbegränsningsrutorna * och om det är lämplig rutin kallas */void mousePressed () {if (comm1.pressed ()) { updateSerialPort (0);} // Ändringar i comm -porten vid index 0 i Serial.list () annars om (comm2.pressed ()) {updateSerialPort (1);} // Ändringar i comm -porten vid index 1 i Serial.list () annars om (comm3.pressed ()) {updateSerialPort (2);} // Ändringar i comm -porten vid index 2 i Serial.list () annars om (comm4.pressed ()) {updateSerialPort (3);} // Ändringar av kommu -porten vid index 3 i Serial.list () annars om (upp.pressad ()) {sendRobotCommand ("F", 5);} // Skickar ett kommando för att flytta roboten framåt för 0,5 sekunder annars om (left.pressed ()) {sendRobotCommand ("L", 5);} / /Skickar ett kommando för att flytta roboten vänster i 0,5 sekunder annars om (höger.tryckt ()) {sendRobotCommand ("R", 5);} // Skickar ett kommando för att flytta roboten Höger i 0,5 sekunder annars om (nedåt. tryckt ()) {sendRobotCommand ("B", 5);} // Skickar ett kommando för att flytta roboten bakåt i 0,5 sekunder annars om (webServer.pressed ()) {startWebServer ();} // Startar webServer cycleCount = 0; bakgrund (bg); // Målar om bakgrundsbilden (denna bild har all knappgrafik på sig) draw ();}/ * * Kallas en gång efter en körning kontrollerar den servern om det finns några väntande anslutningar * om det finns en väntande anslutning som den drar ut begäran och skickar den till parseRequest (String) * rutinen för att ta bort extra text. Detta skickas sedan till interpretRequest (String) -rutinen för att * ringa in lämplig åtgärdsrutin (dvs. skicka instruktioner till roboten).* * En begäran skickas genom att ange datorns adress och port i en webbläsare * För lokal maskin "https://127.0.0.1:12345/request?command=F&param1=100" * * Exempelförfrågan: * Hämta/begär? command = F & param1 = 100 HTTP/1.1 * User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, som Gecko) * Accept: * // * * Accept-Language: en-US, sv * Accept-Charset: ISO-8859-1, *, utf-8 * Accept-Encoding: gzip, deflate, bzip2 * Host: 127.0.0.1:12345 * Connection: Keep-Alive * * Exempel Svar (för behandlad begäran) * HTTP/1.1 200 OK * Anslutning: stäng * Innehållstyp: text/html * * kommando: F param1: 100 */void pollWebServer () {if (wServer! = null) {// If webServer kör klientförfrågan = wServer.available (); // Ladda nästa klient i raden i // servern (null om inga förfrågningar väntar) om (begäran! = Null) {// om det finns en begäran process den String fullRequest = request.readString (); // Lagra begärans innehåll som en sträng String ip = request.ip (); // Lagra klientens ip -adress som en sträng String requestString = parseRequest (fullRequest.toUpperCase ()); // Ta bort all extra // information och lämna endast förfrågningssträngen (text efter GET) // (flyttar till versaler för att göra strängtestning enklare) om (requestString.indexOf ("REQUEST?")! = -1) { // Kontrollerar om förfrågan har "BEGÄRAN?" Strängsvar = interpretRequest (requestString); // Skickar begäran till begäran tolk request.write ("HTTP/1.1 200 OK / nConnection: close / nContent-Type: text/html / n / n" + svar); // Skickar svaret till 200 för att säga att begäran // hanterades och "svar" -strängen som svaret wServer.disconnect (begäran); // Kopplar bort klienten} annars if (requestString.indexOf ("CONTROLPAGE")! = -1) {// Om begäran gäller kontrollwebbsidan String webPageArray = loadStrings ("WEBB -ControlPage.html"); // Läser in kontrollwebbsidan från / data / WEBB-ControlPage.html // (laddas som en rad rader) String webPage = ""; // För att göra redigeringen enklare har webbsidan lämnats med // radbrytningar så att detta för loop avgränsar dessa rader för (int i = 0; i portIndex) {// om den passerade portIndex är ett giltigt index i Serial.list () // (dvs. inte alternativ tre i en lista med två) serialPortIndex = portIndex; // ställ in serialPortIndex -variabeln till det nya serialportindexet // (detta används för att visa pricken bredvid den aktiva porten)} if (serialPortIndex! = -1) {// kontrollera att en port har valts någon gång tidigare om (serialPort! = null) {serialPort.stop ();} // om en seriell port redan används stoppa den innan du läser in en ny serialPort = ny Serial (detta, Serial.list () [serialPortIndex], 9600); // Skapa ett nytt serieobjekt för att kommunicera med Arduino 9600 Baud}}/ * * Tar en förfrågningssträng (ex: "request? Command = F & param1 = 100") och tar bort kommandot * och param1 och skickar det till arduino (lägga till extra parametrar eller kommandon som inte är arduino skulle göras här) */String interpretRequest (String requestString) {String returnValue = "OK"; // Förbereder en returnValue -variabel String -kommando; // Nästa tre rader extraherar värdet efter "command =" // (den extra raden är om kommandoparametern är i // slutet av begäran och inte följt av en & 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; // Nästa tre rader extraherar värdet efter" param1 = "// (den extra raden är om kommandoparametern är i // slutet av begäran och inte följt av en & 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); // Förvandlar param1 -strängen till en heltal sendRobotCommand (kommando, param1); // Skickar kommandot till rutinen som skickar det till Arduino returnValue = "command:" + command + "param1:" + param1; // för tillfället bara det analyserade kommandot men skickar // som html så att formatering kan inkluderas return returnValue;}/ * * Tar ett kommando (för närvarande en bokstav) och en parameter (en byte 0-255) och skickar det till arduino * som lyssnar och återkommer * Kommandon som nu stöds * F - */void sendRobotCommand (String -kommando, int param1) {println ("command:" + command + "time:" + param1); String checkString = "AAA"; if (serialPort! = null) {serialPort.write (checkString + kommando); serialPort.write (byte (param1)); }} // Slutet av installationen/inte särskilt vanligt kallade rutiner // ----------------------------------- ---------------------------------------------------------- // Exempelknapp och RectButton-kod från processing.org-exempel med några ändringar // gjorda mest för att förenkla och ta bort animering av rullning // https://processing.org/learning/topics/buttons.html (2008-09-23) klass Knapp {int x, y; int bredd, höjd; Knapp (int ix, int iy, int iwidth, int iheight) {x = ix; y = iy; bredd = iwidth; höjd = höjd; } booleskt intryckt () {if (overRect ()) {return true; } annars {return false;}} boolean overRect () {if (mouseX> = x && mouseX = y && mouseY <= y+height) {return true; } annat {return false; }}}

Steg 5: Programvara - (webbsida)

Programvara - (webbsida)
Programvara - (webbsida)
Programvara - (webbsida)
Programvara - (webbsida)
Programvara - (webbsida)
Programvara - (webbsida)

Vi är nästan färdiga, allt som återstår är att prata med din robot. Att prata: (via ett lokalt nätverk -på windows-)

  • Upptäck den lokala ip -adressen för den bärbara datorn. För att göra detta, gå till "Start / Program / Accesories / Command Prompt" och när terminalfönstret öppnas skriver du "ipconfig". Skriv ner "IP -adress" och gå till en annan dator i ditt lokala nätverk.
  • Öppna en webbläsare, skriv "https:// (robot dator ip): 12345/ControlPage.html
  • Kontrollwebbsidan ska laddas, i rutan "IP -adress" skriver du robotdatorerna ip.
  • Börja kontrollera din robot.

Att få prata: (över internet) Nu när du har det som fungerar lokalt får du det att prata över internet bara några korta steg bort.

  • (svåraste steget) Konfigurera portvidarebefordran - Din dator måste lyssna på internet snarare än bara det lokala nätverket. För att göra detta måste du berätta för din router att vidarebefordra vissa förfrågningar till datorn som styr roboten. Detta är lite komplext och går långt utanför ramen för denna instruerbara. Men om du besöker PortForward.com kommer de att ge dig allt du behöver veta om att konfigurera din router (du måste vidarebefordra port 12345 till din robot -bärbara dator)
  • Upptäck sedan din internet -IP (besök WhatIsMyIP.com)
  • Slutligen starta skype och skapa ett videosamtal och få vem du än pratar med att besöka "https:// (internet IP): 12345/ControlPage.html"
  • Skriv in internet -IP -rutan i rutan "IP -adress" på kontrollwebbsidan och din Web Connected Robot körs på avstånd.

Steg 6: Avslutad

Färdiga
Färdiga

Det är det. Jag hoppas att du har roligt med att köra din robot långt ifrån. Om du har några problem med programvaran eller hårdvaran kan du lämna en kommentar så ska jag försöka hjälpa dig. Om du vill kolla in mer snygga projekt kan du besöka: oomlout.com

Rekommenderad: