![Roller Bola Automatik Dengan Arduino dan Satu Servo: 3 Langkah Roller Bola Automatik Dengan Arduino dan Satu Servo: 3 Langkah](https://i.howwhatproduce.com/images/001/image-1633-50-j.webp)
Isi kandungan:
2025 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2025-01-23 15:00
![Image Image](https://i.howwhatproduce.com/images/001/image-1633-52-j.webp)
![](https://i.ytimg.com/vi/dOkQfpNRtf8/hqdefault.jpg)
Ini adalah projek Arduino dan servo kecil sederhana yang memerlukan masa sekitar dua jam untuk disiapkan. Ia menggunakan servo untuk mengangkat salah satu hujung tutup balang sehingga dapat memutar bola keluli di sekeliling keliling. Ia bermula sendiri, dapat mengubah kelajuan dan dapat memutar dua (atau lebih?) Bola sekaligus. Seronok membina dan bekerja. Parameter masa boleh dimainkan dengan kelajuan yang mungkin lebih pantas. Beberapa sensor kesan lorong dengan bola magnet dapat digunakan untuk menjadikannya mesin yang lebih pintar yang dapat mengetahui parameter terbaik.
Saya harus menyebut bahawa seseorang di sini di instruktable.com mempunyai mesin roller bola yang lebih canggih:
Bahan yang diperlukan:
Arduino Uno (atau Arduino apa pun)
Perisai servo (pilihan)
Servo 9g
penutup balang
bola keluli
sebilangan kayu sekerap
Langkah 1: Buat Pemegang Cap Pangkal dan Berengsel
![Buat Pemegang Cap Pangkal dan Berengsel Buat Pemegang Cap Pangkal dan Berengsel](https://i.howwhatproduce.com/images/001/image-1633-53-j.webp)
Pangkalannya hanyalah sebongkah kayu untuk memasang sekeping kayu berengsel. Kayu berengsel harus lebih besar daripada penutup balang yang akan anda gunakan dan mempunyai ruang yang cukup untuk engsel dan memasang servo.
Saya menggunakan engsel pesawat kecil plastik rc dan hanya terpaku pada kayu berengsel dan pangkalan.
Langkah 2: Buat Lengan Servo Lebih Panjang dan Pasang Servo
![Buat Lengan Servo Lebih Panjang dan Pasang Servo Buat Lengan Servo Lebih Panjang dan Pasang Servo](https://i.howwhatproduce.com/images/001/image-1633-54-j.webp)
![Buat Lengan Servo Lebih Panjang dan Pasang Servo Buat Lengan Servo Lebih Panjang dan Pasang Servo](https://i.howwhatproduce.com/images/001/image-1633-55-j.webp)
Untuk membuat lengan servo yang lebih panjang, saya hanya melekatkan sekeping kayu 5 sentimeter ke lengan servo dengan beberapa skru kecil dan mur. Lengan servo harus berada pada 90 darjah pada servo ketika mendatar ke pangkal.
Saya baru saja melekatkan servo ke pemegang kayu berengsel tetapi saya mendapati bahawa jika anda membiarkannya berjalan lebih lama daripada beberapa minit, servo akan memanaskan gam panas dan melepaskannya dari kayu. Oleh itu kaedah lampiran yang lebih baik diperlukan.
Langkah 3: Muatkan dan Jalankan Lakaran
![Muatkan dan Jalankan Lakaran Muatkan dan Jalankan Lakaran](https://i.howwhatproduce.com/images/001/image-1633-56-j.webp)
Saya melampirkan servo saya ke pin 7 menggunakan perisai kerana ia hanya mudah dan harganya hanya beberapa dolar. Sekiranya anda tidak mempunyai perisai, pasangkan wayar isyarat servo ke pin 7 di Arduino, wayar merah hingga 5v di Arduino dan kabel tanah ke GND di Arduino. Arduino harus menyediakan arus yang mencukupi untuk mengendalikan servo. Saya menggunakan perisai kerana senang menggunakan voltan luaran hanya untuk servo.
Inilah lakarannya. Saya menulis rutin pengawal kelajuan servo untuk mengubah kelajuan servo kerana mungkin tidak akan berfungsi dengan baik pada kelajuan penuh.
Anda boleh mengubah timingDelay untuk mendapatkan kelajuan bola yang berbeza. Anda juga boleh mengubah parameter ketiga fungsi myServo () untuk mengubah kelajuan juga.
////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////// // dibuat oleh Jim Demello, Shangluo University, 2017
// anda bebas menggunakan, memanipulasi, melakukan apa sahaja yang anda mahukan dengan kod ini, nama saya tidak diperlukan
// Rutin ini membolehkan sebilangan servo diinterpolasi, tambahkan baris baru jika bilangan servo melebihi 4
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#sertakan
Servo myservo1, myservo2; // buat objek servo untuk mengawal servo
int servoRead (int servoNumber) {
int servoCurrent;
jika (servoNumber == 1) {servoCurrent = myservo1.read (); }
jika (servoNumber == 2) {servoCurrent = myservo2.read (); }
pulangkan servoCurrent;
}
kekosongan servoWrite (int servoNumber, int offset) {
jika (servoNumber == 1) {myservo1.write (mengimbangi); }
jika (servoNumber == 2) {myservo2.write (mengimbangi); }
}
batal myServo (int newAngle, int angleInc, int incDelay, int servoNum) {
int curAngle;
jika (servoNum == 1) {curAngle = myservo1.read (); }
jika (servoNum == 2) {curAngle = myservo2.read (); }
jika (curAngle <newAngle) {
untuk (int angle = curAngle; angle <newAngle; angle + = angleInc) {
jika (servoNum == 1) myservo1.write (sudut);
jika (servoNum == 2) myservo2.write (sudut);
kelewatan (incDelay); }
}
lain jika (curAngle> newAngle) {
untuk (int angle = curAngle; angle> newAngle; angle - = angleInc) {
jika (servoNum == 1) myservo1.write (sudut);
jika (servoNum == 2) myservo2.write (sudut);
kelewatan (incDelay); }
}
}
batal interpolate2Servos (int servo1, int servo1Position, int servo2, int servo2Posisi, nombor intLangkah, int timeDelay) {
int servo1Current, servo2Current;
servo1Current = servoRead (servo1);
servo2Current = servoRead (servo2);
// Serial.print ("Servo3Pos dan Semasa"); Serial.print (servo3Position); Cetakan bersiri (""); Serial.println (servo3Current);
// Serial.print ("Servo4Pos dan Semasa"); Serial.print (servo4Position); Cetakan bersiri (""); Serial.println (servo4Current);
// Serial.print ("Servo5Pos dan Semasa"); Serial.print (servo5Position); Cetakan bersiri (""); Serial.println (servo5Current);
// Serial.print ("Servo6Pos dan Semasa"); Serial.print (servo6Position); Cetakan bersiri (""); Serial.println (servo6Current);
// Serial.println ("");
int cOffset = (servo1Position - servo1Current); cOffset = abs (cOffset) / nomborLangkah;
int dOffset = (servo2Position - servo2Current); dOffset = abs (dOffset) / nomborLangkah;
int cOffsetTotal = 0, dOffsetTotal = 0;
cOffsetTotal = servo1Current;
dOffsetTotal = servo2Current;
untuk (int x = 0; x
jika (servo1Position> servo1Current) {cOffsetTotal = cOffsetTotal + cOffset; }
lain {cOffsetTotal = cOffsetTotal - cOffset; }
jika (servo2Position> servo2Current) {dOffsetTotal = dOffsetTotal + dOffset; }
lain {dOffsetTotal = dOffsetTotal - dOffset; }
jika (servo1Position! = servo1Current) servoWrite (servo1, cOffsetTotal);
jika (servo2Position! = servo2Current) servoWrite (servo2, dOffsetTotal);
// Serial.print ("a dan b Offset"); Serial.print (aOffsetTotal); Serial.print (""); Serial.println (bOffsetTotal); kelewatan (10);
kelewatan (timeDelay);
} // berakhir untuk
//////////////////////////////////////
// jaga baki modulo //
/////////////////////////////////////
jika (servo1Position! = servo1Current) servoWrite (servo1, servo1Position);
jika (servo2Position! = servo2Current) servoWrite (servo2, servo2Position);
}
int timingDelay = 100;
int servoDelay = 100;
int degGap = 10;
// Ini adalah peringkat permulaan (mestilah kurang dari darjah akhir)
int degStart = 0;
// Ini adalah darjah akhir (mesti lebih besar daripada darjah permulaan)
int degEnd = 360;
// Ini adalah jejari bulatan
jejari int = 8;
persediaan tidak sah ()
{
Serial.begin (9600);
kelewatan (100);
myservo1.attach (7); // melekatkan servo pada pin 7 pada objek servo
myservo1.write (90);
myservo2.attach (8); // melekatkan servo pada pin 8 pada objek servo
myservo2.write (90);
kelewatan (1000); // menunggu servo sampai di sana
interpolate2Servos (1, 90, 2, 90, 10, 60); // berkecuali
kelewatan (1000);
}
gelung kosong () {
timingDelay = 15; // bekerja pada pukul 10
servoDelay = 4;
putaran4 ();
// interpolate2Servos (1, 90, 2, 90, 1, 60); // berkecuali
// kelewatan (1000);
// keluar (0); // jeda program - tekan semula untuk meneruskan
}
kekosongan berputar3 () {
interpolate2Servos (1, 90, 2, 110, 1, 60); // berkecuali
kelewatan (timingDelay);
interpolate2Servos (1, 90, 2, 80, 1, 60); // berkecuali
kelewatan (timingDelay);
}
kekosongan putaran2 () {
// interpolate2Servos (1, 80, 2, 90, 1, 50); // berkecuali
kelewatan (timingDelay);
interpolate2Servos (1, 80, 2, 80, 1, 60); // berkecuali
kelewatan (timingDelay);
interpolate2Servos (1, 110, 2, 80, 1, 60); // berkecuali
kelewatan (timingDelay);
// interpolate2Servos (1, 110, 2, 110, 1, 60); // berkecuali
kelewatan (timingDelay);
}
kekosongan berputar1 () {
// int deg = (degStart / (180 / 3.14));
float deg = (degStart * 3.141592 / 180); // menukar darjah ke radian
terapung xPos = 90 + (cos (deg) * radius);
// xPos = bulat (xPos);
terapung yPos = 90 + (sin (deg) * radius);
// yPos = bulat (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); // berkecuali
myservo1.write (xPos);
myservo2.write (yPos);
kelewatan (timingDelay);
jika (degStart> = degEnd) {
degStart = 0;
jika (degGap> 180)
degGap = 180;
// degGap = 0;
yang lain
degGap = degGap + 2;
degGap = degGap - 2;
// degStart = degStart + degGap;
}
degStart = degStart + degGap;
}
kekosongan berputar4 () {
untuk (int i = 0; i <= 360; i ++) {
apungan j = 20 * (cos ((3.14 * i) / 180)) + 90;
apungan k = 20 * (sin ((3.14 * i) / 180)) + 90;
myservo1.write (j);
myservo2.write (k);
Cetakan bersiri (j);
Cetakan bersiri (",");
Bersiri.println (k);
kelewatan (100);
}
}
Disyorkan:
Bola Pingpong LED-Bola: 16 Langkah (dengan Gambar)
![Bola Pingpong LED-Bola: 16 Langkah (dengan Gambar) Bola Pingpong LED-Bola: 16 Langkah (dengan Gambar)](https://i.howwhatproduce.com/images/005/image-14125-j.webp)
LED Ball Tennis Ball-Ball: BackstorySetelah membina panel rata bola tenis meja beberapa saat yang lalu, saya mula bertanya-tanya Adakah mungkin membuat panel 3D dari bola tenis meja. Digabungkan dengan minat saya untuk membuat " seni " dari bentuk geometri berulang I
Pemarkahan Automatik untuk Permainan Bola Skee Kecil: 10 Langkah (dengan Gambar)
![Pemarkahan Automatik untuk Permainan Bola Skee Kecil: 10 Langkah (dengan Gambar) Pemarkahan Automatik untuk Permainan Bola Skee Kecil: 10 Langkah (dengan Gambar)](https://i.howwhatproduce.com/images/007/image-20196-j.webp)
Pemberian Skor Automatik untuk Permainan Skee-Ball Kecil: Permainan Skee-Ball buatan rumah dapat sangat menyenangkan bagi seisi keluarga, tetapi kekurangannya adalah kurangnya skor automatik. Saya sebelum ini telah membina mesin Skee-Ball yang menyalurkan bola permainan ke saluran yang berasingan berdasarkan sc
Litar Off Latch Dengan UC. Butang Satu Tekan. Satu Pin. Komponen diskrit: 5 Langkah
![Litar Off Latch Dengan UC. Butang Satu Tekan. Satu Pin. Komponen diskrit: 5 Langkah Litar Off Latch Dengan UC. Butang Satu Tekan. Satu Pin. Komponen diskrit: 5 Langkah](https://i.howwhatproduce.com/images/010/image-28989-j.webp)
Litar Off Latch Dengan UC. Butang Satu Tekan. Satu Pin. Komponen diskrit: Halo semua, sedang mencari litar hidup / mati di jaring. Semua yang saya dapati bukanlah yang saya cari. Saya bercakap dengan diri sendiri, semestinya ada cara untuk itu. Itulah yang saya perlukan.-Hanya satu butang tekan untuk melakukan dan mematikan. -Harus menggunakan
Pengumpan Tumbuhan Automatik WiFi Dengan Takungan - Persediaan Penanaman Dalaman / Luaran - Tumbuhan Air Secara Automatik Dengan Pemantauan Jauh: 21 Langkah
![Pengumpan Tumbuhan Automatik WiFi Dengan Takungan - Persediaan Penanaman Dalaman / Luaran - Tumbuhan Air Secara Automatik Dengan Pemantauan Jauh: 21 Langkah Pengumpan Tumbuhan Automatik WiFi Dengan Takungan - Persediaan Penanaman Dalaman / Luaran - Tumbuhan Air Secara Automatik Dengan Pemantauan Jauh: 21 Langkah](https://i.howwhatproduce.com/images/002/image-3511-13-j.webp)
Pengumpan Tanaman Automatik WiFi Dengan Takungan - Persediaan Penanaman Dalaman / Luaran - Tumbuhan Air Secara Automatik Dengan Pemantauan Jauh: Dalam tutorial ini kita akan menunjukkan cara mengatur sistem pengumpan tanaman dalaman / luaran khusus yang menyiram tanaman secara automatik dan dapat dipantau dari jarak jauh menggunakan platform Adosia
Robot Bola Sepak (atau Bola Sepak, Jika Anda Hidup di Sebelah Kolam): 9 Langkah (dengan Gambar)
![Robot Bola Sepak (atau Bola Sepak, Jika Anda Hidup di Sebelah Kolam): 9 Langkah (dengan Gambar) Robot Bola Sepak (atau Bola Sepak, Jika Anda Hidup di Sebelah Kolam): 9 Langkah (dengan Gambar)](https://i.howwhatproduce.com/images/004/image-10737-j.webp)
Robot Bola Sepak (atau Bola Sepak, Sekiranya Anda Hidup di Sebelah Kolam): Saya mengajar robotik di tinker-robot-labs.tk Murid saya telah mencipta robot ini yang bermain bola sepak (atau bola sepak, jika anda tinggal di seberang kolam). Tujuan saya dengan projek ini adalah untuk mengajar anak-anak bagaimana berinteraksi dengan robot melalui Bluetooth. Kami