فهرست مطالب:

غلتک توپ اتوماتیک با آردوینو و یک سروو: 3 مرحله
غلتک توپ اتوماتیک با آردوینو و یک سروو: 3 مرحله

تصویری: غلتک توپ اتوماتیک با آردوینو و یک سروو: 3 مرحله

تصویری: غلتک توپ اتوماتیک با آردوینو و یک سروو: 3 مرحله
تصویری: آموزش ژانگولر توپ مختصر و مفید توسط اهور how to juggling 3 ball by ahoor 2024, جولای
Anonim
Image
Image

این یک پروژه کوچک آردوینو و سروو است که تکمیل آن حدود دو ساعت طول می کشد. از سروو برای بالا بردن یک سر کلاهک شیشه ای استفاده می کند تا یک توپ فولادی به دور محیط بچرخد. این خود شروع می شود ، می تواند سرعت را تغییر دهد و می تواند دو (یا چند توپ) را به طور همزمان بچرخاند. سرگرم کننده برای ساختن و کار کردن. پارامترهای زمان بندی را می توان با احتمال زیاد حتی سریعتر بازی کرد. از چند سنسور اثر هال با یک توپ مغناطیسی می توان برای ساختن آن به دستگاهی هوشمندتر استفاده کرد که بتواند بهترین پارامترها را تعیین کند.

لازم به ذکر است که کسی در اینجا در trainables.com یک دستگاه غلتک پیچیده تر دارد:

مواد مورد نیاز:

Arduino Uno (یا هر Arduino)

سپر سروو (اختیاری)

سرو 9 گرم

درپوش شیشه

توپ فولادی

مقداری چوب قراضه

مرحله 1: پایه نگهدارنده پایه و لولا را بسازید

نگهدارنده کلاه پایه و لولا را بسازید
نگهدارنده کلاه پایه و لولا را بسازید

پایه فقط یک تکه چوب است تا تکه چوب لولایی را روی آن نصب کنید. چوب لولایی باید بزرگتر از کلاهک شیشه ای باشد که از آن استفاده می کنید و فضای کافی برای لولا و نصب سروو دارد.

من از لولا های پلاستیکی rc کوچک هواپیما استفاده کردم و فقط آنها را به چوب لولایی و پایه چسباندم.

مرحله 2: سروو را بلندتر کرده و سروو را وصل کنید

سروو بلندتر کنید و سروو وصل کنید
سروو بلندتر کنید و سروو وصل کنید
سروو بلندتر کنید و سروو وصل کنید
سروو بلندتر کنید و سروو وصل کنید

برای ساختن بازوی سروو بلندتر ، فقط یک قطعه چوب 5 سانتی متری را با چند پیچ و مهره کوچک به بازوی سروو وصل کردم. بازوی سرو باید در حالت افقی 90 درجه روی سروو قرار گیرد.

من فقط سروو را به نگهدارنده چوب لولایی چسباندم اما متوجه شدم که اگر اجازه دهید بیش از چند دقیقه کار کند ، سروو چسب حرارتی را گرم کرده و از چوب رها می شود. بنابراین یک روش دلبستگی بهتر موجه است.

مرحله 3: بارگیری و اجرای طرح

بارگیری و اجرای طرح
بارگیری و اجرای طرح

من سروو را با استفاده از سپر به پین 7 وصل کردم زیرا فقط راحت است و هزینه آنها فقط چند دلار است. اگر سپر ندارید ، سیم سروو سیگنال را به پین 7 در آردوینو ، سیم قرمز را به 5 ولت در آردوینو و سیم زمین را به GND در آردوینو وصل کنید. آردوینو باید جریان کافی را برای کارکرد سروو فراهم کند. من از سپر استفاده می کنم زیرا استفاده از ولتاژ خارجی فقط برای سروو آسان است.

در اینجا طرح است. من یک روتین کنترل سرعت سرو نوشتم تا سرعت سروو تغییر کند ، زیرا احتمالاً با سرعت کامل خوب کار نمی کند.

برای به دست آوردن سرعت های مختلف چرخش توپ ، می توانید زمان تاخیر را تغییر دهید. همچنین می توانید پارامتر سوم تابع myServo () را تغییر دهید تا سرعت نیز تغییر کند.

//////////////////////////////////////////////// //////////////////////////////////////////////// /////////////// // ایجاد شده توسط جیم دملو ، دانشگاه شانگلو ، 2017

// شما آزاد هستید که استفاده کنید ، دستکاری کنید ، هر کاری که می خواهید با این کد انجام دهید ، نام من مورد نیاز نیست

