İçindekiler:

Web Bağlantılı Robot Yapın (Yaklaşık 500 $ karşılığında) (Arduino ve Netbook kullanarak): 6 Adım (Resimlerle)
Web Bağlantılı Robot Yapın (Yaklaşık 500 $ karşılığında) (Arduino ve Netbook kullanarak): 6 Adım (Resimlerle)

Video: Web Bağlantılı Robot Yapın (Yaklaşık 500 $ karşılığında) (Arduino ve Netbook kullanarak): 6 Adım (Resimlerle)

Video: Web Bağlantılı Robot Yapın (Yaklaşık 500 $ karşılığında) (Arduino ve Netbook kullanarak): 6 Adım (Resimlerle)
Video: Raspberry Pi ve IoT Uygulamaları 2024, Kasım
Anonim
Web Bağlantılı Robot Yapın (Yaklaşık 500 $ karşılığında) (Arduino ve Netbook kullanarak)
Web Bağlantılı Robot Yapın (Yaklaşık 500 $ karşılığında) (Arduino ve Netbook kullanarak)
Web Bağlantılı Robot Yapın (Yaklaşık 500 $ karşılığında) (Arduino ve Netbook kullanarak)
Web Bağlantılı Robot Yapın (Yaklaşık 500 $ karşılığında) (Arduino ve Netbook kullanarak)
Web Bağlantılı Robot Yapın (Yaklaşık 500 $ karşılığında) (Arduino ve Netbook kullanarak)
Web Bağlantılı Robot Yapın (Yaklaşık 500 $ karşılığında) (Arduino ve Netbook kullanarak)

Bu Eğitilebilir Kitap size kendi Web Bağlantılı Robotunuzu nasıl oluşturacağınızı gösterecektir (bir Arduino mikro denetleyici ve Asus eee bilgisayar kullanarak). Neden Web Bağlantılı bir Robot isteyesiniz? Tabii ki ile oynamak için. Skype ve bir web tarayıcısından başka bir şey kullanmadan (kontrol eden bilgisayara hiçbir şey yüklemeden) robotunuzu odanın veya ülkenin diğer ucundan sürün. Daha sonra? Yazılıma girin ve istediğiniz gibi uyarlayın, bir GPS ekleyin, böylece bir haritada nereye gittiğinizi izleyin, evinizdeki sıcaklık değişimlerini haritalamak için sıcaklık sensörleri veya web'de kontroller eklemek için sonar sensörleri ekleyin sürücüler çalıştırabilir ve çalıştıramaz. Özellikleri:

  • Ucuz - (tüm parçaları yeni satın alırsanız ve parça kutunuzu karıştırırsanız önemli ölçüde daha ucuza alırsanız ~500$)
  • Robotu çalıştırıp çalıştırdıktan sonra kontrol etmek için yalnızca bir web tarayıcısı gerekir - (ve nereye gittiğinizi görmek istiyorsanız Skype)
  • Açık Kaynak ve Kolayca Uyarlanabilir - (bir Arduino mikro denetleyicisi kullanır, Web sunucusu için İşleme ve tüm yazılımlar Linux'ta çalıştırılabilir (tüm kodlar, atlamayı ve işleri değiştirmeyi kolaylaştırmak için yoğun bir şekilde yorumlanmıştır))
  • Modüler Tasarım (tamamen entegre bir sistem değil, farklı bir video konferans hizmeti kullanmak istiyorsanız endişelenmeyin veya Arduino yerine Temel bir damganız varsa, küçük bir kod parçası sağlayıp yerleştirin)

İşte Web Bağlantılı Robotumun mutfaktan çıkarılışının kısa bir videosu.

Adım 1: Parçalar ve Araçlar

Parçalar ve Araçlar
Parçalar ve Araçlar

Sadece birkaç parça gereklidir: Robot: Arduino Kontrollü Servo Robot - (SERB) (175 $ @ oomlout.com) veya (kendin yap)

Beyni olarak bir Arduino mikro denetleyicisi kullanan açık kaynaklı bir robot

(arduinolu herhangi bir çift servo robot platformu kullanılabilir (seçenek 1) (başka seçenekler keşfederseniz lütfen bana mesaj atın)Bilgisayar: Asus eee PC 4G (280 $) (@Best Buy)

Bu amaç için mükemmel olan küçük, ucuz bir dizüstü bilgisayar

(herhangi bir dizüstü bilgisayar (veya bir akorla çalıştırmak istiyorsanız masaüstü) İşleme eskizlerini çalıştırabilir) Dizüstü Bilgisayar Masası: Lazer Kesim Akrilik (25 $ (@ oomlout)) veya (kendi adım 3'ünüzü oluşturun)

Dizüstü bilgisayarın oturması için bir masa sağlamak için bir (SERB) üzerine vidalanan birkaç ek akrilik parça

Somunlar ve Bollar: (ev deposunda mevcuttur)

  • 3 mm x 10 mm cıvata (x4)
  • 3 mm x 15 mm cıvata (x4)
  • 3 mm somun (x8)

Adım 2: Parçaları Kesme ve Montaj

Kesme Parçaları ve Montajı
Kesme Parçaları ve Montajı
Kesme Parçaları ve Montajı
Kesme Parçaları ve Montajı
Kesme Parçaları ve Montajı
Kesme Parçaları ve Montajı
Kesme Parçaları ve Montajı
Kesme Parçaları ve Montajı

Dizüstü bilgisayar masanız için parça almak için üç seçenek vardır. Kesme Seçeneği 1: (oomlout.com'dan satın alma)

lazerle kesilmiş masa parçaları ve gerekli donanımlar oomlout'tan 25$'a (buradan) edinilebilir

Seçenek 2: (Kendi lazer kesicinizde veya Ponoko.com'da kesim)

  • Aşağıdaki dosyayı indirin (03-WEBB-Acrylic Parts.cdr veya 03-WEBB-Acrylic Parts (Ponoko P2).eps)
  • 3 mm (1/8") Akrilikten kesin

Seçenek 3: (Kaydırma Testere)

  • Aşağıdan kaydırmalı testere kalıbını indirin (03-WEBB-ScrollSaw Pattern (A4).pdf (A4 boyutlu kağıt için) veya 03-WEBB-ScrollSaw Pattern (letter).pdf (letter boyutlu kağıt için))
  • Yazdırırken ölçeklenmediğini iki kez kontrol edin (basılı cetvelleri ölçerek)
  • 3 mm (1/8") akrilikten bir parça yapıştırın ve parçaları kesin.

Montaj: Aşağıdaki montaj kılavuzunu (04-WEBB-Assembly Guide.pdf) indirin ve laptop masasını bir araya getirin.

3. Adım: Yazılım - (Arduino)

Yazılım - (Arduino)
Yazılım - (Arduino)

Arduino'ya yeni başlayanlar için Arduino.cc'deki harika başlangıç kılavuzuna bakın. Çok basit bir programdır, Arduino'nun yaptığı veri için seri portunu izlemektir. Aradığı şey 5 bayt uzunluğunda bir konuşmadır.

  • Bayt 1-3 ("AAA" baytlarını kontrol edin)
  • Bayt 4 Komutu (Arduino'ya ne yapacağını söyler) (Desteklenen komutlar 'F' - İleri, 'B' - Geri, 'L' - Sol, 'R' - Sağ, 'S' - Hız, 'X' - SetSpeedLeft, 'Y' - Hız Sağa Ayarla, 'C' - Dur)
  • Bayt 5 Parametresi - Hareket komutları için bu bir zaman aralığı (Parametre * 100 ms) olarak yorumlanır ve hız komutları için 0-100 arası bir yüzde

Kod kapsamlı bir şekilde yorumlanmıştır ve bu çerçeveye ek komutlar eklemek kolay olmalıdır. İndirmek için:

  • Ekli zip dosyasını indirin. (05-WEBB-Arduino Code.zip)
  • Arduino Sketch dizininize açın. (varsayılan: Belgelerim\Arduino)
  • Arduino geliştirme ortamınızı açın ve Arduino'nuza yükleyin.

Kopyalamak ve yapıştırmak için

  • Aşağıdan kodu kopyalayın.
  • Arduino geliştirme ortamına yapıştırın.
  • Arduino'nuza yükleyin.

Ek: Arduino Programı

/* * Arduino Kontrollü Web Bağlantılı Robot (WEBB) - Seri Ana Bilgisayar * Daha fazla ayrıntı için şu adresi ziyaret edin: https://www.oomlout.com/serb * * Davranış: Arduino, 254 formatında bir komut için * Seri portunu dinler. 88, 88, (COMMAND), (TIME) * Desteklenen Komutlar - &aposF&apos - 70 - İleri * &aposB&apos - 66 - Geri * &aposL&apos - 76 - Sol * &aposR&apos - 82 - Sağ * &aposS&apos - 83 - Hız * &aposX&apos - 88 - Hız Ayarla * &aposY&apos - 89 - SetSpeedRight * &aposC&apos - 67 - Stop * Desteklenen Süreler - 0 - 255 (0 - 25,5 Saniye) değeri * 100 milisaniye *sp * Kablolama: Sağ Servo Sinyali - pin 9 * Sol Servo Sinyali - pin 10 * * Lisans: Bu çalışma, Creative Commons * Atıf-Benzer Paylaşım 3.0 Aktarılmamış Lisansı ile lisanslanmıştır. Bu lisansın bir kopyasını görüntülemek için * https://creativecommons.org/licenses/by-sa/3.0/ * adresini ziyaret edin veya Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105'e bir mektup gönderin, * AMERİKA BİRLEŞİK DEVLETLERİ. * */ //------------------------------------------------ ----------------------------//START OF ARDUINO SERIAL SERVER PREAMBLE//Her komuta karşılık gelen sabitleri tanımlama (ayrıca ascii kod numarası) #define FORWARD 70 //F#define GERİ 66 //B#define SOL 76 //L#define SAĞ 82 //R#define SETSPEED 83 //S#define STOP 67 //C#define SETSPEEDLEFT 88 //X #define SETSPEEDRIGHT 89 //Y/*Üç kontrol baytı (robotun rastgele seri *verilere yanıt vermesini önlemek için kullanılır) şu anda "AAA" */#define checkByte1 65 // "A"#define checkByte2 65 // "A "#define checkByte3 65 // "A" //-------------------------------------- ------------------------------------// ARDUINO KONTROLLÜ SERVO ROBOT (SERB) BAŞLANGICI BAŞLANGIÇ#dahil #define LEFTSERVOPIN 10 //Sol servonun bağlı olduğu pin#define RIGHTSERVOPIN 9 //Sağ servonun bağlı olduğu pin solServo; Servo hakkıServo; int solHız = 50; //robotların hızını tutar leftServo //0 ile 100int arasında bir yüzde rightSpeed = 100; //robotların doğru Servo hızını tutar //0 ile 100 arasında bir yüzde // ARDUINO KONTROLLÜ SERVO ROBOTUN SONU (SERB) BAŞLANGIÇ//------------------- -------------------------------------------------- -----//Her şeyi çalıştırır void setup() { Serial.begin(9600); //Seri bağlantı noktasını başlatır serbSetup(); //gerekli olan tüm //pinlerin durumunu ayarlar ve çiziminize servolar ekler}//Ana program loopvoid loop() { serbPollSerialPort(); //sürekli olarak seri bağlantı noktasına bakar //veri varsa onu işler}//----------------------------- -----------------------------------------//ARDUINO SERİ SUNUCU RUTİNLERİNİN BAŞLANGICI/ * * Arduino'nun seri bağlantı noktasına gönderilen komutları işler */void serbPollSerialPort(){ int dta; //seri baytı tutacak değişken if (Serial.available() >= 5) { //eğer tamponda 5 bayt varsa (tam bir istek için uzunluk pf) dta = Serial.read(); if (dta = checkByte1){ //İlk kontrol baytı için kontrol eder dta = Serial.read(); if (dta = checkByte2){ //İkinci kontrol baytı için kontrol eder dta = Serial.read(); if (dta = checkByte3){ //Üçüncü kontrol baytını kontrol eder int komut = Serial.read(); //Dördüncü bayt komuttur int param1 = Serial.read(); //Beşinci bayt param1 yorumKomutudur(komut, param1); //ayrıştırılan isteği &aposs işleyicisine gönderir } } } }}/* * Komutu ve parametreyi alır ve robota iletir */void yorumCommand(int komut, int param1){if (komut == İLERİ){goForward(); gecikme(param1 * 100); goStop();} //eğer ileri ise if(komut == GERİ){goBackward(); gecikme(param1 * 100); goStop();} //eğer geriye doğru ise if(komut == SOL){goLeft(); gecikme(param1 * 100); goStop();} //eğer kaldıysa if(komut == SAĞ){goRight(); gecikme(param1 * 100); goStop();} //eğer doğruysa if(command == SETSPEED){setSpeed(param1);} //hız ayarlanıyorsa else if(komut == STOP){goStop();} //if stop else if(komut == SETSPEEDLEFT){setSpeedLeft(param1);} //eğer sol hız ayarlanıyorsa else if(command == SETSPEEDRIGHT){setSpeedRight(param1);} //eğer doğru hız ayarlanıyorsa else{ //tanınmayan komut varsa biraz shimmy yapın gitSol(); gecikme(150); sağa git(); gecikme(150); git dur(); }}//---------------------------------------------- --------------------------//ARDUINO KONTROLLÜ SERVO ROBOT (SERB) RUTİNLERİNİN BAŞLANGICI/* * arduino'nuzu kullanarak SERB'inize hitap edecek şekilde ayarlar. dahil edilen rutinler*/void serbSetup(){ setSpeed(leftSpeed); pinMode(SOLSERVOPIN, ÇIKIŞ); //sol servo sinyal pinini //çıkış pinModuna ayarlar(RIGHTSERVOPIN, OUTPUT); //sol servo sinyal pinini ayarlar // leftServo.attach(LEFTSERVOPIN); //sol servoyu ekler sağaServo.attach(RIGHTSERVOPIN); // servoyu sağa bağlar goStop();}/* * robotun hızını 0-(durduruldu) ile 100-(tam hız) arasında ayarlar * NOT: hız mevcut hızı değiştirmez hızı değiştirmeniz gerekir * sonra bir çağırın değişiklikler meydana gelmeden önce uygulanan yöntemler.*/ void setSpeed(int newSpeed){ setSpeedLeft(newSpeed); //sol hızı ayarlar setSpeedRight(newSpeed); //sağ hızı ayarlar}/* * Sol tekerleğin hızını ayarlar */void setSpeedLeft(int newSpeed){ if(newSpeed >= 100) {newSpeed = 100;} //hız 100'den büyükse //yap 100 if(newSpeed = 100) {newSpeed = 100;} //hız 100'den büyükse //100 yap if(newSpeed <= 0) {newSpeed = 0;} //hız 0'dan küçükse yap // it 0 sağHız = yeniHız * 0.9; //hızı olacak şekilde ölçeklendirir }/* * robotu ileri gönderir */void goForward(){ leftServo.write(90 + leftSpeed); rightServo.write(90 - rightSpeed);} /* * robotu geriye doğru gönderir */void goBackward(){ leftServo.write(90 - leftSpeed); rightServo.write(90 + rightSpeed);} /* * robotu sağa gönderir */void goRight(){ leftServo.write(90 + leftSpeed); rightServo.write(90 + rightSpeed);}/* * robotu sola gönderir */void goLeft(){ leftServo.write(90 - leftSpeed); rightServo.write(90 - rightSpeed);}/* * robotu durdurur */void goStop(){ leftServo.write(90); rightServo.write(90);}//ARDUINO KONTROLLÜ SERVO ROBOT (SERB) RUTİNLERİNİN SONU//---------------------------- --------------------------------------------------

Adım 4: Yazılım - Robot Dizüstü Bilgisayar (WebSunucusu)

Yazılım - Robot Dizüstü Bilgisayar (WebSunucusu)
Yazılım - Robot Dizüstü Bilgisayar (WebSunucusu)

(İşleme, başlaması çok kolay olan açık kaynaklı bir programlama dili ve ortamıdır. Daha fazla ayrıntı için İşleme sayfasını ziyaret edin) Robot dizüstü bilgisayarda çalışan yazılım da oldukça basittir. Oldukça basit bir web sunucusudur (bir web tarayıcısından web sayfası isteklerini dinler), küçük bir kullanıcı arayüzü (kurulum için) ve Web Sunucusundan alınan komutları Arduino'ya iletmek için olanaklardır. Hızlı Kurulum: (pencerelerde)

  • Aşağıdaki zip dosyasını indirin (06-WEBB-Processing Webserver (windows exe).zip)
  • Açın ve.exe dosyasını çalıştırın (_WEBB_WebServer_RobotComputer.exe)

İşleme Sırasında Düzenlemek İçin:

  • Aşağıdaki zip dosyasını indirin (06-WEBB-Processing Webserver (kaynak dosyalar).zip)
  • Bilgisayarınızın herhangi bir yerinde sıkıştırın.
  • İşleme ortamını açın ve (_WEBB_WebServer_RobotComputer.pde) dosyasını açın.

Test etmek için:

  • Programı çalıştır.
  • 1. kutuda, bilgisayarınızdaki mevcut iletişim bağlantı noktalarının bir listesi olacaktır (Arduino'nuzun bağlı olduğu bağlantı noktasına tıklayın. (Bilgisayar bağlanırken robotunuz birkaç kez seğirecek ve seçilenin yanında camgöbeği bir nokta görünecektir) iletişim bağlantı noktası)
  • Arduino'nuzun bağlı olup olmadığını görmek için kutu 2 testinde. Oklardan birine tıklayın ve umarım robotunuz tıklanan yönde yarım saniye hareket eder.
  • 3. kutuda web sunucusunu başlatmak için "Başlat" düğmesini tıklayın.
  • Bir web tarayıcısı açın (Robot Dizüstü bilgisayarda) ve https://127.0.0.1:12345/ControlPage.html adresini ziyaret edin (umarım üzerinde düğmeler bulunan kontrol web sayfası görünür) -Bir sonraki adımda bu sayfanın nasıl kullanılacağına ilişkin ayrıntılar -

Ne oluyor:

  • Web Sunucusu, http istekleri için 12345 numaralı bağlantı noktasını dinler (bir web sayfası adresini yazdığınızda gönderilenler)
  • Yanıtladığı iki tür istek vardır.

1. "ControlPage.html" dosyasını dinler ve kontrol Web sayfasını gönderir 2. "/request?command=F&param1=100" biçimindeki istekleri dinler (bu komutlar ayrıştırılır ve Arduino'ya gönderilir (bu örnek robotta 10 saniye ileri gider)Ek: (WebSunucusu için kod)

/* * Arduino Kontrollü Web Bağlantılı Robot (WEBB) - Web sunucusu * Daha fazla ayrıntı için ziyaret edin: https://www.oomlout.com/serb * * Davranış: Program * "/request biçimindeki http (web sayfası) isteklerini dinler ?command=F&param1=100" ve ardından bunları * Arduino * Supported Commands - &aposF&apos - 70 - Forward * &aposB&apos - 66 - Backward * &aposL&apos - 76 - Left * &aposR&apos - 82 - Right * &aposX&apos - 83 - Speed * &apos - 88 - SetSpeedLeft * &aposY&apos - 89 - SetSpeedRight * &aposC&apos - 67 - Stop * param1&aposs - 0 - 255 (0 - 25,5 Saniye) değeri * 100 milisaniye * * ControlPage.html istenirse tarayıcıya kontrol web sayfasını da sunar * * İşlem: 1. Arduino'nuzun bağlı olduğu Comm portuna tıklayın * 2. Arduino'nuzun dinleyip dinlemediğini görmek için test düğmelerini kullanın * (tıklanan yönde yarım saniye hareket eder) * 3. Başlat'a tıklayın ve web sunucunuz açılacaktır. istekleri dinlemek * * * Lisans: Bu çalışma Creative Commons * Attribu kapsamında lisanslanmıştır tion-Share Alike 3.0 Aktarılmamış Lisans. Bu lisansın bir kopyasını görüntülemek için * https://creativecommons.org/licenses/by-sa/3.0/ * adresini ziyaret edin veya Creative Commons, 171 Second * Street, Suite 300, San Francisco, California 94105'e bir mektup gönderin, * AMERİKA BİRLEŞİK DEVLETLERİ. * */ithalat işleme.seri.*; //Seriyi kullanmak için seri kitaplığı içe aktarın (Arduino ile konuşmak için)import işleme.net.*; //Sunucuyu kullanmak için (internetle konuşmak için) ağ kitaplığını içe aktarın/* Seri Bağlantı Noktasıyla İlgili Değişkenler */int serialPortIndex = -1; // Serial.list() içinde kullandığımız seri bağlantı noktasının dizini listString commOptions; //Serial.list()'i depolayacak bir değişken, böylece her yeniden referans vermek istediğimizde seri portları sorgulamaya gerek kalmaz (yoklama arduino servolarında //atlamaya neden olur)Seri serialPort; //Bu çizim boyunca seri portu adreslenebilir yapar/* Graphic and Rendering Related Variables */PFont font; //yazı tipini genel yapar, böylece yalnızca bir kez yüklenmesi gerekir (Arial-72)/* Ağla İlgili Değişkenler */Server wServer; //Web isteklerini işleyen Sunucu port = 12345; //Sunucunun dinlediği port toint cycleCount = 0; //Çizim döngüsünün yürütülme sayısını sayar ("çalışan" metni // canlandırmak için kullanılır) /* Utility Variables */ PImage bg; //Arka plan görüntüsü şu anda \WEBB-background.png/* * Düğme İle İlgili Değişkenler * (düğmeler çok kabaca uygulanır, sınırlayıcı kutular saklanır ve grafik ve metin * arka plan görüntüsü üzerine çizilir) yani. düğme değişkenlerini taşımak düğmelerin görünümünü değiştirmez */Button comm1; Düğme iletişim2; Düğme iletişim3; Düğme iletişim4; //Doğru seri portu seçmek için butonlarButton up; Sağ düğme; Sol düğme; Düğme aşağı;//Robotun yanıt verip vermediğini test etmek için yön düğmeleriButton webServer; //WebSunucusunu başlatma düğmesi/* * her şeyi ayarlar */void setup() { frameRate(5); //Sisteme yük getirmemesi için çizimi biraz yavaşlatır bg = loadImage("WEBB-background.png"); //Arka plan resmini (çizim klasöründe saklanan) yükler boyut(700, 400); //Çizim penceresinin boyutunu ayarlar font = loadFont("ArialMT-72.vlw"); //Bu çizimde kullanacağımız yazı tipini yükler commOptions = Serial.list(); //Seri bağlantı noktalarını yoklar ve kullanılabilir bağlantı noktalarının bir listesini alır //(bunu yalnızca bir kez yapmak robotun her seferinde seğirmesini önler //seri bağlantı noktası sorgulanır) defineButtons(); //Her bir düğme için sınırlayıcı kutuları tanımlar arkaplan(bg); //Arka plan resmini boyar (bu resimde tüm düğme grafikleri bulunur)}/* Ana döngü çizimleri */void draw() { if(cycleCount==0){ //-- draw yordamlarını çağır drawCommBox(); //İletişim Kutusundaki (kutu 1) öğeleri çizer drawTestBox(); //Test Kutusundaki (kutu 2) tüm öğeleri çizer drawWebServerBox(); //WebSunucusu Kutusundaki (kutu 3) tüm elemanları çizer } //-- çalışma rutinlerini çağır pollWebServer(); //Ağ üzerinden herhangi bir istek gelip gelmediğini görmek için web sunucusunu yoklar}//-------------------------------- ----------------------------------------------//Başlamak çizim rutinleri (sadece kodun daha okunaklı olması için bölünür)/* * İletişim kutusundaki (kutu 1) öğeler için çizim güncelleme rutini (her döngüde yürütülür) */void drawCommBox(){ fill(0, 0, 0); //Dolguyu siyah olarak ayarla textFont(font, 15); //Yazı tipini doğru boyuta ayarlayın for(int i = 0; i 0){running = koşu + ".";} //nokta sayısı cycleCount'a bağlıdır if((cycleCount / 1) > 1){ koşu = koşu + ".";} if((cycleCount / 1) > 2){running = koşu + ".";} if((cycleCount / 1) > 3){cycleCount=0;} metin(çalışıyor, 520, 210); } cycleCount++; //cycleCount boyunca her seferinde bir artırılır} //Çizim sonu rutinleri//------------------------------ ----------------------------------//----------------- -------------------------------------------//Hizmet Başlangıcı rutinleri/ * * fareye her basıldığında mousePressed çağrılır. updateSerialPort(0);} //Serial.list() içindeki 0 dizinindeki comm bağlantı noktasında değişir else if(comm2.pressed()) {updateSerialPort(1);} //Serideki dizin 1'deki iletişim bağlantı noktasına değişir.list() else if(comm3.pressed()) {updateSerialPort(2);} // Serial.list() içindeki dizin 2'deki iletişim bağlantı noktasında değişir, yoksa if(comm4.pressed()) {updateSerialPort(3);} //Serial.list() içindeki dizin 3'teki comm bağlantı noktasında değişiklik yapar else if(up.pressed()) {sendRobotCommand("F", 5);} //Robotu 0,5 için İleri hareket ettirmek için bir komut gönderir saniye else if(left.pressed()) {sendRobotCommand("L", 5);} / /Robotu 0,5 saniye Sola hareket ettirmek için bir komut gönderir, else if(right.pressed()) {sendRobotCommand("R", 5);} //Robotu 0,5 saniye sağa hareket ettirmek için bir komut gönderir, yoksa if(aşağı. pressed()) {sendRobotCommand("B", 5);} //Robotu 0,5 saniyeliğine Geriye hareket ettirmek için bir komut gönderir, yoksa if(webServer.pressed()) {startWebServer();} //webServer cycleCount'u başlatır = 0; arkaplan(bg); //Arka plan görüntüsünü yeniden boyar (bu görüntünün üzerinde tüm düğme grafikleri vardır) draw();}/* * Bir kez çalıştırıldığında çağrılır, bekleyen bağlantı olup olmadığını görmek için Sunucuyu kontrol eder * bekleyen bir bağlantı varsa çeker isteği dışarı çıkarır ve fazladan metni çıkarmak için onu parseRequest(String) * rutinine iletir. Bu daha sonra uygun eylem yordamını çağırmak (yani robota komutları göndermek) için yorumRequest(String) yordamına gönderilir.* * Bilgisayar adresi ve bağlantı noktası bir web tarayıcısına girilerek bir İstek iletilir * Yerel makine için "https://127.0.0.1:12345/request?command=F&param1=100" * * Örnek İstek: * GET /request? command=F&param1=100 HTTP/1.1 * Kullanıcı Aracısı: Mozilla/5.0 (Windows; U; Windows NT 5.1; tr-US) AppleWebKit/525.19 (KHTML, Gecko gibi) * Kabul Et: *//* * Kabul Et-Dil: tr-TR, tr * Kabul-Karakter Seti: ISO-8859-1, *, utf-8 * Kabul-Kodlama: gzip, deflate, bzip2 * Ana Bilgisayar: 127.0.0.1:12345 * Bağlantı: Canlı Tut * * Örnek Yanıt (işlenen istek için) * HTTP/1.1 200 Tamam * Bağlantı: kapat * İçerik Türü: metin/html * * komut: F param1: 100 */void pollWebServer(){ if(wServer != null){ //WebSunucusu ise Client request çalıştırıyor = wServer.available(); //bir sonraki İstemciyi //sunucuya yükle (bekleyen istek yoksa null) if(request != null){ //istek işlemi varsa String fullRequest = request.readString(); //İstek içeriğini bir dizge olarak depola String ip = request.ip(); //Müşterilerin ip adreslerini string olarak depola String requestString = parseRequest(fullRequest.toUpperCase()); //Bütün ekstra bilgileri ayıklayın //yalnızca istek dizesini bırakarak (GET'ten sonraki metin) //(dize testini kolaylaştırmak için büyük harfe geçer) if(requestString.indexOf("REQUEST?") != -1){ //Talebin "REQUEST?" olup olmadığını kontrol eder. String yanıtı = yorumRequest(requestString); //Talebi istek yorumlayıcısına gönderir request.write("HTTP/1.1 200 Tamam\nBağlantı: kapat\nİçerik Türü: metin/html\n\n" + yanıt); // İsteğin işlendiğini söylemek için bir 200 yanıtı gönderir // ve yanıt olarak "cevap" dizesini wServer.disconnect(request); //İstemcinin bağlantısını keser }else if(requestString.indexOf("CONTROLPAGE") != -1){ //Eğer istek kontrol web sayfası için ise String webPageArray = loadStrings("WEBB-ControlPage.html"); //Kontrol web sayfasını \data\WEBB-ControlPage.html'den yükler //(bir satır dizisi olarak yüklenir) String webPage =""; //Düzenlemeyi kolaylaştırmak için web sayfası //satır sonları ile bırakılmıştır, bu nedenle bu for döngüsü bu satırları for(int i = 0; i portIndex){ //geçen portIndex Serial.list('te geçerli bir dizinse)) //(yani iki kişilik bir listede üçüncü seçenek değil) serialPortIndex = portIndex; //serialPortIndex değişkenini yeni seriport dizinine ayarlayın //(bu, aktif bağlantı noktasının yanındaki noktayı görüntülemek için kullanılır) } if(serialPortIndex != -1){ //daha önce bir bağlantı noktasının seçildiğinden emin olmak için kontrol edin (serialPort != null){serialPort.stop();} //eğer bir Seri port zaten kullanılıyorsa, yenisini yüklemeden önce onu durdurun serialPort = new Serial(bu, Serial.list()[serialPortIndex], 9600); //Arduino 9600 Baud ile iletişim kurmak için yeni bir Seri nesne oluşturun }}/* * Bir istek dizesi alır (örn: "request?command=F&param1=100") ve * ve param1 komutunu çıkarır ve onu arduino (burada ekstra parametreler veya arduino olmayan komutlar eklenecek) */String yorumRequest(String requestString){ String returnValue = "OK"; // Bir returnValue değişkeni String komutu hazırlar; //Sonraki üç satır, "command="'den sonraki değeri çıkarır //(ekstra satır, komut parametresinin isteğin // sonunda olması ve ardından bir & if(requestString.indexOf("COMMAND=") gelmemesi durumundadır.) != -1){ komut = 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; //Sonraki üç satır "param1='den sonraki değeri çıkarır " //(ekstra satır, komut parametresinin //isteğin sonunda olması ve ardından bir & if(requestString.indexOf("PARAM1=") != -1){ param1String = requestString.substring olmaması durumundadır (requestString.indexOf("PARAM1=") + "PARAM1=".length());} else{param1String = "0";} if(param1String.indexOf("& ") != -1){ param1String = param1String.substring(0, param1String.indexOf("&"));} else{param1String = param1String;} int param1 = Integer.parseInt(param1String); //param1 Dizesini bir tamsayı sendRobotCommand(komut, param1); //Komutu, Arduino'ya gönderen yordama gönderir returnValue = "komut: " + komut + " param1: " + param1; //şu anda sadece komut ayrıştırılır ama // html olarak gönderilir, böylece biçimlendirme dahil edilebilir return returnValue;}/* * Bir komut (şu anda bir harf) ve bir parametre (bir bayt 0-255) alır ve arduino * dinleyen ve dinlenen * Şu Anda Desteklenen Komutlar * F -*/void sendRobotCommand(String command, int param1){ println("command: " + command + " time: " + param1); String checkString = "AAA"; if(serialPort != null){ serialPort.write(checkString + komut); serialPort.write(byte(param1)); }}//Kurulum sonu/çok yaygın olarak adlandırılmayan rutinler//----------------------------------- -------------------------------------------------- // bazı değişikliklerle işleme.org örneğinden örnek düğme ve RectButton kodu //çoğunlukla animasyonu basitleştirmek ve kaldırmak için yapılmıştır//https://processing.org/learning/topics/buttons.html (2008-09-23) sınıf Düğme{ int x, y; int genişlik, yükseklik; Düğme(int ix, int iy, int iwidth, int iheight) { x = ix; y = ben; genişlik = genişlik; yükseklik = yükseklik; } boolean press() { if(overRect()) { return true; } else { return false;} } boolean overRect() { if (mouseX >= x && mouseX = y && mouseY <= y+height) { return true; } başka { false döndür; } }}

Adım 5: Yazılım - (Web sayfası)

Yazılım - (Web sayfası)
Yazılım - (Web sayfası)
Yazılım - (Web sayfası)
Yazılım - (Web sayfası)
Yazılım - (Web sayfası)
Yazılım - (Web sayfası)

Neredeyse bitirdik, geriye kalan tek şey robotunuzla konuşmak. Konuşmak İçin: (yerel ağ üzerinden -windows-)

  • Dizüstü bilgisayarın yerel ip adresini keşfedin. Bunu yapmak için "Başlat\Programlar\Donatılar\Komut İstemi"ne gidin ve terminal penceresi açıldığında "ipconfig" yazın. "IP Adresi" yazın ve yerel ağınızdaki başka bir bilgisayara gidin.
  • Bir web tarayıcısı açın, "https:// (robot bilgisayar ipi):12345/ControlPage.html yazın.
  • Kontrol web sayfası yüklenmeli, "IP Adresi" kutusuna robot bilgisayarların ipini yazın.
  • Robotunuzu kontrol etmeye başlayın.

Konuşmak İçin: (internet üzerinden) Artık yerel olarak çalıştırdığınıza göre, internet üzerinden konuşmasını sağlamak sadece birkaç kısa adım ötede.

  • (en zor adım) Bağlantı Noktası Yönlendirmeyi Ayarlayın - Bilgisayarınızın yalnızca yerel ağ yerine interneti dinlemesi gerekir. Bunu yapmak için yönlendiricinize belirli istekleri robotu kontrol eden bilgisayara iletmesini söylemeniz gerekir. Bu biraz karmaşıktır ve bu Eğitilebilirliğin kapsamının çok ötesine geçer. Ancak PortForward.com'u ziyaret ederseniz, yönlendiricinizi yapılandırma hakkında bilmeniz gereken her şeyi size verecektir (12345 numaralı bağlantı noktasını robot dizüstü bilgisayarınıza iletmeniz gerekir)
  • Ardından internet IP'nizi keşfedin (WhatIsMyIP.com'u ziyaret edin)
  • Sonunda skype'ı başlatın ve bir görüntülü arama yapın ve konuştuğunuz kişiyi "https://(internet IP):12345/ControlPage.html" adresini ziyaret etmeye yönlendirin.
  • Kontrol web sayfasındaki "IP Adresi" kutusuna internet IP'sini yazın ve Web Bağlantılı Robotunuz uzaktan sürülür.

6. Adım: Tamamlandı

bitmiş
bitmiş

işte bu kadar. Umarım robotunuzu uzaktan sürerken iyi vakit geçiriyorsunuzdur. Yazılım veya donanımla ilgili herhangi bir sorununuz varsa, yorum bırakmaktan çekinmeyin, size yardımcı olmaya çalışacağım. Daha güzel projelere göz atmak isterseniz şu adresi ziyaret edin: oomlout.com

Önerilen: