Orodha ya maudhui:

Roller ya mpira inayojiendesha na Arduino na Servo Moja: Hatua 3
Roller ya mpira inayojiendesha na Arduino na Servo Moja: Hatua 3

Video: Roller ya mpira inayojiendesha na Arduino na Servo Moja: Hatua 3

Video: Roller ya mpira inayojiendesha na Arduino na Servo Moja: Hatua 3
Video: Раскрыт новый метод! Как сделать машину управляемой пультом! RC! без двигателя Стирлинга! 2024, Julai
Anonim
Image
Image

Huu ni mradi rahisi wa Arduino na servo ambao unachukua kama masaa mawili kukamilisha. Inatumia servo kuinua ncha moja ya kofia ya jar ili kuzungusha mpira wa chuma kuzunguka mzingo wa ndani. Ni kujitegemea, inaweza kubadilisha kasi na inaweza kuzunguka mipira miwili (au zaidi?) Mara moja. Furaha ya kujenga na kufanya kazi. Vigezo vya muda vinaweza kuchezwa na labda kwa kasi zaidi. Sensorer chache za athari za ukumbi na mpira wa sumaku zinaweza kutumiwa kuifanya mashine nadhifu inayoweza kujua vigezo bora.

Ninapaswa kutaja kuwa mtu hapa kwenye instructables.com ana mashine ya kisasa zaidi ya mpira:

Vifaa vinahitajika:

Arduino Uno (au Arduino yoyote)

Ngao ya Servo (hiari)

9g servo

kofia ya jar

mpira wa chuma

kuni zingine chakavu

Hatua ya 1: Fanya Kishikilia Msingi na Hinged Cap

Tengeneza Kishika Msingi na Hinged Cap
Tengeneza Kishika Msingi na Hinged Cap

Msingi ni hunk tu ya kuni ili kuweka kipande cha kuni kilichokunjwa. Miti iliyokuwa na bawaba inapaswa kuwa kubwa kuliko kofia ya mtungi ambayo utatumia na kuwa na nafasi ya kutosha kwa bawaba na kupandisha servo.

Nilitumia bawaba ndogo za ndege za plastiki za rc na nikazitia tu kwenye kuni na bawaba.

Hatua ya 2: Tengeneza Sura ya Servo ndefu na Ambatanisha Servo

Tengeneza Silaha ndefu ya Servo na Ambatanisha Servo
Tengeneza Silaha ndefu ya Servo na Ambatanisha Servo
Tengeneza Silaha ndefu ya Servo na Ambatanisha Servo
Tengeneza Silaha ndefu ya Servo na Ambatanisha Servo

Ili kutengeneza mkono mrefu wa servo niliunganisha tu kipande cha kuni cha sentimita 5 kwenye mkono wa servo na visu ndogo ndogo na karanga. Mkono wa servo unapaswa kuwa kwenye digrii 90 kwenye servo wakati iko usawa kwa msingi.

Nilipiga gundi tu servo kwa mmiliki wa kuni lakini niligundua kuwa ukiiruhusu iende kwa muda mrefu zaidi ya dakika chache, servo itapasha gundi moto na kuacha kutoka kwa kuni. Kwa hivyo njia bora ya kushikamana inastahili.

Hatua ya 3: Mzigo na Run Run

Mzigo na Run Run
Mzigo na Run Run

Niliambatisha servo yangu kubandika 7 kwa kutumia ngao kwa sababu ni rahisi tu na wanagharimu pesa chache tu. Ikiwa hauna ngao kisha unganisha waya wa ishara ya servo kubandika 7 kwenye Arduino, waya mwekundu hadi 5v kwenye Arduino na waya wa ardhini kwenda GND kwenye Arduino. Arduino inapaswa kutoa sasa ya kutosha kuendesha servo. Ninatumia ngao kwa sababu ni rahisi kutumia voltage ya nje kwa servo tu.

Hapa kuna mchoro. Niliandika utaratibu wa kudhibiti kasi ya servo ili kubadilisha kasi ya servo kwa sababu labda haitafanya kazi vizuri kwa kasi kamili.

