![Ավտոմատ գնդիկ գլան Arduino- ով և One Servo- ով ՝ 3 քայլ Ավտոմատ գնդիկ գլան Arduino- ով և One Servo- ով ՝ 3 քայլ](https://i.howwhatproduce.com/images/001/image-1633-50-j.webp)
Բովանդակություն:
2025 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2025-01-23 14:48
![Image Image](https://i.howwhatproduce.com/images/001/image-1633-52-j.webp)
![](https://i.ytimg.com/vi/dOkQfpNRtf8/hqdefault.jpg)
Սա պարզ փոքրիկ Arduino և servo նախագիծ է, որի ավարտին տևում է մոտ երկու ժամ: Այն օգտագործում է սերվո `բանկայի կափարիչի մի ծայրը բարձրացնելու համար, որպեսզի պողպատե գնդակը պտտվի ներքին շրջագծով: Այն սկսում է ինքն իրեն, կարող է փոխել արագությունը և կարող է միանգամից երկու (կամ ավելի) գնդակ պտտել: Funվարճալի է կառուցել և աշխատել: Ingամկետների պարամետրերով կարելի է խաղալ, հավանաբար, նույնիսկ ավելի մեծ արագությունների համար: Մագնիսական գնդակով սրահի էֆեկտի մի քանի տվիչներ կարող են օգտագործվել այն ավելի խելացի մեքենա դարձնելու համար, որը կարող է պարզել լավագույն պարամետրերը:
Պետք է նշեմ, որ ինչ-որ մեկն այստեղ ՝ instructables.com- ում, ունի ավելի բարդ գնդիկավոր մեքենա ՝
Անհրաժեշտ նյութեր
Arduino Uno (կամ ցանկացած Arduino)
Servo վահան (ըստ ցանկության)
9 գ սերվո
բանկա գլխարկ
պողպատե գնդակ
մի կտոր ջարդոն
Քայլ 1. Պատրաստեք հիմք և կախովի գլխարկ
![Make Base and Hinged Cap Holder Make Base and Hinged Cap Holder](https://i.howwhatproduce.com/images/001/image-1633-53-j.webp)
Հիմքը պարզապես փայտի կտոր է, որի վրա կարելի է ամրացնել կախովի փայտը: Կախովի փայտը պետք է լինի ավելի մեծ, քան բանկաների կափարիչը, որը դուք կօգտագործեք և բավականաչափ տեղ կունենա ծխնիների և սերվոյի տեղադրման համար:
Ես օգտագործել եմ պլաստմասե փոքր ինքնաթիռի ծխնիներ և դրանք ուղղակի կպցրել եմ կախովի փայտին և հիմքին:
Քայլ 2. Կատարեք երկար սերվո թև և ամրացրեք սերվո
![Կատարեք ավելի երկար սերվո Arm և ամրացրեք Servo Կատարեք ավելի երկար սերվո Arm և ամրացրեք Servo](https://i.howwhatproduce.com/images/001/image-1633-54-j.webp)
![Կատարեք ավելի երկար սերվո Arm և ամրացրեք Servo Կատարեք ավելի երկար սերվո Arm և ամրացրեք Servo](https://i.howwhatproduce.com/images/001/image-1633-55-j.webp)
Ավելի երկար սերվո թև պատրաստելու համար ես ընդամենը 5 սանտիմետր փայտ կտոր ամրացրեցի սերվոյի թևին մի քանի փոքր պտուտակներով և ընկույզներով: Սերվոյի թևը պետք է լինի 90 աստիճանի վրա սերվոյի վրա, երբ այն հորիզոնական է դեպի հիմքը:
Ես ուղղակի տաքացրի սոսինձը սոսնձվող փայտի ամրակալի վրա, բայց պարզեցի, որ եթե թույլ տաք, որ այն մի քանի րոպեից ավելի գործի, սերվոն տաքացնելու է տաք սոսինձը և բաց է թողնելու փայտից: Այսպիսով, կցման ավելի լավ մեթոդը երաշխավորված է:
Քայլ 3: Բեռնել և գործարկել ուրվագիծը
![Բեռնել և գործարկել ուրվագիծը Բեռնել և գործարկել ուրվագիծը](https://i.howwhatproduce.com/images/001/image-1633-56-j.webp)
Ես իմ servo- ն ամրացրեցի 7 -ի կապում `օգտագործելով վահան, քանի որ այն պարզապես հարմար է, և դրանք արժեն ընդամենը մի քանի դոլար: Եթե դուք վահան չունեք, ապա servo ազդանշանի լարը ամրացրեք Arduino- ի 7 -րդ կապին, կարմիր մետաղալարը `Arvino- ի վրա` 5v- ին, իսկ գետնանցքը `GND- ին Arduino- ում: Արդուինոն պետք է բավականաչափ հոսանք ապահովի սերվոյի գործարկման համար: Ես օգտագործում եմ վահանը, քանի որ հեշտ է օգտագործել արտաքին լարման միայն սերվոյի համար:
Ահա ուրվագիծը: Ես գրել եմ servo արագության կարգավարի ռեժիմ, որպեսզի փոխեմ servo- ի արագությունը, քանի որ այն հավանաբար լավ չի աշխատի ամբողջ արագությամբ:
Գնդակի գլորման տարբեր արագություններ ստանալու համար կարող եք փոխել ժամանակի հետաձգումը: Կարող եք նաև փոխել myServo () ֆունկցիայի երրորդ պարամետրը `արագությունը փոխելու համար:
/////////////////////////////////////////////////// /////////////////////////////////////////////////// ///////////////// ստեղծեց Jimիմ Դեմելլոն, Շանգլուոյի համալսարան, 2017 թ
// դուք ազատ եք օգտագործել, շահարկել, անել այն, ինչ ցանկանում եք այս ծածկագրով, իմ անունը պարտադիր չէ
// Այս ռեժիմը թույլ է տալիս սերվերի ցանկացած քանակի ինտերպոլացիա, պարզապես ավելացրեք նոր տողեր, եթե սերվերի թիվը գերազանցում է 4 -ը
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#ներառում
Servo myservo1, myservo2; // ստեղծել servo օբյեկտ `servo- ն վերահսկելու համար
int servoRead (int servoNumber) {
int servoCurrent;
եթե (servoNumber == 1) {servoCurrent = myservo1.read (); }
եթե (servoNumber == 2) {servoCurrent = myservo2.read (); }
վերադարձ servoCurrent;
}
void servoWrite (int servoNumber, int offset) {
եթե (servoNumber == 1) {myservo1.write (offset); }
եթե (servoNumber == 2) {myservo2.write (offset); }
}
void myServo (int newAngle, int angleInc, int incDelay, int servoNum) {
int curAngle;
if (servoNum == 1) {curAngle = myservo1.read (); }
if (servoNum == 2) {curAngle = myservo2.read (); }
եթե (curAngle <newAngle) {
համար (int անկյուն = curAngle; անկյուն <newAngle; անկյուն += angleInc) {
եթե (servoNum == 1) myservo1.write (անկյուն);
եթե (servoNum == 2) myservo2.write (անկյուն);
ուշացում (ներառյալ Հետաձգում); }
}
այլապես, եթե (curAngle> newAngle) {
for (int angle = curAngle; angle> newAngle; անկյուն -= angleInc) {
եթե (servoNum == 1) myservo1.write (անկյուն);
եթե (servoNum == 2) myservo2.write (անկյուն);
ուշացում (ներառյալ Հետաձգում); }
}
}
void interpolate2Servos (int servo1, int servo1Position, int servo2, int servo2Position, int համարըՔայլեր, int ժամանակի հետաձգում) {
int servo1Current, servo2Current;
servo1Current = servoRead (servo1);
servo2Current = servoRead (servo2);
// Serial.print ("Servo3Pos և ընթացիկ"); Serial.print (servo3Position); Serial.print (""); Serial.println (servo3Current);
// Serial.print ("Servo4Pos և ընթացիկ"); Serial.print (servo4Position); Serial.print (""); Serial.println (servo4Current);
// Serial.print ("Servo5Pos և ընթացիկ"); Serial.print (servo5Position); Serial.print (""); Serial.println (servo5Current);
// Serial.print ("Servo6Pos և ընթացիկ"); 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;
համար (int x = 0; x
if (servo1Position> servo1Current) {cOffsetTotal = cOffsetTotal + cOffset; }
else {cOffsetTotal = cOffsetTotal - cOffset; }
if (servo2Position> servo2Current) {dOffsetTotal = dOffsetTotal + dOffset; }
else {dOffsetTotal = dOffsetTotal - dOffset; }
եթե (servo1Position! = servo1Current) servoWrite (servo1, cOffsetTotal);
եթե (servo2Position! = servo2Current) servoWrite (servo2, dOffsetTotal);
// Serial.print ("a and b Offset"); Serial.print (aOffsetTotal); Serial.print (""); Serial.println (bOffsetTotal); ուշացում (10);
ուշացում (ժամանակի ուշացում);
} // ավարտի համար
//////////////////////////////////////
// հոգ տանել մոդուլային մնացորդների մասին //
/////////////////////////////////////
եթե (servo1Position! = servo1Current) servoWrite (servo1, servo1Position);
եթե (servo2Position! = servo2Current) servoWrite (servo2, servo2Position);
}
int timingDelay = 100;
int servoDelay = 100;
int degGap = 10;
// Սա մեկնարկային աստիճանն է (պետք է լինի ավարտական աստիճանից փոքր)
int degStart = 0;
// Սա ավարտի աստիճանն է (պետք է լինի ավելի մեծ, քան մեկնարկային աստիճանը)
int degEnd = 360;
// Սա շրջանագծի շառավիղն է
int շառավիղ = 8;
դատարկ կարգավորում ()
{
Serial.begin (9600);
ուշացում (100);
myservo1.attach (7); // ամրացնում է servo- ն pin 7 -ի վրա servo օբյեկտին
myservo1.write (90);
myservo2.attach (8); // ամրացնում է 8 -րդ կապի servo- ն servo օբյեկտին
myservo2.write (90);
ուշացում (1000); // սպասում է, որ սերվոն հասնի այնտեղ
interpolate2Servos (1, 90, 2, 90, 10, 60); // չեզոք
ուշացում (1000);
}
դատարկ շրջան () {
timingDelay = 15; // աշխատում է 10 -ում
servoDelay = 4;
spin4 ();
// interpolate2Servos (1, 90, 2, 90, 1, 60); // չեզոք
// ուշացում (1000);
// ելք (0); // դադար ծրագիր - շարունակելու համար սեղմեք reset
}
դատարկ spin3 () {
interpolate2Servos (1, 90, 2, 110, 1, 60); // չեզոք
ուշացում (ժամկետների հետաձգում);
interpolate2Servos (1, 90, 2, 80, 1, 60); // չեզոք
ուշացում (ժամկետների հետաձգում);
}
դատարկ spin2 () {
// interpolate2Servos (1, 80, 2, 90, 1, 50); // չեզոք
ուշացում (ժամկետների հետաձգում);
interpolate2Servos (1, 80, 2, 80, 1, 60); // չեզոք
ուշացում (ժամկետների հետաձգում);
interpolate2Servos (1, 110, 2, 80, 1, 60); // չեզոք
ուշացում (ժամկետների հետաձգում);
// interpolate2Servos (1, 110, 2, 110, 1, 60); // չեզոք
ուշացում (ժամկետների հետաձգում);
}
դատարկ spin1 () {
// int deg = (degStart / (180 / 3.14));
float deg = (degStart * 3.141592 / 180); // աստիճանը ռադիանի փոխարկել
float xPos = 90 + (cos (deg) * շառավիղ);
// xPos = կլոր (xPos);
բոց yPos = 90 + (sin (deg) * շառավիղ);
// yPos = կլոր (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 ="); Սերիա println (yPos);
// interpolate2Servos (1, xPos, 2, yPos, 1, servoDelay); // չեզոք
myservo1.write (xPos);
myservo2.write (yPos);
ուշացում (ժամկետների հետաձգում);
եթե (degStart> = degEnd) {
degStart = 0;
եթե (degGap> 180)
degGap = 180;
// degGap = 0;
ուրիշ
degGap = degGap + 2;
degGap = degGap - 2;
// degStart = degStart +degGap;
}
degStart = degStart + degGap;
}
դատարկ spin4 () {
համար (int i = 0; i <= 360; i ++) {
բոց j = 20 * (cos ((3.14 * i)/180)) + 90;
բոց k = 20 * (մեղք ((3.14 * i)/180)) + 90;
myservo1. գրել (ժ);
myservo2.write (k);
Serial.print (j);
Serial.print (",");
Serial.println (k);
ուշացում (100);
}
}
Խորհուրդ ենք տալիս:
R/C iletուգարանի թղթի գլան `10 քայլ
![R/C iletուգարանի թղթի գլան `10 քայլ R/C iletուգարանի թղթի գլան `10 քայլ](https://i.howwhatproduce.com/images/006/image-15357-j.webp)
R/C iletուգարանի թղթի գլանափաթեթ. կանդրադառնամ, թե ինչպես է դա աշխատում, դա մարտահրավեր էր, բայց այնտեղ
Servo Arduino ավտոմատ `8 քայլ
![Servo Arduino ավտոմատ `8 քայլ Servo Arduino ավտոմատ `8 քայլ](https://i.howwhatproduce.com/images/002/image-5964-38-j.webp)
Servo Arduino վաճառքի մեքենա. Այս ավտոմատն ունի երեք զվարճալի չափի սնկերի բար և միաժամանակ կվաճառի Arduino Uno- ի և servo շարժիչի միջոցով:
Toուգարանի թղթի գլան հեռախոսի տեղադրում ՝ 7 քայլ (նկարներով)
![Toուգարանի թղթի գլան հեռախոսի տեղադրում ՝ 7 քայլ (նկարներով) Toուգարանի թղթի գլան հեռախոսի տեղադրում ՝ 7 քայլ (նկարներով)](https://i.howwhatproduce.com/images/004/image-10651-29-j.webp)
Toուգարանի թղթի գլանափաթեթ հեռախոսի տեղադրում. Ձեզ անհրաժեշտ է որևէ տեղ, որ ձեր հեռախոսը լիցքավորվի, որպեսզի այն դեռ ուղղահայաց լինի: Սրա պատասխանը հեռախոսի տեղադրումն է: Ունե՞ք մի քանի պահեստային զուգարանի թուղթ ձեր տան շուրջը, և ընդամենը մի փոքր ստվարաթուղթ: Եթե դա անես, ուրեմն
Ինչպես պատրաստել LED Spinnie/ Rollie/ LED գլան: 10 քայլ
![Ինչպես պատրաստել LED Spinnie/ Rollie/ LED գլան: 10 քայլ Ինչպես պատրաստել LED Spinnie/ Rollie/ LED գլան: 10 քայլ](https://i.howwhatproduce.com/images/004/image-9453-69-j.webp)
Ինչպես պատրաստել LED Spinnie/ Rollie/ LED գլան. Դուրս Մարտահրավեր, ուրեմն այս միտքը հենց այնպես ծագեց իմ մտքում, ինչպիսին է այն, թե ինչպես ես ադիբուդի պոկում: Մմ, ադիբուդի: Y
Ինչպես պատրաստել պիտակի գլան: 4 քայլ
![Ինչպես պատրաստել պիտակի գլան: 4 քայլ Ինչպես պատրաստել պիտակի գլան: 4 քայլ](https://i.howwhatproduce.com/preview/how-and-what-to-produce/11122575-how-to-make-a-label-roller-4-steps-j.webp)
Ինչպես պատրաստել պիտակի ակ Ես աշխատում եմ որպես ՏՏ մասնագետ լաբորատորիայում և մեր հաճախորդների սպասարկման տիկինների աշխատանքներից մեկն է տպել մի քանի հազար պիտակ Zebra Label p