Satura rādītājs:
- 1. darbība: izveidojiet pamatnes un eņģes vāciņa turētāju
- 2. solis: izveidojiet garāku servo roku un pievienojiet servo
- 3. darbība: ielādējiet un palaidiet skici
Video: Automatizēts lodīšu rullītis ar Arduino un vienu servo: 3 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:51
Šis ir vienkāršs mazs Arduino un servo projekts, kura pabeigšana prasa apmēram divas stundas. Tas izmanto servo, lai paceltu vienu burkas vāciņa galu tā, lai pa iekšējo apkārtmēru izgrieztu tērauda lodīti. Tas sākas pats, var mainīt ātrumu un vienlaikus var griezt divas (vai vairākas?) Bumbiņas. Prieks būvēt un strādāt. Ar laika parametriem var spēlēt, iespējams, vēl lielākam ātrumam. Varētu izmantot dažus zāles efekta sensorus ar magnētisko lodīti, lai padarītu to par gudrāku mašīnu, kas spēj noskaidrot labākos parametrus.
Man jāpiemin, ka kādam šeit vietnē instructables.com ir sarežģītāka lodīšu veltņu mašīna:
Nepieciešamie materiāli:
Arduino Uno (vai jebkurš Arduino)
Servo vairogs (pēc izvēles)
9g servo
burkas vāciņš
tērauda lodīte
daži koka lūžņi
1. darbība: izveidojiet pamatnes un eņģes vāciņa turētāju
Pamatne ir tikai koka gabaliņš, uz kura piestiprināt šarnīrveida koka gabalu. Šarnīrveida kokam jābūt lielākam par izmantojamo burkas vāciņu, un tam jābūt pietiekami daudz vietas eņģēm un servo montāžai.
Es izmantoju mazas plastmasas rc lidmašīnas eņģes un vienkārši karsti pielīmēju tās pie eņģu koka un pamatnes.
2. solis: izveidojiet garāku servo roku un pievienojiet servo
Lai izgatavotu garāku servo rokturi, es tikai pievienoju 5 centimetru koka gabalu pie servo sviras ar pāris mazām skrūvēm un uzgriežņiem. Servo rokai jābūt 90 grādiem uz servo, kad tā ir horizontāli pret pamatni.
Es tikko karsti pielīmēju servo pie šarnīra koka turētāja, bet es atklāju, ka, ja ļausiet tam darboties ilgāk par dažām minūtēm, servo sakarsēs karsto līmi un atlaidīs no koka. Tāpēc labāka piestiprināšanas metode ir pamatota.
3. darbība: ielādējiet un palaidiet skici
Es pievienoju savu servo tapai 7, izmantojot vairogu, jo tas ir vienkārši ērti, un tie maksā tikai dažus dolārus. Ja jums nav vairoga, pievienojiet servo signāla vadu Arduino 7. tapai, sarkano vadu līdz 5 V Arduino un zemējuma vadu GND Arduino. Arduino vajadzētu nodrošināt pietiekami daudz strāvas, lai darbinātu servo. Es izmantoju vairogu, jo ir vienkārši izmantot ārēju spriegumu tikai servo.
Šeit ir skice. Es uzrakstīju servo ātruma regulatora rutīnu, lai mainītu servo ātrumu, jo tas, iespējams, nedarbosies labi ar pilnu ātrumu.
Jūs varat mainīt timingDelay, lai iegūtu dažādus bumbas ripināšanas ātrumus. Varat arī mainīt myServo () funkcijas trešo parametru, lai mainītu arī ātrumu.
//////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////// // izveidojis Džims Demello, Šanglū Universitāte, 2017
// ar šo kodu jūs varat brīvi izmantot, manipulēt, darīt visu, ko vēlaties, mans vārds nav obligāts
// Šī kārtība ļauj interpolēt jebkuru servo skaitu, vienkārši pievienojiet jaunas rindas, ja servo skaits pārsniedz 4
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#iekļaut
Servo myservo1, myservo2; // izveidot servo objektu, lai kontrolētu servo
int servoRead (int servoNumber) {
int servoCurrent;
ja (servoNumber == 1) {servoCurrent = myservo1.read (); }
ja (servoNumber == 2) {servoCurrent = myservo2.read (); }
atgriešanās servoCurrent;
}
void servoWrite (int servoNumber, int offset) {
ja (servoNumber == 1) {myservo1.write (nobīde); }
ja (servoNumber == 2) {myservo2.write (nobīde); }
}
void myServo (int newAngle, int angleInc, int incDelay, int servoNum) {
int curAngle;
ja (servoNum == 1) {curAngle = myservo1.read (); }
ja (servoNum == 2) {curAngle = myservo2.read (); }
if (curAngle <newAngle) {
for (int leņķis = curAngle; leņķis <newAngle; leņķis += leņķisInc) {
ja (servoNum == 1) myservo1.write (leņķis);
ja (servoNum == 2) myservo2.write (leņķis);
kavēšanās (incDelay); }
}
else if (curAngle> newAngle) {
par (int leņķis = curAngle; leņķis> newAngle; leņķis -= leņķisInc) {
ja (servoNum == 1) myservo1.write (leņķis);
ja (servoNum == 2) myservo2.write (leņķis);
kavēšanās (incDelay); }
}
}
void interpolate2Servos (int servo1, int servo1Position, int servo2, int servo2Position, int numberSteps, int timeDelay) {
int servo1Current, servo2Current;
servo1Current = servoRead (servo1);
servo2Current = servoRead (servo2);
// Serial.print ("Servo3Pos un pašreizējais"); Serial.print (servo3Position); Serial.print (""); Serial.println (servo3Current);
// Serial.print ("Servo4Pos un pašreizējais"); Serial.print (servo4Position); Serial.print (""); Serial.println (servo4Current);
// Serial.print ("Servo5Pos un pašreizējais"); Serial.print (servo5Position); Serial.print (""); Serial.println (servo5Current);
// Serial.print ("Servo6Pos un pašreizējais"); Serial.print (servo6Position); Serial.print (""); Serial.println (servo6Current);
// Serial.println ("");
int cOffset = (servo1Position - servo1Current); cOffset = abs (cOffset)/numberSteps;
int dOffset = (servo2Position - servo2Current); dOffset = abs (dOffset)/numberSteps;
int cOffsetTotal = 0, dOffsetTotal = 0;
cOffsetTotal = servo1Current;
dOffsetTotal = servo2Current;
par (int x = 0; x
if (servo1Position> servo1Current) {cOffsetTotal = cOffsetTotal + cOffset; }
else {cOffsetTotal = cOffsetTotal - cOffset; }
if (servo2Position> servo2Current) {dOffsetTotal = dOffsetTotal + dOffset; }
else {dOffsetTotal = dOffsetTotal - dOffset; }
if (servo1Position! = servo1Current) servoWrite (servo1, cOffsetTotal);
if (servo2Position! = servo2Current) servoWrite (servo2, dOffsetTotal);
// Serial.print ("a un b nobīde"); Serial.print (aOffsetTotal); Serial.print (""); Serial.println (bOffsetTotal); kavēšanās (10);
kavēšanās (timeDelay);
} // beigas par
//////////////////////////////////////
// rūpēties par moduļu atlikumiem //
/////////////////////////////////////
if (servo1Position! = servo1Current) servoWrite (servo1, servo1Position);
if (servo2Position! = servo2Current) servoWrite (servo2, servo2Position);
}
int timingDelay = 100;
int servoDelay = 100;
int degGap = 10;
// Šī ir sākuma pakāpe (tai jābūt mazākai par beigu pakāpi)
int degStart = 0;
// Šī ir beigu pakāpe (tai jābūt lielākai par sākuma pakāpi)
int degEnd = 360;
// Šis ir apļa rādiuss
int rādiuss = 8;
anulēts iestatījums ()
{
Sērijas sākums (9600);
kavēšanās (100);
myservo1.attach (7); // piestiprina 7. tapas servo pie servobjekta
myservo1.write (90);
myservo2.attach (8); // piestiprina servo 8. tapā pie servo objekta
myservo2.write (90);
kavēšanās (1000); // gaida, kad servo tur nonāks
interpolate2Servos (1, 90, 2, 90, 10, 60); // neitrāls
kavēšanās (1000);
}
void loop () {
timingDelay = 15; // strādā 10
servoDelay = 4;
spin4 ();
// interpolate2Servos (1, 90, 2, 90, 1, 60); // neitrāls
// kavēšanās (1000);
// izeja (0); // pauzes programma - lai turpinātu, nospiediet atiestatīšanu
}
void spin3 () {
interpolate2Servos (1, 90, 2, 110, 1, 60); // neitrāls
kavēšanās (timingDelay);
interpolate2Servos (1, 90, 2, 80, 1, 60); // neitrāls
kavēšanās (timingDelay);
}
void spin2 () {
// interpolate2Servos (1, 80, 2, 90, 1, 50); // neitrāls
kavēšanās (timingDelay);
interpolate2Servos (1, 80, 2, 80, 1, 60); // neitrāls
kavēšanās (timingDelay);
interpolate2Servos (1, 110, 2, 80, 1, 60); // neitrāls
kavēšanās (timingDelay);
// interpolate2Servos (1, 110, 2, 110, 1, 60); // neitrāls
kavēšanās (timingDelay);
}
void spin1 () {
// int deg = (degStart / (180 / 3.14));
pludiņš deg = (degStart * 3.141592 / 180); // pārvērst grādus par radiāniem
pludiņš xPos = 90 + (cos (deg) * rādiuss);
// xPos = apaļš (xPos);
pludiņš yPos = 90 + (sin (deg) * rādiuss);
// yPos = apaļš (yPos);
Serial.print ("degGap ="); Serial.print (degGap); Serial.print ("deg ="); Serial.print (deg); Serial.print ("cos ="); Serial.print (cos (deg)); Serial.print ("degStart ="); Serial.print (degStart); Serial.print ("x ="); Serial.print (xPos); Serial.print ("y ="); Serial. println (yPos);
// interpolate2Servos (1, xPos, 2, yPos, 1, servoDelay); // neitrāls
myservo1.write (xPos);
myservo2.write (yPos);
kavēšanās (timingDelay);
ja (degStart> = degEnd) {
degStart = 0;
ja (degGap> 180)
degGap = 180;
// degGap = 0;
citādi
degGap = degGap + 2;
degGap = degGap - 2;
// degStart = degStart +degGap;
}
degStart = degStart + degGap;
}
void spin4 () {
par (int i = 0; i <= 360; i ++) {
pludiņš j = 20 * (cos ((3,14 * i)/180)) + 90;
pludiņš k = 20 * (sin ((3,14 * i)/180)) + 90;
myservo1.write (j);
myservo2.write (k);
Sērijas nospiedums (j);
Serial.print (",");
Sērijas.println (k);
kavēšanās (100);
}
}
Ieteicams:
Servo piekares bloķēšana ar vienu pogu: 3 soļi
Servo piekares bloķēšana ar vienu pogu: Pilnas balstiekārtas kalnu velosipēdi nodrošina vienmērīgu braukšanu, taču, braucot pedāļus augšup, bieži vien ir jāatslēdz piekare. Pretējā gadījumā balstiekārta saspiež, stāvot uz pedāļiem, tērējot šīs pūles. Velosipēdu ražotāji to zina un nodrošina
SW -520D vibrācijas sensora metāla lodīšu slīpuma slēdzis - Visuino: 6 soļi
SW-520D vibrācijas sensora metāla lodīšu slīpuma slēdzis-Visuino: šo SW-520D pamata slīpuma slēdzi var viegli izmantot, lai noteiktu orientāciju. Kārbas iekšpusē ir bumba, kas saskaras ar tapām, kad korpuss ir stāvus. Pagrieziet korpusu un bumbiņas nepieskaras, tādējādi neveidojot savienojumu. Slīpuma sensors
Robotu lodīšu šķirošana: 3 soļi (ar attēliem)
Robotisko pērlīšu šķirošana: Šajā projektā mēs veidosim robotu, lai šķirotu Perlera krelles pēc krāsas. Es vienmēr esmu gribējis izveidot krāsu šķirošanas robotu, tāpēc, kad mana meita ieinteresējās par Perlera krelles veidošanu, es to redzēju kā lielisku iespēju .Perler krelles tiek izmantotas, lai
LED rullītis: 7 soļi (ar attēliem)
LED Rollie: LED Rollie ir diezgan muļķīga, bet smieklīga lieta. Vienkārši ritiniet to savā apkārtnē, un jūs iegūsit lielu uzmanību. Man bija ideja par LED rollie, kad man bija garlaicīgi, un es redzēju šo ruļļu lodēt, bet bez lodēšanas. Es uzzināju, ka 2
Trīs asu lodīšu galvas trijkājis Thingie (pazīstams arī kā tenisa bumbiņa): 5 soļi
Trīs asu lodīšu galviņu mini statīvs Thingie (pazīstams arī kā tenisa bumbiņa): Es domāju, ka nosaukums ir diezgan pašsaprotams, bet attēls ir tūkstoš vārdu vērts! Šis ir mans pirmais pamācāmais, tāpēc atzinīgi vērtēju konstruktīvus komentārus. Sākotnēji es to ievietoju savā emuārā, un pēc daudzu draugu īgnuma publicēt šeit es