Kredsløb

Sådan opbygges en internetstyret Mars Rover: 4 trin (med billeder)

Insideeus - Ecstasy (Official Video)

Insideeus - Ecstasy (Official Video)

Indholdsfortegnelse:

Anonim

Denne instruktør vil forklare alt, hvad du behøver at vide for at opbygge en internetstyret all terrain robot. Denne ene tilfældigvis er modelleret på Mars Curiosity Rover. Denne robot kan styres fra enhver internetaktiveret enhed, så du kan styre denne ting på den anden side af planeten (eller Mars, hvis den kun havde internettet). Dette projekt er alle drevet af den fantastiske Electric Imp (en SD-kortstor enhed, der giver dig mulighed for at oprette forbindelse til internettet) og en Arduino.
Dette projekt blev skabt af Michael Shorter, Tom Metcalfe, Jon Rogers og Ali Napier på Product Design Research Studio, Dundee.

Hvad du skal bruge:
6WD Wild Thumper Arduino Chassis - http://robosavvy.com/store/product_info.php/products_id/1167?osCsid=5e99bbe12a25938cbf4267ea6bc497ea
Wild Thumper Arduino Controller - http://robosavvy.com/store/product_info.php/products_id/1168
LiPo batteri - 7.2V 5000mah
3mm akryl
5mm akryl
10cm diameter afløbsrør
35 mm diameter rør
aluminium stænger
Elektrisk imp
Elektrisk imp breakout bord
Nogle jumperkabler
Skateboard greb

forsyninger:

Trin 1: Opbygning af Rover

Vedhæftet er Adobe Illustrator-filerne, så du kan laserskære alle de dele, du har brug for. Der er i alt tre filer. En fil til alle de 3 mm tykke dele, en til de 5 mm tykke dele og en til greb tape dele.
Forhåbentlig billederne nedenfor giver en god ide om, hvordan du holder det nye chassis til din Wild Thumper 6WD sammen.
Ledningen af ​​Electric Imp til Arduino er let:
Imp pin 1 - Arduino pin 10
Imp pin 2 - Arduino pin 9
Imp pin 8 - Arduino pin 12
Imp pin 9 - Arduino pin 2
Electric Imp vil også have brug for enten 5V eller 3,3V afhængigt af dit breakout bord såvel som jorden.
Jeg besluttede at wire i en skiftekontakt i tråd med batteriet for at gøre det nemt at tænde og slukke.

Trin 2: Webens side af ting

Her er nogle kode til dig ….
Ekorn til imp (tilpasset fra en online kilde, som jeg ikke længere kan finde …):
================================================
server.show ( ””);
// fjernbetjening til rover
ledState <- 0;
funktion blink ()
{
// Skift tilstand
ledState = ledState? 0: 1;
server.log ("ledState val:" + ledState);
// Reflektere tilstanden til stiften
hardware.pin9.write (ledState);
}
// input klasse til LED kontrol kanal
klasse inputHTTP udvider InputPort
{
name = "power control"
type = "nummer"
funktionssæt (httpVal)
{
server.log ("Modtaget val:" + httpVal);
hvis (httpVal == 1) {
hardware.pin9.write (1);
imp.sleep (0,1);
hardware.pin9.write (0);
}
ellers hvis (httpVal == 2) {
hardware.pin8.write (1);
imp.sleep (0,1);
hardware.pin8.write (0);
}
ellers hvis (httpVal == 3) {
hardware.pin2.write (1);
imp.sleep (0,1);
hardware.pin2.write (0);
}
ellers hvis (httpVal == 4) {
hardware.pin1.write (1);
imp.sleep (0,1);
hardware.pin1.write (0);
}
andet{
;
}
}
}
funktion vagthund () {
imp.wakeup (60, watchdog);
server.log (httpVal);
}
// start watchdog skrive hvert 60 sekund
//vagthund();
// Konfigurer stifter som en åben afløbsudgang med intern pull-up
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);
// Tilmeld dig med serveren
imp.configure ("Reomote Control for Rover", inputHTTP (), );
================================================


Arduino kode (tak Chris Martin!) …
================================================
/*
AnalogReadSerial
Læser en analog indgang på pin 0, udskriver resultatet til seriel skærmen.
Fastgør centrertiftet på et potentiometer til pin A0, og udvendige stifter til + 5V og jord.
Denne eksempelkode er i det offentlige domæne.
*/
int pinf = 2;
int pinl = 12;
int pinr = 10;
int pinb = 9;
#define LmotorA 3 // Venstre motor H bro, indgang A
#define LmotorB 11 // Venstre motor H bro, indgang B
#define RmotorA 5 // Højre motor H bro, indgang A
#define RmotorB 6 // Højre motor H bro, indgang B
#define v 255
#omfatte
// Servo myservo;
// int led = 12;
int pos = 0;
// opsætningsrutinen kører en gang, når du trykker på reset:
void setup () {
//myservo.attach(9);
// pinMode (led, OUTPUT);
pinMode (pinf, INPUT); // initialisere seriel kommunikation ved 9600 bits per sekund:
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
// Dette er forskelligt på seriel skærmen, ikke sikker på om den er op eller ned
// Serial.begin (14400);
}
int lls = 0;
int rls = 0;
int al = 0;
// loop-rutinen kører igen og igen for evigt:
void loop () {
// læs indgangen på analog pin 0:
int sensorValue1 = digitalRead (pinf);
int sensorValue2 = digitalRead (pinl);
int sensorValue3 = digitalRead (pinr);
int sensorValue4 = digitalRead (pinb);
// Udskriv værdien du læser:
Serial.print (sensorValue1);
Serial.print (":");
Serial.print (sensorValue2);
Serial.print (":");
Serial.print (sensorValue3);
Serial.print (":");
Serial.println (sensorValue4);
forsinkelse (25); // forsinkelse i mellem læses for stabilitet
hvis (sensorValue1 == 1) {
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 120);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 120);
forsinkelse (500);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// forsinkelse (500);
}
andet{
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
hvis (sensorValue2 == 1) {
// digitalWrite (led, HIGH);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 250);
analogWrite (LmotorA, 250);
analogWrite (LmotorB, 0);
forsinkelse (100);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// forsinkelse (500);
}
andet
{
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
hvis (sensorValue4 == 1) {
// digitalWrite (led, HIGH);
analogWrite (RmotorA, 250);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 250);
forsinkelse (100);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// forsinkelse (500);
}
andet
{
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
hvis (sensorValue3 == 1) {
// digitalWrite (led, HIGH);
analogWrite (RmotorA, 120);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 120);
analogWrite (LmotorB, 0);
forsinkelse (500);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// forsinkelse (500);
}
andet
{
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
}
================================================

Nu for brugergrænsefladen. Udpak den vedhæftede mappe al den nødvendige kode skal være derinde. Alt du skal gøre er at indsætte i din unikke Electric Imp API i filen index.html i det relevante rum. Jeg har mærket dette inden for filen.

Trin 3: Lad os give det nogle visuelle

Jeg besluttede at lægge en gammel iPhone i hovedenheden med footage af Mars. Dette kunne være alt, selv et videokamera, så du kan se, hvor du kører via Skype eller Facetime …

Trin 4: Lad os få roving!

Her er en hurtig video af The Mini Mars Rover, der hænger ud på en NASA-event på SWSW 2013!

SXSW rover fra michael kortere på Vimeo.

Det store ved dette projekt er, at det er nemt at justere koden for at ændre robotters adfærd eller grænseflade.
God fornøjelse!
M

Finalist i
Fjernbetjeningskonkurrence