Daftar Isi:

Robot Mentega: Robot Arduino Dengan Krisis Eksistensial: 6 Langkah (dengan Gambar)
Robot Mentega: Robot Arduino Dengan Krisis Eksistensial: 6 Langkah (dengan Gambar)

Video: Robot Mentega: Robot Arduino Dengan Krisis Eksistensial: 6 Langkah (dengan Gambar)

Video: Robot Mentega: Robot Arduino Dengan Krisis Eksistensial: 6 Langkah (dengan Gambar)
Video: Tutorial Membuat Robot Remot Kontrol Arduino 2024, Juli
Anonim
Image
Image

Proyek ini didasarkan pada serial animasi "Rick and Morty". Di salah satu episode, Rick membuat robot yang tujuan utamanya adalah membawa mentega. Sebagai mahasiswa dari Bruface (Fakultas Teknik Brussel) kami memiliki tugas untuk proyek mekatronik yaitu membuat robot berdasarkan topik yang disarankan. Tugas proyek ini adalah: Membuat robot yang hanya menyajikan mentega. Itu bisa mengalami krisis eksistensial. Tentunya robot dalam episode Rick and Morty ini merupakan robot yang cukup kompleks dan perlu dilakukan beberapa penyederhanaan:

Karena satu-satunya tujuan adalah untuk membawa mentega, ada alternatif yang lebih mudah. Alih-alih membuat robot melihat dan mengambil mentega, sebelum membawanya ke orang yang tepat, robot dapat membawa mentega sepanjang waktu. Ide utamanya adalah membuat gerobak yang mengangkut mentega ke tempat yang seharusnya.

Selain mengangkut mentega, robot perlu tahu di mana dia harus membawa mentega. Dalam episode tersebut, Rick menggunakan suaranya untuk memanggil dan memerintahkan robot. Ini membutuhkan sistem pengenalan suara yang mahal dan akan rumit. Sebagai gantinya, semua orang di meja mendapat tombol: setelah tombol ini diaktifkan, robot dapat menemukan tombol ini dan bergerak ke arahnya.

Untuk rekap, robot harus memenuhi persyaratan berikut:

  • Itu harus aman: ia harus menghindari rintangan dan mencegah dirinya jatuh dari meja;
  • Robot harus kecil: ruang di atas meja terbatas dan tidak ada yang menginginkan robot yang menyajikan mentega tetapi setengah ukuran meja itu sendiri;
  • Cara kerja robot tidak dapat bergantung pada ukuran atau bentuk meja, sehingga dapat digunakan pada meja yang berbeda;
  • Perlu membawa mentega ke orang yang tepat di meja.

Langkah 1: Konsep Utama

Persyaratan yang disebutkan sebelumnya dapat dipenuhi dengan menggunakan teknik yang berbeda. Keputusan tentang desain utama yang dibuat dijelaskan pada langkah ini. Rincian tentang bagaimana ide-ide ini diimplementasikan dapat ditemukan dalam langkah-langkah berikut.

Untuk menyelesaikan tugasnya, robot perlu bergerak sampai tujuan tercapai. Mempertimbangkan penerapan robot, sangat mudah bahwa menggunakan roda daripada gerakan "berjalan" lebih baik untuk membuatnya bergerak. Karena meja adalah permukaan yang datar dan robot tidak akan mencapai kecepatan yang sangat tinggi, dua roda yang digerakkan dan satu bola kastor adalah solusi yang paling sederhana dan paling mudah dikendalikan. Roda yang digerakkan perlu ditenagai oleh dua motor. Motor perlu memiliki torsi besar tetapi tidak perlu mencapai kecepatan tinggi, oleh karena itu digunakan motor servo kontinu. Keuntungan lain dari motor servo adalah kesederhanaan penggunaan dengan Arduino.

Deteksi hambatan dapat dilakukan dengan menggunakan sensor ultrasonik yang mengukur jarak, dipasang pada motor servo untuk memilih arah pengukuran. Ujung-ujungnya dapat dideteksi menggunakan sensor LDR. Menggunakan sensor LDR akan membutuhkan konstruksi perangkat yang berisi lampu led dan sensor LDR. Sensor LDR mengukur cahaya yang dipantulkan dan dapat dilihat sebagai semacam sensor jarak. Prinsip yang sama ada dengan cahaya inframerah. Ada beberapa sensor jarak inframerah yang memiliki output digital: dekat atau tidak dekat. Inilah yang dibutuhkan robot untuk mendeteksi tepinya. Dengan menggabungkan 2 sensor tepi yang ditempatkan seperti dua antena serangga dan satu sensor ultrasonik yang digerakkan, robot harus dapat menghindari rintangan dan tepi.

Deteksi tombol juga dapat dilakukan dengan menggunakan sensor IR dan led. Kelebihan IR adalah tidak terlihat sehingga penggunaannya tidak mengganggu orang yang ada di meja. Laser dapat digunakan juga, tetapi kemudian cahaya akan terlihat dan juga berbahaya ketika seseorang mengarahkan laser ke mata orang lain. Selain itu, pengguna perlu menargetkan sensor pada robot hanya dengan sinar laser tipis, yang akan sangat mengganggu. Dengan melengkapi robot dengan dua sensor IR dan membuat tombol dengan led IR, robot mengetahui arah mana yang harus dia tuju dengan mengikuti intensitas cahaya IR. Saat tidak ada tombol robot dapat berputar hingga salah satu led menangkap sinyal dari salah satu tombol.

Mentega dimasukkan ke dalam kompartemen di bagian atas robot. Kompartemen ini dapat terdiri dari kotak dan penutup yang digerakkan untuk membuka kotak. Untuk membuka tutupnya dan menggerakkan sensor ultrasonik untuk memindai dan mendeteksi rintangan, kita membutuhkan dua motor dan untuk tujuan ini, motor servo non-kontinu lebih disesuaikan karena motor harus bergerak pada posisi tertentu dan mempertahankan posisi itu.

Fitur tambahan dari proyek ini adalah berinteraksi dengan lingkungan eksternal dengan suara robot. Buzzer sederhana dan disesuaikan untuk tujuan ini tetapi tidak dapat digunakan kapan saja karena undian saat ini tinggi.

Kesulitan utama dari proyek ini bergantung pada pengkodean, karena bagian mekanisnya cukup mudah. Banyak kasus perlu diperhitungkan untuk menghindari robot macet atau melakukan sesuatu yang tidak diinginkan. Masalah utama yang perlu kita selesaikan adalah kehilangan sinyal IR karena hambatan dan berhenti ketika tiba di tombol!

Langkah 2: Bahan

Bagian mekanik

  • Printer 3D dan mesin pemotong Laser

    • PLA akan digunakan untuk pencetakan 3D tetapi Anda juga dapat menggunakan ABS
    • Piring kayu lapis birch 3 mm akan digunakan untuk pemotongan laser karena memberikan kemungkinan untuk melakukan modifikasi di kemudian hari dengan mudah, Plexiglas juga dapat digunakan tetapi lebih sulit untuk memodifikasinya setelah dipotong laser tanpa merusaknya
  • Baut, mur, ring

    Sebagian besar komponen disatukan menggunakan baut kepala kancing M3, ring dan mur, tetapi beberapa di antaranya memerlukan set baut M2 atau M4. Panjang baut berada pada kisaran 8-12 mm

  • Spacer PCB, 25 mm dan 15 mm
  • 2 Motor servo dengan roda yang kompatibel
  • Beberapa kawat logam tebal berdiameter sekitar 1-2 mm

Bagian elektronik

  • Mikrokontroler

    1 papan arduino UNO

  • Motor servo

    • 2 Motor servo besar: Feetech terus menerus 6Kg 360 derajat
    • 2 motor servo mikro: Feetech FS90
  • Sensor

    • 1 sensor ultrasonik
    • 2 sensor jarak IR
    • 2 fotodioda inframerah
  • Baterai

    • 1 dudukan baterai 9V + baterai
    • 1 tempat baterai 4AA + baterai
    • 1 kotak baterai 9V + baterai
  • Komponen tambahan

    • Beberapa kabel lompat, kabel, dan pelat solder
    • Beberapa resistor
    • 1 IR LED
    • 3 sakelar
    • 1 bel
    • 1 tombol
    • 1 konektor baterai Arduino ke 9V

Langkah 3: Menguji Elektronik

Menguji Elektronik
Menguji Elektronik
Menguji Elektronik
Menguji Elektronik

Pembuatan tombol:

Tombol ini dibuat hanya dengan sakelar, LED inframerah, dan resistor 220 Ohm secara seri, ditenagai oleh baterai 9V. Ini dimasukkan ke dalam paket baterai 9V untuk desain yang ringkas dan bersih.

Pembuatan modul penerima inframerah:

Modul ini dibuat dengan papan solder lubang, yang nantinya akan dipasang dengan sekrup ke robot. Sirkuit untuk modul ini digambarkan dalam skema umum. Prinsipnya adalah mengukur intensitas cahaya inframerah. Untuk meningkatkan pengukuran, kolimator (dibuat dengan tabung menyusut) dapat digunakan untuk fokus pada arah tertentu yang diinginkan.

Persyaratan yang berbeda dari proyek perlu diselesaikan dengan menggunakan perangkat elektronik. Jumlah perangkat harus dibatasi untuk menjaga kompleksitas yang relatif rendah. Langkah ini berisi skema pengkabelan dan setiap kode untuk menguji semua bagian secara terpisah:

  • Motor servo kontinu;
  • Sensor ultrasonik;
  • Motor servo tidak kontinu;
  • Bel;
  • Deteksi arah tombol IR;
  • Deteksi tepi oleh sensor jarak;

Kode-kode ini dapat membantu memahami komponen di awal, tetapi juga sangat berguna untuk debugging pada tahap selanjutnya. Jika terjadi masalah tertentu, bug dapat dideteksi lebih mudah dengan menguji semua komponen secara terpisah.

Langkah 4: Desain Potongan 3D Dicetak dan Potongan Laser

Desain Potongan 3D Dicetak dan Potongan Laser
Desain Potongan 3D Dicetak dan Potongan Laser
Desain Potongan 3D Dicetak dan Potongan Laser
Desain Potongan 3D Dicetak dan Potongan Laser
Desain Potongan 3D Dicetak dan Potongan Laser
Desain Potongan 3D Dicetak dan Potongan Laser

potongan Laser Cut

Rakitan terbuat dari tiga pelat horizontal utama yang disatukan oleh spacer PCB untuk mendapatkan desain terbuka yang menyediakan akses mudah ke elektronik jika diperlukan.

Pelat tersebut harus memiliki lubang yang diperlukan untuk memasang spacer dan komponen lain untuk perakitan akhir. Terutama, ketiga pelat memiliki lubang di lokasi yang sama untuk spacer, dan lubang khusus untuk elektronik dipasang masing-masing di setiap pelat. Perhatikan bahwa pelat tengah memang memiliki lubang untuk melewatkan kabel di tengah.

Potongan yang lebih kecil dipotong ke dimensi servo besar untuk memperbaikinya ke rakitan.

Potongan cetak 3D

Selain pemotongan laser, beberapa bagian perlu dicetak 3D:

  • Dukungan untuk sensor ultrasonik, yang menghubungkannya ke satu lengan motor servo mikro
  • Dukungan untuk roda kastor dan dua sensor tepi IR. Desain khusus dari jenis ujung potongan berbentuk kotak untuk sensor IR bertindak sebagai layar untuk menghindari gangguan antara tombol yang memancarkan sinyal IR dan sensor IR yang perlu fokus pada apa yang terjadi di lapangan saja.
  • Dukungan untuk motor servo mikro yang membuka tutupnya
  • Dan akhirnya tutup itu sendiri, terbuat dari dua bagian untuk memiliki sudut operasi yang lebih besar dengan menghindari tabrakan dengan motor servo mikro yang membuka tutupnya:

    • Bagian bawah yang akan dipasang ke pelat atas
    • Dan bagian atas yang dihubungkan ke bagian bawah dengan engsel, dan digerakkan oleh servo menggunakan kawat logam tebal. Kami memutuskan untuk menambahkan sedikit kepribadian pada robot dengan memberinya kepala.

Setelah semua bagian dirancang dan file diekspor dalam format yang benar untuk mesin yang digunakan, bagian tersebut benar-benar dapat dibuat. Ketahuilah bahwa pencetakan 3D membutuhkan banyak waktu, terutama dengan dimensi bagian atas tutupnya. Anda mungkin perlu satu atau dua hari untuk mencetak semua bagian. Namun, pemotongan laser hanya dalam hitungan menit.

Semua file SOLIDWORKS dapat ditemukan di folder zip.

Langkah 5: Perakitan dan Pengkabelan

Image
Image
Perakitan dan Pengkabelan
Perakitan dan Pengkabelan
Perakitan dan Pengkabelan
Perakitan dan Pengkabelan
Perakitan dan Pengkabelan
Perakitan dan Pengkabelan

Perakitan akan menjadi campuran kabel dan memasang komponen bersama-sama, mulai dari bawah ke atas.

Pelat bawah

Pelat bawah dirakit dengan baterai 4AA, motor servo, bagian yang dicetak (memasang kastor bola di bawah pelat), dua sensor tepi, dan 6 spacer pria-wanita.

Piring tengah

Selanjutnya, pelat tengah dapat dipasang, mengompresi motor servo di antara kedua pelat. Pelat ini kemudian dapat diperbaiki dengan meletakkan satu set spacer di atasnya. Beberapa kabel dapat dilewatkan melalui lubang tengah.

Modul ultrasonik dapat dilampirkan ke servo non-kontinyu, yang dipasang di pelat tengah dengan Arduino, paket baterai 9V (menyalakan arduino), dan dua modul penerima inframerah di bagian depan robot. Modul-modul ini dibuat dengan papan solder lubang dan dipasang dengan sekrup ke pelat. Sirkuit untuk modul ini digambarkan dalam skema umum.

Pelat atas

Pada bagian perakitan ini, sakelar tidak diperbaiki tetapi robot sudah dapat melakukan segalanya kecuali tindakan yang membutuhkan tutup, sehingga memungkinkan kami untuk melakukan beberapa tes untuk memperbaiki ambang batas, untuk menyesuaikan kode gerakan dan untuk memiliki kemudahan akses ke port arduino.

Ketika semua ini tercapai, pelat atas dapat diperbaiki dengan spacer. Komponen terakhir yaitu dua sakelar, tombol, servo, bel, dan sistem tutup akhirnya dapat dipasang ke pelat atas untuk menyelesaikan perakitan.

Hal terakhir yang harus diuji dan dikoreksi adalah sudut servo untuk membuka tutupnya dengan benar.

Ambang batas sensor tepi harus disesuaikan dengan potensiometer yang disertakan (dengan menggunakan obeng pipih) untuk permukaan meja yang berbeda. Meja putih harus memiliki ambang batas yang lebih rendah daripada meja cokelat misalnya. Juga ketinggian sensor akan mempengaruhi ambang batas yang dibutuhkan.

Pada akhir langkah ini, perakitan selesai dan bagian terakhir yang tersisa adalah kode yang hilang.

Langkah 6: Coding: Menyatukan Semuanya

Semua kode yang diperlukan untuk membuat robot bekerja ada dalam file zip yang dapat diunduh. Yang paling penting adalah kode "utama" yang mencakup pengaturan dan loop fungsional robot. Sebagian besar fungsi lainnya ditulis dalam sub-file (juga dalam folder zip). Sub-file ini harus disimpan dalam folder yang sama (yang bernama "utama") sebagai skrip utama sebelum mengunggahnya ke Arduino

Pertama kecepatan umum robot didefinisikan bersama dengan variabel "mengingatkan". "Remind" ini adalah nilai yang mengingat ke arah mana robot itu berputar. Jika "ingatkan = 1", robot sedang/berbelok ke kiri, jika "ingatkan = 2", robot sedang/belok kanan.

int kecepatan = 9; // Kecepatan umum robot

int mengingatkan = 1; // Arah awal

Dalam pengaturan robot, sub-file program yang berbeda diinisialisasi. Dalam sub-file ini, fungsi dasar pada kontrol motor, sensor, … ditulis. Dengan menginisialisasinya di setup, fungsi yang dijelaskan di masing-masing file ini dapat digunakan di loop utama. Dengan mengaktifkan fungsi r2D2(), robot akan mengeluarkan suara seperti robot R2D2 dari franchise film Star Wars saat itu dimulai. Di sini fungsi r2D2() dinonaktifkan untuk mencegah buzzer menarik terlalu banyak arus.

//setup @ reset//----------------

void setup(){ initialize_IR_sensors(); initialize_obstacles_and_edges(); initialize_movement(); inisialisasi_tutup(); initialize_buzzer(); // r2D2(); int mengingatkan = 1; // arah awal Starter(ingat); }

Fungsi Starter(remind) pertama kali dipanggil dalam pengaturan. Fungsi ini membuat robot berbalik dan mencari sinyal IR dari salah satu tombol. Setelah menemukan tombolnya, program akan keluar dari fungsi Starter dengan mengubah variabel 'cond' menjadi false. Selama rotasi robot perlu menyadari lingkungannya: ia harus mendeteksi tepi dan rintangan. Ini diperiksa setiap kali sebelum terus berbalik. Setelah robot mendeteksi rintangan atau tepi, protokol untuk menghindari rintangan atau tepi ini akan dieksekusi. Protokol-protokol ini akan dijelaskan nanti di langkah ini. Fungsi Starter memiliki satu variabel yang merupakan variabel pengingat yang telah dibahas sebelumnya. Dengan memberikan nilai reminder pada fungsi Starter, robot mengetahui arah mana yang harus berbelok untuk mencari tombol.

//Starter Loop: Berbalik dan mencari tombol//------------------------------------ ----------------

void Starter(int reminder) { if (isedgeleft() || isedgeright()) { // Deteksi tepi edgeDetected(ingatkan); } else { bool cond = benar; while (cond == true) { if (buttonleft() == false && buttonright() == false && isButtonDetected() == true) { cond = false; } else { if (ingatkan == 1) { // Kami berbelok ke kiri if (isobstacleleft()) { stopspeed(); avoid_obstacle(ingatkan); } else if (isedgeleft() || isedgeright()) { // Mendeteksi tepi edgeDetected(remind); } else { belok kiri(kecepatan); } } else if (ingatkan == 2) { if (isobstacleright()) { stopspeed(); avoid_obstacle(ingatkan); } else if (isedgeleft() || isedgeright()) { // Mendeteksi tepi edgeDetected(remind); } else { belok kanan(kecepatan); } } } } } }

Jika robot menemukan tombol, maka loop Starter pertama keluar dan loop fungsional utama robot dimulai. Loop utama ini cukup kompleks karena setiap saat robot perlu mendeteksi apakah ada rintangan atau tepi di depannya atau tidak. Ide utamanya adalah robot mengikuti tombol dengan menemukannya dan kehilangannya setiap saat. Dengan menggunakan dua sensor IR, kita dapat membedakan tiga situasi:

  • perbedaan antara cahaya IR yang terdeteksi oleh sensor kiri dan kanan lebih besar dari ambang batas tertentu, dan ada tombol.
  • perbedaan cahaya IR lebih kecil dari ambang batas, dan ada tombol di depan robot.
  • perbedaan cahaya IR lebih kecil dari ambang batas, dan tidak ada tombol di depan robot.

Cara kerja track routine adalah sebagai berikut: ketika tombol terdeteksi, robot bergerak ke arah tombol dengan memutar searah dengan putarannya (menggunakan variabel reminder) dan pada saat yang sama bergerak sedikit ke depan. Jika robot berbelok terlalu jauh, tombol akan hilang lagi, dan pada titik ini robot ingat bahwa dia harus berbelok ke arah lain. Ini juga dilakukan sambil bergerak maju sedikit. Dengan melakukan ini, robot terus-menerus berbelok ke kiri dan ke kanan, tetapi sementara itu tetap maju ke arah tombol. Setiap kali robot menemukan tombol, itu hanya terus berputar sampai hilang dalam hal ini mulai bergerak ke arah lain. Perhatikan perbedaan fungsi yang digunakan dalam loop Starter dan loop utama: loop Starter menggunakan "turnleft()" atau "turnright()", sedangkan loop utama menggunakan "moveleft()" dan "moveright()". Fungsi gerak kiri/kanan tidak hanya membuat robot berputar tetapi juga sekaligus membuatnya bergerak maju.

/* Loop fungsional ---------------------------- Di sini, hanya ada track rutin */

int hilang = 0; // Jika hilang = 0 tombol ditemukan, jika hilang = 1 tombol hilang void loop() { if (isedgeleft() || isedgeright()) {

jika (!hambatan()) {

bergerak maju (kecepatan); penundaan (5); } else { hindari_obstacle(ingatkan); } else {if (ingat == 1 && hilang == 1) { // Kami berbelok ke kiri stopspeed(); if (!isobstacleright()) { moveright(kecepatan); // Berbalik untuk menemukan tombol } else { avoid_obstacle(remind); } mengingatkan = 2; } else if (ingat == 2 && hilang == 1) { stopspeed(); if (!isobstacleleft()) { moveleft(kecepatan); //Kami berbelok ke kanan } else { avoid_obstacle(ingatkan); } mengingatkan = 1; }else if (hilang == 0) { if (ingatkan == 1) { // Kami berbelok ke kiri if (!isobstacleleft()) { moveleft(speed); //Kami berbelok ke kanan } else { stopspeed(); avoid_obstacle(ingatkan); } // } else if (ingatkan == 2) { if (!isobstacleright()) { moveright(kecepatan); // Berbalik untuk menemukan tombol } else { stopspeed(); avoid_obstacle(ingatkan); } } } penundaan(10); hilang = 0; } } //} }

Sekarang, sedikit penjelasan tentang dua rutinitas paling kompleks diberikan:

Hindari tepi

Protokol untuk menghindari tepi didefinisikan dalam fungsi yang disebut "edgeDetection()" yang ditulis dalam sub-file "gerakan". Protokol ini bergantung pada fakta bahwa robot hanya akan menemukan tepi ketika telah mencapai tujuannya: tombol. Setelah robot mendeteksi tepi, hal pertama yang dilakukan adalah mundur sedikit untuk berada pada jarak yang aman dari tepi. Setelah ini selesai, robot menunggu selama 2 detik. Jika seseorang menekan tombol di depan robot dalam dua detik itu, robot tahu telah mencapai orang yang menginginkan mentega dan membuka kompartemen mentega dan menyajikan mentega. Pada titik ini, seseorang dapat mengambil mentega dari robot. Setelah beberapa detik robot akan bosan menunggu dan hanya akan menutup tutup mentega. Setelah tutupnya ditutup, robot akan menjalankan loop Starter untuk mencari tombol lain. Jika kebetulan robot menemui tepi sebelum mencapai tujuannya dan tombol di bagian depan robot tidak ditekan, robot tidak akan membuka tutup mentega dan akan langsung menjalankan Starter loop.

Hindari rintangan

Fungsi avoid_obstacle() juga terletak di sub-file "gerakan". Bagian tersulit dari menghindari rintangan adalah kenyataan bahwa robot memiliki titik buta yang cukup besar. Sensor ultrasonik ditempatkan di bagian depan robot, yang berarti dapat mendeteksi rintangan, tetapi tidak tahu kapan ia melewatinya. Untuk mengatasi ini, prinsip berikut digunakan: Setelah robot menghadapi rintangan, ia menggunakan variabel reming untuk berbelok ke arah lain. Dengan cara ini robot menghindari menabrak rintangan. Robot terus berputar hingga sensor ultrasonik tidak mendeteksi halangan lagi. Selama robot berputar, penghitung dinaikkan sampai halangan tidak terdeteksi lagi. Penghitung ini kemudian memberikan perkiraan panjang rintangan. Dengan bergerak kemudian maju dan pada saat yang sama mengurangi counter rintangan dapat dihindari. Setelah penghitung mencapai 0, fungsi Starter dapat digunakan kembali untuk memindahkan tombol. Tentu saja robot melakukan fungsi Starter dengan memutar ke arah yang diingatnya sebelum ia menemui rintangan (sekali lagi menggunakan variabel pengingat).

Sekarang setelah Anda sepenuhnya memahami kodenya, Anda dapat mulai menggunakannya!

Pastikan untuk menyesuaikan ambang batas dengan lingkungan Anda (pantulan IR lebih tinggi pada tabel putih misalnya) dan untuk menyesuaikan parameter yang berbeda dengan kebutuhan Anda. Juga, perhatian besar harus diberikan pada kekuatan modul yang berbeda. Sangat penting bahwa motor servo tidak ditenagai oleh port Arduino 5V, karena mereka mengambil banyak arus (ini dapat merusak mikrokontroler). Jika sumber daya yang sama digunakan untuk sensor sebagai sumber daya servo, beberapa masalah pengukuran dapat ditemui.

Direkomendasikan: