Krugovi

Kako izgraditi još jedan beskoristan stroj: lako napraviti i teško koristiti! 9 koraka (sa slikama)

KAKO NAPRAVITI MAJICU SA SVOJOM SLIKOM? Uz Pomoc Pegle!

KAKO NAPRAVITI MAJICU SA SVOJOM SLIKOM? Uz Pomoc Pegle!

Sadržaj:

Anonim

Toliko beskorisnih strojeva je izgrađeno, zašto graditi još jedan? Jednostavno, stvarno je zabavno :), zabavno je graditi se i zabavno se igrati.
Pokušao sam ovoj verziji dati lik, jer sam uvijek osjećao da netko "razmišlja unutar kutije", pa sam ovdje pokušao, nadam se da sam uspio "dati joj" život!
Stvarno sam sretan što mogu podijeliti s vama sve korake, sa svim nadama da ćete lako izgraditi vaš i dati mu gorak ili bolji karakter! Moja verzija je bazirana na Arduinu, možda mislite da je pretjerana, ali s obzirom na fleksibilnost koju mi ​​je dala, mislim da se isplati.
Ovdje je video o svemu što je sve sastavljeno. Kasnije ćemo se preseliti u dijelove, korake, sheme i kod
Javite mi svoje komentare i / ili pitanja ako ih imate.
Nadam se da uživaš!
f.

Pribor:

Korak 1: Kako funkcionira?

Sve je povezano s Arduino pločom, ploča čeka dok se prekidač ne podesi na logiku HIGH, tj. Kada pritisnete prekidač, ploča signalizira dva servo motora da se kreću na određeni način (više o tome kasnije), nakon čega , servo spojen na "ruku" će pomaknuti prekidač natrag u položaj OFF, i vratiti se natrag u kutiju, nakon čega slijedi servo "vrata". onda se sve ponavlja.
Ako ste vidjeli gore navedeni videozapis, svaki put kada se prekidač uključi, stroj reagira na drugačiji način, a to se radi jednostavnim pisanjem različitih funkcija s različitim vremenskim razmacima u Arduino kodu, (zovem ih "Moves"). Svaki put kad je prekidač uključen, zovem novi potez dok se sve ne završi. imajte na umu da sam u 9. koraku dao drugu verziju koda koja odabire slučajne poteze umjesto sekvencijalnog. Možete dodati onoliko poteza koliko želite, sve dok imate dovoljno memorije na Arduinu.
Arduino je uvijek uključen, zato sam dodao prekidač za bateriju kako bih uštedio malo energije kada stroj nije u uporabi. Već planiram koristiti prekidač na prekidaču, umjesto trenutne jednostavne HIGH / LOW detekcije, i povezati ga s mirovanjem. To će uštedjeti energiju kada stroj nije u upotrebi, a također i uvijek biti spreman (ali to će također zakomplicirati kod) Dakle, za sada, to je samo jednostavan prekidač za uključivanje / isključivanje, a ploča je uvijek uključena ,

Korak 2: Dijelovi

Trebat će vam:
obavezna:
1. Kutija
2. Bilo koja Arduino ploča s PWM izlazima (slučajno imam staru, Diecimila)
3. Dva standardna RC servo motora (koristio sam Futaba - S3003, imaju moment od 3,2 kg / cm, više nego dovoljno za pomicanje vrata ili ruke)
4. Baterija od 6-12 V (koristila sam bateriju AR drone, to je 11,1 v / 1000 mA)
3. SPTT ili SPST prekidač za okidač (u osnovi, bilo koji prekidač koji vam odgovara!)
5. Još jedan prekidač za bateriju
6. Pritisnite gumb za resetiranje Arduina u slučaju da želite ponovno pokrenuti poteze / kod s vrha.
7. Neke kratkospojne žice

Opcionalno:
U slučaju da želite dizajnirati potez koji uključuje pomicanje okvira (kao posljednji potez u videozapisu), možete dobiti:
1. Arduino motorni štit, to će također biti korisno za druge projekte (ili možete sami dizajnirati H-most, pretražiti ga)
2. Jeftini RC auto, tako da možete uzeti njegov DC motor i mjenjač
Nadalje, još uvijek u "izbornom" odjeljku, izgradio sam hardverski odskočni krug kako bi imao čist okidač kada je prekidač uključen / isključen. To se može preskočiti i lako implementirati u arduino softver pomoću kašnjenja ili tajmera. Napravio sam hardversku debounce jer ću uskoro promijeniti kod za korištenje prekida, a budući da drugi ne dopuštaju pouzdanu uporabu funkcija odgode / tajmera u rutini, morao sam izgraditi jednostavan de-bounce krug za buduću upotrebu. , Ako želite preskočiti ovaj dio, onda jednostavno spojite jednostavan prekidač / otpornik na pin 2 arduino i provedite rutinu za softversku debounce.
Za debounce na hardveru:
1. 10mF elektrolitički kondenzator
2. 10K otpornik
3.Logika NE vrata i.e Inverter (čip 74HC04) To ima šest invertera, ali će vam trebati samo jedan.
Izgradimo ga …

Korak 3: Izgradnja okvira

Možete koristiti bilo koju kutiju koja vam odgovara. Ja sam izgradio moju, možda ne savršenu, ali još uvijek osobnu :)
1. Koristio sam 2 lista BALSA drva debljine 5 mm, vrlo jednostavan za rad s rezačem i relativno jak s obzirom na njegovu nevjerojatnu laganu težinu.
2. Potrošene 5 cijevi Cyanoacrylat ljepila (poznatih kao snažni brzo-djelujući adhezivi)
Evo ga:
22 x 14 x 14 cm kutija

Korak 4: Shematski prikaz

Iznad je shematski prikaz (nacrtan pomoću Fritzinga), koji prikazuje:
Gornji dio: Arduino glavna ploča, 2 servos i prebacivanje povezivanja. Imajte na umu da kao što je ranije spomenuto možete zamijeniti cijeli debounce (top-right) sklop s jednostavnim otpornikom / prekidačem.
I "vrata" i "ručni" servo motori napajaju se izravno s 5v igle na Arduinu. Signalne žice su spojene na pinove 9 i 10. Ove igle podržava PWM, tako da ih koristim za kontrolu kuta / položaja servoa (od 0 do 180 stupnjeva max).
Napomena: crveni gumb je samo reset (sličan onome na licu Arduino ploče). Dodao sam ga kako bih imao brz pristup resetiranju ploče / softvera u bilo koje vrijeme bez otvaranja kutije. Jednostavno spojite RESET pin na Ground kako biste izvršili resetiranje.
Donji dio: ako želite koristiti istosmjerni motor i pomicati stroj oko njega. To je štitnik motora arduino, montiran je na vrhu Arduino, tako da su svi pinovi na obje ploče međusobno povezani. Pokazujem ih ispod kao odvojene samo zbog jasnoće, nadamo se! Ovaj štit može kontrolirati do 2 DC motora (2 kanala A / B) s nevjerojatnom lakoćom. Sada koristim samo jedan. Omogućuje postavljanje koda, smjera, brzine i prekida bilo kojeg od dostupnih 2 kanala / motora. Koristim kanal B kao što je prikazano ispod. gdje je pin
13 za smjer, osovinica 11 za brzinu i osovinica 8 za upravljanje kočnicama.
Baterija je 11,1 / 1000 mA, spojena na štit, čime se napaja DC motor, glavna ploča arduino i servos. ako ne koristite štit, možete izravno spojiti bateriju na cijev napajanja na glavnoj arduino ploči.

Korak 5: Popravljanje servisa

Ovdje su ugrađeni servomotori za ruke i vrata:
Prvo trebate instalirati servos na odgovarajuća mjesta, to treba malo pokušaja i pogrešaka dok ne dobijete potreban pokret. Primjer Servoa koji se nalazi u arduino IDE-u možete upotrijebiti za testiranje servosova i količine otklona potrebnih za svaku od njih, te tako odlučiti o konačnom položaju i duljini ruku za posluživanje vrata i ruku.
Ruke su jednostavno napravljene od balsa drva, ja sam ih učinio debljim da izdrže neko suzenje.
Ispod je kako sam to učinio. Samo jedna napomena o servo servisu. Trebat će vam servo vratilo da bude izravno ispod ruba poklopca (kao što je prikazano dolje), kako bi se izbjeglo teško vrijeme izrade ruke koja može uspješno pogoditi prekidač, a također biti u mogućnosti vratiti se u kutiju.


Korak 6: Povezivanje prekidača, Servos i Arduino

Provjerite sve veze prikazane u shematskom koraku i pokušajte staviti sve unutar okvira slično gore navedenom:

Korak 7: Opcionalno: DC motor i baterija

Iznad je kako sam stavio DC motorni mjenjač (preuzet iz jeftinog RC automobila), također prikazuje tijesto i prebaciti položaj.
Pobrinite se da smjestite zupčanik u središte što je više moguće kako biste uravnotežili kutiju, možda ćete morati staviti nešto težine u kutiju kako biste je uravnotežili nakon završne montaže, jer je baterija koju sam koristio malo teška (100 gr) i uzrokovala je pomicanje prilikom prebacivanja ili pomicanja kutije.
Zapamtite da je dc motor ubrzati kontrolira se pinom 11, Smjer po pin 13, i kočnice na pin 8, oni se smatraju kanalom B na arduino motornom štitu.
Kroz montažu pokušao sam sakriti sve prekidače žica i ostale komponente kako bih imao jednostavnu autentičnu kutiju. To vrijedi i za kotače, pa sam napravila obruč oko njih koji drži oba kotača i bateriju, a također omogućuje pristup crvenom gumbu za resetiranje.

Korak 8: Kôd

Za pisanje koda za arduino potreban vam je arduino IDE (preuzmite ga ovdje)
Koristim verziju 1.0.5, samo provjerite jeste li odabrali ispravan COM port (prozore) i vrstu ploče unutar IDE-a, a zatim upotrijebite donji kod i pritisnite upload.
NAPOMENA: Vrijednosti I koje se koriste u kodu za podešavanje maksimalnog otklona servomotora izrađene su upravo za ovu kutiju uzimajući u obzir položaj poslužitelja, osi i kutove. Dobio sam to kroz suđenje. Dakle, trebate smisliti vlastite vrijednosti u skladu s vašom kutijom i položaj servo uređaja.
Za referencu, u nastavku su navedene min / max vrijednosti koje sam koristio za svaki servo jer ćete ih vidjeti u kôdu:
Vrata:
80 skrivanja, 155 potpuno otvorena
Ruka:
0 skrivanje, 129 pritiskanje prekidača

