Innholdsfortegnelse:

Lag en nettilkoblet robot (for omtrent $ 500) (ved hjelp av en Arduino og Netbook): 6 trinn (med bilder)
Lag en nettilkoblet robot (for omtrent $ 500) (ved hjelp av en Arduino og Netbook): 6 trinn (med bilder)

Video: Lag en nettilkoblet robot (for omtrent $ 500) (ved hjelp av en Arduino og Netbook): 6 trinn (med bilder)

Video: Lag en nettilkoblet robot (for omtrent $ 500) (ved hjelp av en Arduino og Netbook): 6 trinn (med bilder)
Video: Lag en lavalampe 2024, Juli
Anonim
Lag en nettilkoblet robot (for omtrent $ 500) (ved hjelp av en Arduino og Netbook)
Lag en nettilkoblet robot (for omtrent $ 500) (ved hjelp av en Arduino og Netbook)
Lag en nettilkoblet robot (for omtrent $ 500) (ved hjelp av en Arduino og Netbook)
Lag en nettilkoblet robot (for omtrent $ 500) (ved hjelp av en Arduino og Netbook)
Lag en nettilkoblet robot (for omtrent $ 500) (ved hjelp av en Arduino og Netbook)
Lag en nettilkoblet robot (for omtrent $ 500) (ved hjelp av en Arduino og Netbook)

Denne instruksen viser deg hvordan du bygger din egen nettkoblede robot (ved hjelp av en Arduino mikrokontroller og Asus eee pc). Hvorfor skulle du ønske deg en nettkoblet robot? Å leke med selvfølgelig. Kjør roboten din fra hele rommet eller fra hele landet, ved å bruke ingenting mer enn Skype og en nettleser (ingenting å installere på den kontrollerende datamaskinen). Etter det? Grav inn i programvaren og tilpass den slik du vil, legg til en GPS slik at du kan se hvor du kjører på et kart, legge til temperatursensorer for å kartlegge temperaturgradienter i huset ditt, eller ekkoloddsensorer for å legge til kontroller på det du er på nettet sjåfører kan og kan ikke støte på. Funksjoner:

  • Billig - (~ $ 500 hvis du kjøper alle deler nye og betydelig billigere hvis du graver rundt i reservedelsboksen din)
  • Når du først er i gang med å kontrollere roboten, trenger du bare en nettleser - (og Skype hvis du vil se hvor du kjører)
  • Åpen kildekode og lett tilpassbar - (bruker en Arduino mikrokontroller, behandling for webserveren og all programvare kan kjøres på Linux (all koden er også sterkt kommentert for å gjøre det enkelt å hoppe inn og endre ting))
  • Modulær design (ikke et helt integrert system, hvis du vil bruke en annen videokonferansetjeneste, er det ingen grunn til bekymring, eller hvis du har et grunnleggende stempel i stedet for en Arduino bare et lite stykke kode og legger det inn)

Her er en rask video av min nettkoblede robot som blir kjørt ut av kjøkkenet.

Trinn 1: Deler og verktøy

Deler og verktøy
Deler og verktøy

Bare noen få deler kreves: Robot: Arduino Controlled Servo Robot - (SERB) ($ 175 @ oomlout.com) eller (lag din egen)

En åpen kildekode-robot som bruker en Arduino mikrokontroller som hjernen

(hvilken som helst dual servo robotplattform med en arduino kan brukes (alternativ 1) (send meg en melding hvis du oppdager andre alternativer) Datamaskin: Asus eee PC 4G ($ 280) (@Best Buy)

En liten billig bærbar datamaskin som er perfekt for dette formålet

(hvilken som helst bærbar datamaskin (eller stasjonær datamaskin hvis du vil kjøre med et akkord) som kan kjøre Behandlingsskisser kan brukes) Laptop -skrivebord: Laserskåret akryl ($ 25 (@ oomlout)) eller (bygg ditt eget trinn 3)

Noen få ekstra akrylstykker som boltes på en (SERB) for å gi den et skrivebord for den bærbare datamaskinen å sitte på

Nuts and Bols: (tilgjengelig hjemme depot)

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

Trinn 2: Skjærebiter og montering

Skjærebiter og montering
Skjærebiter og montering
Skjærebiter og montering
Skjærebiter og montering
Skjærebiter og montering
Skjærebiter og montering
Skjærebiter og montering
Skjærebiter og montering

Det er tre alternativer for å få brikker til det bærbare skrivebordet. Skjærealternativ 1: (Kjøp fra oomlout.com)

laserskårede skrivebordstykker og nødvendig maskinvare er tilgjengelig fra oomlout for $ 25 (her)

Alternativ 2: (Skjære på din egen laserskærer eller Ponoko.com)

  • Last ned filen nedenfor (03-WEBB-akryldeler. Cdr eller 03-WEBB-akryldeler (Ponoko P2).eps)
  • Skjær dem fra 3 mm (1/8 ") akryl

Alternativ 3: (Rullesag)

  • Last ned rullesagmønsteret nedenfra (03-WEBB-ScrollSaw Pattern (A4).pdf (for papir i A4-størrelse) eller 03-WEBB-ScrollSaw Pattern (letter).pdf (for papir i stor størrelse))
  • Dobbeltsjekk at den ikke har blitt skalert ved utskrift (ved å måle de trykte linjaler)
  • Lim et stykke 3 mm (1/8 ") akryl og skjær bitene ut.

Montering: Last ned monteringsguiden (04-WEBB-monteringsguide.pdf) nedenfor og sett sammen den bærbare datamaskinen.

Trinn 3: Programvare - (Arduino)

Programvare - (Arduino)
Programvare - (Arduino)

For de som er nye på Arduino, sjekk ut den flotte startguiden på Arduino.cc Først av programvaren som kjører på Arduino. Det er et veldig enkelt program, det Arduino gjør er å overvåke den serielle porten for data. Det den leter etter er en samtale på 5 byte.

  • Byte 1-3 (Sjekk byte "AAA")
  • Byte 4 -kommando (forteller arduinoen hva du skal gjøre) (Støttede kommandoer 'F' - Forward, 'B' - Backward, 'L' - Left, 'R' - Right, 'S' - Speed, 'X' - SetSpeedLeft, 'Y' - SetSpeedRight, 'C' - Stop)
  • Byte 5 parameter - For flyttekommandoene blir dette tolket som et tidsintervall (parameter * 100 ms), og for hastighetskommandoene en prosentandel fra 0-100

Koden kommenteres grundig og gitt dette rammeverket bør det være enkelt å legge til flere kommandoer.

  • Last ned den vedlagte zip -filen. (05-WEBB-Arduino Code.zip)
  • Pakk ut til Arduino Sketch -katalogen. (standard: Mine dokumenter / Arduino)
  • Åpne arduino -utviklingsmiljøet og last opp til Arduino.

For å kopiere og lime inn

  • Kopier koden nedenfra.
  • Lim inn i Arduino utviklingsmiljø.
  • Last opp til Arduino.

Vedlegg: Arduino -programmet

/ * * Arduino Controlled Web Connected Robot (WEBB) - Seriell vert * For mer informasjon besøk: https://www.oomlout.com/serb * * Atferd: Arduino lytter til sin serielle port for en kommando * i format 254, 88, 88, (KOMMANDO), (TID) * Støttede kommandoer - & aposF & apos - 70 - Forover * & aposB & apos - 66 - Bakover * & aposL & apos - 76 - Venstre * & aposR & apos - 82 - Høyre * & aposS & apos - 83 - Hastighet * & aposX & apos - 88 - SetSpeedL * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * Tidsstøttede tider - 0 - 255 (0 til 25,5 sekunder) verdi * 100 millisekunder * sp * Kabling: Høyre servosignal - pin 9 * Venstre servosignal - pin 10 * * Lisens: Dette verket er lisensiert under Creative Commons * Attribution-Share Alike 3.0 Unported License. For å * se en kopi av denne lisensen, besøk * https://creativecommons.org/licenses/by-sa/3.0/ * eller send et brev til Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * USA. * */// ---------------------------------------------------- ---------------------------- // START AV ARDUINO SERIAL SERVER PREAMBEL // Definere konstanter som tilsvarer hver kommando (også ascii-kodenummeret) #define FORWARD 70 // F#definere BACKWARD 66 // B#definere LEFT 76 // L#definere RIGHT 82 // R#definere SETSPEED 83 // S#definere STOP 67 // C#definere SETSPEEDLEFT 88 // X #define SETSPEEDRIGHT 89 // Y/ *De tre kontrollbytes (brukes for å hindre roboten i å svare på tilfeldige serielle *data) for øyeblikket "AAA" */#definerer checkByte1 65 // "A" #define checkByte2 65 // "A "#define checkByte3 65 //" A "// -------------------------------------- ------------------------------------ // START AV ARDUINO KONTROLLERT SERVO ROBOT (SERB) PREAMBEL#inkluderer #define LEFTSERVOPIN 10 // Pinnen venstre servo er koblet til#definere RIGHTSERVOPIN 9 // Pinnen til høyre servo er koblet tilServo leftServo; Servo rightServo; int leftSpeed = 50; // holder hastigheten til robotene leftServo // en prosentandel mellom 0 og 100int rightSpeed = 100; // holder robotens hastighet til høyre Servo // en prosentandel mellom 0 og 100 // SLUTT PÅ ARDUINO-KONTROLLERT SERVO ROBOT (SERB) PREAMBEL // ------------------- -------------------------------------------------- ----- // Får alt i gang og oppretter ugyldig () {Serial.begin (9600); // Starter den serielle porten serbSetup (); // angir tilstanden til alle nødvendige // pins og legger til servoer i skissen} // Hovedprogrammet loopvoid loop () {serbPollSerialPort (); // ser kontinuerlig til den serielle porten // hvis det er data den behandler den} // ------------------------------ ----------------------------------------- // START AV ARDUINO SERIAL SERVER ROUTINES/ * * Behandler kommandoer levert til arduino & aposs seriell port */void serbPollSerialPort () {int dta; // variabel for å holde seriell byte hvis (Serial.available ()> = 5) {// hvis 5 byte er i bufferen (lengde pf en full forespørsel) dta = Serial.read (); if (dta = checkByte1) {// Sjekker etter første sjekkbyte dta = Serial.read (); if (dta = checkByte2) {// Sjekker etter andre sjekkbyte dta = Serial.read (); if (dta = checkByte3) {// Sjekker etter tredje kontrollbyte int kommando = Serial.read (); // Fjerde byte er kommandoen int param1 = Serial.read (); // Femte byte er param1 interpretCommand (kommando, param1); // sender den analyserte forespørselen til den & aposs handler}}}}}/ * * Tar kommandoen og parameteren og sender den til roboten */void interpretCommand (int command, int param1) {if (command == FORWARD) {goForward (); forsinkelse (param1 * 100); goStop ();} // hvis fremover annet if (command == BACKWARD) {goBackward (); forsinkelse (param1 * 100); goStop ();} // hvis bakover annet hvis (kommando == LEFT) {goLeft (); forsinkelse (param1 * 100); goStop ();} // hvis venstre igjen if (command == RIGHT) {goRight (); forsinkelse (param1 * 100); goStop ();} // hvis rett annet hvis (kommando == SETSPEED) {setSpeed (param1);} // hvis du angir hastighet annet hvis (kommando == STOPP) {goStop ();} // hvis stopp annet hvis (kommando == SETSPEEDLEFT) {setSpeedLeft (param1);} // hvis du angir venstre hastighet ellers hvis (kommando == SETSPEEDRIGHT) {setSpeedRight (param1);} // hvis du angir riktig hastighet ellers {// hvis ukjent kommando gjør litt shimmy gå til venstre(); forsinkelse (150); gå til høyre(); forsinkelse (150); goStop (); }} // ---------------------------------------------- -------------------------- // START AV ARDUINO CONTROLLED SERVO ROBOT (SERB) ROUTINES/ * * setter opp din arduino for å adressere SERBEN din med de inkluderte rutinene*/void serbSetup () {setSpeed (leftSpeed); pinMode (LEFTSERVOPIN, OUTPUT); // setter venstre servosignalpinne // til utgang pinMode (RIGHTSERVOPIN, OUTPUT); // angir høyre servosignalpinne // for å sende ut leftServo.attach (LEFTSERVOPIN); // fester venstre servo rightServo.attach (RIGHTSERVOPIN); // fester høyre servo goStop ();}/ * * angir robotens hastighet mellom 0- (stoppet) og 100- (full hastighet) * MERK: hastigheten vil ikke endre gjeldende hastighet, du må endre hastigheten * ring deretter en av gå -metodene før endringer skjer.*/ void setSpeed (int newSpeed) {setSpeedLeft (newSpeed); // setter venstre hastighet setSpeedRight (newSpeed); // setter riktig hastighet}/ * * Angir hastigheten på venstre hjul */void setSpeedLeft (int newSpeed) {if (newSpeed> = 100) {newSpeed = 100;} // hvis hastigheten er større enn 100 // gjør det 100 if (newSpeed = 100) {newSpeed = 100;} // hvis hastigheten er større enn 100 // gjør den til 100 if (newSpeed <= 0) {newSpeed = 0;} // hvis hastigheten er mindre enn 0 make // det 0 rightSpeed = newSpeed * 0,9; // skalerer hastigheten for å være}/ * * sender roboten fremover */void goForward () {leftServo.write (90 + leftSpeed); rightServo.write (90 - rightSpeed);} / * * sender roboten bakover * /void goBackward () {leftServo.write (90 - leftSpeed); rightServo.write (90 + rightSpeed);} / * * sender roboten til høyre * /void goRight () {leftServo.write (90 + leftSpeed); rightServo.write (90 + rightSpeed);}/ * * sender roboten til venstre */void goLeft () {leftServo.write (90 - leftSpeed); rightServo.write (90 - rightSpeed);}/ * * stopper roboten */void goStop () {leftServo.write (90); rightServo.write (90);} // END OF ARDUINO CONTROLLED SERVO ROBOT (SERB) ROUTINES // ---------------------------- -----------------------------------------------

Trinn 4: Programvare - Robot bærbar datamaskin (WebServer)

Programvare - Robot bærbar datamaskin (WebServer)
Programvare - Robot bærbar datamaskin (WebServer)

(Processing er et åpen kildekode programmeringsspråk og miljø som er superenkelt å komme i gang med. For mer informasjon, gå til Processing) Programvaren som kjører på robot -bærbar datamaskin er også ganske enkel. Det er en ganske rudimentær webserver (lytter etter websideforespørsler fra en nettleser), et lite brukergrensesnitt (for å sette det opp) og muligheter for å overføre kommandoene som er mottatt fra webserveren til Arduino. Slik installeres raskt: (på vinduer)

  • Last ned zip-filen nedenfor (06-WEBB-Processing Webserver (windows exe).zip)
  • Pakk ut den og kjør.exe -filen (_WEBB_WebServer_RobotComputer.exe)

Slik redigerer du under behandling:

  • Last ned zip-filen nedenfor (06-WEBB-prosessering webserver (kildefiler).zip)
  • Pakk ut hvor som helst på datamaskinen.
  • Åpne behandlingsmiljøet og åpne (_WEBB_WebServer_RobotComputer.pde)

Å teste:

  • Kjør programmet.
  • I boks nr. 1 vil det være en liste over tilgjengelige kommaporter på datamaskinen din (klikk på den som Arduino er koblet til. (Roboten din rykker et par ganger når datamaskinen kobles til, og en cyan prikk vises ved siden av den valgte komm port)
  • I boks nr. 2 tester du om Arduino er tilkoblet. Klikk på en av pilene, og forhåpentligvis vil roboten bevege seg i klikket retning i et halvt sekund.
  • I boks 3 klikker du på "Start" -knappen for å starte webserveren.
  • Åpne en nettleser (på Robot -bærbar datamaskin) og besøk https://127.0.0.1:12345/ControlPage.html (forhåpentligvis vil kontrollsiden med knapper på den vises) -Detaljer om hvordan du bruker denne siden i neste trinn -

Hva skjer:

  • Webserveren lytter til port 12345 for http -forespørsler (det som sendes når du skriver inn en nettadresse)
  • Det er to typer forespørsler den reagerer på.

1. Den lytter etter "ControlPage.html" og sender kontrollens webside 2. Den lytter etter forespørsler om skjemaet "/request? Command = F & param1 = 100" (disse kommandoene blir analysert og sendt til Arduino (dette eksemplet vil resultere i i roboten som går fremover i 10 sekunder) Tillegg: (Koden for WebServer)

/ * * Arduino Controlled Web Connected Robot (WEBB) - Webserver * For mer informasjon besøk: https://www.oomlout.com/serb * * Atferd: Programmet lytter etter http (nettside) forespørsler i skjemaet * "/forespørsel ? command = F & param1 = 100 "og sender dem deretter til * Arduino * Støttede kommandoer - & apos F & apos - 70 - Forover * & aposB & apos - 66 - Bakover * & aposL & apos - 76 - Venstre * & aposR & apos - 82 - Høyre * & aposS & apos - 83 - Hastighet * & aposX & apos - 88 - SetSpeedLeft * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * param1 & aposs - 0 - 255 (0 til 25,5 sekunder) verdi * 100 millisekunder * * betjener også kontrollnettstedet til nettleseren hvis du ber om ControlPage.html * * Drift: 1. Klikk på Comm -porten Arduino er koblet til * 2. Bruk testknappene for å se om arduinoen din lytter * (vil bevege seg i den retningen du klikker i et halvt sekund) * 3. Klikk Start og webserveren din vil lytte etter forespørsler * * * Lisens: Dette verket er lisensiert under Creative Commons * Attribu tion-Share Alike 3.0 Unported License. For å * se en kopi av denne lisensen, besøk * https://creativecommons.org/licenses/by-sa/3.0/ * eller send et brev til Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * USA. * */import processing.serial. *; // importer det serielle biblioteket for å bruke Serial (for å snakke med Arduino) import processing.net.*; // importer nettbiblioteket for å bruke Server (for å snakke med internett)/ * Serial Port -relaterte variabler */int serialPortIndex = -1; // indeksen til den serielle porten vi bruker i Serial.list () listString commOptions; // En variabel for å lagre Serial.list () i, så det er ikke nødvendig å polle // de serielle portene hver gang vi ønsker å refere den (polling forårsaker et // hopp i arduino -servoene) Serial serialPort; // Gjør den serielle porten adresserbar i hele denne skissen/ * Graphic and Rendering Related Variables */PFont font; // gjør skriften offentlig, så den trenger bare å lastes inn én gang (Arial-72)/ * Nettverksrelaterte variabler */Server wServer; // Serveren som håndterer web requestint port = 12345; // Porten serveren lytter til syklus cycleCount = 0; // Teller antall ganger draw loop utfører (brukes til // animere den "kjørende" teksten)/ * Utility Variables */PImage bg; // Bakgrunnsbildet for øyeblikket / WEBB-bakgrunn.png/ * * Knapprelaterte variabler * (knapper implementeres veldig grovt, avgrensningsbokser lagres og grafikk og tekst * tegnes på bakgrunnsbildet) dvs. variabler i bevegelige knapper vil ikke flytte utseende på knapper */Button comm1; Knapp komm2; Knapp comm3; Knapp komm4; // Knappene for å velge riktig serieportKnapp opp; Knapp til høyre; Knapp igjen; Knapp ned; // Retningsknappene for å teste om roboten reagererButton webServer; // Knappen for å starte webServer/ * * setter alt opp */void setup () {frameRate (5); // Senker skissen litt, slik at det ikke er like belastende for systemet bg = loadImage ("WEBB-background.png"); // Laster bakgrunnsbildet (lagret i skissemappen) størrelse (700, 400); // Angir størrelsen på skissevinduets font = loadFont ("ArialMT-72.vlw"); // Laster inn skriften vi skal bruke gjennom denne skissen commOptions = Serial.list (); // Avspørser serielle porter og får en liste over tilgjengelige porter // (dette bare gjør at roboten ikke ryker hver gang den & aposs // seriell port blir spurt) defineButtons (); // Definerer rammene for hver knappebakgrunn (bg); // Maler bakgrunnsbildet (dette bildet har all knappegrafikk på seg)}/ * Skissene hovedsløyfe */void draw () {if (cycleCount == 0) {//- call draw routines drawCommBox (); // Tegner emellementene i Comm -boksen (boks 1) drawTestBox (); // Tegner alle elementene i testboksen (boks 2) drawWebServerBox (); // Tegner alle elementene i WebServer-boksen (boks 3)} //- kaller arbeidsrutiner pollWebServer (); // Avstemmer webserveren for å se om det har kommet noen forespørsler via nettverket} // ------------------------------ ---------------------------------------------- // Start av tegne rutiner (del opp bare for å gjøre koden hyggeligere å lese)/ * * Oppdateringsrutinen (utført hver syklus) for elementer i kommeboksen (boks 1) */void drawCommBox () {fill (0, 0, 0); // Sett fyllet til svart textFont (font, 15); // Sett skriften til riktig størrelse for (int i = 0; i 0) {running = running + ".";} // antall prikker er basert 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 ++; // Hver gang gjennom cycleCount økes med én} // Slutt på tegningsrutiner // ------------------------------- ------------------------------ // ------------------ ------------------------------------------- // Start av servicerutiner/ * * mousePressed kalles hver gang musen trykkes ned dette * sjekker om musen er inne i noen av knappene som begrenser boksene * og om det er riktig rutine kalles */void mousePressed () {if (comm1.pressed ()) { updateSerialPort (0);} // Endringer i comm -porten ved indeks 0 i Serial.list () ellers hvis (comm2.pressed ()) {updateSerialPort (1);} // Endringer i comm -porten ved indeks 1 i Serial.list () annet hvis (comm3.pressed ()) {updateSerialPort (2);} // Endringer i kommaporten ved indeks 2 i Serial.list () ellers hvis (comm4.pressed ()) {updateSerialPort (3);} // Endringer i kommandoporten ved indeks 3 i Serial.list () ellers hvis (opp.presset ()) {sendRobotCommand ("F", 5);} // Sender en kommando for å flytte roboten fremover for 0,5 sekunder annet hvis (venstre.presset ()) {sendRobotCommand ("L", 5);} / /Sender en kommando for å flytte roboten til venstre i 0,5 sekunder ellers hvis (høyre.presset ()) {sendRobotCommand ("R", 5);} // Sender en kommando for å flytte roboten Høyre i 0,5 sekunder ellers hvis (ned. trykket ()) {sendRobotCommand ("B", 5);} // Sender en kommando for å flytte roboten bakover i 0,5 sekunder ellers hvis (webServer.pressed ()) {startWebServer ();} // Starter webServer cycleCount = 0; bakgrunn (bg); // Ommaler bakgrunnsbildet (dette bildet har all knappegrafikk på det) tegner ();}/ * * Kalles en gang en utførelse, det sjekker serveren for å se om det er noen ventende tilkoblinger * hvis det er en ventende tilkobling det trekker ut forespørselen og sender den til parseRequest (String) * -rutinen for å fjerne ekstra tekst. Dette blir deretter sendt til interpretRequest (String) -rutinen for å * kalle den riktige handlingsrutinen (dvs. sende instruksjoner til roboten).* * En forespørsel sendes ved å skrive inn datamaskinens adresse og port i en nettleser * For lokal maskin "https://127.0.0.1:12345/request?command=F&param1=100" * * Eksempelforespørsel: * GET/request? command = F & param1 = 100 HTTP/1.1 * User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; no-US) AppleWebKit/525.19 (KHTML, som Gecko) * Godta: * // * * Accept-Language: no-US, no * Accept-Charset: ISO-8859-1, *, utf-8 * Accept-Encoding: gzip, deflate, bzip2 * Host: 127.0.0.1:12345 * Connection: Keep-Alive * * Eksempel Svar (for behandlet forespørsel) * HTTP/1.1 200 OK * Tilkobling: lukk * Innholdstype: tekst/html * * kommando: F param1: 100 */void pollWebServer () {if (wServer! = null) {// If webServer kjører klientforespørsel = wServer.available (); // Last den neste klienten på linjen i // serveren (null hvis ingen forespørsler venter) if (forespørsel! = Null) {// hvis det er en forespørsel prosess den String fullRequest = request.readString (); // Lagre forespørselsinnholdet som en streng String ip = request.ip (); // Lagre klientens ip -adresse som en streng String requestString = parseRequest (fullRequest.toUpperCase ()); // Fjern all ekstra // informasjon som bare etterlater forespørselsstrengen (tekst etter GET) // (skifter til store bokstaver for å gjøre strengtesting enklere) hvis (requestString.indexOf ("REQUEST?")! = -1) { // Kontrollerer om forespørselen har "FORESPØRSEL?" String svar = interpretRequest (requestString); // Sender forespørselen til forespørselstolkeren request.write ("HTTP/1.1 200 OK / nTilkobling: lukk / nInnholdstype: tekst/html / n / n" + svar); // Sender svaret til 200 for å si at forespørselen ble // håndtert og "svar" -strengen som svaret wServer.disconnect (forespørsel); // Koble fra klienten} else if (requestString.indexOf ("CONTROLPAGE")! = -1) {// Hvis forespørselen er for kontrollnettstedet String webPageArray = loadStrings ("WEBB -ControlPage.html"); // Laster inn kontrollwebsiden fra / data / WEBB-ControlPage.html // (lastet inn som en rekke linjer) String webPage = ""; // For å gjøre redigeringen enklere har nettsiden blitt igjen med // linjeskift, så dette for sløyfe strekker disse linjene ut for (int i = 0; i portIndex) {// hvis bestått portIndex er en gyldig indeks i Serial.list () // (dvs. ikke alternativ tre i en liste over to) serialPortIndex = portIndex; // sett seriellPortIndex -variabelen til den nye serieportindeksen // (dette brukes til å vise prikken ved siden av den aktive porten)} if (serialPortIndex! = -1) {// sjekk for å kontrollere at en port er valgt en gang tidligere hvis (serialPort! = null) {serialPort.stop ();} // hvis en seriell port allerede brukes, stopp den før du laster inn en ny serialPort = ny Serial (dette, Serial.list () [serialPortIndex], 9600); // Lag et nytt serieobjekt for å kommunisere med Arduino 9600 Baud}}/ * * Tar en forespørselsstreng (eks: "request? Command = F & param1 = 100") og fjerner kommandoen * og param1 og sender den til arduino (legge til ekstra parametere eller ikke -arduino -kommandoer vil bli utført her) */String interpretRequest (String requestString) {String returnValue = "OK"; // Forbereder en returnValue -variabel String -kommando; // De neste tre linjene trekker ut verdien etter "command =" // (den ekstra linjen er i tilfelle kommandoparameteren er i // slutten av forespørselen og ikke etterfulgt 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; // Neste tre linjer trekker ut verdien etter" param1 = "// (den ekstra linjen er i tilfelle kommandoparameteren er // på slutten av forespørselen og ikke etterfulgt 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); // Gjør param1 -strengen til en heltall sendRobotCommand (kommando, param1); // Sender kommandoen til rutinen som sender den til Arduino returnValue = "command:" + command + "param1:" + param1; // for øyeblikket bare den analyserte kommandoen, men sender // som html slik at formatering kan inkluderes return returnValue;}/ * * Tar en kommando (for tiden en bokstav) og en parameter (en byte 0-255) og sender den til arduino * som lytter og henter * Kommandoer som nå støttes * 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)); }} // Slutt på oppsett/ikke så ofte kalt rutiner // ----------------------------------- -------------------------------------------------- // Eksempelknapp og RectButton-kode fra processing.org-eksempelet med noen endringer // gjort hovedsakelig for å forenkle og fjerne roll over animasjon // https://processing.org/learning/topics/buttons.html (2008-09-23) klasse Knapp {int x, y; int bredde, høyde; Knapp (int ix, int iy, int iwidth, int iheight) {x = ix; y = iy; bredde = iwidth; høyde = høyde; } boolsk presset () {if (overRect ()) {return true; } annet {return false;}} boolsk overRect () {if (mouseX> = x && mouseX = y && mouseY <= y+height) {return true; } annet {return false; }}}

Trinn 5: Programvare - (webside)

Programvare - (webside)
Programvare - (webside)
Programvare - (webside)
Programvare - (webside)
Programvare - (webside)
Programvare - (webside)

Vi er nesten ferdige. Alt som er igjen er å snakke med roboten din. Slik snakker du: (over et lokalt nettverk -på vinduer-)

  • Oppdag den lokale ip -adressen til den bærbare datamaskinen. For å gjøre dette, gå til "Start / Programs / Accesories / Command Prompt", og når terminalvinduet åpnes, skriver du "ipconfig". Skriv ned "IP -adresse" og gå til en annen datamaskin på ditt lokale nettverk.
  • Åpne en nettleser, skriv "https:// (robot computer ip): 12345/ControlPage.html
  • Kontrollwebsiden skal lastes inn, i boksen "IP -adresse" skriver du inn robotdatamaskinene ip.
  • Begynn å kontrollere roboten din.

For å snakke: (over internett) Nå som du har det i bruk lokalt, får du det til å snakke over internett bare noen få skritt unna.

  • (det vanskeligste trinnet) Konfigurer portvideresending - Datamaskinen må lytte til internett i stedet for bare det lokale nettverket. For å gjøre dette må du be ruteren om å sende visse forespørsler videre til datamaskinen som styrer roboten. Dette er litt komplekst og går langt utenfor omfanget av denne instruksjonsboken. Men hvis du besøker PortForward.com vil de gi deg alt du trenger å vite om konfigurering av ruteren din (du må videresende port 12345 til robot -bærbar datamaskin)
  • Neste oppdag internett -IP -en din (besøk WhatIsMyIP.com)
  • Slutt til slutt med å sette opp en Skype -samtale for Skype, og få hvem du snakker med til å besøke "https:// (internett -IP): 12345/ControlPage.html"
  • Skriv inn internett -IP -en i "IP -adresse" -boksen på kontrollnettstedet, og din Web Connected Robot blir kjørt på avstand.

Trinn 6: Ferdig

Ferdig
Ferdig

Vel, det er det. Jeg håper du har det gøy med å kjøre roboten din langt unna. Hvis du har problemer med programvaren eller maskinvaren, er det bare å legge igjen en kommentar, så skal jeg prøve å hjelpe deg. Hvis du vil sjekke ut mer fine prosjekter, kan du besøke: oomlout.com

Anbefalt: