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

Desain dan Pengembangan Robot Inspeksi Berbiaya Rendah

1. Pendahuluan

Infrastruktur negara kita menua dan memburuk dengan cepat. Saat ini tidak ada mekanisme untuk memeriksa secara menyeluruh kondisi jembatan, tangki limbah, jaringan pipa, dan reaktor kami. Banyak dari struktur ini telah mencapai akhir masa pakai desainnya dan perlu diperiksa kerusakannya. Seperti situasi di darat ini, ada juga kebutuhan untuk memeriksa lambung dan geladak kapal Angkatan Laut AS dan kapal tanker minyak untuk mencari tanda-tanda korosi. Banyak struktur tua, seperti jembatan tinggi dan tangki limbah, seringkali sulit untuk diselidiki atau diperiksa karena berbagai alasan. Alasan paling umum adalah bahwa proses inspeksi berbahaya bagi manusia, atau struktur memiliki bagian yang tidak dapat diakses. Alasan umum lainnya adalah bahwa teknologi probe saat ini mungkin tidak memadai untuk memeriksa struktur tersebut secara akurat. Dengan demikian, inspeksi manual jarang dilakukan, melelahkan, mahal, berbahaya, dan rawan kesalahan. Masalah ini menawarkan peluang sempurna untuk robot inspeksi yang dibuat dengan baik.

