ዝርዝር ሁኔታ:

አውቶማቲክ ኳስ ሮለር ከአርዱዲኖ እና ከአንድ ሰርቪስ ጋር - 3 ደረጃዎች
አውቶማቲክ ኳስ ሮለር ከአርዱዲኖ እና ከአንድ ሰርቪስ ጋር - 3 ደረጃዎች

ቪዲዮ: አውቶማቲክ ኳስ ሮለር ከአርዱዲኖ እና ከአንድ ሰርቪስ ጋር - 3 ደረጃዎች

ቪዲዮ: አውቶማቲክ ኳስ ሮለር ከአርዱዲኖ እና ከአንድ ሰርቪስ ጋር - 3 ደረጃዎች
ቪዲዮ: አቀባዊ ሮለር ሚል ኦፕሬሽን _ በሲሚንቶ ፕላንት ላይ የሚሰራ መርህ 2024, ሀምሌ
Anonim
Image
Image

ይህ ለማጠናቀቅ ሁለት ሰዓታት ያህል የሚወስድ ቀላል ትንሽ የአርዱኖ እና ሰርቪስ ፕሮጀክት ነው። በውስጠኛው ዙሪያ ዙሪያ የብረት ኳስ ለማሽከርከር አንድ የጠርሙስ ቆብ አንድ ጫፍ ለማንሳት servo ይጠቀማል። እሱ ራሱ ይጀምራል ፣ ፍጥነትን ሊቀይር እና በአንድ ጊዜ ሁለት (ወይም ከዚያ በላይ?) ኳሶችን ማሽከርከር ይችላል። መገንባት እና መሥራት አስደሳች ነው። የጊዜ መለኪያዎች ምናልባትም ለፈጣን ፍጥነቶች እንኳን ሊጫወቱ ይችላሉ። መግነጢሳዊ ኳስ ያላቸው ጥቂት የአዳራሽ ውጤት ዳሳሾች ምርጥ ልኬቶችን ማወቅ የሚችል ብልጥ ማሽን ለማድረግ ሊያገለግሉ ይችላሉ።

እዚህ በ instructables.com ላይ የሆነ ሰው የበለጠ የተራቀቀ የኳስ ሮለር ማሽን እንዳለው መጥቀስ አለብኝ

የሚያስፈልጉ ቁሳቁሶች;

አርዱዲኖ ኡኖ (ወይም ማንኛውም አርዱዲኖ)

ሰርቦ ጋሻ (አማራጭ)

9 ግ ሰርቪስ

የእቃ መያዣ

የብረት ኳስ

አንዳንድ የቆሻሻ እንጨት

ደረጃ 1 ቤዝ እና የታጠፈ ካፕ መያዣን ያድርጉ

ቤዝ እና የታጠፈ ካፕ መያዣን ያድርጉ
ቤዝ እና የታጠፈ ካፕ መያዣን ያድርጉ

የታሰረውን የእንጨት ቁራጭ ለመጫን መሠረቱ ጫካ ብቻ ነው። የታጠፈ እንጨት እርስዎ ከሚጠቀሙት የጠርሙስ ካፕ የበለጠ መሆን አለበት እና ለመያዣዎቹ በቂ ቦታ እና servo ን ለመሰካት።

እኔ ትንሽ የፕላስቲክ አርሲ አውሮፕላኖችን ማጠፊያዎች እጠቀማለሁ እና ወደ ተጣበቀ እንጨት እና ከመሠረቱ ጋር ብቻ አዛቸው።

ደረጃ 2 - ረዘም ያለ የ Servo ክንድ ያድርጉ እና Servo ን ያያይዙ

ረጅም የ Servo ክንድ ያድርጉ እና Servo ን ያያይዙ
ረጅም የ Servo ክንድ ያድርጉ እና Servo ን ያያይዙ
ረዣዥም Servo ክንድ ያድርጉ እና Servo ን ያያይዙ
ረዣዥም Servo ክንድ ያድርጉ እና Servo ን ያያይዙ

ረዘም ያለ የ servo ክንድ ለማድረግ እኔ ሁለት ትናንሽ ዊንሽኖች እና ለውዝ ባላቸው ሁለት የሾርባ ጣውላ ከ servo ክንድ ጋር አያይዣለሁ። ከመሠረቱ አግድም በሚሆንበት ጊዜ የ servo ክንድ በ servo ላይ በ 90 ዲግሪ መሆን አለበት።

እኔ በተጣበቀ የእንጨት መያዣ ላይ ሰርቪሱን ብቻ አጣበቅኩት ነገር ግን ከጥቂት ደቂቃዎች በላይ እንዲሮጥ ከፈቀዱ ሰርቪው የሙቀቱን ሙጫ ያሞቅና ከእንጨት ይለቀቃል። ስለዚህ የተሻለ የአባሪነት ዘዴ ዋስትና ተሰጥቶታል።

ደረጃ 3: ንድፍ ይጫኑ እና ያሂዱ

ንድፍ ይጫኑ እና ያሂዱ
ንድፍ ይጫኑ እና ያሂዱ

ጋሻ በመጠቀም የእኔን servo ከፒን 7 ጋር አያይዘዋለሁ ምክንያቱም እሱ ምቹ ስለሆነ እና ጥቂት ዶላር ብቻ ይከፍላሉ። ጋሻ ከሌለዎት ከዚያ በአርዱዲኖ ላይ 7 ን ለመሰካት የ servo ምልክት ሽቦውን ፣ ቀይ ሽቦውን በአርዱዲኖ ላይ 5 ቮ እና የመሬቱን ሽቦ በአርዲኖ ላይ ከ GND ጋር ያያይዙት። አርዱዲኖ አገልጋዩን ለማንቀሳቀስ በቂ የአሁኑን አቅርቦት መስጠት አለበት። መከለያውን እጠቀማለሁ ምክንያቱም ለሰርቪው ብቻ የውጭ voltage ልቴጅ መጠቀም ቀላል ነው።

ንድፉ እዚህ አለ። የ Servo ፍጥነቱን ለመለወጥ የ servo የፍጥነት መቆጣጠሪያ አሰራሩን ጻፍኩ ምክንያቱም ምናልባት ሙሉ በሙሉ በጥሩ ሁኔታ ላይሰራ ይችላል።

የተለያዩ የኳስ ማንከባለል ፍጥነቶችን ለማግኘት የጊዜ ገደቡን መለወጥ ይችላሉ። እንዲሁም ፍጥነትን ለመለወጥ የ myServo () ተግባር ሶስተኛውን ልኬት መለወጥ ይችላሉ።

/////////////////////////////// //////////////////////////////// //////////////// // በጂን ዴሜሎ ፣ በሻንግሉኦ ዩኒቨርሲቲ ፣ 2017 የተፈጠረ

// በዚህ ኮድ ለመጠቀም ፣ ለማታለል ፣ የሚፈልጉትን ሁሉ ለማድረግ ነፃ ነዎት ፣ ስሜ አይፈለግም

// ይህ የዕለት ተዕለት ማንኛውም የ servos ቁጥር እርስ በእርስ እንዲጣመር ያስችለዋል ፣ የ servos ብዛት ከ 4 በላይ ከሆነ አዲስ መስመሮችን ብቻ ይጨምሩ

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

#ያካትቱ

Servo myservo1, myservo2; // አንድ servo ን ለመቆጣጠር servo ን ነገር ይፍጠሩ

int servoRead (int servoNumber) {

int servoCurrent;

ከሆነ (servoNumber == 1) {servoCurrent = myservo1.read (); }

ከሆነ (servoNumber == 2) {servoCurrent = myservo2.read (); }

መመለስ servoCurrent;

}

ባዶነት servoWrite (int servoNumber ፣ int offset) {

ከሆነ (servoNumber == 1) {myservo1.write (offset); }

ከሆነ (servoNumber == 2) {myservo2.write (offset); }

}

ባዶ myServo (int newAngle ፣ int angleInc ፣ int incDelay ፣ int servoNum) {

int curAngle;

ከሆነ (servoNum == 1) {curAngle = myservo1.read (); }

ከሆነ (servoNum == 2) {curAngle = myservo2.read (); }

ከሆነ (curAngle <newAngle) {

ለ (int angle = curAngle ፤ አንግል <newAngle ፣ angle += angleInc) {

ከሆነ (servoNum == 1) myservo1. ጻፍ (አንግል);

ከሆነ (servoNum == 2) myservo2. ጻፍ (አንግል);

መዘግየት (incDelay); }

}

ሌላ ከሆነ (curAngle> newAngle) {

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

ከሆነ (servoNum == 1) myservo1. ጻፍ (አንግል);

ከሆነ (servoNum == 2) myservo2. ጻፍ (አንግል);

መዘግየት (incDelay); }

}

}

