Turinys:
- 1 žingsnis: padarykite pagrindo ir vyrio dangtelio laikiklį
- 2 žingsnis: Padarykite ilgesnę servo ranką ir pritvirtinkite servo
- 3 veiksmas: įkelkite ir paleiskite eskizą
Video: Automatinis rutulinis ritinėlis su „Arduino“ir viena servo sistema: 3 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:44
Tai paprastas mažas „Arduino“ir „servo“projektas, kuriam užbaigti reikia apie dvi valandas. Jis naudoja servo, kad pakeltų vieną stiklainio dangtelio galą ir suktų plieninį rutulį aplink vidinę perimetrą. Jis prasideda savaime, gali pakeisti greitį ir vienu metu suktis du (ar daugiau?) Kamuoliukus. Smagu kurti ir dirbti. Laiko parametrus galima žaisti turbūt dar didesniam greičiui. Galima naudoti kelis salės efekto jutiklius su magnetiniu rutuliu, kad tai taptų protingesne mašina, galinčia išsiaiškinti geriausius parametrus.
Turėčiau paminėti, kad kažkas čia, instructables.com, turi sudėtingesnę rutulinių ritinėlių mašiną:
Reikalingos medžiagos:
„Arduino Uno“(arba bet kuris „Arduino“)
Servo skydas (neprivaloma)
9g servo
stiklainio dangtelis
plieninis rutulys
šiek tiek medžio laužo
1 žingsnis: padarykite pagrindo ir vyrio dangtelio laikiklį
Pagrindas yra tik medžio gabalas, ant kurio pritvirtinamas atverčiamas medžio gabalas. Šarnyrinė mediena turėtų būti didesnė už naudojamą stiklainio dangtelį ir turėti pakankamai vietos vyriams ir servo montavimui.
Aš naudoju mažai plastikinių rc orlaivių vyrių ir tiesiog karštai priklijavau juos prie atverčiamos medienos ir pagrindo.
2 žingsnis: Padarykite ilgesnę servo ranką ir pritvirtinkite servo
Norėdami pagaminti ilgesnę servo ranką, aš tiesiog pritvirtinau 5 centimetrų medžio gabalą prie servo rankos su keliais mažais varžtais ir veržlėmis. Servo svirtis turi būti 90 laipsnių kampu ant servo, kai ji yra horizontali pagrindo atžvilgiu.
Aš tiesiog karštai priklijavau servo prie atlenkto medžio laikiklio, bet pastebėjau, kad jei leisite veikti ilgiau nei kelias minutes, servo įkaitins karštus klijus ir atleis nuo medžio. Taigi geresnis tvirtinimo būdas yra pagrįstas.
3 veiksmas: įkelkite ir paleiskite eskizą
Aš pritvirtinau savo servo prie 7 kaiščio, naudodamas skydą, nes tai tiesiog patogu ir jie kainuoja tik kelis dolerius. Jei neturite skydo, pritvirtinkite servo signalo laidą prie „Arduino“7 kaiščio, raudoną laidą prie 5 V „Arduino“ir įžeminimo laido prie GND „Arduino“. Arduino turėtų tiekti pakankamai srovės, kad galėtų valdyti servo. Aš naudoju skydą, nes lengva naudoti išorinę įtampą tik servo.
Čia yra eskizas. Parašiau servo greičio valdiklio rutiną, kad pakeisčiau servo greitį, nes greičiausiai jis neveiks visu greičiu.
Galite pakeisti „timingDelay“, kad gautumėte skirtingą rutulio ridenimo greitį. Taip pat galite pakeisti trečiąjį „myServo“() funkcijos parametrą, kad pakeistumėte greitį.
///////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////// /////////////// // sukūrė Jim Demello, Šangluo universitetas, 2017 m.
// su šiuo kodu galite laisvai naudotis, manipuliuoti, daryti ką tik norite, mano vardas nereikalingas
// Ši tvarka leidžia interpoliuoti bet kokį servo skaičių, tiesiog pridėkite naujų eilučių, jei servų skaičius viršija 4
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#įtraukti
Servo myservo1, myservo2; // sukurti servo objektą valdyti servo
int servoRead (int servoNumber) {
int servoCurrent;
if (servoNumber == 1) {servoCurrent = myservo1.read (); }
if (servoNumber == 2) {servoCurrent = myservo2.read (); }
return servoCurrent;
}
void servoWrite (int servoNumber, int offset) {
if (servoNumber == 1) {myservo1.write (poslinkis); }
if (servoNumber == 2) {myservo2.write (poslinkis); }
}
void myServo (int newAngle, int angleInc, int incDelay, int servoNum) {
int curAngle;
if (servoNum == 1) {curAngle = myservo1.read (); }
if (servoNum == 2) {curAngle = myservo2.read (); }
if (curAngle <newAngle) {
for (int kampas = curAngle; kampas <newAngle; kampas += kampasInc) {
if (servoNum == 1) myservo1.write (kampas);
if (servoNum == 2) myservo2.write (kampas);
vėlavimas (incDelay); }
}
else if (curAngle> newAngle) {
for (int kampas = curAngle; kampas> newAngle; kampas -= kampasInc) {
if (servoNum == 1) myservo1.write (kampas);
if (servoNum == 2) myservo2.write (kampas);
vėlavimas (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 ir srovė"); Serial.print (servo3Position); Serial.print (""); Serial.println (servo3Current);
// Serial.print ("Servo4Pos ir srovė"); Serial.print (servo4Position); Serial.print (""); Serial.println (servo4Current);
// Serial.print ("Servo5Pos ir srovė"); Serial.print (servo5Position); Serial.print (""); Serial.println (servo5Current);
// Serial.print ("Servo6Pos ir srovė"); 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;
už (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 ir b poslinkis"); Serial.print (aOffsetTotal); Serial.print (""); Serial.println (bOffsetTotal); vėlavimas (10);
uždelsimas (timeDelay);
} // pabaiga
//////////////////////////////////////
// pasirūpinkite modulo likučiais //
/////////////////////////////////////
if (servo1Position! = servo1Current) servoWrite (servo1, servo1Position);
if (servo2Position! = servo2Current) servoWrite (servo2, servo2Position);
}
int timingDelay = 100;
int servoDelay = 100;
int degGap = 10;
// Tai yra pradinis laipsnis (turi būti mažesnis už pabaigą)
int degStart = 0;
// Tai baigiamieji laipsniai (turi būti didesnis nei pradžios laipsnis)
int degEnd = 360;
// Tai apskritimo spindulys
int spindulys = 8;
negaliojanti sąranka ()
{
Serial.begin (9600);
vėlavimas (100);
myservo1.attach (7); // pritvirtina 7 kaiščio servo prie servo objekto
myservo1.write (90);
myservo2.attach (8); // prie servo objekto pritvirtina 8 kaiščio servo
myservo2.write (90);
vėlavimas (1000); // laukia, kol servo ten pateks
interpolate2Servos (1, 90, 2, 90, 10, 60); // neutralus
vėlavimas (1000);
}
void loop () {
timingDelay = 15; // dirba 10 val
servoDelay = 4;
spin4 ();
// interpolate2Servos (1, 90, 2, 90, 1, 60); // neutralus
// uždelsimas (1000);
// išeiti (0); // pristabdyti programą - paspauskite reset, kad tęstumėte
}
void spin3 () {
interpolate2Servos (1, 90, 2, 110, 1, 60); // neutralus
uždelsimas (timingDelay);
interpolate2Servos (1, 90, 2, 80, 1, 60); // neutralus
uždelsimas (timingDelay);
}
void spin2 () {
// interpolate2Servos (1, 80, 2, 90, 1, 50); // neutralus
uždelsimas (timingDelay);
interpolate2Servos (1, 80, 2, 80, 1, 60); // neutralus
uždelsimas (timingDelay);
interpolate2Servos (1, 110, 2, 80, 1, 60); // neutralus
uždelsimas (timingDelay);
// interpolate2Servos (1, 110, 2, 110, 1, 60); // neutralus
uždelsimas (timingDelay);
}
void spin1 () {
// int deg = (degStart / (180 / 3.14));
plūdė deg = (degStart * 3.141592 / 180); // konvertuoti laipsnius į radianus
plūdė xPos = 90 + (cos (deg) * spindulys);
// xPos = apvalus (xPos);
plūdė yPos = 90 + (sin (deg) * spindulys);
// yPos = apvalus (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); // neutralus
myservo1.write (xPos);
myservo2.write (yPos);
uždelsimas (timingDelay);
if (degStart> = degEnd) {
degStart = 0;
jei (degGap> 180)
degGap = 180;
// degGap = 0;
Kitas
degGap = degGap + 2;
degGap = degGap - 2;
// degStart = degStart +degGap;
}
degStart = degStart + degGap;
}
void spin4 () {
(int i = 0; i <= 360; i ++) {
plūdė j = 20 * (cos ((3.14 * i)/180)) + 90;
plūdė k = 20 * (sin ((3.14 * i)/180)) + 90;
myservo1.write (j);
myservo2.write (k);
Serijinis.spaudas (j);
Serial.print (",");
Serijinis.println (k);
vėlavimas (100);
}
}
Rekomenduojamas:
Automatinis aušinimo ventiliatorius naudojant „Servo“ir DHT11 temperatūros ir drėgmės jutiklį su „Arduino“: 8 žingsniai
Automatinis aušinimo ventiliatorius naudojant „Servo“ir DHT11 temperatūros ir drėgmės jutiklį su „Arduino“: šioje pamokoje sužinosime, kaip pradėti & pasukite ventiliatorių, kai temperatūra pakyla virš tam tikro lygio
SW -520D vibracijos jutiklis metalinis rutulinis pakreipimo jungiklis - „Visuino“: 6 žingsniai
SW-520D vibracijos jutiklio metalinis rutulinis pakreipimo jungiklis-Visuino: Šis SW-520D pagrindinis pakreipimo jungiklis gali būti lengvai naudojamas orientacijai aptikti. Skardinės viduje yra rutulys, kuris liečiasi su kaiščiais, kai dėklas yra vertikalus. Pakreipkite korpusą ir rutuliai nesilies, taip nesusijungdami. Pakreipimo jutiklis yra
Rutulinis balansavimo įrenginys ir PID smuikininkas: 7 žingsniai (su nuotraukomis)
Rutulinis balansuotojas ir PID smuikininkas: Šis projektas yra skirtas žmonėms, turintiems patirties naudojant „Arduino“. Pravers išankstinės žinios apie servo, OLED ekranų, puodų, mygtukų, litavimo naudojimą. Šiame projekte naudojamos 3D spausdintos dalys. „Ball Balancer“yra PID bandymo įrenginys, skirtas
Dar viena „Altoids“garsiakalbių sistema: 4 žingsniai
Dar viena „Altoids“garsiakalbių sistema: greita, lengvai pagaminama ir iš tikrųjų gana galinga garsiakalbių sistema; pagamintas iš „Altoids“skardos ir pigios garsiakalbių sistemos, kurią nusipirkau „Ross“. Žinau, kad daugybė šių instrukcijų jau yra, bet tai mano pirmasis, todėl darau kažką paprasto
Nešiojamasis teniso rutulinis garsiakalbis, skirtas MP3 / iPod su stiprintuvu: 8 žingsniai
Nešiojamasis teniso kamuoliuko garsiakalbis, skirtas MP3 / iPod su stiprintuvu: Šioje instrukcijoje jūs sužinosite, kaip pasidaryti porą teniso kamuoliuko garsiakalbių. Juos labai lengva padaryti, pirmuosius užtrukau 15 minučių. KO REIKIA; 9v baterija 9v akumuliatorius clipa teniso kamuoliukas Iš kompiuterio garsiakalbių išimtas stiprintuvas https: //www