![Automatiserad kulrulle med Arduino och en servo: 3 steg Automatiserad kulrulle med Arduino och en servo: 3 steg](https://i.howwhatproduce.com/images/001/image-1633-50-j.webp)
Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-23 15:10
![Image Image](https://i.howwhatproduce.com/images/001/image-1633-52-j.webp)
![](https://i.ytimg.com/vi/dOkQfpNRtf8/hqdefault.jpg)
Detta är ett enkelt litet Arduino- och servoprojekt som tar cirka två timmar att slutföra. Den använder en servo för att lyfta ena änden av ett burklock för att snurra en stålkula runt insidan. Det är självstartande, kan ändra hastighet och kan snurra två (eller fler?) Bollar samtidigt. Roligt att bygga och få igång. Tidsparametrarna kan spelas med för troligen ännu snabbare hastigheter. Några hall -effektsensorer med magnetkula kan användas för att göra det till en smartare maskin som kan räkna ut de bästa parametrarna.
Jag bör nämna att någon här på instructables.com har en mer sofistikerad bollvalsmaskin:
Material behövs:
Arduino Uno (eller någon Arduino)
Servosköld (tillval)
9g servo
burklock
stål boll
lite skrot
Steg 1: Gör bas- och gångjärnshållare
![Gör bas- och gångjärnslockhållare Gör bas- och gångjärnslockhållare](https://i.howwhatproduce.com/images/001/image-1633-53-j.webp)
Basen är bara en träbit att montera det gångjärniga trästycket på. Det gångjärniga träet ska vara större än ett burklock som du kommer att använda och ha tillräckligt med plats för gångjärnen och för att montera servon.
Jag använde små rc -flygplansgångjärn av plast och limde dem precis till det gångjärniga träet och basen.
Steg 2: Gör längre servoarm och fäst servo
![Gör längre servoarm och fäst servo Gör längre servoarm och fäst servo](https://i.howwhatproduce.com/images/001/image-1633-54-j.webp)
![Gör längre servoarm och fäst servo Gör längre servoarm och fäst servo](https://i.howwhatproduce.com/images/001/image-1633-55-j.webp)
För att göra en längre servoarm fästde jag bara en 5 centimeter träbit på servoarmen med ett par små skruvar och muttrar. Servoarmen ska vara 90 grader på servon när den är horisontell mot basen.
Jag har precis varmlimmat servon till den gångjärniga trähållaren men jag upptäckte att om du låter den gå längre än några minuter, kommer servon att värma upp det heta limet och släppa det från träet. Så en bättre fästmetod är motiverad.
Steg 3: Ladda och kör skiss
![Ladda och kör skiss Ladda och kör skiss](https://i.howwhatproduce.com/images/001/image-1633-56-j.webp)
Jag fäst min servo på stift 7 med hjälp av en sköld eftersom det bara är bekvämt och de kostar bara några dollar. Om du inte har en skärm, fäst sedan servosignaltråden till stift 7 på Arduino, den röda ledningen till 5v på Arduino och jordledningen till GND på Arduino. Arduino ska ge tillräckligt med ström för att driva servon. Jag använder skölden eftersom det är lätt att använda en extern spänning bara för servon.
Här är skissen. Jag skrev en servohastighetsregleringsrutin för att ändra hastigheten på servon eftersom den förmodligen inte fungerar bra vid full hastighet.
Du kan ändra timingDelay för att få olika bollhastigheter. Du kan också ändra den tredje parametern i funktionen myServo () för att också ändra hastighet.
/////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////// //////////////// // skapad av Jim Demello, Shangluo University, 2017
// du är fri att använda, manipulera, gör vad du vill med denna kod, mitt namn krävs inte
// Denna rutin gör att valfritt antal servon kan interpoleras, lägg bara till nya rader om antalet servon överstiger 4
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#omfatta
Servo myservo1, myservo2; // skapa servoobjekt för att styra ett servo
int servoRead (int servoNumber) {
int servoCurrent;
if (servoNumber == 1) {servoCurrent = myservo1.read (); }
if (servoNumber == 2) {servoCurrent = myservo2.read (); }
retur 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) {
för (int vinkel = curAngle; vinkel <newAngle; vinkel += vinkelInc) {
if (servoNum == 1) myservo1.write (vinkel);
if (servoNum == 2) myservo2.write (vinkel);
fördröjning (incDelay); }
}
else if (curAngle> newAngle) {
för (int vinkel = curAngle; vinkel> newAngle; vinkel -= vinkelInc) {
if (servoNum == 1) myservo1.write (vinkel);
if (servoNum == 2) myservo2.write (vinkel);
fördröjning (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 och Current"); Serial.print (servo3Position); Serial.print (""); Serial.println (servo3Current);
// Serial.print ("Servo4Pos och Current"); Serial.print (servo4Position); Serial.print (""); Serial.println (servo4Current);
// Serial.print ("Servo5Pos och Current"); Serial.print (servo5Position); Serial.print (""); Serial.println (servo5Current);
// Serial.print ("Servo6Pos och 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;
för (int x = 0; x
if (servo1Position> servo1Current) {cOffsetTotal = cOffsetTotal + cOffset; }
annars {cOffsetTotal = cOffsetTotal - cOffset; }
if (servo2Position> servo2Current) {dOffsetTotal = dOffsetTotal + dOffset; }
annars {dOffsetTotal = dOffsetTotal - dOffset; }
if (servo1Position! = servo1Current) servoWrite (servo1, cOffsetTotal);
if (servo2Position! = servo2Current) servoWrite (servo2, dOffsetTotal);
// Serial.print ("a och b Offset"); Serial.print (aOffsetTotal); Serial.print (""); Serial.println (bOffsetTotal); fördröjning (10);
delay (timeDelay);
} // slut för
//////////////////////////////////////
// ta hand om modulo rester //
/////////////////////////////////////
if (servo1Position! = servo1Current) servoWrite (servo1, servo1Position);
if (servo2Position! = servo2Current) servoWrite (servo2, servo2Position);
}
int timingDelay = 100;
int servoDelay = 100;
int degGap = 10;
// Detta är startgraden (måste vara mindre än slutgraden)
int degStart = 0;
// Detta är slutgraderna (måste vara större än startgraden)
int degEnd = 360;
// Detta är cirkelradien
int radie = 8;
void setup ()
{
Serial.begin (9600);
fördröjning (100);
myservo1.attach (7); // fäster servon på stift 7 på servoobjektet
myservo1.write (90);
myservo2.attach (8); // fäster servon på stift 8 på servoobjektet
myservo2.write (90);
fördröjning (1000); // väntar på att servon kommer dit
interpolate2Servos (1, 90, 2, 90, 10, 60); // neutral
fördröjning (1000);
}
void loop () {
timingDelay = 15; // fungerar vid 10
servoDelay = 4;
spin4 ();
// interpolate2Servos (1, 90, 2, 90, 1, 60); // neutral
// fördröjning (1000);
// exit (0); // pausa programmet - tryck på reset för att fortsätta
}
void spin3 () {
interpolate2Servos (1, 90, 2, 110, 1, 60); // neutral
fördröjning (timingDelay);
interpolate2Servos (1, 90, 2, 80, 1, 60); // neutral
fördröjning (timingDelay);
}
void spin2 () {
// interpolate2Servos (1, 80, 2, 90, 1, 50); // neutral
fördröjning (timingDelay);
interpolate2Servos (1, 80, 2, 80, 1, 60); // neutral
delay (timingDelay);
interpolate2Servos (1, 110, 2, 80, 1, 60); // neutral
fördröjning (timingDelay);
// interpolate2Servos (1, 110, 2, 110, 1, 60); // neutral
fördröjning (timingDelay);
}
void spin1 () {
// int deg = (degStart / (180 / 3.14));
float deg = (degStart * 3.141592 / 180); // konvertera grader till radianer
flyta xPos = 90 + (cos (deg) * radie);
// xPos = rund (xPos);
float yPos = 90 + (sin (deg) * radie);
// 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);
fördröjning (timingDelay);
if (degStart> = degEnd) {
degStart = 0;
om (degGap> 180)
degGap = 180;
// degGap = 0;
annan
degGap = degGap + 2;
degGap = degGap - 2;
// degStart = degStart +degGap;
}
degStart = degStart + degGap;
}
void spin4 () {
för (int i = 0; i <= 360; i ++) {
flottör 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);
fördröjning (100);
}
}
Rekommenderad:
Ansluter bearbetning och Arduino och gör 7 segment och servo GUI -kontroller: 4 steg
![Ansluter bearbetning och Arduino och gör 7 segment och servo GUI -kontroller: 4 steg Ansluter bearbetning och Arduino och gör 7 segment och servo GUI -kontroller: 4 steg](https://i.howwhatproduce.com/images/009/image-25340-j.webp)
Ansluta bearbetning och Arduino och göra 7 segment och servo GUI -kontroller: För vissa projekt måste du använda Arduino eftersom det ger en enkel prototypplattform men visning av grafik i seriell bildskärm av Arduino kan ta ganska lång tid och är till och med svårt att göra. Du kan visa grafer på Arduino Serial Monitor
Arduino Wedding Photo Booth - 3D -tryckta delar, automatiserad och låg budget: 22 steg (med bilder)
![Arduino Wedding Photo Booth - 3D -tryckta delar, automatiserad och låg budget: 22 steg (med bilder) Arduino Wedding Photo Booth - 3D -tryckta delar, automatiserad och låg budget: 22 steg (med bilder)](https://i.howwhatproduce.com/images/011/image-30645-j.webp)
Arduino Wedding Photo Booth - 3D -tryckta delar, automatiserad och låg budget: Jag blev nyligen inbjuden till min partners brors bröllop och de frågade innan om vi kunde bygga dem ett fotobås eftersom de kostar för mycket att hyra. Detta är vad vi kom fram till och efter flera komplimanger bestämde jag mig för att göra det till en instruktion
8 Reläkontroll med NodeMCU och IR -mottagare med WiFi och IR -fjärrkontroll och Android -app: 5 steg (med bilder)
![8 Reläkontroll med NodeMCU och IR -mottagare med WiFi och IR -fjärrkontroll och Android -app: 5 steg (med bilder) 8 Reläkontroll med NodeMCU och IR -mottagare med WiFi och IR -fjärrkontroll och Android -app: 5 steg (med bilder)](https://i.howwhatproduce.com/images/002/image-4439-69-j.webp)
8 Reläkontroll med NodeMCU och IR -mottagare med WiFi och IR -fjärrkontroll och Android -app: Styrning av 8 reläväxlar med nodemcu och IR -mottagare via wifi och IR -fjärrkontroll och Android -app. Fjärrkontrollen fungerar oberoende av wifi -anslutning. HÄR ÄR EN UPPDATERAD VERSIONKLICK HÄR
Temperatur och fuktighet Display och datainsamling med Arduino och bearbetning: 13 steg (med bilder)
![Temperatur och fuktighet Display och datainsamling med Arduino och bearbetning: 13 steg (med bilder) Temperatur och fuktighet Display och datainsamling med Arduino och bearbetning: 13 steg (med bilder)](https://i.howwhatproduce.com/images/003/image-7803-43-j.webp)
Temperatur- och luftfuktighetsvisning och datainsamling med Arduino och bearbetning: Intro: Detta är ett projekt som använder ett Arduino -kort, en sensor (DHT11), en Windows -dator och ett bearbetningsprogram (ett gratis nedladdningsbart) för att visa temperatur, luftfuktighetsdata i digital och stapeldiagramform, visa tid och datum och kör en räkningstid
Automatiserad belysning med DMX och Perl: 6 steg
![Automatiserad belysning med DMX och Perl: 6 steg Automatiserad belysning med DMX och Perl: 6 steg](https://i.howwhatproduce.com/images/004/image-11425-9-j.webp)
Automatiserad belysning med DMX och Perl: Varför automatisera dina lampor? För att vara ärlig är det mesta av mitt hus automatiserat, så det verkade vara självklart. Det finns många fördelar med att automatisera delar av ditt hus, i synnerhet belysning gör bara livet enklare, lampor tänds när du