Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Lengan Robot Sederhana dan Cerdas Menggunakan Arduino

Komponen dan persediaan

Arduino UNO
× 1
Servo Mikro
× 5
Potensiometer
× 5
Breadboard (generik)
× 1

Tentang proyek ini

Dalam tutorial ini, saya akan membuat lengan robot sederhana yang akan dikendalikan menggunakan master arm. Lengan akan mengingat gerakan dan bermain secara berurutan. Konsepnya tidak baru. Saya mendapat Ide dari "lengan robot mini -oleh Stoerpeak" Saya ingin membuat ini untuk waktu yang lama, tetapi saat itu saya benar-benar noob dan tidak memiliki pengetahuan tentang pemrograman. Sekarang akhirnya saya membangun satu, Tetap sederhana, murah dan berbagi dengan Anda semua.

Jadi mari kita mulai....

Langkah 1:Hal yang Anda Butuhkan

Berikut adalah daftar hal-hal yang Anda perlukan :-

1. Motor servo x 5 ( Amazon Link)

2. Potensiometer x 5 ( Amazon Link)

3.Arduino UNO. (Tautan Amazon)

4. Baterai. (Saya menggunakan adaptor 5v)

5. Papan tempat memotong roti. (Tautan Amazon)

6. Karton/Kayu/Sun-board/akrilik apa saja yang tersedia atau mudah ditemukan.

Dan Anda juga perlu menginstal Arduino IDE.

Langkah 2:Membuat Lengan

Disini saya menggunakan stik es krim untuk membuat lengannya. Anda dapat menggunakan bahan apa pun yang tersedia untuk Anda. Dan Anda dapat mencoba desain mekanis yang berbeda untuk membuat lengan yang lebih baik. desain saya tidak terlalu stabil.

Saya hanya menggunakan selotip dua sisi untuk menempelkan servo ke stik es krim dan mengencangkannya menggunakan sekrup.

Untuk lengan Master saya menempelkan potensiometer ke stik es krim dan membuat lengan.

Mengacu pada gambar akan memberi Anda Ide yang lebih baik.

Saya telah memasang semuanya pada papan kanvas ukuran A4 yang digunakan sebagai alas.

Langkah 3:Membuat Koneksi

Pada langkah ini kita akan membuat semua koneksi yang diperlukan, Lihat gambar di atas.

  • Pertama sambungkan semua servo secara paralel ke catu daya ( Kabel Merah ke +ve dan Kabel Hitam atau Coklat ke Gnd)
  • Selanjutnya sambungkan kabel sinyal yaitu kabel Kuning atau Oranye ke pin PWM arduino.
  • Sekarang hubungkan potensiometer ke +5v dan Gnd arduino secara paralel.
  • Hubungkan terminal tengah ke pin Analog ardunio.

Di sini Pin Digital 3, 5, 6, 9 &10 digunakan untuk mengontrol servos

Pin Analog A0 hingga A4 digunakan untuk Input dari Potensiometer.

Servo yang terhubung ke pin 3 akan dikontrol oleh potensiometer yang terhubung ke A0

Servo yang terhubung ke pin 5 akan dikendalikan oleh pot di A1, dan seterusnya....

Catatan:- Meskipun Servo tidak ditenagai oleh arduino, Pastikan untuk menghubungkan Gnd servo ke arduino atau lengan tidak akan berfungsi.

Langkah 4:Pengodean

Logika kode ini cukup sederhana, nilai potensiometer disimpan dalam array, catatan kemudian dilalui menggunakan loop for dan servos melakukan langkah-langkah sesuai nilai. Anda dapat melihat tutorial ini yang saya gunakan untuk referensi "Kontrol &Memori Servo Potensiometer Arduino"

Kode :- (File yang dapat diunduh terlampir di bawah.)

  • Pertama kita akan mendeklarasikan semua variabel yang diperlukan secara global sehingga kita dapat menggunakannya di seluruh program. Tidak diperlukan penjelasan khusus untuk ini.