Ovdje je kôd (bolje je preuzeti datoteku priloženu ovom koraku umjesto kopiranja / lijepljenja odozdo):
#include
Servo vrataServo;
Servo handServo;
int switch_pin = 2; // postavite prekidač na pin 2
// motorne varijable
int motorTrottle = 11;
int motorDirection = 13;
int motorBrake = 8;
int pos = 0;
int selectedMove = 0; // pomicanje izbornika
int Testmove = 0; // test mod: postavljen za premještanje broja za testiranje samo jednog odabranog poteza
// (postavite na Zero da bi se normalno izvodilo, tj. tj. skupa na amm potezima)
void setup ()
{
Serial.begin (9600);
pinMode (switch_pin, INPUT);
doorServo.attach (9); // postavite servo vrata na pin 9 pwm
handServo.attach (10); // postavite servo ruku na Pin 10 pwm
doorServo.write (80); // postavite vrata na mjesto skrivanja
handServo.write (0); // namjestite ruku na položaj skrivanja

// Postavljanje kanala B (budući da je kanal A rezerviran za vrata i ruke i ne može se koristiti u isto vrijeme)
pinMode (motorna smjer, IZLAZ); // Inicira pin kanala B motora
pinMode (motorna kočnica, OUTPUT); // Inicira pin B kočionog kanala

}

nevažeća petlja ()
{
ako (Testmove! = 0) {
selectedMove = Testmove;
}

// ako je prekidač uključen, zatim pomaknite vrata i ruke da biste ga isključili …
ako (digitalRead (switch_pin) == HIGH)
{

if (odabrano Premjesti> 10) {odabrano = 0; } // kada se svi potezi igraju, ponovite poteze od početka
/ / ispod su sve "Pokreti" koje sam do sada osmislio, svaka je funkcija koja je napisana ispod u kodu, izvrši imena, abit čudno? da kao što su neki napisani arapski
ako (odabranoMove == 0) {switchoff (); }
inače ako (odabranoMove == 1) {switchoff (); }
inače ako (odabranoMove == 2) {switchoffbitaraddod (); }
inače ako (odabranoMove == 3) {crazydoor (); }
inače ako (odabranoMove == 4) {crazyslow (); }
inače ako (odabranoMove == 5) {m7anika7anika (); }
inače ako (odabrano = = 6) {m3alla2 (); }
inače ako (odabranoMove == 7) {switchoff (); }
inače ako (odabrano = = 8) {matrix (); }
inače ako (odabranoMove == 9) {sneak (); }
inače ako (odabrano = = 10) {zee7 (); }

ako (Testmove == 0) {
selectedMove ++; // prelazak na sljedeći potez ako nije u probnom načinu
}
}
}

// Knjižnica poteza
// osnovni potez
isključivanje praznine ()
{
// Klizna vrata
za (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
kašnjenje (15);
}

// Kretanje ruke
za (pos = 0; pos <129; pos = 4)
{
handServo.write (pos);
kašnjenje (15);
}

// skrivanje ruke
za (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
kašnjenje (15);
}

// vrata za skrivanje
za (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
kašnjenje (15);
}
}

// move 3: otvori i pričekajte, zatim pomaknite ruku i pričekajte, a zatim se prebacite i sakrijte
void switchoffbitraddod ()
{
// Klizna vrata
za (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
kašnjenje (15);
}
kašnjenja (800);
// Kretanje ruke
za (pos = 0; pos <100; pos = 4)
{
handServo.write (pos);
kašnjenje (15);
}
kašnjenja (1000);
za (pos = 100; pos <129; pos = 4)
{
handServo.write (pos);
kašnjenje (15);
}

// skrivanje ruke
za (pos = 129; pos> = 0; pos- = 5)
{
handServo.write (pos);
kašnjenje (15);
}

// vrata za skrivanje
za (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
kašnjenje (15);


}

}

// pomicanje 4: otvorite vrata i zatvorite ih mnogo puta, pričekajte, a zatim ponovno otvorite i isključite i sakrijte se.

void crazydoor ()
{

// Klizna vrata
za (pos = 80; pos <125; pos = 3)
{
doorServo.write (pos);
kašnjenje (15);
}

// vrata za skrivanje
za (pos = 125; pos> = 80; pos- = 5)
{
doorServo.write (pos);
kašnjenje (15);
}
// Klizna vrata
za (pos = 80; pos <110; pos = 3)
{
doorServo.write (pos);
kašnjenje (15);
}

// vrata za skrivanje
za (pos = 110; pos> = 80; pos- = 15)
{
doorServo.write (pos);
kašnjenje (15);
}
kašnjenja (700);
// Klizna vrata
za (pos = 80; pos <125; pos = 3)
{
doorServo.write (pos);
kašnjenje (15);
}
kašnjenja (700);
// vrata za skrivanje
za (pos = 125; pos> = 80; pos- = 5)
{
doorServo.write (pos);
kašnjenje (15);
}

// ---- prekidača ---- //
// Klizna vrata
za (pos = 80; pos <155; pos = 8)
{
doorServo.write (pos);
kašnjenje (15);
}

// Kretanje ruke
za (pos = 0; pos <129; pos = 3)
{
handServo.write (pos);
kašnjenje (15);
}

// skrivanje ruke
za (pos = 129; pos> = 0; pos- = 3)
{
handServo.write (pos);
kašnjenje (15);
}

// vrata za skrivanje
za (pos = 155; pos> = 80; pos- = 15)
{
doorServo.write (pos);
kašnjenje (15);
}

}

