Përmbajtje:
- Hapi 1: Bëni mbajtësen e bazës dhe kapakut të varur
- Hapi 2: Bëni krahun më të gjatë servo dhe bashkojeni servo
- Hapi 3: Ngarko dhe Drejto Skicën
Video: Roller i automatizuar i topit me Arduino dhe një servo: 3 hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:10
Ky është një projekt i thjeshtë i vogël Arduino dhe servo që kërkon rreth dy orë për t'u përfunduar. Ai përdor një servo për të hequr një fund të kapakut të kavanozit në mënyrë që të rrotullojë një top çeliku rreth perimetrit të brendshëm. Fillon vetë, mund të ndryshojë shpejtësinë dhe mund të rrotullojë dy (ose më shumë?) Topa në të njëjtën kohë. Argëtuese për të ndërtuar dhe për të punuar. Parametrat e kohës mund të luhen me shpejtësi ndoshta edhe më të larta. Disa sensorë të efektit të sallës me një top magnetik mund të përdoren për ta bërë atë një makinë më të zgjuar që mund të kuptojë parametrat më të mirë.
Duhet të përmend se dikush këtu në instructables.com ka një makinë rrotulluese më të sofistikuar:
Materialet e nevojshme:
Arduino Uno (ose ndonjë Arduino)
Mburoja servo (opsionale)
9g servo
kapak kavanoz
top çeliku
disa dru skrap
Hapi 1: Bëni mbajtësen e bazës dhe kapakut të varur
Baza është vetëm një copë druri për të montuar pjesën e drurit të varur. Druri i varur duhet të jetë më i madh se një kapak kavanoz që do të përdorni dhe të ketë hapësirë të mjaftueshme për menteshat dhe montimin e servo.
Kam përdorur disa varet plastike të avionëve rc dhe i kam ngjitur ato në dru të varur dhe në bazë.
Hapi 2: Bëni krahun më të gjatë servo dhe bashkojeni servo
Për të bërë një krah më të gjatë servo, unë vetëm bashkova një copë druri 5 centimetra në krahun servo me disa vida dhe arra të vogla. Krahu servo duhet të jetë në 90 gradë mbi servo kur është horizontalisht në bazë.
Unë thjesht e ngjita servo në mbajtësen e drurit të varur, por zbulova se nëse e lini të funksionojë për më shumë se disa minuta, servo do të ngrohë ngjitësin e nxehtë dhe do të largohet nga druri. Pra, një metodë më e mirë e bashkëngjitjes është e garantuar.
Hapi 3: Ngarko dhe Drejto Skicën
Unë e bashkova servonin tim me pin 7 duke përdorur një mburojë sepse është thjesht i përshtatshëm dhe kushtojnë vetëm disa dollarë. Nëse nuk keni një mburojë, atëherë lidhni telin e sinjalit servo në pin 7 në Arduino, tela e kuqe në 5v në Arduino dhe tela tokëzues në GND në Arduino. Arduino duhet të sigurojë rrymë të mjaftueshme për të operuar servo. Unë përdor mburojën sepse është e lehtë të përdorësh një tension të jashtëm vetëm për servo.
Këtu është skica. Kam shkruar një rutinë të kontrolluesit të shpejtësisë servo në mënyrë që të ndryshoj shpejtësinë e servo sepse ndoshta nuk do të funksionojë mirë me shpejtësi të plotë.
Ju mund të ndryshoni vonesën e kohës për të marrë shpejtësi të ndryshme të rrotullimit të topit. Ju gjithashtu mund të ndryshoni parametrin e tretë të funksionit myServo () për të ndryshuar gjithashtu shpejtësinë.
/////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////// /////////////// // krijuar nga Jim Demello, Universiteti Shangluo, 2017
// ju jeni të lirë të përdorni, manipuloni, bëni çfarë të doni me këtë kod, emri im nuk kërkohet
// Kjo rutinë lejon që çdo numër servos të interpolohen, thjesht shtoni rreshta të rinj nëse numri i servove tejkalon 4
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#përfshi
Servo myservo1, myservo2; // krijoni një servo objekt për të kontrolluar një servo
int servoRead (int servoNumber) {
int servoCurrent;
if (servoNumber == 1) {servoCurrent = myservo1.read (); }
if (servoNumber == 2) {servoCurrent = myservo2.read (); }
kthimi servoCurrent;
}
void servoWrite (int servoNumber, int offset) {
if (servoNumber == 1) {myservo1.vrite (offset); }
if (servoNumber == 2) {myservo2.write (offset); }
}
void myServo (int newAngle, int angleInc, int incVonesë, int servoNum) {
int curAngle;
if (servoNum == 1) {curAngle = myservo1.read (); }
if (servoNum == 2) {curAngle = myservo2.read (); }
nëse (curAngle <newAngle) {
për (int angle = curAngle; angle <newAngle; angle += angleInc) {
nëse (servoNum == 1) myservo1.shkruaj (këndi);
nëse (servoNum == 2) myservo2.shkruaj (këndi);
vonesë (me vonesë); }
}
tjetër nëse (curAngle> newAngle) {
për (int angle = curAngle; angle> newAngle; angle -= angleInc) {
nëse (servoNum == 1) myservo1.shkruaj (këndi);
nëse (servoNum == 2) myservo2.shkruaj (këndi);
vonesë (me vonesë); }
}
}
void interpolate2Servos (int servo1, int servo1Pozicioni, int servo2, int servo2Pozicioni, numri int Hapat, int koha Vonesa) {
int servo1Current, servo2Current;
servo1Current = servoRead (servo1);
servo2Current = servoRead (servo2);
// Serial.print ("Servo3Pos dhe aktuale"); Serial.print (servo3Position); Serial.print (""); Serial.println (servo3Current);
// Serial.print ("Servo4Pos dhe aktuale"); Serial.print (servo4Position); Serial.print (""); Serial.println (servo4Current);
// Serial.print ("Servo5Pos dhe aktuale"); Serial.print (servo5Position); Serial.print (""); Serial.println (servo5Current);
// Serial.print ("Servo6Pos dhe aktuale"); Serial.print (servo6Position); Serial.print (""); Serial.println (servo6Current);
// Serial.println ("");
int cOffset = (servo1Position - servo1Current); cOffset = abs (cOffset)/numberHapa;
int dOffset = (servo2Position - servo2Current); dOffset = abs (dOffset)/numberHapat;
int cOffsetTotal = 0, dOffsetTotal = 0;
cOffsetTotal = servo1Current;
dOffsetTotal = servo2Current;
për (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 dhe b Offset"); Serial.print (aOffsetTotal); Serial.print (""); Serial.println (bOffsetTotal); vonesa (10);
vonesa (vonesa në kohë);
} // fund për
//////////////////////////////////////
// kujdesuni për mbetjet modulo //
/////////////////////////////////////
if (servo1Position! = servo1Current) servoWrite (servo1, servo1Position);
if (servo2Position! = servo2Current) servoWrite (servo2, servo2Position);
}
int timingVonesa = 100;
int servoVonesa = 100;
int degGap = 10;
// Kjo është shkalla fillestare (duhet të jetë më pak se shkalla përfundimtare)
int degStart = 0;
// Kjo është shkalla e përfundimit (duhet të jetë më e madhe se shkalla e fillimit)
int degEnd = 360;
// Kjo është rrezja e rrethit
rreze int = 8;
void setup ()
{
Serial.filloj (9600);
vonesë (100);
myservo1.tach (7); // i bashkon servo -në pin 7 me objektin servo
myservo1.shkruaj (90);
myservo2.attach (8); // bashkon servo në pin 8 me objektin servo
myservo2.shkruaj (90);
vonesa (1000); // pret që servo të arrijë atje
interpolate2Servos (1, 90, 2, 90, 10, 60); // neutrale
vonesa (1000);
}
lak void () {
kohaVonesë = 15; // punon në 10
servoVonesa = 4;
spin4 ();
// interpolate2Servos (1, 90, 2, 90, 1, 60); // neutrale
// vonesa (1000);
// dalje (0); // program pauzë - shtyp rivendosjen për të vazhduar
}
void spin3 () {
interpolate2Servos (1, 90, 2, 110, 1, 60); // neutrale
vonesa (vonesa në kohë);
interpolate2Servos (1, 90, 2, 80, 1, 60); // neutrale
vonesa (vonesa në kohë);
}
void spin2 () {
// interpolate2Servos (1, 80, 2, 90, 1, 50); // neutrale
vonesa (vonesa në kohë);
interpolate2Servos (1, 80, 2, 80, 1, 60); // neutrale
vonesa (vonesa në kohë);
interpolate2Servos (1, 110, 2, 80, 1, 60); // neutrale
vonesa (vonesa në kohë);
// interpolate2Servos (1, 110, 2, 110, 1, 60); // neutrale
vonesa (vonesa në kohë);
}
void spin1 () {
// int deg = (degStart / (180 / 3.14));
noton deg = (degStart * 3.141592 / 180); // konvertoni gradë në radian
noton xPos = 90 + (cos (deg) * rreze);
// xPos = rrumbullak (xPos);
noton yPos = 90 + (sin (deg) * rreze);
// yPos = rrumbullak (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, servoVonesë); // neutrale
myservo1.shkruaj (xPos);
myservo2.shkruaj (yPos);
vonesa (vonesa në kohë);
nëse (degStart> = degEnd) {
degStart = 0;
nëse (degGap> 180)
degGap = 180;
// degGap = 0;
tjeter
degGap = degGap + 2;
degGap = degGap - 2;
// degStart = degStart +degGap;
}
degStart = degStart + degGap;
}
void spin4 () {
për (int i = 0; i <= 360; i ++) {
noton j = 20 * (cos ((3.14 * i)/180)) + 90;
noton k = 20 * (mëkati ((3.14 * i)/180)) + 90;
myservo1.shkruaj (j);
myservo2.shkruaj (k);
Serial.print (j);
Serial.print (",");
Serial.println (k);
vonesë (100);
}
}
Recommended:
Pingo: një lëshues i topit të zbulimit të lëvizjes dhe një saktësi të lartë: 8 hapa
Pingo: një lëshues i topit të zbulimit të lëvizjes dhe një saktësi të lartë: Kevin Nitiema, Esteban Poveda, Anthony Mattacchione, Raphael Kay
Një makinë për frikësimin e Halloween -it duke përdorur një PIR, një kungull të printuar në 3D dhe një Pranker audio të pajtueshme me Troll Arduino/Bordi praktik i Shakasë.: 5 Hapa
Një makinë për frikësimin e Halloween -it duke përdorur një PIR, një kungull të printuar në 3D dhe Tran Arduino Compatible Audio Pranker/Joke Board praktike .: Bordi Troll i krijuar nga Patrick Thomas Mitchell i EngineeringShock Electronics, dhe u financua plotësisht në Kickstarter jo shumë kohë më parë. Unë mora shpërblimin disa javë më parë për të ndihmuar në shkrimin e disa shembujve të përdorimit dhe ndërtimin e një biblioteke Arduino në një përpjekje
Përzgjedhja e një motori hapës dhe një drejtuesi për një projekt me ekran me hije të automatizuar Arduino: 12 hapa (me fotografi)
Përzgjedhja e një hapi motorik dhe një drejtuesi për një projekt me ekran me hije të automatizuar Arduino: Në këtë Udhëzues, unë do të kaloj hapat që kam ndërmarrë për të zgjedhur një Step Motor dhe Driver për një prototip të projektit Automated Shade Screen. Ekranet me hije janë modelet e njohura dhe të lira të Coolaroo të fiksuara me dorë, dhe unë doja të zëvendësoja t
Ora e Topit Trofe duke përdorur Servo: 18 hapa
Ora e Topit Trofe duke përdorur Servo: Ora vjen në të gjitha format. Por unë dua të bëj një orë të re në formë sfere, ku dora e minutës së thirrjes është gjysma e poshtme e sferës dhe dora e orëve është gjysma e sipërme e sferës. Para së gjithash mendoni të konvertoni orën normale. Por ndërsa minutat lëvizin orë
Ndërtoni një Arduino në një Nissan Qashqai për të automatizuar palosjen e pasqyrës së krahut ose ndonjë gjë tjetër: 9 hapa (me fotografi)
Ndërtoni një Arduino në një Nissan Qashqai për të automatizuar palosjen e pasqyrës së krahut ose ndonjë gjë tjetër: Nissan Qashqai J10 ka disa gjëra pak të bezdisshme në lidhje me kontrollet që mund të jenë lehtësisht më të mira. Njëra prej tyre është të mbani mend të shtyni çelësin e hapjes/mbylljes së pasqyrave para se të hiqni çelësin nga ndezja. Një tjetër është konfigurimi i vogël