Unaweza kubadilisha majiraKuchelewa kupata kasi tofauti za kutembeza mpira. Unaweza pia kubadilisha parameter ya tatu ya kazi ya myServo () kubadilisha kasi pia.

//////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////// ////////////// // iliyoundwa na Jim Demello, Chuo Kikuu cha Shangluo, 2017

// wewe ni huru kutumia, kuendesha, kufanya chochote unachotaka na nambari hii, jina langu halihitajiki

// Utaratibu huu unaruhusu idadi yoyote ya servos kuingiliwa, ongeza tu mistari mpya ikiwa idadi ya servos inazidi 4

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

# pamoja

Servo myservo1, myservo2; // tengeneza kitu cha servo kudhibiti servo

int servoRead (int servoNumber) {

int servoCurrent;

ikiwa (servoNumber == 1) {servoCurrent = myservo1.read (); }

ikiwa (servoNumber == 2) {servoCurrent = myservo2.read (); }

kurudi servoCurrent;

}

utupu servoWrite (int servoNumber, int offset) {

ikiwa (servoNumber == 1) {myservo1.write (offset); }

ikiwa (servoNumber == 2) {myservo2.write (offset); }

}

batili myServo (int newAngle, int angleInc, int incDelay, int servoNum) {

int curAngle;

ikiwa (servoNum == 1) {curAngle = myservo1.read (); }

ikiwa (servoNum == 2) {curAngle = myservo2.read (); }

ikiwa (curAngle <newAngle) {

kwa (int angle = curAngle; angle <newAngle; angle + = angleInc) {

ikiwa (servoNum == 1) myservo1.write (angle);

ikiwa (servoNum == 2) myservo2.write (angle);

kuchelewesha (incDelay); }

}

vinginevyo ikiwa (curAngle> newAngle) {

kwa (int angle = curAngle; angle> newAngle; angle - = angleInc) {

ikiwa (servoNum == 1) myservo1.write (angle);

ikiwa (servoNum == 2) myservo2.write (angle);

kuchelewesha (incDelay); }

}

}

batili interpolate2Servos (int servo1, int servo1Position, int servo2, int servo2Position, nambari ya hatuaHatua, int timeDelay) {

int servo1Current, servo2Current;

servo1Current = servoRead (servo1);

servo2Current = servoRead (servo2);

// Serial.print ("Servo3Pos na ya sasa"); Serial.print (servo3Position); Serial.print (""); Serial.println (servo3Current);

// Serial.print ("Servo4Pos na ya sasa"); Serial.print (servo4Position); Serial.print (""); Serial.println (servo4Current);

// Serial.print ("Servo5Pos na ya sasa"); Serial.print (servo5Position); Serial.print (""); Serial.println (servo5Current);

// Serial.print ("Servo6Pos na ya sasa"); Printa ya serial (nafasi ya servo6); Serial.print (""); Serial.println (servo6Current);

// Serial.println ("");

int cOffset = (servo1Position - servo1Current); cOffset = abs (cOffset) / idadiHatua;

int dOffset = (servo2Position - servo2Current); dOffset = abs (dOffset) / idadiHatua;

int cOffsetTotal = 0, dOffsetTotal = 0;

cOffsetTotal = servo1Current;

dOffsetTotal = servo2Current;

kwa (int x = 0; x

ikiwa (servo1Position> servo1Current) {cOffsetTotal = cOffsetTotal + cOffset; }

mwingine {cOffsetTotal = cOffsetTotal - cOffset; }

ikiwa (servo2Position> servo2Current) {dOffsetTotal = dOffsetTotal + dOffset; }

mwingine {dOffsetTotal = dOffsetTotal - dOffset; }

ikiwa (servo1Position! = servo1Current) servoWrite (servo1, cOffsetTotal);

ikiwa (servo2Position! = servo2Current) servoWrite (servo2, dOffsetTotal);

// Serial.print ("a na b Kukamilisha"); Serial.print (aOffsetTotal); Serial.print (""); Serial.println (bOffsetTotal); kuchelewesha (10);

kuchelewesha (timeDelay);

} // mwisho wa

//////////////////////////////////////

// utunzaji wa salio za modulo //

/////////////////////////////////////

ikiwa (servo1Position! = servo1Current) servoWrite (servo1, servo1Position);

ikiwa (servo2Position! = servo2Current) servoWrite (servo2, servo2Position);

}

