Devreler

Bir İnternet Kontrollü Mars Rover Nasıl Oluşturulur: 4 Adım (Resimlerle)

Как устроена IT-столица мира / Russian Silicon Valley (English subs)

Как устроена IT-столица мира / Russian Silicon Valley (English subs)

İçindekiler:

Anonim

Bu Eğitim Tablosu, internet kontrollü tüm arazi robotlarını oluşturmak için bilmeniz gereken her şeyi açıklayacaktır. Bu sadece Mars Merak gezici üzerinde modellenmiştir. Bu robot, herhangi bir internet özellikli cihazdan kontrol edilebilir, böylece bu şeyi gezegenin diğer tarafında (veya yalnızca internete sahipse Mars) kontrol edebilirsiniz. Bu projenin tümü şaşırtıcı Electric Imp (internete her şeyi bağlamanıza izin veren SD kart boyutunda bir cihaz) ve bir Arduino tarafından desteklenmektedir.
Bu proje, Dundee'deki Ürün Tasarım Araştırma Stüdyosu'nda Michael Shorter, Tom Metcalfe, Jon Rogers ve Ali Napier tarafından yaratılmıştır.

Neye ihtiyacınız olacak:
6WD Wild Thumper Arduino Şasi - http://robosavvy.com/store/product_info.php/products_id/1167?osCsid=5e99bbe12a25938cbf4267ea6bc497ea
Wild Thumper Arduino Denetleyici - http://robosavvy.com/store/product_info.php/products_id/1168
LiPo Pil - 7.2V 5000mAh
3mm Akrilik
5mm Akrilik
10cm çapında boşaltma borusu
35mm çaplı boru
alüminyum çubuklar
Electric Imp
Elektrik Imp kesme tahtası
Bazı aktarma kabloları
Kaykay kavrama bandı

Gereçler:

Adım 1: Rover'ı Oluşturma

Ekli, ihtiyacınız olan tüm parçaları lazerle kesmenizi sağlayan Adobe Illustrator dosyalarıdır. Toplamda üç dosya var. Tüm 3mm kalınlıktaki parçalar için bir dosya, biri 5mm kalınlıktaki parçalar için bir tane ve tutma bandı parçaları için bir dosya.
Umarım aşağıdaki resimler, Wild Thumper 6WD'niz için yeni kasayı nasıl takacağınız konusunda iyi bir fikir verir.
Electric Imp'in Arduino'ya kablo bağlantısı kolaydır:
Küçük pim 1 - Arduino pim 10
Küçük pim 2 - Arduino pimi 9
Küçük pim 8 - Arduino 12 pimi
Küçük pim 9 - Arduino pim 2
Electric Imp ayrıca breakout panonuza ve toprağa bağlı olarak 5V veya 3.3V'a ihtiyaç duyacaktır.
Açmayı ve kapatmayı kolaylaştırmak için bataryaya uygun bir geçiş anahtarı takmaya karar verdim.

Adım 2: Nesnelerin Web Tarafı

İşte size bazı kodlar….
İmp için sincap (artık bulamayacağım çevrimiçi bir kaynaktan uyarlanmış…):
================================================
server.show ( “”);
// gezici için uzaktan kumanda
ledState <- 0;
işlev yanıp sönme ()
{
// Durumu değiştir
ledState = ledState? 0: 1;
server.log (“ledState val:“ + ledState);
// Durumu pime yansıt
hardware.pin9.write (ledState);
}
// LED kontrol kanalı için giriş sınıfı
class inputHTTP, InputPort'u genişletir
{
name = “güç kontrolü”
type = “number”
fonksiyon seti (httpVal)
{
server.log (“Alınan val:“ + httpVal);
eğer (httpVal == 1) {
hardware.pin9.write (1);
imp.sleep (0.1);
hardware.pin9.write (0);
}
Aksi takdirde (httpVal == 2) {
hardware.pin8.write (1);
imp.sleep (0.1);
hardware.pin8.write (0);
}
Aksi takdirde (httpVal == 3) {
hardware.pin2.write (1);
imp.sleep (0.1);
hardware.pin2.write (0);
}
Aksi takdirde (httpVal == 4) {
hardware.pin1.write (1);
imp.sleep (0.1);
hardware.pin1.write (0);
}
Başka{
;
}
}
}
işlevi bekçi köpeği () {
imp.wakeup (60, bekçi);
server.log (httpVal);
}
// her 60 saniyede bir watchdog yazmaya başla
// izleme ();
// İğneleri içten yukarı çekerek açık tahliye çıkışı olarak yapılandırma
hardware.pin9.configure (DIGITAL_OUT_OD_PULLUP);
hardware.pin8.configure (DIGITAL_OUT_OD_PULLUP);
hardware.pin2.configure (DIGITAL_OUT_OD_PULLUP);
hardware.pin1.configure (DIGITAL_OUT_OD_PULLUP);
// Sunucuya kayıt olun
imp.configure (“Rover İçin Reomote Kontrolü”, inputHTTP (), );
================================================


Arduino kodu (teşekkürler Chris Martin!)…
================================================
/*
AnalogReadSerial
Pim 0'daki bir analog girişi okur, sonucu seri monitöre yazdırır.
Potansiyometrenin orta pimini pim A0'a, dış pim + 5V'a ve toprağa bağlayın.
Bu örnek kod kamu malıdır.
*/
int pinf = 2;
int pinl = 12;
int pinr = 10;
int pinb = 9;
#define LmotorA 3 // Sol motor H köprüsü, A girişi
#define LmotorB 11 // Sol motor H köprüsü, B girişi
#define RmotorA 5 // Sağ motor H köprüsü, A girişi
#define RmotorB 6 // Sağ motor H köprüsü, B girişi
#define v 255
#Dahil etmek
// Servo myservo;
// int led = 12;
int pos = 0;
// reset tuşuna bastığınızda kurulum rutini bir kez çalışır:
geçersiz kurulum () {
//myservo.attach(9);
// pinMode (led, ÇIKIŞ);
pinMode (pinf, GİRİŞ); // seri iletişimi saniyede 9600 bit ile başlat:
pinMode (pinl, GİRİŞ);
pinMode (pinr, GİRİŞ);
pinMode (pinb, GİRİŞ);
Serial.begin (9600);
digitalWrite (pinf, DÜŞÜK);
digitalWrite (pinl, DÜŞÜK);
digitalWrite (pinr, DÜŞÜK);
digitalWrite (pinb, DÜŞÜK);
//288000
// bu seri monitörde farklı mı, yukarı mı aşağı mı olduğundan emin değil
// Seri.begin (14400);
}
int 1 = 0;
int rls = 0;
int al = 0;
// döngü yordamı sonsuza dek tekrar tekrar tekrar çalışır:
boşluk döngüsü () {
// analog pim 0'daki girişi okuyun:
int sensorValue1 = digitalRead (pinf);
int sensorValue2 = digitalRead (pinl);
int sensorValue3 = digitalRead (pinr);
int sensorValue4 = digitalRead (pinb);
// okuduğunuz değeri yazdırın:
Serial.print (sensorValue1);
Seri.print (”:“);
Serial.print (sensorValue2);
Seri.print (”:“);
Serial.print (sensorValue3);
Seri.print (”:“);
Serial.println (sensorValue4);
gecikmesi (25); // kararlılık için okumalar arasında gecikme
eğer (sensorValue1 == 1) {
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 120);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 120);
gecikme (500);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// gecikme (500);
}
Başka{
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
eğer (sensorValue2 == 1) {
// digitalWrite (led, YÜKSEK);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 250);
analogWrite (LmotorA, 250);
analogWrite (LmotorB, 0);
gecikme (100);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// gecikme (500);
}
Başka
{
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
eğer (sensorValue4 == 1) {
// digitalWrite (led, YÜKSEK);
analogWrite (RmotorA, 250);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 250);
gecikme (100);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// gecikme (500);
}
Başka
{
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
eğer (sensorValue3 == 1) {
// digitalWrite (led, YÜKSEK);
analogWrite (RmotorA, 120);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 120);
analogWrite (LmotorB, 0);
gecikme (500);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// gecikme (500);
}
Başka
{
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
}
================================================

Şimdi kullanıcı arayüzü için. Ekli klasörü açın; İhtiyaç duyduğunuz tüm kodlar orada olmalıdır. Yapmanız gereken tek şey, benzersiz Electric Imp API'nize, uygun alandaki index.html dosyasına yapıştırmak. Bunu dosyanın içinde etiketledim.

Adım 3: Bazı Görseller Verelim

Eski bir iPhone'u Mars'ın görüntülerini gösteren ana üniteye koymaya karar verdim. Bu herhangi bir şey olabilir, hatta bir video kamera, böylece Skype veya Facetime ile nereye gittiğinizi görebilirsiniz.

Adım 4: Haydi Başlayalım!

SWSW 2013'te bir NASA etkinliğinde takılan The Mini Mars Rover'ın hızlı bir videosu!

SXSW, Vimeo'da Michael'dan daha kısa.

Bu proje ile ilgili en önemli şey, robotun davranışlarını veya arayüzünü değiştirmek için kodu değiştirmek kolay olmasıdır.
Keyfini çıkarın!
M

Finalisti
Uzaktan Kumanda Yarışması