// pomaknite 5: otvorite vrata, zatim polako pomičite ruku naprijed i natrag na vrlo lagano skrivanje, a zatim brzo zatvorite vrata
nevažeći crazyslow ()
{
// Klizna vrata
za (pos = 80; pos <155; pos = 1)
{
doorServo.write (pos);
kašnjenje (30);
}

// Kretanje ruke
za (pos = 0; pos <129; pos = 1)
{
handServo.write (pos);
kašnjenje (30);
}

// skrivanje ruke
za (pos = 129; pos> = 0; pos- = 1)
{
handServo.write (pos);
kašnjenje (30);
}

// vrata za skrivanje
za (pos = 155; pos> = 125; pos- = 1)
{
doorServo.write (pos);
kašnjenje (30);
}
kašnjenja (100);
za (pos = 125; pos> = 80; pos- = 4)
{
doorServo.write (pos);
kašnjenje (15);
}

}
// pomicanje 6:
void m7anika7anika () {
// Klizna vrata
za (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
kašnjenje (15);
}

// Kretanje ruke
za (pos = 0; pos <70; pos = 1)
{
handServo.write (pos);
kašnjenje (15);
}
kašnjenja (800);


// vrata za skrivanje
za (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
kašnjenje (15);
}

// vrata za skrivanje
za (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
kašnjenje (15);
}
// vrata za skrivanje
za (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
kašnjenje (15);
}
// vrata za skrivanje
za (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
kašnjenje (15);
}

handServo.write (40);
kašnjenja (1000);

// Kretanje ruke
za (pos = 40; pos <129; pos = 4)
{
handServo.write (pos);
kašnjenje (15);
}

// skrivanje ruke
za (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
kašnjenje (15);
}


za (pos = 120; pos> = 80; pos - = 1)
{
doorServo.write (pos);
kašnjenje (15);
}



}
void m3alla2 () {
// Klizna vrata
za (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
kašnjenje (15);
}

// Kretanje ruke
za (pos = 0; pos <127; pos = 4)
{
handServo.write (pos);
kašnjenje (15);
}
// vrata za skrivanje
za (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
kašnjenje (15);
}
kašnjenja (2000);

za (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
kašnjenje (15);
}

za (pos = 155; pos> = 140; pos- = 3)
{
doorServo.write (pos);
kašnjenje (15);
}
za (pos = 140; pos <155; pos = 3)
{
doorServo.write (pos);
kašnjenje (15);
}
kašnjenja (500);
// skrivanje ruke
za (pos = 127; pos> = 0; pos- = 4)
{
handServo.write (pos);
kašnjenje (15);
}

// vrata za skrivanje
za (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
kašnjenje (15);
}
}

void matrix ()
{
// Klizna vrata
za (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
kašnjenje (15);
}

// Kretanje ruke
za (pos = 0; pos <80; pos = 4)
{
handServo.write (pos);
kašnjenje (15);
}

za (pos = 80; pos <129; pos = 1)
{
handServo.write (pos);
kašnjenje (30);
}
kašnjenja (300);

za (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
kašnjenje (10);
}

// vrata za skrivanje
za (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
kašnjenje (15);
}

}
void sneak ()
{
// Klizna vrata
za (pos = 80; pos <130; pos = 1)
{
doorServo.write (pos);
kašnjenje (30);
}
kašnjenja (2000);

// Kretanje ruke
za (pos = 0; pos <40; pos = 1)
{
handServo.write (pos);
kašnjenje (30);
}

kašnjenja (500);

za (pos = 130; pos <155; pos = 4)
{
doorServo.write (pos);
kašnjenje (15);
}
kašnjenja (100);

za (pos = 40; pos <90; pos = 4)
{
handServo.write (pos);
kašnjenje (15);
}
kašnjenja (500);
// skrivanje ruke
za (pos = 90; pos> = 70; poz = 4)
{
handServo.write (pos);
kašnjenje (15);
}
kašnjenja (100);
za (pos = 70; pos <90; pos = 4)
{
handServo.write (pos);
kašnjenje (15);
}
kašnjenja (100);
za (pos = 90; pos> = 70; poz = 4)
{
handServo.write (pos);
kašnjenje (15);
}
kašnjenja (100);

za (pos = 70; pos <129; pos = 4)
{
handServo.write (pos);
kašnjenje (15);
}

za (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
kašnjenje (15);
}
// vrata za skrivanje
za (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
kašnjenje (15);
}
}


nevažeći zee7 ()
{
// Klizna vrata
za (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
kašnjenje (15);
}
kašnjenja (2000);
// naprijed na pola brzine lijevo
digitalWrite (motorna smjernica, LOW); // Uspostavlja RIGHT smjer kanala B
digitalWrite (motorna kočnica, LOW); // Isključite kočnicu za kanal B
analogWrite (motorTrottle, 100); // Okreće motor na kanalu B punom brzinom
kašnjenja (300);
digitalWrite (motorna kočnica, HIGH); // Ukopčajte kočnicu za kanal B
kašnjenja (2000);

// natrag @ pola brzine udesno
digitalWrite (motorna smjer, HIGH); // Uspostavlja lijevi smjer kanala B
digitalWrite (motorna kočnica, LOW); // Isključite kočnicu za kanal B
analogWrite (motorTrottle, 100); // Okreće motor na kanalu B na pola brzine
kašnjenja (300);
digitalWrite (motorna kočnica, HIGH); // Ukopčajte kočnicu za kanal B
kašnjenja (1000);

// Kretanje ruke
za (pos = 0; pos <129; pos = 4)
{
handServo.write (pos);
kašnjenje (15);
}

// skrivanje ruke
za (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
kašnjenje (15);
}

// vrata za skrivanje
za (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
kašnjenje (15);
}
}


