INHOUDSOPGAWE:
- Stap 1: Maak 'n voetstuk en 'n skarnierhouer
- Stap 2: Maak langer servo -arm en sit servo aan
- Stap 3: Laai en voer skets uit
Video: Outomatiese balroller met Arduino en een servo: 3 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:23
Dit is 'n eenvoudige klein Arduino- en servoprojek wat ongeveer twee uur neem om af te handel. Dit gebruik 'n servo om die een kant van die kruikdop op te lig om 'n staalbal om die binneste omtrek te draai. Dit begin self, kan spoed verander en kan twee (of meer?) Balle tegelyk draai. Lekker om te bou en aan die werk te sit. Daar kan met die tydsberekeningparameters gespeel word vir waarskynlik selfs vinniger snelhede. 'N Paar hall -effek sensors met 'n magnetiese bal kan gebruik word om 'n slimmer masjien te maak wat die beste parameters kan bepaal.
Ek moet noem dat iemand hier op instructables.com 'n meer gesofistikeerde balrolmasjien het:
Materiaal benodig:
Arduino Uno (of enige Arduino)
Servoskerm (opsioneel)
9 g servo
kruikdop
staal bal
bietjie afvalhout
Stap 1: Maak 'n voetstuk en 'n skarnierhouer
Die basis is net 'n stuk hout om die skarnierstuk op te sit. Die skarnierhout moet groter wees as 'n potdop wat u sal gebruik en moet genoeg plek hê vir die skarniere en om die servo te monteer.
Ek het klein plastiek -rc -vliegtuie -skarniere gebruik en dit net aan die skarnierhout en die basis vasgemaak.
Stap 2: Maak langer servo -arm en sit servo aan
Om 'n langer servo -arm te maak, het ek net 'n stuk hout van 5 sentimeter aan die servo -arm vasgemaak met 'n paar klein skroewe en moere. Die servo -arm moet 90 grade op die servo wees as dit horisontaal teenoor die basis is.
Ek het die servo net aan die skarnierhouthouer vasgeplak, maar ek het agtergekom dat as die servet langer as 'n paar minute toegedien word, die servo die warm gom sal verhit en uit die hout kan los. Dus is 'n beter hegmetode geregverdig.
Stap 3: Laai en voer skets uit
Ek het my servo met 'n skild aan pen 7 geheg, want dit is net gerieflik en kos slegs 'n paar dollar. As u nie 'n skild het nie, heg dan die servo seindraad aan pen 7 op die Arduino, die rooi draad na 5v op die Arduino en die gronddraad aan GND op die Arduino. Die arduino moet genoeg stroom verskaf om die servo te bestuur. Ek gebruik die skild omdat dit maklik is om 'n eksterne spanning net vir die servo te gebruik.
Hier is die skets. Ek het 'n servosnelheidsregelaarroetine geskryf om die snelheid van die servo te verander, want dit werk waarskynlik nie goed op volle spoed nie.
U kan die tydsvertraging verander om verskillende snelhede van die bal te laat rol. U kan ook die derde parameter van die myServo () -funksie verander om ook die spoed te verander.
//////////////////////////////////////////////////// //////////////////////////////////////////////////// //////////////// // geskep deur Jim Demello, Shangluo Universiteit, 2017
// jy is vry om te gebruik, te manipuleer, te doen wat jy wil met hierdie kode; my naam is nie nodig nie
// Met hierdie roetine kan enige aantal servo's geïnterpoleer word, voeg net nuwe reëls by as die aantal servo's 4 oorskry
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#insluit
Servo myservo1, myservo2; // skep servo -voorwerp om 'n servo te beheer
int servoRead (int servoNumber) {
int servoCurrent;
as (servoNumber == 1) {servoCurrent = myservo1.read (); }
as (servoNumber == 2) {servoCurrent = myservo2.read (); }
stuur servoCurrent terug;
}
void servoWrite (int servoNumber, int offset) {
as (servoNumber == 1) {myservo1.write (offset); }
as (servoNumber == 2) {myservo2.write (offset); }
}
void myServo (int newAngle, int angleInc, int incDelay, int servoNum) {
int curAngle;
as (servoNum == 1) {curAngle = myservo1.read (); }
as (servoNum == 2) {curAngle = myservo2.read (); }
if (curAngle <newAngle) {
for (int hoek = curAngle; hoek <newAngle; hoek += hoekInc) {
as (servoNum == 1) myservo1.write (hoek);
as (servoNum == 2) myservo2.write (hoek);
vertraging (incDelay); }
}
anders as (curAngle> newAngle) {
for (int hoek = curAngle; hoek> newAngle; hoek -= hoekInc) {
as (servoNum == 1) myservo1.write (hoek);
as (servoNum == 2) myservo2.write (hoek);
vertraging (incDelay); }
}
}
leegte interpolate2Servos (int servo1, int servo1Posisie, int servo2, int servo2Posisie, int numberSteps, int timeDelay) {
int servo1Current, servo2Current;
servo1Current = servoRead (servo1);
servo2Current = servoRead (servo2);
// Serial.print ("Servo3Pos en Current"); Serial.print (servo3Position); Serial.print (""); Serial.println (servo3Current);
// Serial.print ("Servo4Pos en Current"); Serial.print (servo4Position); Serial.print (""); Serial.println (servo4Current);
// Serial.print ("Servo5Pos en Current"); Serial.print (servo5Position); Serial.print (""); Serial.println (servo5Current);
// Serial.print ("Servo6Pos en 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;
vir (int x = 0; x
if (servo1Position> servo1Current) {cOffsetTotal = cOffsetTotal + cOffset; }
anders {cOffsetTotal = cOffsetTotal - cOffset; }
if (servo2Position> servo2Current) {dOffsetTotal = dOffsetTotal + dOffset; }
anders {dOffsetTotal = dOffsetTotal - dOffset; }
if (servo1Position! = servo1Current) servoWrite (servo1, cOffsetTotal);
if (servo2Position! = servo2Current) servoWrite (servo2, dOffsetTotal);
// Serial.print ("a en b offset"); Serial.print (aOffsetTotal); Serial.print (""); Serial.println (bOffsetTotal); vertraging (10);
vertraging (timeDelay);
} // eindig vir
//////////////////////////////////////
// sorg vir modulo reste //
/////////////////////////////////////
if (servo1Position! = servo1Current) servoWrite (servo1, servo1Position);
if (servo2Position! = servo2Current) servoWrite (servo2, servo2Position);
}
int timingDelay = 100;
int servoDelay = 100;
int degGap = 10;
// Dit is die begingraad (moet minder as eindgraad wees)
int degStart = 0;
// Dit is die eindgrade (moet groter wees as die begingraad)
int degEnd = 360;
// Dit is die sirkelradius
int radius = 8;
leemte opstelling ()
{
Serial.begin (9600);
vertraging (100);
myservo1.aanheg (7); // plak die servo op pen 7 aan die servo -voorwerp
myservo1.write (90);
myservo2.aanheg (8); // plak die servo op pen 8 aan die servo -voorwerp
myservo2.write (90);
vertraging (1000); // wag vir die servo om daar te kom
interpolate2Servos (1, 90, 2, 90, 10, 60); // neutraal
vertraging (1000);
}
leemte -lus () {
tydsberekening = 15; // werk om 10
servoDelay = 4;
spin4 ();
// interpolate2Servos (1, 90, 2, 90, 1, 60); // neutraal
// vertraging (1000);
// uitgang (0); // pouse program - druk reset om voort te gaan
}
leemte spin3 () {
interpolate2Servos (1, 90, 2, 110, 1, 60); // neutraal
vertraging (timingDelay);
interpolate2Servos (1, 90, 2, 80, 1, 60); // neutraal
vertraging (timingDelay);
}
leemte spin2 () {
// interpolate2Servos (1, 80, 2, 90, 1, 50); // neutraal
vertraging (timingDelay);
interpolate2Servos (1, 80, 2, 80, 1, 60); // neutraal
vertraging (timingDelay);
interpolate2Servos (1, 110, 2, 80, 1, 60); // neutraal
vertraging (timingDelay);
// interpolate2Servos (1, 110, 2, 110, 1, 60); // neutraal
vertraging (timingDelay);
}
leemte spin1 () {
// int deg = (degStart / (180 / 3.14));
float deg = (degStart * 3.141592 / 180); // skakel grade om in radiale
dryf xPos = 90 + (cos (deg) * radius);
// xPos = rond (xPos);
dryf yPos = 90 + (sin (deg) * radius);
// yPos = rond (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); // neutraal
myservo1.write (xPos);
myservo2.write (yPos);
vertraging (timingDelay);
as (degStart> = degEnd) {
degStart = 0;
as (degGap> 180)
degGap = 180;
// degGap = 0;
anders
degGap = degGap + 2;
degGap = degGap - 2;
// degStart = degStart +degGap;
}
degStart = degStart + degGap;
}
ongeldig spin4 () {
vir (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);
Reeks.afdruk (j);
Serial.print (",");
Serial.println (k);
vertraging (100);
}
}
Aanbeveel:
Outomatiese model spoorweguitleg met twee treine (V2.0) - Arduino gebaseer: 15 stappe (met foto's)
Outomatiese model spoorweguitleg met twee treine (V2.0) | Arduino gebaseer: Die outomatisering van model spoorweguitlegte met behulp van Arduino mikrobeheerders is 'n uitstekende manier om mikrobeheerders, programmering en model spoorweë saam te voeg tot een stokperdjie. Daar is 'n klomp projekte beskikbaar om 'n trein outonoom op 'n modelrail te bestuur
Bou 'n outomatiese sonopsporing met Arduino Nano V2: 17 stappe (met foto's)
Bou van 'n outomatiese sonopsporing met Arduino Nano V2: Hallo! Hierdie Instructable is bedoel om deel twee van my Solar Tracker -projek te wees. Gebruik die onderstaande skakel vir 'n verduideliking van hoe sonopsporers werk en hoe ek my eerste spoorsnyer ontwerp het. Dit bied konteks vir hierdie projek. Https: //www.instructables.co
Skakelaar vir outomatiese laai (vakuum) met ACS712 en Arduino: 7 stappe (met foto's)
Skakelaar vir outomatiese laai (vakuum) met ACS712 en Arduino: Hallo almal, om 'n werktuig in 'n geslote ruimte te bestuur, is 'n gewoel, want al die stof wat in die lug en stof in die lug ontstaan, beteken stof in u longe. Die bestuur van u winkelvak kan 'n deel van die risiko uitskakel, maar dit telkens aan- en uitskakel
TV -afstandsbediening met outomatiese kanaalveranderings met Arduino: 6 stappe
TV -afstandsbediening met outomatiese kanaalverandering met Arduino: Die aanvanklike motivering vir hierdie projek was dat ons kliënt vaskulêre demensie het en wettig blind is. Dit het daartoe gelei dat sy probleme ondervind het om te onthou wanneer en op watter kanale die televisie wys waarvan sy hou, sowel as om te sien
Hack u usb-raketlanseerder in 'n 'outomatiese mikpunt vir outomatiese toerusting': ses stappe
Hack u usb-raketlanseerder in 'n 'outomatiese mikpunt vir outomatiese toerusting': hoe u u usb-raketlanseerder op sy eie kan laat mik. Hierdie instruksies sal u leer om u usb -raketlanseerder in 'n outorent te verander wat IR -teikens kan vind en daarop gemik is. (jammer net IR -teikens)