Вериги

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

Время и Стекло Так выпала Карта HD VKlipe Net

Время и Стекло Так выпала Карта HD VKlipe Net

Съдържание:

Anonim

Толкова много безполезни машини са построени, защо да построиш още една? Просто, това е наистина забавно :), забавно да се изгради и забавно да се играе с.
Опитах се да дам на тази версия характер, защото винаги съм чувствал, че някой "мисли вътре в кутията", така че тук се опитах, надявам се, че успях да дам "нейния" живот!
Наистина съм щастлив да споделя с вас всички стъпки, с всички надежди, че ще можете лесно да изграждате своя и да му придавате горчив или по-добър характер! Моята версия е базирана на Arduino, може би си мислите, че е прекалено голяма, но като се има предвид гъвкавостта, която ми даде, мисля, че си струва.
Ето един видеоклип от всичко, което е събрано. По-късно ще преминем към частите, стъпките, схемите и кода
Кажете ми вашите коментари и / или въпроси, ако има такива.
Надявам се, че ти харесва!
е.

градина:

Стъпка 1: Как работи?

Всичко е свързано с платка Arduino, платката изчаква, докато превключвателят е настроен на логически HIGH, т.е. когато натискате превключвателя, платката сигнализира два серво мотора да се движат по определен начин (повече за това по-късно), след което Серво, свързано с "ръката", ще прехвърли превключвателя обратно в позиция OFF и ще се върне обратно в кутията, последвано от сервоуправление на "вратата". след това всичко се повтаря.
Ако сте видели видеото по-горе, всеки път, когато превключвате превключвателя, машината реагира по различен начин и това се прави, като просто напишете различни функции с различни времена в кода на Arduino (наричам ги "Moves"). Всеки път, когато превключвате превключвателя, извиквам нов ход, докато не свършат всичко. Забележете, че в стъпка 9 представихме друга версия на кода, който избира случайни ходове вместо последователни. Можете да добавите колкото се може повече ходове, колкото искате, докато имате достатъчно памет за Arduino.
Arduino винаги е включен, затова добавих превключвател за батерията, за да спести малко енергия, когато машината не се използва. Вече планирам да използвам прекъсване на превключвателя, вместо сегашното просто откриване на HIGH / LOW и да го свържа с режим на заспиване. Това ще спести енергия, когато машината не се използва, а също така ще й позволи винаги да е готова (но това също ще усложни кода) Така че за сега това е просто превключвател ON / OFF и платката винаги се захранва ,

Стъпка 2: Частите

Ще имаш нужда:
Задължителен:
1. Кутия
2. Всяка Arduino дъска с PWM изходи (случайно имам един стар модел, Diecimila)
3. Два стандартни RC серво мотора (използвах Futaba - S3003, те имат 3,2 Kg / cm въртящ момент, повече от достатъчно за придвижване на вратата или ръката)
4. А батерия 6-12 V (аз използвах батерията AR Drone, тя е 11.1 v / 1000 mA)
3. Превключвател SPTT или SPST за спусъка (основно, всеки превключвател, който ви подхожда!)
5. Друг ключ за батерията
6. Бутон за нулиране на Arduino в случай, че искате да рестартирате ходовете / кода от горе.
7. Някои джъмперни жици

По желание:
В случай, че искате да проектирате ход, който включва преместване на полето (като последния ход на видеоклипа), можете да получите:
1. Щит на мотор Arduino, това също ще бъде полезно за други проекти (или можете сами да проектирате H-мост, да го потърсите)
2. Евтини RC кола, така че можете да вземете DC мотор и скоростна кутия
Освен това, все още в "незадължителната" секция, изградих верига за премахване на хардуера, за да има чист спусък, когато превключвателят е включен / изключен. Това може да бъде пропуснато и лесно да бъде приложено в arduino софтуера чрез закъснения или таймери. Направих хардуерния debounce, защото скоро ще променя кода, за да използвам прекъсванията, и тъй като последните не позволяват надеждното използване на функциите за закъснение / таймер в рутината, така че трябваше да построя проста схема за отказване за бъдеща употреба. , Ако искате да пропуснете тази част, тогава просто свържете прост превключвател / резистор към пин 2 на arduino и изпълнете софтуерен дебютант.
За хардуерния дебънк:
1. 10mF електролитен кондензатор
2. 10K резистор
3. Логиката НЕ портата т.е. инвертор (чип 74HC04) Това има шест инвертора, но ще ви е нужен само един.
Нека го изградим …

