Talaan ng mga Nilalaman:
- Hakbang 1: Gumawa ng Base at Hinged Cap Holder
- Hakbang 2: Gumawa ng Mas Mahabang Servo Arm at Maglakip ng Servo
- Hakbang 3: I-load at Patakbuhin ang Sketch
Video: Automated Ball Roller Sa Arduino at Isang Servo: 3 Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:10
Ito ay isang simpleng maliit na proyekto ng Arduino at servo na tumatagal ng halos dalawang oras upang makumpleto. Gumagamit ito ng isang servo upang maiangat ang isang dulo ng isang takip ng garapon upang paikutin ang isang bola na bakal sa paligid ng bilog sa loob. Nagsisimula ito sa sarili, maaaring baguhin ang bilis at maaaring paikutin ang dalawa (o higit pa?) Na mga bola nang sabay-sabay. Masaya magtayo at makapagtrabaho. Ang mga parameter ng tiyempo ay maaaring i-play para sa marahil kahit na mas mabilis na bilis. Ang ilang mga sensor ng hall effect na may isang magnetikong bola ay maaaring magamit upang gawin itong isang mas matalinong makina na maaaring malaman ang pinakamahusay na mga parameter.
Dapat kong banggitin na ang isang tao dito sa instructables.com ay may isang mas sopistikadong ball roller machine:
Mga materyal na kinakailangan:
Arduino Uno (o anumang Arduino)
Servo Shield (opsyonal)
9g servo
takip ng garapon
metal na bola
ilang mga scrap kahoy
Hakbang 1: Gumawa ng Base at Hinged Cap Holder
Ang base ay isang piraso lamang ng kahoy upang mai-mount ang hinged na piraso ng kahoy. Ang hinged na kahoy ay dapat na mas malaki kaysa sa isang takip ng garapon na gagamitin mo at magkaroon ng sapat na silid para sa mga bisagra at mai-mount ang servo.
Gumamit ako ng maliliit na plastik na rc na mga bisagra ng sasakyang panghimpapawid at ipinatong lamang ito sa hinged na kahoy at sa base.
Hakbang 2: Gumawa ng Mas Mahabang Servo Arm at Maglakip ng Servo
Upang makagawa ng isang mas mahabang braso ng servo ay inilakip ko lamang ang isang 5 sentimetong piraso ng kahoy sa braso ng servo na may isang pares ng maliliit na turnilyo at mani. Ang braso ng servo ay dapat na nasa 90 degree sa servo kapag ito ay pahalang sa base.
Inidikit ko lamang ang servo sa may bisagra na kahoy ngunit nalaman ko na kung hahayaan mo itong tumakbo nang mas mahaba sa ilang minuto, maiinit ng servo ang mainit na pandikit at bitawan mula sa kahoy. Kaya't ang isang mas mahusay na pamamaraan ng pagkakabit ay ginagarantiyahan.
Hakbang 3: I-load at Patakbuhin ang Sketch
Inilagay ko ang aking servo sa pin 7 gamit ang isang kalasag dahil maginhawa lamang ito at kaunting pera lamang ang gastos nila. Kung wala kang isang kalasag pagkatapos ikabit ang servo signal wire upang i-pin ang 7 sa Arduino, ang pulang wire sa 5v sa Arduino at ang ground wire sa GND sa Arduino. Ang arduino ay dapat magbigay ng sapat na kasalukuyang upang mapatakbo ang servo. Gumagamit ako ng kalasag sapagkat madaling gamitin ang isang panlabas na boltahe para lamang sa servo.
Narito ang sketch. Sumulat ako ng isang gawain ng servo speed controller upang mabago ang bilis ng servo dahil malamang na hindi ito gagana nang maayos sa buong bilis.
Maaari mong baguhin ang tiyempoDelay upang makakuha ng iba't ibang mga bilis ng pagliligid ng bola. Maaari mo ring baguhin ang pangatlong parameter ng myServo () na pag-andar upang mabago din ang bilis.
// ///. // ///. // ///
// malaya kang magamit, manipulahin, gawin ang nais mo sa code na ito, hindi kinakailangan ang aking pangalan
// Pinapayagan ng routine na ito ang anumang bilang ng mga servo na ma-interpolate, magdagdag lamang ng mga bagong linya kung ang bilang ng mga servos ay lumampas sa 4
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
# isama
Servo MyServer1, MyServo2; // create servo object upang makontrol ang isang servo
int servoRead (int servoNumber) {
int servoCurrent;
kung (servoNumber == 1) {servoCurrent = myservo1.read (); }
kung (servoNumber == 2) {servoCurrent = myservo2.read (); }
ibalik ang servoCurrent;
}
void servoWrite (int servoNumber, int offset) {
kung (servoNumber == 1) {myservo1.write (offset); }
kung (servoNumber == 2) {myservo2.write (offset); }
}
void myServo (int newAngle, int angleInc, int incDelay, int servoNum) {
int curAngle;
kung (servoNum == 1) {curAngle = myservo1.read (); }
kung (servoNum == 2) {curAngle = myservo2.read (); }
kung (curAngle <newAngle) {
para sa (int anggulo = curAngle; anggulo <newAngle; anggulo + = angguloInc) {
kung (servoNum == 1) myservo1.write (anggulo);
kung (servoNum == 2) myservo2.write (anggulo);
antala (incDelay); }
}
kung hindi man (curAngle> newAngle) {
para sa (int anggulo = curAngle; anggulo> newAngle; anggulo - = angguloInc) {
kung (servoNum == 1) myservo1.write (anggulo);
kung (servoNum == 2) myservo2.write (anggulo);
antala (incDelay); }
}
}
walang bisa interpolate2Servos (int servo1, int servo1Position, int servo2, int servo2Position, int numberStep, int timeDelay) {
int servo1Current, servo2Current;
servo1Current = servoRead (servo1);
servo2Current = servoRead (servo2);
// Serial.print ("Servo3Pos at Kasalukuyan"); Serial.print (servo3Position); Serial.print (""); Serial.println (servo3Current);
// Serial.print ("Servo4Pos at Kasalukuyan"); Serial.print (servo4Position); Serial.print (""); Serial.println (servo4Current);
// Serial.print ("Servo5Pos at Kasalukuyan"); Serial.print (servo5Position); Serial.print (""); Serial.println (servo5Current);
// Serial.print ("Servo6Pos at Kasalukuyan"); Serial.print (servo6Position); Serial.print (""); Serial.println (servo6Current);
// Serial.println ("");
int cOffset = (servo1Position - servo1Current); cOffset = abs (cOffset) / numberStep;
int dOffset = (servo2Position - servo2Current); dOffset = abs (dOffset) / numberStep;
int cOffsetTotal = 0, dOffsetTotal = 0;
cOffsetTotal = servo1Current;
dOffsetTotal = servo2Current;
para sa (int x = 0; x
kung (servo1Position> servo1Current) {cOffsetTotal = cOffsetTotal + cOffset; }
iba pa {cOffsetTotal = cOffsetTotal - cOffset; }
kung (servo2Position> servo2Current) {dOffsetTotal = dOffsetTotal + dOffset; }
iba pa {dOffsetTotal = dOffsetTotal - dOffset; }
kung (servo1Position! = servo1Current) servoWrite (servo1, cOffsetTotal);
kung (servo2Position! = servo2Current) servoWrite (servo2, dOffsetTotal);
// Serial.print ("a at b Offset"); Serial.print (aOffsetTotal); Serial.print (""); Serial.println (bOffsetTotal); antala (10);
antala (timeDelay);
} // pagtatapos para sa
//////////////////////////////////////
// alagaan ang mga natitirang modulo //
/////////////////////////////////////
kung (servo1Position! = servo1Current) servoWrite (servo1, servo1Position);
kung (servo2Position! = servo2Current) servoWrite (servo2, servo2Position);
}
int timingDelay = 100;
int servoDelay = 100;
int degGap = 10;
// Ito ang panimulang degree (dapat mas mababa sa end degree)
int degStart = 0;
// Ito ang mga nagtatapos na degree (dapat mas malaki kaysa sa pagsisimula ng degree)
int degEnd = 360;
// Ito ang bilog na radius
int radius = 8;
walang bisa ang pag-setup ()
{
Serial.begin (9600);
pagkaantala (100);
myservo1.attach (7); // nakakabit ang servo sa pin 7 sa object ng servo
myservo1.write (90);
myservo2.attach (8); // nakakabit ang servo sa pin 8 sa object ng servo
myservo2.write (90);
pagkaantala (1000); // naghihintay para sa servo na makarating doon
interpolate2Servos (1, 90, 2, 90, 10, 60); // walang kinikilingan
pagkaantala (1000);
}
void loop () {
tiyempoDelay = 15; // gumagana sa 10
servoDelay = 4;
paikutin4 ();
// interpolate2Servos (1, 90, 2, 90, 1, 60); // walang kinikilingan
// pagkaantala (1000);
// exit (0); // pause program - hit reset upang magpatuloy
}
walang bisa spin3 () {
interpolate2Servos (1, 90, 2, 110, 1, 60); // walang kinikilingan
antala (tiyempoDelay);
interpolate2Servos (1, 90, 2, 80, 1, 60); // walang kinikilingan
antala (tiyempoDelay);
}
walang bisa spin2 () {
// interpolate2Servos (1, 80, 2, 90, 1, 50); // walang kinikilingan
antala (tiyempoDelay);
interpolate2Servos (1, 80, 2, 80, 1, 60); // walang kinikilingan
antala (tiyempoDelay);
interpolate2Servos (1, 110, 2, 80, 1, 60); // walang kinikilingan
antala (tiyempoDelay);
// interpolate2Servos (1, 110, 2, 110, 1, 60); // walang kinikilingan
antala (tiyempoDelay);
}
walang bisa spin1 () {
// int deg = (degStart / (180 / 3.14));
float deg = (degStart * 3.141592 / 180); // convert degree to radian
float xPos = 90 + (cos (deg) * radius);
// xPos = bilog (xPos);
float yPos = 90 + (sin (deg) * radius);
// yPos = bilog (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 ="); Serial. println (yPos);
// interpolate2Servos (1, xPos, 2, yPos, 1, servoDelay); // walang kinikilingan
myservo1.write (xPos);
myservo2.write (yPos);
antala (tiyempoDelay);
kung (degStart> = degEnd) {
degStart = 0;
kung (degGap> 180)
degGap = 180;
// degGap = 0;
iba pa
degGap = degGap + 2;
degGap = degGap - 2;
// degStart = degStart + degGap;
}
degStart = degStart + degGap;
}
walang bisa spin4 () {
para sa (int i = 0; i <= 360; i ++) {
float j = 20 * (cos ((3.14 * i) / 180)) + 90;
lumutang k = 20 * (kasalanan ((3.14 * i) / 180)) + 90;
myservo1.write (j);
myservo2.write (k);
Serial.print (j);
Serial.print (",");
Serial.println (k);
pagkaantala (100);
}
}
Inirerekumendang:
Isang Halloween Scare Machine Gamit ang isang PIR, isang 3D Printed Pumpkin at ang Troll Arduino Compatible Audio Pranker / practical Joke Board .: 5 Mga Hakbang
Isang Halloween Scare Machine Gamit ang isang PIR, isang 3D Printed Pumpkin at ang Troll Arduino Compatible Audio Pranker / practical Joke Board .: Ang Troll board na nilikha ni Patrick Thomas Mitchell ng EngineeringShock Electronics, at buong pinondohan sa Kickstarter hindi pa masyadong nakakaraan. Nakuha ko ang aking gantimpala ng ilang linggo maaga upang makatulong na sumulat ng ilang mga halimbawa ng paggamit at bumuo ng isang library ng Arduino sa isang pagtatangka
LED Table Tennis Ball-Ball: 16 Hakbang (na may Mga Larawan)
LED Table Tennis Ball-Ball: Backstory Matapos ang pagbuo ng isang patag na panel ng mga bola ng tennis table sa ilang sandali, nagsimula akong magtaka Kung posible na gumawa ng isang 3D panel mula sa mga table tennis ball. Pinagsama sa aking interes sa paggawa ng " art " mula sa umuulit na mga geometric na hugis ko
Pagpili ng isang Hakbang Motor at Driver para sa isang Arduino Automated Shade Screen Project: 12 Hakbang (na may Mga Larawan)
Pagpili ng isang Hakbang Motor at Driver para sa isang Arduino Automated Shade Screen Project: Sa Instructable na ito, dadaan ako sa mga hakbang na kinuha ko upang pumili ng isang Hakbang Motor at Driver para sa isang prototype na proyekto ng Automated Shade Screen. Ang mga shade screen ay ang tanyag at hindi magastos na mga modelo ng cranked na kamay ng Coolaroo, at nais kong palitan ang
Paano Bumuo ng isang CubeSat Sa Isang Arduino Sa Isang Arducam: 9 Mga Hakbang
Paano Bumuo ng isang CubeSat Gamit ang isang Arduino Na May isang Arducam: Sa unang larawan, mayroon kaming isang Arduino at ito ay tinatawag na " Arduino Uno. &Quot; Sa pangalawang larawan, mayroon kaming isang Arducam, at tinawag itong " Arducam OV2640 2MP mini. &Quot; Kasama ang pangalawang larawan, may mga materyales na kakailanganin mo upang
Paano Gumawa ng isang Label Roller: 4 Hakbang
Paano Gumawa ng isang Label Roller: Ang Mga Sumusunod na Hakbang ay ipapakita sa iyo halos kung paano gumawa ng isang roller ng label para sa isang maliit na printer ng label. Nagtatrabaho ako bilang isang Espesyalista sa IT sa isang Laboratoryo at isa sa mga trabaho para sa aming mga kababaihan sa serbisyo sa customer ay upang mai-print ang ilang libong mga label mula sa isang Zebra Label p