كيفية بناء نظام Mars Rover للتحكم في الإنترنت: 4 خطوات (مع صور)

الفضاء - علوم الفلك للقرن الØادي والعشرين

الفضاء - علوم الفلك للقرن الØادي والعشرين

جدول المحتويات:

Anonim

سيوضح هذا Instructable كل ما تحتاج إلى معرفته لإنشاء روبوت يتم التحكم فيه عبر الإنترنت لجميع التضاريس. هذا واحد يحدث للتو لتكون على غرار المريخ الفضول. يمكن التحكم في هذا الروبوت من أي جهاز مزود بالإنترنت ، بحيث يمكنك التحكم في هذا الشيء على الجانب الآخر من الكوكب (أو المريخ إذا كان لديه الإنترنت فقط). يتم تشغيل هذا المشروع بالكامل بواسطة Electric Imp (جهاز بحجم بطاقة SD الذي يسمح لك بتوصيل أي شيء بالإنترنت) و Arduino.
تم إنشاء هذا المشروع بواسطة Michael Shorter ، Tom Metcalfe ، Jon Rogers و Ali Napier في Product Research Research Studio، Dundee.

ما سوف تحتاج:
الهيكل 6WD Wild Thumper Arduino - 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
بطارية ليبو - 7.2 فولت 5000 مللي أمبير
الاكريليك 3mm
الاكريليك 5mm
قطر التصريف 10 سم
أنبوب قطره 35 ملم
قضبان الألومنيوم
عفريت الكهربائية
عفريت الكهربائية مجلس اندلاع
بعض الكابلات الطائر
شريط قبضة لوح التزلج

اللوازم:

الخطوة 1: بناء روفر

المرفقة هي ملفات Adobe Illustrator للسماح لك بقطع جميع الأجزاء التي تحتاج إليها بالليزر. هناك ثلاثة ملفات في المجموع. ملف واحد لجميع الأجزاء السميكة 3 مم ، وواحد للأجزاء السميكة 5 مم وواحد لأجزاء شريط الإمساك.
نأمل أن توفر الصور أدناه فكرة جيدة عن كيفية التمسك بالهيكل الجديد لـ Wild Thumper 6WD معًا.
من السهل الأسلاك الكهربائية Imp إلى Arduino:
عفريت دبوس 1 - اردوينو دبوس 10
عفريت دبوس 2 - اردوينو دبوس 9
عفريت دبوس 8 - اردوينو دبوس 12
عفريت دبوس 9 - اردوينو دبوس 2
ستحتاج Electric Imp أيضًا إما بجهد 5 فولت أو 3.3 فولت اعتمادًا على لوحة التشغيل ، وكذلك الأرض.
قررت أن أقوم بتوصيل مفتاح التبديل بما يتماشى مع البطارية لتسهيل تشغيله وإيقاف تشغيله.

الخطوة 2: جانب الويب من الأشياء

إليك بعض الرموز لك …
السنجاب لـ Imp (مقتبس من مصدر عبر الإنترنت لم يعد بإمكاني العثور عليه …):
================================================
server.show ( "")؛
// التحكم عن بعد لروفر
ledState <- 0 ؛
وظيفة وميض ()
{
// دولة التغيير
ledState = ledState؟ 0: 1؛
server.log (“ledState val:“ + ledState) ؛
// تعكس الحالة إلى الدبوس
hardware.pin9.write (ledState)؛
}
/ / فئة الإدخال لقناة التحكم LED
تمدّ فئة inputHTTP فئة InputPort
{
الاسم = "التحكم في الطاقة"
اكتب = "رقم"
مجموعة الوظائف (httpVal)
{
server.log ("val المتلقاة:" + httpVal) ؛
إذا (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)؛
}
// start الوكالة الدولية للطاقة الكتابة كل 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 () ، ) ؛
================================================


كود اردوينو (شكرا لكريس مارتن!) …
================================================
/*
AnalogReadSerial
يقرأ إدخال تمثيلي على pin 0 ، يطبع النتيجة على الشاشة التسلسلية.
نعلق دبوس مركز الجهد لقياس دبوس A0 ، ودبابيس خارج ل + 5V والأرض.
رمز المثال هذا في المجال العام.
*/
pin pin = 2 ؛
pin pin = 12 ؛
int pinr = 10 ؛
pin pin = 9؛
#define LmotorA 3 // جسر H بمحرك يسار ، ومدخلات A
#define LmotorB 11 // جسر اليسار H موتور ، دخل ب
#define RmotorA 5 // الجسر الأيمن للمحرك H ، مدخل A
#define RmotorB 6 // يمين جسر محرك H ، الإدخال B
#define v 255
#تتضمن
// سيرفو myservo.
// int led = 12؛
نقاط البيع = 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، LOW)؛
digitalWrite (pinr، LOW)؛
digitalWrite (pinb، LOW)؛
//288000
/ هذا يختلف على الشاشة التسلسلية ، لست متأكداً مما إذا كان الأمر صعودًا أو هبوطًا
// Serial.begin (14400)؛
}
كثافة العمليات = 0 ؛
int rls = 0 ؛
int al = 0 ؛
// يمتد روتين الحلقة مرارًا وتكرارًا إلى الأبد:
حلقة فارغة() {
// قراءة المدخلات على دبوس التناظرية 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)؛ // التأخير بين القراءات من أجل الاستقرار
إذا (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)؛
}
إذا (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)؛
}
إذا (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)؛
}
إذا (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 الفريدة الخاصة بك في ملف index.html في المساحة المناسبة. لقد وصفت هذا داخل الملف.

الخطوة 3: دعونا نعطيه بعض المرئيات

قررت أن أضع جهاز iPhone قديمًا في وحدة الرأس لعرض لقطات للمريخ. قد يكون هذا أي شيء ، حتى كاميرا فيديو حتى تتمكن من رؤية المكان الذي تقود فيه عبر Skype أو Facetime …

الخطوة 4: دعنا نتجول!

إليكم مقطع فيديو سريع عن لعبة Mini Mars Rover وهي تتدلى في حدث ناسا في SWSW 2013!

SXSW روفر من مايكل أقصر على Vimeo.

إن الشيء العظيم في هذا المشروع هو أنه من السهل تعديل الشفرة لتغيير سلوك أو واجهة الروبوت.
استمتع!
M

النهائي في
مسابقة التحكم عن بعد