Áramkörök

Hogyan építsünk egy másik haszontalan gépet: könnyen kivitelezhető és nehezen használható !: 9 lépés (képekkel)

Demjén Ferenc - Hogyan tudnék élni nélküled (HQ)

Demjén Ferenc - Hogyan tudnék élni nélküled (HQ)

Tartalomjegyzék:

Anonim

Olyan sok haszontalan gépet építettek, miért épül egy másik? Egyszerűen igazán szórakoztató :), szórakoztató és szórakoztató játék.
Megpróbáltam ezt a verziót egy karaktert adni, mivel mindig úgy éreztem, hogy valaki „gondolkodik a dobozban”, ezért itt próbáltam, remélem, sikerült adni neki egy életet!
Nagyon örülök, hogy megosztom veletek az összes lépést, és remélem, hogy könnyedén felépítheted a tiédet, és keserű vagy jobb karaktert adhatsz neki! Az én verzióm az Arduino-n alapul, talán úgy gondolja, hogy túlságosan kifinomult, de a rugalmasság miatt, amit nekem adott, azt hiszem, megéri.
Itt van egy videó mindentől, amiről mindenki együtt van. Később elmegyünk az alkatrészek, lépések, vázlatok és kódok közé
Hadd tudjam meg észrevételeit és / vagy kérdéseit, ha vannak ilyenek.
Remélem élvezed!
f.

kellékek:

1. lépés: Hogyan működik?

Minden csatlakozik egy Arduino kártyához, a tábla vár, amíg a kapcsoló logikailag magas lesz, vagyis amikor a kapcsolót elcsúsztatja, a kártya két szervomotort jelez, hogy egy bizonyos módon mozogjon (többet később). , a "kézhez" csatlakoztatott szervo visszacsúsztatja a kapcsolót OFF állásba, majd visszatér a dobozba, majd az "ajtó" szervót. akkor minden megismétlődik.
Ha láttad a fenti videót, akkor a kapcsoló minden egyes alkalommal megváltozik, és ez úgy történik, hogy az Arduino kódban egyszerűen különböző funkciókat írunk különböző időzítéssel ("Mozgások"). Minden alkalommal, amikor a kapcsolót átkapcsolják, új mozdulatot hívok mindaddig, amíg minden meg nem történik, elkezdődik. vegye figyelembe, hogy a 9. lépésben a kód egy másik változatát adtam meg, amely véletlenszerű mozdulatokat választ, nem pedig egymás után. Hozzáadhat annyi mozgást, amennyit csak akar, mindaddig, amíg elegendő memória van az Arduino-n.
Az Arduino mindig be van kapcsolva, ezért adtam hozzá egy kapcsolót az akkumulátor számára, hogy megtakarítson néhány energiát, amikor a gépet nem használja. Már tervezem egy megszakítás használatát a kapcsolón, a jelenlegi egyszerű HIGH / LOW felismerés helyett, és alvó üzemmóddal kapcsolni. Ezzel megtakaríthatja az energiát, ha a gép nincs használatban, és lehetővé teszi, hogy mindig kész legyen (de ez a kódot is bonyolítja) Tehát most csak egy egyszerű BE / KI kapcsoló, és a tábla mindig táplálja .

2. lépés: Az alkatrészek

Szükséged lesz:
Kötelező:
1. Egy doboz
2. Bármely PWM kimenettel rendelkező Arduino kártya (előfordul, hogy van egy régi, körülötte lévő Diecimila)
3. Két standard RC szervo motor (a Futaba-S3003-at használtam, 3,2 Kg / cm-es nyomatékkal, több mint elég az ajtó vagy a kéz mozgatásához)
4. 6-12 V-os akkumulátor (az AR drone akkumulátort használtam, 11,1 v / 1000 mA)
3. Egy SPTT vagy SPST kapcsoló a triggerhez (alapvetően minden olyan kapcsoló, amely megfelel Önnek!)
5. Az akkumulátor másik kapcsolója
6. Egy nyomógomb az Arduino alaphelyzetbe állításához, ha a mozgásokat / kódokat újra szeretné indítani.
7. Néhány áthidaló vezeték

Választható:
Abban az esetben, ha olyan lépést szeretne tervezni, amely magában foglalja a doboz mozgatását (mint például a videó utolsó mozdulata), akkor kaphat:
1. Egy Arduino motorvédő, ez más projektek számára is hasznos lehet (vagy saját maga is megtervezheti a H-hídot)
2. Olcsó RC autó, így az egyenáramú motort és a sebességváltót is átveheti
Továbbá, még mindig az "opcionális" szakaszban építettem egy hardveres visszavonási áramkört, hogy tiszta kapcsoló legyen, amikor a kapcsolót be / ki kapcsoljuk. Ez kihagyható és könnyen végrehajtható az arduino szoftverben késések vagy időzítők használatával. A hardveres visszavonást azért tette, mert hamarosan megváltoztatom a kódot a megszakítások használatára, és mivel ez utóbbiak nem teszik lehetővé a késleltetés / időzítő funkciók megbízható használatát a rutinban, ezért le kellett építeni egy egyszerű visszavonási áramkört a jövőbeli használatra . Ha ki akarja hagyni ezt a részt, akkor egyszerűen csatlakoztasson egy egyszerű kapcsolót / ellenállást az arduino 2-es gombjához, és hajtson végre egy szoftveres visszavonási rutint.
A hardveres bejelentéshez:
1. 10 mF elektrolit kondenzátor
2. 10K ellenállás
3. Logikai NOT kapu, azaz inverter (74HC04 chip) Ez hat invertert tartalmaz, de csak egy kell.
Építsük …

3. lépés: A doboz építése

