Indholdsfortegnelse:
- Trin 1: Lav base og hængslet kasketholder
- Trin 2: Lav en længere servoarm, og fastgør servoen
- Trin 3: Indlæs og kør skitse
![Automatiseret kuglerulle med Arduino og en servo: 3 trin Automatiseret kuglerulle med Arduino og en servo: 3 trin](https://i.howwhatproduce.com/images/001/image-1633-50-j.webp)
Video: Automatiseret kuglerulle med Arduino og en servo: 3 trin
![Video: Automatiseret kuglerulle med Arduino og en servo: 3 trin Video: Automatiseret kuglerulle med Arduino og en servo: 3 trin](https://i.ytimg.com/vi/3_C7gJeX9hc/hqdefault.jpg)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:25
![Image Image](https://i.howwhatproduce.com/images/001/image-1633-52-j.webp)
![](https://i.ytimg.com/vi/dOkQfpNRtf8/hqdefault.jpg)
Dette er et simpelt lille Arduino- og servoprojekt, der tager cirka to timer at gennemføre. Den bruger en servo til at løfte den ene ende af en krukkehætte for at dreje en stålkugle rundt om den indvendige omkreds. Det starter selv, kan ændre hastighed og kan dreje to (eller flere?) Bolde på én gang. Sjovt at bygge og komme i gang. Timingsparametrene kan spilles med for sandsynligvis endnu hurtigere hastigheder. Et par hall effekt sensorer med en magnetisk kugle kunne bruges til at gøre det til en smartere maskine, der kan finde ud af de bedste parametre.
Jeg skal nævne, at nogen her på instructables.com har en mere sofistikeret kuglerulle:
Nødvendige materialer:
Arduino Uno (eller enhver Arduino)
Servo skjold (valgfrit)
9g servo
krukkehætte
stålkugle
noget skrot
Trin 1: Lav base og hængslet kasketholder
![Lav base og hængslet kasketholder Lav base og hængslet kasketholder](https://i.howwhatproduce.com/images/001/image-1633-53-j.webp)
Basen er bare et stykke træ til at montere det hængslede stykke træ på. Det hængslede træ skal være større end en krukkehætte, som du vil bruge, og have plads nok til hængslerne og til montering af servoen.
Jeg brugte små plastiske rc -flyhængsler og hotgluede dem bare til det hængslede træ og basen.
Trin 2: Lav en længere servoarm, og fastgør servoen
![Lav en længere servoarm, og fastgør servoen Lav en længere servoarm, og fastgør servoen](https://i.howwhatproduce.com/images/001/image-1633-54-j.webp)
![Lav en længere servoarm, og fastgør servoen Lav en længere servoarm, og fastgør servoen](https://i.howwhatproduce.com/images/001/image-1633-55-j.webp)
For at lave en længere servoarm har jeg lige vedhæftet et 5 centimeter stykke træ til servoarmen med et par små skruer og møtrikker. Servoarmen skal være 90 grader på servoen, når den er vandret i forhold til basen.
Jeg har lige varmlimet servoen til den hængslede træholder, men jeg fandt ud af, at hvis du lader den køre i mere end et par minutter, vil servoen varme den varme lim op og slippe fra træet. Så en bedre fastgørelsesmetode er berettiget.
Trin 3: Indlæs og kør skitse
![Indlæs og kør skitse Indlæs og kør skitse](https://i.howwhatproduce.com/images/001/image-1633-56-j.webp)
Jeg fastgjorde min servo til pin 7 ved hjælp af et skjold, fordi det bare er praktisk, og de koster kun et par kroner. Hvis du ikke har et skjold, skal du fastgøre servosignaltråden til pin 7 på Arduino, den røde ledning til 5v på Arduino og jordledningen til GND på Arduino. Arduinoen skal levere nok strøm til at betjene servoen. Jeg bruger skjoldet, fordi det er let at bruge en ekstern spænding kun til servoen.
Her er skitsen. Jeg skrev en servohastighedsstyringsrutine for at ændre hastigheden på servoen, fordi den sandsynligvis ikke fungerer godt ved fuld hastighed.
Du kan ændre timingDelay for at få forskellige hastigheder på bolden. Du kan også ændre den tredje parameter i funktionen myServo () for også at ændre hastighed.
///////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////// // // oprettet af Jim Demello, Shangluo University, 2017
// du er fri til at bruge, manipulere, gøre hvad du vil med denne kode, mit navn er ikke påkrævet
// Denne rutine gør det muligt at interpolere et vilkårligt antal servoer, tilføj bare nye linjer, hvis antallet af servoer overstiger 4
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#omfatte
Servo myservo1, myservo2; // opret et servoobjekt for at styre en servo
int servoRead (int servoNumber) {
int servoCurrent;
hvis (servoNumber == 1) {servoCurrent = myservo1.read (); }
hvis (servoNumber == 2) {servoCurrent = myservo2.read (); }
returner servoCurrent;
}
void servoWrite (int servoNumber, int offset) {
hvis (servoNumber == 1) {myservo1.write (offset); }
hvis (servoNumber == 2) {myservo2.write (offset); }
}
void myServo (int newAngle, int angleInc, int incDelay, int servoNum) {
int curAngle;
hvis (servoNum == 1) {curAngle = myservo1.read (); }
hvis (servoNum == 2) {curAngle = myservo2.read (); }
if (curAngle <newAngle) {
for (int vinkel = curAngle; vinkel <newAngle; vinkel += vinkelInc) {
hvis (servoNum == 1) myservo1.write (vinkel);
hvis (servoNum == 2) myservo2.write (vinkel);
forsinkelse (incDelay); }
}
ellers hvis (curAngle> newAngle) {
for (int vinkel = curAngle; vinkel> newAngle; vinkel -= vinkelInc) {
hvis (servoNum == 1) myservo1.write (vinkel);
hvis (servoNum == 2) myservo2.write (vinkel);
forsinkelse (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 og Current"); Serial.print (servo3Position); Serial.print (""); Serial.println (servo3Current);
// Serial.print ("Servo4Pos og Current"); Serial.print (servo4Position); Serial.print (""); Serial.println (servo4Current);
// Serial.print ("Servo5Pos og Current"); Serial.print (servo5Position); Serial.print (""); Serial.println (servo5Current);
// Serial.print ("Servo6Pos og Current"); 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;
for (int x = 0; x
hvis (servo1Position> servo1Current) {cOffsetTotal = cOffsetTotal + cOffset; }
else {cOffsetTotal = cOffsetTotal - cOffset; }
hvis (servo2Position> servo2Current) {dOffsetTotal = dOffsetTotal + dOffset; }
else {dOffsetTotal = dOffsetTotal - dOffset; }
if (servo1Position! = servo1Current) servoWrite (servo1, cOffsetTotal);
if (servo2Position! = servo2Current) servoWrite (servo2, dOffsetTotal);
// Serial.print ("a og b offset"); Serial.print (aOffsetTotal); Serial.print (""); Serial.println (bOffsetTotal); forsinkelse (10);
forsinkelse (timeDelay);
} // slut for
//////////////////////////////////////
// passe modulo rester //
/////////////////////////////////////
if (servo1Position! = servo1Current) servoWrite (servo1, servo1Position);
hvis (servo2Position! = servo2Current) servoWrite (servo2, servo2Position);
}
int timingDelay = 100;
int servoDelay = 100;
int degGap = 10;
// Dette er startgraden (skal være mindre end slutgrad)
int degStart = 0;
// Dette er slutgrader (skal være større end startgrad)
int degEnd = 360;
// Dette er cirkelradius
int radius = 8;
ugyldig opsætning ()
{
Serial.begin (9600);
forsinkelse (100);
myservo1.attach (7); // fastgør servoen på pin 7 til servoobjektet
myservo1.write (90);
myservo2.attach (8); // fastgør servoen på pin 8 til servoobjektet
myservo2.write (90);
forsinkelse (1000); // venter på, at servoen kommer derhen
interpolate2Servos (1, 90, 2, 90, 10, 60); // neutral
forsinkelse (1000);
}
void loop () {
timingDelay = 15; // arbejder ved 10
servoDelay = 4;
spin4 ();
// interpolate2Servos (1, 90, 2, 90, 1, 60); // neutral
// forsinkelse (1000);
// exit (0); // pause program - tryk på reset for at fortsætte
}
void spin3 () {
interpolate2Servos (1, 90, 2, 110, 1, 60); // neutral
forsinkelse (timingDelay);
interpolate2Servos (1, 90, 2, 80, 1, 60); // neutral
forsinkelse (timingDelay);
}
void spin2 () {
// interpolate2Servos (1, 80, 2, 90, 1, 50); // neutral
forsinkelse (timingDelay);
interpolate2Servos (1, 80, 2, 80, 1, 60); // neutral
forsinkelse (timingDelay);
interpolate2Servos (1, 110, 2, 80, 1, 60); // neutral
forsinkelse (timingDelay);
// interpolate2Servos (1, 110, 2, 110, 1, 60); // neutral
forsinkelse (timingDelay);
}
void spin1 () {
// int deg = (degStart / (180 / 3.14));
float deg = (degStart * 3.141592 / 180); // konverter grader til radianer
float xPos = 90 + (cos (deg) * radius);
// xPos = rund (xPos);
float yPos = 90 + (sin (deg) * radius);
// yPos = rund (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); // neutral
myservo1.write (xPos);
myservo2.write (yPos);
forsinkelse (timingDelay);
hvis (degStart> = degEnd) {
degStart = 0;
hvis (degGap> 180)
degGap = 180;
// degGap = 0;
andet
degGap = degGap + 2;
degGap = degGap - 2;
// degStart = degStart +degGap;
}
degStart = degStart + degGap;
}
void spin4 () {
for (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);
forsinkelse (100);
}
}
Anbefalede:
Akvariedesign med automatiseret kontrol af grundlæggende parametre: 4 trin (med billeder)
![Akvariedesign med automatiseret kontrol af grundlæggende parametre: 4 trin (med billeder) Akvariedesign med automatiseret kontrol af grundlæggende parametre: 4 trin (med billeder)](https://i.howwhatproduce.com/images/001/image-1117-63-j.webp)
Akvariedesign med automatiseret styring af grundlæggende parametre: Introduktion I dag er havakvariumpleje tilgængelig for alle akvarister. Problemet med at anskaffe et akvarium er ikke svært. Men for beboernes fulde livsstøtte, beskyttelse mod tekniske fejl, let og hurtig vedligeholdelse og pleje
Automatiseret modelbanelayout med to tog (V2.0) - Arduino baseret: 15 trin (med billeder)
![Automatiseret modelbanelayout med to tog (V2.0) - Arduino baseret: 15 trin (med billeder) Automatiseret modelbanelayout med to tog (V2.0) - Arduino baseret: 15 trin (med billeder)](https://i.howwhatproduce.com/images/003/image-6002-j.webp)
Automatiseret modelbanelayout med to tog (V2.0) | Arduino baseret: Automatisering af modeljernbanelayouter ved hjælp af Arduino mikrokontroller er en fantastisk måde at flette mikrokontrollere, programmering og modeljernbaner til en hobby. Der er en masse projekter til rådighed om at køre et tog autonomt på en model railroa
Modeljernbanelayout med automatiseret sidespor: 13 trin (med billeder)
![Modeljernbanelayout med automatiseret sidespor: 13 trin (med billeder) Modeljernbanelayout med automatiseret sidespor: 13 trin (med billeder)](https://i.howwhatproduce.com/images/005/image-13073-j.webp)
Modeljernbanelayout med automatiseret sidespor: At lave modelbanelayouter er en stor hobby, og automatisering af det vil gøre det meget bedre! Lad os se på nogle af fordelene ved dens automatisering: Billig drift: Hele layoutet styres af en Arduino mikrokontroller ved hjælp af en L298N mo
Automatiseret vandmotor med niveauindikator: 6 trin (med billeder)
![Automatiseret vandmotor med niveauindikator: 6 trin (med billeder) Automatiseret vandmotor med niveauindikator: 6 trin (med billeder)](https://i.howwhatproduce.com/images/006/image-17368-j.webp)
Automatiseret vandmotor med niveauindikator: Hej alle, velkommen til endnu en instruerbar. I dette projekt lærer vi, hvordan man opretter fuldautomatisk vandtankniveaucontroller med vandstandsindikatorfunktion ved hjælp af Arduino Nano. Arduino er hjernen i dette projekt. Det vil tage input fra
Modeljernbanelayout med automatiseret passagerbeklædning (V2.0): 13 trin (med billeder)
![Modeljernbanelayout med automatiseret passagerbeklædning (V2.0): 13 trin (med billeder) Modeljernbanelayout med automatiseret passagerbeklædning (V2.0): 13 trin (med billeder)](https://i.howwhatproduce.com/images/002/image-3136-76-j.webp)
Model Railway Layout With Automated Passing Siding (V2.0): Dette projekt er en opdatering af et af de tidligere modeljernbaneautomatiseringsprojekter, Model Railway Layout with Automated Siding. Denne version tilføjer funktionen til til- og frakobling af lokomotivet med det rullende materiel. Driften af