Схемы

Как построить еще одну бесполезную машину: легко сделать и сложно использовать !: 9 шагов (с картинками)

Use of UTF 8 CodeHTML

Use of UTF 8 CodeHTML

Оглавление:

Anonim

Так много бесполезных машин построено, зачем строить еще одну? Просто это действительно весело :), весело строить и весело играть.
Я пытался придать этой версии характер, поскольку я всегда чувствовал, что кто-то «думает внутри коробки», поэтому здесь я попытался, надеюсь, мне удалось дать «ей» жизнь!
Я очень рад поделиться с вами всеми шагами, со всеми надеждами, что вы легко сможете построить свой и придать ему горький или лучший характер! Моя версия основана на Arduino, вы можете подумать, что это перебор, но, учитывая гибкость, которую он мне дал, я думаю, это того стоит.
Вот видео всего, собранного вместе. Позже мы перейдем к частям, шагам, схемам и коду
Дайте мне знать ваши комментарии и / или вопросы, если таковые имеются.
Надеюсь, ты повеселишься!
е.

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

Шаг 1: Как это работает?

Все подключено к плате Arduino, плата ждет, пока переключатель не будет установлен в положение HIGH, то есть, когда вы щелкаете переключатель, плата сигнализирует двум серводвигателям о том, что они двигаются определенным образом (подробнее об этом позже), после чего сервопривод, подключенный к «руке», переключит переключатель обратно в положение «ВЫКЛ» и вернется обратно в коробку, а затем сервопривод «двери». тогда все повторяется.
Если вы видели вышеупомянутое видео, каждый раз, когда переключатель переключается, машина реагирует по-разному, и это делается путем простого написания различных функций с разными временными интервалами в коде Arduino (я называю их «Moves»). Каждый раз, когда переключатель переключается, я вызываю новый ход, пока все не будет сделано, я начинаю сначала. обратите внимание, что на шаге 9 я предоставил другую версию кода, которая выбирает случайные движения вместо последовательных. Вы можете добавить столько ходов, сколько хотите, если у вас достаточно памяти на Arduino.
Arduino всегда включен, поэтому я добавил переключатель для батареи, чтобы сэкономить энергию, когда машина не используется. Я уже планирую использовать прерывание на коммутаторе вместо текущего простого обнаружения HIGH / LOW и связать его с режимом ожидания. Это позволит сэкономить электроэнергию, когда машина не используется, а также позволит ей всегда быть готовой (но это также усложнит код). Итак, на данный момент это просто простой выключатель ВКЛ / ВЫКЛ, и на плату всегда подается питание. ,

Шаг 2: части

Тебе понадобится:
Обязательный:
1. Коробка
2. Любая плата Arduino с выходами PWM (у меня есть старая, Diecimila)
3. Два стандартных серводвигателя RC (я использовал Futaba - S3003, они имеют крутящий момент 3,2 кг / см, более чем достаточно для перемещения двери или руки)
4. Батарея 6-12 В (я использовал свой дроновый аккумулятор AR, это 11,1 В / 1000 мА)
3. SPTT или SPST переключатель для триггера (в основном, любой переключатель, который вам подходит!)
5. Еще один выключатель для аккумулятора
6. Нажмите кнопку для сброса Arduino в случае, если вы хотите перезапустить ходы / код сверху.
7. Некоторые перемычки

Необязательный:
Если вы хотите создать движение, которое включает в себя перемещение рамки (как последнее движение в видео), тогда вы можете получить:
1. Моторный щит Arduino, это также пригодится для других проектов (или вы можете самостоятельно разработать H-мост, найдите его)
2. Дешевый RC автомобиль, чтобы вы могли взять его двигатель постоянного тока и коробку передач
Кроме того, все еще в разделе «опционально», я построил аппаратную схему отскока, чтобы иметь чистый триггер при включении / выключении переключателя. Это можно пропустить и легко реализовать в программном обеспечении Arduino с использованием задержек или таймеров. Я сделал аппаратный дебод, потому что скоро буду менять код для использования прерываний, и поскольку последние не позволяют надежно использовать функции задержки / таймера в подпрограмме, поэтому мне пришлось создать простую схему де-отказов для будущего использования. , Если вы хотите пропустить эту часть, просто подключите простой переключатель / резистор к контакту 2 Arduino и выполните процедуру отладки программного обеспечения.
Для аппаратного отказов:
1. 10 мФ электролитический конденсатор
2. резистор 10К
3. Логическая логика НЕ, т. Е. Инвертор (микросхема 74HC04). Имеет шесть инверторов, но вам нужен только один.
Давайте построим это …

Шаг 3: Сборка Коробки

Вы можете использовать любую коробку, которую считаете подходящей. Я построил свой, может быть, не идеальный, но все еще много личного :)
1. Я использовал 2 листа 5 мм дерева BALSA, очень легко работать с помощью резака, и относительно прочный, учитывая его невероятно легкий вес.
2. Потребляется 5 тюбиков клея Cyanoacrylat (сильные быстродействующие клеи)
Вот:
22 х 14 х 14 см коробка

Шаг 4: Схема

