Circuite

Cum se construiește un internet controlat Mars Rover: 4 pași (cu imagini)

Новинка: Марс в 4К

Новинка: Марс в 4К

Cuprins:

Anonim

Acest instructabil va explica tot ce trebuie să știți pentru a construi un robot de teren cu controlul internetului. Acesta se întâmplă să fie modelat pe roverul Mars Curiozitate. Acest robot este controlat de orice dispozitiv conectat la internet, astfel încât să puteți controla acest lucru pe cealaltă parte a planetei (sau Marte, dacă ar avea doar internetul). Acest proiect este în întregime alimentat de uimitorul Electric Imp (un dispozitiv de dimensiuni SD care vă permite să conectați orice la internet) și un Arduino.
Acest proiect a fost creat de Michael Shorter, Tom Metcalfe, Jon Rogers și Ali Napier la Studioul de design al produsului, Dundee.

Ce vei avea nevoie:
6WD Wild Thumper Arduino șasiu - http://robosavvy.com/store/product_info.php/products_id/1167?osCsid=5e99bbe12a25938cbf4267ea6bc497ea
Wild Thumper Arduino Controlor - http://robosavvy.com/store/product_info.php/products_id/1168
LiPo baterie - 7.2V 5000mah
3mm acrilic
5mm acrilic
Diafragmă cu diametru de 10 cm
Diametrul conductei de 35 mm
tije de aluminiu
Electric Imp
Electric Impart Breakout bord
Unele cabluri pentru jumperi
Skateboard grip bandă

Furnituri:

Pasul 1: Construirea lui Rover

Sunt atașate fișierele Adobe Illustrator pentru a vă permite să tăiați cu laser toate piesele de care aveți nevoie. Există trei fișiere în total. Un fișier pentru toate părțile cu grosimea de 3 mm, unul pentru piesele cu grosime de 5 mm și unul pentru piesele de bandă de prindere.
Sperăm că imaginile de mai jos oferă o idee bună despre cum să montați noul șasiu pentru Wild Thumper 6WD împreună.
Cablajul electric de la Arduino este ușor:
Impulp 1 - Arduino pin 10
Impulpul 2 - Arduino pin 9
Impuls 8 - Arduino pin 12
Impuls 9 - Arduino pin 2
Electric Imp va avea nevoie, de asemenea, fie 5V sau 3.3V, în funcție de bord dvs. breakout, precum și teren.
Am decis să conectez un cablu de comutare în linie cu bateria pentru a ușura pornirea și oprirea.

Pasul 2: Partea Web a lucrurilor

Iată câteva coduri pentru dvs. …
Veverita pentru imp (adaptată dintr-o sursă online pe care nu o mai găsesc …):
================================================
server.show ( „“);
// telecomandă pentru rover
ledState <- 0;
funcția clipește ()
{
// Modificați starea
ledState = ledState? 0: 1;
server.log ("ledState val:" + ledState);
// Reflectă starea la pin
hardware.pin9.write (ledState);
}
// clasa de intrare pentru canalul de control LED
intrarea de clasăHTTP extinde InputPort
{
name = "controlul puterii"
tip = "număr"
set de funcții (httpVal)
{
server.log ("val primit:" + httpVal);
dacă (httpVal == 1) {
hardware.pin9.write (1);
imp.sleep (0,1);
hardware.pin9.write (0);
}
altfel dacă (httpVal == 2) {
hardware.pin8.write (1);
imp.sleep (0,1);
hardware.pin8.write (0);
}
altfel dacă (httpVal == 3) {
hardware.pin2.write (1);
imp.sleep (0,1);
hardware.pin2.write (0);
}
altfel dacă (httpVal == 4) {
hardware.pin1.write (1);
imp.sleep (0,1);
hardware.pin1.write (0);
}
else {
;
}
}
}
funcția watchdog () {
imp.wakeup (60, watchdog);
server.log (httpVal);
}
// start watchdog scrie la fiecare 60 de secunde
// watchdog ();
// Configurați pinii ca ieșire de scurgere deschisă cu trageți în sus
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);
// Înregistrează-te la server
imp.configure ("Reomote Control for Rover", inputHTTP (), );
================================================


Codul Arduino (datorită lui Chris Martin!) …
================================================
/*
AnalogReadSerial
Citește o intrare analogică pe pinul 0, imprimă rezultatul pe monitorul serial.
Atașați pinul central al unui potențiometru la pinul A0, iar pinii exteriori la + 5V și la masă.
Acest cod exemplu este în domeniul public.
*/
int pinf = 2;
int pinl = 12;
int pinr = 10;
int pinb = 9;
# define LmotorA 3 // Stânga motorului H, intrare A
# define LmotorB 11 // Stânga motorului H, intrare B
#define RmotorA 5 // Motorul dreapta H, intrarea A
#define RmotorB 6 // Motorul dreapta H, intrarea B
#define v 255
#include
// Servo myservo;
// int led = 12;
int pos = 0;
// rutina de configurare rulează o dată când apăsați reset:
void setup () {
//myservo.attach(9);
// pinMode (led, OUTPUT);
pinMode (pinf, INPUT); // inițializați comunicarea serială la 9600 biți pe secundă:
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
// acest lucru este diferit pe monitorul serial nu este sigur dacă este în sus sau în jos
// Serial.begin (14400);
}
int lls = 0;
int rls = 0;
int al = 0;
// rutina buclelor rulează mereu:
void loop () {
/ / citiți intrarea pe pinul analogic 0:
int senzorValue1 = digitalRead (pinf);
int senzorValue2 = digitalRead (PINI);
int senzorValue3 = digitalRead (pinr);
int senzorValue4 = digitalRead (pinb);
// tipăriți valoarea pe care o citiți:
Serial.print (sensorValue1);
Serial.print (":");
Serial.print (sensorValue2);
Serial.print (":");
Serial.print (sensorValue3);
Serial.print (":");
Serial.println (sensorValue4);
întârziere (25); // întârziere între citirile pentru stabilitate
dacă (sensorValue1 == 1) {
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 120);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 120);
întârziere (500);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// întârziere (500);
}
else {
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
dacă (sensorValue2 == 1) {
// digitalWrite (condus, HIGH);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 250);
analogWrite (LmotorA, 250);
analogWrite (LmotorB, 0);
întârziere (100);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// întârziere (500);
}
altfel
{
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
dacă (sensorValue4 == 1) {
// digitalWrite (condus, HIGH);
analogWrite (RmotorA, 250);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 250);
întârziere (100);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// întârziere (500);
}
altfel
{
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
dacă (sensorValue3 == 1) {
// digitalWrite (condus, HIGH);
analogWrite (RmotorA, 120);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 120);
analogWrite (LmotorB, 0);
întârziere (500);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// întârziere (500);
}
altfel
{
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
}
================================================

Acum, pentru interfața cu utilizatorul. Dezarhivați dosarul atașat; tot codul necesar ar trebui să fie acolo. Tot ce trebuie să faceți este să lipiți un API electric unic în fișierul index.html în spațiul corespunzător. Am menționat acest lucru în dosar.

Pasul 3: Să-i dăm niște vizuale

Am decis să pun un iPhone vechi în unitatea centrală care să afișeze imagini de pe Marte. Acest lucru ar putea fi orice, chiar și o cameră video, astfel încât să puteți vedea unde conduceți prin Skype sau Facetime …

Pasul 4: Să ne îndreptăm!

Aici este un clip video rapid al lui The Mini Mars Rover care se desfășoară la un eveniment NASA la SWSW 2013!

SXSW rover de la Michael mai scurt pe Vimeo.

Marele lucru despre acest proiect este că este ușor să tweak codul pentru a schimba comportamentele sau interfața robotului.
Bucurați-vă!
M

Finalist în
Controlul la distanță