Bármely megfelelő fiókot használhat. Én építettem az enyém, talán nem tökéletes, de még mindig sok személyes :)
1. 2 lapot használtam 5 mm-es BALSA-fából, nagyon könnyen dolgozhattam egy vágógéppel, és viszonylag erős volt a hihetetlen könnyű súlya miatt.
2. Fogyasztott 5 cső cianoakrilát ragasztót (más néven erős, gyors hatású ragasztók)
Itt van:
A 22 x 14 x 14 cm doboz

4. lépés: vázlatos

A fenti vázlatos (Fritzing használatával készült), amely a következőket mutatja:
Felső rész: Az arduino alaplap, 2 szervó és kapcsoló. Ne feledje, hogy amint azt korábban említettük, az egész debown (felülről jobbra) áramkört egy egyszerű ellenállással / kapcsolóval lehet kicserélni.
Mind az "ajtó", mind a "kéz" szervók közvetlenül az Arduino 5v-es tűjéből működnek. A jelvezetékek a 9. és 10. csaphoz vannak csatlakoztatva. Ezek a csapok támogatják a PWM-et, így használom őket a szervo szögének / pozíciójának vezérlésére (0 és 180 fok között).
Megjegyzés: a piros nyomógomb csak egy alaphelyzetbe állítás (hasonló az arduino táblán találhatóhoz). Hozzáadtam, hogy gyorsan hozzáférhessek a tábla / szoftver visszaállításához, anélkül, hogy kinyitnám a dobozt. Egyszerűen csatlakoztatja a RESET PIN-t a Ground-hoz a visszaállításhoz.
Alsó rész: szükséges, ha egyenáramú motort akar használni és a gépet mozgatni kívánja. Ez az arduino motorvédő, az Arduino tetejére van felszerelve, így mindkét lap mindegyik csapja egymáshoz van csatlakoztatva. Az alábbiakban elkülönítetten mutatom őket, a tisztaság érdekében, remélhetőleg! Ez az árnyékolás akár 2 egyenáramú motort (2 csatornás A / B) vezérelhet hihetetlenül könnyen. Most már csak egyet használok. Lehetővé teszi a rendelkezésre álló 2 csatorna / motor kódjának, irányának, sebességének és törésének beállítását. B-csatornát használok, ahogy az ábrán látható. ahol csap
13 irányt, 11-es csapot és a 8-as csapot a fékek vezérléséhez.
Az akkumulátor 11,1 / 1000 mA, amely a pajzshoz csatlakozik, így az egyenáramú motort, a fő arduino táblát és a szervókat táplálja. ha nem használja a pajzsot, akkor közvetlenül csatlakoztathatja az akkumulátort a fő arduino kártyán lévő tápcsőhöz.

5. lépés: A szervók rögzítése

Itt van a kéz- és ajtószerverek telepítve:
Először telepítenie kell a szervókat a helyes helyekre, ez egy kis próbálkozás és hiba, amíg meg nem kapja a szükséges mozgást. Használhatja az arduino IDE-ben megadott Servo-példát annak érdekében, hogy tesztelje a szervókat és az egyes hajlításokhoz szükséges alakváltozás mennyiségét, és így határozza meg az ajtó és a kézi szervók végleges elhelyezését és karjainak hosszát.
A karok egyszerűen balsa-fából készülnek, vastagabbá tettem őket, hogy ellenálljanak valamilyen szakadásnak.
Az alábbiakban bemutattam, hogyan csináltam. Csak egy jegyzet a kéziszerszámról. Szükséged lesz a szervo tengelyre, hogy közvetlenül a fedél szélénél legyen (amint az alább látható), így elkerülhetjük, hogy nehezen tudnánk készíteni azt a kezét, amely sikeresen eléri a kapcsolót, és vissza tud térni a dobozba.


6. lépés: A kapcsoló, a Servos és az Arduino csatlakoztatása

Az összes kapcsolat látható a vázlatos lépésben, és próbáljon meg mindent a fenti mezőbe hasonlítani:

7. lépés: Választható: az egyenáramú motor és az akkumulátor

A fenti az, hogy hogyan helyeztem el az egyenáramú motoros sebességváltót (egy olcsó RC autóról), és megmutatom a tésztát és a váltás helyét.
Győződjön meg róla, hogy a fogaskerék a lehető legpontosabban helyezkedjen el a doboz kiegyensúlyozásához. Lehet, hogy valamilyen súlyt kell helyeznie a dobozba, hogy egyensúlyba hozza azt a végső összeszerelés után, mivel az általam használt akkumulátor egy kicsit nehéz (100 gr), és némi ingerlést okozott. a doboz átkapcsolásakor vagy mozgatásakor.
Ne feledje, hogy a dc motor sebesség a csapszeg vezérli 11, Irány tűvel 13, és fék a pin 8, ezeket az Arduino motorvédőn B csatornának tekintjük.
A szerelvényen keresztül megpróbáltam elrejteni az összes vezetékes kapcsolót és egyéb alkatrészeket, hogy egyszerű hiteles doboz legyen. Ez vonatkozik a kerekekre is, így körbevágtam a köröket, amelyek mind a kerekeket, mind az akkumulátort tárolják, és hozzáférést biztosítanak a piros reset gombhoz.

8. lépés: A kód

Ahhoz, hogy az arduino kódját írhassa, szüksége van az arduino IDE-re (töltse le ide)
Az 1.0.5-ös verziót használom, csak győződjön meg róla, hogy az IDE-n belül a megfelelő COM-portot (ablakokat) és a fórumtípust választom, majd használd az alábbi kódot, és kattints a feltöltés gombra.
MEGJEGYZÉS: Azok a értékek, amelyeket a kódban használtam a szervók maximális eltérítésének beállítására, pontosan erre a dobozra kerülnek, figyelembe véve a szervók pozicionálását, tengelyét és szögeit. Megpróbáltam ezt. Tehát a saját és a saját értékei alapján kell elkészítenie saját értékeit szervo elhelyezés.
Hivatkozásként az alábbiakban az egyes szervokhoz használt min / max értékek szerepelnek, ahogy látni fogja őket a kódban:
Az ajtó:
80 elrejtés, 155 teljesen nyitott
A kéz:
0 elrejtés, 129 kapcsoló megnyomása

Itt van a kód (Jobb, ha az alábbi lépés helyett letölti a másolás / beillesztés helyett ehhez a lépéshez csatolt fájlt):
#include
Servo ajtóServo;
Servo handServo;
int switch_pin = 2; // kapcsoló beállítása a 2-es érintkezőn
// motor változók
int motorThrottle = 11;
int motorDirection = 13;
int motorBrake = 8;
int pos = 0;
int selectedMove = 0; // mozgásválasztó
int Testmove = 0; // teszt mód: állítsa be a számot, hogy csak egy kiválasztott mozgást teszteljen
// (a normál futtatáshoz Zero-ra van állítva, azaz: körmozgás az amm mozgásoknál)
érvénytelen beállítás ()
{
Serial.begin (9600);
pinMode (switch_pin, INPUT);
doorServo.attach (9); // a 9-es pwm-nél beállított ajtót
handServo.attach (10); // kézi szerszám beállítása a 10 pwm-nél
doorServo.write (80); // ajtó a rejtett pozícióba
handServo.write (0); // kézzel a rejtett pozícióba

// Csatorna B beállítása (mivel az A csatorna az ajtó és a kéziszerszámok között van, és nem használható egyszerre)
pinMode (motorDirection, OUTPUT); // A motorcsatorna B csapját kezdeményezi
pinMode (motorBrake, OUTPUT); // A fékcsatorna B csapját kezdeményezi

}

érvénytelen hurok ()
{
ha (Testmove! = 0) {
selectedMove = Testmove;
}

// ha a kapcsoló be van kapcsolva, akkor mozgassa az ajtót és a kezét, hogy kikapcsolja …
ha (digitalRead (switch_pin) == HIGH)
{

ha (selectMove> 10) {selectedMove = 0; } //, amikor az összes mozdulat lejátszása megtörténik, ismételje meg a lépéseket az elejétől
Az alábbiakban az összes "Mozgás", amit eddig terveztem, mindegyik egy olyan függvény, amely az alábbi kódban van írva, végrehajtja a neveket, abit furcsa? igen, mivel néhány arab nyelven van írva
ha (selectMove == 0) {kikapcsolás (); }
mást, ha (selectMove == 1) {switchoff (); }
mást, ha (selectMove == 2) {switchoffbitaraddod (); }
mást, ha (selectMove == 3) {crazydoor (); }
mást, ha (selectMove == 4) {crazyslow (); }
mást, ha (selectMove == 5) {m7anika7anika (); }
mást, ha (selectMove == 6) {m3alla2 (); }
mást, ha (selectMove == 7) {switchoff (); }
mást, ha (selectMove == 8) {mátrix (); }
mást, ha (selectMove == 9) {sneak (); }
mást, ha (selectMove == 10) {zee7 (); }

ha (Testmove == 0) {
selectedMove ++; // a következő lépéshez, ha nem a teszt módban
}
}
}

// Mozgáskönyvtár
// alapmozgás
érvénytelen kikapcsolás ()
{
// Mozgó ajtó
a (pos = 80; pos <155; pos = 3)
{
doorServo.write (POS);
késleltetés (15);
}

// Mozgó kéz
a (pos = 0; pos <129; pos = 4)
{
handServo.write (POS);
késleltetés (15);
}

// kéz elrejtése
a (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (POS);
késleltetés (15);
}

// ajtó elrejtése
a (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (POS);
késleltetés (15);
}
}

// 3 lépés: nyissa meg és várjon, majd mozgassa a kezét, és várjon, majd kapcsolja be és elrejtse
void switchoffbitaraddod ()
{
// Mozgó ajtó
a (pos = 80; pos <155; pos = 3)
{
doorServo.write (POS);
késleltetés (15);
}
késleltetés (800);
// Mozgó kéz
a (pos = 0; pos <100; pos = 4)
{
handServo.write (POS);
késleltetés (15);
}
késleltetés (1000);
a (pos = 100; pos <129; pos = 4)
{
handServo.write (POS);
késleltetés (15);
}

// kéz elrejtése
a (pos = 129; pos> = 0; pos- = 5)
{
handServo.write (POS);
késleltetés (15);
}

// ajtó elrejtése
a (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (POS);
késleltetés (15);


}

}

// 4-es lépés: nyissa ki az ajtót, majd zárja be sokszor, várjon, majd gyorsan kapcsolja ki és kapcsolja ki és elrejtse.

érvénytelen crazydoor ()
{

// Mozgó ajtó
a (pos = 80; pos <125; pos = 3)
{
doorServo.write (POS);
késleltetés (15);
}

// ajtó elrejtése
a (poz = 125; pos> = 80; pos- = 5)
{
doorServo.write (POS);
késleltetés (15);
}
// Mozgó ajtó
a (pos = 80; pos <110; pos = 3)
{
doorServo.write (POS);
késleltetés (15);
}

// ajtó elrejtése
a (pos = 110; pos> = 80; pos- = 15)
{
doorServo.write (POS);
késleltetés (15);
}
késleltetés (700);
// Mozgó ajtó
a (pos = 80; pos <125; pos = 3)
{
doorServo.write (POS);
késleltetés (15);
}
késleltetés (700);
// ajtó elrejtése
a (poz = 125; pos> = 80; pos- = 5)
{
doorServo.write (POS);
késleltetés (15);
}

// ---- / a ---- // kapcsoló
// Mozgó ajtó
a (pos = 80; pos <155; pos = 8)
{
doorServo.write (POS);
késleltetés (15);
}

// Mozgó kéz
a (pos = 0; pos <129; pos = 3)
{
handServo.write (POS);
késleltetés (15);
}

// kéz elrejtése
a (pos = 129; pos> = 0; pos- = 3)
{
handServo.write (POS);
késleltetés (15);
}

// ajtó elrejtése
a (pos = 155; pos> = 80; pos- = 15)
{
doorServo.write (POS);
késleltetés (15);
}

}

// 5-ös lépés: nyissa ki az ajtót, majd lassan haladjon előre és hátra lassan elrejtve, majd gyorsan zárja be az ajtót
érvénytelen crazyslow ()
{
// Mozgó ajtó
a (pos = 80; pos <155; pos = 1)
{
doorServo.write (POS);
késleltetés (30);
}

// Mozgó kéz
a (pos = 0; pos <129; pos = 1)
{
handServo.write (POS);
késleltetés (30);
}

// kéz elrejtése
a (pos = 129; pos> = 0; pos- = 1)
{
handServo.write (POS);
késleltetés (30);
}

// ajtó elrejtése
a (pos = 155; pos> = 125; pos- = 1)
{
doorServo.write (POS);
késleltetés (30);
}
késleltetés (100);
a (poz = 125; pos> = 80; pos- = 4)
{
doorServo.write (POS);
késleltetés (15);
}

}
// 6 lépés:
void m7anika7anika () {
// Mozgó ajtó
a (pos = 80; pos <155; pos = 3)
{
doorServo.write (POS);
késleltetés (15);
}

// Mozgó kéz
a (pos = 0; pos <70; pos = 1)
{
handServo.write (POS);
késleltetés (15);
}
késleltetés (800);


// ajtó elrejtése
a (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (POS);
késleltetés (15);
}

// ajtó elrejtése
a (pos = 130; pos <155; pos = 3)
{
doorServo.write (POS);
késleltetés (15);
}
// ajtó elrejtése
a (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (POS);
késleltetés (15);
}
// ajtó elrejtése
a (pos = 130; pos <155; pos = 3)
{
doorServo.write (POS);
késleltetés (15);
}

handServo.write (40);
késleltetés (1000);

// Mozgó kéz
a (pos = 40; pos <129; pos = 4)
{
handServo.write (POS);
késleltetés (15);
}

// kéz elrejtése
a (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (POS);
késleltetés (15);
}


a (pos = 120; pos> = 80; pos - = 1)
{
doorServo.write (POS);
késleltetés (15);
}



}
érvénytelen m3alla2 () {
// Mozgó ajtó
a (pos = 80; pos <155; pos = 3)
{
doorServo.write (POS);
késleltetés (15);
}

// Mozgó kéz
a (pos = 0; pos <127; pos = 4)
{
handServo.write (POS);
késleltetés (15);
}
// ajtó elrejtése
a (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (POS);
késleltetés (15);
}
késleltetés (2000);

a (pos = 130; pos <155; pos = 3)
{
doorServo.write (POS);
késleltetés (15);
}

a (pos = 155; pos> = 140; pos- = 3)
{
doorServo.write (POS);
késleltetés (15);
}
a (pos = 140; pos <155; pos = 3)
{
doorServo.write (POS);
késleltetés (15);
}
késleltetés (500);
// kéz elrejtése
a (pos = 127; pos> = 0; pos- = 4)
{
handServo.write (POS);
késleltetés (15);
}

// ajtó elrejtése
a (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (POS);
késleltetés (15);
}
}

érvénytelen mátrix ()
{
// Mozgó ajtó
a (pos = 80; pos <155; pos = 3)
{
doorServo.write (POS);
késleltetés (15);
}

// Mozgó kéz
a (pos = 0; pos <80; pos = 4)
{
handServo.write (POS);
késleltetés (15);
}

a (pos = 80; pos <129; pos = 1)
{
handServo.write (POS);
késleltetés (30);
}
késleltetés (300);

a (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (POS);
késleltetés (10);
}

// ajtó elrejtése
a (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (POS);
késleltetés (15);
}

}
void sneak ()
{
// Mozgó ajtó
a (pos = 80; pos <130; pos = 1)
{
doorServo.write (POS);
késleltetés (30);
}
késleltetés (2000);

// Mozgó kéz
a (pos = 0; pos <40; pos = 1)
{
handServo.write (POS);
késleltetés (30);
}

késleltetés (500);

a (pos = 130; pos <155; pos = 4)
{
doorServo.write (POS);
késleltetés (15);
}
késleltetés (100);

a (pos = 40; pos <90; pos = 4)
{
handServo.write (POS);
késleltetés (15);
}
késleltetés (500);
// kéz elrejtése
a (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (POS);
késleltetés (15);
}
késleltetés (100);
a (pos = 70; pos <90; pos = 4)
{
handServo.write (POS);
késleltetés (15);
}
késleltetés (100);
a (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (POS);
késleltetés (15);
}
késleltetés (100);

a (pos = 70; pos <129; pos = 4)
{
handServo.write (POS);
késleltetés (15);
}

a (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (POS);
késleltetés (15);
}
// ajtó elrejtése
a (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (POS);
késleltetés (15);
}
}


érvénytelen zee7 ()
{
// Mozgó ajtó
a (pos = 80; pos <155; pos = 3)
{
doorServo.write (POS);
késleltetés (15);
}
késleltetés (2000);
// előre @ félsebesség balra
digitalWrite (motorDirection, LOW); // A B csatorna jobb irányát határozza meg
digitalWrite (motorBrake, LOW); // Kapcsolja ki a féket a B csatornára
analógírás (motorThrottle, 100); // A motor B csatornán teljes sebességgel forog
késleltetés (300);
digitalWrite (motorBrake, HIGH); // Fékezzük a féket a B csatornához
késleltetés (2000);

// hátra @ félsebesség jobbra
digitalWrite (motorirány, HIGH); // A B csatorna bal irányát határozza meg
digitalWrite (motorBrake, LOW); // Kapcsolja ki a féket a B csatornára
analógírás (motorThrottle, 100); // A motor B-csatornáján félsebességgel forog
késleltetés (300);
digitalWrite (motorBrake, HIGH); // Fékezzük a féket a B csatornához
késleltetés (1000);

// Mozgó kéz
a (pos = 0; pos <129; pos = 4)
{
handServo.write (POS);
késleltetés (15);
}

// kéz elrejtése
a (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (POS);
késleltetés (15);
}

// ajtó elrejtése
a (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (POS);
késleltetés (15);
}
}


