Sadržaj:
- Korak 1: Napravite držač baze i zglobne kape
- Korak 2: Produžite servo polugu i pričvrstite servo
- Korak 3: Učitajte i pokrenite skicu
Video: Automatizirani kuglični valjak s Arduinom i jednim servom: 3 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:32
Ovo je jednostavan mali Arduino i servo projekt koji traje oko dva sata. Koristi servo za podizanje jednog kraja poklopca staklenke kako bi okrenuo čeličnu kuglu oko unutarnjeg opsega. Samostalno se pokreće, može mijenjati brzinu i može okretati dvije (ili više?) Loptica odjednom. Zabavno graditi i raditi. Parametri vremena mogu se igrati za vjerojatno još veće brzine. Nekoliko senzora Hall učinka s magnetskom kuglom moglo bi se upotrijebiti da bude pametniji stroj koji može pronaći najbolje parametre.
Trebao bih napomenuti da netko ovdje na stranici instructables.com ima sofisticiraniji stroj za valjke za kuglice:
Potrebni materijali:
Arduino Uno (ili bilo koji Arduino)
Servo štit (opcionalno)
9 g servo
čep od staklenke
čelična kugla
malo starog drveta
Korak 1: Napravite držač baze i zglobne kape
Baza je samo komad drveta na koji se može montirati zglobni komad drveta. Drvo na šarkama treba biti veće od čepa staklenke koji ćete koristiti i imati dovoljno mjesta za šarke i za postavljanje servo pogona.
Koristio sam male plastične rc šarke za zrakoplove i samo ih vruće zalijepio na šarkama drvo i podnožje.
Korak 2: Produžite servo polugu i pričvrstite servo
Za izradu duljeg servo kraka samo sam pričvrstio komad drva od 5 centimetara na servo krak s nekoliko malih vijaka i matica. Servo krak bi trebao biti na 90 stupnjeva na servo pogonu kada je vodoravan prema podnožju.
Upravo sam vruće zalijepio servo na držač sa šarkama, ali otkrio sam da će, ako ga pustite da radi duže od nekoliko minuta, servo zagrijati vruće ljepilo i otpustiti ga iz drva. Stoga je zajamčena bolja metoda pričvršćivanja.
Korak 3: Učitajte i pokrenite skicu
Priključio sam svoj servo na pin 7 pomoću štita jer je to jednostavno prikladno i koštaju samo nekoliko dolara. Ako nemate štit, priključite žicu servo signala na pin 7 na Arduinu, crvenu žicu na 5v na Arduinu, a žicu za uzemljenje na GND na Arduinu. Arduino bi trebao osigurati dovoljno struje za rad servo -a. Koristim štit jer je jednostavno koristiti vanjski napon samo za servo.
Evo skice. Napisao sam rutinu servo kontrolera brzine kako bih promijenio brzinu serva jer vjerojatno neće raditi dobro pri punoj brzini.
Možete promijeniti timeingDelay da biste dobili različite brzine kotrljanja loptice. Također možete promijeniti treći parametar funkcije myServo () kako biste promijenili i brzinu.
////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// //////////////// // stvorio Jim Demello, Sveučilište Shangluo, 2017
// možete koristiti, manipulirati i raditi što god želite s ovim kodom, moje ime nije potrebno
// Ova rutina omogućuje interpolaciju bilo kojeg broja servo -a, samo dodajte nove retke ako broj servo -a prelazi 4
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#uključi
Servo myservo1, myservo2; // izrada servo objekta za upravljanje servo pogonom
int servoRead (int servoNumber) {
int servoTrenutno;
if (broj servo == 1) {servoCurrent = myservo1.read (); }
if (broj serva == 2) {servoCurrent = myservo2.read (); }
povratni servoTrenutni;
}
void servoWrite (int servoBroj, int pomak) {
if (broj serva == 1) {myservo1.write (pomak); }
if (broj serva == 2) {myservo2.write (pomak); }
}
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 (kut);
if (servoNum == 2) myservo2.write (kut);
kašnjenje (incDelay); }
}
else if (curAngle> newAngle) {
for (int angle = curAngle; angle> newAngle; angle -= angleInc) {
if (servoNum == 1) myservo1.write (kut);
if (servoNum == 2) myservo2.write (kut);
kašnjenje (incDelay); }
}
}
void interpolate2Servos (int servo1, int servo1Position, int servo2, int servo2Položaj, int numberSteps, int timeDelay) {
int servo1Tekućina, servo2Trenutno;
servo1Trenutno = servoRead (servo1);
servo2Current = servoRead (servo2);
// Serial.print ("Servo3Pos i struja"); Serial.print (servo3Position); Serial.print (""); Serial.println (servo3Current);
// Serial.print ("Servo4Pos i struja"); Serial.print (servo4Position); Serial.print (""); Serial.println (servo4Current);
// Serial.print ("Servo5Pos i struja"); Serial.print (servo5Position); Serial.print (""); Serial.println (servo5Current);
// Serial.print ("Servo6Pos i struja"); Serial.print (servo6Position); Serial.print (""); Serial.println (servo6Trenutno);
// Serial.println ("");
int cOffset = (servo1Position - servo1Trenutno); cOffset = abs (cOffset)/numberSteps;
int dOffset = (servo2Position - servo2Trenutno); dOffset = abs (dOffset)/numberSteps;
int cOffsetTotal = 0, dOffsetTotal = 0;
cOffsetTotal = servo1Trenutno;
dOffsetTotal = servo2Trenutno;
za (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 ("pomak a i b"); Serial.print (aOffsetTotal); Serial.print (""); Serial.println (bOffsetTotal); kašnjenje (10);
kašnjenje (timeDelay);
} // kraj za
//////////////////////////////////////
// pobrinite se za modulo ostataka //
/////////////////////////////////////
if (servo1Position! = servo1Current) servoWrite (servo1, servo1Position);
if (servo2Position! = servo2Current) servoWrite (servo2, servo2Position);
}
int timingDelay = 100;
int servoDelay = 100;
int degGap = 10;
// Ovo je početni stupanj (mora biti manji od završnog stupnja)
int degStart = 0;
// Ovo su završni stupnjevi (moraju biti veći od početnog stupnja)
int degEnd = 360;
// Ovo je polumjer kruga
int radijus = 8;
void setup ()
{
Serial.begin (9600);
kašnjenje (100);
myservo1.attach (7); // priključuje servo na pin 7 na servo objekt
myservo1.write (90);
myservo2.attach (8); // priključuje servo na pin 8 na servo objekt
myservo2.write (90);
kašnjenje (1000); // čeka da servo stigne tamo
interpolirati2Servos (1, 90, 2, 90, 10, 60); // neutralno
kašnjenje (1000);
}
void loop () {{100} {101}
timingDelay = 15; // radi u 10
servoDelay = 4;
spin4 ();
// interpolate2Servos (1, 90, 2, 90, 1, 60); // neutralno
// kašnjenje (1000);
// izlaz (0); // pauziranje programa - za nastavak pritisnite reset
}
void spin3 () {
interpolirati2Servos (1, 90, 2, 110, 1, 60); // neutralno
kašnjenje (timingDelay);
interpolirati2Servos (1, 90, 2, 80, 1, 60); // neutralno
kašnjenje (timingDelay);
}
void spin2 () {
// interpolate2Servos (1, 80, 2, 90, 1, 50); // neutralno
kašnjenje (timingDelay);
interpolirati2Servos (1, 80, 2, 80, 1, 60); // neutralno
kašnjenje (timingDelay);
interpolirati2Servos (1, 110, 2, 80, 1, 60); // neutralno
kašnjenje (timingDelay);
// interpolate2Servos (1, 110, 2, 110, 1, 60); // neutralno
kašnjenje (timingDelay);
}
void spin1 () {
// int deg = (degStart / (180 / 3.14));
float deg = (degStart * 3.141592 / 180); // pretvaranje stupnjeva u radijane
float xPos = 90 + (cos (deg) * radijus);
// xPos = okrugli (xPos);
float yPos = 90 + (sin (stupnjevi) * radijus);
// yPos = okrugli (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 ="); Serijski. println (yPos);
// interpolate2Servos (1, xPos, 2, yPos, 1, servoDelay); // neutralno
myservo1.write (xPos);
myservo2.write (yPos);
kašnjenje (timingDelay);
if (degStart> = degEnd) {
degStart = 0;
if (degGap> 180)
degGap = 180;
// degGap = 0;
drugo
degGap = degGap + 2;
degGap = degGap - 2;
// degStart = degStart +degGap;
}
degStart = degStart + degGap;
}
void spin4 () {
za (int i = 0; i <= 360; i ++) {
float j = 20 * (cos ((3,14 * i)/180)) + 90;
plovak k = 20 * (sin ((3,14 * i)/180)) + 90;
myservo1.write (j);
myservo2.write (k);
Serijski.ispis (j);
Serial.print (",");
Serijski.println (k);
kašnjenje (100);
}
}
Preporučeni:
Valjak za kockice Mason Jar: 5 koraka (sa slikama)
Mason Jar Dice Roller: Evo sjajnog projekta za vikend ako se planirate igrati bilo koje igre vezane uz ploču/kockice. Za izradu projekta trebat će vam servo s kontinuiranom rotacijom, arkadni gumb i arduino nano ili ESP8266 ploča, osim toga trebat će vam 3D p
Fokusirajte visokokvalitetnu kameru Pi s Legom i servom: 4 koraka (sa slikama)
Usredotočite Pi visokokvalitetnu kameru s Legom i servom: Uz pomalo sjeckani Lego komad, kontinuirani servo i nešto Python koda, možete fokusirati svoju Raspberry Pi kameru visoke kvalitete s bilo kojeg mjesta na svijetu! Pi HQ kamera je fantastičan komad komplet, ali kako sam otkrio radeći na nedavnom Merlinu
NLO-i-Oblateni kuglični sferi pogonjeni ultrakondenzatorima: 22 koraka (sa slikama)
NLO-i-Oblateni sferoidi pogonjeni ultrakondenzatorima: Ovaj NLO penje se po jednoj niti ribarske linije dok se bljeskajuća svjetla okreću oko tijela. Na vrhu svog ciklusa plovilo se zaustavlja i svjetla istovremeno bljesnu u različitim bojama. Zatim se vozilo spušta do baze za punjenje. Ovo je dio
HackerBox 0055: Visoki valjak: 7 koraka
HackerBox 0055: High Roller: Pozdrav HackerBox hakerima širom svijeta! S HackerBox -om 0055 vi ste D20 visoki valjak u kartaškim igrama za odgovor na incidente, Backdoors & Kršenja. Također ćete istražiti strojno učenje pomoću TensorFlow -a, ESP32 ugrađenih web poslužitelja, stroja
Kako napraviti valjak za naljepnice: 4 koraka
Kako napraviti valjak za naljepnice: Sljedeći će vam koraci otprilike pokazati kako napraviti valjak za naljepnice za mali pisač naljepnica. Radim kao IT stručnjak u laboratoriju i jedan od poslova za naše dame iz korisničke službe je ispisati nekoliko tisuća naljepnica sa Zebra Label p