Стъпка 3: Изграждане на кутията

Можете да използвате всяка подходяща кутия. Аз построих моя, може би не перфектна, но все пак много лична :)
1. Използвах 2 листа от 5мм BALSA дърво, много лесен за работа с нож и сравнително силен, предвид невероятното му тегло.
2. Консумирани 5 епруветки от Cyanoacrylat лепило (известни като силни бързодействащи лепила)
Ето го:
А 22 x 14 x 14 cm кутия

Стъпка 4: Схема

Над е схемата (нарисувана с помощта на Fritzing), показваща:
Горна част: Главната платка на Arduino, 2 сервомотора и превключващата свързаност. Имайте предвид, че както споменахме по-рано, можете да замените цялата верига на дебюк (top-right) с прост резистор / превключвател.
Сервомоторите "врата" и "ръката" се захранват директно от 5v щифта на Arduino. Сигналните проводници са свързани съответно с пин 9 и 10. Тези щифтове поддържат PWM, като по този начин ги използвам, за да контролирам ъгъла / положението на серво (от 0 до 180 градуса).
Забележка: червеният бутон е само нулиране (подобно на това, което се намира на лицевата страна на дъската Arduino). Аз го добавих, за да имам бърз достъп до нулиране на дъската / софтуера по всяко време, без да отварям кутията. Просто свържете щифта RESET към Ground, за да направите нулирането.
Долна част: необходимо, ако искате да използвате двигател за постоянен ток и да движите машината наоколо. Това е ардуино моторният щит, монтиран е на върха на Arduino, така че всички щифтове на двете платки са свързани помежду си. Аз ги показвам по-долу като разделени само за яснота, надявам се! Този щит може да управлява до 2 DC двигателя (2 канала A / B) с невероятна лекота. Сега използвам само едно. Тя позволява да се зададе код, посоката, скоростта и прекъсванията на всеки от наличните 2 канала / мотора. Използвам канал Б, както е показано по-долу. където е щифт
13 за посока, щифт 11 за скорост и щифт 8 за управление на спирачките.
Батерията е 11.1 / 1000 mA, свързана към екрана, като по този начин захранва DC мотора, главната платка на arduino и сервомеханиците. ако не използвате щита, можете директно да свържете батерията към барела на захранването на главната платка на arduino.

Стъпка 5: Поправяне на серво

Тук са монтирани сервизите за ръце и врати:
Първо трябва да инсталирате сервомеханизмите в правилните им места, това се нуждае от малко опит и грешка, докато не получите необходимото движение. Можете да използвате примера за серво задвижване, предоставен в ардуино IDE, за да тествате сервомоторите и количеството отклонение, необходимо за всеки от тях, и по този начин да вземете решение за крайното позициониране и дължината на ръцете на вратите и сервомерите за ръце.
Ръцете са просто направени от балсово дърво, направих ги по-дебели, за да издържат на разкъсване.
По-долу е как го направих. Само една бележка за ръчното серво. Ще трябва сервозадвижването да бъде директно под ръба на капака (както е показано по-долу), за да се избегне трудното време да се направи ръка, която може успешно да удари ключа и също така да може да се върне обратно в кутията.


Стъпка 6: Свързване на комутатора, серво и Arduino

Направете всички връзки, наблюдавани в схематичната стъпка, и се опитайте да поставите всичко в кутията, подобно на това, което е показано по-горе:

Стъпка 7: По избор: DC мотор и батерия

По-горе е как се поставя моторната скоростна кутия DC (взета от евтина RC кола), също показваща поставянето на тесто и превключвателя.
Уверете се, че сте поставили зъбното колело в центъра, колкото е възможно, за да балансирате кутията, може да се наложи да поставите малко тегло вътре в кутията, за да я балансирате повече след окончателното сглобяване, тъй като използваната от мен батерия е малко тежка (100 гр) и е предизвикала някакво разбъркване. при превключване или преместване на кутията.
Имайте предвид, че двигателят за постоянен ток скорост се контролира от щифт 11, Посока с пин 13, и спирачки на щифт 8, те се считат за канал Б на моторния щит на arduino.
Чрез сглобяването се опитах да скрия всички ключове и други компоненти, за да имам обикновена автентична кутия. Това се отнася и за колелата, така че направих един ръб около тях, който е с колела и батерия, и също така осигурява достъп до червения бутон за нулиране.

Стъпка 8: Кодът

За да напишете код за arduino, ви е необходим arduino IDE (изтеглете го тук)
Използвам версията 1.0.5, просто се уверете, че сте избрали правилния COM порт (windows) и типа на дъската в IDE, след това използвайте кода по-долу и натиснете upload.
ЗАБЕЛЕЖКА: Стойностите I, използвани в кода за задаване на максималната деформация на сервомеханизмите, се правят точно за тази кутия, като се отчита позиционирането на сервомерите, осите и ъглите. Имам това чрез изпитание. Така че трябва да измислите свои собствени стойности според вашата кутия и поставяне на серво.
За справка по-долу са изброени минималните / максималните стойности, които използвах за всеки серво, както ще ги видите в кода:
Вратата:
80 се крие, 155 напълно отворени
Ръката:
0 скриване, 129 натискане на превключвателя

Ето кода (по-добре да изтеглите прикачения към тази стъпка файл вместо копиране / поставяне отдолу):
#include
Серво вратиСерво;
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; // тестов режим: настройте да премествате номера, за да тествате само един избран ход
// (настроено на нула, за да се изпълнява нормално, т.е.
void setup ()
{
Serial.begin (9600);
pinMode (switch_pin, INPUT);
doorServo.attach (9); // настройте сервоусилвателя на пин 9 pwm
handServo.attach (10); // настройте ръчно серво на Pin 10 pwm
doorServo.write (80); // зададе вратата за скриване
handServo.write (0); // задайте ръка на скрита позиция

// Настройка на канал Б (тъй като канал А е запазен от сървъри за врата и ръка и не може да се използва по едно и също време)
pinMode (насока на двигателя, изход); // Инициира пин на канал Б на двигателя
pinMode (моторна спирачка, изход); // Инициира пин спирачния канал B. t

}

невалидна линия ()
{
ако (Testmove! = 0) {
selectedMove = Testmove;
}

// ако превключвателят е включен, след това преместете вратата и ръката, за да го изключите …
ако (digitalRead (switch_pin) == HIGH)
{

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

ако (Testmove == 0) {
selectedMove ++; // преминете към следващия ход, ако не в тестов режим
}
}
}

// Библиотека на ходовете
// основен ход
анулиране на void ()
{
// Преместване на вратата
за (pos = 80; pos <155; pos = 3)
{
doorServo.write (поз);
забавяне (15);
}

// Преместване на ръка
за (pos = 0; pos <129; pos = 4)
{
handServo.write (поз);
забавяне (15);
}

// крие се ръка
за (pos = 129; pos> = 0; поз- = 4)
{
handServo.write (поз);
забавяне (15);
}

// вратата се крие
за (pos = 155; поз> = 80; поз- = 3)
{
doorServo.write (поз);
забавяне (15);
}
}

// ход 3: отворете и изчакайте, след това преместете ръката и изчакайте, след това превключете и скрийте
void switchoffbitbitdod ()
{
// Преместване на вратата
за (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; поз- = 5)
{
handServo.write (поз);
забавяне (15);
}

// вратата се крие
за (pos = 155; поз> = 80; поз- = 3)
{
doorServo.write (поз);
забавяне (15);


}

}

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

