Daftar Isi:
- Langkah 1: Sirkuit
- Langkah 2: Penggerak Linier
- Langkah 3: Drum
- Langkah 4: Tip Konstruksi
- Langkah 5: Algoritma Gambar Garis Bresenham
- Langkah 6: Kode
- Langkah 7: Menu
- Langkah 8: Kalibrasi
- Langkah 9: Prapemrosesan Gcode
- Langkah 10: Hasil
- Langkah 11: Pembaruan Kode
- Langkah 12: Drum_plotter_v3.ino
- Langkah 13: Drum_plotter_plotter_v4.ino
Video: Plotter Drum CNC: 13 Langkah (dengan Gambar)
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:56
Instruksi ini menjelaskan plotter A4/A3 yang terbuat dari bagian pipa plastik, dua motor stepper BYJ-48 dan servo SG-90. Pada dasarnya ini adalah plotter flat-bed yang digulung menjadi drum.
Satu motor memutar drum sementara yang lain menggerakkan kepala cetak. Servo digunakan untuk menaikkan dan menurunkan pena.
Plotter ini memiliki sejumlah keunggulan dibandingkan plotter flatbed tradisional:
- jejak kaki yang jauh lebih kecil
- hanya membutuhkan satu rel panduan linier
- sederhana untuk membangun
- murah
Interpreter on-board menerima output gcode dari Inkscape.
Komunikasi dengan plotter adalah melalui link bluetooth.
Plotter kompatibel dengan Tablet Grafis CNC yang dijelaskan dalam instruksi saya
Meskipun bukan instrumen presisi, akurasi plotter ini memuaskan untuk tujuan yang dimaksudkan untuk mentransfer garis cat air ke kertas.
Langkah 1: Sirkuit
Sirkuit ini terdiri dari mikrokontroler Arduino UNO R3 dan pelindung khusus tempat komponen terpisah dipasang. Daya diterapkan melalui regulator 5 volt 1 amp eksternal. Arus rata-rata sekitar 500mA.
Stepping motor BYJ-48 terpasang ke PORTB (pin D8, D9, D10, D11) dan PORTC (pin A0, A1, A2, A3). Servo pen-lift SG-90 terpasang ke pin D3.
Resistor 560 ohm, yang dapat dihilangkan, memberikan ukuran perlindungan hubung singkat ke arduino jika terjadi kesalahan. Mereka juga membuatnya lebih mudah untuk memasang pelindung saat mereka bertindak sebagai "pelompat" melintasi rel pasokan.
Resistor 1k2 dan 2K2 mencegah kerusakan pada modul bluetooth HC-06 [1] dengan menjatuhkan output 5 volt dari arduino ke 3,3 volt.
[1] Cabut modul bluetooth HC-06 saat mengupload kode ke arduino melalui port USB. Ini akan menghindari konflik port serial.
Langkah 2: Penggerak Linier
Penggerak linier dibuat dari batang aluminium berukuran 3 mm x 32 mm, selembar lembaran aluminium, dan empat puli bantalan bola kecil.
Aluminium tersedia di sebagian besar toko perangkat keras. U624ZZ 4x13x7mm U-groove pulley tersedia dari
Perkakas tangan sederhana adalah semua yang Anda butuhkan. Potong batang aluminium agar sesuai dengan dimensi plotter Anda.
Perakitan motor
Pasang motor loncatan BJY-48 melalui batang di salah satu ujungnya dan pasang gigi GT2 20, lubang 5mm, katrol ke poros motor. Sekarang pasang katrol GT2 lain di ujung batang Anda sehingga katrol dapat berputar dengan bebas. Saya menggunakan spacer tabung (radio) berdiameter 5mm dan baut 3mm untuk mencapai ini.
Sekarang lingkarkan sabuk timing GT2 di sekitar puli. Hubungkan ujung-ujung timing belt dengan cara setengah memutar sehingga gigi-giginya saling menyisip dan kencangkan dengan pengikat kabel.
Terakhir, pasang rakitan carriage ke timing belt dengan pengikat kabel.
perakitan gerbong
Rakitan carriage dibuat dari strip lembaran aluminium [1] di mana katrol U624ZZ dibaut. Jika perlu gunakan mesin cuci 4mm untuk memisahkan katrol dari lembaran aluminium.
Katrol, yang memiliki alur 4mm, mengangkangi batang aluminium atas dan bawah sedemikian rupa sehingga tidak ada gerakan vertikal namun strip aluminium bergerak bebas ke kiri dan ke kanan.
Untuk memastikan kereta berjalan dengan bebas, pasang dua puli atas terlebih dahulu, lalu, dengan puli duduk di palang, tandai posisi dua puli bawah. Lubang untuk kedua katrol ini sekarang dapat dibor. Gunakan bor "pilot" kecil terlebih dahulu untuk mencegah bor 4mm yang lebih besar agar tidak melayang.
Sebelum menekuk strip alumium menjadi "U", bor lubang atas dan bawah agar sesuai dengan diameter pena Anda. Sekarang selesaikan tikungan.
Pasang timing-belt ke rakitan carriage dengan menggunakan pengikat kabel dan baut 3mm di antara dua puli atas.
Rakitan pena-angkat
Pasang servo SG-90 ke bagian atas rakitan carriage menggunakan satu atau dua pengikat kabel.
Jatuhkan pena Anda ke dua lubang yang telah Anda bor. Pastikan pena meluncur ke atas dan ke bawah dengan bebas.
Kencangkan "kerah" ke pena Anda sehingga pena hanya terlepas dari drum saat servo berada dalam posisi pena.
[1] Aluminium dapat dipotong dengan menggores kedua sisi lembaran dengan pisau tajam (box-cutter) kemudian melenturkan potongan di tepi meja. Beberapa goyangan dan lembaran itu akan patah meninggalkan jeda lurus. Tidak seperti tin-snips, metode ini tidak membuat aluminium tertekuk.
Langkah 3: Drum
Drum terdiri dari bagian pipa plastik dengan dua sumbat ujung kayu [1].
Gunakan kompas, atur ke radius bagian dalam pipa Anda, untuk menggambar garis ujung steker. Sekarang potong di sekitar setiap garis menggunakan gergaji pisau halus ("mengatasi", "fret") kemudian sesuaikan setiap ujung sumbat dengan bantuan serak kayu. Kencangkan sumbat ujung menggunakan sekrup kayu counter-sunk kecil.
Baut rekayasa 6 mm melalui bagian tengah setiap steker ujung membentuk poros.
Dimensi Drum
Dimensi drum ditentukan oleh ukuran kertas Anda. Diameter drum 100mm mendukung potret A4 dan lanskap A3. Diameter drum 80 mm hanya akan mendukung lanskap A4. Gunakan diameter drum sekecil mungkin untuk mengurangi inersia … motor BYJ-48 hanya kecil.
Diameter drum 90mm sangat ideal untuk kertas potret A4 dan kertas lanskap A3 karena tepi yang berlawanan, ketika melilit drum, tumpang tindih sekitar 10mm yang berarti Anda hanya memiliki satu jahitan untuk direkatkan pada tempatnya.
Memutar drum
Setiap poros melewati braket ujung aluminium sehingga drum dapat berputar dengan bebas. Pelampung ujung dicegah dengan menggunakan GT-2, 20 gigi, lubang 6 mm, katrol yang diikatkan ke poros di salah satu ujungnya. Timing belt GT-2 terus menerus menghubungkan motor stepping bergigi BJY-48 ke drum. Motor membutuhkan katrol dengan ukuran lubang 5mm.
[1] Sumbat ujung plastik tersedia untuk sebagian besar diameter pipa tetapi ditolak karena pas di atas pipa daripada di dalam dan plastik cenderung melentur. Mereka mungkin akan baik-baik saja jika poros kontinu digunakan sebagai pengganti baut … tetapi kemudian Anda memerlukan beberapa metode untuk memperbaiki poros ke ujung colokan.
Langkah 4: Tip Konstruksi
Pastikan pena bergerak di sepanjang bagian tengah drum. Ini dapat dicapai dengan memotong sudut dari penyangga kayu. Jika pena tidak berada di tengah, pena akan cenderung meluncur ke bawah sisi drum.
Pengeboran yang akurat dari dua lubang pena itu penting. Setiap goyangan pada pen guide atau rakitan carriage akan menyebabkan goyangan di sepanjang sumbu X.
Jangan terlalu kencangkan timing belt GT-2 … mereka hanya perlu dikencangkan. Motor stepping BYJ-48 tidak memiliki banyak torsi.
Motor stepping BJY-48 sering menunjukkan sejumlah kecil serangan balik yang tidak signifikan di sepanjang sumbu X tetapi menjadi perhatian ketika menyangkut sumbu Y. Alasan untuk ini adalah bahwa satu putaran motor sumbu-Y sama dengan satu putaran drum, sedangkan kereta pena membutuhkan banyak putaran motor sumbu-X untuk melintasi panjang drum. Setiap serangan balik sumbu Y dapat dihilangkan dengan menjaga torsi konstan pada drum. Metode sederhana adalah dengan memasang pemberat kecil pada tali nilon yang dililitkan di sekitar drum.
Langkah 5: Algoritma Gambar Garis Bresenham
Plotter ini menggunakan versi yang dioptimalkan [1] dari algoritma menggambar garis Bresenham. Sayangnya algoritma ini hanya berlaku untuk kemiringan garis kurang dari atau sama dengan 45 derajat (yaitu satu oktan lingkaran).
Untuk menyiasati batasan ini, saya "memetakan" semua input XY ke "oktan" pertama, lalu "membuka peta" mereka saat tiba waktunya untuk membuat plot. Fungsi pemetaan input dan output untuk mencapai hal ini ditunjukkan pada diagram di atas.
Penurunan
Sisa dari langkah ini dapat dihilangkan jika Anda terbiasa dengan algoritma Bresenham.
Mari kita tarik garis dari (0, 0) ke (x1, y1) di mana:
- x1=8=jarak horizontal
- y1=6=jarak vertikal
Persamaan garis lurus yang melalui titik asal (0, 0) diberikan oleh persamaan y=m*x di mana:
m=y1/x1=6/8=0,75=kemiringan
Algoritma Sederhana
Algoritma sederhana untuk memplot baris ini adalah:
- int x1=8;
- int y1=6;
- mengapung m=y1/x1;
- alur(0, 0);
- untuk (int x=1; x<=x1; x++) {
- int y=bulat(m*x);
- petak(x, y);
- }
Tabel 1: Algoritma Sederhana
x | M | m*x | kamu |
---|---|---|---|
0 | 0.75 | 0 | 0 |
1 | 0.75 | 0.75 | 1 |
2 | 0.75 | 1.5 | 2 |
3 | 0.75 | 2.25 | 2 |
4 | 0.75 | 3 | 3 |
5 | 0.75 | 3.75 | 4 |
6 | 0.75 | 4.5 | 5 |
7 | 0.75 | 5.25 | 5 |
8 | 0.75 | 6 | 6 |
Ada dua masalah dengan algoritma sederhana ini:
- loop utama berisi perkalian yang lambat
- itu menggunakan angka floating point yang juga lambat
Grafik y versus x untuk garis ini ditunjukkan di atas.
Algoritma Bresenham
Bresenham memperkenalkan konsep istilah kesalahan 'e' yang diinisialisasi ke nol. Dia menyadari bahwa nilai m*x yang ditunjukkan pada tabel 1 dapat diperoleh dengan menambahkan 'm' ke 'e' secara berurutan. Dia selanjutnya menyadari bahwa y hanya bertambah jika bagian pecahan dari m*x lebih besar dari 0,5. Untuk menjaga perbandingannya dalam kisaran 0<=0.5<=1 ia mengurangi 1 dari 'e' setiap kali y bertambah.
- int x1=8;
- int y1=6;
- mengapung m=y1/x1;
- int y=0;
- mengapung e=0;
- alur(0, 0);
- untuk (int x=1; x<=x1; x++) {
- e+= m;
- jika (e>= 0,5) {
- e -= 1;
- y++;
- }
- petak(x, y);
- }
Tabel 2: Algoritma Bresenham
x | M | e | e-1 | kamu |
---|---|---|---|---|
0 | 0.75 | 0 | 0 | 0 |
1 | 0.75 | 0.75 | -0.25 | 1 |
2 | 0.75 | 0.5 | -0.5 | 2 |
3 | 0.75 | 0.25 | 2 | |
4 | 0.75 | 1 | 0 | 3 |
5 | 0.75 | 0.75 | -0.25 | 4 |
6 | 0.75 | 0.5 | -0.5 | 5 |
7 | 0.75 | 0.25 | 5 | |
8 | 0.75 | 1 | 0 | 6 |
Jika Anda memeriksa algoritma dan tabel 2 Anda akan mengamati bahwa;
- loop utama hanya menggunakan penambahan dan pengurangan … tidak ada perkalian
- pola untuk y sama seperti untuk tabel 1.
Tapi kita masih menggunakan angka floating point…mari kita perbaiki ini.
Algoritma Bresenham (Dioptimalkan)
Algoritma floating point Bresenham dapat dikonversi ke bentuk integer jika kita menskalakan 'm' dan 'e' dengan 2*x1 dalam hal ini m=(y1/x1)*2*x1=2*y1
Selain penskalaan 'm' dan 'e', algoritmanya mirip dengan yang di atas kecuali:
- kami menambahkan 2*y1 ke 'e' setiap kali kami menambah 'x"
- kita menambah y jika e sama atau lebih besar dari x1.
- kita kurangi 2*x1 dari 'e' bukannya 1
- x1 digunakan untuk perbandingan, bukan 0,5
Kecepatan algoritma dapat lebih ditingkatkan jika loop menggunakan nol untuk pengujian. Untuk melakukan ini, kita perlu menambahkan offset ke istilah kesalahan 'e'.
- int x1=8;
- int y1=6;
- int m=(y1<<1); //konstanta: kemiringan skala 2*x1
- int E=(x1<<1); //konstanta: 2*x1 untuk digunakan dalam loop
- int e = -x1; //offset dari -E/2: tes sekarang dilakukan pada nol
- alur(0, 0);
- int y=0;
- untuk (x=1; x<=x1; x++) {
- e += m;
- jika (e>=x1) {
- e -= E
- y++;
- }
- petak(x, y);
- }
Tabel 3: Algoritma Bresenham (Dioptimalkan)
x | M | E | e | e - E | kamu |
---|---|---|---|---|---|
0 | 12 | 16 | -8 | 0 | |
1 | 12 | 16 | 4 | -12 | 1 |
2 | 12 | 16 | 0 | -16 | 2 |
3 | 12 | 16 | -4 | 2 | |
4 | 12 | 16 | 8 | -8 | 3 |
5 | 12 | 16 | 4 | -12 | 4 |
6 | 12 | 16 | 0 | -16 | 5 |
7 | 12 | 16 | -4 | 5 | |
8 | 12 | 16 | 8 | -8 | 6 |
Sekali lagi pola untuk y sama seperti pada tabel lainnya. Sangat menarik untuk dicatat bahwa tabel 3 hanya berisi bilangan bulat dan rasio m/E=12/16=0,75 yang merupakan kemiringan 'm' dari garis.
Algoritma ini sangat cepat karena loop utama hanya melibatkan penambahan, pengurangan, dan perbandingan dengan nol. Perkalian tidak digunakan selain ketika kita menginisialisasi nilai untuk 'E' dan 'm' menggunakan "shift kiri" untuk menggandakan nilai x1 dan y1.
[1] Versi algoritma Bresenham yang dioptimalkan ini berasal dari makalah "Bresenham Line and Circle Drawing", hak cipta © 1994-2006, W Randolph Franklin (WRF). Materinya dapat digunakan untuk penelitian dan pendidikan nirlaba, asalkan Anda menghargainya, dan menautkan kembali ke halaman rumahnya,
Langkah 6: Kode
Unduh file terlampir ke dalam folder dengan nama yang sama kemudian unggah ke plotter menggunakan arduino IDE Anda (lingkungan pengembangan terintegrasi).
Cabut modul HC-06 bluetoorh sebelum mencoba mengunggah. Ini diperlukan untuk menghindari konflik port serial dengan kabel USB.
Kode Pihak Ketiga
Selain kode.ino di atas, Anda akan memerlukan paket perangkat lunak berikut yang gratis / donasi-ware:
- Teraterm yang tersedia dari
- Inkscape yang tersedia dari
Petunjuk untuk menginstal dan menggunakan masing-masing paket pihak ketiga di atas dapat ditemukan di artikel saya
Langkah 7: Menu
Buat koneksi bluetooth dengan plotter Anda menggunakan "Teraterm".
Aktifkan "caps lock" Anda karena semua perintah dalam huruf besar.
Ketik huruf 'M' dan akan muncul menu seperti gambar di atas.
Menu ini cukup jelas:
- M (atau M0) menampilkan menu
- G0 memungkinkan Anda mengirim pena ke koordinat XY tertentu dengan pena terangkat.
- G1 memungkinkan Anda mengirim pena ke koordinat XY tertentu dengan pena diturunkan.
- T1 memungkinkan Anda untuk memposisikan pena Anda di atas koordinat 0, 0 Anda. Ketik 'E' untuk keluar.
- T2 memungkinkan Anda untuk menskalakan gambar Anda. Misalnya "T2 S2.5" akan menskalakan gambar Anda 250%. Skala default adalah 100%
- T3 dan T4 memungkinkan Anda untuk menaikkan atau menurunkan pena.
- T5 menggambar pola tes "ABC".
- T6 menggambar "target".
- T7 menggambar satu set garis radial, yang tujuannya adalah untuk memverifikasi bahwa algoritma Bresenham bekerja di masing-masing dari delapan "oktan"
Catatan:
- semua gerakan pena menggunakan set skala gambar menggunakan opsi menu T2
- nomor "17:" dan "19:" adalah kode jabat tangan terminal "Xon" dan "Xoff" dari penerjemah arduino.
Langkah 8: Kalibrasi
Nilai untuk X_STEPS_PER_MM dan Y_STEPS_PER_MM adalah untuk drum berdiameter 90mm.
Nilai untuk diameter drum lainnya dapat dihitung menggunakan hubungan berikut:
- keliling drum adalah PI*diameter
- 2048 langkah sama dengan satu putaran setiap poros motor
- satu putaran katrol GT-2 sama dengan gerakan linier 40 milimeter dari timing belt
Cara lain adalah dengan memasukkan perintah berikut,
- G1 X0 Y100
- G1 X100 Y100
kemudian ukur panjang garis yang dihasilkan dan "skalakan" nilai untuk X-STEPS_PER_MM dan Y_STEPS_PER_MM
Langkah 9: Prapemrosesan Gcode
Plotter ini hanya membutuhkan empat gcode Inkscape (yaitu: G0, G1, G2, G3). Kode akan dieksekusi secara signifikan lebih cepat jika kami menghapus semua gcode dan komentar yang tidak perlu.
Untuk melakukan ini, Anda memerlukan salinan "Notepad++". Editor teks gratis ini berisi mesin pencari "ekspresi reguler" untuk menemukan dan menghapus teks yang tidak diinginkan. Notepad++ tersedia dari
Buka file yang akan dimodifikasi dengan Notepad++ dan posisikan kursor di bagian atas file.
Pilih "Lihat/Tampilkan Simbol/Semua Karakter" diikuti oleh "Cari/Ganti…" dari bilah menu atas.
Klik kotak centang "Ekspresi Reguler" (lihat gambar 1) dan masukkan setiap urutan kode berikut ke dalam kotak pencarian.
Klik "Ganti Semua" setelah setiap entri:
- %
- (.*)
- ^M.*$
- Z.*$
Ekspresi reguler di atas menghapus semua simbol %, semua komentar yang ditampilkan dalam tanda kurung, semua kode M, semua kode Z dan kode yang mengikutinya.
Sekarang klik kotak centang "Extended Expression" (lihat gambar ke-2) dan masukkan urutan kode berikut:
r\n\r\n\r\n
Ekspresi ini menghapus carriage-return dan line-feed yang tidak diinginkan yang dibuat oleh urutan pertama.
Simpan file Anda dengan nama yang berbeda menggunakan "Save As".
Selesai.
Langkah 10: Hasil
Plotter ini dibangun sebagai "bukti konsep" dan tidak pernah dimaksudkan untuk menjadi sempurna. Setelah mengatakan bahwa hasilnya tidak terlalu buruk. Mereka pasti memenuhi tujuan desain saya untuk mentransfer garis cat air ke kertas.
Tiga gambar pertama masing-masing adalah pola uji bawaan T5, T6, T7.
"Halo Dunia!" pola dikirim ke plotter melalui bluetooth. Salinan "pra-proses" dari file ini dilampirkan.
Langkah 11: Pembaruan Kode
Kode untuk plotter ini telah diperbarui ke Drum_Plotter_V2.ino.
Perubahan dari Drum_Plotter.ino asli meliputi:
- pemosisian pena yang lebih halus
- sekarang mengenali instruksi gcode G02 (busur searah jarum jam)
- sekarang mengenali instruksi gcode G03 (busur berlawanan arah jarum jam)
Diagram terlampir menguraikan metode saya untuk menghitung sudut busur.
Langkah 12: Drum_plotter_v3.ino
Pembaruan kode untuk "CNC Drum Plotter" dilampirkan.
"drum_plotter_v3.ino" memperbaiki bug kecil yang memengaruhi akurasi plotter.
Ubah Sejarah
Versi 2:
Kurva bi-arc ditambahkan
Versi 3:
Fungsi berikut ditulis ulang untuk mengatasi bug kecil yang memengaruhi akurasi plotter.
- (int) diganti dengan round() dalam fungsi move_to().
- draw_line() fungsi algoritma pencarian "oktan" ditingkatkan
- Interpreter sekarang menggunakan fungsi string daripada pointer yang menyederhanakan desain. Misalnya kita sekarang dapat mencari "MENU" daripada mencari huruf 'M' kemudian mengekstrak bilangan bulat berikut. Ini memungkinkan Anda untuk mempersonalisasi plotter dengan perintah Anda sendiri.
Langkah 13: Drum_plotter_plotter_v4.ino
16 Januari 2017:
Kode untuk plotter drum ini telah dioptimalkan lebih lanjut. Fitur tambahan telah ditambahkan.
Perubahan tersebut meliputi:
- algoritma draw_line() lebih cepat
- fungsi move_to() yang cocok
- penghitung langkah
- perbaikan bug kecil
Untuk detail lebih lanjut, baca komentar di dalam "drum_plotter_v4.ino" terlampir.
Klik di sini untuk melihat instruksi saya yang lain.
Direkomendasikan:
PLOTTER BOTOL CNC ROTARY: 9 Langkah (dengan Gambar)
ROTARY CNC BOTTLE PLOTTER: Saya mengambil beberapa rol, yang mungkin digunakan di printer. Saya datang dengan ide untuk mengubahnya menjadi sumbu rotasi plotter botol CNC. Hari ini, saya ingin berbagi cara membuat plotter botol CNC dari roller ini dan potongan lainnya. Untuk
Ubah Drum X-box Rock Band Menjadi Drum Elektronik Midi Stand Alone.: 4 Langkah (dengan Gambar)
Ubah Drum X-box Rock Band Menjadi Drum Elektronik Midi Stand Alone.: Saya beruntung mendapatkan set drum x-box bekas, bentuknya agak kasar, dan tidak ada dayung, tetapi tidak ada yang tidak bisa diperbaiki. mengubahnya menjadi satu set drum listrik mandiri. Membaca nilai analog dari sensor piezo dan mengubahnya menjadi perintah MIDI
Plotter Robot CNC: 11 Langkah (dengan Gambar)
Plotter Robot CNC: a.artikel {ukuran font: 110,0%; font-berat: tebal; gaya font: miring; dekorasi teks: tidak ada; background-color: red;} a.articles:hover {background-color: black;} Instruksi ini menjelaskan plotter robot yang dikendalikan CNC. Robot tersebut terdiri
Arduino CNC Plotter (MESIN GAMBAR): 10 Langkah (dengan Gambar)
Arduino CNC Plotter (MESIN GAMBAR): Hai teman-teman! Saya harap Anda sudah menikmati instruksi saya sebelumnya "Cara membuat platform pelatihan Arduino Anda sendiri" dan Anda siap untuk yang baru, seperti biasa saya membuat tutorial ini untuk memandu Anda langkah demi langkah sambil membuat jenis super menakjubkan ini
Arduino Mini CNC Plotter (Dengan Proyek Proteus & PCB): 3 Langkah (dengan Gambar)
Arduino Mini CNC Plotter (Dengan Proteus Project & PCB): Arduino mini CNC atau XY plotter ini dapat menulis dan membuat desain dalam kisaran 40x40mm. Ya, kisaran ini pendek, tetapi ini adalah awal yang baik untuk terjun ke dunia arduino. [Saya telah memberikan segalanya dalam proyek ini, bahkan PCB, File Proteus, Contoh desain