Obsah:
- Krok 1: Vyrobte si základňu a sklopný držiak uzáveru
- Krok 2: Predĺžte rameno servo a pripevnite servo
- Krok 3: Načítajte a spustite náčrt
Video: Automatizovaný valček s Arduinom a jedným servom: 3 kroky
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:55
Jedná sa o jednoduchý malý projekt Arduino a servo, ktorého dokončenie trvá asi dve hodiny. Pomocou serva zdvihnite jeden koniec uzáveru nádoby a roztočte oceľovú guľu po vnútornom obvode. Je samočinný, môže meniť rýchlosť a môže točiť dvoma (alebo viacerými?) Loptičkami naraz. Zábava stavať a pracovať. S časovacími parametrami sa dá hrať pravdepodobne ešte vo vyšších rýchlostiach. Na to, aby bol inteligentnejší stroj, ktorý dokáže zistiť najlepšie parametre, by bolo možné použiť niekoľko senzorov s Hallovým efektom s magnetickou guľou.
Mal by som spomenúť, že niekto tu na instructables.com má sofistikovanejší stroj s valčekmi:
Potrebný materiál:
Arduino Uno (alebo akékoľvek Arduino)
Servo štít (voliteľné)
9g servo
zavárací uzáver
oceľová guľa
nejaký šrot
Krok 1: Vyrobte si základňu a sklopný držiak uzáveru
Základňa je len kus dreva, na ktorý je možné zavesiť zavesený kus dreva. Kĺbové drevo by malo byť väčšie ako uzáver nádoby, ktorý budete používať, a mal by mať dostatok miesta na pánty a montáž serva.
Použil som malé plastové závesy lietadiel na diaľkové ovládanie a len ich zalepil horným závesom k závesnému drevu a základni.
Krok 2: Predĺžte rameno servo a pripevnite servo
Aby som vyrobil dlhšie servo rameno, pripevnil som k servo ramenu 5 centimetrový kus dreva niekoľkými malými skrutkami a maticami. Rameno serva by malo byť na servo v 90 stupňoch, keď je vodorovne k základni.
Práve som za tepla nalepil servo na sklopný držiak na drevo, ale zistil som, že ak ho necháte bežať dlhšie ako niekoľko minút, servo zohreje horúce lepidlo a pustí ho z dreva. Preto je zaručená lepšia metóda pripevnenia.
Krok 3: Načítajte a spustite náčrt
Svoje servo som pripevnil na pin 7 pomocou štítu, pretože je to jednoducho pohodlné a stoja len pár dolárov. Ak nemáte štít, pripojte signálny vodič serva k pinu 7 na Arduino, červený vodič k 5v na Arduino a uzemňovací vodič k GND na Arduino. Arduino by malo poskytovať dostatok prúdu na obsluhu serva. Používam štít, pretože je ľahké použiť externé napätie iba pre servo.
Tu je náčrt. Napísal som rutinu regulátora rýchlosti serva, aby som zmenil rýchlosť serva, pretože pravdepodobne nebude fungovať dobre pri plnej rýchlosti.
Časovanie oneskorenia môžete zmeniť, aby ste dosiahli rôzne rýchlosti valenia lopty. Na zmenu rýchlosti môžete tiež zmeniť tretí parameter funkcie myServo ().
////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// //////////////// // vytvoril Jim Demello, Shangluo University, 2017
// pomocou tohto kódu môžete voľne používať, manipulovať a robiť si čokoľvek, moje meno nie je povinné
// Táto rutina umožňuje interpolovať ľubovoľný počet serv, stačí pridať nové riadky, ak počet serva prekročí 4
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#zahrnúť
Servo myservo1, myservo2; // vytvorenie objektu serva na ovládanie serva
int servoRead (int servoNumber) {
int servoCurrent;
if (servoNumber == 1) {servoCurrent = myservo1.read (); }
if (servoNumber == 2) {servoCurrent = myservo2.read (); }
vrátiť servoCurrent;
}
void servoWrite (int servoNumber, int offset) {
if (servoNumber == 1) {myservo1.write (offset); }
if (servoNumber == 2) {myservo2.write (offset); }
}
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) {
pre (int uhol = curAngle; uhol <newAngle; uhol += uholInc) {
if (servoNum == 1) myservo1.write (uhol);
if (servoNum == 2) myservo2.write (uhol);
oneskorenie (vrátane oneskorenia); }
}
else if (curAngle> newAngle) {
pre (int uhol = curAngle; uhol> newAngle; uhol -= uholInc) {
if (servoNum == 1) myservo1.write (uhol);
if (servoNum == 2) myservo2.write (uhol);
oneskorenie (vrátane oneskorenia); }
}
}
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 a aktuálny"); Serial.print (servo3Position); Serial.print (""); Serial.println (servo3Current);
// Serial.print ("Servo4Pos a aktuálny"); Serial.print (servo4Position); Serial.print (""); Serial.println (servo4Current);
// Serial.print ("Servo5Pos a aktuálny"); Serial.print (servo5Position); Serial.print (""); Serial.println (servo5Current);
// Serial.print ("Servo6Pos a aktuálny"); 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;
pre (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 ("Ofset aab" "); Serial.print (aOffsetTotal); Serial.print (""); Serial.println (bOffsetTotal); oneskorenie (10);
oneskorenie (časové oneskorenie);
} // koniec pre
//////////////////////////////////////
// postarajte sa o zvyšky modula //
/////////////////////////////////////
if (servo1Position! = servo1Current) servoWrite (servo1, servo1Position);
if (servo2Position! = servo2Current) servoWrite (servo2, servo2Position);
}
int timingDelay = 100;
int servoDelay = 100;
int degGap = 10;
// Toto je počiatočný stupeň (musí byť menší ako koncový stupeň)
int degStart = 0;
// Toto sú koncové stupne (musia byť väčšie ako počiatočný stupeň)
int degEnd = 360;
// Toto je polomer kruhu
vnútorný polomer = 8;
neplatné nastavenie ()
{
Serial.begin (9600);
oneskorenie (100);
myservo1.attach (7); // pripevní servo na pine 7 k objektu serva
myservo1.write (90);
myservo2.attach (8); // pripevní servo na kolíku 8 k objektu serva
myservo2.write (90);
oneskorenie (1000); // čaká, kým sa tam servo dostane
interpolate2Servos (1, 90, 2, 90, 10, 60); // neutrálne
oneskorenie (1000);
}
prázdna slučka () {
timingDelay = 15; // funguje o 10
servoDelay = 4;
spin4 ();
// interpolate2Servos (1, 90, 2, 90, 1, 60); // neutrálne
// oneskorenie (1000);
// exit (0); // pozastavenie programu - pokračujte kliknutím na reset
}
void spin3 () {
interpolate2Servos (1, 90, 2, 110, 1, 60); // neutrálne
oneskorenie (timingDelay);
interpolate2Servos (1, 90, 2, 80, 1, 60); // neutrálne
oneskorenie (timingDelay);
}
void spin2 () {
// interpolate2Servos (1, 80, 2, 90, 1, 50); // neutrálne
oneskorenie (timingDelay);
interpolate2Servos (1, 80, 2, 80, 1, 60); // neutrálne
oneskorenie (timingDelay);
interpolate2Servos (1, 110, 2, 80, 1, 60); // neutrálne
oneskorenie (timingDelay);
// interpolate2Servos (1, 110, 2, 110, 1, 60); // neutrálne
oneskorenie (timingDelay);
}
void spin1 () {
// int deg = (degStart / (180 / 3,14));
float deg = (degStart * 3,141592 / 180); // prevod stupňov na radiány
plavák xPos = 90 + (cos (deg) * polomer);
// xPos = okrúhly (xPos);
plavák yPos = 90 + (sin (deg) * polomer);
// yPos = okrúhly (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); // neutrálne
myservo1.write (xPos);
myservo2.write (yPos);
oneskorenie (timingDelay);
if (degStart> = degEnd) {
degStart = 0;
ak (degGap> 180)
degGap = 180;
// degGap = 0;
inak
degGap = degGap + 2;
degGap = degGap - 2;
// degStart = degStart +degGap;
}
degStart = degStart + degGap;
}
void spin4 () {
pre (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.write (j);
myservo2.write (k);
Serial.print (j);
Serial.print (",");
Serial.println (k);
oneskorenie (100);
}
}
Odporúča:
Robot ESP32 so servom: 6 krokov (s obrázkami)
Robot ESP32 so servom: Experimentoval som s rôznymi vývojovými doskami ESP32, nedávno som si objednal jeden z radu TTGO T-Beam, ktorý je dodávaný so zásuvkou na batériu na pridanie vlastného Lipo 18650, čo skutočne obnáša náročnosť regulácie výkonu. postaviť
Nástenný držiak pre iPad ako ovládací panel pre domácu automatizáciu, pomocou magnetu ovládaného servom na aktiváciu obrazovky: 4 kroky (s obrázkami)
Nástenný držiak pre iPad ako ovládací panel domácej automatizácie využívajúci servom riadený magnet na aktiváciu obrazovky: V poslednej dobe som strávil nejaký čas automatizáciou vecí vo svojom dome a okolo neho. Ako svoju domácu automatizačnú aplikáciu používam Domoticz, podrobnosti nájdete na www.domoticz.com. Pri mojom hľadaní aplikácie na palubnej doske, ktorá zobrazuje všetky informácie o Domoticz,
Ako vytvoriť robotického psa so servom 9G: 3 kroky
Ako vytvoriť robotického psa so servom 9G: Toto je robotický pes inšpirovaný Spotmini spoločnosti Boston Dynamic, tentoraz však v oveľa menšom meradle. Táto verzia robotického psa je vytvorená s tuctom serva a niektorých ďalších komponentov, ako je Ardurino Nano. Môžete nájsť skvelý inštruovateľný
Jason Vorhees v životnej veľkosti/Piatok 13. halloweensky model s 15,4 palcovou televíziou/DVD so žalúdkom a servom/arduino s pohyblivou hlavou: 6 krokov
Jason Vorhees v životnej veľkosti/Piatok 13. halloweensky model s 15,4 palcovou TV/DVD žalúdkom a servom/arduino s pohyblivou hlavou: stály stojan/sedenie v životnej veľkosti Jason Vorhees s kombináciou TV/DVD vstavaným … tiež arduino napájaný servo krk na výrobu Jason hľadá svoju ďalšiu obeť
Ako vyrobiť valček so štítkom: 4 kroky
Ako vyrobiť valček na štítky: Nasledujúce kroky vám zhruba ukážu, ako vyrobiť valček na štítky pre malú tlačiareň štítkov. Pracujem ako IT špecialista v laboratóriu a jednou z úloh pre dámy našich zákazníckych služieb je vytlačiť niekoľko tisíc etikiet zo štítku Zebra Label