ባዶ interpolate2Servos (int servo1 ፣ int servo1 አቀማመጥ ፣

int servo2 ፣ int servo2 አቀማመጥ ፣

int ቁጥር ደረጃዎች ፣ int timeDelay) {

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

ከሆነ (servo1Position> servo1Current) {cOffsetTotal = cOffsetTotal + cOffset; }

ሌላ {cOffsetTotal = cOffsetTotal - cOffset; }

ከሆነ (servo2Position> servo2Current) {dOffsetTotal = dOffsetTotal + dOffset; }

ሌላ {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 timDelay = 100;

int servoDelay = 100;

int degGap = 10;

// ይህ የመነሻ ዲግሪ ነው (ከመጨረሻው ዲግሪ ያነሰ መሆን አለበት)

int degStart = 0;

// ይህ የማጠናቀቂያ ዲግሪዎች ነው (ከመነሻ ዲግሪ የበለጠ መሆን አለበት)

int degEnd = 360;

// ይህ የክበብ ራዲየስ ነው

int ራዲየስ = 8;

ባዶነት ማዋቀር ()

{

Serial.begin (9600);

መዘግየት (100);

myservo1.attach (7); // አገልጋዩን በፒን 7 ላይ ወደ servo ነገር ያያይዘዋል

myservo1. ጻፍ (90);

myservo2.attach (8); // አገልጋዩን በፒን 8 ላይ ወደ servo ነገር ያያይዘዋል

myservo2. ጻፍ (90);

መዘግየት (1000); // አገልጋዩ እዚያ እስኪደርስ ይጠብቃል

interpolate2Servos (1, 90, 2, 90, 10, 60); // ገለልተኛ

መዘግየት (1000);

}

ባዶነት loop () {

የጊዜ መዘግየት = 15; // በ 10 ላይ ይሠራል

servoDelay = 4;

spin4 ();

// interpolate2Servos (1 ፣ 90 ፣ 2 ፣ 90 ፣ 1 ፣ 60); // ገለልተኛ

// መዘግየት (1000);

// መውጫ (0); // ለአፍታ አቁም ፕሮግራም - ለመቀጠል ዳግም ማስጀመርን ይምቱ

}

ባዶ ባዶ spin3 () {

interpolate2Servos (1, 90, 2, 110, 1, 60); // ገለልተኛ

መዘግየት (የጊዜ መዘግየት);

interpolate2Servos (1, 90, 2, 80, 1, 60); // ገለልተኛ

መዘግየት (የጊዜ መዘግየት);

}

ባዶ ሽክርክሪት 2 () {

// 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); // ገለልተኛ

መዘግየት (የጊዜ መዘግየት);

}

ባዶ ሽክርክሪት 1 () {

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

ተንሳፋፊ deg = (degStart * 3.141592 / 180); // ዲግሪዎችን ወደ ራዲየኖች ይለውጡ

ተንሳፋፊ xPos = 90 + (cos (deg) * ራዲየስ);

// xPos = ዙር (xPos);

ተንሳፋፊ yPos = 90 + (ኃጢአት (ዲግሪ) * ራዲየስ);

// yPos = ዙር (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); // ገለልተኛ

myservo1. ጻፍ (xPos);

myservo2. ጻፍ (yPos);

መዘግየት (የጊዜ መዘግየት);

ከሆነ (degStart> = degEnd) {

degStart = 0;

ከሆነ (degGap> 180)

degGap = 180;

// degGap = 0;

ሌላ

degGap = degGap + 2;

degGap = degGap - 2;

// degStart = degStart +degGap;

}

degStart = degStart + degGap;

}

ባዶ ሽክርክሪት 4 () {

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

ተንሳፋፊ j = 20 * (cos ((3.14 * i)/180)) + 90;

ተንሳፋፊ k = 20 * (ኃጢአት ((3.14 * i)/180)) + 90;

myservo1. ጻፍ (j);

myservo2. ጻፍ (k);

Serial.print (j);

Serial.print (",");

Serial.println (k);

መዘግየት (100);

}

}

የሚመከር: