Mundarija:
- 1 -qadam: Asosiy va menteşeli qopqoq ushlagichini yarating
- 2 -qadam: Servo qo'lini uzunroq qiling va servo ulang
- 3 -qadam: Sketchni yuklang va ishga tushiring
Video: Arduino va bitta servo bilan avtomatlashtirilgan to'p rulosi: 3 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:23
Bu oddiy Arduino va servo loyihasi bo'lib, uni bajarish uchun taxminan ikki soat vaqt ketadi. Po'lat to'pni ichki aylana bo'ylab aylantirish uchun kavanoz qopqog'ining bir uchini ko'tarish uchun servo ishlatiladi. U o'z -o'zidan boshlanadi, tezlikni o'zgartirishi mumkin va bir vaqtning o'zida ikkita (yoki undan ko'p) to'pni aylantira oladi. Qurilish va ishlash qiziqarli. Vaqt parametrlarini, ehtimol undan ham yuqori tezlikda o'ynash mumkin. Eng yaxshi parametrlarni aniqlay oladigan aqlli mashinaga aylantirish uchun magnit to'pli bir nechta zal effektli datchiklardan foydalanish mumkin.
Shuni eslatib o'tmoqchimanki, Instructables.com saytida kimdir murakkab rollarda mashinasi bor:
Kerakli materiallar:
Arduino Uno (yoki har qanday Arduino)
Servo qalqoni (ixtiyoriy)
9 g servo
kavanoz qopqog'i
po'lat to'p
ba'zi yog'och qoldiqlari
1 -qadam: Asosiy va menteşeli qopqoq ushlagichini yarating
Baza - bu yog'ochdan yasalgan yog'ochdan yasalgan yog'och bo'lakni o'rnatish uchun. Menteşeli yog'och siz ishlatadigan kavanoz qopqog'idan kattaroq bo'lishi kerak va menteşe va servo o'rnatish uchun etarli joy bo'lishi kerak.
Men kichik plastmassadan yasalgan samolyot menteşelerinden foydalanardim va ularni faqat yog'och va tayanchga mahkam yopishtirdim.
2 -qadam: Servo qo'lini uzunroq qiling va servo ulang
Uzunroq servo qo'lni yasash uchun men 5 santimetrli yog'ochni servo bilagiga bir nechta mayda vint va yong'oq bilan bog'lab qo'ydim. Servo qo'li tayanchga gorizontal holatda bo'lsa, servoda 90 daraja bo'lishi kerak.
Men servoni ilingan yog'och ushlagichga issiq yopishtirdim, lekin shuni aniqladimki, agar siz uni bir necha daqiqadan ko'proq ishlashiga ruxsat bersangiz, servo issiq elimni qizdiradi va o'tinni tashlab yuboradi. Shunday qilib, yaxshiroq biriktirish usuli kafolatlanadi.
3 -qadam: Sketchni yuklang va ishga tushiring
Men servoimni 7 -pinga qalqon yordamida biriktirdim, chunki bu qulay va ular atigi bir necha dollar turadi. Agar sizda qalqon bo'lmasa, Arduino -dagi 7 -pinli servo signal simini, qizil simni Arduino -dagi 5v -ga va er simini Arduino -dagi GND -ga ulang. Arduino servo bilan ishlash uchun etarlicha oqim berishi kerak. Men qalqondan foydalanaman, chunki tashqi kuchlanishni faqat servo uchun ishlatish oson.
Mana eskiz. Men servo tezligini o'zgartirish uchun servo tezlikni nazorat qilish tartibini yozdim, chunki u to'liq tezlikda yaxshi ishlamaydi.
Vaqtni o'zgartirish mumkin, kechikish har xil tezlikda aylanish uchun. Shuningdek, tezlikni o'zgartirish uchun myServo () funktsiyasining uchinchi parametrini o'zgartirishingiz mumkin.
/ / ////////////// // Jim Demello tomonidan yaratilgan, Shangluo universiteti, 2017
// siz ushbu kod yordamida xohlagan narsani ishlatishingiz, boshqarishingiz, erkin qilishingiz mumkin, mening ismim shart emas
// Bu tartib har qanday sonli servolarni interpolatsiyalashga imkon beradi, agar servolar soni 4 tadan oshsa, yangi qatorlarni qo'shing.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#qo'shing
Servo myservo1, myservo2; // servoni boshqarish uchun servo ob'ekt yaratish
int servoRead (int servoNumber) {
int servoCurrent;
agar (servoNumber == 1) {servoCurrent = myservo1.read (); }
agar (servoNumber == 2) {servoCurrent = myservo2.read (); }
qaytish servoCurrent;
}
bekor servoWrite (int servoNumber, int ofset) {
agar (servoNumber == 1) {myservo1.write (ofset); }
agar (servoNumber == 2) {myservo2.write (ofset); }
}
vys myServo (int newAngle, int angleInc, int incDelay, int servoNum) {
int curAngle;
agar (servoNum == 1) {curAngle = myservo1.read (); }
agar (servoNum == 2) {curAngle = myservo2.read (); }
agar (curAngle <newAngle) {
uchun (int burchak = curAngle; burchak <newAngle; burchak += burchakInc) {
if (servoNum == 1) myservo1.write (burchak);
agar (servoNum == 2) myservo2.write (burchak);
kechikish (kechikish); }
}
aks holda (curAngle> newAngle) {
uchun (int burchak = curAngle; burchak> yangiAngle; burchak -= burchakInc) {
if (servoNum == 1) myservo1.write (burchak);
agar (servoNum == 2) myservo2.write (burchak);
kechikish (kechikish); }
}
}
void interpolate2Servos (int servo1, int servo1Position, int servo2, int servo2 pozitsiyasi, int numberSteps, int timeDelay) {
int servo1Current, servo2Current;
servo1Current = servoRead (servo1);
servo2Current = servoRead (servo2);
// Serial.print ("Servo3Pos va joriy"); Serial.print (servo3Position); Serial.print (""); Serial.println (servo3Current);
// Serial.print ("Servo4Pos va joriy"); Serial.print (servo4Position); Serial.print (""); Serial.println (servo4Current);
// Serial.print ("Servo5Pos va joriy"); Serial.print (servo5Position); Serial.print (""); Serial.println (servo5Current);
// Serial.print ("Servo6Pos va joriy"); 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;
uchun (int x = 0; x
if (servo1Position> servo1Current) {cOffsetTotal = cOffsetTotal + cOffset; }
boshqa {cOffsetTotal = cOffsetTotal - cOffset; }
agar (servo2Position> servo2Current) {dOffsetTotal = dOffsetTotal + dOffset; }
boshqa {dOffsetTotal = dOffsetTotal - dOffset; }
if (servo1Position! = servo1Current) servoWrite (servo1, cOffsetTotal);
agar (servo2Position! = servo2Current) servoWrite (servo2, dOffsetTotal);
// Serial.print ("a va b ofset"); Serial.print (aOffsetTotal); Serial.print (""); Serial.println (bOffsetTotal); kechikish (10);
kechikish (timeDelay);
} // uchun tugatish
//////////////////////////////////////
// modul qoldiqlariga g'amxo'rlik qiling //
/////////////////////////////////////
if (servo1Position! = servo1Current) servoWrite (servo1, servo1Position);
if (servo2Position! = servo2Current) servoWrite (servo2, servo2Position);
}
int timingDelay = 100;
int servoDelay = 100;
int degGap = 10;
// Bu boshlang'ich daraja (oxirgi darajadan past bo'lishi kerak)
int degStart = 0;
// Bu tugatish darajalari (boshlang'ich darajadan katta bo'lishi kerak)
int degEnd = 360;
// Bu aylana radiusi
int radiusi = 8;
bo'sh o'rnatish ()
{
Serial.begin (9600);
kechikish (100);
myservo1.attach (7); // servo moslamaga 7 -pinli servo biriktiriladi
myservo1.write (90);
myservo2.attach (8); // servo moslamaga 8 -pinli servo biriktiriladi
myservo2.write (90);
kechikish (1000); // servoning u erga kelishini kutadi
interpolate2Servos (1, 90, 2, 90, 10, 60); // neytral
kechikish (1000);
}
void loop () {
timingDelay = 15; // soat 10 da ishlaydi
servoDelay = 4;
spin4 ();
// interpolate2Servos (1, 90, 2, 90, 1, 60); // neytral
// kechikish (1000);
// chiqish (0); // dasturni to'xtatib turish - davom etish uchun reset tugmasini bosing
}
void spin3 () {
interpolate2Servos (1, 90, 2, 110, 1, 60); // neytral
kechikish (vaqtni kechiktirish);
interpolate2Servos (1, 90, 2, 80, 1, 60); // neytral
kechikish (vaqtni kechiktirish);
}
void spin2 () {
// interpolate2Servos (1, 80, 2, 90, 1, 50); // neytral
kechikish (vaqtni kechiktirish);
interpolate2Servos (1, 80, 2, 80, 1, 60); // neytral
kechikish (vaqtni kechiktirish);
interpolate2Servos (1, 110, 2, 80, 1, 60); // neytral
kechikish (vaqtni kechiktirish);
// interpolate2Servos (1, 110, 2, 110, 1, 60); // neytral
kechikish (vaqtni kechiktirish);
}
void spin1 () {
// int deg = (degStart / (180 / 3.14));
float deg = (degStart * 3.141592 / 180); // darajalarni radianlarga aylantirish
float xPos = 90 + (cos (deg) * radiusi);
// xPos = dumaloq (xPos);
float yPos = 90 + (sin (deg) * radiusi);
// yPos = dumaloq (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); // neytral
myservo1.write (xPos);
myservo2.write (yPos);
kechikish (vaqtni kechiktirish);
agar (degStart> = degEnd) {
degStart = 0;
agar (degGap> 180)
degGap = 180;
// degGap = 0;
boshqa
degGap = degGap + 2;
degGap = degGap - 2;
// degStart = degStart +degGap;
}
degStart = degStart + degGap;
}
void spin4 () {
uchun (int i = 0; i <= 360; i ++) {
float j = 20 * (cos ((3.14 * i)/180)) + 90;
float k = 20 * (gunoh ((3.14 * i)/180)) + 90;
myservo1.write (j);
myservo2.write (k);
Ketma -ket chop etish (j);
Serial.print (",");
Serial.println (k);
kechikish (100);
}
}
Tavsiya:
Asosiy parametrlarni avtomatlashtirilgan boshqarish bilan akvarium dizayni: 4 qadam (rasmlar bilan)
Asosiy parametrlarni avtomatlashtirilgan boshqarish bilan akvarium dizayni: Kirish Bugun dengiz akvariumiga g'amxo'rlik qilish har bir akvarist uchun mavjud. Akvarium sotib olish muammosi qiyin emas. Ammo aholining to'liq hayotini ta'minlash, texnik nosozliklardan himoya qilish, oson va tez parvarishlash va parvarish qilish uchun
R/C tualet qog'ozi rulosi: 10 qadam
R/C tualet qog'ozi rulosi: Tualet qog'ozi vahimasidan 2019 yil oldin, men Battlebots va o'z botimni yaratishga qiziqib qoldim …. Buning natijasi! Iltimos, diqqat qiling: bu elektronika darsligi emas/men ham emasman Bu qanday ishlashini batafsil ko'rib chiqmoqchiman, bu juda qiyin edi, lekin u erda
IoT APIS V2 - avtomatlashtirilgan o'simliklarni sug'orish avtomatlashtirilgan tizimi: 17 qadam (rasmlar bilan)
IoT APIS V2 - Avtomatik o'simliklarni sug'orish IoT tizimi: Bu loyiha mening oldingi ko'rsatmalarimning evolyutsiyasi: APIS - O'simliklarni sug'orishning avtomatlashtirilgan tizimi Men deyarli bir yildan buyon APISdan foydalanmoqdaman va oldingi dizaynni yaxshilashni xohladim. zavodni masofadan turib kuzatib boring. Mana shunday
Avtomatlashtirilgan uy pardalari - MakerChips BluChip (nRF51 BLE) moduli bilan mini loyiha: 7 qadam (rasmlar bilan)
Avtomatlashtirilgan uy pardalari - MakerChips BluChip (nRF51 BLE) moduli bilan mini -loyiha: Uyg'onganingizni va derazalaringizdan quyosh nurini olishni xohlayotganingizni yoki pardalaringizni yopganingizni tasavvur qiling, shunda siz o'zingizni yaqinlashtirishga harakat qilmay uxlaysiz. pardalarga, aksincha, smartfondagi tugmani bosish bilan
Uzluksiz aylanish uchun servo dvigatelni qanday o'zgartirish mumkin (bitta motorli yuruvchi robot): 8 qadam (rasmlar bilan)
Uzluksiz aylanish uchun servo dvigatelni qanday o'zgartirish mumkin (bitta motorli yuruvchi robot): Bu ko'rsatma bitta motorli yurishning bir qismidir. Walker/Bu kabi trillionlab darsliklar bor, men bilaman :-) Ular Sony Mavica kamerasi bilan tushlik paytida maktabda o'qiydilar