Hur man bygger en annan värdelös maskin: lätt att göra, och svårt att använda! (8 / 9 steg)
Steg 8: Koden
För att skriva kod för arduino, du behöver arduino IDE (ladda ner det här)Jag använder version 1.0.5, se bara till att välja rätt COM-port (windows) och ombord på typ från inom IDE, sedan använda den nedan koden och ladda upp på träffen.
Obs: Värdena jag används i koden för att ange max avböjningen av servon är gjorda just för denna ruta med hänsyn servon positionering, axel och vinklar. Jag fick detta genom rättegången. Så behöver du utforma egna värden enligt din box och servo placering.
För referens, är nedan min/max värden jag använde för varje servo som du kommer att se dem förekommer i koden:
Dörren:
80 gömmer sig, 155 helt öppen
Handen:
0 gömmer sig, 129 trycka på switchen
Här är koden (bättre att hämta filen bifogas detta steg i stället för att klistra in nedan):
#include < Servo.h > int switch_pin = 2; Ställ in omkopplaren på pin 2 motoriska variabler int pos = 0; void setup() Ställa in kanal B, (eftersom kanal A är reserverade av dörren och hand servon och inte kan ber används på samma gång) } void loop() om den är påslagen, då flytta dörren och hand att stänga av... om (selectedMove > 10) {selectedMove = 0;} //when alla flyttar spelas, upprepa flyttar från början om (Testmove == 0) { } Biblioteket flyttar grundläggande drag Rörliga hand gömmer sig hand dölja dörren Flytta 3: öppna och vänta, sedan flytta handen och vänta, sedan byta av och dölja gömmer sig hand dölja dörren } } Flytta 4: öppna dörren då nära den många gånger, vänta, sedan snabbt reoprn en nd switch off och dölja. void crazydoor() Rörliga dörren dölja dörren dölja dörren
Servo doorServo;
Servo handServo;
int motorThrottle = 11;
int motorDirection = 13.
int motorBrake = 8;
int selectedMove = 0; flytta väljaren
int Testmove = 0; testläge: att flytta nummer att testa bara en valda drag
(inställd på noll för att köra normalt dvs: roundrobbin på amm flyttar)
{
Serial.BEGIN(9600);
pinMode (switch_pin, ingång);
doorServo.attach(9); ställa in dörren servo på Pin 9 pwm
handServo.attach(10); ställa in hand servo på Pin 10 pwm
doorServo.write(80); Ställ in dörren till gömmer sig position
handServo.write(0); Ställ in hand för att dölja position
pinMode (motorDirection, produktionen); Initierar Motor kanal B pin
pinMode (motorBrake, produktionen); Initierar broms kanal B pin
{
om (Testmove! = 0) {
selectedMove = Testmove;
}
IF(digitalRead(switch_pin) == hög)
{
nedan finns alla "flyttar" Jag designade hittills, det var en funktion som skrivs nedan i koden, execuse namn, abit konstigt? Ja som några är skrivna på arabiska
om (selectedMove == 0) {switchoff();}
annat if (selectedMove == 1) {switchoff();}
annat if (selectedMove == 2) {switchoffbitaraddod();}
annat if (selectedMove == 3) {crazydoor();}
annat if (selectedMove == 4) {crazyslow();}
annat if (selectedMove == 5) {m7anika7anika();}
annat if (selectedMove == 6) {m3alla2();}
annat if (selectedMove == 7) {switchoff();}
annat if (selectedMove == 8) {matrix();}
annat if (selectedMove == 9) {sneak();}
annat if (selectedMove == 10) {zee7();}
selectedMove ++; strömbrytare till nästa drag om inte i testläge
}
}
void switchoff()
{
Rörliga dörren
för (pos = 80, pos < 155, pos = 3)
{
doorServo.write(pos);
Delay(15);
}
för (pos = 0; pos < 129; pos = 4)
{
handServo.write(pos);
Delay(15);
}
för (pos = 129, pos > = 0; pos-= 4)
{
handServo.write(pos);
Delay(15);
}
för (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}
}
void switchoffbitaraddod()
{
Rörliga dörren
för (pos = 80, pos < 155, pos = 3)
{
doorServo.write(pos);
Delay(15);
}
Delay(800);
Rörliga hand
för (pos = 0; pos < 100; pos = 4)
{
handServo.write(pos);
Delay(15);
}
Delay(1000);
för (pos = 100; pos < 129; pos = 4)
{
handServo.write(pos);
Delay(15);
}
för (pos = 129, pos > = 0; pos-= 5)
{
handServo.write(pos);
Delay(15);
}
för (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos);
Delay(15);
{
för (pos = 80; pos < 125; pos = 3)
{
doorServo.write(pos);
Delay(15);
}
för (pos = 125; pos > = 80; pos-= 5)
{
doorServo.write(pos);
Delay(15);
}
Rörliga dörren
för (pos = 80; pos < 110; pos = 3)
{
doorServo.write(pos);
Delay(15);
}
för (pos = 110; pos > = 80; pos-= 15)
{
doorServo.write(pos);
Delay(15);
}
Delay(700);
Rörliga dörren
för (pos = 80; pos < 125; pos = 3)
{
doorServo.write(pos);
Delay(15);
}
Delay(700);
dölja dörren
för (pos = 125; pos > = 80; pos-= 5)
{
doorServo.write(pos);
Delay(15);
}
---av växeln av---/ /
Rörliga dörren
för (pos = 80, pos < 155, pos = 8)
{
doorServo.write(pos);
Delay(15);
}
Rörliga hand
för (pos = 0; pos < 129; pos = 3)
{
handServo.write(pos);
Delay(15);
}
gömmer sig hand
för (pos = 129, pos > = 0; pos-= 3)
{
handServo.write(pos);
Delay(15);
}
dölja dörren
för (pos = 155; pos > = 80; pos-= 15)
{
doorServo.write(pos);
Delay(15);
}
}
flytta 5: öppna dörren, sedan flytta handen mycket långsamt fram och tillbaka till gömmer sig mycket långsamt och sedan snabbt stänga dörren
void crazyslow()
{
Rörliga dörren
för (pos = 80, pos < 155, pos = 1)
{
doorServo.write(pos);
Delay(30);
}
Rörliga hand
för (pos = 0; pos < 129; pos = 1)
{
handServo.write(pos);
Delay(30);
}
gömmer sig hand
för (pos = 129, pos > = 0; pos-= 1)
{
handServo.write(pos);
Delay(30);
}
dölja dörren
för (pos = 155; pos > = 125; pos-= 1)
{
doorServo.write(pos);
Delay(30);
}
Delay(100);
för (pos = 125; pos > = 80; pos-= 4)
{
doorServo.write(pos);
Delay(15);
}
}
flytta 6:
void m7anika7anika() {
Rörliga dörren
för (pos = 80, pos < 155, pos = 3)
{
doorServo.write(pos);
Delay(15);
}
Rörliga hand
för (pos = 0; pos < 70; pos = 1)
{
handServo.write(pos);
Delay(15);
}
Delay(800);
dölja dörren
för (pos = 155; pos > = 130; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}
dölja dörren
för (pos = 130; pos < 155; pos = 3)
{
doorServo.write(pos);
Delay(15);
}
dölja dörren
för (pos = 155; pos > = 130; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}
dölja dörren
för (pos = 130; pos < 155; pos = 3)
{
doorServo.write(pos);
Delay(15);
}
handServo.write(40);
Delay(1000);
Rörliga hand
för (pos = 40; pos < 129; pos = 4)
{
handServo.write(pos);
Delay(15);
}
gömmer sig hand
för (pos = 129, pos > = 0; pos-= 4)
{
handServo.write(pos);
Delay(15);
}
för (pos = 120; pos > = 80; pos-= 1)
{
doorServo.write(pos);
Delay(15);
}
}
void m3alla2() {
Rörliga dörren
för (pos = 80, pos < 155, pos = 3)
{
doorServo.write(pos);
Delay(15);
}
Rörliga hand
för (pos = 0; pos < 127; pos = 4)
{
handServo.write(pos);
Delay(15);
}
dölja dörren
för (pos = 155; pos > = 130; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}
Delay(2000);
för (pos = 130; pos < 155; pos = 3)
{
doorServo.write(pos);
Delay(15);
}
för (pos = 155; pos > = 140; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}
för (pos = 140, pos < 155, pos = 3)
{
doorServo.write(pos);
Delay(15);
}
Delay(500);
gömmer sig hand
för (pos = 127; pos > = 0; pos-= 4)
{
handServo.write(pos);
Delay(15);
}
dölja dörren
för (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}
}
void matrix()
{
Rörliga dörren
för (pos = 80, pos < 155, pos = 3)
{
doorServo.write(pos);
Delay(15);
}
Rörliga hand
för (pos = 0; pos < 80; pos = 4)
{
handServo.write(pos);
Delay(15);
}
för (pos = 80; pos < 129; pos = 1)
{
handServo.write(pos);
Delay(30);
}
Delay(300);
för (pos = 129, pos > = 0; pos-= 4)
{
handServo.write(pos);
Delay(10);
}
dölja dörren
för (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}
}
void sneak()
{
Rörliga dörren
för (pos = 80; pos < 130; pos = 1)
{
doorServo.write(pos);
Delay(30);
}
Delay(2000);
Rörliga hand
för (pos = 0; pos < 40; pos = 1)
{
handServo.write(pos);
Delay(30);
}
Delay(500);
för (pos = 130; pos < 155; pos = 4)
{
doorServo.write(pos);
Delay(15);
}
Delay(100);
för (pos = 40; pos < 90; pos = 4)
{
handServo.write(pos);
Delay(15);
}
Delay(500);
gömmer sig hand
för (pos = 90; pos > = 70; pos-= 4)
{
handServo.write(pos);
Delay(15);
}
Delay(100);
för (pos = 70; pos < 90; pos = 4)
{
handServo.write(pos);
Delay(15);
}
Delay(100);
för (pos = 90; pos > = 70; pos-= 4)
{
handServo.write(pos);
Delay(15);
}
Delay(100);
för (pos = 70; pos < 129; pos = 4)
{
handServo.write(pos);
Delay(15);
}
för (pos = 129, pos > = 0; pos-= 4)
{
handServo.write(pos);
Delay(15);
}
dölja dörren
för (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}
}
void zee7()
{
Rörliga dörren
för (pos = 80, pos < 155, pos = 3)
{
doorServo.write(pos);
Delay(15);
}
Delay(2000);
vidarebefordra @ halvfart till vänster
digitalWrite (motorDirection, låg); Upprättar rätt riktning av kanal B
digitalWrite (motorBrake, låg); Lossa bromsen för kanal B
analogWrite (motorThrottle, 100); Snurrar motorn på kanal B i full fart
Delay(300);
digitalWrite (motorBrake, hög); Eengage bromsar för kanal B
Delay(2000);
bakåt @ halvfart till höger
digitalWrite (motorDirection, hög); Upprättar vänster riktning av kanal B
digitalWrite (motorBrake, låg); Lossa bromsen för kanal B
analogWrite (motorThrottle, 100); Snurrar motorn på kanal B på halvfart
Delay(300);
digitalWrite (motorBrake, hög); Eengage bromsar för kanal B
Delay(1000);
Rörliga hand
för (pos = 0; pos < 129; pos = 4)
{
handServo.write(pos);
Delay(15);
}
gömmer sig hand
för (pos = 129, pos > = 0; pos-= 4)
{
handServo.write(pos);
Delay(15);
}
dölja dörren
för (pos = 155; pos > = 80; pos-= 3)
{
doorServo.write(pos);
Delay(15);
}
}