Πίνακας περιεχομένων:
- Βήμα 1: Φτιάξτε τη βάση και το μεντεσέ καπάκι
- Βήμα 2: Κάντε μακρύτερο βραχίονα σερβο και συνδέστε το σερβο
- Βήμα 3: Φόρτωση και εκτέλεση σκίτσου
Βίντεο: Αυτοματοποιημένος κύλινδρος μπάλας με Arduino και One Servo: 3 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:32
Αυτό είναι ένα απλό μικρό έργο Arduino και servo που διαρκεί περίπου δύο ώρες για να ολοκληρωθεί. Χρησιμοποιεί ένα σερβο για να σηκώσει το ένα άκρο του καπακιού ενός βάζου έτσι ώστε να περιστρέψει μια χαλύβδινη μπάλα γύρω από την εσωτερική περιφέρεια. Ξεκινάει μόνος του, μπορεί να αλλάξει ταχύτητα και μπορεί να γυρίσει δύο (ή περισσότερες;) μπάλες ταυτόχρονα. Διασκεδαστικό να χτίζεις και να δουλεύεις. Οι παράμετροι χρονισμού μπορούν να παιχτούν με πιθανώς ακόμη μεγαλύτερες ταχύτητες. Μερικοί αισθητήρες φαινομένου αίθουσας με μαγνητική σφαίρα θα μπορούσαν να χρησιμοποιηθούν για να το κάνουν πιο έξυπνο μηχάνημα που μπορεί να βρει τις καλύτερες παραμέτρους.
Θα πρέπει να αναφέρω ότι κάποιος εδώ στο instructables.com έχει μια πιο εξελιγμένη μηχανή κυλίνδρων:
Χρειαζονται ΥΛΙΚΑ:
Arduino Uno (ή οποιοδήποτε Arduino)
Servo shield (προαιρετικό)
Σερβο 9γρ
καπάκι βάζου
χαλύβδινη μπάλα
λίγο ξύλο παλιοσίδερα
Βήμα 1: Φτιάξτε τη βάση και το μεντεσέ καπάκι
Η βάση είναι μόνο ένα κομμάτι ξύλου για να τοποθετήσετε το αρθρωτό κομμάτι ξύλου. Το μεντεσέ ξύλο πρέπει να είναι μεγαλύτερο από ένα καπάκι βάζου που θα χρησιμοποιήσετε και να έχει αρκετό χώρο για τους μεντεσέδες και για την τοποθέτηση του σερβο.
Χρησιμοποίησα μικρούς πλαστικούς μεντεσέδες rc αεροσκαφών και απλά τους κόλλησα με το μεντεσέ ξύλο και τη βάση.
Βήμα 2: Κάντε μακρύτερο βραχίονα σερβο και συνδέστε το σερβο
Για να φτιάξω ένα μακρύτερο σερβοβραχίονα, απλώς στερέωσα ένα κομμάτι ξύλου 5 εκατοστών στον βραχίονα σερβο, με μερικές μικρές βίδες και παξιμάδια. Ο βραχίονας σερβο πρέπει να είναι 90 μοίρες στο σερβο όταν είναι οριζόντιος στη βάση.
Μόλις κόλλησα ζεστά το σερβο στη βάση μεντεσέ ξύλου, αλλά διαπίστωσα ότι αν το αφήσετε να λειτουργήσει για περισσότερο από λίγα λεπτά, το σερβο θα ζεστάνει τη ζεστή κόλλα και θα το αφήσει από το ξύλο. Επομένως, μια καλύτερη μέθοδος προσάρτησης είναι εγγυημένη.
Βήμα 3: Φόρτωση και εκτέλεση σκίτσου
Έβαλα το σερβο μου στο pin 7 χρησιμοποιώντας ασπίδα γιατί είναι απλώς βολικό και κοστίζουν μόνο μερικά δολάρια. Εάν δεν έχετε ασπίδα, τότε συνδέστε το καλώδιο σήματος σερβο στην ακίδα 7 του Arduino, το κόκκινο καλώδιο στα 5v στο Arduino και το καλώδιο γείωσης στο GND στο Arduino. Το arduino πρέπει να παρέχει αρκετό ρεύμα για να λειτουργεί το σερβο. Χρησιμοποιώ την ασπίδα επειδή είναι εύκολο να χρησιμοποιήσω μια εξωτερική τάση μόνο για το σερβο.
Εδώ είναι το σκίτσο. Έγραψα μια ρουτίνα ελεγκτή ταχύτητας σερβο για να αλλάξω την ταχύτητα του σερβο γιατί πιθανότατα δεν θα λειτουργήσει καλά σε πλήρη ταχύτητα.
Μπορείτε να αλλάξετε το timingDelay για να έχετε διαφορετικές ταχύτητες κύλισης της μπάλας. Μπορείτε επίσης να αλλάξετε την τρίτη παράμετρο της συνάρτησης myServo () για να αλλάξετε επίσης ταχύτητα.
//////////////////////////////////////////////// //////////////////////////////////////////////// /////////////// // δημιουργήθηκε από τον Jim Demello, Πανεπιστήμιο Shangluo, 2017
// είστε ελεύθεροι να χρησιμοποιείτε, να χειρίζεστε, να κάνετε ό, τι θέλετε με αυτόν τον κωδικό, το όνομά μου δεν απαιτείται
// Αυτή η ρουτίνα επιτρέπει την παρεμβολή οποιουδήποτε αριθμού servos, απλώς προσθέστε νέες γραμμές εάν ο αριθμός των servos υπερβαίνει τα 4
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#περιλαμβάνω
Servo myservo1, myservo2; // δημιουργία αντικειμένου σερβο για τον έλεγχο ενός σερβο
int servoRead (int servoNumber) {
int servoCurrent;
if (servoNumber == 1) {servoCurrent = myservo1.read (); }
if (servoNumber == 2) {servoCurrent = myservo2.read (); }
επιστροφή 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 (); }
εάν (curAngle <newAngle) {
για (int angle = curAngle; angle <newAngle; angle += angleInc) {
εάν (servoNum == 1) myservo1.write (γωνία);
εάν (servoNum == 2) myservo2.write (γωνία);
καθυστέρηση (incDelay)? }
}
else if (curAngle> newAngle) {
για (int angle = curAngle; angle> newAngle; angle -= angleInc) {
εάν (servoNum == 1) myservo1.write (γωνία);
εάν (servoNum == 2) myservo2.write (γωνία);
καθυστέρηση (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 and Current"); Serial.print (servo3Position); Serial.print (""); Serial.println (servo3Current);
// Serial.print ("Servo4Pos and Current"); Serial.print (servo4Position); Serial.print (""); Serial.println (servo4Current);
// Serial.print ("Servo5Pos and Current"); Serial.print (servo5Position); Serial.print (""); Serial.println (servo5Current);
// Serial.print ("Servo6Pos and 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;
για (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 and b Offset"); Serial.print (aOffsetTotal); Serial.print (""); Serial.println (bOffsetTotal); καθυστέρηση (10)?
καθυστέρηση (timeDelay)?
} // τέλος για
//////////////////////////////////////
// φροντίστε τα υπολείμματα modulo //
/////////////////////////////////////
if (servo1Position! = servo1Current) servoWrite (servo1, servo1Position);
εάν (servo2Position! = servo2Current) servoWrite (servo2, servo2Position);
}
int timingDelay = 100;
int servoDelay = 100;
int degGap = 10;
// Αυτό είναι το πτυχίο εκκίνησης (πρέπει να είναι μικρότερο από το τελικό πτυχίο)
int degStart = 0;
// Αυτοί είναι οι βαθμοί λήξης (πρέπει να είναι μεγαλύτεροι από τον βαθμό εκκίνησης)
int degEnd = 360;
// Αυτή είναι η ακτίνα του κύκλου
int ακτίνα = 8;
void setup ()
{
Serial.begin (9600);
καθυστέρηση (100)?
myservo1.attach (7); // συνδέει το σερβο στο pin 7 στο σερβο αντικείμενο
myservo1.write (90);
myservo2.attach (8); // συνδέει το σερβο στο pin 8 στο σερβο αντικείμενο
myservo2.write (90);
καθυστέρηση (1000)? // περιμένει τον σερβο για να φτάσει εκεί
interpolate2Servos (1, 90, 2, 90, 10, 60); // ουδέτερο
καθυστέρηση (1000)?
}
void loop () {
timingDelay = 15; // λειτουργεί στις 10
servoDelay = 4;
spin4 ();
// interpolate2Servos (1, 90, 2, 90, 1, 60); // ουδέτερο
// καθυστέρηση (1000);
// έξοδος (0); // παύση προγράμματος - πατήστε επαναφορά για να συνεχίσετε
}
void spin3 () {
interpolate2Servos (1, 90, 2, 110, 1, 60); // ουδέτερο
καθυστέρηση (timingDelay)?
interpolate2Servos (1, 90, 2, 80, 1, 60); // ουδέτερο
καθυστέρηση (timingDelay)?
}
void spin2 () {
// interpolate2Servos (1, 80, 2, 90, 1, 50); // ουδέτερο
καθυστέρηση (timingDelay)?
interpolate2Servos (1, 80, 2, 80, 1, 60); // ουδέτερο
καθυστέρηση (timingDelay)?
interpolate2Servos (1, 110, 2, 80, 1, 60); // ουδέτερο
καθυστέρηση (timingDelay)?
// interpolate2Servos (1, 110, 2, 110, 1, 60); // ουδέτερο
καθυστέρηση (timingDelay)?
}
void spin1 () {
// int deg = (degStart / (180 / 3.14));
float deg = (degStart * 3.141592 / 180); // μετατροπή βαθμών σε ακτίνια
float xPos = 90 + (cos (deg) * radius);
// xPos = στρογγυλό (xPos);
float yPos = 90 + (sin (deg) * radius);
// yPos = στρογγυλό (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); // ουδέτερο
myservo1.write (xPos);
myservo2.write (yPos);
καθυστέρηση (timingDelay)?
εάν (degStart> = degEnd) {
degStart = 0;
εάν (degGap> 180)
degGap = 180;
// degGap = 0;
αλλού
degGap = degGap + 2;
degGap = degGap - 2;
// degStart = degStart +degGap;
}
degStart = degStart + degGap;
}
void spin4 () {
για (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);
καθυστέρηση (100)?
}
}
Συνιστάται:
Ρομπότ παρακολούθησης μπάλας: 8 βήματα
Ρομπότ παρακολούθησης μπάλας: Έτσι σε αυτό, θα σας πω πώς να φτιάξετε ένα ρομπότ παρακολούθησης μπάλας που είναι ένα ρομπότ να αναγνωρίζει μια μπάλα και να την ακολουθεί. Είναι βασικά μια αυτοματοποιημένη τεχνική επιτήρησης που μπορεί να χρησιμοποιηθεί στον σύγχρονο κόσμο. Λοιπόν, απλά αφήστε μας να ξεκινήσουμε και να ξεκινήσουμε να χτίζουμε
Σύνδεση επεξεργασίας και Arduino και Make 7 Segment και Servo GUI Controller: 4 βήματα
Connecting Processing and Arduino and Make 7 Segment and Servo GUI Controller: Για ορισμένα έργα που κάνατε πρέπει να χρησιμοποιήσετε το Arduino καθώς παρέχει μια εύκολη πλατφόρμα πρωτοτύπων, αλλά η εμφάνιση γραφικών σε σειριακή οθόνη του Arduino μπορεί να διαρκέσει πολύ και είναι ακόμη και δύσκολο να γίνει. Μπορείτε να εμφανίσετε γραφήματα στο Arduino Serial Monitor bu
Κύλινδρος μήτρας LED: 8 βήματα (με εικόνες)
Κύλινδρος μήτρας LED: Αυτή η μήτρα LED χρησιμοποιεί τυπικές λωρίδες LED WS2812b για να κατασκευάσει μια μήτρα με κυλινδρικό σχήμα και ωραίο ξύλινο καπλαμά. Φαρμάκι: 790x384 χαρτόνι 1,5 mm (άλλα μεγέθη είναι επίσης δυνατά, αλλά τα δεδομένα CAD πρέπει να αλλάξουν) 100 WS2812b LED από LED
Ανιχνευτής ταχύτητας μπάλας γκολφ: 5 βήματα
Ανιχνευτής ταχύτητας μπάλας γκολφ: Δεν είμαι παίκτης του γκολφ, αλλά πρέπει να παίζω κάθε τόσο. Έχω ακούσει το χτύπημα της μπάλας πιο πολύ αφορά την ταχύτητα του κλαμπ και του γκολφ αλλά δεν είχα ιδέα πόσο γρήγορα χτυπούσα. Είχα έναν αισθητήρα ραντάρ OmniPreSense από το Mouser και κατέβασα μια εφαρμογή που έκαναν
Αυτοματοποιημένος φωτισμός με χρήση DMX και Perl: 6 βήματα
Αυτοματοποιημένος φωτισμός με χρήση DMX και Perl: Γιατί να αυτοματοποιήσετε τα φώτα σας; Λοιπόν, για να είμαι ειλικρινής, το μεγαλύτερο μέρος του σπιτιού μου είναι αυτοματοποιημένο, οπότε φάνηκε το προφανές. Υπάρχουν πολλά οφέλη από την αυτοματοποίηση τμημάτων του σπιτιού σας, συγκεκριμένα ο φωτισμός απλώς διευκολύνει τη ζωή, τα φώτα ανάβουν όταν