невалиден crazydoor ()
{

// Преместване на вратата
за (pos = 80; pos <125; pos = 3)
{
doorServo.write (поз);
забавяне (15);
}

// вратата се крие
за (pos = 125; поз> = 80; поз- = 5)
{
doorServo.write (поз);
забавяне (15);
}
// Преместване на вратата
за (pos = 80; pos <110; pos = 3)
{
doorServo.write (поз);
забавяне (15);
}

// вратата се крие
за (pos = 110; pos> = 80; поз- = 15)
{
doorServo.write (поз);
забавяне (15);
}
забавяне (700);
// Преместване на вратата
за (pos = 80; pos <125; pos = 3)
{
doorServo.write (поз);
забавяне (15);
}
забавяне (700);
// вратата се крие
за (pos = 125; поз> = 80; поз- = 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; поз- = 3)
{
handServo.write (поз);
забавяне (15);
}

// вратата се крие
за (pos = 155; поз> = 80; поз- = 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; поз- = 1)
{
handServo.write (поз);
забавяне (30);
}

// вратата се крие
за (pos = 155; pos> = 125; поз- = 1)
{
doorServo.write (поз);
забавяне (30);
}
забавяне (100);
за (pos = 125; pos> = 80; поз- = 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; поз- = 3)
{
doorServo.write (поз);
забавяне (15);
}

// вратата се крие
за (pos = 130; pos <155; pos = 3)
{
doorServo.write (поз);
забавяне (15);
}
// вратата се крие
за (pos = 155; pos> = 130; поз- = 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; поз- = 4)
{
handServo.write (поз);
забавяне (15);
}


за (pos = 120; поз> = 80; поз - = 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; поз- = 3)
{
doorServo.write (поз);
забавяне (15);
}
забавяне (2000);

за (pos = 130; pos <155; pos = 3)
{
doorServo.write (поз);
забавяне (15);
}

за (pos = 155; поз> = 140; поз- = 3)
{
doorServo.write (поз);
забавяне (15);
}
за (pos = 140; pos <155; pos = 3)
{
doorServo.write (поз);
забавяне (15);
}
забавяне (500);
// крие се ръка
за (pos = 127; pos> = 0; поз- = 4)
{
handServo.write (поз);
забавяне (15);
}

// вратата се крие
за (pos = 155; поз> = 80; поз- = 3)
{
doorServo.write (поз);
забавяне (15);
}
}

void matrix ()
{
// Преместване на вратата
за (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; поз- = 4)
{
handServo.write (поз);
забавяне (10);
}

// вратата се крие
за (pos = 155; поз> = 80; поз- = 3)
{
doorServo.write (поз);
забавяне (15);
}

}
void sneak ()
{
// Преместване на вратата
за (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; поз- = 4)
{
handServo.write (поз);
забавяне (15);
}
забавяне (100);
за (pos = 70; pos <90; pos = 4)
{
handServo.write (поз);
забавяне (15);
}
забавяне (100);
за (pos = 90; pos> = 70; поз- = 4)
{
handServo.write (поз);
забавяне (15);
}
забавяне (100);

за (pos = 70; pos <129; pos = 4)
{
handServo.write (поз);
забавяне (15);
}

за (pos = 129; pos> = 0; поз- = 4)
{
handServo.write (поз);
забавяне (15);
}
// вратата се крие
за (pos = 155; поз> = 80; поз- = 3)
{
doorServo.write (поз);
забавяне (15);
}
}


void zee7 ()
{
// Преместване на вратата
за (pos = 80; pos <155; pos = 3)
{
doorServo.write (поз);
забавяне (15);
}
забавяне (2000);
// напред @ половин скорост наляво
digitalWrite (моторна посока, LOW); // Определя правилната посока на канал Б
digitalWrite (моторна спирачка, LOW); // Изключете спирачката за канал В
analogWrite (двигател, 100); // завърта мотора на канал Б с пълна скорост
забавяне (300);
digitalWrite (моторна спирачка, HIGH); // Премахнете спирачката за канал Б
забавяне (2000);

// назад @ половин скорост вдясно
digitalWrite (посока на двигателя, HIGH); // Установява лява посока на канал Б
digitalWrite (моторна спирачка, LOW); // Изключете спирачката за канал В
analogWrite (двигател, 100); // завърта мотора на канал Б на половин скорост
забавяне (300);
digitalWrite (моторна спирачка, HIGH); // Премахнете спирачката за канал Б
забавяне (1000);

// Преместване на ръка
за (pos = 0; pos <129; pos = 4)
{
handServo.write (поз);
забавяне (15);
}

// крие се ръка
за (pos = 129; pos> = 0; поз- = 4)
{
handServo.write (поз);
забавяне (15);
}

// вратата се крие
за (pos = 155; поз> = 80; поз- = 3)
{
doorServo.write (поз);
забавяне (15);
}
}


Стъпка 9: Незадължителна актуализация: Откриване на движение

Днес имам сензор за близост (GP2Y0A21), така че сега мога да го използвам, за да преместя машината, ако потребителят се приближи до превключвателя :)
За тази допълнителна стъпка предполагам, че вече сте построили колелата, за да позволите движение (вижте опционална стъпка 8). Остава само да добавите сензора и да направите някои промени в кода за откриване на движение.
Сензорът има 3 жици, към които е свързан жълт сигнален проводник пин 3 на arduino, докато червен и черно са свързани с v5 и приземен съответно на дъската.
Поставих сензора скрит под вратата, както е показано на снимката, така че може да „види“ движението на потребителя само когато вратата се отвори. точно това, от което се нуждая!
Аз също трябваше да променя кода малко (тук), за да реализирам рутината за откриване на движение (виж кода, във функция zee7 () ), така че когато се открие движение, кутията ще се премести, първо надясно, след това наляво, след това ръката ще завърти ключа и ще се скрие. Кодът е силно коментиран, надявам се да не прекалявам!
Можете да намерите актуализирания код по-долу, също така обърнете внимание, че съм направил машината да избира движенията на случаен принцип. boolean randomize = false;
Благодаря ВСИЧКО за вашите велики предложения!
Кодът (По-добре да изтеглите прикачения към тази стъпка файл вместо копиране / поставяне отдолу):
#include
Серво вратиСерво;
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; // тестов режим: настроен за преместване на номер, за да тества само един избран ход
// (задайте нула, за да стартирате нормално, т.е.
boolean randomize = true; // ако е вярно, полето ще се движи на случаен принцип, ако е зададено на false, тогава ходовете ще се изпълняват последователно от 1 до 10

void setup ()
{
Serial.begin (9600);
pinMode (switch_pin, INPUT);
doorServo.attach (9); // настройте сервоусилвателя на пин 9 pwm
handServo.attach (10); // настройте ръчно серво на Pin 10 pwm
doorServo.write (80); // зададе вратата за скриване
handServo.write (0); // задайте ръка на скрита позиция
// Настройка на канал Б, тъй като канал А се запазва от сървъри за врата и ръка и не може да се използва едновременно
pinMode (насока на двигателя, изход); // Инициира пин на канал Б на двигателя
pinMode (моторна спирачка, изход); // Инициира пин спирачния канал B. t

}