#include 
//Objek Servo
Servo Servo_0;
Servo Servo_1;
Servo Servo_2;
Servo Servo_3;
Servo Servo_4;
//Objek Potensiometer
int Pot_0;
int Pot_1;
int Pot_2;
int Pot_3;
int Pot_4;
//Variabel untuk menyimpan Posisi Servo
int Servo_0_Pos;
int Servo_1_Pos;
int Servo_2_Pos;
int Servo_3_Pos;
int Servo_4_Pos;
//Variabel untuk menyimpan nilai posisi sebelumnya
int Prev_0_Pos;
int Sebelumnya_1_Pos;
int Sebelumnya_2_Pos;
int Sebelumnya_3_Pos;
int Prev_4_Pos;
//Variabel untuk menyimpan nilai posisi saat ini
int Current_0_Pos;
int Current_1_Pos;
int Current_2_Pos;
int Current_3_Pos;
int Current_4_Pos;
int Servo_Position; //Menyimpan sudut
int Servo_Number; //Tidak menyimpan servo
int Storage[600]; //Array untuk menyimpan data (Meningkatkan ukuran array akan menghabiskan lebih banyak memori)
int Index =0; // Indeks array dimulai dari posisi 0
char data =0; //variabel untuk menyimpan data dari input serial.
  • Sekarang kita akan menulis fungsi setup, dimana kita mengatur pin dan fungsinya. Ini adalah fungsi utama yang dijalankan terlebih dahulu.
pengaturan batal() 
{
Serial.begin(9600); //Untuk komunikasi serial antara arduino dan IDE.
//Objek servo dilampirkan ke pin PWM.
Servo_0.attach(3);
Servo_1.attach(5);
Servo_2.attach(6);
Servo_3.attach(9);
Servo_4.attach(10);
//Servo disetel ke posisi 100 saat inisialisasi.
Servo_0.write(100);
Servo_1.write(100);
Servo_2.write(100);
Servo_3.write(100);
Servo_4. write(100);
Serial.println("Tekan 'R' untuk Merekam dan 'P' untuk memutar");
}

Sekarang kita harus membaca nilai potensiometer menggunakan pin Analog Input dan memetakannya untuk mengontrol servos. Untuk ini kita akan mendefinisikan sebuah fungsi dan menamakannya Map_Pot();, Anda dapat menamainya apa pun yang Anda inginkan. Ini adalah fungsi yang ditentukan pengguna.

void Map_Pot()
{
/* Servo berputar 180 derajat
tetapi menggunakannya untuk membatasi bukanlah
ide yang baik karena membuat servos berdengung terus
yang mengganggu jadi kami membatasi servo untuk bergerak
antara:1-179 */
Pot_0 =analogRead(A0); // Baca input dari pot dan simpan di Variabel Pot_0.
Servo_0_Pos =map(Pot_0, 0, 1023, 1, 179); //Petakan servo sesuai nilai antara 0 hingga 1023
Servo_0.write(Servo_0_Pos); //Pindahkan servo ke posisi tersebut.

Pot_1 =analogRead(A1);
Servo_1_Pos =map(Pot_1, 0, 1023, 1, 179);
Servo_1.write (Servo_1_Pos);

Pot_2 =analogRead(A2);
Servo_2_Pos =peta(Pot_2, 0, 1023, 1, 179);
Servo_2.write(Servo_2_Pos);

Pot_3 =analogRead(A3);
Servo_3_Pos =peta(Pot_3, 0, 1023, 1, 179);
Servo_3.write(Servo_3_Pos);

Pot_4 =analogRead(A4);
Servo_4_Pos =peta(Pot_4, 0, 1023 , 1, 179);
Servo_4.write(Servo_4_Pos);
}
  • Sekarang kita akan menulis fungsi loop:
void loop() 
{
Map_Pot(); //Fungsi pemanggilan untuk membaca nilai pot

while (Serial.available()> 0)
{
data =Serial.read();
if (data =='R')
Serial.println("Merekam Gerakan...");
if (data =='P')
Serial.println("Memutar Gerakan yang Direkam.. .");
}
if (data =='R') //Jika 'R' dimasukkan, mulailah merekam.
{
//Menyimpan nilai dalam a variabel
Sebelumnya_0_Pos =Servo_0_Pos;
Sebelumnya_1_Pos =Servo_1_Pos;
Sebelumnya_2_Pos =Servo_2_Pos;
Sebelumnya_3_Pos =Servo_3_Pos;
Sebelumnya_4_Pos =Servo<_4_Pos
Pot; (); // Fungsi peta dipanggil untuk perbandingan

if (abs(Prev_0_Pos ==Servo_0_Pos)) // nilai absolut diperoleh dengan membandingkan
{
Servo_0.write(Servo_0_Pos); // Jika nilai cocok servo direposisi
if (Current_0_Pos !=Servo_0_Pos) // Jika nilai tidak cocok
{
Storage[Index] =Servo_0_Pos + 0; // Nilai ditambahkan ke array
Index++; // Nilai indeks bertambah 1
}
Current_0_Pos =Servo_0_Pos;
}
/* Demikian pula perbandingan nilai dilakukan untuk semua servo, +100 ditambahkan setiap entri
sebagai nilai diferensial. */
if (abs(Prev_1_Pos ==Servo_1_Pos))
{
Servo_1.write(Servo_1_Pos);
if (Current_1_Pos !=Servo_1_Pos)
{
Penyimpanan[Indeks] =Servo_1_Pos + 100;
Index++;
}
Current_1_Pos =Servo_1_Pos;
}

if (abs(Prev_2_Pos ==Servo_2_Pos))
{
Servo_2.write(Servo_2_Pos);
if (Current_2_Pos !=Servo_2_Pos)
{
Storage[Index] =Servo_2_Pos + 200;
Index++;
}
Current_2_Pos =Servo_2_Pos;
}

if (abs(Prev_3_Pos ==Servo_3_Pos))
{
Servo_3.write(Servo_3_Pos);
if (Current_3_Pos !=Servo_3_Pos)
{
Storage[Index] =Servo_3_Pos + 300;
Indeks++;
}
Current_3_Pos =Servo_3_Pos;
}
if (abs(Prev_4_Pos ==Servo_4_Pos))
{
Servo_4.write(Servo_4_Pos);
if (Current_4_Pos !=Servo_4_Pos)
{
Penyimpanan[Indeks] =Servo_4_Pos + 400;
Index++;
}
Current_4_Pos =Servo_4_Pos;
}
/* Nilai dicetak pada monitor serial, '\t' untuk menampilkan nilai dalam format tabel */
Serial.print(Servo_0_Pos);
Serial.print("\t");
Serial.print(Servo_1_Pos);
Serial.print("\t");
Serial.print(Servo_2_Pos);
Serial.print("\t");
Serial.print(Servo_3_Pos);
Serial.print("\t");
Serial.println(Servo_4_Pos);
Serial.print("Indeks =");
Serial.println(Indeks);
tunda(50);
}
if (data =='P') //IF 'P' dimasukkan , Mulai memutar gerakan yang direkam.
{
for (int i =0; i {
Servo_Number =Storage[i] / 100; // Menemukan jumlah servo
Servo_Position =Storage[i] % 100; // Mencari posisi servo
switch(Servo_Number)
{
case 0:
Servo_0.write(Servo_Position);
break;
case 1:
Servo_1.write(Servo_Position);
break;
case 2:
Servo_2.write(Servo_Position);
break;
case 3:
Servo_3.write(Servo_Position);
break;
case 4:
Servo_4.write(Servo_Position);
break;
}
delay(50);
}
}
}
  • Setelah kode siap, Sekarang unggah ke papan arduino.

Lengan Pintar siap bekerja. Fungsinya belum semulus yang dibuat Stoerpeak.

Jika Anda dapat membuat kode lebih baik atau memiliki saran untuk saya, beri tahu saya di bagian komentar.

Dengan itu, Mari beralih ke pengujian....

Record-Play.ino

Langkah 5:Menguji

Setelah berhasil mengunggah kode ke papan, Buka 'Serial Monitor' Anda dapat menemukannya di opsi Alat. Ketika Serial monitor dimulai, arduino akan direset. Sekarang Anda dapat mengontrol lengan robot menggunakan lengan master. Tapi tidak ada yang direkam.

Untuk mulai merekam, Masukkan 'R' di monitor sekarang Anda dapat melakukan gerakan yang ingin Anda rekam.

Setelah gerakan selesai, Anda harus memasukkan 'P' untuk memainkan gerakan yang direkam. Servo akan terus melakukan gerakan selama papan tidak disetel ulang.

Semoga Anda menyukai proyek ini.

Terima kasih...

Kode

  • Rekam-Play.ino
  • Cuplikan kode #1
  • Cuplikan kode #2
  • Cuplikan kode #3
  • Cuplikan kode #4
Record-Play.inoArduino
Kesalahan saat membuka file.
Cuplikan kode #1Teks biasa
#include //Servo ObjectsServo Servo_0;Servo Servo_1;Servo Servo_2;Servo Servo_3;Servo Servo_4;//Potentiometer Objectsint Pot_0;int Pot_1;int Pot_2; int Pot_3;int Pot_4;//Variabel untuk menyimpan Posisi Servoint Servo_0_Pos;int Servo_1_Pos;int Servo_2_Pos;int Servo_3_Pos;int Servo_4_Pos;//Variabel untuk menyimpan nilai posisi sebelumnya di Prev_0_Pos; int Sebelumnya_1_Pos; int Sebelumnya_2_Pos;int Sebelumnya_3_Pos; int Prev_4_Pos;//Variabel untuk menyimpan nilai posisi saat iniint Current_0_Pos; int Saat Ini_1_Pos; int Saat Ini_2_Pos; int Current_3_Pos;int Current_4_Pos;int Servo_Position; //Menyimpan sudut int Servo_Number; //Tidak menyimpan Servoint Storage[600]; //Array untuk menyimpan data (Meningkatkan ukuran array akan menghabiskan lebih banyak memori)int Index =0; // Indeks array dimulai dari data posisi ke 0 =0; //variabel untuk menyimpan data dari input serial.
Cuplikan kode #2Teks biasa
pengaturan batal() { Serial.begin(9600); //Untuk komunikasi serial antara arduino dan IDE. // Objek servo dilampirkan ke pin PWM. Servo_0.attach(3); Servo_1.attach(5); Servo_2.attach(6); Servo_3.attach (9); Servo_4.attach(10); //Servo diatur ke posisi 100 saat inisialisasi. Servo_0.write(100); Servo_1.tulis(100); Servo_2.write(100); Servo_3.write(100); Servo_4.write(100); Serial.println("Tekan 'R' untuk Merekam dan 'P' untuk memutar"); }
Cuplikan kode #3Teks biasa
void Map_Pot(){ /* Servo berputar 180 derajat tetapi menggunakannya untuk membatasi bukanlah ide yang baik karena membuat servos berdengung terus menerus yang mengganggu sehingga kami membatasi servo untuk bergerak antara:1-179 * / Pot_0 =analogRead(A0); // Baca input dari pot dan simpan di Variabel Pot_0. Servo_0_Pos =peta(Pot_0, 0, 1023, 1, 179); //Peta servo sesuai nilai antara 0 hingga 1023 Servo_0.write(Servo_0_Pos); //Pindahkan servo ke posisi itu. Pot_1 =analogRead(A1); Servo_1_Pos =peta(Pot_1, 0, 1023, 1, 179); Servo_1.write(Servo_1_Pos); Pot_2 =analogBaca(A2); Servo_2_Pos =peta(Pot_2, 0, 1023, 1, 179); Servo_2.write(Servo_2_Pos); Pot_3 =analogBaca(A3); Servo_3_Pos =peta(Pot_3, 0, 1023, 1, 179); Servo_3.write(Servo_3_Pos); Pot_4 =analogBaca(A4); Servo_4_Pos =peta(Pot_4, 0, 1023 , 1, 179); Servo_4.write(Servo_4_Pos);}
Cuplikan kode #4Teks biasa
void loop() { Map_Pot(); //Fungsi panggilan untuk membaca nilai pot while (Serial.available()> 0) { data =Serial.read(); if (data =='R') Serial.println("Perekaman Bergerak..."); if (data =='P') Serial.println("Memutar Gerakan yang Direkam..."); } if (data =='R') //Jika 'R' dimasukkan, mulailah merekam. { //Menyimpan nilai dalam variabel Prev_0_Pos =Servo_0_Pos; Sebelumnya_1_Pos =Servo_1_Pos; Sebelumnya_2_Pos =Servo_2_Pos; Sebelumnya_3_Pos =Servo_3_Pos; Sebelumnya_4_Pos =Servo_4_Pos; Peta_Pot(); // Fungsi peta dipanggil untuk perbandingan jika (abs(Sebelumnya_0_Pos ==Servo_0_Pos)) // nilai absolut diperoleh dengan membandingkan { Servo_0.write(Servo_0_Pos); // Jika nilai cocok servo direposisi jika (Current_0_Pos !=Servo_0_Pos) // Jika nilai tidak cocok { Storage[Index] =Servo_0_Pos + 0; // Nilai ditambahkan ke array Indeks++; // Nilai indeks bertambah 1 } Current_0_Pos =Servo_0_Pos; } /* Demikian pula perbandingan nilai dilakukan untuk semua servo, +100 ditambahkan setiap entri sebagai nilai diferensial. */ if (abs(Sebelumnya_1_Pos ==Servo_1_Pos)) { Servo_1.write(Servo_1_Pos); if (Current_1_Pos !=Servo_1_Pos) { Penyimpanan[Indeks] =Servo_1_Pos + 100; Indeks++; } Current_1_Pos =Servo_1_Pos; } if (abs(Sebelumnya_2_Pos ==Servo_2_Pos)) { Servo_2.write(Servo_2_Pos); if (Current_2_Pos !=Servo_2_Pos) { Penyimpanan[Indeks] =Servo_2_Pos + 200; Indeks++; } Current_2_Pos =Servo_2_Pos; } if (abs(Prev_3_Pos ==Servo_3_Pos)) { Servo_3.write(Servo_3_Pos); if (Current_3_Pos !=Servo_3_Pos) { Penyimpanan[Indeks] =Servo_3_Pos + 300; Indeks++; } Current_3_Pos =Servo_3_Pos; } if (abs(Prev_4_Pos ==Servo_4_Pos)) { Servo_4.write(Servo_4_Pos); if (Current_4_Pos !=Servo_4_Pos) { Penyimpanan[Indeks] =Servo_4_Pos + 400; Indeks++; } Current_4_Pos =Servo_4_Pos; } /* Nilai dicetak pada monitor serial, '\t' untuk menampilkan nilai dalam format tabel */ Serial.print(Servo_0_Pos); Serial.print("\t"); Serial.print(Servo_1_Pos); Serial.print("\t"); Serial.print(Servo_2_Pos); Serial.print("\t"); Serial.print(Servo_3_Pos); Serial.print("\t"); Serial.println(Servo_4_Pos); Serial.print("Indeks ="); Serial.println(Indeks); penundaan (50); } if (data =='P') //JIKA 'P' dimasukkan , Mulai mainkan gerakan yang direkam. { for (int i =0; i   

Skema


Proses manufaktur

  1. Sistem Kehadiran Menggunakan Arduino dan RFID dengan Python
  2. Kontrol Jarak Jauh Universal menggunakan Arduino, 1Sheeld, dan Android
  3. Voltmeter DIY Menggunakan Arduino dan Smartphone
  4. Menggunakan IoT untuk Mengontrol Lengan Robot dari Jarak Jauh
  5. IOT - Smart Jar Menggunakan ESP8266, Arduino dan Sensor Ultrasonik
  6. Pengukuran Frekuensi dan Siklus Tugas Menggunakan Arduino
  7. Arduino 3D-Printed Robotic Arm
  8. Smart Shoes (Tali Otomatis dan Pembangkit Listrik)
  9. Lengan Robot Terkendali Nunchuk (dengan Arduino)
  10. Smart Door Lock Menggunakan Halaman Login WiFi oleh Arduino &ESP8266