9. lépés: Választható frissítés: Mozgásérzékelés

Ma van egy közelségérzékelője (GP2Y0A21), így most használhatom a gépet, ha a felhasználó megközelíti a váltókapcsolót :)
Ehhez a további lépéshez feltételezem, hogy már építetted a kerekeket a mozgás engedélyezéséhez (lásd az opcionális 8. lépést). Minden, ami most maradt, az, hogy hozzáadja az érzékelőt, és néhány módosítást végez a mozgásérzékelés kódjában.
Az érzékelőnek 3 vezetéke van, sárga jelvezeték csatlakozik pin 3 az arduino-n, míg a piros és fekete kapcsolódnak v5 és talaj a táblán.
Az érzékelőt az ajtó alá rejtettem a képen látható módon, így csak akkor láthatja a felhasználó mozgását, ha az ajtó kinyílik. pontosan mit akarok!
A kódot kicsit (itt is) kellett megváltoztatnom egy mozgásérzékelési rutin megvalósításához (lásd a kódot, a funkcióban zee7 () ) úgy, hogy amikor a mozgás észlelhető, a doboz mozog, először jobbra, majd balra, majd a kéz elfordítja a kapcsolót és elrejti. A kódot komolyan megjegyezték, remélem, nem túlzásba vettem!
Az alábbi frissített kódot is megtalálhatja, és azt is megjegyezzük, hogy a gépet véletlenszerűen választottam a mozgásokra, és ezt egyszerűen visszaállíthatjuk egymás után, egyszerűen beállítva boolean randomize = false;
Köszönöm mindenkinek a nagyszerű javaslatait!
A kód (Jobb, ha alulról másolja / illessze be a lépéshez csatolt fájlt:
#include
Servo ajtóServo;
Servo handServo;
nem aláírt hosszú TimerA, TimerB; // mozgásérzékelő rutin időzítője
int switch_pin = 2; // kapcsoló beállítása a 2-es érintkezőn
// motor változók
int motorThrottle = 11;
int motorDirection = 13;
int motorBrake = 8;
// Távolsági változók
int motionPin = 3; // mozgásérzékelő tű a 0 analógon
int lastDist = 0; // az utolsó távolság emlékezésére
int currentDist = 0;
int thresh = 200; // Mozgás küszöbértéke (állítsa úgy, hogy megkapja a mozgásérzékelés kívánt érzékenységét)

int pos = 0;
int selectedMove = 0; // mozgásválasztó
int Testmove = 0; // teszt mód: állítsa be a számot, hogy csak egy kiválasztott mozgást teszteljen
// (a normál futtatáshoz Zero értékre van állítva, azaz: minden mozgás körforgása)
boolean randomize = true; // ha igaz, a doboz véletlenszerűen fog mozogni, ha false értékre van állítva, akkor a lépések sorrendben 1-től 10-ig fognak történni

érvénytelen beállítás ()
{
Serial.begin (9600);
pinMode (switch_pin, INPUT);
doorServo.attach (9); // a 9-es pwm-nél beállított ajtót
handServo.attach (10); // kézi szerszám beállítása a 10 pwm-nél
doorServo.write (80); // ajtó a rejtett pozícióba
handServo.write (0); // kézzel a rejtett pozícióba
// Csatorna B beállítása, mivel az A csatornát az ajtó és a kézi szervók tartják, és nem használhatók egyszerre
pinMode (motorDirection, OUTPUT); // A motorcsatorna B csapját kezdeményezi
pinMode (motorBrake, OUTPUT); // A fékcsatorna B csapját kezdeményezi

}

érvénytelen hurok ()
{
// ha a kapcsoló be van kapcsolva, akkor mozgassa az ajtót és a kezét, hogy kikapcsolja …
ha (digitalRead (switch_pin) == HIGH)
{

ha (Testmove == 0)
{

ha (randomize == false)
{
ha (kiválasztottMove> 10)
{
selectMove = 0; // az összes mozdulat lejátszásakor ismételje meg a lépéseket az elejétől
}
}
más
{
selectMove = random (11);
}
}
más
{
selectedMove = Testmove;
}
Serial.println (selectedMove);
ha (selectMove == 0) {kikapcsolás (); }
mást, ha (selectMove == 1) {switchoff (); }
mást, ha (selectMove == 2) {switchoffbitaraddod (); }
mást, ha (selectMove == 3) {crazydoor (); }
mást, ha (selectMove == 4) {crazyslow (); }
mást, ha (selectMove == 5) {m7anika7anika (); }
mást, ha (selectMove == 6) {m3alla2 (); }
mást, ha (selectMove == 7) {switchoff (); }
mást, ha (selectMove == 8) {mátrix (); }
mást, ha (selectMove == 9) {sneak (); }
mást, ha (selectMove == 10) {zee7 (); }

ha (Testmove == 0 && randomize == false) {
selectedMove ++; // váltás a következő lépésre, ha nem a teszt módban
}
}
}
// Mozgáskönyvtár
// alapmozgás
érvénytelen kikapcsolás ()
{
// Mozgó ajtó
a (pos = 80; pos <155; pos = 3)
{
doorServo.write (POS);
késleltetés (15);
}

// Mozgó kéz
a (pos = 0; pos <129; pos = 4)
{
handServo.write (POS);
késleltetés (15);
}

// kéz elrejtése
a (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (POS);
késleltetés (15);
}

// ajtó elrejtése
a (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (POS);
késleltetés (15);
}
}

// 3 lépés: nyissa meg és várjon, majd mozgassa a kezét, és várjon, majd kapcsolja be és elrejtse
void switchoffbitaraddod ()
{
// Mozgó ajtó
a (pos = 80; pos <155; pos = 3)
{
doorServo.write (POS);
késleltetés (15);
}
késleltetés (800);
// Mozgó kéz
a (pos = 0; pos <100; pos = 4)
{
handServo.write (POS);
késleltetés (15);
}
késleltetés (1000);
a (pos = 100; pos <129; pos = 4)
{
handServo.write (POS);
késleltetés (15);
}

// kéz elrejtése
a (pos = 129; pos> = 0; pos- = 5)
{
handServo.write (POS);
késleltetés (15);
}

// ajtó elrejtése
a (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (POS);
késleltetés (15);


}

}

// 4-es lépés: nyissa ki az ajtót, majd zárja be sokszor, várjon, majd gyorsan kapcsolja ki és kapcsolja ki és elrejtse.

érvénytelen crazydoor ()
{

// Mozgó ajtó
a (pos = 80; pos <125; pos = 3)
{
doorServo.write (POS);
késleltetés (15);
}

// ajtó elrejtése
a (poz = 125; pos> = 80; pos- = 5)
{
doorServo.write (POS);
késleltetés (15);
}
// Mozgó ajtó
a (pos = 80; pos <110; pos = 3)
{
doorServo.write (POS);
késleltetés (15);
}

// ajtó elrejtése
a (pos = 110; pos> = 80; pos- = 15)
{
doorServo.write (POS);
késleltetés (15);
}
késleltetés (700);
// Mozgó ajtó
a (pos = 80; pos <125; pos = 3)
{
doorServo.write (POS);
késleltetés (15);
}
késleltetés (700);
// ajtó elrejtése
a (poz = 125; pos> = 80; pos- = 5)
{
doorServo.write (POS);
késleltetés (15);
}

// ---- / a ---- // kapcsoló
// Mozgó ajtó
a (pos = 80; pos <155; pos = 8)
{
doorServo.write (POS);
késleltetés (15);
}

// Mozgó kéz
a (pos = 0; pos <129; pos = 3)
{
handServo.write (POS);
késleltetés (15);
}

// kéz elrejtése
a (pos = 129; pos> = 0; pos- = 3)
{
handServo.write (POS);
késleltetés (15);
}

// ajtó elrejtése
a (pos = 155; pos> = 80; pos- = 15)
{
doorServo.write (POS);
késleltetés (15);
}

}

// 5-ös lépés: nyissa ki az ajtót, majd lassan haladjon előre és hátra lassan elrejtve, majd gyorsan zárja be az ajtót
érvénytelen crazyslow ()
{
// Mozgó ajtó
a (pos = 80; pos <155; pos = 1)
{
doorServo.write (POS);
késleltetés (30);
}

// Mozgó kéz
a (pos = 0; pos <129; pos = 1)
{
handServo.write (POS);
késleltetés (30);
}

// kéz elrejtése
a (pos = 129; pos> = 0; pos- = 1)
{
handServo.write (POS);
késleltetés (30);
}

// ajtó elrejtése
a (pos = 155; pos> = 125; pos- = 1)
{
doorServo.write (POS);
késleltetés (30);
}
késleltetés (100);
a (poz = 125; pos> = 80; pos- = 4)
{
doorServo.write (POS);
késleltetés (15);
}

}
// 6 lépés:
void m7anika7anika () {
// Mozgó ajtó
a (pos = 80; pos <155; pos = 3)
{
doorServo.write (POS);
késleltetés (15);
}

// Mozgó kéz
a (pos = 0; pos <70; pos = 1)
{
handServo.write (POS);
késleltetés (15);
}
késleltetés (800);


// ajtó elrejtése
a (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (POS);
késleltetés (15);
}

// ajtó elrejtése
a (pos = 130; pos <155; pos = 3)
{
doorServo.write (POS);
késleltetés (15);
}
// ajtó elrejtése
a (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (POS);
késleltetés (15);
}
// ajtó elrejtése
a (pos = 130; pos <155; pos = 3)
{
doorServo.write (POS);
késleltetés (15);
}

handServo.write (40);
késleltetés (1000);

// Mozgó kéz
a (pos = 40; pos <129; pos = 4)
{
handServo.write (POS);
késleltetés (15);
}

// kéz elrejtése
a (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (POS);
késleltetés (15);
}


a (pos = 120; pos> = 80; pos - = 1)
{
doorServo.write (POS);
késleltetés (15);
}



}
érvénytelen m3alla2 () {
// Mozgó ajtó
a (pos = 80; pos <155; pos = 3)
{
doorServo.write (POS);
késleltetés (15);
}

// Mozgó kéz
a (pos = 0; pos <127; pos = 4)
{
handServo.write (POS);
késleltetés (15);
}
// ajtó elrejtése
a (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (POS);
késleltetés (15);
}
késleltetés (2000);

a (pos = 130; pos <155; pos = 3)
{
doorServo.write (POS);
késleltetés (15);
}

a (pos = 155; pos> = 140; pos- = 3)
{
doorServo.write (POS);
késleltetés (15);
}
a (pos = 140; pos <155; pos = 3)
{
doorServo.write (POS);
késleltetés (15);
}
késleltetés (500);
// kéz elrejtése
a (pos = 127; pos> = 0; pos- = 4)
{
handServo.write (POS);
késleltetés (15);
}

// ajtó elrejtése
a (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (POS);
késleltetés (15);
}
}

érvénytelen mátrix ()
{
// Mozgó ajtó
a (pos = 80; pos <155; pos = 3)
{
doorServo.write (POS);
késleltetés (15);
}

// Mozgó kéz
a (pos = 0; pos <80; pos = 4)
{
handServo.write (POS);
késleltetés (15);
}

a (pos = 80; pos <129; pos = 1)
{
handServo.write (POS);
késleltetés (30);
}
késleltetés (300);

a (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (POS);
késleltetés (10);
}

// ajtó elrejtése
a (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (POS);
késleltetés (15);
}

}
void sneak ()
{
// Mozgó ajtó
a (pos = 80; pos <130; pos = 1)
{
doorServo.write (POS);
késleltetés (30);
}
késleltetés (2000);

// Mozgó kéz
a (pos = 0; pos <40; pos = 1)
{
handServo.write (POS);
késleltetés (30);
}

késleltetés (500);

a (pos = 130; pos <155; pos = 4)
{
doorServo.write (POS);
késleltetés (15);
}
késleltetés (100);

a (pos = 40; pos <90; pos = 4)
{
handServo.write (POS);
késleltetés (15);
}
késleltetés (500);
// kéz elrejtése
a (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (POS);
késleltetés (15);
}
késleltetés (100);
a (pos = 70; pos <90; pos = 4)
{
handServo.write (POS);
késleltetés (15);
}
késleltetés (100);
a (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (POS);
késleltetés (15);
}
késleltetés (100);

a (pos = 70; pos <129; pos = 4)
{
handServo.write (POS);
késleltetés (15);
}

a (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (POS);
késleltetés (15);
}
// ajtó elrejtése
a (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (POS);
késleltetés (15);
}
}

// ez a lépés megnyitja az ajtót, és várja meg a mozgást, ha a kapcsoló közelében található
// a doboz először a Jobbra, majd a Balra mozog, végül a kéz mozog és kikapcsolja a kapcsolót
érvénytelen zee7 ()
{

//nyitott kapu
a (pos = 80; pos <155; pos = 3)
{
doorServo.write (POS);
késleltetés (15);
}
késleltetés (1200); // várjon, hogy az ajtó kinyitása után stabilizálja az érzékelők értékeit

// állítsa be az időzítőt és olvassa el az érzékelőt
// várja meg a küszöbértéket meghaladó mozgást, vagy ha az időzítő lejár (5 mp),
lastDist = analogRead (motionPin);
TimerA = millis ();

míg (millis () - TimerA <= 5000)
{
currentDist = analogRead (motionPin);

// Az aktuális távolság az utolsó távolságtól eltér a küszöbértéknél?
// ha igen, akkor mozgassa a mezőt jobbra
ha ((currentDist> lastDist thresh || currentDist <lastDist - thresh) || currentDist> 300)
{
// előre @ félsebesség balra (válassza ki a sebességet és a késleltetést)
//(i.e késleltetés (300) az Ön szerint doboz és az akkumulátor feszültsége úgy, hogy a mozgási dobás kívánatos)
digitalWrite (motorDirection, LOW); // A csatorna jobb oldali irányát határozza meg
digitalWrite (motorBrake, LOW); // Kapcsolja ki a féket a B csatornára
analógírás (motorThrottle, 100); // A motor B csatornán teljes sebességgel forog
késleltetés (300);
digitalWrite (motorBrake, HIGH); // Fékezzük a féket a B csatornához
szünet;
}
lastDist = currentDist;
}

// állítsa be az időzítőt és olvassa el az érzékelőt
// várja meg a küszöbértéket meghaladó mozgást, vagy ha az időzítő lejár (5 mp),
késleltetés (1200); // várjon, hogy az ajtó kinyitása után stabilizálja az érzékelők értékeit
lastDist = analogRead (motionPin);
TimerB = millis ();
míg (millis () - TimerB <= 5000)
{
currentDist = analogRead (motionPin);
// a doboz már jobbra lépett, és az aktuális távolság az utolsó távolságtól a küszöbnél nagyobb mértékben eltér?
// Ha igen, akkor lépjen a balra
ha ((currentDist> lastDist thresh || currentDist <lastDist - thresh) || currentDist> 300)
{
// hátra @ félsebesség jobbra (válassza ki a sebességet és a késleltetést)
//(i.e késleltetés (300) az Ön szerint doboz és az akkumulátor feszültsége úgy, hogy a mozgási dobás kívánatos)
digitalWrite (motorirány, HIGH); // A B csatorna bal irányát határozza meg
digitalWrite (motorBrake, LOW); // Kapcsolja ki a féket a B csatornára
analógírás (motorThrottle, 100); // A motor B-csatornáján félsebességgel forog
késleltetés (300);
digitalWrite (motorBrake, HIGH); // Fékezzük a féket a B csatornához
szünet;
}

lastDist = currentDist;

}
késleltetés (100);
// Mozgó kéz
a (pos = 0; pos <130; pos = 4)
{
handServo.write (POS);
késleltetés (15);
}

// kéz elrejtése
a (pos = 130; pos> = 0; pos- = 4)
{
handServo.write (POS);
késleltetés (15);
}

// ajtó elrejtése
a (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (POS);
késleltetés (15);
}
}

3 ember készített ezt a projektet!

  • AndyC159 tette!

  • SamL84 tette!

  • melton1313 tette!

Készítette ezt a projektet? Ossza meg velünk!

ajánlások

  • Csavarozógép

  • PCB BOT (vonalkövetés, akadály elkerülése és Bluetooth vezérelt robot egy PCB-ben)

  • A tárgyak internete osztálya

  • A Rainbow Contest színei

  • Fandom verseny

  • Party Challenge

194 Beszélgetések

0

areyoutrying

4 évvel ezelőtt a Bevezetés

Köszönet érte! Ennek az instructable-nak az első Arduino projektjét tettem: egy haszontalan sárkány!

4 válasz 0

Ajannareyoutrying

Válasz 3 évvel ezelőtt

A sárkánygéped félelmetes. !!! Művészeti

0

TJAOkevinareyoutrying

Válasz 3 évvel ezelőtt

Fantasztikus!!!!!

0

riachiareyoutrying

Válasz 4 évvel ezelőtt itt: Bevezetés

Király vagy :) !!!

Nagyszerű személyiség egy sárkánynak! Szeretném, ha újra megcsinálná a videót, miközben a sárkány közvetlenül a kamera felé néz (felülnézet), úgy érzem, ez vidám lesz, úgyhogy nézze meg a nyelvet!

Köszönjük, hogy megosztottad a videódat, és örülök, hogy segítettem

0

areyoutryingriachi

Válasz 4 évvel ezelőtt itt: Bevezetés

Megpróbáltam felülnézetet egy korábbi szakaszban, de nem működött (túlságosan láttam a rendetlen bennfenteseket), ezért elutasítottam, amikor felvettem ezt a videót. Azt hiszem, igazad van: az utolsó szakaszban nagyszerűnek látszott! Sajnos már eladtam a sárkányt … Szóval a következő projektre!

0

br1pro

4 évvel ezelőtt

Nagyon szórakoztató! kemény munka a szervók rögzítése és a kéz tervezése. Köszönjük ezt az utasítást!

1 válasz 0

riachibr1pro

Válasz 4 évvel ezelőtt itt: Bevezetés

Nagy munka ember! igazán szép :) bármilyen videó?

0

clincoln

5 évvel ezelőtt

Nézd meg először a videót, majd nevessetek le

1 válasz 0

TobiasVclincoln

Válasz 4 évvel ezelőtt itt: Bevezetés

Tudom, hogy tettem! : D

0

rileyw

5 évvel ezelőtt

Szuper hűvös a videó miatt úgy tűnt, mintha saját elme lenne

0

Elitekilla117

5 évvel ezelőtt a Bevezetés

A haszontalan gépem arduino és riachis kóddal! A Dr.who tardisává alakult. :)
http://www.youtube.com/watch?v=aDs0T52o6-M

2 válasz 0

riachiElitekilla117

Válasz 5 évvel ezelőtt itt: Bevezetés

SZERETEM!!!! :)) igazán jól megtett ember, olyan boldog, hogy életben látja a bombboxot! Én is a dramatizáció és a zene: p nem tudom megállítani magam, hogy 3 kisebb módosítást javasoljak, ha :)?
- Nagyszerű lenne, ha a gépet álló helyzetbe helyezném, tudom, hogy ez elveszíti a gravitációs segítséget, hogy bezárja az ajtót, de egy egyszerű megoldás az, hogy az ajtó belsejébe két gumiszalagot helyezzünk az egyik oldalon, és a doboz belső oldalához a másik végéig, így az ajtó bezárul, amikor az ajtó szervo bezárul … ellenőrizze az építési lépéseimet, a 6. lépésben látja a gumiszalagot …
- És mi a helyzet a fekete festés a kezével, ez sokkal csúszósabb és csúszósabb lesz
! A kéz hegyét is véres vörösre lehet festeni, vagy őrült arccal vagy valami hasonlóval lehet díszíteni.
- távolítsa el az utolsó lépést, mivel semmi sem történik benne (feltételezve, hogy az az, amelyik mozog a dobozban), és írja a saját lépést …
Mindazonáltal, felejtsd el a javaslatokat, szerettem a gépedet! És köszönjük a sok köszönetért, kérlek, csökkentse őket és tartsa a videót a gépre :)
Remélem, hogy a gf-nek tetszett!

