Kredsløb

Hvordan man opbygger en anden ubrugelig maskine: nem at lave og svært at bruge!: 9 trin (med billeder)

Humans Need Not Apply

Humans Need Not Apply

Indholdsfortegnelse:

Anonim

Så mange ubrugelige maskiner er bygget, hvorfor opbygge en anden? Det er simpelthen meget sjovt :), sjovt at bygge og sjovt at lege med.
Jeg forsøgte at give denne version et tegn, som jeg altid har følt, at der er nogen "tænker i boksen", så her forsøgte jeg det, jeg håbede jeg lykkedes at give "hende" et liv!
Jeg er virkelig glad for at dele med dig alle trin, med alle forhåbninger om, at du nemt kan bygge din og give den en bitter eller bedre karakter! Min version er baseret på Arduino, du tror måske, det er en overkill, men i betragtning af den fleksibilitet, det gav mig, synes jeg det er det værd.
Her er en video af alt sammen sat sammen. Senere vil vi flytte ind i de dele, trin, skemaer og kode
Lad mig vide dine kommentarer og / eller spørgsmål hvis nogen.
Håber du nyder det!
f.

forsyninger:

Trin 1: Hvordan virker det?

Alt er forbundet med et Arduino bord, bestyrelsen venter til, at kontakten er indstillet til logisk HIGH, det vil sige, når du vælter kontakten, signalerer brættet to servomotorer til at bevæge sig på en bestemt måde (mere senere), hvorefter , servoen, der er tilsluttet "hånden", vil skubbe kontakten tilbage til OFF-position og returnere tilbage i boksen efterfulgt af "dør" servo. så gentager alt.
Hvis du så ovenstående video, responderer maskinen på en anden måde hver gang kontakten skiftes, og det gøres ved simpelthen at skrive forskellige funktioner med forskellige tidspunkter i Arduino-koden (jeg kalder dem "Moves"). Hver gang kontakten skiftes, ringer jeg et nyt skridt, indtil alt er færdigt, begynder jeg igen. Bemærk at i trin 9 gav jeg en anden version af koden, der vælger tilfældige bevægelser i stedet for sekventiel. Du kan tilføje så mange bevægelser som du vil, så længe du har nok hukommelse på Arduino.
Arduino er altid TIL, derfor har jeg tilføjet en kontakt til batteriet for at spare lidt strøm, når maskinen ikke er i brug. Jeg planlægger allerede at bruge en afbryder på kontakten, i stedet for den nuværende enkle HIGH / LOW detektion, og kobler den med sovemodus. Dette sparer strøm, når maskinen ikke er i brug, og tillader også, at den altid er klar (men det vil også komplicere koden). For nu er det bare en simpel tænd / sluk-knap, og bordet er altid drevet .

Trin 2: Dele

Du får brug for:
Obligatorisk:
1. En kasse
2. Ethvert Arduino bord med PWM udgange (jeg tilfældigvis har en gammel, der ligger omkring, Diecimila)
3. To standard RC servomotorer (jeg brugte Futaba - S3003, de har 3,2 kg / cm drejningsmoment, mere end nok til at flytte døren eller hånden)
4. Et 6-12 V batteri (jeg brugte min AR drone batteri, det er en 11,1 v / 1000 mA)
3. En SPTT eller SPST-switch til udløseren (stort set en hvilken som helst switch, der passer til dig!)
5. En anden kontakt til batteriet
6. En trykknap for at nulstille Arduino, hvis du vil genstarte bevæger / kode øverst.
7. Nogle jumperkabler

Valgfri:
Hvis du ønsker at designe et træk, der inkluderer at flytte kassen rundt (som sidste træk i videoen), kan du få:
1. En Arduino motor skærm, dette vil også være praktisk til andre projekter (eller du kan designe en H-bro selv, se det ud)
2. En billig RC bil, så du kan tage sin DC motor og gearkasse
Desuden har jeg stadig i den "valgfrie" sektion bygget et hardware de-bounce-kredsløb for at få en ren trigger, når kontakten tændes / slukkes. Dette kan springes over og nemt implementeres i arduino software ved hjælp af forsinkelser eller timere. Jeg afbrudte hardwaren, fordi jeg snart vil skifte kode for at bruge afbrydelser, og da sidstnævnte ikke tillader pålidelig brug af forsinkelses- / timerfunktioner i rutinen, så måtte jeg bygge et simpelt afstødningskredsløb til fremtidig brug . Hvis du vil springe over denne del, skal du blot forbinde en simpel switch / modstand til pin 2 i arduino og implementere en software debounce rutine.
Til hardware debounce:
1. 10mF elektrolytisk kondensator
2. 10K modstand
3. En logisk IKKE-gate i.e Inverter (chip 74HC04) Dette har seks omformere, men du behøver kun en.
Lad os bygge det …

Trin 3: Opbygning af boksen

Du kan bruge en hvilken som helst boks, du finder passende. Jeg byggede min, måske ikke perfekt, men stadig meget personlig :)
1. Jeg brugte 2 ark 5mm BALSA træ, meget nemt at arbejde med at bruge en cutter, og relativt stærk givet sin utrolige lette vægt.
2. Forbrugte 5 rør af cyanoacrylatlim (også stærke hurtigtvirkende klæbemidler)
Her er det:
EN 22 x 14 x 14 cm boks

Trin 4: Skematisk

Ovenfor er skematisk (tegnet med Fritzing), der viser:
Øverste del: Arduino hovedkort, 2 servos og switch tilslutning. Bemærk, at som tidligere nævnt kan du erstatte hele debounce (top-højre) kredsløb med en simpel modstand / switch.
Både "dør" og "hånd" servoer drives direkte fra 5v-pin på Arduino. Signalledningerne er forbundet til henholdsvis pin 9 og 10. Disse stifter understøtter PWM, så jeg bruger dem til at styre servoens vinkel / position (fra 0 til 180 grader max).
Bemærk: Den røde trykknap er kun en nulstilling (svarende til den, der findes på arduino bordets overflade). Jeg har tilføjet det for hurtig adgang til at nulstille brættet / softwaren til enhver tid uden at åbne boksen. Forbindes bare RESET-stiften til Ground for at gøre nulstillingen.
Nederste del: nødvendigt, hvis du vil bruge en DC motor og flytte maskinen rundt. Dette er arduino motor skjoldet, det er monteret oven på Arduino, så alle stifter af begge brædder er forbundet til hinanden. Jeg viser dem nedenfor som adskilt for klarhed, forhåbentlig! Dette skjold kan styre op til 2 DC-motor (2 kanaler A / B) med utrolig let. Jeg bruger kun en nu. Det giver mulighed for at indstille koden, retning, hastighed og pauser for en af ​​de tilgængelige 2 kanaler / motorer. Jeg bruger kanal B som vist bellow. hvor pin
13 til retning, pin 11 for hastighed og pin 8 til bremsekontrol.
Batteriet er en 11,1 / 1000 mA, der er forbundet til skjoldet, og danner således DC-motoren, hovedarmaturet og servoerne. Hvis du ikke bruger skjoldet, kan du direkte forbinde batteriet til strømkablen på hovedkortet.

Trin 5: Fastgørelse af servoer

Her er hånd- og dørservos installeret:
Du skal først installere servoerne på deres rigtige steder, dette kræver en smule forsøg og fejl, indtil du får den nødvendige bevægelse. Du kan bruge Servo-eksemplet i arduino IDE for at teste servoerne og den nødvendige afbøjningsgrad for hver og dermed bestemme den endelige positionering og armlængde for dør- og håndservoerne.
Armene er simpelthen lavet af balsa træ, jeg gjorde dem tykkere for at modstå noget rive.
Nedenfor er hvordan jeg gjorde det. Bare en note om håndservo. Du skal bruge servoakslen for at være lige under kanten af ​​dækslet (som vist nedenfor) for at undgå at have svært ved at lave en hånd, der med succes kan slå kontakten, og også kunne gå tilbage i kassen.


Trin 6: Tilslutning af switch, servos og Arduino

Lav alle forbindelserne set i skematisk trin, og prøv at sætte alt inde i boksen ligner det, der er vist ovenfor:

Trin 7: Valgfrit: DC-motor og batteri

Ovenfor er, hvordan jeg sætter DC motor gearkasse (taget fra en billig RC bil), også viser batter og bytte placering.
Sørg for at placere gearet så centreret som muligt for at afbalancere kassen. Det kan være nødvendigt at sætte lidt vægt inde i kassen for at afbalancere det mere efter den endelige montering, da batteriet jeg brugte er lidt tungt (100 gr) og forårsaget noget vinkling når du skifter eller flytter boksen.
Bemærk at DC-motoren hastighed styres af pin 11, Retning ved pin 13, og bremser på pin 8, disse betragtes som kanal B på arduino motorskærm.
Gennem hele forsamlingen forsøgte jeg at skjule alle ledningsbrydere og andre komponenter for at få en simpel autentisk boks. Dette gælder for hjulene, så jeg lavede en kant rundt dem, der er vært for både hjul og batteri, og giver også adgang til den røde reset-knap.

Trin 8: Koden

For at skrive kode til arduino har du brug for arduino IDE (download den her)
Jeg bruger version 1.0.5, bare sørg for at vælge den rigtige COM-port (windows) og board type inde fra IDE, brug derefter nedenstående kode og tryk upload.
BEMÆRK: De værdier, jeg brugte i koden for at indstille maksimal afbøjning af servoerne, laves nøjagtigt til denne boks under hensyntagen til servos positionering, akse og vinkler. Jeg fik dette gennem prøveversionen. Så du skal udtænke dine egne værdier i henhold til din boks og servo placering.
Til reference er nedenstående min / max værdier, jeg brugte til hver servo, da du vil se dem forekomme i koden:
Døren:
80 gemmer sig, 155 helt åben
Hånden:
0 gemmer sig, 129 trykker på kontakten

Her er koden (Bedre at downloade filen vedhæftet dette trin i stedet for at kopiere / indsætte nedenunder):
#omfatte
Servo doorServo;
Servo håndservo;
int switch_pin = 2; // Sæt tænd for pin 2
// motorvariabler
int motorThrottle = 11;
int motorDirection = 13;
int motorbremse = 8;
int pos = 0;
int selectedMove = 0; // flyt vælgeren
int Testmove = 0; // test mode: indstillet til at flytte nummer for at teste kun ét valgt træk
// (indstillet til Zero for at køre normalt, dvs. roundrobbin på amm bevæger sig)
void setup ()
{
Serial.begin (9600);
pinMode (switch_pin, INPUT);
doorServo.attach (9); // sæt dør servo på Pin 9 pwm
handServo.attach (10); // sæt hånd servo på pin 10 pwm
doorServo.write (80); // Sæt døren til skjulestilling
handServo.write (0); // Sæt hånden til skjulestilling

// Konfigurationskanal B, (da kanal A er reserveret af dør- og håndservos og kan ikke bruges på samme tid)
pinMode (motorDirection, OUTPUT); // Starter Motor Kanal B-pin
pinMode (motorbremse, OUTPUT); // Starter Bremsekanal B-pin

}

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

// hvis kontakten er tændt, flytt derefter døren og hånden for at slukke for den …
hvis (digitalRead (switch_pin) == HIGH)
{

if (selectedMove> 10) {selectedMove = 0; } // Når alle bevægelser afspilles, gentag bevægelserne fra begyndelsen
// nedenunder er alle de "Moves" jeg har designet hidtil, hver er en funktion, der er skrevet under i koden, udskyder navnene, abit mærkeligt? ja som nogle er skrevet på arabisk
hvis (selectedMove == 0) {switchoff (); }
ellers hvis (selectedMove == 1) {switchoff (); }
ellers hvis (selectedMove == 2) {switchoffbitaraddod (); }
ellers hvis (selectedMove == 3) {crazydoor (); }
ellers hvis (selectedMove == 4) {crazyslow (); }
ellers hvis (selectedMove == 5) {m7anika7anika (); }
ellers hvis (selectedMove == 6) {m3alla2 (); }
ellers hvis (selectedMove == 7) {switchoff (); }
ellers hvis (selectedMove == 8) {matrix (); }
ellers hvis (selectedMove == 9) {sneak (); }
ellers hvis (selectedMove == 10) {zee7 (); }

hvis (Testmove == 0) {
selectedMove ++; // swith til næste træk, hvis ikke i testtilstand
}
}
}

// Bibliotek af bevægelser
// grundlæggende bevægelse
ugyldig afbrydelse ()
{
// Flydende dør
for (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
forsinkelse (15);
}

// Bevægelig hånd
for (pos = 0; pos <129; pos = 4)
{
handServo.write (pos);
forsinkelse (15);
}

// skjule hånd
for (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
forsinkelse (15);
}

// skjuledør
for (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
forsinkelse (15);
}
}

// Flyt 3: Åbn og vent, bevæg derefter hånden og vent, og skift derefter og skjul
void switchoffbitaraddod ()
{
// Flydende dør
for (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
forsinkelse (15);
}
forsinkelse (800);
// Bevægelig hånd
for (pos = 0; pos <100; pos = 4)
{
handServo.write (pos);
forsinkelse (15);
}
forsinkelse (1000);
for (pos = 100; pos <129; pos = 4)
{
handServo.write (pos);
forsinkelse (15);
}

// skjule hånd
for (pos = 129; pos> = 0; pos- = 5)
{
handServo.write (pos);
forsinkelse (15);
}

// skjuledør
for (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
forsinkelse (15);


}

}

// Flyt 4: Åbn døren og luk det mange gange, vent, så genopfør hurtigt en nd-sluk og skjul.

void crazydoor ()
{

// Flydende dør
for (pos = 80; pos <125; pos = 3)
{
doorServo.write (pos);
forsinkelse (15);
}

// skjuledør
for (pos = 125; pos> = 80; pos = 5)
{
doorServo.write (pos);
forsinkelse (15);
}
// Flydende dør
for (pos = 80; pos <110; pos = 3)
{
doorServo.write (pos);
forsinkelse (15);
}

// skjuledør
for (pos = 110; pos> = 80; pos- = 15)
{
doorServo.write (pos);
forsinkelse (15);
}
forsinkelse (700);
// Flydende dør
for (pos = 80; pos <125; pos = 3)
{
doorServo.write (pos);
forsinkelse (15);
}
forsinkelse (700);
// skjuledør
for (pos = 125; pos> = 80; pos = 5)
{
doorServo.write (pos);
forsinkelse (15);
}

// ---- af omskifter af ---- //
// Flydende dør
for (pos = 80; pos <155; pos = 8)
{
doorServo.write (pos);
forsinkelse (15);
}

// Bevægelig hånd
for (pos = 0; pos <129; pos = 3)
{
handServo.write (pos);
forsinkelse (15);
}

// skjule hånd
for (pos = 129; pos> = 0; pos- = 3)
{
handServo.write (pos);
forsinkelse (15);
}

// skjuledør
for (pos = 155; pos> = 80; pos = 15)
{
doorServo.write (pos);
forsinkelse (15);
}

}