// این روال اجازه می دهد تا هر تعداد سروو درون یابی شود ، فقط اگر تعداد سرویس ها از 4 بیشتر شود خطوط جدید اضافه کنید

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

#عبارتند از

سرو myservo1 ، myservo2 ؛ // ایجاد شیء سروو برای کنترل سروو

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 (آفست) ؛ }

if (servoNumber == 2) {myservo2.write (آفست)؛ }

}

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 angle = curAngle؛ angle <newAngle؛ angle += angleInc) {

if (servoNum == 1) myservo1.write (زاویه) ؛

if (servoNum == 2) myservo2.write (زاویه) ؛

تاخیر (incDelay) ؛ }

}

else if (curAngle> newAngle) {

for (int angle = curAngle؛ angle> newAngle؛ angle -= angleInc) {

if (servoNum == 1) myservo1.write (زاویه) ؛

if (servoNum == 2) myservo2.write (زاویه) ؛

تاخیر (incDelay) ؛ }

}

}

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؛ }

if (servo1Position! = servo1Current) servoWrite (servo1، cOffsetTotal) ؛

if (servo2Position! = servo2Current) servoWrite (servo2، dOffsetTotal) ؛

// Serial.print ("a and b Offset") ؛ Serial.print (aOffsetTotal) ؛ Serial.print ("") ؛ Serial.println (bOffsetTotal) ؛ تأخیر (10) ؛

تاخیر (زمان تاخیر) ؛

} // پایان برای

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

// مراقبت از باقی مانده modulo //

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

if (servo1Position! = servo1Current) servoWrite (servo1، servo1Position) ؛

if (servo2Position! = servo2Current) servoWrite (servo2، servo2Position) ؛

}

int timingDelay = 100؛

int servoDelay = 100 ؛

int degGap = 10؛

// این درجه شروع است (باید کمتر از درجه پایان باشد)

int degStart = 0؛

// این درجه های پایانی است (باید بیشتر از درجه شروع باشد)

int degEnd = 360؛

// این شعاع دایره است

شعاع int = 8 ؛

void setup ()

{

Serial.begin (9600)؛

تأخیر (100) ؛

myservo1.attach (7) ؛ // سروو را روی پین 7 به شیء سروو متصل می کند

myservo1.write (90)؛

myservo2.attach (8)؛ // سروو روی پین 8 را به شیء سروو متصل می کند

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 را فشار دهید

}

void spin3 () {

interpolate2Servos (1 ، 90 ، 2 ، 110 ، 1 ، 60) ؛ // خنثی

تاخیر (timingDelay) ؛

interpolate2Servos (1 ، 90 ، 2 ، 80 ، 1 ، 60) ؛ // خنثی

تاخیر (timingDelay) ؛

}

void spin2 () {

// interpolate2Servos (1 ، 80 ، 2 ، 90 ، 1 ، 50) ؛ // خنثی

تاخیر (timingDelay) ؛

interpolate2Servos (1 ، 80 ، 2 ، 80 ، 1 ، 60) ؛ // خنثی

تاخیر (timingDelay) ؛

interpolate2Servos (1 ، 110 ، 2 ، 80 ، 1 ، 60) ؛ // خنثی

تاخیر (timingDelay) ؛

// interpolate2Servos (1 ، 110 ، 2 ، 110 ، 1 ، 60) ؛ // خنثی

تاخیر (timingDelay) ؛

}

void spin1 () {

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

float deg = (degStart * 3.141592 / 180) ؛ // تبدیل درجه به رادیان

شناور xPos = 90 + (cos (درجه) * شعاع) ؛

// xPos = گرد (xPos) ؛

شناور yPos = 90 + (sin (درجه) * شعاع) ؛

// 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) ؛

تاخیر (timingDelay) ؛

if (degStart> = degEnd) {

degStart = 0؛

if (degGap> 180)

degGap = 180؛

// degGap = 0؛

دیگری

degGap = degGap + 2؛

degGap = degGap - 2 ؛

// degStart = degStart +degGap؛

}

degStart = degStart + degGap؛

}

void spin4 () {

برای (int i = 0؛ i <= 360؛ i ++) {

شناور j = 20 * (cos ((3.14 * i)/180)) + 90 ؛

شناور k = 20 * (گناه ((3.14 * i)/180)) + 90 ؛

myservo1.write (j)؛

myservo2.write (k)؛

Serial.print (j)؛

Serial.print ("،") ؛

Serial.println (k)؛

تأخیر (100) ؛

}

}

توصیه شده: