Схемы

Как создать управляемый интернет марсоход: 4 шага (с картинками)

Солдатик молодой Исполняет Иван Разумов

Солдатик молодой Исполняет Иван Разумов

Оглавление:

Anonim

Это Учебное пособие объяснит все, что вам нужно знать, чтобы построить контролируемого интернетом вездеходного робота. Это, случается, по образцу марсохода Curiosity. Этим роботом можно управлять с любого устройства, подключенного к Интернету, так что вы можете управлять этой вещью на другой стороне планеты (или на Марсе, если только у него есть Интернет). Этот проект основан на удивительном Electric Imp (устройстве размером с SD-карту, которое позволяет подключать что угодно к Интернету) и Arduino.
Этот проект был создан Майклом Шортером, Томом Меткалфом, Джоном Роджерсом и Али Нейпиром в студии исследования дизайна продукта, Данди.

Что тебе понадобится:
Шасси 6WD Wild Thumper Arduino - http://robosavvy.com/store/product_info.php/products_id/1167?osCsid=5e99bbe12a25938cbf4267ea6bc497ea
Контроллер Arduino Wild Thumper - http://robosavvy.com/store/product_info.php/products_id/1168
Батарея LiPo - 7,2 В 5000 мАч
3мм Акрил
5мм Акрил
Водосточная труба диаметром 10 см
Труба диаметром 35 мм
алюминиевые стержни
Электрический Имп
Электрическая Imp Breakout Board
Некоторые соединительные кабели
Лента для скейтборда

Расходные материалы:

Шаг 1: Строим Ровер

Прилагаются файлы Adobe Illustrator, позволяющие вырезать лазером все необходимые детали. Всего три файла. Один файл для всех деталей толщиной 3 мм, один для деталей толщиной 5 мм и один для деталей ленты для захвата.
Надеемся, что изображения ниже дают хорошее представление о том, как собрать новое шасси для вашего Wild Thumper 6WD.
Подключить Electric Imp к Arduino очень просто:
Имп штифт 1 - Ардуино штифт 10
Imp pin 2 - Arduino pin 9
Имп штифт 8 - Ардуино штифт 12
Imp pin 9 - Arduino pin 2
Electric Imp также потребует 5 В или 3,3 В в зависимости от вашей коммутационной панели, а также от земли.
Я решил подключить тумблер к батарее, чтобы его было легко включать и выключать.

Шаг 2: Веб-сторона вещей

Вот код для вас ….
Белка для беса (взято из интернет-источника, который я больше не могу найти …):
================================================
server.show ( «»);
// дистанционное управление для ровера
ledState <- 0;
функция мигает ()
{
// Изменить состояние
ledState = ledState? 0: 1;
server.log («ledState val:« + ledState);
// Отражаем состояние на вывод
hardware.pin9.write (ledState);
}
// входной класс для канала управления светодиодом
класс inputHTTP расширяет InputPort
{
имя = «контроль мощности»
тип = «число»
набор функций (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)
}
еще {
;
}
}
}
function watchdog () {
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 для ровера», inputHTTP (), );
================================================


Код Arduino (спасибо, Крис Мартин!)…
================================================
/*
AnalogReadSerial
Считывает аналоговый вход на выводе 0, печатает результат на последовательном мониторе.
Прикрепите центральный контакт потенциометра к контакту A0, а внешние контакты к + 5В и заземлению.
Этот пример кода находится в свободном доступе.
*/
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, вход A
#define RmotorB 6 // Правый мост двигателя H, вход B
#define v 255
#включают
// Servo myservo;
// int led = 12;
int pos = 0;
// процедура установки запускается один раз, когда вы нажимаете reset:
void setup () {
//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);
}
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);
}
}
================================================

Теперь для пользовательского интерфейса. Распакуйте вложенную папку; весь код должен быть там. Все, что вам нужно сделать, это вставить свой уникальный API Electric Imp в файл index.html в соответствующем месте. Я пометил это в файле.

Шаг 3: Давайте дадим ему несколько визуальных эффектов

Я решил положить старый iPhone в головное устройство, отображающее кадры Марса. Это может быть что угодно, даже видеокамера, чтобы вы могли видеть, куда вы едете, через Skype или Facetime …

Шаг 4: Давайте возродимся!

Вот короткое видео о том, как The Mini Mars Rover висит на мероприятии НАСА на SWSW 2013!

SXSW ровер от майкла короче на Vimeo.

Самое замечательное в этом проекте заключается в том, что его можно легко настроить, чтобы изменить поведение или интерфейс робота.
Наслаждайтесь!
M

Финалист в
Конкурс дистанционного управления