невалидна линия ()
{
// ако превключвателят е включен, след това преместете вратата и ръката, за да го изключите …
ако (digitalRead (switch_pin) == HIGH)
{

if (Testmove == 0)
{

ако (случайно == грешно)
{
if (избрано Преместване> 10)
{
selectedMove = 0; // когато се играят всички ходове, повторете ходовете от началото
}
}
още
{
selectedMove = случайно (11);
}
}
още
{
selectedMove = Testmove;
}
Serial.println (selectedMove);
if (selectedMove == 0) {switchoff (); }
иначе ако (избрано = = 1) {switchoff (); }
друго, ако (избрано = = 2) {switchoffbitaraddod (); }
иначе ако (избрано = = 3) {crazydoor (); }
иначе, ако (избрано = = 4) {crazyslow (); }
иначе ако (избрано = = 5) {m7anika7anika (); }
друго, ако (избрано = = 6) {m3alla2 (); }
иначе, ако (избрано = = 7) {switchoff (); }
иначе ако (избрано = = 8) {матрица (); }
иначе, ако (избрано = = 9) {промъкни (); }
иначе ако (избрано = = 10) {zee7 (); }

ако (Testmove == 0 && случайно == грешно) {
selectedMove ++; // преминава към следващия ход, ако не е в тестов режим
}
}
}
// Библиотека на ходовете
// основен ход
анулиране на void ()
{
// Преместване на вратата
за (pos = 80; pos <155; pos = 3)
{
doorServo.write (поз);
забавяне (15);
}

// Преместване на ръка
за (pos = 0; pos <129; pos = 4)
{
handServo.write (поз);
забавяне (15);
}

// крие се ръка
за (pos = 129; pos> = 0; поз- = 4)
{
handServo.write (поз);
забавяне (15);
}

// вратата се крие
за (pos = 155; поз> = 80; поз- = 3)
{
doorServo.write (поз);
забавяне (15);
}
}

// ход 3: отворете и изчакайте, след това преместете ръката и изчакайте, след това превключете и скрийте
void switchoffbitbitdod ()
{
// Преместване на вратата
за (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; поз- = 5)
{
handServo.write (поз);
забавяне (15);
}

// вратата се крие
за (pos = 155; поз> = 80; поз- = 3)
{
doorServo.write (поз);
забавяне (15);


}

}

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

невалиден crazydoor ()
{

// Преместване на вратата
за (pos = 80; pos <125; pos = 3)
{
doorServo.write (поз);
забавяне (15);
}

// вратата се крие
за (pos = 125; поз> = 80; поз- = 5)
{
doorServo.write (поз);
забавяне (15);
}
// Преместване на вратата
за (pos = 80; pos <110; pos = 3)
{
doorServo.write (поз);
забавяне (15);
}

// вратата се крие
за (pos = 110; pos> = 80; поз- = 15)
{
doorServo.write (поз);
забавяне (15);
}
забавяне (700);
// Преместване на вратата
за (pos = 80; pos <125; pos = 3)
{
doorServo.write (поз);
забавяне (15);
}
забавяне (700);
// вратата се крие
за (pos = 125; поз> = 80; поз- = 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; поз- = 3)
{
handServo.write (поз);
забавяне (15);
}

// вратата се крие
за (pos = 155; поз> = 80; поз- = 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; поз- = 1)
{
handServo.write (поз);
забавяне (30);
}

// вратата се крие
за (pos = 155; pos> = 125; поз- = 1)
{
doorServo.write (поз);
забавяне (30);
}
забавяне (100);
за (pos = 125; pos> = 80; поз- = 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; поз- = 3)
{
doorServo.write (поз);
забавяне (15);
}

// вратата се крие
за (pos = 130; pos <155; pos = 3)
{
doorServo.write (поз);
забавяне (15);
}
// вратата се крие
за (pos = 155; pos> = 130; поз- = 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; поз- = 4)
{
handServo.write (поз);
забавяне (15);
}


за (pos = 120; поз> = 80; поз - = 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; поз- = 3)
{
doorServo.write (поз);
забавяне (15);
}
забавяне (2000);

за (pos = 130; pos <155; pos = 3)
{
doorServo.write (поз);
забавяне (15);
}

за (pos = 155; поз> = 140; поз- = 3)
{
doorServo.write (поз);
забавяне (15);
}
за (pos = 140; pos <155; pos = 3)
{
doorServo.write (поз);
забавяне (15);
}
забавяне (500);
// крие се ръка
за (pos = 127; pos> = 0; поз- = 4)
{
handServo.write (поз);
забавяне (15);
}

// вратата се крие
за (pos = 155; поз> = 80; поз- = 3)
{
doorServo.write (поз);
забавяне (15);
}
}

void matrix ()
{
// Преместване на вратата
за (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; поз- = 4)
{
handServo.write (поз);
забавяне (10);
}

// вратата се крие
за (pos = 155; поз> = 80; поз- = 3)
{
doorServo.write (поз);
забавяне (15);
}

}
void sneak ()
{
// Преместване на вратата
за (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; поз- = 4)
{
handServo.write (поз);
забавяне (15);
}
забавяне (100);
за (pos = 70; pos <90; pos = 4)
{
handServo.write (поз);
забавяне (15);
}
забавяне (100);
за (pos = 90; pos> = 70; поз- = 4)
{
handServo.write (поз);
забавяне (15);
}
забавяне (100);

за (pos = 70; pos <129; pos = 4)
{
handServo.write (поз);
забавяне (15);
}

за (pos = 129; pos> = 0; поз- = 4)
{
handServo.write (поз);
забавяне (15);
}
// вратата се крие
за (pos = 155; поз> = 80; поз- = 3)
{
doorServo.write (поз);
забавяне (15);
}
}

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

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

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

докато (millis () - TimerA <= 5000)
{
currentDist = analogRead (motionPin);

// Дали текущото разстояние се отклонява от последното разстояние с повече от прага?
// ако да, след това преместете полето надясно
if ((currentDist> lastDist thresh || currentDist <lastDist - thresh) || currentDist> 300)
{
// напред @ половин скорост наляво (изберете скоростта и закъснението
// (т.е. забавяне (300) според вашето поле и напрежение на батерията, така че желателното движение е желателно)
digitalWrite (моторна посока, LOW); // Установява RIGHT посока на Канал А
digitalWrite (моторна спирачка, LOW); // Изключете спирачката за канал В
analogWrite (двигател, 100); // завърта мотора на канал Б с пълна скорост
забавяне (300);
digitalWrite (моторна спирачка, HIGH); // Премахнете спирачката за канал Б
прекъсване;
}
lastDist = currentDist;
}

// настройте таймера и прочетете сензора
// изчакайте движение, което надвишава прага или ако таймерът изтече (5 сек),
забавяне (1200); // изчакайте да стабилизирате показанията на сензора след отваряне на вратата
lastDist = analogRead (motionPin);
TimerB = millis ();
докато (millis () - TimerB <= 5000)
{
currentDist = analogRead (motionPin);
// дали кутията вече се е преместила надясно и текущото разстояние се отклонява от последното разстояние с повече от прага?
// Ако да, тогава се преместете наляво
if ((currentDist> lastDist thresh || currentDist <lastDist - thresh) || currentDist> 300)
{
// назад @ половин скорост вдясно (изберете скоростта и закъснението
// (т.е. забавяне (300) според вашето поле и напрежение на батерията, така че желателното движение е желателно)
digitalWrite (посока на двигателя, HIGH); // Установява лява посока на канал Б
digitalWrite (моторна спирачка, LOW); // Изключете спирачката за канал В
analogWrite (двигател, 100); // завърта мотора на канал Б на половин скорост
забавяне (300);
digitalWrite (моторна спирачка, HIGH); // Премахнете спирачката за канал Б
прекъсване;
}

lastDist = currentDist;

}
забавяне (100);
// Преместване на ръка
за (pos = 0; pos <130; pos = 4)
{
handServo.write (поз);
забавяне (15);
}

// крие се ръка
за (pos = 130; pos> = 0; поз- = 4)
{
handServo.write (поз);
забавяне (15);
}

// вратата се крие
за (pos = 155; поз> = 80; поз- = 3)
{
doorServo.write (поз);
забавяне (15);
}
}

3 човека направиха този проект!

  • AndyC159 го направи!

  • SamL84 го направи!

  • melton1313 го направи!

Направихте ли този проект? Споделете го с нас!

Препоръки

  • Машина за сортиране на винтове

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

  • Клас "Интернет на нещата"

  • Цветове на конкурса Rainbow

  • Конкурс за фендоми

  • Party Challenge

194 Дискусии

0

areyoutrying

Преди 4 години във Въведение

Благодаря за това! Направих първия си проект Arduino, базиран на този инструктаж: безполезен дракон!

4 отговора 0

Ajannareyoutrying

Отговор преди 3 години

Вашият дракон машина е страхотно. !!! Артистичен

0

TJAOkevinareyoutrying

Отговор преди 3 години

Страхотен !!!!!

0

riachiareyoutrying

Отговор преди 4 години на Въведение

Ти си страхотен :) !!!

Страхотна личност за Дракон! Иска ми се да можете да повторите видеото, докато драконът е изправен директно пред камерата (отгоре), чувствам, че това ще бъде весело, така че вижте езика, който се промъква навън!

Благодаря за споделянето на видеоклипа си и се радвам, че i'able ми помогна

0

areyoutryingriachi

Отговор преди 4 години на Въведение

Аз се опитах отгоре изглед в по-ранен етап, но тя не работи (видях твърде много на разхвърлян вътрешностите), така че аз го отхвърли, когато взех това видео. Мисля, че сте прав - въпреки че на последния етап щеше да изглежда страхотно! За съжаление аз вече отдадох дракона на разстояние … И така, към следващия проект!

0

br1pro

преди 4 години

Много забавно! усилена работа по фиксиране на сервомеханизма и проектиране на ръката. Благодаря за тази инструкция!

1 отговор 0

riachibr1pro

Отговор преди 4 години на Въведение

Чудесен работен човек! наистина хубаво :) всяко видео?

0

clincoln

преди 5 години

Гледайте видеото на него първо, след което се смейте

1 отговор 0

TobiasVclincoln

Отговор преди 4 години на Въведение

Знам, че го направих! :Д

0

rileyw

преди 5 години

Супер хладното видео го накара да изглежда като че ли имаше собствен ум

0

Elitekilla117

Преди 5 години във Въведение

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

2 отговора 0

riachiElitekilla117

Отговор преди 5 години на Въведение

ОБИЧАМ ГО!!!! :)) наистина добре направен човек, толкова щастлив да видя бомбокс жив! Аз също и драматизацията и музиката: p просто не мога да се спра на 3 малки промени, ако мога :)?
- би било чудесно да поставите машината в изправено положение, знам, че това ще направи загубата на гравитацията, за да затворите вратата, но простото решение е да поставите 2 гумени ленти, прикрепени към вътрешната страна на вратата от едната страна и към вътрешната страна на кутията за другия край, това ще направи вратата затворена, когато вратата на серво се затваря … Проверете моите стъпки на изграждане, ще видите гумената лента в Стъпка 6 …
- и какво ще кажеш за боядисване на ръцете в черно, ще бъде по-подъл и хлъзгав
! Също така ръчният връх може да бъде боядисан в кървавочервено или украсено с лудо лице или нещо подобно.
- премахнете последния ход, тъй като в него не се случва нищо (би трябвало да е този, който премества кутията) и да напишете собствения си ход …
Независимо от това, забравете предложенията, обичах машинното! И благодаря за толкова много благодарности, моля, можете да ги намалите и да запазите видеото фокусирано върху машината :)
Надявам се, че вашият gf го хареса!

0

Elitekilla117riachi

Отговор преди 5 години на Въведение

Hahah Благодаря ви за комплиментите :) Всъщност исках да направя много повече за него, но заради времевата криза не можех да се побере в много от детайлите, които исках. Бих искал да добавя малко цвят към ръцете, но нямах време за тях. И аз исках да нарисувам лицето на ръката с точица, но вече е обгърната и готова да й даде за Коледа. Хехехе. Мисля, че тя ще го обича. Също така исках да се изправя, но се страхуваше, че гумените ленти ще поставят твърде много тежест върху сервомеханиците. Вратата вече е доста тежка. Последният ход, който запазих, защото те държи в напрежение, чакайки да изскочи. Хахаха, но оценявам цялата помощ на моя приятел! Определено си струва!

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 години във Въведение

Наистина безполезно! Хубаво. Вдъхновен съм и трябва да построя един за бюрото си. Благодаря.