muda wa mudaDelay = 100;

int servoDelay = 100;

int degGap = 10;

// Hii ndio digrii ya kuanzia (lazima iwe chini ya kiwango cha mwisho)

Mwanzo = 0;

// Hizi ni digrii za kumaliza (lazima ziwe kubwa kuliko digrii ya kuanza)

int degEnd = 360;

// Hii ndio eneo la duara

eneo la int = 8;

kuanzisha batili ()

{

Kuanzia Serial (9600);

kuchelewesha (100);

myservo1.ambatanisha (7); // inaunganisha servo kwenye pini 7 kwa kitu cha servo

kuandika [90];

myservo2.ambatanisha (8); // inaunganisha servo kwenye pini ya 8 kwa kitu cha servo

kuandika [90];

kuchelewesha (1000); // inasubiri servo ifike hapo

kuingiliana2Servos (1, 90, 2, 90, 10, 60); // upande wowote

kuchelewesha (1000);

}

kitanzi batili () {

majiraDelay = 15; // hufanya kazi saa 10

servoDelay = 4;

spin4 ();

// interpolate2Servos (1, 90, 2, 90, 1, 60); // upande wowote

// kuchelewa (1000);

// kutoka (0); // mpango wa kusitisha - piga upya ili kuendelea

}

batili spin3 () {

kuingiliana2Servos (1, 90, 2, 110, 1, 60); // upande wowote

kuchelewesha (mudaDelay);

kuingiliana2Servos (1, 90, 2, 80, 1, 60); // upande wowote

kuchelewesha (mudaDelay);

}

batili spin2 () {

// interpolate2Servos (1, 80, 2, 90, 1, 50); // upande wowote

kuchelewesha (mudaDelay);

kuingiliana2Servos (1, 80, 2, 80, 1, 60); // upande wowote

kuchelewesha (mudaDelay);

kuingiliana2Servos (1, 110, 2, 80, 1, 60); // upande wowote

kuchelewesha (mudaDelay);

// interpolate2Servos (1, 110, 2, 110, 1, 60); // upande wowote

kuchelewesha (mudaDelay);

}

batili spin1 () {

// int deg = (degStart / (180 / 3.14));

kuelea deg = (deg Anza * 3.141592 / 180); // kubadilisha digrii kuwa radians

kuelea xPos = 90 + (cos (deg) * radius);

// xPos = pande zote (xPos);

kuelea yPos = 90 + (dhambi (deg) * radius);

// yPos = pande zote (yPos);

Serial.print ("degGap ="); Serial.print (degGap); Serial.print ("deg ="); Serial.print (deg); Serial.print ("cos ="); Serial.print (cos (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); // upande wowote

kuandika [xPos];

kuandika [yPos];

kuchelewesha (mudaDelay);

ikiwa (degStart> = degEnd) {

Mwanzo = 0;

ikiwa (degGap> 180)

GGG = 180;

// degGap = 0;

mwingine

kiwangoGap = degGap + 2;

Mgawo = degGap - 2;

// degStart = degStart + degGap;

}

Mwanzo = degStart + degGap;

}

batili spin4 () {

kwa (int i = 0; i <= 360; i ++) {

kuelea j = 20 * (cos ((3.14 * i) / 180)) + 90;

kuelea k = 20 * (dhambi ((3.14 * i) / 180)) + 90;

kuandika [j];

andika (k);

Printa ya serial (j);

Serial.print (",");

Serial.println (k);

kuchelewesha (100);

}

}

Ilipendekeza: