Spisu treści:
- Krok 1: Części i narzędzia
- Krok 2: Cięcie elementów i montaż
- Krok 3: Oprogramowanie - (Arduino)
- Krok 4: Oprogramowanie - laptop robota (serwer sieciowy)
- Krok 5: Oprogramowanie - (strona internetowa)
- Krok 6: Zakończono
Wideo: Stwórz robota podłączonego do sieci (za około 500 USD) (za pomocą Arduino i Netbooka): 6 kroków (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:34
Ta instrukcja pokaże Ci, jak zbudować własnego robota podłączonego do sieci (za pomocą mikrokontrolera Arduino i komputera Asus eee). Dlaczego chcesz mieć robota podłączonego do sieci? Oczywiście do zabawy. Prowadź swojego robota z drugiego końca pokoju lub z całego kraju, używając jedynie Skype'a i przeglądarki internetowej (nic do zainstalowania na komputerze sterującym). Po tym? Zagłęb się w oprogramowanie i dostosuj je tak, jak chcesz, dodaj GPS, aby móc obserwować, gdzie jedziesz na mapie, dodaj czujniki temperatury, aby mapować gradienty temperatury w domu, lub czujniki sonaru, aby dodać sterowanie tym, co masz w Internecie kierowcy mogą i nie mogą na nie wpaść. Cechy:
- Niedrogie - (~500 USD, jeśli kupisz wszystkie części nowe i znacznie tańsze, jeśli będziesz grzebać w swoim pojemniku na części)
- Po uruchomieniu i uruchomieniu sterowanie robotem wymaga tylko przeglądarki internetowej (i Skype, jeśli chcesz zobaczyć, gdzie jedziesz)
- Open Source i łatwo adaptowalny - (wykorzystuje mikrokontroler Arduino, przetwarzanie dla serwera WWW i całe oprogramowanie może być uruchamiane w systemie Linux (cały kod jest również mocno komentowany, aby ułatwić wskakiwanie i zmienianie rzeczy))
- Modułowa konstrukcja (nie jest to całkowicie zintegrowany system, jeśli chcesz korzystać z innej usługi wideokonferencji bez obaw lub jeśli masz pieczęć Basic zamiast Arduino, po prostu popraw mały fragment kodu i włóż go)
Oto krótki film przedstawiający mojego robota podłączonego do sieci, wyprowadzanego z kuchni.
Krok 1: Części i narzędzia
Wymagane jest tylko kilka części:Robot: Arduino Controlled Servo Robot - (SERB) (175 USD @ oomlout.com) lub (zrób własny)
Robot typu open source, który wykorzystuje mikrokontroler Arduino jako mózg
(Można użyć dowolnej platformy z podwójnym serwo robotem z arduino (opcja 1) (proszę o wiadomość, jeśli odkryjesz inne opcje) Komputer: Asus eee PC 4G (280 USD) (@Best Buy)
Niewielki, niedrogi laptop, który idealnie nadaje się do tego celu
(można użyć dowolnego laptopa (lub komputera stacjonarnego, jeśli chcesz biegać z akordem) zdolnego do uruchamiania szkiców przetwarzania) Biurko na laptopa: akryl wycinany laserowo (25 USD (@oomlout)) lub (zbuduj własny krok 3)
Kilka dodatkowych elementów akrylowych, które przykręca się do (SERB), aby uzyskać biurko do siedzenia laptopa
Nuts and Bols: (dostępne w depozycie)
- śruba 3mm x 10mm (x4)
- śruba 3mm x 15mm (x4)
- Nakrętka 3mm (x8)
Krok 2: Cięcie elementów i montaż
Istnieją trzy opcje zakupu elementów na biurko z laptopem. Opcja cięcia 1: (Zakupy od oomlout.com)
laserowo wycinane elementy biurka i niezbędny sprzęt są dostępne w oomlout za 25 USD (tutaj)
Opcja 2: (Cięcie na własnej wycinarce laserowej lub Ponoko.com)
- Pobierz plik poniżej (03-WEBB-Acrylic Parts.cdr lub 03-WEBB-Acrylic Parts (Ponoko P2).eps)
- Wytnij je z akrylu 3 mm (1/8")
Opcja 3: (piła przewijana)
- Pobierz wzór piły do przewijania poniżej (03-WEBB-ScrollSaw Pattern (A4).pdf (dla papieru o rozmiarze A4) lub 03-WEBB-ScrollSaw Pattern (letter).pdf (dla papieru o rozmiarze Letter))
- Dokładnie sprawdź, czy nie został wyskalowany podczas drukowania (mierząc wydrukowane linijki)
- Przyklej do kawałka akrylu 3mm (1/8") i wytnij kawałki.
Montaż: Pobierz poniżej instrukcję montażu (04-WEBB-Assembly Guide.pdf) i złóż biurko na laptopa.
Krok 3: Oprogramowanie - (Arduino)
Dla tych, którzy są nowicjuszami w Arduino, zapoznaj się ze świetnym przewodnikiem dla początkujących na Arduino.cc Najpierw zapoznaj się z oprogramowaniem działającym na Arduino. Jest to bardzo prosty program, Arduino monitoruje swój port szeregowy w poszukiwaniu danych. To, czego szuka, to konwersacja o długości 5 bajtów.
- Bajt 1-3 (sprawdź bajty „AAA”)
- Byte 4 Command (mówi arduino, co ma robić) (obsługiwane polecenia 'F' - Forward, 'B' - Backward, 'L' - Left, 'R' - Right, 'S' - Speed, 'X' - SetSpeedLeft, „Y” - SetSpeedRight, „C” - Stop)
- Bajt 5 Parametr - Dla poleceń ruchu jest to interpretowane jako przedział czasu (Parametr * 100 ms), a dla poleceń prędkości procent od 0-100
Kod jest dokładnie skomentowany i biorąc pod uwagę ten framework, dodanie dodatkowych poleceń powinno być łatwe. Do pobrania:
- Pobierz załączony plik zip. (05-WEBB-Arduino Code.zip)
- Rozpakuj do katalogu Arduino Sketch. (domyślnie: Moje dokumenty\Arduino)
- Otwórz środowisko programistyczne arduino i prześlij do Arduino.
Kopiowanie i wklejanie
- Skopiuj kod z dołu.
- Wklej do środowiska programistycznego Arduino.
- Prześlij do swojego Arduino.
Dodatek: Program Arduino
/* * Arduino Controlled Web Connected Robot (WEBB) - Serial Host * Więcej szczegółów na stronie: https://www.oomlout.com/serb * * Zachowanie: Arduino nasłuchuje na swoim porcie szeregowym polecenia * w formacie 254, 88, 88, (COMMAND), (CZAS) * Obsługiwane polecenia - &aposF&apos - 70 - Do przodu * &aposB&apos - 66 - Wstecz * &aposL&apos - 76 - W lewo * &aposR&apos - 82 - W prawo * &aposS&apos - 83 - Prędkość * &aposX&apos - 88 - UstawPrędkość w lewo * &aposY&apos - 89 - SetSpeedRight * &aposC&apos - 67 - Stop * Obsługiwane czasy - 0 - 255 (od 0 do 25,5 sekundy) wartość * 100 milisekund *sp * Okablowanie: Prawy sygnał serw - styk 9 * Lewy sygnał serw - styk 10 * * Licencja: Ta praca jest objęta licencją Creative Commons * Attribution-Share Alike 3.0 Unported License. Aby * wyświetlić kopię tej licencji, odwiedź * https://creativecommons.org/licenses/by-sa/3.0/ * lub wyślij list do Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * Stany Zjednoczone. * */ //---------------------------------------------- ----------------------------//POCZĄTEK PREAMBUŁY SERWERA SZEREGOWEGO ARDUINO//Definiowanie stałych odpowiadających każdemu poleceniu (także numer kodu ascii) #define FORWARD 70 //F#define WSTECZ 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/*Trzy bajty kontrolne (używane do powstrzymania robota przed reagowaniem na losowe *dane szeregowe) obecnie "AAA" */#define checkByte1 65 // "A"#define checkByte2 65 // "A "#define checkByte3 65 // "A" //------------------------------------------ ------------------------------------// START SERWOROBOTA STEROWANEGO ARDUINO (SERB) PREAMBUŁA#załącz #define LEFTSERVOPIN 10 //Pin, do którego podłączony jest lewy serwo#define RIGHTSERVOPIN 9 //Pin, do którego jest podłączony prawy serwomechanizm leftServo; Serwo prawoSerwo; int leftPrędkość = 50; //utrzymuje prędkość robotów leftServo //procent od 0 do 100int rightSpeed = 100; //utrzymuje prędkość robota rightServo //procent od 0 do 100// KONIEC STEROWANEGO SERWOROBOTA ARDUINO (SERB) PREAMBUŁA//-------------------- -------------------------------------------------- -----//Uruchamia wszystko i działavoid setup() { Serial.begin(9600); //Uruchamia port szeregowy serbSetup(); //ustawia stan wszystkich potrzebnych //pinów i dodaje serwa do szkicu}//Główny program loopvoid loop() { serbPollSerialPort(); //ciągle patrzy na port szeregowy //jeśli są jakieś dane, przetwarza je}//--------------------------------------------- -----------------------------------------//POCZĄTEK PROCEDURY SERWERA SZEREGOWEGO ARDUINO/ * * Przetwarza polecenia dostarczane do portu szeregowego arduino */void serbPollSerialPort(){ int dta; //zmienna do przechowywania bajtu szeregowego if (Serial.available() >= 5) { //jeśli w buforze znajduje się 5 bajtów (długość pełnego żądania) dta = Serial.read(); if (dta = checkByte1){ //Sprawdza pierwszy bajt kontrolny dta = Serial.read(); if (dta = checkByte2){ //Sprawdza drugi bajt kontrolny dta = Serial.read(); if (dta = checkByte3){ //Sprawdza trzeci bajt kontrolny int command = Serial.read(); //Czwarty bajt to polecenie int param1 = Serial.read(); //Piąty bajt to param1 interpretCommand(command, param1); //wysyła przeanalizowane żądanie do swojego programu obsługi } } } }}/* * Pobiera polecenie i parametr i przekazuje je do robota */void interpretCommand(int command, int param1){if (command == FORWARD){goForward(); opóźnienie(param1 * 100); goStop();} //if forward else if(polecenie == WSTECZ){goBackward(); opóźnienie(param1 * 100); goStop();} //jeśli wstecz else if(polecenie == LEWO){goLeft(); opóźnienie(param1 * 100); goStop();} //if left else if(command == RIGHT){goRight(); opóźnienie(param1 * 100); goStop();} //if right else if(command == SETSPEED){setSpeed(param1);} //if ustawianie prędkości else if(command == STOP){goStop();} //if stop else if(command == SETSPEEDLEFT){setSpeedLeft(param1);} //if ustawianie prędkości w lewo else if(command == SETSPEEDRIGHT){setSpeedRight(param1);} //if ustawianie prędkości w prawo else{ //jeśli nierozpoznane polecenie zrób trochę potrząsania idź w lewo(); opóźnienie(150); idź w prawo(); opóźnienie(150); goStop(); }}//--------------------------------------------------- --------------------------//START OF ARDUINO CONTROLLED SERVO ROBOT (SERB) ROUTINES/* * konfiguruje arduino do adresowania SERB za pomocą dołączone procedury*/void serbSetup(){ setSpeed(leftSpeed); pinMode(LEFTSERVOPIN, OUTPUT); //ustawia lewy pin sygnału serwa //na wyjście pinMode(RIGHTSERVOPIN, OUTPUT); //ustawia prawy pin sygnału serwa //na wyjście leftServo.attach(LEFTSERVOPIN); //dołącza lewe serwo rightServo.attach(RIGHTSERVOPIN); //podłącza prawe serwo goStop();}/* * ustawia prędkość robota od 0-(zatrzymany) do 100-(pełna prędkość) * UWAGA: prędkość nie zmieni aktualnej prędkości musisz zmienić prędkość * następnie wywołaj jedną metod go przed wprowadzeniem zmian.*/ void setSpeed(int newSpeed){ setSpeedLeft(newSpeed); //ustawia lewą prędkość setSpeedRight(nowaPrędkość); //ustawia prawą prędkość}/* * Ustawia prędkość lewego koła */void setSpeedLeft(int newSpeed){ if(newSpeed >= 100) {newSpeed = 100;} //if speed jest większa niż 100 //make it 100 if(newSpeed = 100) {newSpeed = 100;} //jeśli prędkość jest większa niż 100 //stwórz 100 if(newSpeed <= 0) {newSpeed = 0;} //jeśli prędkość jest mniejsza niż 0 make // it 0 rightSpeed = newSpeed * 0,9; //skaluje prędkość do }/* * wysyła robota do przodu */void goForward(){ leftServo.write(90 + leftSpeed); rightServo.write(90 - rightSpeed);} /* * wysyła robota do tyłu */void goBackward(){ leftServo.write(90 - leftSpeed); rightServo.write(90 + rightSpeed);} /* * wysyła robota w prawo */void goRight(){ leftServo.write(90 + leftSpeed); rightServo.write(90 + rightSpeed);}/* * wysyła robotowi left */void goLeft(){ leftServo.write(90 - leftSpeed); rightServo.write(90 - rightSpeed);}/* * zatrzymuje robota */void goStop(){ leftServo.write(90); rightServo.write(90);}//KONIEC PROCEDUR SERWOROBOTÓW STEROWANYCH PRZEZ ARDUINO (SERB)//------------------------------------------ -----------------------------------------------
Krok 4: Oprogramowanie - laptop robota (serwer sieciowy)
(Przetwarzanie to język programowania i środowisko o otwartym kodzie źródłowym, które jest bardzo łatwe do rozpoczęcia. Aby uzyskać więcej informacji, zobacz Przetwarzanie) Oprogramowanie działające na laptopie-robocie jest również dość proste. Jest to raczej prymitywny serwer WWW (nasłuchujący żądań stron internetowych z przeglądarki internetowej), mały interfejs użytkownika (do jego konfiguracji) oraz udogodnienia do przekazywania poleceń otrzymanych z serwera WWW do Arduino. Aby zainstalować szybko: (na oknach)
- Pobierz poniższy plik zip (06-WEBB-Processing Webserver (windows exe).zip)
- Rozpakuj go i uruchom plik.exe (_WEBB_WebServer_RobotComputer.exe)
Aby edytować w trakcie przetwarzania:
- Pobierz poniższy plik zip (06-WEBB-Processing Webserver (pliki źródłowe).zip)
- Rozpakuj w dowolnym miejscu na komputerze.
- Otwórz środowisko przetwarzania i otwórz (_WEBB_WebServer_RobotComputer.pde)
Testować:
- Uruchom program.
- W polu #1 pojawi się lista dostępnych portów komunikacyjnych na twoim komputerze (kliknij na ten, z którym jest połączone Twoje Arduino. (Twój robot drgnie kilka razy, gdy komputer się połączy, a obok wybranego port komunikacyjny)
- W polu #2 sprawdź, czy Twoje Arduino jest podłączone. Kliknij jedną ze strzałek i miejmy nadzieję, że twój robot będzie się poruszał w klikniętym kierunku przez pół sekundy.
- W polu nr 3 kliknij przycisk „Start”, aby uruchomić serwer WWW.
- Otwórz przeglądarkę internetową (na laptopie Robot) i odwiedź https://127.0.0.1:12345/ControlPage.html (mam nadzieję, że pojawi się strona sterowania z przyciskami na niej) -Szczegóły korzystania z tej strony w następnym kroku -
Co się dzieje:
- Serwer WWW nasłuchuje na porcie 12345 dla żądań http (co jest wysyłane po wpisaniu adresu strony internetowej)
- Są dwa rodzaje żądań, na które odpowiada.
1. Nasłuchuje "ControlPage.html" i wyśle stronę kontrolną 2. Nasłuchuje żądań postaci "/request?command=F¶m1=100" (te polecenia są parsowane i wysyłane do Arduino w robocie przechodzącym do przodu przez 10 sekund) Dodatek: (Kod do serwera WWW)
/* * Arduino Controlled Web Connected Robot (WEBB) - Webserver * Więcej szczegółów na stronie: https://www.oomlout.com/serb * * Zachowanie: Program nasłuchuje żądań http (strony internetowej) w postaci * "/request ?command=F¶m1=100", a następnie przekazuje je do * Arduino * Obsługiwane polecenia - &aposF&apos - 70 - Dalej * &aposB&apos - 66 - Wstecz * &aposL&apos - 76 - Lewo * &aposR&apos - 82 - Prawo * &aposS&apos - 83 - Szybkość * &aposX - 88 - SetSpeedLeft * &aposY&apos - 89 - SetSpeedRight * &aposC&apos - 67 - Stop * param1&aposs - 0 - 255 (od 0 do 25,5 sekund) wartość * 100 milisekund * * wyświetla również stronę kontrolną w przeglądarce, jeśli prosi się o plik ControlPage.html * * Operacja: 1. Kliknij port Comm, do którego podłączone jest Twoje Arduino * 2. Użyj przycisków testowych, aby sprawdzić, czy Twoje Arduino nasłuchuje * (będzie poruszał się w kierunku klikniętym przez pół sekundy) * 3. Kliknij Start, a Twój serwer słuchaj próśb * * * Licencja: Ta praca jest objęta licencją Creative Commons * Attribu tion-Share Alike 3.0 Unported License. Aby * wyświetlić kopię tej licencji, odwiedź * https://creativecommons.org/licenses/by-sa/3.0/ * lub wyślij list do Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105, * Stany Zjednoczone. * */import processing.serial.*; //zaimportuj bibliotekę szeregową, aby użyć Serial (do rozmów z Arduino)import processing.net.*; //zaimportuj bibliotekę sieciową do korzystania z serwera (do komunikowania się z Internetem)/* Zmienne związane z portem szeregowym */int serialPortIndex = -1; //indeks portu szeregowego, którego używamy w Serial.list() listString commOptions; //Zmienna do przechowywania Serial.list(), dzięki czemu nie ma potrzeby odpytywania //portów szeregowych za każdym razem, gdy chcemy je odwołać (odpytywanie powoduje //skok do serw arduino)Serial serialPort; //Sprawia, że port szeregowy jest adresowalny w całym tym szkicu/* Zmienne związane z grafiką i renderowaniem */PFont font; //upublicznia czcionkę, więc wystarczy ją załadować tylko raz (Arial-72)/* Zmienne związane z siecią */Server wServer; //Serwer obsługujący żądania siecioweint port = 12345; //Port nasłuchiwany przez serwer toint cycleCount = 0; //Zlicza wykonanie pętli rysowania (używane do //animowania "działającego" tekstu) /* Zmienne użytkowe */ PImage bg; //Obraz tła aktualnie \WEBB-background.png/* * Zmienne związane z przyciskami * (przyciski są zaimplementowane bardzo z grubsza, pola ograniczające są przechowywane, a grafika i tekst * są rysowane na obrazie tła) tj. przesuwanie zmiennych przycisków nie zmienia wyglądu przycisków */Button comm1; Przycisk komunikacji2; Przycisk kom3; Przycisk komunikacji4; //Przyciski do wyboru odpowiedniego portu szeregowegoButton up; Prawy przycisk; Przycisk lewy; Przycisk w dół;//Przyciski kierunkowe, aby sprawdzić, czy robot odpowiada Przycisk webServer; //Przycisk uruchamiający webServer/* * ustawia wszystko */void setup() { frameRate(5); //Nieco spowalnia szkic, aby nie obciążał systemu bg = loadImage("WEBB-background.png"); //Wczytuje obraz tła (przechowywany w folderze szkicu) size(700, 400); //Ustawia rozmiar czcionki okna szkicu = loadFont("ArialMT-72.vlw"); //Wczytuje czcionkę, której będziemy używać w tym szkicu commOptions = Serial.list(); //Odpytuje porty szeregowe i pobiera listę dostępnych portów //(wykonanie tego tylko raz zapobiega drganiom robota za każdym razem, //odpytywanie portu szeregowego) defineButtons(); //Definiuje ramki ograniczające dla każdego przycisku background(bg); //Maluje obraz tła (ten obraz zawiera wszystkie grafiki przycisków)}/* Główna pętla szkicu */void draw() { if(cycleCount==0){ //-- wywołanie procedur rysowania drawCommBox(); //Rysuje emelmenty w polu Comm (pole 1) drawTestBox(); //Rysuje wszystkie elementy w polu testowym (pole 2) drawWebServerBox(); //Rysuje wszystkie elementy w polu WebServer Box (pole 3) } //-- wywołanie procedur roboczych pollWebServer(); //Odpytuje serwer sieciowy, aby sprawdzić, czy przez sieć nadeszły jakieś żądania}//--------------------------------------------- ----------------------------------------------//Początek procedury rysowania (podzielone tylko po to, aby kod był przyjemniejszy do odczytania)/* * Procedura aktualizacji rysowania (wykonywana w każdym cyklu) dla elementów w polu komunikacji (pole 1) */void drawCommBox(){ fill(0, 0, 0); //Ustaw wypełnienie na kolor czarny textFont(font, 15); //Ustaw czcionkę we właściwym rozmiarze for(int i = 0; i 0){running = running + ".";} //liczba kropek zależy od cycleCount if((cycleCount / 1) > 1){ running = running + ".";} if((cycleCount / 1) > 2){running = running + ".";} if((cycleCount / 1) > 3){cycleCount=0;} text(running, 520, 210); } liczba cykli++; //Za każdym razem, gdy liczba cykli jest zwiększana o jeden} //Procedury zakończenia rysowania//------------------------------- ------------------------------//------------------ -------------------------------------------//Rozpoczęcie procedur serwisowych/ * * mousePressed jest wywoływana za każdym razem, gdy naciśniemy mysz, to * sprawdza, czy mysz znajduje się w którymś z ramek ograniczających przyciski * i czy jest to odpowiednia procedura jest wywoływana */void mousePressed(){ if(comm1.pressed()) { updateSerialPort(0);} //Zmiany portu komunikacyjnego pod indeksem 0 w Serial.list() else if(comm2.pressed()) {updateSerialPort(1);} //Zmiany portu komunikacji pod indeksem 1 w Serial..list() else if(comm3.pressed()) {updateSerialPort(2);} //Zmiana portu komunikacyjnego pod indeksem 2 w Serial.list() else if(comm4.pressed()) {updateSerialPort(3);} //Zmienia port komunikacji pod indeksem 3 w Serial.list() else if(up.pressed()) {sendRobotCommand("F", 5);} //Wysyła polecenie przesunięcia robota do przodu o 0.5 sekundy else if(left.pressed()) {sendRobotCommand("L", 5);} / /Wysyła polecenie przesunięcia robota w lewo o 0,5 sekundy else if(right.pressed()) {sendRobotCommand("R", 5);} //Wysłanie polecenia przesunięcia robota w prawo o 0,5 sekundy else if(w dół. pressed() {sendRobotCommand("B", 5);} //Wysyła polecenie przesunięcia robota do tyłu o 0,5 sekundy else if(webServer.pressed()) {startWebServer();} //Uruchamia cykl licznika webServer = 0; tło (bg); //Odśwież obraz tła (ten obraz zawiera wszystkie grafiki przycisków) draw();}/* * Wywoływany po wykonaniu, sprawdza serwer, czy są jakieś oczekujące połączenia * jeśli istnieje oczekujące połączenie, ciągnie usuwa żądanie i przekazuje je do procedury parseRequest(String) *, aby usunąć dodatkowy tekst. Jest to następnie wysyłane do procedury interpretRequest(String) w celu * wywołania odpowiedniej procedury akcji (tj. wysłania instrukcji do robota).* * Żądanie jest przekazywane przez wprowadzenie adresu i portu komputera do przeglądarki internetowej * Dla komputera lokalnego "https://127.0.0.1:12345/request?command=F¶m1=100" * * Przykładowe żądanie: * GET /request? command=F¶m1=100 HTTP/1.1 * User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, jak Gecko) * Accept: *//* * Accept-Language: en-US, en * Accept-Charset: ISO-8859-1, *, utf-8 * Accept-Encoding: gzip, deflate, bzip2 * Host: 127.0.0.1:12345 * Połączenie: Keep-Alive * * Przykładowa odpowiedź (dla przetworzonego żądania) * HTTP/1.1 200 OK * Połączenie: zamknij * Content-Type: text/html * * command: F param1: 100 */void pollWebServer(){ if(wServer != null){ //Jeśli serwer WWW uruchomione żądanie Klienta = wServer.available(); //Załaduj następnego klienta w linii na //serwerze (null, jeśli żadne żądania nie oczekują) if(request != null){ //jeśli istnieje proces żądania it String fullRequest = request.readString(); //Zapisz zawartość żądania jako ciąg String ip = request.ip(); //Zapisz adres ip klienta jako ciąg String requestString = parseRequest(fullRequest.toUpperCase()); //Usuń wszystkie dodatkowe //informacje, pozostawiając tylko ciąg żądania (tekst po GET) //(przechodzi na wielkie litery, aby ułatwić testowanie ciągu) if(requestString.indexOf("REQUEST?") != -1){ //Sprawdza, czy żądanie zawiera „REQUEST?” Odpowiedź ciągu = interpretRequest(requestString); //Wysyła żądanie do interpretera żądań request.write("HTTP/1.1 200 OK\nPołączenie: zamknij\nContent-Type: text/html\n\n" + odpowiedź); //Wysyła odpowiedź 200, aby powiedzieć, że żądanie zostało //obsłużone, a łańcuch odpowiedzi jako odpowiedź wServer.disconnect(request); //Rozłącza klienta }else if(requestString.indexOf("CONTROLPAGE") != -1){ //Jeśli żądanie dotyczy strony kontrolnej String webPageArray = loadStrings("WEBB-ControlPage.html"); //Wczytuje kontrolkę webPage z \data\WEBB-ControlPage.html //(ładowana jako tablica wierszy) String webPage =""; //Aby ułatwić edycję, strona internetowa została //pozostała z podziałami wierszy, więc ta pętla for usuwa te wiersze for(int i = 0; i portIndex){ //jeśli przekazany portIndex jest prawidłowym indeksem w Serial.list() //(tj. nie opcja trzecia na liście dwóch) serialPortIndex = portIndex; //ustaw zmienną serialPortIndex na nowy indeks portu szeregowego //(służy do wyświetlania kropki obok aktywnego portu) } if(serialPortIndex != -1){ //sprawdź, czy port został wybrany wcześniej, jeśli (serialPort != null){serialPort.stop();} //jeśli port szeregowy jest już używany, zatrzymaj go przed załadowaniem nowego serialPort = new Serial(this, Serial.list()[serialPortIndex], 9600); //Utwórz nowy obiekt Serial do komunikacji z Arduino 9600 Baud }}/* * Pobiera ciąg żądania (np.: "request?command=F¶m1=100") i usuwa polecenie * oraz param1 i przekazuje je do arduino (tutaj można by dodać dodatkowe parametry lub polecenia spoza arduino) */String interpretRequest(String requestString){ String returnValue = "OK"; //Przygotowuje zmienną returnValue String command; //Następne trzy wiersze wyodrębniają wartość po "command=" //(dodatkowy wiersz jest w przypadku, gdy parametr polecenia znajduje się //na końcu żądania i nie następuje po nim & if(requestString.indexOf("COMMAND=") != -1){ polecenie = requestString.substring(requestString.indexOf("COMMAND=") + "COMMAND=".length());} else{polecenie = "Z";} if(command.indexOf(" &") != -1){ command = command.substring(0, command.indexOf("&"));}else{command = command;} String param1String; //Następne trzy linie wyodrębniają wartość po „param1= " //(dodatkowa linia jest w przypadku, gdy parametr polecenia znajduje się //na końcu żądania i nie następuje po nim & 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); //Zmienia ciąg param1 w ciąg liczba całkowita sendRobotCommand(polecenie, param1); //Wysyła polecenie do procedury, która wysyła je do Arduino returnValue = "command: " + command + " param1: " + param1; //obecnie tylko parsowane polecenie, ale wysyłanie //jako html, więc formatowanie może być uwzględnione return returnValue;}/* * Pobiera polecenie (obecnie jedna litera) i parametr (jeden bajt 0-255) i wysyła je do arduino * który nasłuchuje i odpoczywa * Aktualnie obsługiwane polecenia * F -*/void sendRobotCommand(String command, int param1){ println("command: " + command + " time: " + param1); Ciąg kontrolnyString = "AAA"; if(serialPort != null){ serialPort.write(checkString + polecenie); serialPort.write(bajt(param1)); }}//Koniec instalacji/niezbyt często nazywane podprogramami//------------------------------------ -------------------------------------------------- //Przykładowy kod przycisku i RectButton z przykładu processing.org z pewnymi zmianami //dokonany głównie w celu uproszczenia i usunięcia animacji najazdu//https://processing.org/learning/topics/buttons.html (2008-09-23) class Przycisk{ int x, y; int szerokość, wysokość; Button(int ix, int iy, int iwidth, int iheight) { x = ix; y = y; szerokość = szerokość; wysokość = iwysokość; } boolean wciśnięty() { if(overRect()) { return true; } else { return false;} } boolean overRect() { if (mouseX >= x && mouseX = y && mouseY <= y+height) { return true; } else { return false; } }}
Krok 5: Oprogramowanie - (strona internetowa)
Cóż, prawie skończyliśmy. Pozostało tylko rozmawiać z twoim robotem. Aby porozmawiać: (przez sieć lokalną -w systemie Windows-)
- Odkryj lokalny adres IP laptopa. Aby to zrobić, przejdź do „Start\Programy\Akcesoria\Wiersz polecenia” i gdy otworzy się okno terminala, wpisz „ipconfig”. Zapisz „Adres IP” i przejdź do innego komputera w sieci lokalnej.
- Otwórz przeglądarkę internetową, wpisz „https:// (adres IP komputera robota):12345/ControlPage.html
- Strona sterowania powinna się załadować, w polu „Adres IP” wpisz adres ip komputerów robota.
- Zacznij kontrolować swojego robota.
Aby porozmawiać: (przez Internet) Teraz, gdy masz to działa lokalnie, rozmowa przez Internet jest tylko kilka kroków.
- (najtrudniejszy krok) Skonfiguruj przekierowanie portów - Twój komputer musi słuchać Internetu, a nie tylko sieci lokalnej. Aby to zrobić, musisz powiedzieć routerowi, aby przekazywał określone żądania do komputera sterującego robotem. Jest to nieco skomplikowane i wykracza daleko poza zakres tego Instruktażu. Jeśli jednak odwiedzisz PortForward.com, otrzymasz wszystko, co musisz wiedzieć o konfiguracji routera (musisz przekierować port 12345 do laptopa robota)
- Następnie odkryj swój internetowy adres IP (odwiedź WhatIsMyIP.com)
- Na koniec uruchom skype, skonfiguruj połączenie wideo i poproś osobę, z którą rozmawiasz, o odwiedzenie „https://(internet IP):12345/ControlPage.html”
- Wpisz internetowy adres IP w polu „Adres IP” na stronie sterowania, a Twój robot podłączony do sieci jest prowadzony z daleka.
Krok 6: Zakończono
Cóż, to wszystko. Mam nadzieję, że dobrze się bawisz prowadząc swojego robota z daleka. Jeśli masz jakiekolwiek problemy z oprogramowaniem lub sprzętem, zostaw komentarz, a postaram się Ci pomóc. Jeśli chcesz sprawdzić więcej fajnych projektów, odwiedź: oomlout.com
Zalecana:
System Ambilight dla każdego wejścia podłączonego do telewizora. WS2812B Arduino UNO Raspberry Pi HDMI (aktualizacja 12.2019): 12 kroków (ze zdjęciami)
System Ambilight dla każdego wejścia podłączonego do telewizora. WS2812B Arduino UNO Raspberry Pi HDMI (zaktualizowane 12.2019): Zawsze chciałem dodać ambilight do mojego telewizora. Wygląda tak fajnie! W końcu to zrobiłem i nie zawiodłem się! Widziałem wiele filmów i wiele samouczków na temat tworzenia systemu Ambilight dla telewizora, ale nigdy nie znalazłem pełnego samouczka dla mojej dokładnej potrzeby
55-calowa, cyfrowa ramka na zdjęcia 4K za około 400 USD: 7 kroków (ze zdjęciami)
55-calowa, cyfrowa ramka na zdjęcia 4K za około 400 USD: istnieje wiele samouczków, jak zrobić niesamowitą cyfrową ramkę na zdjęcia z raspberry pi. niestety rpi nie obsługuje rozdzielczości 4K. Odroid C2 może z łatwością obsługiwać rozdzielczość 4K, ale żaden z tych samouczków rpi nie działa dla jednostki C2. to zajęło
Stwórz własną profesjonalną maszynę do czyszczenia płyt za mniej niż 80 USD i zaoszczędź do 3000 USD i więcej.: 6 kroków (ze zdjęciami)
Zrób własną profesjonalną maszynę do czyszczenia płyt za mniej niż 80 USD i zaoszczędź do 3000 USD i więcej.: Przepraszam za mój angielski. Po tym, jak wróciłem do brzmienia starego dobrego winylu, miałem problem, jaki ma każdy miłośnik płyt. Jak prawidłowo wyczyścić zapisy!? W Internecie jest wiele sposobów. Tańsze sposoby, jak Knosti czy Discofilm, ale też
Zrób własne ładne etui na EeePC / Netbook za około 8 USD (i zaoszczędź 91 USD zamiast kupowania w Redmaloo): 5 kroków (ze zdjęciami)
Zrób własne ładne etui na EeePC / netbooka za około 8 USD (i zaoszczędź 91 USD zamiast kupowania w Redmaloo): Ta instrukcja pokaże Ci, jak zrobić swój własny, bardzo ładny i dobrze wyglądający laptop lub jeszcze lepszy netbook. Pomieści netbooka, da podkładkę pod mysz, poczucie używania czegoś wyjątkowego, ładnego i ręcznie wykonanego oraz przyjemne uczucie
Zbuduj bardzo małego robota: stwórz najmniejszego robota kołowego na świecie za pomocą chwytaka.: 9 kroków (ze zdjęciami)
Zbuduj bardzo małego robota: Stwórz najmniejszego robota kołowego na świecie za pomocą chwytaka.: Zbuduj robota 1/20 cala sześciennego z chwytakiem, który może podnosić i przesuwać małe przedmioty. Jest kontrolowany przez mikrokontroler Picaxe. W tej chwili uważam, że może to być najmniejszy na świecie robot kołowy z chwytakiem. To bez wątpienia ch