วงจร

วิธีสร้าง Mars Rover ที่ควบคุมด้วยอินเทอร์เน็ต: 4 ขั้นตอน (พร้อมรูปภาพ)

Our next Mars Rover gets closer to launch on This Week @NASA – July 10, 2020

Our next Mars Rover gets closer to launch on This Week @NASA – July 10, 2020

สารบัญ:

Anonim

คำแนะนำนี้จะอธิบายทุกสิ่งที่คุณจำเป็นต้องรู้เพื่อสร้างหุ่นยนต์ควบคุมภูมิประเทศทั้งหมด อันนี้เพิ่งจะถูกสร้างแบบจำลองบนรถแลนด์โรเวอร์ Curiosity หุ่นยนต์นี้สามารถควบคุมได้จากอุปกรณ์ที่เปิดใช้งานอินเทอร์เน็ตใด ๆ เพื่อให้คุณสามารถควบคุมสิ่งนี้ในอีกด้านหนึ่งของโลก (หรือดาวอังคารถ้ามีเพียงอินเทอร์เน็ตเท่านั้น) โปรเจคนี้ใช้พลังงานจาก Imp ไฟฟ้าที่น่าทึ่ง (อุปกรณ์ขนาด SD การ์ดที่ให้คุณเชื่อมต่อทุกอย่างกับอินเทอร์เน็ต) และ Arduino
โครงการนี้สร้างขึ้นโดย Michael Shorter, Tom Metcalfe, Jon Rogers และ Ali Napier ที่สตูดิโอ Research Design Research, Dundee

สิ่งที่คุณต้องการ:
6WD Arduino Chassis ของ Wild Thumper - http://robosavvy.com/store/product_info.php/products_id/1167?osCsid=5e99bbe12a25938cbf4267ea6bc497ea
คอนโทรลเลอร์ Wild Thumper Arduino - http://robosavvy.com/store/product_info.php/products_id/1168
LiPo แบตเตอรี่ - 7.2V 5000mah
อะคริลิ 3mm
อะคริลิ 5mm
ท่อระบายน้ำเส้นผ่าศูนย์กลาง 10 ซม
เส้นผ่าศูนย์กลางท่อ 35 มม
แท่งอลูมิเนียม
เด็กซนไฟฟ้า
ฝ่าวงล้อมไฟฟ้า Imp
สายจัมเปอร์บางตัว
เทปกริปเก็ตบอร์ด

วัสดุ:

ขั้นตอนที่ 1: การสร้าง Rover

สิ่งที่แนบมาคือไฟล์ Adobe Illustrator เพื่อให้คุณตัดชิ้นส่วนทั้งหมดที่คุณต้องการ มีทั้งหมดสามไฟล์ หนึ่งไฟล์สำหรับชิ้นส่วนหนาทั้งหมด 3mm หนึ่งชิ้นสำหรับชิ้นส่วนหนา 5mm และอีกไฟล์หนึ่งสำหรับชิ้นส่วนเทปกริป
หวังว่าภาพด้านล่างนี้เป็นแนวคิดที่ดีเกี่ยวกับวิธีการติดแชสซีใหม่สำหรับ Wild Thumper 6WD ของคุณด้วยกัน
การเดินสายของ Electric Imp to the Arduino นั้นง่ายมาก:
Imp pin 1 - Arduino pin 10
Imp pin 2 - Arduino pin 9
Imp pin 8 - Arduino pin 12
Imp pin 9 - Arduino pin 2
Imp ไฟฟ้าจะต้อง 5V หรือ 3.3V ขึ้นอยู่กับคณะกรรมการฝ่าวงล้อมของคุณเช่นเดียวกับพื้นดิน
ฉันตัดสินใจที่จะเดินสายสวิตช์แบบสลับให้สอดคล้องกับแบตเตอรี่เพื่อให้สามารถเปิดและปิดได้ง่าย

ขั้นตอนที่ 2: เว็บไซด์แห่งสิ่งต่าง ๆ

นี่คือรหัสสำหรับคุณ….
กระรอกสำหรับเด็กซน (ดัดแปลงมาจากแหล่งข้อมูลออนไลน์ที่ฉันไม่สามารถหา … ):
================================================
server.show (“”);
// การควบคุมระยะไกลสำหรับรถแลนด์โรเวอร์
ledState <- 0;
ฟังก์ชั่นกะพริบ ()
{
// เปลี่ยนสถานะ
ledState = ledState? 0: 1;
server.log (“ ledState val:“ + ledState);
// สะท้อนสถานะของพิน
hardware.pin9.write (ledState);
}
// คลาสอินพุตสำหรับช่องสัญญาณควบคุม LED
ชั้น inputHTTP ขยาย InputPort
{
name =“ การควบคุมพลังงาน”
type =“ number”
ชุดฟังก์ชั่น (httpVal)
{
server.log (“ val ที่ได้รับ:“ + httpVal);
if (httpVal == 1) {
hardware.pin9.write (1);
imp.sleep (0.1);
hardware.pin9.write (0);
}
อื่นถ้า (httpVal == 2) {
hardware.pin8.write (1);
imp.sleep (0.1);
hardware.pin8.write (0);
}
อื่นถ้า (httpVal == 3) {
hardware.pin2.write (1);
imp.sleep (0.1);
hardware.pin2.write (0);
}
อื่นถ้า (httpVal == 4) {
hardware.pin1.write (1);
imp.sleep (0.1);
hardware.pin1.write (0);
}
อื่น{
;
}
}
}
ฟังก์ชันจ้องจับผิด () {
imp.wakeup (60, จ้องจับผิด);
server.log (httpVal);
}
// เริ่มสุนัขเฝ้าบ้านเขียนทุก ๆ 60 วินาที
// จ้องจับผิด ();
// กำหนดค่าพินเป็นเอาต์พุตของท่อระบายน้ำแบบเปิดพร้อมกับดึงขึ้นภายใน
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);
// ลงทะเบียนกับเซิร์ฟเวอร์
imp.configure (“ Reomote Control for Rover”, inputHTTP (), );
================================================


รหัส Arduino (ขอบคุณ Chris Martin!) …
================================================
/*
AnalogReadSerial
อ่านอินพุตแบบอะนาล็อกที่ขา 0 พิมพ์ผลลัพธ์ไปยังมอนิเตอร์แบบอนุกรม
ติดพินกึ่งกลางของโพเทนชิออมิเตอร์เพื่อพิน A0 และพินภายนอกกับ + 5V และกราวด์
รหัสตัวอย่างนี้เป็นสาธารณสมบัติ
*/
int pinf = 2;
int pinl = 12;
int pinr = 10;
int pinb = 9;
#define LmotorA 3 // มอเตอร์ด้านซ้ายสะพาน H อินพุต A
#define LmotorB 11 // มอเตอร์ด้านซ้ายสะพาน H, อินพุต B
#define RmotorA 5 // ด้านขวามอเตอร์ H bridge, อินพุต A
#define RmotorB 6 // ด้านขวามอเตอร์ H bridge, อินพุต B
#define v 255
#include
// Servo myservo;
// int led = 12;
int pos = 0;
// ขั้นตอนการตั้งค่าจะทำงานหนึ่งครั้งเมื่อคุณกดรีเซ็ต:
การตั้งค่าเป็นโมฆะ () {
//myservo.attach(9);
// pinMode (LED, OUTPUT);
pinMode (pinf, INPUT); // เริ่มต้นการสื่อสารแบบอนุกรมที่ 9600 บิตต่อวินาที:
pinMode (pinl, INPUT);
pinMode (pinr, INPUT);
pinMode (pinb, INPUT);
Serial.begin (9600);
digitalWrite (pinf, LOW);
digitalWrite (pinl ต่ำ);
digitalWrite (pinr ต่ำ);
digitalWrite (pinb ต่ำ);
//288000
// นี่คือสิ่งที่แตกต่างกันในการตรวจสอบแบบอนุกรมไม่แน่ใจว่ามันจะขึ้นหรือลง
// Serial.begin (14400);
}
int lls = 0;
int rls = 0;
int al = 0;
// ชุดคำสั่งวนซ้ำทำงานซ้ำแล้วซ้ำอีกตลอดไป:
void loop () {
// อ่านอินพุตที่ขาอะนาล็อก 0:
int sensorValue1 = digitalRead (pinf);
int sensorValue2 = digitalRead (pinl);
int sensorValue3 = digitalRead (pinr);
int sensorValue4 = digitalRead (pinb);
// พิมพ์ค่าที่คุณอ่าน:
Serial.print (sensorValue1);
Serial.print (”:“);
Serial.print (sensorValue2);
Serial.print (”:“);
Serial.print (sensorValue3);
Serial.print (”:“);
Serial.println (sensorValue4);
ล่าช้า (25); // หน่วงเวลาระหว่างอ่านเพื่อความมั่นคง
if (sensorValue1 == 1) {
analogWrite (RmotorA, 0);
analogWrite (RmotorB 120);
analogWrite (LmotorA, 0);
analogWrite (LmotorB 120);
ล่าช้า (500);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// ล่าช้า (500);
}
อื่น{
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
if (sensorValue2 == 1) {
// digitalWrite (led, HIGH);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 250);
analogWrite (LmotorA, 250);
analogWrite (LmotorB, 0);
ล่าช้า (100);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// ล่าช้า (500);
}
อื่น
{
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
if (sensorValue4 == 1) {
// digitalWrite (led, HIGH);
analogWrite (RmotorA, 250);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 250);
ล่าช้า (100);
analogWrite (RmotorA, 0)
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// ล่าช้า (500);
}
อื่น
{
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
if (sensorValue3 == 1) {
// digitalWrite (led, HIGH);
analogWrite (RmotorA 120);
analogWrite (RmotorB, 0)
analogWrite (LmotorA 120);
analogWrite (LmotorB, 0);
ล่าช้า (500);
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
// myservo.write (10);
// ล่าช้า (500);
}
อื่น
{
analogWrite (RmotorA, 0);
analogWrite (RmotorB, 0);
analogWrite (LmotorA, 0);
analogWrite (LmotorB, 0);
}
}
================================================

ตอนนี้สำหรับส่วนต่อประสานผู้ใช้ เปิดเครื่องรูดโฟลเดอร์ที่แนบมา; รหัสทั้งหมดที่จำเป็นควรอยู่ในนั้น สิ่งที่คุณต้องทำคือวางใน Electric Imp API เฉพาะของคุณลงในไฟล์ index.html ในพื้นที่ที่เหมาะสม ฉันติดป้ายกำกับนี้ไว้ในไฟล์

ขั้นตอนที่ 3: ให้ภาพบางส่วน

ฉันตัดสินใจที่จะวาง iPhone เก่าไว้ในหัววิดีโอเพื่อแสดงภาพของดาวอังคาร นี่อาจเป็นอะไรก็ได้แม้แต่กล้องวิดีโอเพื่อให้คุณเห็นว่าคุณกำลังขับรถผ่าน Skype หรือ Facetime …

ขั้นตอนที่ 4: มาท่องเที่ยวกันเถอะ!

นี่คือวิดีโอฉบับย่อของ The Mini Mars Rover ที่กำลังออกไปเที่ยวที่งาน NASA ในงาน SWSW 2013!

รถแลนด์โรเวอร์ SXSW จากไมเคิลสั้นลงบน Vimeo

สิ่งที่ยอดเยี่ยมเกี่ยวกับโครงการนี้คือมันง่ายที่จะปรับแต่งโค้ดเพื่อเปลี่ยนพฤติกรรมหรืออินเทอร์เฟซของหุ่นยนต์
สนุก!
M

เข้ารอบสุดท้ายใน
การประกวดการควบคุมระยะไกล