// Flyt 5: Åbn døren, bevæg derefter hånden meget langsomt fremad og tilbage for at gemme meget langsomt, så hurtigt lukke døren
void crazyslow ()
{
// Flydende dør
for (pos = 80; pos <155; pos = 1)
{
doorServo.write (pos);
forsinkelse (30);
}

// Bevægelig hånd
for (pos = 0; pos <129; pos = 1)
{
handServo.write (pos);
forsinkelse (30);
}

// skjule hånd
for (pos = 129; pos> = 0; pos- = 1)
{
handServo.write (pos);
forsinkelse (30);
}

// skjuledør
for (pos = 155; pos> = 125; pos = 1)
{
doorServo.write (pos);
forsinkelse (30);
}
forsinkelse (100);
for (pos = 125; pos> = 80; pos- = 4)
{
doorServo.write (pos);
forsinkelse (15);
}

}
// flyt 6:
void m7anika7anika () {
// Flydende dør
for (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
forsinkelse (15);
}

// Bevægelig hånd
for (pos = 0; pos <70; pos = 1)
{
handServo.write (pos);
forsinkelse (15);
}
forsinkelse (800);


// skjuledør
for (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
forsinkelse (15);
}

// skjuledør
for (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
forsinkelse (15);
}
// skjuledør
for (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
forsinkelse (15);
}
// skjuledør
for (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
forsinkelse (15);
}

handServo.write (40);
forsinkelse (1000);

// Bevægelig hånd
for (pos = 40; pos <129; pos = 4)
{
handServo.write (pos);
forsinkelse (15);
}

// skjule hånd
for (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
forsinkelse (15);
}


for (pos = 120; pos> = 80; pos - = 1)
{
doorServo.write (pos);
forsinkelse (15);
}



}
void m3alla2 () {
// Flydende dør
for (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
forsinkelse (15);
}

// Bevægelig hånd
for (pos = 0; pos <127; pos = 4)
{
handServo.write (pos);
forsinkelse (15);
}
// skjuledør
for (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
forsinkelse (15);
}
forsinkelse (2000);

for (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
forsinkelse (15);
}

for (pos = 155; pos> = 140; pos- = 3)
{
doorServo.write (pos);
forsinkelse (15);
}
for (pos = 140; pos <155; pos = 3)
{
doorServo.write (pos);
forsinkelse (15);
}
forsinkelse (500);
// skjule hånd
for (pos = 127; pos> = 0; pos- = 4)
{
handServo.write (pos);
forsinkelse (15);
}

// skjuledør
for (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
forsinkelse (15);
}
}

void matrix ()
{
// Flydende dør
for (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
forsinkelse (15);
}

// Bevægelig hånd
for (pos = 0; pos <80; pos = 4)
{
handServo.write (pos);
forsinkelse (15);
}

for (pos = 80; pos <129; pos = 1)
{
handServo.write (pos);
forsinkelse (30);
}
forsinkelse (300);

for (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
forsinkelse (10);
}

// skjuledør
for (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
forsinkelse (15);
}

}
void sneak ()
{
// Flydende dør
for (pos = 80; pos <130; pos = 1)
{
doorServo.write (pos);
forsinkelse (30);
}
forsinkelse (2000);

// Bevægelig hånd
for (pos = 0; pos <40; pos = 1)
{
handServo.write (pos);
forsinkelse (30);
}

forsinkelse (500);

for (pos = 130; pos <155; pos = 4)
{
doorServo.write (pos);
forsinkelse (15);
}
forsinkelse (100);

for (pos = 40; pos <90; pos = 4)
{
handServo.write (pos);
forsinkelse (15);
}
forsinkelse (500);
// skjule hånd
for (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (pos);
forsinkelse (15);
}
forsinkelse (100);
for (pos = 70; pos <90; pos = 4)
{
handServo.write (pos);
forsinkelse (15);
}
forsinkelse (100);
for (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (pos);
forsinkelse (15);
}
forsinkelse (100);

for (pos = 70; pos <129; pos = 4)
{
handServo.write (pos);
forsinkelse (15);
}

for (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
forsinkelse (15);
}
// skjuledør
for (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
forsinkelse (15);
}
}


void zee7 ()
{
// Flydende dør
for (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
forsinkelse (15);
}
forsinkelse (2000);
// frem @ halv hastighed til venstre
digitalWrite (motorDirection, LOW); // Etablerer RIGHT retning af kanal B
digitalWrite (motorbremse, LOW); // Frakobl bremsen til kanal B
analog skrift (motorThrottle, 100); // Spinner motoren på kanal B ved fuld hastighed
forsinkelse (300);
digitalWrite (motorbremse, HIGH); // Eengage bremsen til kanal B
forsinkelse (2000);

// bagud @ halv hastighed til højre
digitalWrite (motorDirection, HIGH); // Opretter VENSTRE retning af kanal B
digitalWrite (motorbremse, LOW); // Frakobl bremsen til kanal B
analog skrift (motorThrottle, 100); // Spinner motoren på kanal B ved halv hastighed
forsinkelse (300);
digitalWrite (motorbremse, HIGH); // Eengage bremsen til kanal B
forsinkelse (1000);

// Bevægelig hånd
for (pos = 0; pos <129; pos = 4)
{
handServo.write (pos);
forsinkelse (15);
}

// skjule hånd
for (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
forsinkelse (15);
}

// skjuledør
for (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
forsinkelse (15);
}
}


