Sisällysluettelo:
- Vaihe 1: Tee pohja- ja saranakannen pidike
- Vaihe 2: Tee pidempi servovarsi ja kiinnitä servo
- Vaihe 3: Lataa ja suorita luonnos
Video: Automaattinen pallorulla Arduinolla ja yhdellä servolla: 3 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 08:59
Tämä on yksinkertainen pieni Arduino- ja servoprojekti, joka kestää noin kaksi tuntia. Se käyttää servoa nostaakseen purkin korkin toisen pään teräksisen pallon pyörittämiseksi sisäkehän ympäri. Se käynnistyy itsestään, voi muuttaa nopeutta ja voi pyörittää kahta (tai useampaa?) Palloa kerralla. Hauska rakentaa ja työskennellä. Ajoitusparametreilla voidaan pelata luultavasti jopa nopeammilla nopeuksilla. Muutamia magneettikuulalla varustettuja tehosteantureita voitaisiin käyttää älykkäämmäksi koneeksi, joka pystyy selvittämään parhaat parametrit.
Minun on mainittava, että joku täällä instructables.com-sivustolla on kehittyneempi pallorullakone:
Tarvittavat materiaalit:
Arduino Uno (tai mikä tahansa Arduino)
Servosuoja (valinnainen)
9 g servoa
purkin korkki
teräspallo
hiukan puuta
Vaihe 1: Tee pohja- ja saranakannen pidike
Pohja on vain puukappale saranoidun puukappaleen kiinnittämiseksi. Saranoidun puun on oltava suurempi kuin käyttämäsi purkkikorkki, ja siinä on oltava riittävästi tilaa saranoille ja servon asentamiselle.
Käytin pieniä muovisia rc -lentokoneiden saranoita ja liimasin ne vain saranoituun puuhun ja pohjaan.
Vaihe 2: Tee pidempi servovarsi ja kiinnitä servo
Pitkän servovarren tekemiseksi kiinnitin juuri 5 senttimetrin puukappaleen servovarteen muutamalla pienellä ruuvilla ja mutterilla. Servovarren tulisi olla 90 asteen kulmassa servossa, kun se on vaakasuorassa alustaan nähden.
Liimasin juuri servon saranoituun puupidikkeeseen, mutta huomasin, että jos annat sen käydä muutaman minuutin ajan, servo lämmittää kuuman liiman ja päästää irti puusta. Joten parempi kiinnitysmenetelmä on perusteltua.
Vaihe 3: Lataa ja suorita luonnos
Liitin servoni nastaan 7 käyttämällä suojaa, koska se on vain kätevää ja ne maksavat vain muutaman dollarin. Jos sinulla ei ole suojaa, kiinnitä servosignaalijohto Arduinon nastaan 7, punainen johto 5 V: iin Arduinossa ja maadoitusjohto GND: hen Arduinossa. Arduino -laitteen pitäisi antaa tarpeeksi virtaa servon käyttämiseen. Käytän suojaa, koska ulkoista jännitettä on helppo käyttää vain servolle.
Tässä on luonnos. Kirjoitin servonopeuden säätimen rutiinin muuttaakseni servon nopeutta, koska se ei todennäköisesti toimi hyvin täydellä nopeudella.
Voit muuttaa ajoituksen viivästymistä saadaksesi eri pallonopeudet. Voit myös muuttaa myServo () -toiminnon kolmatta parametria muuttaaksesi nopeutta.
//////////////////////////////////////////////////////////////////////////////////////. //////////////////////////////////////////////////////////////////////////////////////. /////////////// // luonut Jim Demello, Shangluo University, 2017
// voit vapaasti käyttää, manipuloida, tehdä mitä haluat tällä koodilla, nimeni ei ole pakollinen
// Tämä rutiini mahdollistaa minkä tahansa servojen interpoloinnin, lisää vain uusia rivejä, jos servojen määrä ylittää 4
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#sisältää
Servo myservo1, myservo2; // luoda servo -objekti servoa ohjaamaan
int servoRead (int servoNumber) {
int servoCurrent;
if (servoNumber == 1) {servoCurrent = myservo1.read (); }
if (servoNumber == 2) {servoCurrent = myservo2.read (); }
paluu servovirta;
}
void servoWrite (int servoNumber, int offset) {
jos (servonumero == 1) {myservo1.write (offset); }
jos (servonumero == 2) {myservo2.write (offset); }
}
void myServo (int newAngle, int angleInc, int incDelay, int servoNum) {
int curAngle;
if (servoNum == 1) {curAngle = myservo1.read (); }
jos (servoNum == 2) {curAngle = myservo2.read (); }
if (curAngle <newAngle) {
for (int kulma = curAngle; kulma <newAngle; kulma += kulmaInc) {
if (servoNum == 1) myservo1.write (kulma);
if (servoNum == 2) myservo2.write (kulma);
viive (incDelay); }
}
else if (curAngle> newAngle) {
for (int kulma = curAngle; kulma> newAngle; kulma -= kulmaInc) {
if (servoNum == 1) myservo1.write (kulma);
if (servoNum == 2) myservo2.write (kulma);
viive (incDelay); }
}
}
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 ja nykyinen"); Serial.print (servo3Position); Serial.print (""); Serial.println (servo3Current);
// Serial.print ("Servo4Pos ja nykyinen"); Serial.print (servo4Position); Serial.print (""); Serial.println (servo4Current);
// Serial.print ("Servo5Pos ja nykyinen"); Serial.print (servo5Position); Serial.print (""); Serial.println (servo5Current);
// Serial.print ("Servo6Pos ja nykyinen"); Serial.print (servo6Position); Serial.print (""); Serial.println (servo6Current);
// Sarja.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;
for (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 ja b Offset"); Serial.print (aOffsetTotal); Serial.print (""); Serial.println (bOffsetTotal); viive (10);
viive (timeDelay);
} // loppu
//////////////////////////////////////
// huolehdi modulo -jäännöksistä //
/////////////////////////////////////
if (servo1Position! = servo1Current) servoWrite (servo1, servo1Position);
if (servo2Position! = servo2Current) servoWrite (servo2, servo2Position);
}
int timingDelay = 100;
int servoDelay = 100;
int degGap = 10;
// Tämä on alkuaste (sen on oltava pienempi kuin lopullinen aste)
int degStart = 0;
// Tämä on päättymisaste (sen on oltava suurempi kuin aloitusaste)
int degEnd = 360;
// Tämä on ympyrän säde
int säde = 8;
mitätön asennus ()
{
Sarja.alku (9600);
viive (100);
myservo1.attach (7); // kiinnittää nastan 7 servon servo -objektiin
myservo1.write (90);
myservo2.attach (8); // kiinnittää nastan 8 servon servo -objektiin
myservo2.write (90);
viive (1000); // odottaa servon pääsyä sinne
interpolaatio2Servot (1, 90, 2, 90, 10, 60); // neutraali
viive (1000);
}
void loop () {
ajoitusviive = 15; // toimii klo 10
servoDelay = 4;
spin4 ();
// interpolate2Servos (1, 90, 2, 90, 1, 60); // neutraali
// viive (1000);
// exit (0); // keskeytä ohjelma - jatka painamalla reset
}
void spin3 () {
interpolaatio2Servot (1, 90, 2, 110, 1, 60); // neutraali
viive (ajoitusviive);
interpolaatio2Servot (1, 90, 2, 80, 1, 60); // neutraali
viive (ajoitusviive);
}
void spin2 () {
// interpolate2Servos (1, 80, 2, 90, 1, 50); // neutraali
viive (ajoitusviive);
interpolaatio2Servot (1, 80, 2, 80, 1, 60); // neutraali
viive (ajoitusviive);
interpolaatio2Servot (1, 110, 2, 80, 1, 60); // neutraali
viive (ajoitusviive);
// interpolate2Servos (1, 110, 2, 110, 1, 60); // neutraali
viive (ajoitusviive);
}
void spin1 () {
// int deg = (degStart / (180 / 3.14));
float deg = (degStart * 3.141592 / 180); // muuntaa astetta radiaaniksi
float xPos = 90 + (cos (deg) * säde);
// xPos = pyöreä (xPos);
float yPos = 90 + (sin (deg) * säde);
// yPos = pyöreä (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); // neutraali
myservo1.write (xPos);
myservo2.write (yPos);
viive (ajoitusviive);
jos (degStart> = degEnd) {
degStart = 0;
jos (degGap> 180)
degGap = 180;
// degGap = 0;
muu
degGap = degGap + 2;
degGap = degGap - 2;
// degStart = degStart +degGap;
}
degStart = degStart + degGap;
}
void spin4 () {
(int i = 0; i <= 360; i ++) {
kelluva j = 20 * (cos ((3,14 * i)/180)) + 90;
kelluva k = 20 * (sin ((3,14 * i)/180)) + 90;
myservo1.write (j);
myservo2.write (k);
Sarjanjälki (j);
Serial.print (",");
Sarja.println (k);
viive (100);
}
}
Suositeltava:
Automaattinen jäähdytystuuletin, joka käyttää servoa ja DHT11 -lämpötila- ja kosteusanturia Arduinolla: 8 vaihetta
Automaattinen jäähdytystuuletin, joka käyttää servoa ja DHT11 -lämpötila- ja kosteusanturia Arduinolla: Tässä opetusohjelmassa opimme aloittamaan & pyöritä tuuletinta, kun lämpötila nousee tietyn tason yläpuolelle
Tarkenna korkealaatuinen Pi -kamera Legolla ja servolla: 4 vaihetta (kuvilla)
Tarkenna Pi -korkealaatuinen kamera Legolla ja servolla: Hieman hakkeroidun Lego -kappaleen, jatkuvan servon ja jonkin Python -koodin avulla voit keskittyä laadukkaaseen Raspberry Pi -kameraasi mistä päin maailmaa tahansa! Pi HQ -kamera on upea pakki, mutta kuten löysin työskennellessäni äskettäisen Merlinin parissa
Kävelyrobotti 3 servolla: 4 vaihetta (kuvilla)
Kävelyrobotti 3 servolla: Tämä on yksinkertainen kaksijalkainen robotti, joka voi kävellä. Valmistettu Arduinosta, kolmesta servosta ja yksinkertaisesta mekanismista.Komenna robotille, se voi liikkua eteenpäin, taaksepäin, jopa kääntyä tai kääntyä. Yksi servo on siirtää painopistettä. Toinen kaksi on kiertää molemmat jalat
Näppäimistön injektio/Automaattinen salasanasi yhdellä napsautuksella!: 4 vaihetta (kuvilla)
Näppäimistön ruiskutus/Automaattinen salasanan kirjoittaminen yhdellä napsautuksella !: Salasanat ovat kovia … ja turvallisen salasanan muistaminen on vielä vaikeampaa! Kaiken lisäksi, jos sinulla on salasana, sen kirjoittaminen vie aikaa, mutta älä pelkää ystäviäni, minulla on ratkaisu tähän! Tein pienen automaattisen kirjoituskoneen, joka toimii
Jopa 3 RS485 -linjaa yhdellä Arduinolla: 5 vaihetta
Enintään 3 RS485 -linja -autoa yhdellä Arduinolla: Tässä ohjeessa näytän, kuinka yhdistä enintään 3 itsenäistä RS485 -väylää yhteen Arduinoon. Tästä voi olla hyötyä, jos haluat luoda yhdyskäytävän näiden väylien väliin tai jos haluat ohjata näiden väylien laitteita (ilman väylän kytkemistä