Агуулгын хүснэгт:
- Алхам 1: Суурь ба нугастай малгай хийх
- Алхам 2: Servo гараа урт болгоод Servo хавсаргана уу
- Алхам 3: Sketch -ийг ачаалж ажиллуулна уу
Видео: Arduino ба нэг Servo бүхий автомат бөмбөг өнхрөх: 3 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:00
Энэ бол дуусгахад хоёр цаг орчим хугацаа шаардагдах энгийн жижиг Arduino болон servo төсөл юм. Ган бөмбөгийг дотор тойруулан эргүүлэхийн тулд савны тагны нэг үзүүрийг өргөхдөө servo ашигладаг. Энэ нь өөрөө эхэлдэг, хурдыг өөрчилж, хоёр (эсвэл түүнээс дээш) бөмбөгийг нэгэн зэрэг эргүүлж чаддаг. Барих, ажил хийх нь хөгжилтэй байдаг. Хугацааны параметрүүдийг илүү хурдтай тоглуулах боломжтой. Соронзон бөмбөлөг бүхий хэд хэдэн танхимын эффект мэдрэгчийг ашиглан хамгийн сайн параметрүүдийг олох чадвартай ухаалаг машин болгон ашиглаж болно.
Instructables.com дээр байгаа хэн нэгэн илүү боловсронгуй бөмбөг булны машинтай болохыг би дурдах ёстой:
Шаардлагатай материал:
Arduino Uno (эсвэл ямар ч Arduino)
Servo бамбай (заавал биш)
9 гр servo
савны таг
ган бөмбөг
зарим хаягдал мод
Алхам 1: Суурь ба нугастай малгай хийх
Суурь нь нугастай модон хэсгийг бэхлэх зориулалттай мод юм. Нугастай мод нь ашиглах савны тагнаас том хэмжээтэй байх ёстой бөгөөд нугас болон servo -ийг холбох хангалттай зайтай байх ёстой.
Би жижиг хуванцар rc нисэх онгоцны нугас ашиглаж, нугастай мод, сууринд наасан.
Алхам 2: Servo гараа урт болгоод Servo хавсаргана уу
Урт servo гар хийхийн тулд би 5 сантиметр хэмжээтэй модыг хэд хэдэн жижиг эрэг, самар ашиглан servo гарт хавсаргасан. Серво гар нь суурин дээр хэвтээ байх үед servo дээр 90 градус байх ёстой.
Би зүгээр л servo -ийг нугастай мод эзэмшигчид халуунаар наасан боловч хэрэв та үүнийг хэдэн минутаас илүү удаан ажиллуулах юм бол серво халуун цавууг халааж, модноос гарах болно гэдгийг олж мэдэв. Тиймээс илүү сайн бэхэлгээний аргыг батлах болно.
Алхам 3: Sketch -ийг ачаалж ажиллуулна уу
Би servo -оо бамбай ашиглан 7 -р зүүгээр холбосон, учир нь энэ нь маш тохиромжтой бөгөөд хэдхэн долларын үнэтэй. Хэрэв танд бамбай байхгүй бол Arduino дээрх 7 -р зүү, улаан утсыг 5v -т, улаан утсыг Arduino дээрх GND -д холбоно. Arduino нь servo -ийг ажиллуулах хангалттай гүйдэл өгөх ёстой. Гадаа хүчдэлийг зөвхөн сервод ашиглахад хялбар байдаг тул би бамбайгаа ашигладаг.
Энд ноорог байна. Би servo хурдны хянагчийн горимыг бичсэн бөгөөд энэ нь servo -ийн хурдыг өөрчлөх болно, учир нь энэ нь бүрэн хурдтай ажиллахгүй байж магадгүй юм.
Бөмбөгийг өнхрүүлэх янз бүрийн хурдыг авахын тулд хойшлуулах хугацааг өөрчилж болно. Та мөн myServo () функцын гурав дахь параметрийг өөрчилж, хурдыг нь өөрчилж болно.
///////////////////////////////////////////////////// ///////////////////////////////////////////////////// /////////////// // Жим Демелло бүтээсэн, Shangluo их сургууль, 2017 он
// та энэ кодоор хүссэн зүйлээ ашиглах, удирдах, хийх эрх чөлөөтэй, миний нэрийг оруулах шаардлагагүй
// Энэхүү журам нь ямар ч тооны servo -ийг интерполяцлах боломжийг олгодог бөгөөд хэрэв servo -ийн тоо 4 -ээс хэтэрсэн бол шинэ мөрүүдийг нэмж оруулаарай.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#оруулах
Servo myservo1, myservo2; // servo хянахын тулд servo объект үүсгэх
int servoRead (int servoNumber) {
int servoCurrent;
if (servoNumber == 1) {servoCurrent = myservo1.read (); }
if (servoNumber == 2) {servoCurrent = myservo2.read (); }
буцах servoCurrent;
}
void servoWrite (int servoNumber, int офсет) {
if (servoNumber == 1) {myservo1.write (офсет); }
if (servoNumber == 2) {myservo2.write (офсет); }
}
хүчингүй 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 өнцөг = curAngle; өнцөг <newAngle; өнцөг += өнцөгInc) {
if (servoNum == 1) myservo1.write (өнцөг);
if (servoNum == 2) myservo2.write (өнцөг);
саатал (хойшлуулах); }
}
өөр бол (curAngle> newAngle) {
for (int angle = curAngle; angle> newAngle; angle -= angleInc) {
if (servoNum == 1) myservo1.write (өнцөг);
if (servoNum == 2) myservo2.write (өнцөг);
саатал (хойшлуулах); }
}
}
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 ба одоогийн"); 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;
for (int x = 0; x
if (servo1Position> servo1Current) {cOffsetTotal = cOffsetTotal + cOffset; }
өөр {cOffsetTotal = cOffsetTotal - cOffset; }
if (servo2Position> servo2Current) {dOffsetTotal = dOffsetTotal + dOffset; }
өөр {dOffsetTotal = dOffsetTotal - dOffset; }
if (servo1Position! = servo1Current) servoWrite (servo1, cOffsetTotal);
if (servo2Position! = servo2Current) servoWrite (servo2, dOffsetTotal);
// Serial.print ("a ба b офсет"); Serial.print (aOffsetTotal); Serial.print (""); Serial.println (bOffsetTotal); саатал (10);
саатал (цаг хойшлуулах);
} // төгсгөл
//////////////////////////////////////
// модулийн үлдэгдлийг анхаарч үзээрэй //
/////////////////////////////////////
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;
хүчингүй тохиргоо ()
{
Цуваа эхлэх (9600);
саатал (100);
myservo1.attach (7); // 7 -р зүү дээрх servo -ийг servo объект руу хавсаргана
myservo1.write (90);
myservo2.attach (8); // 8 -р зүү дээрх servo -ийг servo объект руу хавсаргана
myservo2.write (90);
саатал (1000); // servo тийшээ очихыг хүлээж байна
interpolate2Servos (1, 90, 2, 90, 10, 60); // төвийг сахисан
саатал (1000);
}
void loop () {
timingDelay = 15; // 10 цагт ажилладаг
servoDelay = 4;
эргэх4 ();
// interpolate2Servos (1, 90, 2, 90, 1, 60); // төвийг сахисан
// саатал (1000);
// гарах (0); // програмыг түр зогсоох - үргэлжлүүлэхийн тулд дахин тохируулах дээр дарна уу
}
void spin3 () {
interpolate2Servos (1, 90, 2, 110, 1, 60); // төвийг сахисан
саатал (цагийг хойшлуулах);
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); // градусыг радиан болгон хөрвүүлэх
float xPos = 90 + (cos (deg) * radius);
// xPos = дугуй (xPos);
float yPos = 90 + (sin (deg) * radius);
// 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 ="); Цуваа. println (yPos);
// interpolate2Servos (1, xPos, 2, yPos, 1, servoDelay); // төвийг сахисан
myservo1.write (xPos);
myservo2.write (yPos);
саатал (timingDelay);
хэрэв (degStart> = degEnd) {
degStart = 0;
хэрэв (degGap> 180)
degGap = 180;
// degGap = 0;
өөр
degGap = degGap + 2;
degGap = degGap - 2;
// degStart = degStart +degGap;
}
degStart = degStart + degGap;
}
void spin4 () {
for (int i = 0; i <= 360; i ++) {
float j = 20 * (cos ((3.14 * i)/180)) + 90;
float k = 20 * (sin ((3.14 * i)/180)) + 90;
myservo1. бичих (j);
myservo2. бичих (k);
Цуваа.хэвлэх (j);
Serial.print (",");
Serial.println (k);
саатал (100);
}
}
Зөвлөмж болгож буй:
Бяцхан бөмбөг тоглох автомат оноо: 10 алхам (зурагтай)
Бяцхан бөмбөг тоглох автомат оноо: Гэртээ хийсэн Skee-Ball тоглоом нь бүхэл бүтэн гэр бүлд маш их хөгжилтэй байдаг ч тэдний дутагдал нь үргэлж автомат оноо аваагүй явдал юм. Би өмнө нь тоглоомын бөмбөгийг тус тусад нь суваг болгон юүлдэг Skee-Ball машин бүтээсэн
UC -тай унтраах түгжээний хэлхээ. Нэг товчлуур. Нэг зүү. Тусдаа бүрэлдэхүүн хэсэг: 5 алхам
UC -тай унтраах түгжээний хэлхээ. Нэг товчлуур. Нэг зүү. Салангид бүрэлдэхүүн хэсэг: Сайн байцгаана уу, сүлжээнд асаах/унтраах хэлхээг хайж байсан. Миний олсон бүхэн миний хайж байсан зүйл биш байсан. Би өөртэйгөө ярьж байсан, үүнд хүрэх арга зам заавал байх ёстой. Энэ л надад хэрэгтэй байсан. -Асгах, унтраахад ганц товчлуур дарна. -Зөвхөн ашиглах ёстой
Нохойнд зориулсан автомат бөмбөг шидэгч: 6 алхам
Нохойнд зориулсан автомат бөмбөг шидэгч: Бид хоёулаа нохойтой бөгөөд хүн бүр мэддэг шиг нохой өдөржингөө бөмбөг тоглож чаддаг байв. Тийм учраас бид автомат бөмбөг шидэгчийг бүтээх арга замыг бодож олсон
Гэрийн тэжээвэр амьтдын хоол шидэх (нохой, муур, тахиа, гэх мэт), бөмбөг шидэх гэх мэт автомат катапульт: 4 алхам (зурагтай)
Гэрийн тэжээмэл амьтдын хоол шидэх автомат нохой (нохой, муур, тахиа, гэх мэт), бөмбөг шидэх гэх мэт !: Сайн байна уу, миний анхны зааварчилгаанд тавтай морилно уу! Манай нохой хоолондоо дуртай, тэр бүгдийг хэдхэн секундын дотор идэх болно. Би үүнийг удаашруулах арга замыг бодож олсон бөгөөд дотор нь хоол орсон бөмбөгнөөс эхлээд арын хашаанд хаях хүртэл байсан. Гайхалтай нь тэр
(Нэг удаа ашигласан) нэг удаагийн камерын гэрэл хийх: 3 алхам
Нэг удаагийн камерын флаш хийх Энэ нь зураг авах үед хийсэн флэшийг дуурайлган хийжээ. Энэ бол маш энгийн бөгөөд маш гэрэл гэгээтэй зүйл юм.Танд ямар зориулалтаар ашиглахыг би мэдэхгүй, гэхдээ бүү асаагаарай