--- Title: Laporan Suck n Sort Tags: Project Internship Xirka 2024 Description: Membuat projek internship berupa trash sorting robot --- # <span style="color:#fff/; font-family: 'Arial'; font-size: 2em;">Suck n Sort</span> # **Delta Robot ❓** <div style="text-align: justify;"> *Delta robot* merupakan jenis robot paralel yang terdiri dari tiga lengan yang terhubung ke sambungan universal di pangkalan. Fitur desain utama adalah penggunaan jajaran genjang di lengan, yang mempertahankan orientasi efektor akhir. Berbeda dengan platform *Stewart* yang dapat mengubah orientasi efektor ujungnya, robot delta mempertahankan orientasi efektor akhirnya. *Delta robot* sering digunakan dalam pengambilan dan pengepakan di pabrik karena kecepatannya yang tinggi. </div> --- ## **Peserta Kegiatan Magang 👷** |Nama Lengkap | NIM | Bidang dan Peran |----- |------ |------- |Kevin Nathanael | 2540119841 | Project Leader, Mechanical, Electrical, Software & Programming |Alifito Marciano Camil | 2501985653 | Software & Programming ## **Spesifikasi Fungsional yang Diharapkan 🎯** <div style="text-align: justify;"> * Dapat mengenali dan mensortir sampah organik dan anorganik yang terdeteksi dalam camera secara otomatis. - Membuat proses penyortiran dan pengelolaan sampah menjadi lebih efisien jika dibandingkan dengan metode konvensional. * Membantu pihak berwenang dalam mendata jenis dan jumlah sampah secara *real time*. </div> ## **Spesifikasi Teknis yang Diharapkan 🧠** <div style="text-align: justify;"> - Untuk mendapatkan koordinat letak sampah, maka putaran servo dapat diatur dengan menggunakan kalkulasi *inverse kinematics*. * Dapat mengambil sampah dengan cara menyedot permukaan sampah dengan menggunakan pompa vakum udara yang tersambung dengan *silicone nozzle* yang berada di ujung *effector*. - Dapat menyimpan data sampah dengan menggunakan MongoDB yang nantinya akan ditampilkan di website yang kita hosted di Docker. </div> --- ## **Komponen yang Digunakan ⚙️** ### **Perangkat Mekanik 🛠️** #### **1. V Slot Aluminium Profile Extrusion Rail 2020 Frame** <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/ryDvenGBC.png" width="300"> </div> <div style="text-align: justify;"> V Slot Aluminium Profile Extrusion Rail 2020 adalah sebuah profil ekstrusi aluminium berkualitas tinggi yang memiliki rel v groove linear yang sangat halus di keempat sisinya. Profil ini memiliki sifat modular yang memungkinkan kontrol desain yang tidak terbatas dan mudah digunakan. Profil persegi 20x20mm ini memberikan kekuatan tambahan dan fungsionalitas. Pada proyek ini, profil digunakan sebagai chassis untuk menopang beban robot serta menjaga kestabilan saat robot bergerak dengan kecepatan lebih tinggi. Oleh karena itu, aksesibilitas dan kelenturan aluminium menjadikannya bahan yang ideal untuk digunakan dalam proyek. </div> #### **2. Inside Hidden L Bracket 2020** <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/rJFzWhzH0.png" width="250"> </div> <div style="text-align: justify;"> Inside Hidden L Bracket 2020 adalah sambungan sudut 90 derajat tersembunyi yang digunakan untuk menghubungkan dua profil aluminum. Sambungan ini dirancang khusus untuk profil ekstrusi V-Slot. Dengan menggunakan set sekrup yang disertakan, kita dapat dengan cepat dan mudah menghubungkan dua profil aluminum. L Bracket ini memberikan konektivitas kuat di bagian dalam slot profil aluminium dan memungkinkan pembentukan sudut siku yang presisi sehingga membuat chassis stabil. </div> #### **3. T Sliding Nut M5 Square Aluminium Profile 2020** <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/ryd8b2fBA.png" width="250"> </div> <div style="text-align: justify;"> T Sliding Nut Square Aluminium Profile 2020 adalah mur baut khusus yang digunakan untuk menghubungkan profil aluminium tipe 2020. Mur ini memiliki bentuk persegi dan memiliki ulir di bagian dalamnya. Komponen ini sangat penting dalam membangun struktur dengan profil aluminium. Dengan kemampuan geser yang mudah, mur ini memudahkan proses perakitan dan memastikan koneksi yang kokoh. </div> #### **4. Fisheye Bearing Female** <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/Sy-GJ7QSA.png" width="300"> </div> <div style="text-align: justify;"> Fisheye Bearing Female, atau yang juga dikenal sebagai Rod End Bearing, adalah jenis bantalan bola yang memiliki lubang berbentuk fisheye dengan ulir internal. Bantalan ini dirancang untuk menangani beban yang bergerak dalam berbagai arah dan biasanya digunakan untuk menghubungkan komponen yang memerlukan gerakan rotasi atau osilasi. Maka, Fisheye Bearing Female sangat penting dalam robot ini oleh karena robot kita memerlukan presisi dan keandalan tinggi. Dengan kemampuan untuk menahan beban dari berbagai arah, bantalan ini memastikan bahwa komponen dapat bergerak dengan lancar dan efisien. </div> #### **5. Threaded Rods** <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/B1IqAzmHA.png" width="280"> </div> <div style="text-align: justify;"> Threaded Rods, atau batang berulir, adalah elemen pengikat yang umum digunakan dalam berbagai aplikasi konstruksi dan manufaktur. Batang ini memiliki ulir sepanjang permukaannya, mirip dengan baut namun tanpa kepala. Ulir tersebut memungkinkan penempatan mur dan pengikat lainnya di sepanjang batang dengan mudah. Dalam konstruksi, batang berulir sering digunakan untuk menguatkan sambungan dan mengikat dua benda bersama-sama, memberikan dukungan struktural, atau sebagai poros transmisi daya. Pada proyek ini threaded rods digunakan untuk menghubungkan antara dua bagian fisheye bearing female yang berada di efektor dan servo. </div> #### **6. Silicone Vacuum Suction Cup Nozzle Head** <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/SJ9XyQXHR.png" width="280"> </div> <div style="text-align: justify;"> Komponen yang digunakan dalam sistem vakum untuk mengangkat atau memindahkan objek dengan permukaan yang halus dan non-pori. Produk ini terbuat dari silikon karena fleksibilitas dan ketahanannya terhadap suhu tinggi. Nozzle head ini dirancang untuk menciptakan segel yang kuat dengan permukaan objek, memungkinkan pengangkatan atau pemindahan sampah yang aman dan efisien. </div> #### **7. Printed Circuit Board (PCB) Dot Matrix** <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/HJEWG2zHA.png" width="200"> </div> <div style="text-align: justify;"> PCB Dot Matrix Thru Hole adalah jenis papan sirkuit cetak yang dirancang untuk memudahkan penyolderan komponen elektronik. PCB ini memiliki pola titik-titik (dot matrix) dengan lubang tembus (thru hole) yang memungkinkan komponen untuk disolder pada kedua sisi papan. Sering digunakan dalam prototyping dan proyek elektronik karena kemudahan dalam penyolderan komponen dan menyediakan solusi yang ekonomis dan fleksibel untuk berbagai aplikasi elektronik, memungkinkan pengembangan dan inovasi dalam desain rangkaian elektronik. </div> #### **8. Terminal PCB Block Screw** <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/S1wZNnzSR.png" width="200"> </div> <div style="text-align: justify;"> Jenis konektor yang digunakan untuk menghubungkan kabel ke papan sirkuit cetak (PCB). Terminal ini memiliki rumah modular dengan badan terisolasi yang mengamankan dua atau lebih kabel bersama-sama. Desain terminal blok sekrup memungkinkan penyambungan kabel yang aman dan semi-permanen, yang dapat dengan mudah diganti untuk inspeksi atau perbaikan di lapangan. Oleh sebab itu maka ini adalah solusi yang efektif untuk menciptakan sambungan kabel yang kuat dan andal pada PCB, yang sangat penting dalam berbagai aplikasi elektronik. </div> #### **8. Pin Header Male** <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/rklvV2GBR.png" width="200"> </div> <div style="text-align: justify;"> Pin Header Male adalah komponen penting dalam konektivitas elektronik, memberikan fleksibilitas dalam desain dan memastikan koneksi yang aman dan stabil antar komponen. </div> #### **9. 3D Print Component** * **Base Top** <div style="text-align: justify;"> Komponen ini digunakan sebagai penutup chassis untuk memastikan bahwa keenam sisi chassis tertutupi, sehingga memberikan stabilitas yang lebih baik dan desain yang ramping. </div> <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/rJZmfQXrA.png" width="300"> </div> * **Base Bottom** <div style="text-align: justify;"> Berbeda dengan Base Top, Base Bottom ini memiliki fungsi untuk menghubungkan semua part Base dengan chassis. </div> <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/BkvxfX7S0.png" width="300"> </div> * **Base Connector** <div style="text-align: justify;"> Komponen ini bertujuan untuk menghubungkan antara basis atas, bawah, dan servo bracket. </div> <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/B1ESzQQSR.png" width="400"> </div> * **Servo Bracket** <div style="text-align: justify;"> Servo Bracket digunakan untuk memasang servo pada tempatnya sehingga dapat diposisikan dengan cara yang benar relatif terhadap posisi chassis dan tanah. </div> <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/rkdwfXQrC.png" width="350"> </div> * **Biceps** <div style="text-align: justify;"> Masing-masing komponen "Bicep" ini terhubung ke servo yang sesuai secara langsung di salah satu ujungnya dan ke "Lengan" threaded rods di ujung yang lain melalui koneksi dengan fisheye bearing female. </div> <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/rJ75zmQS0.png" width="400"> </div> * **Round Spacer** <div style="text-align: justify;"> Round Spacer ditempatkan di antara servo dan ball joint untuk memastikan bahwa koneksi antara kedua komponen tersebut kencang dan stabil. </div> <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/B1Y0fQXHA.png" width="200"> </div> * **Effector** <div style="text-align: justify;"> Komponen efektor adalah bagian yang diarahkan ke sampah yang sudah terdeteksi. Komponen ini melakukan kontak langsung dengan permukaan sampah yang terhubung dengan pompa udara, sehingga komponen ini dapat menghisap sampah dan menyortirnya setelah bersentuhan. Pergerakan komponen ini dikendalikan oleh "lengan" dan "bisep" yang terhubung ke servo, yang pada akhirnya dikendalikan oleh sinyal dari mikrokontroler Arduino Mega 2560. </div> <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/HkgR3zXXH0.png" width="280"> </div> ### **Perangkat Elektronik ⚡** #### **1. Webcam** <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/H1Yov2GSA.png" width="200"> </div> <div style="text-align: justify;"> Webcam digunakan untuk memfasilitasi sistem computer vision yang memungkinkan robot untuk mengidentifikasi dan menyortir sampah berdasarkan jenis dan kelasnya dengan akurat. Webcam terintegrasi dengan mikrokontroler dan perangkat lunak melalui antarmuka USB, memungkinkan pengolahan gambar dan data secara real-time untuk mendukung operasi robot. </div> #### **2. Arduino Mega 2560** <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/By4vkXXHA.png" width="280"> </div> <div style="text-align: justify;"> Sebuah mikrokontroler berbasis ATmega2560. Mikrokontroler ini memiliki 54 pin input/output digital (dari mana 15 dapat digunakan sebagai output PWM), 16 input analog, 4 UARTs (port serial hardware), osilator kristal 16 MHz, koneksi USB, jack power, header ICSP, dan tombol reset. Dengan memori flash sebesar 256 KB, 8 KB digunakan oleh bootloader, Arduino Mega 2560 menyediakan ruang yang cukup untuk proyek-proyek besar dan kompleks. Papan ini cocok untuk proyek-proyek yang memerlukan banyak pin I/O, seperti prototipe 3D printer atau robotika yang kompleks. Arduino Mega 2560 sering digunakan dalam proyek-proyek pendidikan dan hobi elektronik karena kemudahan penggunaannya dan komunitas yang besar yang mendukung pengembangan lebih lanjut. Berikut adalah karakteristik dari Arduino Mega: * Mikrokontroler : ATmega2560 * Tegangan Operasional : 5V * Tegangan Masukan (direkomendasi) : 7-12V * Tegangan Masukan (batas) : 6-20V * Pin Digital I/O : 54 ( 14 pin untuk keluaran PWM) * Analog Input Pins : 16 * Arus DC per I/O Pin : 40 mA * Arus DC untuk pin 3.3V : 50 mA * Memori Flash : 256 KB (8 KB digunakan untuk bootloader) * SRAM : 8 KB * EEPROM : 4 KB * Clock Speed : 16 MHz </div> #### **3. Motor Servo MG996R (180 degree)** <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/HkWok7QS0.png" width="280"> </div> <div style="text-align: justify;"> Motor servo digital dengan torsi yang tinggi dan merupakan pilihan populer untuk hobi, robotika, dan aplikasi otomatisasi. Motor ini memiliki rentang rotasi sekitar 180 derajat dan dilengkapi dengan gearbox logam yang memberikan kekuatan dan ketahanan lebih baik dibandingkan dengan gearbox plastik. MG996R mampu menghasilkan torsi hingga 10 kg-cm pada 6V, menjadikannya cocok untuk aplikasi yang memerlukan gerakan presisi dan kekuatan yang signifikan. Motor servo ini juga dilengkapi dengan potensiometer berkualitas tinggi untuk pengukuran posisi yang akurat, serta sistem kontrol PWM yang memungkinkan pengguna untuk mengontrol posisi servo dengan sangat tepat. Dengan dimensi yang kompak dan berat yang ringan, MG996R mudah diintegrasikan ke dalam berbagai proyek dan aplikasi. </div> #### **4. Voltage Regulator (XL7015)** <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/SyG0J7XH0.png" width="250"> </div> <div style="text-align: justify;"> Komponen elektronik yang berfungsi untuk mengatur dan menstabilkan tegangan listrik. Regulator ini mampu mengkonversi tegangan masukan yang lebih tinggi menjadi tegangan keluaran yang lebih rendah dan stabil, dengan rentang tegangan masukan yang lebar. XL7015 efektif digunakan dalam aplikasi yang memerlukan efisiensi tinggi dan konsumsi daya yang rendah. Dengan kemampuan output hingga 0.8A dan tegangan keluaran yang dapat diatur, regulator ini ideal untuk berbagai proyek elektronik, termasuk robotika dan sistem otomasi. Desainnya yang kompak dan kemudahan penggunaannya menjadikan XL7015 pilihan yang populer di kalangan pengembang dan hobiis elektronik. </div> #### **5. Relay 1 Channel With Optocoupler** <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/BJ5feQXSC.png" width="300"> </div> <div style="text-align: justify;"> Komponen elektronik yang digunakan untuk mengendalikan beban tinggi atau tegangan tinggi secara terpisah dari sistem kontrol yang menggunakan tegangan rendah. Relay ini memiliki satu saluran (channel) yang dapat mengontrol satu sirkuit. Fitur utama dari relay ini adalah adanya optocoupler yang berfungsi sebagai isolator antara sirkuit kontrol dengan sirkuit beban, sehingga mencegah gangguan listrik yang dapat merusak komponen elektronik lainnya. Relay ini biasanya digunakan dalam aplikasi yang memerlukan isolasi dan perlindungan sirkuit, seperti dalam sistem otomasi rumah atau kendali industri. Relay ini cocok untuk proyek yang membutuhkan pengendalian beban AC atau DC dengan aman dan efisien. </div> #### **6. Vacuum Air Pump** <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/S15Z-mmH0.png" width="250"> </div> <div style="text-align: justify;"> Pompa vakum udara merupakan komponen krusial dalam sistem vakum yang berfungsi untuk mengeluarkan udara atau gas dari suatu ruang tertutup, menciptakan kondisi vakum. Pompa ini sering digunakan dalam aplikasi industri, laboratorium, dan elektronik untuk berbagai keperluan seperti penyegelan, laminasi, atau pengeringan. Dengan kemampuan untuk menciptakan tekanan negatif, pompa vakum memungkinkan proses seperti pengangkatan atau pemindahan objek dengan presisi tinggi. Pompa vakum udara pada proyek ini dirancang untuk bekerja secara efisien dengan sistem kontrol mikrokontroler, memberikan performa yang stabil dan dapat diandalkan untuk proses penyortiran sampah berbasis computer vision. </div> #### **7. Power Supply** <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/SyImFhfr0.png" width="250"> </div> <div style="text-align: justify;"> Power Supply adalah komponen elektronik yang sangat penting dalam berbagai aplikasi, terutama dalam proyek yang memerlukan tegangan listrik yang stabil dan dapat diatur sesuai kebutuhan. Produk ini dirancang untuk menyediakan sumber daya listrik dengan tegangan keluaran yang dapat diubah-ubah, memungkinkan pengguna untuk menyesuaikan tegangan sesuai dengan spesifikasi perangkat yang akan diberi daya. </div> ## **Tahapan Perancangan 📋** <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/r19Zc3GBA.png" width="200"> </div> --- ## **Flowchart 🗺️** <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/SymAthfSR.png"> </div> --- ## **Block Diagram 🕹️** <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/ryaH52zSC.png" width="500"> </div> --- ## **Circuit Design 🔌** <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/HkjUg77BC.png"> </div> <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/rk_C5SBSC.png"> </div> --- ## **Code and Documentations </>** - [**GitHub**](https://github.com/kev-nat/Suck-n-Sort) * [**Dataset**](https://universe.roboflow.com/sucknsort/plastic-fruits-labeling) - [**Invoice**](https://docs.google.com/spreadsheets/d/1eXr6alZAvwLhQSbPdTNLADhOc8VBQkKbmYSEKtXqG4E/edit?usp=sharing) * [**PPT + Video Demo**](https://drive.google.com/drive/folders/10384MEys6xIWG7GNrBuUWiGGsP3Fh4y2?usp=sharing) --- ## **Kalkulasi Delta Robot 📐** ### **1. Kalkulasi Pada Servo Motor** <div style="text-align: justify;"> Untuk fungsi robot kami, Rumus Inverse Kinematics diperlukan untuk menghitung sudut gerakan servo motor tergantung pada koordinat yang diterima oleh mikrokontroler. </div> ### **2. Aljabar Geometri Konformal** <div style="text-align: justify;"> Dengan menggunakan Aljabar Geometri Konformal, kita dapat memodelkan pergerakan robot delta sambil memperhitungkan kendala geometrisnya. </div> <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/H1rOZ7QSC.png" width="300"> </div> Σ∗i = Xi − 1/2 ρ2n∞ <div style="text-align: justify;"> Untuk setiap siku, kita dapat menghitung rentang geraknya melalui perpotongan masing-masing dua lingkaran C*i. Caranya dengan menggunakan persamaan berikut. </div> C∗i =(Bi − 1/2 l^2n∞)∧ (I3(si ∧ e3)) <div style="text-align: justify;"> Seperti halnya lingkaran, bola dan lingkaran kita berada dalam bentuk ganda (yaitu 1 dan 2 vektor), dan oleh karena itu, bivektor pasangan titik yang dihasilkan dari pertemuan keduanya (Ti) dihitung sebagai hasil kali luarnya yang diikuti dengan perkalian dengan skalar semu 5D, I5: </div> Ti = (C∗i ∧ Σ∗i )I5 <div style="text-align: justify;"> Solusi individual dapat diekstraksi dari objek pasangan titik ini dengan operator proyeksi. </div> Pi = 1/2(1 + Ti/(√Ti^2)) Wi = − ˜Pi(Ti · n∞)Pi Kemudian, kita bisa mengonversi dari CGA ke titik vektor 3D. wi = −∑j=3j=1(Wi · ej )ejWi · n∞ ### **3. Trigonometry Untuk Sudut Servo Motor** <div style="text-align: justify;"> Setelah mengonversi dari CGA ke Titik Vektor 3D, kita kemudian dapat menggunakan trigonometri untuk mendapatkan persamaan untuk sudut motor </div> θi = atan2(zi · e3, zi · si), zi = wi − rbs ## **Setup 💻** To install the libraries that are needed, run the following command: ```bash pip install numpy ``` ```bash # Object Detection pip install ultralytics pip install opencv-python ``` ```bash # MongoDB pip install pymongo[srv] pip install python-dotenv pip install pillow ``` ```bash # Serial Communication pip install pyserial ``` ## **Code Archive 🗃️** ### **Database Setup** ```bash import pymongo from dotenv import load_dotenv, find_dotenv myclient = pymongo.MongoClient("mongodb+srv://your database url") mydb = myclient["WasteSorting"] mycol = mydb["Types of Trash"] load_dotenv(find_dotenv()) collection = mydb.TypesofTrash Waste1 = { "Name":"Organic", "Amount": 0 } Waste2 = { "Name":"Apple", "Amount": 0 } Waste3 = { "Name":"Orange", "Amount": 0 } Waste4 = { "Name":"Pineapple", "Amount": 0 } Waste5 = { "Name":"Starfruit", "Amount": 0 } Waste6 = { "Name":"Watermelon", "Amount": 0 } Waste7 = { "Name":"Small Plastic Cup", "Amount": 0 } Waste8 = { "Name":"Medium Plastic Cup", "Amount": 0 } Waste9 = { "Name":"Plastic Ashtray", "Amount": 0 } Waste10 = { "Name":"Plastic Sauce Packet", "Amount": 0 } Waste11 = { "Name":"3D Print", "Amount": 0 } Waste12 = { "Name":"Red Plastic Cube", "Amount": 0 } Waste13 = { "Name":"Green Plastic Cube", "Amount": 0 } Waste14 = { "Name":"Blue Plastic Cube", "Amount": 0 } Waste15 = { "Name":"Cardboard", "Amount": 0 } Waste16 = { "Name":"Metal", "Amount": 0 } Waste17 = { "Name":"Inorganic", "Amount": 0 } # Insert Data rec_id1 = collection.insert_one(Waste1) rec_id2 = collection.insert_one(Waste2) rec_id3 = collection.insert_one(Waste3) rec_id4 = collection.insert_one(Waste4) rec_id5 = collection.insert_one(Waste5) rec_id6 = collection.insert_one(Waste6) rec_id7 = collection.insert_one(Waste7) rec_id8 = collection.insert_one(Waste8) rec_id9 = collection.insert_one(Waste9) rec_id10 = collection.insert_one(Waste10) rec_id11 = collection.insert_one(Waste11) rec_id12 = collection.insert_one(Waste12) rec_id13 = collection.insert_one(Waste13) rec_id14 = collection.insert_one(Waste14) rec_id15 = collection.insert_one(Waste15) rec_id16 = collection.insert_one(Waste16) rec_id17 = collection.insert_one(Waste17) print("Data inserted with record ids",Waste1, Waste2, Waste3, Waste4, Waste5, Waste6, Waste7, Waste8, Waste9, Waste10, Waste11, Waste12, Waste13, Waste14, Waste15, Waste16, Waste17) ``` ### **Min Max Positon Coordinate Annotator** ```bash import cv2 # Function to display the coordinates of the points clicked on the image def click_event(event, x, y, flags, params): # Checking for left mouse clicks if event == cv2.EVENT_LBUTTONDOWN: # Displaying the coordinates on the Shell print(x, ' ', y) # Displaying the coordinates on the image window font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(img, str(x) + ',' + str(y), (x,y), font, 1, (255, 0, 0), 2) cv2.imshow('image', img) # Checking for right mouse clicks if event==cv2.EVENT_RBUTTONDOWN: # Displaying the coordinates on the Shell print(x, ' ', y) # Displaying the coordinates on the image window font = cv2.FONT_HERSHEY_SIMPLEX b = img[y, x, 0] g = img[y, x, 1] r = img[y, x, 2] cv2.putText(img, str(b) + ',' + str(g) + ',' + str(r), (x,y), font, 1, (255, 255, 0), 2) cv2.imshow('image', img) # driver function if __name__=="__main__": # Reading the image img = cv2.imread('minmaxposv5.jpg', 1) # Displaying the image cv2.imshow('image', img) cv2.setMouseCallback('image', click_event) cv2.waitKey(0) cv2.destroyAllWindows() ``` ## **CAD and Final Product** <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/HyOmB7mr0.png" width="550"> </div> <div style="text-align: center;"> <img src="https://hackmd.io/_uploads/S1pMLmXrC.jpg" width="550"> </div> ## **What's Next** **Upgrade Biceps and Rods** <div style="text-align: justify;"> For now, robot ini belum bisa menjangkau area yang cukup luas, sehingga geraknya terbatas. Untuk mengatasi masalah tersebut, kita bisa memperpanjang bagian bicep dan rods. Namun, dikarenakan bicep dan rods diperpanjang maka ukuran chasis pun harus diperbesar. </div> **Upgrade Suction Power** <div style="text-align: justify;"> Kedua, suction power dari robot kita ini masih kurang, makanya dia hanya bisa mengambil sampah yang memiliki permukaan yang rata atau datar kalau melengkung agak susah. Untuk mengatasi hal tersebut maka suction powernya harus ditingkatkan. </div> **Upgrade Movement Accuracy** <div style="text-align: justify;"> Ketiga, dikarenakan robot ini akan mengangkat sampah yang lebih berat maka robot membutuhkan torsi yang lebih tinggi. Instead of menggunakan servo, kita bisa menggunakan stepper motor hal ini juga bisa membuat gerakan robot lebih akurat. </div>