9. korak: Neobavezno ažuriranje: otkrivanje pokreta

Danas imam senzor blizine (GP2Y0A21), tako da ga sada mogu koristiti za pomicanje stroja ako korisnik prilazi prekidaču :)
Za ovaj dodatni korak, pretpostavljam da ste već izgradili kotače kako biste omogućili kretanje (vidi opcijski korak 8). Sada preostaje samo dodati senzor i napraviti neke izmjene u kodu za otkrivanje pokreta.
Senzor ima 3 žice, a žuta signalna žica spojena pin 3 na arduino, dok je Crvena i crno su povezani v5 i tlo na ploči.
Postavio sam senzor skriven ispod vrata, kao što je prikazano na slici, tako da može 'vidjeti' pokret korisnika samo kad se vrata otvore. upravo ono što trebam!
Također sam morao malo promijeniti kod (ovdje) kako bih implementirao rutinu za otkrivanje pokreta (vidi kod, u funkciji) zee7 () ), tako da kada se otkrije kretanje, kutija će se pomaknuti, najprije udesno, a zatim lijevo, a zatim ruka okrene prekidač i sakrije se. Kod je jako komentiran, nadam se da nisam pretjerao!
Ažurirani kôd možete pronaći u nastavku, također imajte na umu da sam stroj napravio slučajnim odabirom poteza, što se može promijeniti natrag u sekvencijalno jednostavnim postavljanjem boolean randomize = false;
Hvala SVE za velike prijedloge!
Kod (Bolje je preuzeti datoteku priloženu ovom koraku umjesto kopiranja / lijepljenja odozdo):
#include
Servo vrataServo;
Servo handServo;
nepotpisan dugo TimerA, TimerB; // timer za rutinu za otkrivanje pokreta
int switch_pin = 2; // postavite prekidač na pin 2
// motorne varijable
int motorTrottle = 11;
int motorDirection = 13;
int motorBrake = 8;
// Varijable udaljenosti
int motionPin = 3; // senzor pokreta pin na analognom 0
int lastDist = 0; // da zapamtimo posljednju udaljenost
int currentDist = 0;
int thresh = 200; // Prag za kretanje (postavite ga tako da dobijete željenu osjetljivost detekcije pokreta)

int pos = 0;
int selectedMove = 0; // pomicanje izbornika
int Testmove = 0; // test mod: postavljen za premještanje broja za testiranje samo jednog odabranog poteza
// (postavite na Zero da bi se normalno izvodilo, tj.: kola za sve poteze)
boolean randomize = true; // ako je istina, okvir će se kretati nasumce, ako je postavljen na false onda će potezi biti učinjeni sekvencijalno od 1 do 10

void setup ()
{
Serial.begin (9600);
pinMode (switch_pin, INPUT);
doorServo.attach (9); // postavite servo vrata na pin 9 pwm
handServo.attach (10); // postavite servo ruku na Pin 10 pwm
doorServo.write (80); // postavite vrata na mjesto skrivanja
handServo.write (0); // namjestite ruku na položaj skrivanja
// Postavljanje kanala B, budući da je kanal A rezerviran za vrata i ruke i ne može se koristiti u isto vrijeme
pinMode (motorna smjer, IZLAZ); // Inicira pin kanala B motora
pinMode (motorna kočnica, OUTPUT); // Inicira pin B kočionog kanala

}

nevažeća petlja ()
{
// ako je prekidač uključen, zatim pomaknite vrata i ruke da biste ga isključili …
ako (digitalRead (switch_pin) == HIGH)
{

ako (Testmove == 0)
{

ako (nasumično == netočno)
{
ako (odabrano Premjesti> 10)
{
selectedMove = 0; // kada se svi potezi igraju, ponovite poteze od početka
}
}
drugo
{
selectedMove = random (11);
}
}
drugo
{
selectedMove = Testmove;
}
Serial.println (selectedMove);
ako (odabranoMove == 0) {switchoff (); }
inače ako (odabranoMove == 1) {switchoff (); }
inače ako (odabranoMove == 2) {switchoffbitaraddod (); }
inače ako (odabranoMove == 3) {crazydoor (); }
inače ako (odabranoMove == 4) {crazyslow (); }
inače ako (odabranoMove == 5) {m7anika7anika (); }
inače ako (odabrano = = 6) {m3alla2 (); }
inače ako (odabranoMove == 7) {switchoff (); }
inače ako (odabrano = = 8) {matrix (); }
inače ako (odabranoMove == 9) {sneak (); }
inače ako (odabrano = = 10) {zee7 (); }

ako (Testmove == 0 && randomize == false) {
selectedMove ++; // prebacite se na sljedeći potez ako nije u testnom načinu
}
}
}
// Knjižnica poteza
// osnovni potez
isključivanje praznine ()
{
// Klizna vrata
za (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
kašnjenje (15);
}

// Kretanje ruke
za (pos = 0; pos <129; pos = 4)
{
handServo.write (pos);
kašnjenje (15);
}

// skrivanje ruke
za (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
kašnjenje (15);
}

// vrata za skrivanje
za (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
kašnjenje (15);
}
}

// move 3: otvori i pričekajte, zatim pomaknite ruku i pričekajte, a zatim se prebacite i sakrijte
void switchoffbitraddod ()
{
// Klizna vrata
za (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
kašnjenje (15);
}
kašnjenja (800);
// Kretanje ruke
za (pos = 0; pos <100; pos = 4)
{
handServo.write (pos);
kašnjenje (15);
}
kašnjenja (1000);
za (pos = 100; pos <129; pos = 4)
{
handServo.write (pos);
kašnjenje (15);
}

// skrivanje ruke
za (pos = 129; pos> = 0; pos- = 5)
{
handServo.write (pos);
kašnjenje (15);
}

// vrata za skrivanje
za (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
kašnjenje (15);


}

}

// pomicanje 4: otvorite vrata i zatvorite ih mnogo puta, pričekajte, a zatim ponovno otvorite i isključite i sakrijte se.

void crazydoor ()
{

// Klizna vrata
za (pos = 80; pos <125; pos = 3)
{
doorServo.write (pos);
kašnjenje (15);
}

// vrata za skrivanje
za (pos = 125; pos> = 80; pos- = 5)
{
doorServo.write (pos);
kašnjenje (15);
}
// Klizna vrata
za (pos = 80; pos <110; pos = 3)
{
doorServo.write (pos);
kašnjenje (15);
}

// vrata za skrivanje
za (pos = 110; pos> = 80; pos- = 15)
{
doorServo.write (pos);
kašnjenje (15);
}
kašnjenja (700);
// Klizna vrata
za (pos = 80; pos <125; pos = 3)
{
doorServo.write (pos);
kašnjenje (15);
}
kašnjenja (700);
// vrata za skrivanje
za (pos = 125; pos> = 80; pos- = 5)
{
doorServo.write (pos);
kašnjenje (15);
}

// ---- prekidača ---- //
// Klizna vrata
za (pos = 80; pos <155; pos = 8)
{
doorServo.write (pos);
kašnjenje (15);
}

// Kretanje ruke
za (pos = 0; pos <129; pos = 3)
{
handServo.write (pos);
kašnjenje (15);
}

// skrivanje ruke
za (pos = 129; pos> = 0; pos- = 3)
{
handServo.write (pos);
kašnjenje (15);
}

// vrata za skrivanje
za (pos = 155; pos> = 80; pos- = 15)
{
doorServo.write (pos);
kašnjenje (15);
}

}

// pomaknite 5: otvorite vrata, zatim polako pomičite ruku naprijed i natrag na vrlo lagano skrivanje, a zatim brzo zatvorite vrata
nevažeći crazyslow ()
{
// Klizna vrata
za (pos = 80; pos <155; pos = 1)
{
doorServo.write (pos);
kašnjenje (30);
}

// Kretanje ruke
za (pos = 0; pos <129; pos = 1)
{
handServo.write (pos);
kašnjenje (30);
}

// skrivanje ruke
za (pos = 129; pos> = 0; pos- = 1)
{
handServo.write (pos);
kašnjenje (30);
}

// vrata za skrivanje
za (pos = 155; pos> = 125; pos- = 1)
{
doorServo.write (pos);
kašnjenje (30);
}
kašnjenja (100);
za (pos = 125; pos> = 80; pos- = 4)
{
doorServo.write (pos);
kašnjenje (15);
}

}
// pomicanje 6:
void m7anika7anika () {
// Klizna vrata
za (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
kašnjenje (15);
}

// Kretanje ruke
za (pos = 0; pos <70; pos = 1)
{
handServo.write (pos);
kašnjenje (15);
}
kašnjenja (800);


// vrata za skrivanje
za (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
kašnjenje (15);
}

// vrata za skrivanje
za (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
kašnjenje (15);
}
// vrata za skrivanje
za (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
kašnjenje (15);
}
// vrata za skrivanje
za (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
kašnjenje (15);
}

handServo.write (40);
kašnjenja (1000);

// Kretanje ruke
za (pos = 40; pos <129; pos = 4)
{
handServo.write (pos);
kašnjenje (15);
}

// skrivanje ruke
za (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
kašnjenje (15);
}


za (pos = 120; pos> = 80; pos - = 1)
{
doorServo.write (pos);
kašnjenje (15);
}



}
void m3alla2 () {
// Klizna vrata
za (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
kašnjenje (15);
}

// Kretanje ruke
za (pos = 0; pos <127; pos = 4)
{
handServo.write (pos);
kašnjenje (15);
}
// vrata za skrivanje
za (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
kašnjenje (15);
}
kašnjenja (2000);

za (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
kašnjenje (15);
}

za (pos = 155; pos> = 140; pos- = 3)
{
doorServo.write (pos);
kašnjenje (15);
}
za (pos = 140; pos <155; pos = 3)
{
doorServo.write (pos);
kašnjenje (15);
}
kašnjenja (500);
// skrivanje ruke
za (pos = 127; pos> = 0; pos- = 4)
{
handServo.write (pos);
kašnjenje (15);
}

// vrata za skrivanje
za (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
kašnjenje (15);
}
}

void matrix ()
{
// Klizna vrata
za (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
kašnjenje (15);
}

// Kretanje ruke
za (pos = 0; pos <80; pos = 4)
{
handServo.write (pos);
kašnjenje (15);
}

za (pos = 80; pos <129; pos = 1)
{
handServo.write (pos);
kašnjenje (30);
}
kašnjenja (300);

za (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
kašnjenje (10);
}

// vrata za skrivanje
za (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
kašnjenje (15);
}

}
void sneak ()
{
// Klizna vrata
za (pos = 80; pos <130; pos = 1)
{
doorServo.write (pos);
kašnjenje (30);
}
kašnjenja (2000);

// Kretanje ruke
za (pos = 0; pos <40; pos = 1)
{
handServo.write (pos);
kašnjenje (30);
}

kašnjenja (500);

za (pos = 130; pos <155; pos = 4)
{
doorServo.write (pos);
kašnjenje (15);
}
kašnjenja (100);

za (pos = 40; pos <90; pos = 4)
{
handServo.write (pos);
kašnjenje (15);
}
kašnjenja (500);
// skrivanje ruke
za (pos = 90; pos> = 70; poz = 4)
{
handServo.write (pos);
kašnjenje (15);
}
kašnjenja (100);
za (pos = 70; pos <90; pos = 4)
{
handServo.write (pos);
kašnjenje (15);
}
kašnjenja (100);
za (pos = 90; pos> = 70; poz = 4)
{
handServo.write (pos);
kašnjenje (15);
}
kašnjenja (100);

za (pos = 70; pos <129; pos = 4)
{
handServo.write (pos);
kašnjenje (15);
}

za (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
kašnjenje (15);
}
// vrata za skrivanje
za (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
kašnjenje (15);
}
}

// ovaj potez će otvoriti vrata i čekati kretanje, ako se otkrije u blizini prekidača,
// okvir će se najprije pomaknuti u desno, a zatim u lijevo, a na kraju se ruka pomakne i isključi prekidač
nevažeći zee7 ()
{

//otvorena vrata
za (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
kašnjenje (15);
}
kašnjenja (1200); // čekati za stabilizaciju očitanja senzora nakon otvaranja vrata

// namjestiti tajmer i očitati senzor
// pričekajte pokret koji premašuje prag ili ako tajmer istekne (5 s),
lastDist = analogRead (motionPin);
TimerA = millis ();

dok (millis () - TimerA <= 5000)
{
currentDist = analognoRead (motionPin);

// Da li trenutna udaljenost odstupa od zadnje udaljenosti više od praga?
// ako da, premjestite okvir udesno
if ((currentDist> lastDist thresh || currentDist <lastDist - thresh) || currentDist> 300)
{
// naprijed na pola brzine lijevo (odaberite brzinu i kašnjenje
//(i.e kašnjenje (300) prema kutiji i napon baterije tako da je bacanje poželjno)
digitalWrite (motorna smjernica, LOW); // Uspostavlja RIGHT smjer kanala A
digitalWrite (motorna kočnica, LOW); // Isključite kočnicu za kanal B
analogWrite (motorTrottle, 100); // Okreće motor na kanalu B punom brzinom
kašnjenja (300);
digitalWrite (motorna kočnica, HIGH); // Ukopčajte kočnicu za kanal B
pauza;
}
lastDist = trenutniDist;
}

// namjestiti tajmer i očitati senzor
// pričekajte pokret koji premašuje prag ili ako tajmer istekne (5 s),
kašnjenja (1200); // čekati za stabilizaciju očitanja senzora nakon otvaranja vrata
lastDist = analogRead (motionPin);
TimerB = millis ();
dok (millis () - TimerB <= 5000)
{
currentDist = analognoRead (motionPin);
// je li se okvir već pomaknuo udesno, a trenutna udaljenost odstupa od zadnje udaljenosti više od praga?
// Ako da, premjestite se lijevo
if ((currentDist> lastDist thresh || currentDist <lastDist - thresh) || currentDist> 300)
{
// natrag @ pola brzine udesno (odaberite brzinu i kašnjenje
//(i.e kašnjenje (300) prema kutiji i napon baterije tako da je bacanje poželjno)
digitalWrite (motorna smjer, HIGH); // Uspostavlja lijevi smjer kanala B
digitalWrite (motorna kočnica, LOW); // Isključite kočnicu za kanal B
analogWrite (motorTrottle, 100); // Okreće motor na kanalu B na pola brzine
kašnjenja (300);
digitalWrite (motorna kočnica, HIGH); // Ukopčajte kočnicu za kanal B
pauza;
}

lastDist = trenutniDist;

}
kašnjenja (100);
// Kretanje ruke
za (pos = 0; pos <130; pos = 4)
{
handServo.write (pos);
kašnjenje (15);
}

// skrivanje ruke
za (pos = 130; pos> = 0; pos- = 4)
{
handServo.write (pos);
kašnjenje (15);
}

// vrata za skrivanje
za (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
kašnjenje (15);
}
}

3 ljudi su napravili ovaj projekt!

  • AndyC159 je uspio!

  • SamL84 je uspio!

  • melton1313 je uspio!

Jeste li napravili ovaj projekt? Podijelite ga s nama!

preporuke

  • Stroj za sortiranje vijaka

  • PCB BOT (praćenje linija, prepreka i Bluetooth kontrolirani robot na jednom PCB-u)

  • Klasa Interneta stvari

  • Boje natjecanja Rainbow

  • Natječaj Fandom

  • Party Challenge

194 Rasprave

0

areyoutrying

Prije 4 godine na Uvodu

Hvala za ovo! Napravio sam svoj prvi Arduino projekt temeljen na ovom instruktivnom: beskorisnom zmaju!

4 odgovora 0

Ajannareyoutrying

Odgovorite prije 3 godine

Vaš zmajski stroj je strašan. !!! Umjetnički

0

TJAOkevinareyoutrying

Odgovorite prije 3 godine

Super!!!!!

0

riachiareyoutrying

Odgovoriti prije 4 godine na Uvod

Vi ste super :) !!!

Velika osobnost za Zmaja! Želim da možete ponoviti videozapis dok je zmaj izravno okrenut prema fotoaparatu (top-view), osjećam da će to biti smiješno, pa pogledajte jezik koji se iskradao!

Hvala što ste podijelili svoj videozapis i drago mi je što mi je pomogao

0

areyoutryingriachi

Odgovoriti prije 4 godine na Uvod

Pokušao sam pogled gore u ranijoj fazi, ali to nije posao (vidio previše neuredan utroba) pa sam ga odbacio kada sam uzeo ovaj video. Mislim da si ipak u pravu: u završnoj fazi to bi izgledalo sjajno! Nažalost, već sam dao zmaja daleko … Dakle, na sljedeći projekt!

0

br1pro

prije 4 godine

Vrlo zabavna! težak posao popravljanja servosova i dizajn ruke. Hvala za ovo uputno!

1 odgovor 0

riachibr1pro

Odgovoriti prije 4 godine na Uvod

Odličan radni čovjek! stvarno lijepo :) bilo koji video?

0

clincoln

prije 5 godina

Prvo pogledajte video na njemu, a onda se smijete

1 odgovor 0

TobiasVclincoln

Odgovoriti prije 4 godine na Uvod

Znam da jesam! : D

0

rileyw

prije 5 godina

Super kul video učinio je da izgleda kao da je imao vlastiti um

0

Elitekilla117

Prije 5 godina na Uvodu

Moj beskorisni stroj s arduino i riachis kodom! Napravljen od tardisa od Dr.who. :)
http://www.youtube.com/watch?v=aDs0T52o6-M

2 odgovora 0

riachiElitekilla117

Odgovoriti prije 5 godina na Uvod

VOLIM TO!!!! :)) jako dobro učinio čovjek, tako sretan da vidi vaš bomba živ! Također sam dramatizaciju i glazbu: p jednostavno ne mogu zaustaviti sebe da predloži 3 male izmjene ako ja svibanj :)?
- bilo bi sjajno staviti stroj u stojeći položaj, znam da će to značiti da izgubite pomoć gravitacije da zatvorite vrata, ali jednostavno rješenje je staviti 2 gumene vrpce pričvršćene na unutrašnjost vrata s jedne strane i na unutarnju stranu kutije za drugi kraj, to će zatvoriti vrata kad se servo vrata zatvaraju … provjerite moje korake izgradnje, vidjet ćete gumenu traku u koraku 6 …
- I što je sa slikanjem ruku u crno, to će biti više podmuklo i gladak
! Također, ručni vrh može biti obojen krvavim crvenim ili ukrašen ludim licem ili nešto slično.
- uklonite posljednji potez jer se u njemu ništa ne događa (trebao bi biti onaj koji pomiče kutiju) i napisati vlastiti potez …
Ipak, zaboravite prijedloge, volio sam vaše machineeee! I hvala za toliko hvala čovjeku, molim vas možete ih smanjiti i zadržati video fokusiran na stroju:)
Nadam se da ti se gf svidio!

0

Elitekilla117riachi

Odgovoriti prije 5 godina na Uvod

Hahah Hvala vam na komplimentima :) Zapravo sam htio učiniti mnogo više, ali zbog vremenske krize nisam se mogao uklopiti u mnogo detalja koje sam htio. Želio bih dodati malo boje rukama, ali nisam imao vremena za njih. A ja sam htjela nacrtati lice na ruci s štapom, ali je već umotana i spremna joj dati za Božić. Hehehe. Mislim da će joj se svidjeti. Također sam želio da se uspravi, ali se bojao da će gumice činiti previše težine servosu. Vrata su već prilično teška. Posljednji potez koji sam zadržao jer vas drži u neizvjesnosti čekajući da iskoči. Hahaha, ali cijenim svu pomoć prijatelju! Definitivno se isplati!

0

chuckletushy

prije 5 godina

Ovo moram napraviti … to je sjajno

0

wrs715

Prije 5 godina na Uvodu

Ovo je prvi projekt koji sam vidio koristeći Arduino gdje sam pomislio: "Da, to vrijedi. Sada moram dobiti jedan." Fantastičan posao!

0

siliconghost

Prije 5 godina na Uvodu

Wow, strašan poduzeti na zajednički projekt! Volite svoj spin na što je zanimljivije!

0

bob3030

prije 5 godina

Beskorisni uređaj jednog čovjeka je potpuno nevjerojatan, izvan ovoga svijeta, mi smo smislili, zabavili smo se, poželjni od mnogih, beskorisnih uređaja. Hvala na ažuriranju projekta. Hvala na objavljivanju.

0

Wobblerovog

Prije 5 godina na Uvodu

Misao 1: Korištenje Arduina za ovo je samo smiješno pretjerivanje
Misao 2: Nakon gledanja videa-Korištenje Arduino za to je samo čista genijalnost!
Klanjam se tvojoj kreativnosti!

0

stumitch

Prije 5 godina na Uvodu

To je ozbiljno! Nešto me podsjeća na Wall-E osobnost. Hvala na tako velikom projektu!

0

gazillabytes

Prije 5 godina na Uvodu

Doista beskorisno! Lijepo. Inspirirana sam i trebam izgraditi jedan za svoj stol. Hvala.