Robot inspeksi biasanya dirancang dan dikembangkan oleh tim insinyur listrik dan mekanik yang didanai dengan baik. Robot komersial, seperti Packbot 510 (http://endeavourrobotics.com/products), dapat berharga lebih dari $100.000. Mengingat kendala proyek pameran sains individu, ruang lingkup di sini adalah merancang, mengembangkan, dan menguji prototipe murah untuk robot inspeksi. Tujuan dari proyek ini adalah untuk mengembangkan prototipe robot inspeksi kecil, ringan, dan murah yang dapat tetap menempel pada permukaan yang akan diperiksa. Proyek ini terdiri dari tugas-tugas berikut:tinjauan literatur dan desain yang ada; spesifikasi persyaratan; desain robot; pengembangan prototipe awal dan pengujian; perhitungan mekanika teknik; memprogram robot menggunakan Python; pengembangan dan pengujian prototipe kedua; dan pengembangan serta pengujian prototipe akhir.

Sebelum membangun robot secara fisik, perangkat lunak pemodelan 3D SketchUp digunakan untuk memvisualisasikan robot dan menyempurnakan desain. Robot dibangun dari komponen komersial, termasuk modul Raspberry Pi 3 untuk mengontrol robot. Desain ditingkatkan secara iteratif melalui pengujian berulang. Kode Python ditulis dari awal untuk memprogram robot. Seiring berkembangnya desain, baik perangkat keras maupun perangkat lunak harus dimodifikasi bersama-sama. Prototipe tersebut didemonstrasikan kepada para ahli teknik di Washington River Protection Solutions dan Pacific Northwest National Laboratory, dan Senior Design Class di Washington State

Universitas, Tri Kota. Berdasarkan masukan dari para ahli, perhitungan mekanika teknik, dan hasil pengujian, prototipe ketiga dibangun dan diprogram. Robot yang dihasilkan mampu memanjat dinding dengan kecepatan yang wajar dan memiliki banyak kamera untuk membantu navigasi dan inspeksi. Robot yang diproduksi oleh proyek ini mewakili desain unik dengan perangkat lunak yang ditulis khusus untuk tujuan ini. Prototipe ini berfungsi sebagai platform yang fleksibel karena sensor baru dapat ditambahkan sesuai kebutuhan untuk meningkatkan kemampuan inspeksi.

2. Tinjauan Pustaka

Sebelum mulai mengerjakan proyek, saya melakukan tinjauan literatur untuk mengevaluasi solusi yang ada. Probe yang tersedia saat ini dapat diklasifikasikan menjadi dua jenis – stasioner dan mobile.

Probe stasioner adalah alat yang paling banyak digunakan untuk memeriksa struktur. Mereka memberikan informasi yang sangat rinci tentang bagian tertentu dari suatu struktur dan dapat terus memantaunya. Namun, begitu mereka diposisikan di suatu lokasi, jangkauan pengamatan akan terbatas. Karena kurangnya mobilitas, mereka tidak cocok untuk memantau struktur besar. Kategori lainnya terdiri dari probe yang dipasang di robot. Ini menawarkan tingkat fungsionalitas yang lebih besar karena probe dapat dipindahkan dengan bebas. Sebagian besar robot yang ada di pasaran saat ini sangat terspesialisasi dalam tugas atau jenis pemeriksaan tertentu. Beberapa robot mungkin berspesialisasi dalam melintasi air, dataran tinggi, atau medan semi-padat berawa, tetapi tidak satu pun dari robot tersebut yang berguna untuk inspeksi struktural.

Robot inspeksi akuatik AQUA 1 adalah contoh yang bagus. AQUA adalah robot inspeksi yang sangat terspesialisasi dan mahal. Ia merangkak di dasar badan air dan melakukan pemindaian 3 dimensi (3D) di areanya. Ia dapat menggunakan kamera, pemindaian sensor, dan algoritme untuk mengikuti jalur yang ditentukan di bawah air. Terlepas dari kenyataan bahwa itu adalah robot inspeksi, itu tidak berguna untuk inspeksi struktural, karena tidak memiliki kemampuan untuk memanjat permukaan besi.

Contoh lain adalah AETOS 2 drone udara. Drone AETOS adalah quadcopter yang digunakan untuk survei, pemetaan lanskap, dan tanggap darurat. Robot itu sendiri adalah quadcopter yang dikemudikan jarak jauh yang menahan kamera berdaya tinggi. Kamera ini mampu menangkap dan merekam gambar dan video detail struktur dan lanskap. Drone AETOS serbaguna dalam penggunaannya dan bahkan dapat memeriksa struktur terbuka seperti jembatan dari udara. Kerugian dari drone adalah tidak ideal untuk inspeksi struktural yang terperinci, karena angin dapat menggeser drone saat berada di tengah inspeksi. Drone juga tidak dapat digunakan di dalam bangunan tertutup, karena berisiko menabrak. Drone AETOS membutuhkan pengisian daya yang sering dan tidak dapat bertahan di udara untuk waktu yang lama. Itu juga mahal, rentan terhadap kerusakan, dan sulit dipulihkan dari kerusakan.

Beberapa robot yang tersedia saat ini mengemas sensor yang kuat, beberapa kamera, dan kemampuan memanjat dinding. Robot semacam itu sangat mahal dan tidak dapat digunakan dalam jumlah besar untuk melakukan inspeksi. Risiko kerusakan yang terkait dengan robot ini dan biaya penggantian juga sangat tinggi. Kerusakan adalah pertimbangan yang sangat nyata, karena hampir setiap robot yang digunakan untuk memeriksa reaktor nuklir yang rusak di situs Fukushima Daiichi di Jepang telah gagal pada Maret 2017. Contoh robot mahal adalah MagneBike 3 . MagneBike adalah robot yang cukup baru yang belum dijual secara komersial tetapi saat ini sedang dalam pengujian dan pengembangan pribadi. MagneBike adalah sepeda robot yang memiliki dua roda yang terhubung ke bodi utama dengan sambungan bebas. Sambungan ini memungkinkan robot bergerak bebas di permukaan besi apa pun terlepas dari konturnya. Setiap roda juga memiliki dua tuas yang menempel di sisinya dan menyerupai roda latihan. Panjang setiap tuas sedikit lebih besar dari jari-jari setiap roda. Tuas digunakan untuk memutuskan hubungan roda dari permukaan magnet yang terhubung dengannya, memungkinkannya untuk melintasi dengan mulus pada sudut interior. MagneBike dapat diatur untuk mendukung kamera definisi tinggi dan mendukung sensor pemetaan 3D, yang memungkinkannya membuat model 3D di sekitarnya. Robot dikendalikan dan diberi daya melalui kabel dan merupakan perangkat yang ditambatkan agar mudah diambil kembali. Namun kelemahan dari MagneBike adalah sangat sulit untuk diganti jika rusak, dan cukup mahal jika suku cadang yang digunakan sudah habis.

Robot beroda magnet serupa adalah Robot Magnetik Multi-Segmentasi Angkatan Laut AS 4 (MSMR). MSMR adalah robot angkatan laut yang dirancang untuk pemeriksaan lambung kapal. Meskipun MSMR tidak dirancang untuk inspeksi struktur di atas tanah, MSMR dapat dengan mudah disesuaikan untuk memeriksa struktur. Juga, memeriksa lambung kapal dan memeriksa struktur industri, bukanlah tugas yang berbeda. MSMR adalah robot 3-segmen, dengan setiap segmen berupa kotak logam yang berisi elektronik, dengan dua roda terpasang di sisinya. Segmen dihubungkan dengan konektor fleksibel atau sambungan.

Setiap roda dapat bekerja secara independen, dan robot mampu menskalakan rintangan 3D dengan mudah saat semua roda bekerja bersama. Roda magnet dan dapat mendukung robot. Kerugian dari robot ini adalah tidak memiliki tambatan dan hanya ditenagai oleh baterai. Ini tidak menguntungkan, karena membuat robot secara signifikan lebih sulit dikendalikan dan membatasi umur inspeksi robot. MSMR juga saat ini belum dirilis dan hanya digunakan oleh Angkatan Laut. Robot mungkin akan tetap seperti itu di masa mendatang.

Contoh lain dari robot inspeksi adalah Mikrobot Pemanjat Dinding Omni-Directional 5 . Microbot adalah robot melingkar kecil dengan berat hanya 7,2 gram. Ini memiliki diameter 26 mm dan tinggi 16,4 mm. Bot saat ini dalam tahap akhir pengujian dan belum tersedia secara komersial. Robot ini mendukung 3 motor mikro beroda magnet dengan kemampuan berputar 360°. Roda memungkinkannya melintasi sebagian besar permukaan besi dengan mudah. Microbot dapat diatur untuk mendukung satu kamera mikro. Kamera dapat mengirim kembali gambar dan video sederhana ke pengontrol. Robot juga ditambatkan. Itu terhubung ke pengontrolnya dengan kabel tembaga yang dapat diisolasi untuk perlindungan. Meskipun robot ini tidak mahal dan dapat digunakan dalam kelompok, robot ini hanya dapat mendukung satu kamera, dan tambatannya lemah. Itu juga tidak memiliki ruang untuk ekspansi dan tidak dapat mendukung sensor apa pun.

Ada desain robot yang menggunakan cangkir hisap atau tekanan negatif yang dihasilkan oleh baling-baling untuk menempel pada permukaan. Cangkir hisap menawarkan mobilitas terbatas dibandingkan dengan roda magnet dan tidak cocok untuk robot berat yang dilengkapi dengan banyak kamera dan sensor. Selain itu, daya hisap akan menurun seiring waktu karena keausan mekanis. Sistem tekanan negatif membutuhkan daya yang cukup besar dan daya yang konstan. Jika daya hilang, robot akan terlepas dari permukaan. Masing-masing desain yang telah dicoba sebelumnya memiliki kelebihan dan kekurangan, tetapi tidak ada yang menyelesaikan masalah pemeriksaan secara tuntas. Tinjauan literatur memungkinkan saya untuk mensurvei lanskap, mempelajari apa yang telah dicoba sebelumnya, dan membuat desain saya sendiri.

1. Spesifikasi Persyaratan

Robot inspeksi harus memenuhi beberapa kendala. Kendala pertama pada robot adalah ukuran. Robot inspeksi idealnya berukuran kecil. Beberapa ruang yang akan diperiksa robot memiliki lebar dan tinggi kurang dari satu kaki. Ukuran dibatasi dalam proyek ini hingga 25x25x25 cm. Ukuran yang lebih kecil meningkatkan mobilitas dan keserbagunaan robot di lingkungan yang kompleks, seperti balok jembatan. Keuntungan dari ukurannya yang kecil adalah robot akan mengkonsumsi lebih sedikit daya dan lebih mudah untuk dimanipulasi. Robot juga harus ditambatkan. Robot yang ditambatkan akan dapat mengirim lebih banyak data dengan lebih cepat dan lebih andal daripada robot nirkabel.

Pengendali robot tidak perlu khawatir robot meninggalkan jangkauan sinyal nirkabel, dan juga dapat dengan mudah mengekstrak robot jika terjadi kecelakaan atau kegagalan. Selain itu, robot inspeksi harus mendukung beberapa kamera untuk inspeksi dan navigasi yang menyeluruh. Rekaman kamera langsung dari robot ke pengontrol akan diperlukan agar robot dapat digerakkan secara akurat melalui struktur yang diperiksanya, dan untuk memperingatkan pengontrol tentang bahaya langsung. Kendala lain yang harus dipenuhi robot adalah kemampuannya untuk memanjat permukaan besi. Cara termudah untuk memenuhi kendala itu adalah agar robot memiliki roda magnet atau badan magnet sehingga memungkinkan robot untuk menskalakan permukaan besi dengan mudah. Hal ini karena bahan feromagnetik, seperti baja ringan, baja paduan rendah dan besi, merupakan bahan utama dalam konstruksi struktur tersebut. Terakhir, robot harus murah, sebaiknya dengan biaya di bawah $200. Robot murah mudah diganti, dan ketika memeriksa struktur yang lebih tua, tidak mengherankan jika robot menjadi rusak. Robot yang murah juga berarti lebih banyak robot yang dapat dibeli dan digunakan untuk suatu tugas, yang dapat sangat meningkatkan efisiensi pemeriksaan.

4. Desain dan Pengembangan Robot

4.1. Prototipe 1:LEGO EV3

Untuk merancang robot yang memenuhi batasan yang disebutkan di atas, saya mulai membuat prototipe dengan modul kontrol LEGO EV3 dan bagian LEGO lainnya. Saya awalnya mulai bekerja dengan LEGO untuk membuat prototipe karena mudah dibuat dengan LEGO dan membuat robot cukup sederhana. Modul EV3 adalah inti robot yang dapat diprogram yang mengontrol robot LEGO dan sudah tersedia di rumah. Menggunakan potongan-potongan LEGO, cukup mudah untuk membuat tubuh robot yang kokoh dengan 4 motor dan roda yang terpasang. Saat memulai dengan EV3, saya mencoba membuat desain yang datar dan ringkas untuk robot saya. Karena potongan-potongan LEGO yang pas, ide itu mulai gagal ketika tiba saatnya untuk memasangkan ke-3 rd saya. dan ke-4 motor. Saya tidak dapat menyesuaikan motor saya ke modul kontrol saya. Selanjutnya, saya bergerak menuju desain bersudut, dengan modul digantung di atas sisa robot saya, dan motor melengkung dari rangka utama. Setelah merancang rangka penopang utama, yang nyaman di bawah pengontrol, saya dapat merancang penopang motor. Penyangganya adalah lengan miring ke bawah yang diproyeksikan dari rangka utama dan melekat pada motor. Motor disematkan secara menyeluruh ke ujung penyangga untuk mencegah kegagalan struktural selama pengujian. Untuk lebih menstabilkan motor dan penyangganya, saya menghubungkan setiap motor ke motor terdekat dengan konektor kaku. Konektor juga mencegah satu motor bergerak lebih cepat daripada yang lain, karena berfungsi untuk menghubungkan motor bersama-sama dan membuat kerangka kerja sekunder.

Setelah menyelesaikan desain struktural dan konstruksi robot LEGO, saya beralih ke desain roda. Untuk roda, saya mulai dengan 4 roda EV3 ukuran standar. Setiap roda memiliki radius 17 mm dan lebar 17 mm. Setiap roda juga dilengkapi dengan ban karet berlubang yang terpasang. Untuk mengonfigurasi roda agar gerakan magnetis, saya mulai dengan melepas ban. Setelah melepas ban, hanya roda plastik kosong yang tersisa. Plastik itu memiliki lekukan yang sangat dalam, yang secara konsisten menutupi sebagian besar roda. Karena lekukan, saya tidak bisa langsung menempelkan magnet ke roda. Magnet yang saya gunakan untuk robot LEGO adalah cakram D51-N52 dari K&J Magnetics 6 . Magnet D51-N52 adalah magnet piringan neodymium-iron-boron (NdFeB) yang memiliki diameter 5/16” (8 mm) dan ketebalan 1/16”

(1.6mm). Saya memilih untuk menggunakan magnet tersebut karena magnet tersebut cukup kecil bagi saya untuk dapat melilitkan rantai magnet tersebut di sekitar roda dan membuat pita magnet. Setiap D51-N52 memiliki gaya tarik sebesar 2,05 lb (9,1 Newton) ketika ditempelkan langsung pada pelat baja. Dengan empat roda yang dibungkus magnet, magnet akan lebih dari cukup untuk menahan robot LEGO, yang ditunjukkan pada Gambar 1.

Saya menguji metode menempelkan magnet ke roda robot saya. Saya awalnya mencoba membungkus kertas di sekitar roda dan menempelkan magnet super ke kertas itu. Gagasan itu tidak berhasil karena kertasnya terlalu lemah untuk memberikan permukaan yang kokoh bagi magnet, dan tidak

cukup kuat untuk menjaga magnet agar tidak menggumpal dan meninggalkan roda. Selanjutnya, saya mencoba mengisi lubang di roda dengan tanah liat atau playdoh, dan menempelkan magnet di atasnya. Ide ini juga gagal karena tidak ada bahan yang menempel pada lem super. Setelah tak satu pun dari gagasan itu berhasil, saya bereksperimen untuk melihat apakah gabungan dari kedua gagasan itu akan berhasil. Saya mengisi lekukan di roda dengan potongan kertas yang dilipat dan dikompresi. Saya kemudian menempelkan strip di tempatnya.

Setelah itu, saya membungkus kertas yang dilipat dan diperkuat dengan untaian logam tipis di sekitar roda. Kertas yang diperkuat adalah permukaan yang kokoh namun cukup fleksibel bagi saya untuk merekatkan magnet. Setelah berhasil memasang magnet ke keempat roda, saya membungkus setiap roda dengan lakban alih-alih menggunakan ban. Alasan saya memilih untuk tidak menggunakan ban adalah karena ban akan mengurangi gaya tarik magnet terlalu banyak karena ketebalannya, sementara lakban tidak akan secara signifikan mengurangi gaya tarik sambil tetap menawarkan traksi. Setelah membungkus roda, saya menjalankan poros LEGO melalui setiap roda dan menggunakannya untuk memasang setiap roda ke motor saya.

Pemasangan roda menandai akhir dari pengembangan prototipe pertama saya. Saya menguji prototipe dengan menekannya ke pintu baja. Robot itu mampu menempel erat di pintu tanpa tergelincir. Robot gagal memenuhi beberapa batasan desain:Ukurannya lebih besar dari 25x25x25 cm, harganya lebih dari $200, tidak ditambatkan, memerlukan baterai, dan tidak mendukung kamera.

Namun, prototipe awal ini memenuhi tujuan utama. Tujuan sebenarnya dari prototipe pertama saya adalah untuk membantu saya memahami cara menempelkan robot ke permukaan besi secara efisien dengan magnet, dan membantu saya memahami cara mendesain robot dan roda untuk menyelesaikan masalah pemeriksaan.

4.2     Pemilihan Material dan Komponen untuk Prototipe Kedua

Setelah membangun robot prototipe pertama saya dengan LEGO, saya memutuskan untuk memilih komponen, dan merancang dan memvisualisasikan prototipe berikutnya di komputer sebelum memulai konstruksi. Pertama, saya memutuskan bahwa saya akan menggunakan Raspberry Pi sebagai inti dari prototipe masa depan saya. Alasan saya memilih Raspberry Pi adalah karena Pi adalah papan sirkuit yang cukup kuat meskipun sangat ringan dan ringkas. Pi dapat terhubung ke papan kontrol motor, sambil tetap memiliki kemampuan USB dan Ethernet. Selain itu, Pi adalah komputer yang sangat murah dan dilengkapi dengan paket OS gratis. Gambar 2 adalah foto Raspberry Pi 3.

Selanjutnya saya memutuskan untuk menggunakan papan kontrol motor L298N untuk mengontrol motor saya. L298N adalah pengontrol motor yang cukup sederhana yang dapat mengontrol hingga 2 motor DC. Kontroler motor didokumentasikan mampu menangani tegangan hingga 35 V. Karena sebagian besar motor yang ingin saya gunakan berada di kisaran 6 V-12 V, L298N sangat ideal untuk saya. Papannya sendiri cukup kecil, hanya sepertiga ukuran Raspberry Pi. Karena kesederhanaan ini, mudah untuk membeli beberapa L298N dengan biaya rendah. Saya juga memutuskan bahwa saya akan memulai dengan satu kamera untuk prototipe pertama saya dengan Raspberry Pi. Kamera yang saya pilih untuk digunakan adalah kamera Raspberry Pi NoIR.

Kamera NoIR ini adalah kamera yang kompatibel dengan Pi yang dirancang untuk penglihatan malam. Sementara struktur seperti jembatan mungkin menyala, bagian dalam tangki mungkin akan gelap; jadi saya memilih kamera Pi NoIR daripada kamera Pi standar. Saya juga memilih kamera NoIR karena dibuat untuk Raspberry Pi dan akan lebih mudah digunakan daripada kamera lainnya.

Untuk motor saya, saya memilih motor Arduino plastik 6 V DC standar. Saya memilih motor ini meskipun motor Arduino, karena saya tahu bahwa papan driver saya dapat menjalankan motor DC apa pun dalam batas tegangannya. Saya melakukan perhitungan mekanika teknik, seperti yang dibahas di bawah ini, untuk memperkirakan torsi motor yang dibutuhkan. Motor plastik sangat mudah digunakan dan disambungkan, dan juga murah. Jika salah satu motor rusak, akan mudah untuk menggantinya dengan motor baru. Motor juga dilengkapi dengan roda plastik yang cukup besar untuk menopang dan menggerakkan robot, namun cukup kecil untuk dikendalikan dengan mudah. Selain dua motor penggerak saya, saya ingin menggunakan motor lain untuk membuat mekanisme tuas di bawah robot yang dapat menopangnya. Mekanisme tersebut akan digunakan untuk mengangkat bagian depan robot dari tanah sehingga dapat menempel pada permukaan besi dengan lebih baik. Saya berencana memasang robot pada sasis robot plastik sederhana, dan menggunakan strip logam untuk membentuk platform yang ditinggikan untuk bagian mana pun yang tidak dapat diakomodasi pada sasis itu sendiri. Saya memutuskan untuk memberi daya pada L298Ns dengan paket baterai 4-AA atau dua paket baterai 2-AA. Raspberry Pi dirancang untuk menerima daya dari kabel USB yang diperpanjang ke outlet listrik. Robot akan dikendalikan oleh pengontrol Xbox 360 berkabel yang terhubung dengannya menggunakan kabel USB. Saya memutuskan untuk menggunakan Xbox Controller karena memiliki directional pad, yang ideal untuk mengontrol pergerakan robot. Ini juga memiliki tombol tambahan yang dapat ditugaskan untuk tugas yang berbeda dalam kode robot seperti kontrol kamera. Untuk magnet, saya memutuskan untuk terus menggunakan magnet D51-N52 karena saya telah membuktikan bahwa menggunakannya untuk membuat pita magnet di sekitar roda adalah metode yang layak untuk membuat roda magnet dengan prototipe pertama saya.

4.3    Computer Aided Design (CAD) dari Prototipe Kedua

Setelah memutuskan bahan dan komponen yang akan saya gunakan untuk membuat nd . saya yang kedua prototipe, saya melanjutkan untuk membuat gambar CAD dari prototipe saya, sehingga saya dapat membuatnya dengan mudah setelah bagian yang saya tentukan tiba. Untuk membuat gambar CAD, saya menggunakan software bernama SketchUp, karena software ini gratis, mudah dipelajari sendiri, dan mudah digunakan. Menggunakan pengukuran online dan fisik (setelah suku cadang tiba) dari suku cadang yang saya rencanakan untuk digunakan untuk membuat yang kedua nd robot prototipe, saya dapat membuat gambar CAD 3D realistis dari prototipe robot saya seperti yang ditunjukkan pada Gambar 3. Saya kemudian menyempurnakan prototipe saya dengan mempertimbangkan lokasi sekrup yang optimal. Setelah beberapa iterasi menambahkan fitur desain dan menyempurnakan detail, saya bisa mendapatkan model 3D yang memuaskan dari robot saya. Ini berfungsi untuk menyederhanakan bagian perangkat keras dari proyek saya, karena saya hanya perlu membuat salinan fisik dari model komputer menggunakan bagian asli.

4.4   Prototipe 2a:Sasis yang Sudah Jadi

Membangun Prototipe 2a

Setelah semua bagian saya tiba dan gambar CAD saya selesai, membangun robot saya adalah hal yang sederhana. Saat membuat robot, saya mulai dengan mengebor lubang untuk memasang Raspberry Pi. Untuk memplot titik-titik yang akan saya bor pada sasis plastik, saya menahan Pi di atas ujung belakang sasis dan menggunakan pensil tipis untuk menandai area di bawah setiap lubang sekrup pada sasis. Saya kemudian memilih mata bor yang sedikit lebih besar dari lubang sekrup pada Pi untuk mengebor setiap lubang. Saya kemudian juga mengebor lubang di bagian depan sasis untuk mengakomodasi papan driver. Untuk memasang papan driver dan Raspberry Pi, saya menggunakan baut dan mur #4-40. Setelah memasang kedua papan, saya menggunakan sekrup yang disediakan untuk memasang roda belakang dan

motor ke lubang pra-potong pada sasis. Sasis, motor, dan roda belakang dilengkapi dengan mur, baut, dan instruksi, sehingga pemasangan kedua komponen ke sasis menjadi mudah.

Untuk prototipe ini, saya menggunakan pita dua sisi tugas berat untuk menempelkan motor ketiga ke bagian bawah robot, langsung di antara kedua motor penggerak. Saya kemudian mengambil empat batang es loli dan merekatkannya secara memanjang menjadi dua set. Hasilnya, saya mendapat dua batang es loli yang sangat tebal. Saya kemudian memotong stik es krim menjadi dua, dan membuat sketsa ujung poros motor di setiap ujung stik es krim. Saya kemudian menggunakan bor untuk membuat lubang di masing-masing tongkat baru yang akan menampung poros motor. Hasilnya, saya mendapat 4 batang es loli yang tebal, setengah panjang, dan dibor. Saya kemudian memilih dua tongkat yang paling pas, dan menempelkannya ke setiap ujung gandar di motor tengah. Saya mengamankan stik es krim dengan lem panas. Tujuan dari alat bermotor ini adalah untuk berfungsi sebagai pengangkat yang akan mendorong robot keluar dari permukaan setelah motor diaktifkan. Perangkat ini dirancang untuk memungkinkan robot melepaskan diri dari permukaan besi. Itu juga akan memungkinkan robot untuk mengangkat roda magnet utamanya dari tanah sehingga bisa menempelkan dirinya ke dinding besi dari permukaan lain. Ini adalah salah satu dari beberapa fitur desain unik dari proyek ini. Desain roda magnet adalah fitur inovatif lainnya.

Setelah memasang motor ketiga, saya menggunakan pita gantungan logam berlubang untuk membuat struktur seperti jembatan di atas papan driver dan Raspberry Pi. Pita gantungan berfungsi sebagai permukaan sekunder di mana bagian tambahan dapat dipasang. Karena perforasi, mudah untuk mengebor lubang di sasis agar sesuai dengan pita gantungan logam, dan kencangkan dengan sisa baut dan mur. Di atas jembatan pita gantungan di bagian depan robot, saya memasang papan driver kedua untuk mengontrol motor ketiga karena setiap papan hanya dapat mengontrol dua motor. Saya dapat memasang papan driver menggunakan selotip dua sisi. Dengan lebih banyak selotip dua sisi, saya dapat memasang dudukan baterai 4-AA ke bagian atas hanggar logam belakang untuk memberi daya pada papan driver utama. Saya juga memasang dua dudukan baterai 2-AA di bagian depan robot saya untuk memberi daya pada papan driver kedua.

Saya menyelesaikan prototipe kedua ini dengan menempelkan kamera Raspberry Pi NoIR ke bagian depan jembatan pita gantungan logam. Setelah membuat robot, yang tersisa hanyalah membuat roda menjadi magnet. Saya melepas ban dari roda dan meletakkan lapisan selotip dua sisi di atas setiap roda. Roda dan motor plastik ditunjukkan pada Gambar 4. I menempelkan magnet D51-N52 melingkar kecil dalam lingkaran di sekitar tepi setiap roda, sehingga ada dua cincin di setiap roda. Setelah menambahkan semua magnet, saya menutupi kedua roda dalam satu lapisan lakban untuk melindungi magnet. Untuk menarik roda belakang, saya menempelkan magnet ke dalam cincin di sekitar roda dan kemudian membungkusnya dengan lakban. Alasan lakban digunakan adalah karena cukup tipis sehingga tidak mengurangi gaya tarik secara signifikan, tetapi cukup kuat untuk melindungi magnet.

Prototipe Pengkabelan 2a

Setelah memasang semua komponen robot saya, saya mulai menyambungkannya. Kekuatan untuk Raspberry Pi masuk melalui port micro USB di sisinya. Saya kemudian menyambungkan paket baterai ke papan driver masing-masing. Motor juga terhubung ke papan driver menggunakan kabel yang disertakan dengan motor. Saya menyolder kabel ke kabel daya pada motor dan menghubungkannya dengan sekrup ke papan driver. Saya kemudian menyambungkan pin GPIO pada Pi ke papan driver. Pin GPIO adalah pin input/output tujuan umum pada Raspberry Pi. Beberapa pin digunakan untuk ground dan power, sementara beberapa dapat digunakan untuk mengirim sinyal melalui kabel. Saya menghubungkan GPIO 2 &6 ke satu papan driver dan 4 &9 ke papan driver lainnya. Pin tersebut adalah pin 5 V dan digunakan untuk memungkinkan pergerakan dan kontrol motor melalui papan driver. Saya kemudian menyambungkan pin 11, 12, 13, &15 ke papan driver pertama, dan kabel pin 16, &18 ke papan driver lainnya. Pin tersebut digunakan untuk mengirimkan sinyal kontrol motor yang sebenarnya. Setiap motor

membutuhkan dua pin untuk kontrol, dan karena robot menggunakan 3 motor, papan driver memerlukan 6 pin GPIO sinyal yang terhubung untuk kontrol motor, selain 5V dan ground per papan. Setelah saya menghubungkan pin GPIO yang diperlukan, saya menghubungkan kabel Ethernet antara Pi dan laptop saya, sehingga laptop saya dapat memiliki koneksi desktop jarak jauh dengan Raspberry Pi saya, menghilangkan kebutuhan akan monitor, keyboard, dan mouse. Saya juga menghubungkan hub bertenaga melalui USB ke Pi saya. Hub terhubung ke pengontrol Xbox, sehingga saya dapat mengontrol robot melalui pengontrol Xbox.

Prototipe Pemrograman 2a

Bagian tersulit dalam mendesain ke-2 nd . saya prototipe adalah kodenya. Dengan prototipe pertama saya, itu hanyalah model perangkat keras; itu tidak menjalankan kode. Alasan saya adalah, dengan st saya yang pertama prototipe, coba semampu saya, saya tidak dapat membuat keempat motor bergerak secara bersamaan dengan kode. Prototipe pertama juga dibuat terutama untuk menguji konsep roda magnet dan untuk membantu saya menghasilkan desain yang ideal untuk prototipe masa depan. Di Raspberry Pi, saya membuat kode dengan Python, karena itu adalah satu-satunya bahasa untuk Raspberry Pi yang saya mengerti. Tetapi bahkan sebelum saya memulai kode saya, saya harus mengatur robot saya agar desktop jarak jauh kompatibel dengan laptop saya.

Untuk mengatur Pi saya, saya harus memasang monitor, keyboard, dan mouse untuk sementara ke Raspberry Pi. Setelah itu, saya mem-boot Pi dan menetapkan IP statis untuknya melalui Ethernet. Saya memilih 192.168.1.10 karena alamatnya sederhana dan mudah. Untuk mengatur IP saya harus mengedit

/ect/dhcpcd.conf di Pi saya. File dhpcd.conf mengontrol IP dan koneksi jaringan Pi; untuk mengatur IP statis saya harus menambahkan baris ke awal file:

antarmuka eth0

static ip_address=192.168.1.10 router statis=192.168.1.1

Setelah mengatur IP statis Pi, saya menginstal paket Linux tightvncserver. Tightvncserver adalah paket yang memungkinkan server VNC (koneksi jaringan virtual) diatur di Raspberry Pi. Koneksi Remote Desktop dijalankan melalui server VNC. Setelah menyiapkan server VNC, saya dapat membuat koneksi Remote Desktop ke Raspberry Pi saya melalui

laptop. Setelah mengonfirmasi bahwa saya dapat mengakses Pi saya, saya memutuskan sambungan monitor, keyboard, dan mouse saya. Saya kemudian memulai pengkodean untuk robot.

Pertama, saya membutuhkan cara untuk mengetahui pin GPIO mana yang sesuai dengan motor apa di Pi saya. Setiap pin GPIO saat diaktifkan, memutar satu motor maju atau mundur dengan kecepatan konstan. Dengan demikian, setiap motor memiliki dua pin GPIO yang sesuai, pengontrol gerak maju, dan pengontrol gerak mundur. Untuk mengetahui apa yang berhubungan dengan setiap pin GPIO, saya menulis sebuah program yang secara individual menguji setiap pin GPIO, sehingga saya dapat mencatat pin GPIO mana yang melakukan apa. Saya mencatat pengamatan saya melalui komentar di program saya:

impor RPi.GPIO sebagai GPIO dari waktu impor tidur

GPIO.setmode(GPIO.BOARD)

GPIO.setup(12,GPIO.OUT) #Left Backward GPIO.setup(11,GPIO.OUT) #Left Forward GPIO.setup(13,GPIO.OUT) #Right Forward GPIO.setup(15,GPIO.OUT) # Kanan Mundur GPIO.setup(16,GPIO.OUT) #Lifter Out GPIO.setup(18,GPIO.OUT) #Lifter In

GPIO.output(12,GPIO.HIGH)

tidur(2) GPIO.output(12,GPIO.LOW)

tidur(1)

GPIO.output(11,GPIO.HIGH)

tidur(2) GPIO.output(11,GPIO.LOW)

tidur(1)

GPIO.output(13,GPIO.HIGH)

tidur(2) GPIO.output(13,GPIO.LOW)

tidur(1)

GPIO.output(15,GPIO.HIGH)

tidur(2) GPIO.output(15,GPIO.LOW)

tidur(1)

GPIO.output(16,GPIO.HIGH)

tidur(0.5) GPIO.output(16,GPIO.LOW)

tidur(1)

GPIO.output(18,GPIO.HIGH)

tidur(0.5) GPIO.output(18,GPIO.LOW)

tidur(1)

Selanjutnya, saya memerlukan perangkat lunak atau kode yang memungkinkan Raspberry Pi saya menerima dan memahami sinyal yang dikirim oleh pengontrol Xbox. Xboxdrv adalah driver pengontrol Xbox untuk Linux. Saya menginstalnya dan menggunakannya untuk mencoba menghubungkan Pi saya ke pengontrol Xbox saya. Biasanya menjalankan perintah 'sudo xboxdrv' di prompt akan menampilkan input dari pengontrol Xbox yang terhubung di jendela command prompt. Namun pengontrol Xbox saya tidak dibuat oleh Microsoft, jadi tidak didukung secara normal oleh xboxdrv. Saya memperbaiki masalah dengan menjalankan perintah:

sudo xboxdrv –device-by-id 1bad:f02e –type xbox360 –detach-kernel-driver –mimic-xpad

Saya dapat membuat perintah ini setelah meneliti cara menggunakan xboxdrv dan cara memodifikasi fungsi normal dengan kode. Dengan perintah ini, saya mengidentifikasi pengontrol yang terhubung sebagai pengontrol Xbox menggunakan id perangkatnya yang 1bad:f02e. This command allowed me to view the inputs from the controller in the command prompt. I needed a way to access the input values from a

Python program, so that I would be able to use the values to control my robot. After some searching online, I found a Python program that received and displayed Xbox controller input values on Github 7 . The code was by martinohanlon. I downloaded the code onto my Raspberry Pi and started working on modifying it to control the motors on the robot based on the values it received. The problem I faced was that the code was so long and complex, that I was unable to tell where the input value from the Xbox controller was read. To solve that problem, I went through the program and I made a series of print statements that printed the variables of the program as it ran. Through the process of observing the values as buttons were pressed, and deleting print statements, I was able to find the main event system in the program at line 265:

#run until the controller is stopped while(self.running):

#react to the pygame events that come from the xbox controller for event in pygame.event.get():

#thumb sticks, trigger buttons

if event.type ==JOYAXISMOTION:#is this axis on our xbox controller

if event.axis in self.AXISCONTROLMAP:#is this a y axis

yAxis =True if (event.axis ==self.PyGameAxis.LTHUMBY or event.axis ==self.PyGameAxis.RTHUMBY) else False

#update the control value self.updateControlValue(self.AXISCONTROLMAP[event.axis],

self._sortOutAxisValue(event.value, yAxis)) #is this axis a trigger

if event.axis in self.TRIGGERCONTROLMAP:#update the control value

self.updateControlValue(self.TRIGGERCONTROLMAP[event.axis], self._sortOutTriggerValue(event.value))

#d pad

elif event.type ==JOYHATMOTION:#update control value

self.updateControlValue(self.XboxControls.DPAD, event.value)

#button pressed and unpressed

elif event.type ==JOYBUTTONUP or event.type ==JOYBUTTONDOWN:#is this button on our xbox controller

if event.button in self.BUTTONCONTROLMAP:#update control value

self.updateControlValue(self.BUTTONCONTROLMAP[event.button], self._sortOutButtonValue(event.type))

Within the main event system, I searched for the component that handled the directional pad (d- pad) on the Xbox controller, as I was planning on using it to control the motors on the robot.

After finding the directional pad control component, I added some statements to the end that sent signals through the GPIO pins to the motors whenever a certain direction was pressed on the D- Pad:

#d pad

elif event.type ==JOYHATMOTION:#update control value

self.updateControlValue(self.XboxControls.DPAD, event.value) if event.value ==(0,1):#Forward

GPIO.output(11,GPIO.HIGH) #Left Forward GPIO.output(13,GPIO.HIGH) #Right Forward

elif event.value ==(0,-1):#Backward GPIO.output(12,GPIO.HIGH) #Left Backward GPIO.output(15,GPIO.HIGH) #Right Backward

elif event.value ==(1,0):#Right GPIO.output(11,GPIO.HIGH) #Left Forward

GPIO.output(15,GPIO.HIGH) #Right Backward elif event.value ==(0,1):#Left

GPIO.output(12,GPIO.HIGH) #Left Backward GPIO.output(13,GPIO.HIGH) #Right Forward

GPIO.output(12,GPIO.LOW) GPIO.output(11,GPIO.LOW) GPIO.output(13,GPIO.LOW) GPIO.output(15,GPIO.LOW)

After successfully configuring the motors, my next challenge was to code the Raspberry NoIR camera. The Pi camera came with a Python camera package. Coding it so that pictures were taken or videos were recorded every time certain buttons on the Xbox controller were pressed was fairly easy.

#button pressed and unpressed

elif event.type ==JOYBUTTONUP or event.type ==JOYBUTTONDOWN:#is this button on our xbox controller

if event.button in self.BUTTONCONTROLMAP:#update control value

self.updateControlValue(self.BUTTONCONTROLMAP[event.button], self._sortOutButtonValue(event.type))

if event.button ==0 and event.type ==10:camera.capture(‘image’ + imgNum + ‘.jpg’) imgNum =imgNum + 1

if event.button ==1 and event.type ==10:if isRec ==False:

camera.start_recording(‘video’ + recNum + ‘.h264’) isRec =True

