Vezja

Kako zgraditi internetni kontrolirani Mars Rover: 4 koraka (s slikami)

Watch NASA's Perseverance Rover Launch to Mars!

Watch NASA's Perseverance Rover Launch to Mars!

Kazalo:

Anonim

Ta Instructable vam bo razložil vse, kar morate vedeti, da boste lahko zgradili internetnega robota, ki bo nadzorovan. Ta je zgolj modeliran na Mars Curiosity roverju. Ta robot je mogoče upravljati s katerokoli napravo, ki omogoča internet, tako da lahko nadzirate to stvar na drugi strani planeta (ali Mars, če je imel samo internet). Ta projekt je napajan z neverjetno Electric Imp (napravo velikosti SD, ki omogoča povezavo z internetom) in Arduinom.
Projekt sta ustvarila Michael Shorter, Tom Metcalfe, Jon Rogers in Ali Napier v produkcijskem raziskovalnem studiu Dundee.

Kaj potrebujete:
6WD Wild Thumper podvozje Arduino - http://robosavvy.com/store/product_info.php/products_id/1167?osCsid=5e99bbe12a25938cbf4267ea6bc497ea
Wild Thumper Arduino krmilnik - http://robosavvy.com/store/product_info.php/products_id/1168
LiPo baterija - 7.2V 5000mah
3mm akril
5 mm akril
Odvodno cev premera 10 cm
Cevi premera 35 mm
aluminijaste palice
Električni imp
Električna plošča za izmet
Nekateri skakalni kabli
Snemalni trak za rolko

Dobave:

Korak 1: Gradnja Roverja

Priložene so datoteke Adobe Illustrator, ki vam omogočajo lasersko rezanje vseh delov, ki jih potrebujete. Skupaj je na voljo tri datoteke. Ena datoteka za vse 3 mm debele dele, enega za 5 mm debele dele in enega za dele z grip trakom.
Upajmo, da slike spodaj dajejo dobro predstavo o tem, kako vstaviti novo podvozje za vaš Wild Thumper 6WD skupaj.
Ožičenje Electric Imp za Arduino je enostavno:
Imp pin 1 - Arduino pin 10
Imp pin 2 - Arduino zatič 9
Imp pin 8 - Arduino zatič 12
Imp pin 9 - Arduino zatič 2
Električni Imp bo potreboval bodisi 5V ali 3.3V, odvisno od vaše breakout krovu, kot tudi tla.
Odločila sem se, da v žici preklopite žico v skladu z akumulatorjem, da bi bilo enostavno vklopiti in izklopiti.

2. korak: Spletna stran stvari

Tukaj je nekaj kode za vas.
Veverica za imp (prilagojeno iz spletnega vira, ki ga ne morem več najti…):
================================================
server.show (“”);
// daljinski upravljalnik za rover
ledState <- 0;
funkcija blink ()
{
// Spremeni stanje
ledState = ledState? 0: 1;
server.log (“ledState val:“ + ledState);
// Reflect stanje na pin
hardware.pin9.write (ledState);
}
// vhodni razred za LED kontrolni kanal
class inputHTTP razširja InputPort
{
ime = "nadzor moči"
type = “number”
nabor funkcij (httpVal)
{
server.log (“Prejeto val:“ + httpVal);
če (httpVal == 1) {
hardware.pin9.write (1);
imp.sleep (0.1);
hardware.pin9.write (0);
}
sicer če (httpVal == 2) {
hardware.pin8.write (1);
imp.sleep (0.1);
hardware.pin8.write (0);
}
sicer če (httpVal == 3) {
hardware.pin2.write (1);
imp.sleep (0.1);
hardware.pin2.write (0);
}
sicer če (httpVal == 4) {
hardware.pin1.write (1);
imp.sleep (0.1);
hardware.pin1.write (0);
}
else {
;
}
}
}
nadzornik funkcij () {
imp.wakeup (60, nadzornik);
server.log (httpVal);
}
// začetek nadzora nad vsakimi 60 sekundami
// watchdog ();
// Konfiguriramo zatiče kot odprti izhodni izhod z notranjim dvigom
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 s strežnikom
imp.configure (“Reomote kontrola za Rover”, inputHTTP (), );
================================================


Arduino koda (hvala Chris Martin!)…
================================================
/*
AnalogReadSerial
Prebere analogni vhod na nožici 0, natisne rezultat na serijski monitor.
Pritrdite sredinski zatič potenciometra na zatič A0, zunanji zatiči pa na + 5V in ozemite.
Ta primerna koda je v javni domeni.
*/
int pinf = 2;
int pinl = 12;
int pinr = 10;
int pinb = 9;
#define LmotorA 3 // Levi motor H most, vhod A
#define LmotorB 11 // Levi motor H most, vhod B
#define RmotorA 5 // Desni motor H most, vhod A
#definirati RmotorB 6 // Desni most H motorja, vhod B
#define v 255
#include
// Servo myservo;
// int led = 12;
int pos = 0;
// nastavitveni program teče enkrat, ko pritisnete reset:
void setup () {
//myservo.attach(9);
// pinMode (led, OUTPUT);
pinMode (pinf, INPUT); // inicializiranje serijske komunikacije pri 9600 bitov na sekundo:
pinMode (pinl, INPUT);
pinMode (pinr, INPUT);
pinMode (pinb, INPUT);
Serial.begin (9600);
digitalWrite (pinf, LOW);
digitalWrite (pinl, LOW);
digitalWrite (pinr, LOW);
digitalWrite (pinb, LOW);
//288000
// na serijskem monitorju se to ne razlikuje, če je gor ali dol
// Serial.begin (14400);
}
int lls = 0;
int rls = 0;
int al = 0;
// rutina zanke se vedno znova zažene:
void loop () {
// bere vhod za analogni pin 0:
int sensorValue1 = digitalRead (pinf);
int sensorValue2 = digitalRead (pinl);
int sensorValue3 = digitalRead (pinr);
int sensorValue4 = digitalRead (pinb);
// natisne vrednost, ki jo berete:
Serial.print (senzorValue1);
Serial.print (”:“);
Serial.print (senzorValue2);
Serial.print (”:“);
Serial.print (senzorValue3);
Serial.print (”:“);
Serial.println (senzorValue4);
zamuda (25); // zamik med branjem za stabilnost
če (sensorValue1 == 1) {
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 120);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 120);
zamuda (500);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// zamuda (500);
}
else {
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
če (sensorValue2 == 1) {
// digitalWrite (LED, HIGH);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 250);
analogWrite (LmotorA, 250);
analogWrite (LmotorB, 0);
zamuda (100);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// zamuda (500);
}
drugače
{
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
če (sensorValue4 == 1) {
// digitalWrite (LED, HIGH);
analogWrite (RmotorA, 250);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 250);
zamuda (100);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// zamuda (500);
}
drugače
{
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
če (sensorValue3 == 1) {
// digitalWrite (LED, HIGH);
analogWrite (RmotorA, 120);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 120);
analogWrite (LmotorB, 0);
zamuda (500);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// zamuda (500);
}
drugače
{
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
}
================================================

Zdaj za uporabniški vmesnik. Razširite priloženo mapo; vsa potrebna koda mora biti tam. Vse kar morate storiti je, da prilepite svoj edinstven Electric Imp API v datoteko index.html v ustreznem prostoru. To sem označil v datoteki.

3. korak: Dajmo nekaj vizualij

Odločil sem se, da bom v glavni enoti postavil stari iPhone, ki bo prikazoval posnetke Marsa. To je lahko karkoli, celo video kamera, tako da lahko vidite, kje vozite s storitvijo Skype ali Facetime …

4. korak: Gremo!

Tukaj je kratek video posnetka Mini Mars Roverja, ki se bo družil na dogodku NASA na SWSW 2013!

SXSW rover od michael krajši na Vimeo.

Najboljša stvar pri tem projektu je, da je preprosto prilagoditi kodo za spremembo vedenja ali vmesnika robota.
Uživajte!
M

Finalist v
Tekmovanje na daljavo