Daftar Isi:
- Langkah 1: Buat Dudukan Tutup Basis dan Berengsel
- Langkah 2: Buat Lengan Servo Lebih Panjang dan Pasang Servo
- Langkah 3: Muat dan Jalankan Sketsa
Video: Roller Bola Otomatis Dengan Arduino dan Satu Servo: 3 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:54
Ini adalah proyek Arduino dan servo kecil sederhana yang membutuhkan waktu sekitar dua jam untuk diselesaikan. Ini menggunakan servo untuk mengangkat salah satu ujung tutup botol sehingga dapat memutar bola baja di sekitar keliling bagian dalam. Ini dapat dimulai sendiri, dapat mengubah kecepatan dan dapat memutar dua (atau lebih?) bola sekaligus. Menyenangkan untuk membangun dan bekerja. Parameter waktu dapat dimainkan dengan kecepatan yang mungkin lebih cepat. Beberapa sensor efek hall dengan bola magnet dapat digunakan untuk menjadikannya mesin yang lebih cerdas yang dapat menentukan parameter terbaik.
Saya harus menyebutkan bahwa seseorang di sini di instrucables.com memiliki mesin rol bola yang lebih canggih:
Bahan yang dibutuhkan:
Arduino Uno (atau Arduino apa pun)
Perisai servo (opsional)
9g servo
tutup botol
bola baja
beberapa kayu bekas
Langkah 1: Buat Dudukan Tutup Basis dan Berengsel
Basisnya hanya sebongkah kayu untuk memasang potongan kayu yang berengsel. Kayu berengsel harus lebih besar dari tutup botol yang akan Anda gunakan dan memiliki cukup ruang untuk engsel dan untuk memasang servo.
Saya menggunakan engsel pesawat rc plastik kecil dan hanya menempelkannya ke kayu berengsel dan alasnya.
Langkah 2: Buat Lengan Servo Lebih Panjang dan Pasang Servo
Untuk membuat lengan servo yang lebih panjang, saya hanya memasang sepotong kayu 5 sentimeter ke lengan servo dengan beberapa sekrup dan mur kecil. Lengan servo harus berada pada 90 derajat pada servo ketika horizontal ke alas.
Saya baru saja menempelkan servo panas ke dudukan kayu berengsel tetapi saya menemukan bahwa jika Anda membiarkannya berjalan lebih lama dari beberapa menit, servo akan memanaskan lem panas dan melepaskannya dari kayu. Jadi metode lampiran yang lebih baik dijamin.
Langkah 3: Muat dan Jalankan Sketsa
Saya memasang servo saya ke pin 7 menggunakan pelindung karena nyaman dan harganya hanya beberapa dolar. Jika Anda tidak memiliki pelindung maka pasang kabel sinyal servo ke pin 7 di Arduino, kabel merah ke 5v di Arduino dan kabel ground ke GND di Arduino. Arduino harus menyediakan arus yang cukup untuk mengoperasikan servo. Saya menggunakan pelindung karena mudah menggunakan tegangan eksternal hanya untuk servo.
Berikut sketsanya. Saya menulis rutin pengontrol kecepatan servo untuk mengubah kecepatan servo karena mungkin tidak akan bekerja dengan baik pada kecepatan penuh.
Anda dapat mengubah timingDelay untuk mendapatkan kecepatan rolling bola yang berbeda. Anda juga dapat mengubah parameter ketiga dari fungsi myServo() untuk mengubah kecepatan juga.
//////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// ////////////// // dibuat oleh Jim Demello, Universitas Shangluo, 2017
// Anda bebas menggunakan, memanipulasi, melakukan apa pun yang Anda inginkan dengan kode ini, nama saya tidak diperlukan
// Rutin ini memungkinkan sejumlah servo untuk diinterpolasi, cukup tambahkan baris baru jika jumlah servo melebihi 4
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#termasuk
Servo myservo1, myservo2; // buat objek servo untuk mengontrol servo
int servoRead(int servoNumber) {
int servoSaat ini;
if (servoNumber== 1) { servoCurrent = myservo1.read(); }
if (servoNumber== 2) { servoCurrent = myservo2.read(); }
kembali 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);
penundaan (termasuk penundaan); }
}
else if (curAngle > newAngle) {
for(int angle=curAngle;angle > newAngle;angle -= angleInc) {
if (servoNum == 1) myservo1.write(angle);
if (servoNum == 2) myservo2.write(angle);
penundaan (termasuk penundaan); }
}
}
void interpolate2Servos(int servo1, int servo1Position, int servo2, int servo2Posisi, int numberSteps, int timeDelay){
int servo1Arus, servo2Arus;
servo1Saat ini = servoRead(servo1);
servo2Current = servoRead(servo2);
// Serial.print("Servo3Pos dan Arus"); Serial.print(servo3Position); Serial.print(""); Serial.println(servo3Current);
// Serial.print("Servo4Pos dan Arus"); Serial.print(servo4Position); Serial.print(""); Serial.println(servo4Current);
// Serial.print("Servo5Pos dan Arus"); Serial.print(servo5Position); Serial.print(""); Serial.println(servo5Current);
// Serial.print("Servo6Pos dan Arus"); Serial.print(Posisi servo6); 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 = servo1Saat ini;
dOffsetTotal = servo2Current;
untuk (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 dan b Offset "); Serial.print(aOffsetTotal); Serial.print(" ");Serial.println(bOffsetTotal); penundaan (10);
tunda (waktu tunda);
}// akhir untuk
//////////////////////////////////////
// mengurus sisa modulo //
/////////////////////////////////////
if (servo1Position != servo1Current) servoWrite(servo1, servo1Position);
if (servo2Position != servo2Current) servoWrite(servo2, servo2Position);
}
int waktuTunda = 100;
int servoDelay = 100;
int degGap = 10;
// Ini adalah derajat awal (harus lebih kecil dari derajat akhir)
int degMulai = 0;
// Ini adalah derajat akhir (harus lebih besar dari derajat awal)
int degEnd = 360;
//Ini adalah radius lingkaran
int jari-jari = 8;
batalkan pengaturan()
{
Serial.begin(9600);
penundaan(100);
myservo1.attach(7); // pasang servo pada pin 7 ke objek servo
myservo1.write(90);
myservo2.attach(8); // pasang servo pada pin 8 ke objek servo
myservo2.write(90);
penundaan (1000); // menunggu servo sampai di sana
interpolate2Servos(1, 90, 2, 90, 10, 60); // netral
penundaan (1000);
}
lingkaran kosong() {
waktu tunda = 15; // bekerja pada jam 10
servoDelay = 4;
spin4();
//interpolate2Servos(1, 90, 2, 90, 1, 60); // netral
//tunda(1000);
// keluar(0); //jeda program - tekan reset untuk melanjutkan
}
batal spin3() {
interpolate2Servos(1, 90, 2, 110, 1, 60); // netral
tunda (waktu tunda);
interpolate2Servos(1, 90, 2, 80, 1, 60); // netral
tunda (waktu tunda);
}
batal spin2() {
//interpolate2Servos(1, 80, 2, 90, 1, 50); // netral
tunda (waktu tunda);
interpolate2Servos(1, 80, 2, 80, 1, 60); // netral
tunda (waktu tunda);
interpolate2Servos(1, 110, 2, 80, 1, 60); // netral
tunda (waktu tunda);
//interpolate2Servos(1, 110, 2, 110, 1, 60); // netral
tunda (waktu tunda);
}
batalkan putaran1() {
// int deg = (degStart / (180 / 3.14));
float deg = (degStart * 3.141592 / 180); // konversi derajat ke radian
float xPos = 90 + (cos(deg) * radius);
// xPos = bulat(xPos);
float 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); // netral
myservo1.write(xPos);
myservo2.write(yPos);
tunda (waktu tunda);
if (degStart >= degEnd) {
degMulai = 0;
jika (degGap > 180)
degGap = 180;
//degGap = 0;
lain
degGap = degGap + 2;
degGap = degGap - 2;
// degStart = degStart +degGap;
}
degStart = degStart + degGap;
}
batal spin4() {
untuk(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);
penundaan(100);
}
}
Direkomendasikan:
Kipas Pendingin Otomatis Menggunakan Sensor Suhu dan Kelembaban Servo dan DHT11 Dengan Arduino: 8 Langkah
Kipas Pendingin Otomatis Menggunakan Sensor Suhu dan Kelembaban Servo dan DHT11 Dengan Arduino: Dalam tutorial ini kita akan mempelajari cara memulai & putar kipas saat suhu naik di atas level tertentu
Sirkuit On Off Latch Dengan UC. Satu Tombol Tekan. Satu Pin. Komponen Diskrit.: 5 Langkah
Sirkuit On Off Latch Dengan UC. Satu Tombol Tekan. Satu Pin. Komponen Diskrit.: Halo semuanya, sedang mencari sirkuit on/off di internet. Semua yang saya temukan bukanlah yang saya cari. Saya berbicara pada diri sendiri, pasti ada cara untuk itu. Itulah yang saya butuhkan.-Hanya satu tombol tekan untuk menghidupkan dan mematikan.-Hanya harus menggunakan
Pengumpan Tanaman Otomatis WiFi Dengan Reservoir - Pengaturan Budidaya Indoor/Outdoor - Air Tanaman Secara Otomatis Dengan Pemantauan Jarak Jauh: 21 Langkah
Pengumpan Tanaman Otomatis WiFi Dengan Reservoir - Pengaturan Budidaya Indoor/Outdoor - Menanam Tanaman Secara Otomatis Dengan Pemantauan Jarak Jauh: Dalam tutorial ini kami akan mendemonstrasikan cara mengatur sistem pengumpan tanaman indoor/outdoor khusus yang secara otomatis menyirami tanaman dan dapat dipantau dari jarak jauh menggunakan platform Adosia
Injeksi Keyboard / Ketik Otomatis Kata Sandi Anda Dengan Satu Klik!: 4 Langkah (dengan Gambar)
Injeksi Keyboard/Ketik Otomatis Kata Sandi Anda Dengan Satu Klik!: Kata sandi itu sulit… dan mengingat kata sandi yang aman lebih sulit lagi! Selain itu, jika Anda memiliki kata sandi yang rumit, akan membutuhkan waktu untuk mengetik. Tapi jangan takut teman-teman, saya punya solusi untuk ini! Saya membuat mesin ketik otomatis kecil yang akan
Ketapel Otomatis untuk Melempar Makanan Hewan (Anjing, Kucing, Ayam, Dll), Melempar Bola dan Lainnya!: 4 Langkah (dengan Gambar)
Ketapel Otomatis untuk Melempar Makanan Hewan Peliharaan (Anjing, Kucing, Ayam, Dll), Melempar Bola, dan Lainnya!: Halo dan selamat datang di Instructable pertama saya! Anjing kami MENCINTAI makanannya, dia akan benar-benar memakan semuanya dalam hitungan detik. Saya telah menemukan cara untuk memperlambat ini, dari bola dengan makanan di dalamnya hingga melemparkannya ke seluruh halaman belakang. Hebatnya, dia