else:

camera.stop_recording() isRec =False

if event.button ==1 and event.type ==10:if isPrev ==False:

camera.start_preview() isPrev ==True

else:

camera.stop_preview() isPrev ==False

For this portion of the code, I did have to make variables to serve as counters every time a picture or video was taken, so that they would be numbered. I also had to make Boolean variables that determined whether a video was being taken, to prevent the robot from trying to take another video while one was already recording. After coding the camera, I was finished with programming the robot.

Testing Prototype 2a

The first thing I recorded was the mass of the robot. Using a standard kitchen scale, I recorded the mass of the robot to be 0.66 kg. While not being especially light, prototype 2a was significantly lighter than prototype 1, which had a mass of 0.92 kg without cameras. Prototype 2a was also measured to be 15 cm long x 18 cm wide x 12 cm tall. Prototype 2a could meet the size constraint, which was another improvement over prototype 1. Prototype 2a could stick to ferrous surfaces. While the motor of prototype 1 could not overcome the magnetic pull force and move the robot, prototype 2 could move the robot downward or sideways but not upward when attached to a vertical steel wall. The 3 rd motor on the robot that was planned for lifting of off surfaces was also unable to function because of a lack of torque. Prototype 2a had only mounted 1 camera, and thus failed the multiple camera requirement. However, prototype 2a was an improvement over prototype 1. Prototype 2a only cost about $120 to build compared to prototype 1, which cost more than $400 even without cameras.

4.5   Engineering Mechanics Calculations

I calculated force and torque using equations from the literature as shown below.

Force and Torque Equations

Figure 5 shows a sketch of the robot climbing an inclined plane and the forces present.

For a robot at rest in the plane: m*(N1 + N2) =Mgsinq (1)
Perpendicular to the plane: N1 + N2 =F(M1) + F(M2) + Mgcosq (2)
  For a vertical wall q =p/2.   N1 + N2 =F(M1) + F(M2); m*(N1 + N2) ≥ Mg   (3)
  The required magnetic force is   F(M1) + F(M2) ≥ Mg/m   (4)

With two motors, the torque needed from each is t ≥ MgR/2                                              (5)

Force Calculation for Magnet Placement

The paper by Wang and Kimura (IEEE 2014) shows that the friction coefficient for tape covered wheel on metal m =0.45. The mass of my robot prototype 2a is M =0.655 kg. The acceleration of gravity g =9.81 m/s 2 . From equation (4), the required magnetic force =14.5 Newton. The pull force of the N52 magnet away from a steel surface has been tested and reported by the manufacturer KJ Magnetics. It is shown for different distances in Figure 6. The thickness of the duct tape I used is 0.01”. At a distance of 0.01”, the pull force is 1.26 lb per magnet according to the data plotted in Figure 6. In SI units, this pull force per magnet =5.6 Newton. To get a magnetic force of at least 14.5 Newtons calculated from equation (4), we need at least 3 magnets in contact at all times (one per wheel). The m value of 0.45 is only an estimate. If it is lower (say 0.25), the required magnetic force is higher, about 26.1 Newton.

Thus, for safety, we need 2 rows of magnets per wheel.

Torque Calculation for Motor Selection

Torque is important, because it is the rotational force (force multiplied by radial distance) that the motor must generate to move the robot. From equation (6), we know that the torque must be greater than MgR/2 for each of the front wheel motors. For prototype 2a, this works to torque being more than 0.08 Newton meter per motor. The plastic encased motors I used in the prototype 2a (Figure 4) were rated by the manufacturer as 0.1 Newton meter each. In my tests, prototype #2a could stay attached to a vertical surface and climb down. However, it struggled to climb up the vertical wall. The torque was barely enough to fight gravity. The results of this test of prototype #2a show that the force and torque calculations were correct. The lesson I learned from building and testing prototype 2a is that the robot should be lighter or a motor with greater torque should be used. The use of CAD and mechanics calculations made the design and development process systematic and logical. Figure 7 shows the underside of prototype 2a. The three motors and the popsicle sticks can be clearly seen.

4.6     Prototype 2b:Pre-Made Chassis

After developing and testing Prototype 2a, I realized that there were multiple changes I could make to it to make it fit the constraints better, without constructing an entirely new bot. So instead of starting from scratch, I decided to make a series of modifications and upgrades to Prototype 2a, resulting in the creation of Prototype 2b.

Building Prototype 2b

The first change I made to prototype 2a was that I removed all the motors. The motors did not work as expected for climbing up a vertical wall because of lack of torque; so, all of them had to be replaced or removed. I replaced the drive motors with two new larger motors, and I simply removed the third motor without replacement. The new motors were Uxcell 12V high torque gearbox motors. They were chosen, because their torque rating was much higher than that of the motors they replaced, but these new motors were heavier. I fastened both motors to the underside of the robot, where the previous motors had been using strips of double sided tape for preliminary testing. The new motors had a mass almost 100 g more than that of the old motors and so adding both new motors added almost 200 g to the mass of the robot.

I removed the driver board that controlled the third motor, because there was no longer a third motor on the robot, so there was only a need for a single driver board. Next, I removed all of the battery packs on the robot. Battery packs add unnecessary mass to a robot, and only limit its inspection life. Additionally, using batteries increases chances of motor failure when the robot is in deployment, because batteries might run out of battery power in the middle of a run, resulting in the need for an emergency retrieval. I then moved the remaining driver board onto the metal hanger above the Raspberry Pi, where the 4-AA battery pack had been previously. This allowed me to remove the metal hanger at the front of the robot because it was not being used. I also removed two posts with magnetic disks at the rear of the robot that were included in Prototype 2a to increase the stability of the rear. I found out through testing that the posts were not needed.

At this stage, I encountered a major problem. My wheels were no longer compatible with my motors because the new motors had a different shaft compared to the old motors. I tried drilling and cutting the wheel wells to make the wheels fit the motors, but neither solution worked. After some research on what items fit a D shaped motor shaft, I found out that oven knobs often fit D shafts. After buying some oven knobs, I tested them to see if they attach to the motors. After finding out the oven knobs were compatible with the new motors, I sawed the top off the oven knobs, resulting in flat disks that fit onto the new motors. I then drilled out the wheel well on the wheels, after which I superglued the disks to the wheels. By supergluing the disks to the wheels, I made it so that they would be able to attach to the motor. After attaching the wheels and motors, I set up the cameras. I hot glued the Pi NoIR camera to the back of the robot and made it face backwards for my rear-view camera. I then took a wide-angle, fish-eye camera, and hot glued it to the front of my robot facing forwards for my main camera. I then double sided taped and hot glued an endoscopic inspection camera to the front rim of the chassis facing downwards. The use of oven knobs to connect wheels to the new motor shaft is an innovative solution developed in this project.

Wiring Prototype 2b

After modifying prototype 2a, there were many components to re-wire. I had to re-solder a wire to the power leads of the motors and connect it to the remaining driver board. I then removed all of the wires connected to GPIO 4, 9, 16, or 18, as they were no longer in use. I also decided to use a 12 V power cable to power the driver board instead of a battery pack. To do so, I cut the output end of the power cable off, so that all that remained was the adapter and a length of wire. I then separated the two strands of power wire, one being positive and the other being negative, and stripped the wires so that both wires were exposed at the end. After twisting and tightening the exposed wire, I connected the positive wire to the ground slot on the driver board, and the negative wire into the voltage slot on the driver board. I left the NoIR camera connected to the Pi, but I connected both the other cameras to my laptop so that my laptop directly received feeds directly from the cameras instead of getting them through the Pi, with the exception of the NoIR camera. To finish, I swapped the Xbox Controller with a Super Nintendo Entertainment System (SNES ) controller. An SNES controller is a much lighter and simpler controller than an Xbox controller and unlike the Xbox controller which requires a powered hub for power, an SNES controller can be powered by the Raspberry Pi. The two controllers are shown side by side for comparison in Figure 8.

Programming Prototype 2b

Since the Raspberry Pi had already been completely set up with the previous prototype, I was able to dive straight into programming. While no new code was needed to test the motors, since the previous motor test program worked, a new controller code became necessary because I changed the controller and was no longer using an Xbox controller. Because of the simpler nature of the SNES controller, there was no driver similar to xboxdrv for the SNES controller.

The Pi is capable of interpreting the input from the SNES controller by default. After doing some research and looking into how to interact with an SNES controller through Python, I wrote the following controller program from scratch:

import pygame

import RPi.GPIO as GPIO GPIO.setmode(GPIO.BOARD)

GPIO.setup(12,GPIO.OUT) #Left Backward GPIO.setup(11,GPIO.OUT) #Left Forward GPIO.setup(13,GPIO.OUT) #Right Forward GPIO.setup(15,GPIO.OUT) #Right Backward

global hadEvent global x

global y global a global b global up global down global left global right

hadEvent =False x =False

y =False a =False b =False up =False

down =False left =False right =False

pygame.init()

pygame.joystick.init()

j =pygame.joystick.Joystick(0) j.init()

def game_controller(events):global hadEvent

global x global y global a global b global up global down global left global right

for event in events:

if event.type ==pygame.JOYBUTTONDOWN:hadEvent =True

x =j.get_button(0) y =j.get_button(3) a =j.get_button(1) b =j.get_button(2)

if x ==1:x =True

print(“x”) elif y ==1:

y =True print(“y”)

elif a ==1:

a =True print(“a”)

elif b ==1:b =True print(“b”)

elif up ==1:up =True print(“up”)

elif event.type ==pygame.JOYBUTTONUP:hadEvent =False

x =j.get_button(0) y =j.get_button(3) a =j.get_button(1) b =j.get_button(2)

if x ==1:

x =False elif y ==1:y =False elif a ==1:a =False elif b ==1:b =False

elif up ==1:up =False

elif event.type ==pygame.JOYAXISMOTION:hadEvent =True

if event.axis ==1:

if event.value <=-1:

up =True print(“up”)

elif event.value>=1:down =True print(“down”)

else:

down =False up =False

elif event.axis ==0:

if event.value <=-1:left =True print(“left”)

elif event.value>=1:right =True print(“right”)

else:

right =False left =False

while True:game_controller(pygame.event.get())

if up ==True:#Forward GPIO.output(11,GPIO.HIGH) #Left Forward GPIO.output(13,GPIO.HIGH) #Right Forward

elif down ==True:#Backward GPIO.output(12,GPIO.HIGH) #Left Backward GPIO.output(15,GPIO.HIGH) #Right Backward

elif right ==True:#Right GPIO.output(11,GPIO.HIGH) #Left Forward GPIO.output(15,GPIO.HIGH) #Right Backward

elif left ==True:#Left GPIO.output(12,GPIO.HIGH) #Left Backward GPIO.output(13,GPIO.HIGH) #Right Forward

else:

GPIO.output(12,GPIO.LOW) GPIO.output(11,GPIO.LOW) GPIO.output(13,GPIO.LOW) GPIO.output(15,GPIO.LOW)

This code operates by importing Pygame, which is a Python package. Pygame is used for constructing videogames through Python. It adds several features, such as interpreting and translating input values from a video game controller. Because of the simplicity of an SNES controller, there were no extra steps needed. Towards the beginning of the program, I defined the GPIO pins to be used for motor control. I then listed variables I planned to use, and assigned the connected controller to pygame.joystick() and then j. I then created an event system where a value sent by the controller is defined as an event, for example, pressing a button or moving a joystick. I then specified the events I care about, such as movement on the directional pad (d- pad) or a button being pressed. I assigned a value of 1 to a variable if the event it is connected to occured. I also wrote additional code to convert the numeric value 1 to the Boolean True. At the end, there is an infinite loop that fetches the values of events that were triggered. If any of the d- pad values are triggered, the program sends signals to the motors through the GPIO pins. After running this code, the robot responded smoothly to the SNES controller. I did not need any other code for controlling this prototype.

Testing Prototype 2b

Once again, I started by recording the mass of the robot. Using a standard kitchen scale, I recorded the mass of the robot to be 0.71 kg. Prototype 2b ended up being heavier than prototype 2a, despite the removal of the battery packs, but this can be attributed to the motors which were heavier in prototype 2b. Prototype 2b was measured to be 15 cm long x 18 cm wide x 12 cm tall. Prototype 2a and 2b are the same size despite the changes between the two, the overall structure of the robot did not change. Prototype 2b was once again able to meet the size constraint. Prototype 2b had the ability to attach to ferrous surfaces and was the first prototype that could climb up on vertical ferrous surfaces. Figure 9 shows Prototype 2b climbing a vertical steel door. Prototype 2b mounted 3 cameras, and all of them sent back acceptable feeds, which was a large improvement over prototype 2a. Prototype 2b cost $170 to build compared to the $120 of prototype 2a. This increase can be attributed to the cost of cameras and the cost of better motors.

4.7     Prototype 3:Custom Polycarbonate Chassis

After building the last two prototypes, I wanted to apply the knowledge I had gained to create a new prototype that was smaller, more compact, and more efficient. To do this, I planned to design my own chassis, and refrain from using tapes and superglue to hold parts together.

Building Prototype 3

To start building my robot, I took a polycarbonate sheet and cut my chassis out of it. For my chassis, I chose a simple 6 cm wide x 11 cm long rectangle. I chose that size and shape because it was simple and based off of preliminary measurements I took, it was the smallest feasible size for mounting the parts I had chosen. After cutting out the chassis with a saw, I smoothed out the edges and corners with a file and sandpaper. I then set the Raspberry Pi on the rear end of the chassis and marked where all of the holes were, so that I would be able to drill them out. I then set the rear wheel on the underside of the chassis and marked holes for it. I also marked holes for the motors I chose at the front of the chassis. The motors I chose were Pololu 12 V gearbox motors with a gear ratio of 298:1. The motors also came with mounting brackets that attached to the motors and had holes for screws. I finally marked a large hole between the Pi and the motors for the inspection camera.

After drilling all of the holes, I screwed down all of the parts except for the Pi. Before I screwed down the Pi, I laid down a thin sheet (4 mm thick) of packing foam underneath where the Pi would be to absorb shock and prevent contact between the metal on the Pi and the bolts and nuts on the robot. I also attached a folded metal hanger tape with the same bolts as the Pi. The hanger tape formed a bridge over the Pi. I cut a smaller 4.5 cm wide x 5.5 cm long piece of polycarbonate to screw to the top of the metal hangar. I screwed a driver board to the top of the smaller polycarbonate. For the wide-angle camera, I folded and cut thin scrap metal to form a pouch for the camera with a hole for the lens. The pouch had sides that folded in and held the camera. The pouch also had a flat bottom that extended out to either side. I screwed the metal pouch down with two of the screws that also held the motors. I slid the inspection camera down into the hole that had been drilled for it. The Pi NoIR camera was held by a retaining block that was hot glued to the top of the Ethernet port on the Pi. For the wheels, I used 60 mm diameter x

8 mm thick Pololu plastic wheels. To magnetize the wheel, I covered it in a thin layer of double sided tape and put the magnets in a ring around it. I the covered the magnets with a single layer of duct-tape for protection and traction. After finishing the wheels, I attached a 3V LED light on either side of the wide-angle camera holder. I also used double sided tape to attach an ultrasonic sensor to the bottom of the robot.

The robot utilizes an HC-SR04 ultrasonic distance sensor. The HC-SR04 is a very common and popular hobby ultrasonic distance sensor. The sensor is also the least expensive and easiest to use of its type to demonstrate sensor integration. The HC-SR04 is designed mainly with compatibility and simplicity in mind, allowing it to be easily connected to a Raspberry Pi or Arduino.