Trin 9: Valgfri opdatering: Bevægelsesdetektion

Jeg har en nærhedsføler i dag (GP2Y0A21), så nu kan jeg bruge den til at flytte maskinen, hvis brugeren nærmer sig skiftekontakten :)
Til dette ekstra trin antager jeg, at du allerede har bygget hjulene for at tillade bevægelse (se valgfri trin 8). Alt hvad der er tilbage nu er at føje sensoren og foretage nogle ændringer i koden til bevægelsesdetektering.
Sensoren har 3 ledninger, den gule signalledning er tilsluttet pin 3 på Arduino, mens rød og sort er forbundet til v5 og jord henholdsvis i bestyrelsen.
Jeg har placeret sensoren gemt under døren som vist på billedet, så den kun kan se brugerens bevægelse, når døren åbnes. præcis hvad jeg har brug for!
Jeg skulle også ændre koden lidt (her) for at implementere en bevægelsesdetekteringsrutine (se koden, i funktion zee7 () ), sådan at når bevægelsen er opdaget, flytter kassen først til højre og derefter til venstre, så hånden skifter kontakten og skjuler. Koden er stærkt kommenteret, jeg håber, at jeg ikke overdrev det!
Du kan finde den opdaterede kode nedenfor, også bemærk at jeg har fået maskinen til at vælge bevægelserne tilfældigt. Dette kan ændres tilbage til sekventiel ved blot at indstille booleanske randomize = false;
Tak ALT for dine gode forslag!
Koden (Bedre at downloade filen vedhæftet dette trin i stedet for at kopiere / indsætte nedenunder):
#omfatte
Servo doorServo;
Servo håndservo;
unsigned long TimerA, TimerB; // timer for bevægelsesdetekteringsrutinen
int switch_pin = 2; // Sæt tænd for pin 2
// motorvariabler
int motorThrottle = 11;
int motorDirection = 13;
int motorbremse = 8;
// Afstandsvariabler
int motionPin = 3; // bevægelsesfølerstift på analog 0
int lastDist = 0; // for at huske sidste afstand
int currentDist = 0;
intærsk = 200; // Threshold for Movement (indstil det sådan, at du får den ønskede sensibilitet af bevægelsesdetektering)

int pos = 0;
int selectedMove = 0; // flyt vælgeren
int Testmove = 0; // test mode: indstillet til at flytte nummer for at teste kun ét valgt træk
// (indstillet til Zero for at køre normalt, dvs. roundrobbin på alle bevægelser)
booleanske randomize = true; // hvis det er sandt, vil kassen tilføjes movers tilfældigt, hvis den er sat til falsk, vil bevægelserne ske sekvensielt fra 1 til 10

void setup ()
{
Serial.begin (9600);
pinMode (switch_pin, INPUT);
doorServo.attach (9); // sæt dør servo på Pin 9 pwm
handServo.attach (10); // sæt hånd servo på pin 10 pwm
doorServo.write (80); // Sæt døren til skjulestilling
handServo.write (0); // Sæt hånden til skjulestilling
// Setup Channel B, da Channel A er reserveret af dør- og håndservos og ikke kan bruges samtidig
pinMode (motorDirection, OUTPUT); // Starter Motor Kanal B-pin
pinMode (motorbremse, OUTPUT); // Starter Bremsekanal B-pin

}

void loop ()
{
// hvis kontakten er tændt, flytt derefter døren og hånden for at slukke for den …
hvis (digitalRead (switch_pin) == HIGH)
{

hvis (Testmove == 0)
{

hvis (randomize == false)
{
hvis (selectedMove> 10)
{
selectedMove = 0; // Når alle bevægelser afspilles, gentag bevægelserne fra begyndelsen
}
}
andet
{
selectedMove = tilfældigt (11);
}
}
andet
{
selectedMove = Testmove;
}
Serial.println (selectedMove);
hvis (selectedMove == 0) {switchoff (); }
ellers hvis (selectedMove == 1) {switchoff (); }
ellers hvis (selectedMove == 2) {switchoffbitaraddod (); }
ellers hvis (selectedMove == 3) {crazydoor (); }
ellers hvis (selectedMove == 4) {crazyslow (); }
ellers hvis (selectedMove == 5) {m7anika7anika (); }
ellers hvis (selectedMove == 6) {m3alla2 (); }
ellers hvis (selectedMove == 7) {switchoff (); }
ellers hvis (selectedMove == 8) {matrix (); }
ellers hvis (selectedMove == 9) {sneak (); }
ellers hvis (selectedMove == 10) {zee7 (); }

hvis (Testmove == 0 && randomize == false) {
selectedMove ++; // Skift til næste skridt, hvis ikke i testtilstand
}
}
}
// Bibliotek af bevægelser
// grundlæggende bevægelse
ugyldig afbrydelse ()
{
// Flydende dør
for (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
forsinkelse (15);
}

// Bevægelig hånd
for (pos = 0; pos <129; pos = 4)
{
handServo.write (pos);
forsinkelse (15);
}

// skjule hånd
for (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
forsinkelse (15);
}

// skjuledør
for (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
forsinkelse (15);
}
}

// Flyt 3: Åbn og vent, bevæg derefter hånden og vent, og skift derefter og skjul
void switchoffbitaraddod ()
{
// Flydende dør
for (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
forsinkelse (15);
}
forsinkelse (800);
// Bevægelig hånd
for (pos = 0; pos <100; pos = 4)
{
handServo.write (pos);
forsinkelse (15);
}
forsinkelse (1000);
for (pos = 100; pos <129; pos = 4)
{
handServo.write (pos);
forsinkelse (15);
}

// skjule hånd
for (pos = 129; pos> = 0; pos- = 5)
{
handServo.write (pos);
forsinkelse (15);
}

// skjuledør
for (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
forsinkelse (15);


}

}

// Flyt 4: Åbn døren og luk det mange gange, vent, så genopfør hurtigt en nd-sluk og skjul.

void crazydoor ()
{

// Flydende dør
for (pos = 80; pos <125; pos = 3)
{
doorServo.write (pos);
forsinkelse (15);
}

// skjuledør
for (pos = 125; pos> = 80; pos = 5)
{
doorServo.write (pos);
forsinkelse (15);
}
// Flydende dør
for (pos = 80; pos <110; pos = 3)
{
doorServo.write (pos);
forsinkelse (15);
}

// skjuledør
for (pos = 110; pos> = 80; pos- = 15)
{
doorServo.write (pos);
forsinkelse (15);
}
forsinkelse (700);
// Flydende dør
for (pos = 80; pos <125; pos = 3)
{
doorServo.write (pos);
forsinkelse (15);
}
forsinkelse (700);
// skjuledør
for (pos = 125; pos> = 80; pos = 5)
{
doorServo.write (pos);
forsinkelse (15);
}

// ---- af omskifter af ---- //
// Flydende dør
for (pos = 80; pos <155; pos = 8)
{
doorServo.write (pos);
forsinkelse (15);
}

// Bevægelig hånd
for (pos = 0; pos <129; pos = 3)
{
handServo.write (pos);
forsinkelse (15);
}

// skjule hånd
for (pos = 129; pos> = 0; pos- = 3)
{
handServo.write (pos);
forsinkelse (15);
}

// skjuledør
for (pos = 155; pos> = 80; pos = 15)
{
doorServo.write (pos);
forsinkelse (15);
}

}

// Flyt 5: Åbn døren, bevæg derefter hånden meget langsomt fremad og tilbage for at gemme meget langsomt, så hurtigt lukke døren
void crazyslow ()
{
// Flydende dør
for (pos = 80; pos <155; pos = 1)
{
doorServo.write (pos);
forsinkelse (30);
}

// Bevægelig hånd
for (pos = 0; pos <129; pos = 1)
{
handServo.write (pos);
forsinkelse (30);
}

// skjule hånd
for (pos = 129; pos> = 0; pos- = 1)
{
handServo.write (pos);
forsinkelse (30);
}

// skjuledør
for (pos = 155; pos> = 125; pos = 1)
{
doorServo.write (pos);
forsinkelse (30);
}
forsinkelse (100);
for (pos = 125; pos> = 80; pos- = 4)
{
doorServo.write (pos);
forsinkelse (15);
}

}
// flyt 6:
void m7anika7anika () {
// Flydende dør
for (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
forsinkelse (15);
}

// Bevægelig hånd
for (pos = 0; pos <70; pos = 1)
{
handServo.write (pos);
forsinkelse (15);
}
forsinkelse (800);


// skjuledør
for (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
forsinkelse (15);
}

// skjuledør
for (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
forsinkelse (15);
}
// skjuledør
for (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
forsinkelse (15);
}
// skjuledør
for (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
forsinkelse (15);
}

handServo.write (40);
forsinkelse (1000);

// Bevægelig hånd
for (pos = 40; pos <129; pos = 4)
{
handServo.write (pos);
forsinkelse (15);
}

// skjule hånd
for (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
forsinkelse (15);
}


for (pos = 120; pos> = 80; pos - = 1)
{
doorServo.write (pos);
forsinkelse (15);
}



}
void m3alla2 () {
// Flydende dør
for (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
forsinkelse (15);
}

// Bevægelig hånd
for (pos = 0; pos <127; pos = 4)
{
handServo.write (pos);
forsinkelse (15);
}
// skjuledør
for (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
forsinkelse (15);
}
forsinkelse (2000);

for (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
forsinkelse (15);
}

for (pos = 155; pos> = 140; pos- = 3)
{
doorServo.write (pos);
forsinkelse (15);
}
for (pos = 140; pos <155; pos = 3)
{
doorServo.write (pos);
forsinkelse (15);
}
forsinkelse (500);
// skjule hånd
for (pos = 127; pos> = 0; pos- = 4)
{
handServo.write (pos);
forsinkelse (15);
}

// skjuledør
for (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
forsinkelse (15);
}
}

