Mục lục:
- Bước 1: Làm đế và giá đỡ nắp bản lề
- Bước 2: Tạo Cánh tay Servo dài hơn và Gắn Servo
- Bước 3: Tải và chạy Sketch
Video: Con lăn bi tự động với Arduino và một Servo: 3 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:30
Đây là một dự án Arduino và servo nhỏ đơn giản, mất khoảng hai giờ để hoàn thành. Nó sử dụng một servo để nâng một đầu của nắp lọ để quay một quả bóng thép quanh chu vi bên trong. Nó tự khởi động, có thể thay đổi tốc độ và có thể quay hai (hoặc nhiều hơn?) Quả bóng cùng một lúc. Vui vẻ để xây dựng và làm việc. Các thông số thời gian có thể được phát với tốc độ thậm chí còn nhanh hơn. Một số cảm biến hiệu ứng hội trường với một quả cầu từ tính có thể được sử dụng để biến nó thành một cỗ máy thông minh hơn có thể tìm ra các thông số tốt nhất.
Tôi nên đề cập rằng một người nào đó ở đây tại Guidables.com có một máy lăn bi phức tạp hơn:
Vật liệu cần thiết:
Arduino Uno (hoặc bất kỳ Arduino nào)
Lá chắn Servo (tùy chọn)
9g servo
nắp lọ
bóng thép
một số gỗ vụn
Bước 1: Làm đế và giá đỡ nắp bản lề
Phần đế chỉ là một khúc gỗ để gắn miếng gỗ có bản lề vào. Bản lề gỗ phải lớn hơn nắp lọ mà bạn sẽ sử dụng và có đủ chỗ cho bản lề cũng như để gắn servo.
Tôi đã sử dụng bản lề máy bay rc bằng nhựa nhỏ và chỉ dán chúng vào gỗ bản lề và đế.
Bước 2: Tạo Cánh tay Servo dài hơn và Gắn Servo
Để tạo một cánh tay servo dài hơn, tôi chỉ cần gắn một miếng gỗ 5 cm vào cánh tay servo bằng một vài ốc vít và đai ốc nhỏ. Cánh tay servo phải ở 90 độ trên servo khi nó nằm ngang với đế.
Tôi vừa mới dán nóng servo vào giá đỡ bản lề gỗ nhưng tôi thấy rằng nếu bạn để nó chạy lâu hơn một vài phút, servo sẽ làm nóng keo nóng và bong ra khỏi gỗ. Vì vậy, một phương pháp đính kèm tốt hơn được bảo hành.
Bước 3: Tải và chạy Sketch
Tôi đã gắn servo của mình vào chân số 7 bằng cách sử dụng một tấm chắn vì nó rất tiện lợi và chúng chỉ tốn một vài đô la. Nếu bạn không có tấm chắn thì hãy gắn dây tín hiệu servo vào chân 7 trên Arduino, dây màu đỏ vào chân 5v trên Arduino và dây nối đất vào GND trên Arduino. Arduino phải cung cấp đủ dòng điện để vận hành servo. Tôi sử dụng tấm chắn vì nó dễ dàng sử dụng điện áp bên ngoài chỉ cho servo.
Đây là bản phác thảo. Tôi đã viết một quy trình điều khiển tốc độ servo để thay đổi tốc độ của servo vì nó có thể sẽ không hoạt động tốt ở tốc độ tối đa.
Bạn có thể thay đổi thời gian trễ để có được các tốc độ lăn bóng khác nhau. Bạn cũng có thể thay đổi tham số thứ ba của hàm myServo () để thay đổi tốc độ.
//////////////////////////////////////////////////////// //////////////////////////////////////////////////////// ////////////// // được tạo bởi Jim Demello, Đại học Shangluo, 2017
// bạn có thể tự do sử dụng, thao tác, làm bất cứ điều gì bạn muốn với mã này, tên tôi không bắt buộc
// Quy trình này cho phép nội suy bất kỳ số lượng servos nào, chỉ cần thêm các dòng mới nếu số lượng servos vượt quá 4
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#bao gồm
Servo myservo1, myservo2; // tạo đối tượng servo để điều khiển một servo
int servoRead (int servoNumber) {
int servoCurrent;
if (servoNumber == 1) {servoCurrent = myservo1.read (); }
if (servoNumber == 2) {servoCurrent = myservo2.read (); }
trả về 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) {
for (int angle = curAngle; angle <newAngle; angle + = angleInc) {
if (servoNum == 1) myservo1.write (angle);
if (servoNum == 2) myservo2.write (angle);
trì hoãn (incDelay); }
}
else if (curAngle> newAngle) {
for (int angle = curAngle; angle> newAngle; angle - = angleInc) {
if (servoNum == 1) myservo1.write (angle);
if (servoNum == 2) myservo2.write (angle);
trì hoãn (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 va hien tai"); Serial.print (servo3Position); Serial.print (""); Serial.println (servo3Current);
// Serial.print ("Servo4Pos va hien tai"); Serial.print (servo4Position); Serial.print (""); Serial.println (servo4Current);
// Serial.print ("Servo5Pos va hien tai"); Serial.print (servo5Position); Serial.print (""); Serial.println (servo5Current);
// Serial.print ("Servo6Pos va hien tai"); 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
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 va b Offset"); Serial.print (aOffsetTotal); Serial.print (""); Serial.println (bOffsetTotal); chậm trễ (10);
trì hoãn (timeDelay);
} // kết thúc cho
//////////////////////////////////////
// chăm sóc phần còn lại của modulo //
/////////////////////////////////////
if (servo1Position! = servo1Current) servoWrite (servo1, servo1Position);
if (servo2Position! = servo2Current) servoWrite (servo2, servo2Position);
}
int timingDelay = 100;
int servoDelay = 100;
int degGap = 10;
// Đây là độ bắt đầu (phải nhỏ hơn độ cuối)
int degStart = 0;
// Đây là độ kết thúc (phải lớn hơn độ bắt đầu)
int degEnd = 360;
// Đây là bán kính hình tròn
bán kính int = 8;
void setup ()
{
Serial.begin (9600);
chậm trễ (100);
myservo1.attach (7); // gắn servo trên chân 7 vào đối tượng servo
myservo1.write (90);
myservo2.attach (8); // gắn servo trên chân 8 vào đối tượng servo
myservo2.write (90);
chậm trễ (1000); // đợi servo đến đó
interpolate2Servos (1, 90, 2, 90, 10, 60); // Trung lập
chậm trễ (1000);
}
void loop () {
timingDelay = 15; // hoạt động lúc 10
servoDelay = 4;
quay4 ();
// interpolate2Servos (1, 90, 2, 90, 1, 60); // Trung lập
// delay (1000);
// thoát ra (0); // tạm dừng chương trình - nhấn đặt lại để tiếp tục
}
void spin3 () {
interpolate2Servos (1, 90, 2, 110, 1, 60); // Trung lập
trì hoãn (timingDelay);
interpolate2Servos (1, 90, 2, 80, 1, 60); // Trung lập
trì hoãn (timingDelay);
}
void spin2 () {
// interpolate2Servos (1, 80, 2, 90, 1, 50); // Trung lập
trì hoãn (timingDelay);
interpolate2Servos (1, 80, 2, 80, 1, 60); // Trung lập
trì hoãn (timingDelay);
interpolate2Servos (1, 110, 2, 80, 1, 60); // Trung lập
trì hoãn (timingDelay);
// interpolate2Servos (1, 110, 2, 110, 1, 60); // Trung lập
trì hoãn (timingDelay);
}
void spin1 () {
// int deg = (degStart / (180 / 3.14));
float deg = (degStart * 3,141592 / 180); // chuyển đổi độ sang radian
float xPos = 90 + (cos (deg) * bán kính);
// xPos = round (xPos);
float yPos = 90 + (sin (deg) * bán kính);
// yPos = round (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); // Trung lập
myservo1.write (xPos);
myservo2.write (yPos);
trì hoãn (timingDelay);
if (degStart> = degEnd) {
degStart = 0;
nếu (degGap> 180)
degGap = 180;
// degGap = 0;
khác
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);
chậm trễ (100);
}
}
Đề xuất:
Động cơ bước Điều khiển động cơ bước Động cơ bước - Động cơ bước như một bộ mã hóa quay: 11 bước (có hình ảnh)
Động cơ bước Điều khiển động cơ bước Động cơ bước | Động cơ bước như một bộ mã hóa quay: Có một vài động cơ bước nằm xung quanh và muốn làm điều gì đó? Trong Có thể hướng dẫn này, hãy sử dụng động cơ bước làm bộ mã hóa quay để điều khiển vị trí của động cơ bước khác bằng vi điều khiển Arduino. Vì vậy, không cần phải quảng cáo thêm, chúng ta hãy
Nike LED Swoosh! Đây là một trang trí tuyệt vời cho một căn phòng. Đây là một dự án mà mọi người có thể lặp lại.: 5 bước
Nike LED Swoosh! Đây là một trang trí tuyệt vời cho một căn phòng. Đây là một dự án mà mọi người có thể lặp lại. 2x-gỗ 20-20-3000 2x-ván ép 500-1000mm-vít (45mm) 150x-vít (35mm) 30x-scr
Sử dụng màn hình “Xem một lần” để đánh giá một hoạt động trong Moodle: 8 bước
Sử dụng màn hình “Xem một lần” để chấm điểm một hoạt động trong Moodle: Hướng dẫn từng bước này nhằm giúp bạn hiểu một trong những cách có thể để chấm điểm hoạt động trong Moodle. Phương pháp này được gọi là xem đơn và là phương pháp được nhiều giảng viên ưa thích khi chấm điểm trong Moodle. Các giá trị điểm được nhập thông qua ‘Sin
Xây dựng một chiếc đồng hồ ấn tượng như chuông thật cho PC của bạn và một chiếc đồng hồ ấn tượng cho bình chữa cháy.: 3 bước (có hình ảnh)
Xây dựng Đồng hồ ấn tượng bằng chuông thật cho PC của bạn và Đồng hồ ấn tượng cho bình chữa cháy: Một chiếc chuông đồng, một bộ tiếp điện nhỏ và một số thứ nữa và một chiếc chuông thật có thể báo giờ trên máy tính để bàn của bạn. Mặc dù dự án này chạy trên Windows và Mac OS X cũng vậy, tôi đã quyết định cài đặt Ubuntu Linux trên PC mà tôi tìm thấy trong thùng rác và làm việc trên đó: Tôi chưa bao giờ
Từ một ảnh chụp nhanh đến một bức ảnh tuyệt vời: Giai đoạn một: 17 bước
Từ Ảnh chụp nhanh đến Ảnh tuyệt vời: Giai đoạn một: Chụp ảnh con người và địa điểm trong lễ hội khiêu vũ đường phố có thể rất nhiều màu sắc và thú vị. chúng ta sẽ tự hào biết bao về hoàng tử của chúng ta