Krugovi

Kako izgraditi internet kontrolirani Mars rover: 4 koraka (sa slikama)

New Mars Rover WEB

New Mars Rover WEB

Sadržaj:

Anonim

Ovaj Instructable će vam objasniti sve što trebate znati da biste izgradili internet robota koji kontrolira teren. Ovo je slučajno modelirano na roveru Mars Curiosity. Ovaj robot je moguće upravljati s bilo kojeg uređaja s omogućenom internetskom vezom, tako da možete kontrolirati tu stvar na drugoj strani planeta (ili Mars ako je samo imao internet). Ovaj projekt pokreće nevjerojatan Electric Imp (uređaj veličine SD kartice koji omogućuje povezivanje s internetom) i Arduino.
Ovaj projekt izradili su Michael Shorter, Tom Metcalfe, Jon Rogers i Ali Napier u produkcijskom istraživačkom studiju Dundee.

Što će vam trebati:
6WD Wild Thumper Arduino šasija - http://robosavvy.com/store/product_info.php/products_id/1167?osCsid=5e99bbe12a25938cbf4267ea6bc497ea
Wild Thumper Arduino kontroler - http://robosavvy.com/store/product_info.php/products_id/1168
LiPo baterija - 7.2V 5000mah
3 mm akril
5 mm akril
Odvodna cijev promjera 10 cm
Cijev promjera 35 mm
aluminijske šipke
Electric Imp
Električna impulsna ploča
Neki kratkospojnici
Traka za držanje skejtborda

Pribor:

Korak 1: Izgradnja rovera

Priloženi su Adobe Illustrator datoteke kako bi vam omogućili da izrežete sve dijelove koje trebate. Ukupno su tri datoteke. Jedna datoteka za sve dijelove debljine 3 mm, jednu za dijelove debljine 5 mm i jednu za dijelove trake za držanje.
Nadam se da slike ispod daju dobru ideju o tome kako spojiti novu šasiju za vaš Wild Thumper 6WD zajedno.
Ožičenje električnog impulsa za Arduino je jednostavno:
Imp pin 1 - Arduino pin 10
Zatik 2 - Arduino pin 9
Zatik 8 - Arduino pin 12
Imp pin 9 - igla Arduino 2
Električni Imp će također trebati bilo 5V ili 3.3V ovisno o vašem prebacivanje odbora, kao i zemlju.
Odlučio sam se spojiti u prekidač u skladu s baterijom kako bi se olakšalo uključivanje i isključivanje.

Korak 2: Web stranica stvari

Evo neke šifre za vas….
Vjeverica za imp (prilagođeno iz online izvora koji više ne mogu pronaći …):
================================================
server.show ( „”);
// daljinski upravljač za rover
ledState <- 0;
funkcija treperi ()
{
// Promjena stanja
ledState = ledState? 0: 1;
server.log (“ledState val:“ + ledState);
// Reflect stanje na pin
hardware.pin9.write (ledState);
}
// klasa ulaza za LED kontrolni kanal
class inputHTTP proširuje InputPort
{
name = "kontrola snage"
type = "number"
skup funkcija (httpVal)
{
server.log (“Primljen val:“ + httpVal);
ako (httpVal == 1) {
hardware.pin9.write (1);
imp.sleep (0,1);
hardware.pin9.write (0);
}
inače ako (httpVal == 2) {
hardware.pin8.write (1);
imp.sleep (0,1);
hardware.pin8.write (0);
}
inače ako (httpVal == 3) {
hardware.pin2.write (1);
imp.sleep (0,1);
hardware.pin2.write (0);
}
inače ako (httpVal == 4) {
hardware.pin1.write (1);
imp.sleep (0,1);
hardware.pin1.write (0);
}
drugo{
;
}
}
}
funkcija watchdog () {
imp.wakeup (60, watchdog);
Server.log (httpVal);
}
// pokrenite watchdog pisati svakih 60 sekundi
//pas čuvar();
// Konfigurirati pinove kao otvoreni izlazni odvod s unutarnjim povlačenjem
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);
// Registrirajte se na poslužitelju
imp.configure ("Reomote kontrola za rover", inputHTTP (), );
================================================


Arduino kod (hvala Chris Martin!)
================================================
/*
AnalogReadSerial
Čita analogni ulaz na pin 0, ispisuje rezultat na serijski monitor.
Pričvrstite središnju osovinu potenciometra na pin A0, a vanjski pinovi na + 5V i uzemljite.
Ovaj je primjer u javnoj domeni.
*/
int pinf = 2;
int pinl = 12;
int pinr = 10;
int pinb = 9;
#define LmotorA 3 // lijevi motor H most, ulaz A
#define LmotorB 11 // lijevi motor H most, ulaz B
#define RmotorA 5 // Desni motor H most, ulaz A
#definirati RmotorB 6 // Desni motor H most, ulaz B
#define v 255
#include
// Servo myservo;
// int led = 12;
int pos = 0;
// rutina za postavljanje se izvodi jednom kada pritisnete reset:
void setup () {
//myservo.attach(9);
// pinMode (LED, OUTPUT);
pinMode (pinf, INPUT); // inicijalizira serijsku komunikaciju pri 9600 bita u sekundi:
pinMode (pinl, INPUT);
pinMode (pinr, INPUT);
pinMode (pinb, INPUT);
Serial.begin (9600);
digitalWrite (pinf, PO);
digitalWrite (pinl, PO);
digitalWrite (pinr, PO);
digitalWrite (pinb, PO);
//288000
// ovo se razlikuje na serijskom monitoru koji nije siguran je li gore ili dolje
// Serial.begin (14400);
}
int lls = 0;
int rls = 0;
int al = 0;
// rutina petlje se stalno ponavlja:
void loop () {
// pročitajte ulaz na analognom pinu 0:
int sensorValue1 = digitalRead (pinf);
int sensorValue2 = digitalRead (pinl);
int sensorValue3 = digitalRead (pinr);
int sensorValue4 = digitalRead (pinb);
// ispisuje vrijednost koju ste pročitali:
Serial.print (sensorValue1);
Serial.print (”:“);
Serial.print (sensorValue2);
Serial.print (”:“);
Serial.print (sensorValue3);
Serial.print (”:“);
Serial.println (sensorValue4);
kašnjenje (25); // kašnjenje između čitanja za stabilnost
ako (sensorValue1 == 1) {
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 120);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 120);
kašnjenje (500);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// kašnjenje (500);
}
drugo{
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
ako (sensorValue2 == 1) {
// digitalWrite (LED, HIGH);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 250);
analogWrite (LmotorA, 250);
analogWrite (LmotorB, 0);
kašnjenje (100);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// kašnjenje (500);
}
drugo
{
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
ako (sensorValue4 == 1) {
// digitalWrite (LED, HIGH);
analogWrite (RmotorA, 250);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 250);
kašnjenje (100);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// kašnjenje (500);
}
drugo
{
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
ako (sensorValue3 == 1) {
// digitalWrite (LED, HIGH);
analogWrite (RmotorA, 120);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 120);
analogWrite (LmotorB, 0);
kašnjenje (500);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// kašnjenje (500);
}
drugo
{
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
}
================================================

Sada za korisničko sučelje. Raspakirajte mapu u privitku; sav potreban kod bi trebao biti tamo. Sve što trebate učiniti je zalijepiti u svoj jedinstveni Electric Imp API u index.html datoteku u odgovarajućem prostoru. To sam označio unutar datoteke.

Korak 3: Dajmo neke slike

Odlučio sam staviti stari iPhone u glavnu jedinicu s prikazom snimke Marsa. To može biti bilo što, čak i videokamera kako biste mogli vidjeti gdje vozite putem usluge Skype ili Facetime …

Korak 4: Hajde da se krećemo!

Evo kratkog videozapisa o Mini Mars Roveru koji se družio na NASA-inom događaju na SWSW-u 2013!

SXSW rover od Michaela kraći na Vimeo.

Velika je stvar u ovom projektu što je lako podesiti kod za promjenu ponašanja ili sučelja robota.
Uživati!
M

Finalist u
Natječaj za daljinsko upravljanje