0

Elitekilla117riachi

Válasz 5 évvel ezelőtt itt: Bevezetés

Hahah Köszönöm a bókokat :) Tényleg sokkal többet akartam csinálni rá, de az időprobléma miatt nem tudtam beilleszkedni a sok részletbe, amit akartam. Néhány színt szeretnék hozzáadni a karokhoz, de nem volt időm ezekre. És egy arcot akartam felhívni a karjára egy élesen, de már becsomagolt és készen állt neki neki karácsonyra. Hehehe. Azt hiszem, szeretni fogja. Azt is akartam, hogy felálljon, de attól féltem, hogy a gumiszalagok túl nagy súlyt helyeznek a szervókra. Az ajtó már elég nehéz. Az utolsó mozdulat, amit tartottam, mert feszülten vár rád, hogy kiugrik. Hahaha, de nagyra értékelem a barátom segítségét! Határozottan megéri!

0

chuckletushy

5 évvel ezelőtt

Ezt meg kell tennem … ez félelmetes

0

wrs715

5 évvel ezelőtt a Bevezetés

Ez az első projekt, amit Arduino-val láttam, ahol azt hittem: "Igen, megéri. Most meg kell kapnom." Fantasztikus munka!

0

siliconghost

5 évvel ezelőtt a Bevezetés

Wow, félelmetes egy közös projekt! Szeretné a spinjét, hogy érdekesebbé tegye!

0

bob3030

5 évvel ezelőtt

Az egyik ember haszontalan eszköze a másik teljesen félelmetes, ebből a világból, azt gondoltuk, szórakoztató, sok, haszontalan eszköz megérdemelt. Köszönjük, hogy frissítette a projektet. Köszönjük, hogy küldött.

0

ingadozó ember

5 évvel ezelőtt a Bevezetés

Gondolat 1: Az Arduino használata csak nevetséges túlzás
Gondolat 2: Miután megnézte a videót, az Arduino használata csak ez a tiszta zseni!
Megfogok a kreativitásodra!

0

stumitch

5 évvel ezelőtt a Bevezetés

Ez komolyan nagyszerű! A Wall-E személyiségre emlékeztet. Köszönöm egy ilyen nagyszerű projektet!

0

gazillabytes

5 évvel ezelőtt a Bevezetés

Igazán haszontalan! Nice 'ible. Inspirált vagyok, és ki kell építenem az asztalomra. Kösz.