Выше приведена схема (нарисована с использованием Fritzing), показывающая:
Верхняя часть: Основная плата Arduino, 2 сервопривода и возможность подключения коммутатора. Обратите внимание, что, как упоминалось ранее, вы можете заменить всю цепочку дебаза (вверху справа) простым резистором / переключателем.
Как «дверные», так и «ручные» сервоприводы питаются напрямую от 5-вольтового разъема Arduino. Сигнальные провода подключены к контактам 9 и 10 соответственно. Эти контакты поддерживают ШИМ, поэтому я использую их для управления углом / положением сервопривода (от 0 до 180 градусов макс.).
Примечание: красная кнопка - это просто сброс (похожий на тот, что находится на лицевой стороне платы Arduino). Я добавил его, чтобы иметь быстрый доступ к сбросу платы / программного обеспечения в любое время, не открывая коробку. Просто подключите контакт RESET к заземлению, чтобы выполнить сброс.
Нижняя часть: необходимо, если вы хотите использовать двигатель постоянного тока и перемещать машину. Это моторный щит Arduino, он установлен сверху Arduino, поэтому все контакты обеих плат соединены друг с другом. Надеюсь, я покажу их ниже как разделенные только для ясности! Этот щит может невероятно легко контролировать до 2 двигателей постоянного тока (2 канала A / B). Я использую только один сейчас. Это позволяет установить в коде направление, скорость и разрывы любого из 2 доступных каналов / двигателей. Я использую канал B, как показано ниже. где булавка
13 для направления, контакт 11 для скорости и контакт 8 для управления тормозами.
Аккумулятор 11,1 / 1000 мА, подключенный к экрану, питающий двигатель постоянного тока, главную плату Arduino и сервоприводы. Если вы не используете экран, то вы можете напрямую подключить аккумулятор к силовому разъему на главной плате Arduino.

Шаг 5: Исправление сервоприводов

Вот ручные и дверные сервоприводы:
Сначала вам нужно установить сервоприводы в правильные места, для этого нужно немного проб и ошибок, пока вы не получите нужного движения. Вы можете использовать пример Servo, предоставленный в IDE Arduino, чтобы проверить сервоприводы и величину отклонения, необходимого для каждого, и, таким образом, принять решение об окончательном позиционировании и длине плеч для сервоприводов двери и руки.
Руки просто сделаны из дерева бальзы, я сделал их толще, чтобы выдержать разрыв.
Ниже как я это сделал. Только одна заметка о ручном сервоприводе. Вам понадобится сервопривод, который будет находиться непосредственно под краем крышки (как показано ниже), чтобы избежать трудностей при создании руки, которая может успешно нажать на переключатель, а также чтобы иметь возможность вернуться в коробку.


Шаг 6: Подключение коммутатора, сервоприводов и Arduino

Создайте все соединения, показанные на шаге схемы, и попробуйте поместить все в поле, как показано выше:

Шаг 7: Дополнительно: двигатель постоянного тока и аккумулятор

Выше показано, как я поставил редуктор двигателя постоянного тока (взятый из дешевого автомобиля с радиоуправлением), также показывающий расположение бэттера и переключателя.
Удостоверьтесь, что механизм расположен как можно ближе к центру, чтобы уравновесить коробку. Возможно, вам понадобится поместить некоторый вес в коробку, чтобы уравновесить ее после окончательной сборки, поскольку использованная мной батарея немного тяжелая (100 г) и вызвала некоторое колебание при переключении или перемещении коробки.
Обратите внимание, что двигатель постоянного тока скорость контролируется пин 11, направление по булавке 13, а также тормоза на булавке 8, они считаются каналом B на моторном щитке Arduino.
На протяжении всей сборки я пытался скрыть все провода переключателей и других компонентов, чтобы получить простую аутентичную коробку. Это относится и к колесам, поэтому я сделал обод вокруг них, на котором размещены как колеса, так и аккумулятор, а также предоставляется доступ к красной кнопке сброса.

Шаг 8: Код

Чтобы написать код для Arduino, вам нужна IDE Arduino (скачать его здесь)
Я использую версию 1.0.5, просто убедитесь, что вы выбрали правильный COM-порт (windows) и тип платы в IDE, затем используйте приведенный ниже код и нажмите «Upload».
ПРИМЕЧАНИЕ. Значения, которые я использовал в коде для установки максимального отклонения сервоприводов, сделаны именно для этого блока с учетом расположения сервоприводов, оси и углов. Я получил это через испытание. Таким образом, вы должны разработать свои собственные ценности в соответствии с вашей коробкой и сервопривод.
Для справки ниже приведены минимальные / максимальные значения, которые я использовал для каждого сервопривода, и вы увидите, что они встречаются в коде:
Дверь:
80 скрывается, 155 полностью открыто
Рука:
0 скрывается, 129 нажимает на переключатель

Вот код (лучше скачать файл, прикрепленный к этому шагу вместо копирования / вставки снизу):
#включают
Серво дверсерво;
Servo handServo;
int switch_pin = 2; // установить переключатель на контакт 2
// моторные переменные
int motorThrottle = 11;
int motorDirection = 13;
int motorBrake = 8;
int pos = 0;
int selectedMove = 0; // переместить селектор
int Testmove = 0; // тестовый режим: установить номер хода, чтобы проверить только один выбранный ход
// (установить в ноль для нормальной работы, т. е .: roundrobbin при перемещении amm)
void setup ()
{
Serial.begin (9600);
pinMode (switch_pin, INPUT);
doorServo.attach (9); // установить сервопривод двери на контакт 9 ШИМ
handServo.attach (10); // установить ручной сервопривод на контакт 10 ШИМ
doorServo.write (80); // установить дверь в скрытое положение
handServo.write (0); // установить руку в скрытое положение

// Настройка канала B (так как канал A зарезервирован сервоприводами двери и руки и не может использоваться одновременно)
pinMode (motorDirection, OUTPUT); // Инициирует вывод канала B двигателя
pinMode (motorBrake, OUTPUT); // Инициирует вывод тормозного канала B

}

void loop ()
{
if (Testmove! = 0) {
selectedMove = Testmove;
}

// если переключатель включен, сдвиньте дверь и руку, чтобы выключить его …
if (digitalRead (switch_pin) == HIGH)
{

if (selectedMove> 10) {selectedMove = 0; } // когда все ходы сыграны, повторите ходы с начала
// ниже все "Move", которые я разработал до сих пор, каждая из них - это функция, которая написана ниже в коде, выполняет имена, abit странные? да как некоторые написаны на арабском
if (selectedMove == 0) {switchoff (); }
иначе if (selectedMove == 1) {switchoff (); }
иначе if (selectedMove == 2) {switchoffbitaraddod (); }
иначе if (selectedMove == 3) {crazydoor (); }
иначе if (selectedMove == 4) {crazyslow (); }
иначе if (selectedMove == 5) {m7anika7anika (); }
иначе if (selectedMove == 6) {m3alla2 (); }
иначе if (selectedMove == 7) {switchoff (); }
иначе if (selectedMove == 8) {matrix (); }
иначе if (selectedMove == 9) {sneak (); }
иначе if (selectedMove == 10) {zee7 (); }

if (Testmove == 0) {
selectedMove ++; // перейти к следующему шагу, если не в тестовом режиме
}
}
}

// Библиотека ходов
// основной ход
отключение пустоты ()
{
// Движущаяся дверь
для (pos = 80; pos <155; pos = 3)
{
doorServo.write (позы);
задержка (15);
}

// движущаяся рука
для (pos = 0; pos <129; pos = 4)
{
handServo.write (позы);
задержка (15);
}

// прячу руку
для (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (позы);
задержка (15);
}

// скрываем дверь
для (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (позы);
задержка (15);
}
}

// двигаться 3: открыть и подождать, затем переместить руку и подождать, затем переключить и скрыть
void switchoffbitaraddod ()
{
// Движущаяся дверь
для (pos = 80; pos <155; pos = 3)
{
doorServo.write (позы);
задержка (15);
}
задержки (800);
// движущаяся рука
для (pos = 0; pos <100; pos = 4)
{
handServo.write (позы);
задержка (15);
}
Задержка (1000);
для (pos = 100; pos <129; pos = 4)
{
handServo.write (позы);
задержка (15);
}

// прячу руку
для (pos = 129; pos> = 0; pos- = 5)
{
handServo.write (позы);
задержка (15);
}

// скрываем дверь
для (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (позы);
задержка (15);


}

}

// двигаться 4: открыть дверь, затем закрыть ее много раз, подождать, затем быстро открыть и отключить и скрыть.

Void Crazydoor ()
{

// Движущаяся дверь
для (pos = 80; pos <125; pos = 3)
{
doorServo.write (позы);
задержка (15);
}

// скрываем дверь
для (pos = 125; pos> = 80; pos- = 5)
{
doorServo.write (позы);
задержка (15);
}
// Движущаяся дверь
для (pos = 80; pos <110; pos = 3)
{
doorServo.write (позы);
задержка (15);
}

// скрываем дверь
для (pos = 110; pos> = 80; pos- = 15)
{
doorServo.write (позы);
задержка (15);
}
задержки (700);
// Движущаяся дверь
для (pos = 80; pos <125; pos = 3)
{
doorServo.write (позы);
задержка (15);
}
задержки (700);
// скрываем дверь
для (pos = 125; pos> = 80; pos- = 5)
{
doorServo.write (позы);
задержка (15);
}

// ---- переключателя ---- //
// Движущаяся дверь
для (pos = 80; pos <155; pos = 8)
{
doorServo.write (позы);
задержка (15);
}

// движущаяся рука
для (pos = 0; pos <129; pos = 3)
{
handServo.write (позы);
задержка (15);
}

// прячу руку
для (pos = 129; pos> = 0; pos- = 3)
{
handServo.write (позы);
задержка (15);
}

// скрываем дверь
для (pos = 155; pos> = 80; pos- = 15)
{
doorServo.write (позы);
задержка (15);
}

}

// двигаться 5: открыть дверь, затем очень медленно двигать руку вперед и назад, чтобы очень медленно спрятаться, затем быстро закрыть дверь
void crazyslow ()
{
// Движущаяся дверь
для (pos = 80; pos <155; pos = 1)
{
doorServo.write (позы);
задержка (30);
}

// движущаяся рука
для (pos = 0; pos <129; pos = 1)
{
handServo.write (позы);
задержка (30);
}

// прячу руку
для (pos = 129; pos> = 0; pos- = 1)
{
handServo.write (позы);
задержка (30);
}

// скрываем дверь
для (pos = 155; pos> = 125; pos- = 1)
{
doorServo.write (позы);
задержка (30);
}
задержки (100);
для (pos = 125; pos> = 80; pos- = 4)
{
doorServo.write (позы);
задержка (15);
}

}
// двигаться 6:
void m7anika7anika () {
// Движущаяся дверь
для (pos = 80; pos <155; pos = 3)
{
doorServo.write (позы);
задержка (15);
}

// движущаяся рука
для (pos = 0; pos <70; pos = 1)
{
handServo.write (позы);
задержка (15);
}
задержки (800);


// скрываем дверь
для (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (позы);
задержка (15);
}

// скрываем дверь
для (pos = 130; pos <155; pos = 3)
{
doorServo.write (позы);
задержка (15);
}
// скрываем дверь
для (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (позы);
задержка (15);
}
// скрываем дверь
для (pos = 130; pos <155; pos = 3)
{
doorServo.write (позы);
задержка (15);
}

handServo.write (40);
Задержка (1000);

// движущаяся рука
для (pos = 40; pos <129; pos = 4)
{
handServo.write (позы);
задержка (15);
}

// прячу руку
для (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (позы);
задержка (15);
}


для (pos = 120; pos> = 80; pos - = 1)
{
doorServo.write (позы);
задержка (15);
}



}
void m3alla2 () {
// Движущаяся дверь
для (pos = 80; pos <155; pos = 3)
{
doorServo.write (позы);
задержка (15);
}

// движущаяся рука
для (pos = 0; pos <127; pos = 4)
{
handServo.write (позы);
задержка (15);
}
// скрываем дверь
для (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (позы);
задержка (15);
}
Задержка (2000);

для (pos = 130; pos <155; pos = 3)
{
doorServo.write (позы);
задержка (15);
}

для (pos = 155; pos> = 140; pos- = 3)
{
doorServo.write (позы);
задержка (15);
}
для (pos = 140; pos <155; pos = 3)
{
doorServo.write (позы);
задержка (15);
}
задержки (500);
// прячу руку
для (pos = 127; pos> = 0; pos- = 4)
{
handServo.write (позы);
задержка (15);
}

// скрываем дверь
для (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (позы);
задержка (15);
}
}

пустая матрица ()
{
// Движущаяся дверь
для (pos = 80; pos <155; pos = 3)
{
doorServo.write (позы);
задержка (15);
}

// движущаяся рука
для (pos = 0; pos <80; pos = 4)
{
handServo.write (позы);
задержка (15);
}

для (pos = 80; pos <129; pos = 1)
{
handServo.write (позы);
задержка (30);
}
задержки (300);

для (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (позы);
задержка (10);
}

// скрываем дверь
для (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (позы);
задержка (15);
}

}
пустота подкрадываться ()
{
// Движущаяся дверь
для (pos = 80; pos <130; pos = 1)
{
doorServo.write (позы);
задержка (30);
}
Задержка (2000);

// движущаяся рука
для (pos = 0; pos <40; pos = 1)
{
handServo.write (позы);
задержка (30);
}

задержки (500);

для (pos = 130; pos <155; pos = 4)
{
doorServo.write (позы);
задержка (15);
}
задержки (100);

для (pos = 40; pos <90; pos = 4)
{
handServo.write (позы);
задержка (15);
}
задержки (500);
// прячу руку
для (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (позы);
задержка (15);
}
задержки (100);
для (pos = 70; pos <90; pos = 4)
{
handServo.write (позы);
задержка (15);
}
задержки (100);
для (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (позы);
задержка (15);
}
задержки (100);

для (pos = 70; pos <129; pos = 4)
{
handServo.write (позы);
задержка (15);
}

для (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (позы);
задержка (15);
}
// скрываем дверь
для (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (позы);
задержка (15);
}
}


void zee7 ()
{
// Движущаяся дверь
для (pos = 80; pos <155; pos = 3)
{
doorServo.write (позы);
задержка (15);
}
Задержка (2000);
// вперед @ половина скорости влево
digitalWrite (motorDirection, LOW); // Устанавливает ПРАВИЛЬНОЕ направление канала B
digitalWrite (motorBrake, LOW); // Отключить тормоз для канала B
analogWrite (motorThrottle, 100); // вращает двигатель на канале B на полной скорости
задержки (300);
digitalWrite (motorBrake, HIGH); // Включить тормоз для канала B
Задержка (2000);

// назад на половину скорости вправо
digitalWrite (motorDirection, HIGH); // Устанавливает левое направление канала B
digitalWrite (motorBrake, LOW); // Отключить тормоз для канала B
analogWrite (motorThrottle, 100); // Вращает двигатель на канале B на половине скорости
задержки (300);
digitalWrite (motorBrake, HIGH); // Включить тормоз для канала B
Задержка (1000);

// движущаяся рука
для (pos = 0; pos <129; pos = 4)
{
handServo.write (позы);
задержка (15);
}

// прячу руку
для (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (позы);
задержка (15);
}

// скрываем дверь
для (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (позы);
задержка (15);
}
}


Шаг 9: необязательное обновление: обнаружение движения

У меня сегодня есть датчик приближения (GP2Y0A21), так что теперь я могу использовать его для перемещения машины, если пользователь приближается к тумблеру :)
Для этого дополнительного шага я предполагаю, что вы уже создали колеса, чтобы разрешить движение (см. Необязательный шаг 8). Теперь осталось только добавить датчик и внести некоторые изменения в код для обнаружения движения.
Датчик имеет 3 провода, желтый сигнальный провод подключен к контакт 3 на Arduino, в то время как красный а также черный связаны с v5 а также земля соответственно на доске.
Я поместил датчик, спрятанный под дверью, как показано на рисунке, поэтому он может «видеть» движение пользователя, только когда дверь открывается. именно то, что мне нужно!
Мне также пришлось немного изменить код (здесь), чтобы реализовать процедуру обнаружения движения (см. Код в функции zee7 () ), так что при обнаружении движения коробка сместится сначала вправо, затем влево, затем рука щелкает выключателем и прячется. Код сильно комментируется, надеюсь, я не переусердствовал!
Вы можете найти обновленный код ниже, также обратите внимание, что я сделал, чтобы машина выбирала ходы случайным образом, это можно изменить обратно на последовательный, просто установив логическое randomize = false;
Спасибо ВСЕМ за ваши замечательные предложения!
Код (Лучше скачать файл, прикрепленный к этому шагу, а не копировать / вставлять снизу):
#включают
Серво дверсерво;
Servo handServo;
беззнаковый длинный TimerA, TimerB; // таймер для процедуры обнаружения движения
int switch_pin = 2; // установить переключатель на контакт 2
// моторные переменные
int motorThrottle = 11;
int motorDirection = 13;
int motorBrake = 8;
// Переменные расстояния
int motionPin = 3; // контакт датчика движения на аналоговом 0
int lastDist = 0; // запомнить последнее расстояние
int currentDist = 0;
int thresh = 200; // Порог для движения (установите его так, чтобы получить желаемую чувствительность обнаружения движения)

int pos = 0;
int selectedMove = 0; // переместить селектор
int Testmove = 0; // тестовый режим: установить номер хода, чтобы проверить только один выбранный ход
// (установить в ноль для нормальной работы, т. е. roundrobbin на всех ходах)
логическое randomize = true; // если true, бокс будет двигать двигатели случайным образом, если установлено в false, то ходы будут выполняться последовательно от 1 до 10

void setup ()
{
Serial.begin (9600);
pinMode (switch_pin, INPUT);
doorServo.attach (9); // установить сервопривод двери на контакт 9 ШИМ
handServo.attach (10); // установить ручной сервопривод на контакт 10 ШИМ
doorServo.write (80); // установить дверь в скрытое положение
handServo.write (0); // установить руку в скрытое положение
// Настройка канала B, поскольку канал A зарезервирован сервоприводами двери и руки и не может использоваться одновременно
pinMode (motorDirection, OUTPUT); // Инициирует вывод канала B двигателя
pinMode (motorBrake, OUTPUT); // Инициирует вывод тормозного канала B

}

void loop ()
{
// если переключатель включен, сдвиньте дверь и руку, чтобы выключить его …
if (digitalRead (switch_pin) == HIGH)
{

if (Testmove == 0)
{

if (randomize == false)
{
if (selectedMove> 10)
{
selectedMove = 0; // когда все ходы сыграны, повторите ходы с начала
}
}
еще
{
selectedMove = random (11);
}
}
еще
{
selectedMove = Testmove;
}
Serial.println (selectedMove);
if (selectedMove == 0) {switchoff (); }
иначе if (selectedMove == 1) {switchoff (); }
иначе if (selectedMove == 2) {switchoffbitaraddod (); }
иначе if (selectedMove == 3) {crazydoor (); }
иначе if (selectedMove == 4) {crazyslow (); }
иначе if (selectedMove == 5) {m7anika7anika (); }
иначе if (selectedMove == 6) {m3alla2 (); }
иначе if (selectedMove == 7) {switchoff (); }
иначе if (selectedMove == 8) {matrix (); }
иначе if (selectedMove == 9) {sneak (); }
иначе if (selectedMove == 10) {zee7 (); }

if (Testmove == 0 && randomize == false) {
selectedMove ++; // переключаемся на следующий ход, если не в тестовом режиме
}
}
}
// Библиотека ходов
// основной ход
отключение пустоты ()
{
// Движущаяся дверь
для (pos = 80; pos <155; pos = 3)
{
doorServo.write (позы);
задержка (15);
}

// движущаяся рука
для (pos = 0; pos <129; pos = 4)
{
handServo.write (позы);
задержка (15);
}

// прячу руку
для (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (позы);
задержка (15);
}

// скрываем дверь
для (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (позы);
задержка (15);
}
}

// двигаться 3: открыть и подождать, затем переместить руку и подождать, затем переключить и скрыть
void switchoffbitaraddod ()
{
// Движущаяся дверь
для (pos = 80; pos <155; pos = 3)
{
doorServo.write (позы);
задержка (15);
}
задержки (800);
// движущаяся рука
для (pos = 0; pos <100; pos = 4)
{
handServo.write (позы);
задержка (15);
}
Задержка (1000);
для (pos = 100; pos <129; pos = 4)
{
handServo.write (позы);
задержка (15);
}

// прячу руку
для (pos = 129; pos> = 0; pos- = 5)
{
handServo.write (позы);
задержка (15);
}

// скрываем дверь
для (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (позы);
задержка (15);


}

}

// двигаться 4: открыть дверь, затем закрыть ее много раз, подождать, затем быстро открыть и отключить и скрыть.

Void Crazydoor ()
{

// Движущаяся дверь
для (pos = 80; pos <125; pos = 3)
{
doorServo.write (позы);
задержка (15);
}

// скрываем дверь
для (pos = 125; pos> = 80; pos- = 5)
{
doorServo.write (позы);
задержка (15);
}
// Движущаяся дверь
для (pos = 80; pos <110; pos = 3)
{
doorServo.write (позы);
задержка (15);
}

// скрываем дверь
для (pos = 110; pos> = 80; pos- = 15)
{
doorServo.write (позы);
задержка (15);
}
задержки (700);
// Движущаяся дверь
для (pos = 80; pos <125; pos = 3)
{
doorServo.write (позы);
задержка (15);
}
задержки (700);
// скрываем дверь
для (pos = 125; pos> = 80; pos- = 5)
{
doorServo.write (позы);
задержка (15);
}

// ---- переключателя ---- //
// Движущаяся дверь
для (pos = 80; pos <155; pos = 8)
{
doorServo.write (позы);
задержка (15);
}

// движущаяся рука
для (pos = 0; pos <129; pos = 3)
{
handServo.write (позы);
задержка (15);
}

// прячу руку
для (pos = 129; pos> = 0; pos- = 3)
{
handServo.write (позы);
задержка (15);
}

// скрываем дверь
для (pos = 155; pos> = 80; pos- = 15)
{
doorServo.write (позы);
задержка (15);
}

}

// двигаться 5: открыть дверь, затем очень медленно двигать руку вперед и назад, чтобы очень медленно спрятаться, затем быстро закрыть дверь
void crazyslow ()
{
// Движущаяся дверь
для (pos = 80; pos <155; pos = 1)
{
doorServo.write (позы);
задержка (30);
}

// движущаяся рука
для (pos = 0; pos <129; pos = 1)
{
handServo.write (позы);
задержка (30);
}

// прячу руку
для (pos = 129; pos> = 0; pos- = 1)
{
handServo.write (позы);
задержка (30);
}

// скрываем дверь
для (pos = 155; pos> = 125; pos- = 1)
{
doorServo.write (позы);
задержка (30);
}
задержки (100);
для (pos = 125; pos> = 80; pos- = 4)
{
doorServo.write (позы);
задержка (15);
}

}
// двигаться 6:
void m7anika7anika () {
// Движущаяся дверь
для (pos = 80; pos <155; pos = 3)
{
doorServo.write (позы);
задержка (15);
}

// движущаяся рука
для (pos = 0; pos <70; pos = 1)
{
handServo.write (позы);
задержка (15);
}
задержки (800);


// скрываем дверь
для (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (позы);
задержка (15);
}

// скрываем дверь
для (pos = 130; pos <155; pos = 3)
{
doorServo.write (позы);
задержка (15);
}
// скрываем дверь
для (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (позы);
задержка (15);
}
// скрываем дверь
для (pos = 130; pos <155; pos = 3)
{
doorServo.write (позы);
задержка (15);
}

handServo.write (40);
Задержка (1000);

// движущаяся рука
для (pos = 40; pos <129; pos = 4)
{
handServo.write (позы);
задержка (15);
}

// прячу руку
для (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (позы);
задержка (15);
}


для (pos = 120; pos> = 80; pos - = 1)
{
doorServo.write (позы);
задержка (15);
}



}
void m3alla2 () {
// Движущаяся дверь
для (pos = 80; pos <155; pos = 3)
{
doorServo.write (позы);
задержка (15);
}

// движущаяся рука
для (pos = 0; pos <127; pos = 4)
{
handServo.write (позы);
задержка (15);
}
// скрываем дверь
для (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (позы);
задержка (15);
}
Задержка (2000);

для (pos = 130; pos <155; pos = 3)
{
doorServo.write (позы);
задержка (15);
}

для (pos = 155; pos> = 140; pos- = 3)
{
doorServo.write (позы);
задержка (15);
}
для (pos = 140; pos <155; pos = 3)
{
doorServo.write (позы);
задержка (15);
}
задержки (500);
// прячу руку
для (pos = 127; pos> = 0; pos- = 4)
{
handServo.write (позы);
задержка (15);
}

// скрываем дверь
для (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (позы);
задержка (15);
}
}

пустая матрица ()
{
// Движущаяся дверь
для (pos = 80; pos <155; pos = 3)
{
doorServo.write (позы);
задержка (15);
}

// движущаяся рука
для (pos = 0; pos <80; pos = 4)
{
handServo.write (позы);
задержка (15);
}

для (pos = 80; pos <129; pos = 1)
{
handServo.write (позы);
задержка (30);
}
задержки (300);

для (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (позы);
задержка (10);
}

// скрываем дверь
для (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (позы);
задержка (15);
}

}
пустота подкрадываться ()
{
// Движущаяся дверь
для (pos = 80; pos <130; pos = 1)
{
doorServo.write (позы);
задержка (30);
}
Задержка (2000);

// движущаяся рука
для (pos = 0; pos <40; pos = 1)
{
handServo.write (позы);
задержка (30);
}

задержки (500);

для (pos = 130; pos <155; pos = 4)
{
doorServo.write (позы);
задержка (15);
}
задержки (100);

для (pos = 40; pos <90; pos = 4)
{
handServo.write (позы);
задержка (15);
}
задержки (500);
// прячу руку
для (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (позы);
задержка (15);
}
задержки (100);
для (pos = 70; pos <90; pos = 4)
{
handServo.write (позы);
задержка (15);
}
задержки (100);
для (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (позы);
задержка (15);
}
задержки (100);

для (pos = 70; pos <129; pos = 4)
{
handServo.write (позы);
задержка (15);
}

для (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (позы);
задержка (15);
}
// скрываем дверь
для (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (позы);
задержка (15);
}
}

// это движение откроет дверь и будет ждать движения, если оно будет обнаружено возле переключателя,
// коробка сместится сначала вправо, а затем влево, и, наконец, рука перемещается и выключает переключатель
void zee7 ()
{

//открытая дверь
для (pos = 80; pos <155; pos = 3)
{
doorServo.write (позы);
задержка (15);
}
Задержка (1200); // ждем, чтобы стабилизировать показания датчика после открытия двери

// устанавливаем таймер и читаем датчик
// ожидание движения, которое превышает порог или если таймер истекает (5 секунд),
lastDist = analogRead (motionPin);
TimerA = миллис ();

while (миллис () - TimerA <= 5000)
{
currentDist = analogRead (motionPin);

// отклоняется ли текущее расстояние от последнего на большее, чем пороговое значение?
// если да, то переместить поле вправо
if ((currentDist> lastDist thresh || currentDist <lastDist - thresh) || currentDist> 300)
{
// вперед @ половина скорости влево (выберите скорость и задержку
//(i.e задержка (300) в зависимости от вашей коробки и напряжения батареи, чтобы движение было желательным)
digitalWrite (motorDirection, LOW); // Устанавливаем ПРАВИЛЬНОЕ направление канала А
digitalWrite (motorBrake, LOW); // Отключить тормоз для канала B
analogWrite (motorThrottle, 100); // вращает двигатель на канале B на полной скорости
задержки (300);
digitalWrite (motorBrake, HIGH); // Включить тормоз для канала B
перерыв;
}
lastDist = currentDist;
}

// устанавливаем таймер и читаем датчик
// ожидание движения, которое превышает порог или если таймер истекает (5 секунд),
Задержка (1200); // ждем, чтобы стабилизировать показания датчика после открытия двери
lastDist = analogRead (motionPin);
TimerB = миллис ();
while (millis () - TimerB <= 5000)
{
currentDist = analogRead (motionPin);
// бокс уже сдвинулся вправо и текущее расстояние отклонилось от последнего расстояния более чем на порог?
// Если да, то двигаться влево
if ((currentDist> lastDist thresh || currentDist <lastDist - thresh) || currentDist> 300)
{
// назад на половину скорости вправо (выберите скорость и задержку
//(i.e задержка (300) в зависимости от вашей коробки и напряжения батареи, чтобы движение было желательным)
digitalWrite (motorDirection, HIGH); // Устанавливает левое направление канала B
digitalWrite (motorBrake, LOW); // Отключить тормоз для канала B
analogWrite (motorThrottle, 100); // Вращает двигатель на канале B на половине скорости
задержки (300);
digitalWrite (motorBrake, HIGH); // Включить тормоз для канала B
перерыв;
}

lastDist = currentDist;

}
задержки (100);
// движущаяся рука
для (pos = 0; pos <130; pos = 4)
{
handServo.write (позы);
задержка (15);
}

// прячу руку
для (pos = 130; pos> = 0; pos- = 4)
{
handServo.write (позы);
задержка (15);
}

// скрываем дверь
для (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (позы);
задержка (15);
}
}

3 человека сделали этот проект!

  • AndyC159 сделал это!

  • SamL84 сделал это!

  • melton1313 сделал это!

Вы сделали этот проект? Поделитесь этим с нами!

рекомендации

  • Винтовая сортировочная машина

  • PCB BOT (следование по линии, устранение препятствий и робот с управлением по Bluetooth в одной плате)

  • Интернет вещей

  • Конкурс «Цвета радуги»

  • Фэндом Конкурс

  • Party Challenge

194 обсуждения

0

Вы пытаетесь

4 года назад на Вступлении

Спасибо за это! Я сделал свой первый проект Arduino на основе этого поучительного: бесполезный дракон!

4 ответа 0

AjannВы пытаетесь

Ответить 3 года назад

Твоя машина-дракон потрясающая. !!! артистический

0

TJAOkevinВы пытаетесь

Ответить 3 года назад

Потрясающие!!!!!

0

riachiВы пытаетесь

Ответить 4 года назад на Введение

Ты обалденный :) !!!

Великая личность для Дракона! Я хотел бы, чтобы вы могли переделать видео, когда дракон находится прямо перед камерой (вид сверху), я чувствую, что это будет весело, так что смотрите на язык!

Спасибо за то, что поделились вашим видео и рад, что мой i'able помог

0

Вы пытаетесьriachi

Ответить 4 года назад на Введение

Я пробовал вид сверху на более ранней стадии, но он не работал (видел слишком много грязных внутренностей), поэтому я отклонил его, когда снимал это видео. Я думаю, что вы правы: на последнем этапе это выглядело бы великолепно! К сожалению, я уже отдал дракона … Итак, к следующему проекту!

0

br1pro

4 года назад

Очень весело! тяжелая работа по ремонту сервоприводов и дизайну руки. Спасибо за это поучительно!

1 ответ 0

riachibr1pro

Ответить 4 года назад на Введение

Отличная работа, человек! действительно приятно :) любое видео?

0

clincoln

5 лет назад

Сначала посмотрите видео, а потом смейтесь

1 ответ 0

TobiasVclincoln

Ответить 4 года назад на Введение

Я знаю, что сделал! : D

0

rileyw

5 лет назад

Супер крутое видео заставило его казаться, что у него был собственный разум

0

Elitekilla117

5 лет назад на Введение

Моя бесполезная машинка с кодом ардуино и риачис! Сделано в Тардис от Доктора. :)
http://www.youtube.com/watch?v=aDs0T52o6-M

2 ответа 0

riachiElitekilla117

Ответить 5 лет назад на Введение

ЛЮБИТЬ ЭТО!!!! :)) действительно хорошо сделанный человек, так рад видеть твою бомбу в живых! Я также инсценировка и музыка: я просто не могу остановиться, чтобы предложить 3 небольшие модификации, если я могу :)?
- было бы здорово поставить машину в стоячее положение, я знаю, что это приведет к потере силы тяжести, чтобы закрыть дверь, но простое решение - это прикрепить 2 резиновые ленты, прикрепленные к внутренней стороне двери, с одной стороны и к внутренней стороне коробки для другого конца, это сделает дверь закрытой, когда сервопривод двери закрывается … проверьте мои шаги сборки, вы увидите резиновую ленту в Шаге 6 …
- а как насчет покраски рук в черный, это будет более подлый и гладкий
! Также кончик руки может быть окрашен кроваво-красным или украшен сумасшедшим лицом или чем-то в этом роде.
- удалите последний ход, так как в нем ничего не происходит (предполагается, что он двигает коробку) и напишите свой собственный ход …
Тем не менее, забудьте предложения, я любил вашу машину! И спасибо за большое спасибо, человек, пожалуйста, вы можете уменьшить их и держать видео сосредоточенным на машине :)
Надеюсь, ваш GF понравилось!

0

Elitekilla117riachi

Ответить 5 лет назад на Введение

Хахах Спасибо за комплименты :) На самом деле я хотел сделать с этим гораздо больше, но из-за нехватки времени я не смог уместить многие детали, которые хотел. Я хотел бы добавить немного цвета на руки, но у меня не было времени на это. И я хотел нарисовать лицо на руке с помощью шулера, но она уже завернута и готова подарить ей на Рождество. Hehehe. Я думаю, ей это понравится. Я также хотел, чтобы он встал, но боялся, что резиновые ленты слишком сильно повлияют на сервоприводы. Дверь уже довольно тяжелая. Последний ход, который я сохранил, потому что он держит вас в напряжении, ожидая, пока он выскочит. Хахаха, но я ценю всю помощь моего друга! Определенно стоит того!

0

chuckletushy

5 лет назад

Это я должен сделать … это круто

0

wrs715

5 лет назад на Введение

Это первый проект, который я видел, используя Arduino, где я подумал: «Да, оно того стоит. Теперь я должен его получить». Фантастическая работа!

0

siliconghost

5 лет назад на Введение

Ух, круто взяться за общий проект! Любите свое вращение, делая его более интересным

0

bob3030

5 лет назад

Бесполезное устройство одного человека - это совершенно потрясающе для другого, вне этого мира, мы придумаем, интересно иметь, желанное многими, бесполезное устройство. Спасибо за ваши обновления к проекту. Спасибо за публикацию.

0

эксцентрик

5 лет назад на Введение

Мысль 1: использование Arduino для этого - просто смешное излишество
Мысль 2: После просмотра видео - Использование Arduino для этого просто гений!
Я преклоняюсь перед вашим творчеством!

0

stumitch

5 лет назад на Введение

Это серьезно здорово! Вид напоминает мне личность Wall-E. Спасибо за такой замечательный проект!

0

gazillabytes

5 лет назад на Введение

Поистине бесполезно! Хороший ибл. Я вдохновлен и должен построить один для моего стола. Благодарю.