The HC-SR04 functions by sending a sound wave, which bounces off the object at which the sensor points, and then receiving the sound wave. The time between the sending and the reception of the sound wave is recorded and output. The time can then be multiplied by the speed of sound and divided by 2 to identify the distance between the sensor and the surface it is pointed towards. The HC-SR04 has 4 pins for connection purposes. The pins are ground, voltage, trigger, and echo. The ground pin is to be connected to ground. The voltage pin is to be connected to a+5V source. The trigger pin will cause the sensor to produce a sound wave for as long as it is receiving +3V. The echo pin sends back +5V in a burst as long as the wait time for the sensor to receive the signal. The sensor has a range of 2 cm to 400 cm. On my robot, the HC-SR04 serves to demonstrate that an ultrasonic sensor can be mounted underneath the robot. A more expensive, advanced ultrasonic sensor can be mounted to measure the thickness of the metal surface and identify degradation.

Wiring Prototype 3

For the wiring of prototype 3, many elements stayed the same from prototype 2b but one changed. Because the Pololu wheels blocked the micro USB port on the Pi, I was unable to use it for power. After some research, I found that I could use the GPIO pins instead. I cut a USB to micro USB cable so that one portion was the USB end and a length of cable. Within the cable were two separate wires. I split and stripped those wired. I then soldered the exposed parts of the wires to the female end of a breadboard jumper. I covered my work with heat shrink tubing. I used a multimeter to tell which end was positive voltage and which end was negative. I connected the positive wire to GPIO 9, and the negative end to GPIO 14. Those two GPIO’s were 5 V &ground respectively. After connecting the USB end of the charging cable to a 5 V adapter, the Pi ran perfectly. Once again, wires were soldered to the leads of my motors, and connected back to my driver board. The driver board was connected to GPIO 11, 12, 13, &15 for control and GPIO 2 &6 for 5V and ground. The driver board was also connected to a 12 V power supply. The LED lights were wired and soldered in parallel. They were attached a 330Ω resistor, GPIO 16 &18 for power, and GPIO 9 for ground. The ultrasonic sensor which was added to this prototype was wired to GPIO 4, 29, 30, and 31. Pin 4 was used for voltage, 29 was for output, 31 was for input, and 30 was for ground. The NoIR camera was once again connected to the Pi, while the other cameras are connected to my laptop. The robot is still controlled by a USB SNES controller. The wiring diagram is shown in Figure 10.

Programming Prototype 3

To save myself the work of setting up and configuring the Pi, I moved the SD card from prototype 2b to prototype 3. Because the only new need of code for prototype 3 was for the ultrasonic sensor, I mainly just simplified and commented my SNES code, only adding a few extra lines, as shown below.

#Developed By Nikhil Devanathan 2017

#Program to control Raspberry Pi robot with wired USB SNES controller #Uses directional pad (d-pad) for motor movement

#Leaves button and triggers open for mapping

#Imports necessary packages into python

import pygame #Package that is used for game controller mapping import RPi.GPIO as GPIO #Allows control over binary pins on Pi from gpiozero import DistanceSensor

#Sets GPIO pins for motor control GPIO.setmode(GPIO.BCM)

GPIO.setup(18,GPIO.OUT) #Left Backward GPIO.setup(17,GPIO.OUT) #Left Forward GPIO.setup(27,GPIO.OUT) #Right Forward GPIO.setup(22,GPIO.OUT) #Right Backward GPIO.setup(23,GPIO.OUT) #Light1\

GPIO.setup(24,GPIO.OUT) #Light2/ Work together to power LED lights

#Conifgures ultrasonic sensor

ultrasonic =DistanceSensor(echo =6, trigger =5, threshold_distance =0.02)

#Creates variables for controller mapping

global hadEvent global x

global y global a global b global up global down global left global right

#Assigns Variables for controller mapping hadEvent =False

x =False y =False a =False b =False up =False

down =False left =False right =False

#Initializing pygame and controller pygame.init() pygame.joystick.init()

j =pygame.joystick.Joystick(0) j.init()

#Defining controller event system def game_controller(events):

#Defining variables for use in controller event system

global hadEvent global x

global y global a global b global up global down global left global right

#Searches for an event in the system for event in events:

#If a button is pressed

if event.type ==pygame.JOYBUTTONDOWN:#Set map values

hadEvent =True

x =j.get_button(0) y =j.get_button(3) a =j.get_button(1) b =j.get_button(2)

#If a button is released

elif event.type ==pygame.JOYBUTTONUP:#Set map values

hadEvent =False x =j.get_button(0) y =j.get_button(3) a =j.get_button(1) b =j.get_button(2)

#If there is axial montion on the directional pad

elif event.type ==pygame.JOYAXISMOTION:

#Set values for y axis hadEvent =True

if event.axis ==1:

if event.value <=-1:up =True

elif event.value>=1:down =True

else:

down =False up =False

#Set values for x axis elif event.axis ==0:

if event.value <=-1:left =True

elif event.value>=1:right =True

else:

right =False left =False

lightOn =False #Value to use with b button light control

#Infinite Loop while True:

#Get an event from the event system game_controller(pygame.event.get())

#Motor controls beased on directional pad values if up:#Forward

GPIO.output(17,GPIO.HIGH) #Left Forward GPIO.output(27,GPIO.HIGH) #Right Forward

elif down:#Backward GPIO.output(18,GPIO.HIGH) #Left Backward GPIO.output(22,GPIO.HIGH) #Right Backward

elif right:#Right

GPIO.output(17,GPIO.HIGH) #Left Forward GPIO.output(22,GPIO.HIGH) #Right Backward

elif left:#Left

GPIO.output(18,GPIO.HIGH) #Left Backward GPIO.output(27,GPIO.HIGH) #Right Forward

else:

GPIO.output(18,GPIO.LOW) #Reset GPIO.output(17,GPIO.LOW) GPIO.output(27,GPIO.LOW) GPIO.output(22,GPIO.LOW)

if a:#If a is pressed, for holding light on GPIO.output(23,GPIO.HIGH) #Light1 GPIO.output(24,GPIO.HIGH) #Light2

else:#If a is released, for turning light off GPIO.output(23,GPIO.LOW) #Light1 GPIO.output(24,GPIO.LOW) #Light2

if b:#If b is pressed, for holding solid light if lightOn:#If the light is on

GPIO.output(23,GPIO.LOW) #Light1 GPIO.output(24,GPIO.LOW) #Light2 lightOn =False #Declare that the light is off

else:#If the light is off GPIO.output(23,GPIO.HIGH) #Light1

GPIO.output(24,GPIO.HIGH) #Light2 lightOn =True #Declare that the light is on

if y:#If Y button is pressed

#Scan distance to ground with ultrasonic sensor u =ultrasonic.distance

print u

The only changes made to this program were the addition of comments throughout the program, and the deletion of unnecessary code segments.

Testing Prototype 3

Using a standard kitchen scale, I recorded the mass of the robot to be 0.26 kg. The mass of prototype 3 was significantly reduced compared to every other model. Prototype 3 was measured to be 14 cm long x 9 cm wide x 12 cm tall. Prototype 3 was the smallest of the prototypes and was more than a factor of two smaller than prototypes 2a &2b. Prototype 3 had the ability to attach to ferrous surfaces and was able to move on ferrous surfaces of speeds of

0.18 meters/second, making it the fastest prototype. Prototype 3 mounted 3 cameras, and all of them sent back acceptable feeds. Prototype 3 cost $175 to build compared to the $120 of prototype 2a and the $175 of prototype 2b. This can be attributed to the cost of cameras and the cost of smaller motors. Sample images from the three cameras are shown in Figure 11 and the results of robot testing are shown in Tables 1 and 2. The final prototype can be seen in Figure 12.

Source:Design and Development of a Low-Cost Inspection Robot


Proses manufaktur

  1. Bagaimana Anda Menyewa Perusahaan Desain dan Pengembangan Produk Industri Terbaik?
  2. Desain Produk Medis:Kiat dan Trik
  3. Pengembangan Produk Silicon Valley 2018
  4. Tiga Fakta Tentang Pengembangan Produk
  5. Desain IoT kecepatan kit pengembang
  6. Penelitian dan Pengembangan Internal
  7. XMOS startKIT:Membangun XMOS dan Robot Raspberry Pi XMP-1
  8. DETEKSI MANUSIA ROBOT SONBI MENGGUNAKAN KINECT DAN RASPBERRY PI
  9. Panduan Singkat Pengembangan dan Eksekusi PM
  10. Standar menguraikan pemeriksaan dan pemeliharaan HVAC