void matrix ()
{
// Flydende dør
for (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
forsinkelse (15);
}

// Bevægelig hånd
for (pos = 0; pos <80; pos = 4)
{
handServo.write (pos);
forsinkelse (15);
}

for (pos = 80; pos <129; pos = 1)
{
handServo.write (pos);
forsinkelse (30);
}
forsinkelse (300);

for (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
forsinkelse (10);
}

// skjuledør
for (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
forsinkelse (15);
}

}
void sneak ()
{
// Flydende dør
for (pos = 80; pos <130; pos = 1)
{
doorServo.write (pos);
forsinkelse (30);
}
forsinkelse (2000);

// Bevægelig hånd
for (pos = 0; pos <40; pos = 1)
{
handServo.write (pos);
forsinkelse (30);
}

forsinkelse (500);

for (pos = 130; pos <155; pos = 4)
{
doorServo.write (pos);
forsinkelse (15);
}
forsinkelse (100);

for (pos = 40; pos <90; pos = 4)
{
handServo.write (pos);
forsinkelse (15);
}
forsinkelse (500);
// skjule hånd
for (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (pos);
forsinkelse (15);
}
forsinkelse (100);
for (pos = 70; pos <90; pos = 4)
{
handServo.write (pos);
forsinkelse (15);
}
forsinkelse (100);
for (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (pos);
forsinkelse (15);
}
forsinkelse (100);

for (pos = 70; pos <129; pos = 4)
{
handServo.write (pos);
forsinkelse (15);
}

for (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
forsinkelse (15);
}
// skjuledør
for (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
forsinkelse (15);
}
}

// dette skridt vil åbne døren og vente på bevægelse, hvis detekteres nær bryderen,
// boksen vil bevæge sig først til højre og derefter til venstre og til sidst bevæger hånden sig og slukker for kontakten
void zee7 ()
{

//åben dør
for (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
forsinkelse (15);
}
forsinkelse (1200); // Vent til at stabilisere sensorlæsninger efter åbning af døren

// Indstil timeren og læs sensoren
// vent på bevægelse, der overskrider tærsklen, eller hvis timeren udløber (5 sek)
lastDist = analogRead (motionPin);
TimerA = millis ();

mens (millis () - TimerA <= 5000)
{
currentDist = analogRead (motionPin);

// Afviger den aktuelle afstand fra den sidste afstand med mere end tærsklen?
// Hvis ja, så flyt boksen til højre
hvis ((currentDist> lastDist thresh || currentDist <lastDist - thresh) || currentDist> 300)
{
// frem @ halvhastighed til venstre (vælg hastigheden og forsinkelsen
//(.e.e forsinkelse (300) i henhold til din boks og batterispænding, således at bevægelseskastet er ønskeligt)
digitalWrite (motorDirection, LOW); // Etablerer RIGHT retning af kanal A
digitalWrite (motorbremse, LOW); // Frakobl bremsen til kanal B
analog skrift (motorThrottle, 100); // Spinner motoren på kanal B ved fuld hastighed
forsinkelse (300);
digitalWrite (motorbremse, HIGH); // Eengage bremsen til kanal B
pause;
}
lastDist = currentDist;
}

// Indstil timeren og læs sensoren
// vent på bevægelse, der overskrider tærsklen, eller hvis timeren udløber (5 sek)
forsinkelse (1200); // Vent til at stabilisere sensorlæsninger efter åbning af døren
lastDist = analogRead (motionPin);
TimerB = millis ();
mens (millis () - TimerB <= 5000)
{
currentDist = analogRead (motionPin);
// flyttede kassen allerede til højre og den aktuelle afstand afviger fra den sidste afstand med mere end tærsklen?
// Hvis ja, så flyt til venstre
hvis ((currentDist> lastDist thresh || currentDist <lastDist - thresh) || currentDist> 300)
{
// tilbage @ halvhastighed til højre (vælg hastigheden og forsinkelsen
//(.e.e forsinkelse (300) i henhold til din boks og batterispænding, således at bevægelseskastet er ønskeligt)
digitalWrite (motorDirection, HIGH); // Opretter VENSTRE retning af kanal B
digitalWrite (motorbremse, LOW); // Frakobl bremsen til kanal B
analog skrift (motorThrottle, 100); // Spinner motoren på kanal B ved halv hastighed
forsinkelse (300);
digitalWrite (motorbremse, HIGH); // Eengage bremsen til kanal B
pause;
}

lastDist = currentDist;

}
forsinkelse (100);
// Bevægelig hånd
for (pos = 0; pos <130; pos = 4)
{
handServo.write (pos);
forsinkelse (15);
}

// skjule hånd
for (pos = 130; pos> = 0; pos- = 4)
{
handServo.write (pos);
forsinkelse (15);
}

// skjuledør
for (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
forsinkelse (15);
}
}

3 personer lavede dette projekt!

  • AndyC159 gjorde det!

  • SamL84 gjorde det!

  • melton1313 lavede det!

Har du lavet dette projekt? Del det med os!

anbefalinger

  • Skruesorteringsmaskin

  • PCB BOT (linje efter, forhindring af forhindring og Bluetooth-styret robot i et enkelt printkort)

  • Internet af Things Class

  • Farver i Rainbow Contest

  • Fandom Contest

  • Party Challenge

194 Diskussioner

0

areyoutrying

4 år siden på introduktion

Tak for dette! Jeg lavede mit første Arduino projekt baseret på denne instruerbare: en ubrugelig drage!

4 svar 0

Ajannareyoutrying

Besvar 3 år siden

Din drage maskine er fantastisk. !!! Kunstnerisk

0

TJAOkevinareyoutrying

Besvar 3 år siden

Fantastisk!!!!!

0

riachiareyoutrying

Besvar 4 år siden på Indledning

Du er sej :) !!!

Fantastisk personlighed til en drage! Jeg ønsker at du kan genoprette videoen, mens du har dragen direkte mod kameraet (top-view), jeg føler, at dette vil være sjovt, så se tungen snige sig ud!

Tak for at dele din video og glad for, at jeg har hjulpet

0

areyoutryingriachi

Besvar 4 år siden på Indledning

Jeg prøvede top visning i et tidligere stadium, men det fungerede ikke (så for meget af de rodet indside), så jeg afskedede det, da jeg tog denne video. Jeg synes du har det rigtigt, men i sidste etape ville det have været godt! Desværre har jeg allerede givet dragen væk … Så videre til næste projekt!

0

br1pro

for 4 år siden

Meget sjovt! hårdt arbejde fastgørelse servos og design hånden. Tak for dette instruerbare!

1 svar 0

riachibr1pro

Besvar 4 år siden på Indledning

Godt arbejde mand! rigtig flot :) nogen video?

0

clincoln

for 5 år siden

Se videoen på den først, så grine dig røv

1 svar 0

TobiasVclincoln

Besvar 4 år siden på Indledning

Jeg ved jeg gjorde det! : D

0

rileyw

for 5 år siden

Super cool videoen gjorde det til at virke som om det havde et sind for sig selv

0

Elitekilla117

5 år siden på introduktion

Min ubrugelig maskine med arduino og riachis kode! Lavet til en tardis fra Dr.who. :)
http://www.youtube.com/watch?v=aDs0T52o6-M

2 svar 0

riachiElitekilla117

Besvar 5 år siden på Indledning

ELSKER DET!!!! :)) rigtig godt klaret mand, så glad for at se din bombkasse i live! Jeg også dramatisering og musikken: Jeg kan bare ikke stoppe mig selv til at foreslå 3 små ændringer, hvis jeg kan :)?
- det ville være dejligt at sætte maskinen i stående stilling, jeg ved, at dette vil gøre at tabe tyngdekraften for at lukke døren, men en simpel løsning er at sætte 2 gummibånd fastgjort til indersiden af ​​døren på den ene side og til indersiden af ​​kassen i den anden ende, vil dette gøre døren tæt, når dørservo lukker … Kontroller mine byggestrin, du vil se gummibåndet i trin 6 …
- også hvad med at male hænderne i sort, det vil være mere snigende og glat
! Håndtipset kan også males i blodig rødt eller dekoreret med et vanvittigt ansigt eller sådan noget ..
- fjern det sidste træk, da der ikke sker noget i det (skal være den, som flytter boksen) og skrive dit eget træk …
Ikke desto mindre glemmer forslagene, jeg elskede din machineeee! Og tak for den så mange tak mand, vær venlig at reducere dem og holde videoen fokuseret på maskinen :)
Håber din gf kunne lide det!

0

Elitekilla117riachi

Besvar 5 år siden på Indledning

Hahah Tak for komplimenterne :) Jeg ville faktisk gøre meget mere til det, men på grund af tidskrækken kunne jeg ikke passe ind i mange detaljer, jeg ønskede at. Jeg vil gerne tilføje nogle farver til armene, men har ikke tid til dem. Og jeg ønskede at tegne et ansigt på armen med en sharpie, men det var allerede indpakket og klar til at give til hende til jul. Hehehe. Jeg tror, ​​hun vil elske det. Jeg ville også have det stå op, men var bange for, at gummibåndene ville lægge for meget vægt på servoerne. Døren er allerede temmelig tung. Det sidste træk, jeg holdt, fordi det holder dig i spænding og venter på at den kommer frem. Hahaha men jeg sætter pris på al min hjælp min ven! Absolut værd at det!

0

chuckletushy

for 5 år siden

Dette er jeg nødt til at gøre … det er fantastisk

0

wrs715

5 år siden på introduktion

Dette er det første projekt, jeg har set ved hjælp af en Arduino, hvor jeg troede: "Ja, det er det værd. Nu skal jeg få en." Fantastisk job!

0

siliconghost

5 år siden på introduktion

Wow, awesome, tag et fælles projekt! Elsk din tur på at gøre det mere interessant!

0

bob3030

for 5 år siden

En mand er ubrugelige enhed er en anden er helt fantastisk, ud af denne verden, vil vi tænke ud, sjovt at have, eftertragtet af mange, ubrugelige enheder. Tak for dine opdateringer til projektet. Tak for udstationering.

0

woblere

5 år siden på introduktion

Tanke 1: Brug af en Arduino til dette er bare latterligt overkill
Tænk 2: Efter at have set videoen - Brug af en Arduino for dette er bare rent geni!
Jeg bøjer mig ned til din kreativitet!

0

stumitch

5 år siden på introduktion

Det er seriøst godt! En slags minder mig om en Wall-E personlighed. Tak for et så stort projekt!

0

gazillabytes

5 år siden på introduktion

Virkelig ubrugelig! Nice 'ible. Jeg er inspireret og har brug for at bygge en til mit skrivebord. Tak.