Sirkuit

Cara Membuat Mesin Tidak Berguna Lainnya: Mudah Dibuat, dan Sulit Digunakan !: 9 Langkah (dengan Gambar)

Membuat arang sekam bakar dengan mudah

Membuat arang sekam bakar dengan mudah

Daftar Isi:

Anonim

Begitu banyak mesin yang tidak berguna dibangun, mengapa membangun yang lain? Sederhananya, sangat menyenangkan :), menyenangkan untuk dibangun dan menyenangkan untuk dimainkan.
Saya mencoba memberikan karakter versi ini, karena saya selalu merasa ada seseorang "berpikir di dalam kotak", jadi di sini saya mencoba, saya berharap saya berhasil memberi "nya" nyawa!
Saya benar-benar senang berbagi dengan Anda semua langkah, dengan semua harapan bahwa Anda akan dengan mudah membangun milik Anda dan memberinya karakter yang pahit atau lebih baik! Versi saya didasarkan pada Arduino, Anda mungkin berpikir itu berlebihan, tetapi mengingat fleksibilitas yang diberikannya kepada saya, saya pikir itu sepadan.
Berikut adalah video dari semuanya disatukan. Nantinya, kita akan pindah ke bagian, langkah, skema dan kode
Beri tahu saya komentar dan / atau pertanyaan Anda jika ada.
Semoga kamu menikmati!
f.

Persediaan:

Langkah 1: Bagaimana Cara Kerjanya?

Semuanya terhubung ke papan Arduino, papan menunggu sampai sakelar diatur ke logika TINGGI, yaitu, ketika Anda menjentikkan sakelar, papan memberi sinyal dua motor servo untuk bergerak dengan cara tertentu (lebih lanjut tentang itu nanti), setelah itu , servo yang terhubung ke "hand" akan menggerakkan sakelar kembali ke posisi OFF, dan kembali ke dalam kotak, diikuti oleh servo "door". lalu semuanya terulang.
Jika Anda melihat video di atas, setiap kali sakelar diaktifkan, mesin merespons dengan cara yang berbeda, dan ini dilakukan hanya dengan menulis fungsi yang berbeda dengan pengaturan waktu yang berbeda dalam kode Arduino, (Saya menamakannya "Bergerak"). Setiap kali sakelar dimatikan, saya memanggil langkah baru sampai semuanya selesai, saya memulai lagi. perhatikan bahwa pada langkah 9, saya menyediakan versi lain dari kode yang memilih gerakan acak alih-alih berurutan. Anda dapat menambahkan gerakan sebanyak yang Anda inginkan, selama Anda memiliki cukup memori di Arduino.
Arduino selalu ON, inilah mengapa saya menambahkan sakelar untuk baterai agar menghemat daya saat mesin tidak digunakan. Saya sudah berencana menggunakan interupsi pada sakelar, alih-alih deteksi TINGGI / RENDAH sederhana saat ini, dan memasangkannya dengan mode tidur. Ini akan menghemat daya ketika mesin tidak digunakan, dan juga memungkinkannya untuk selalu siap (tetapi ini juga akan menyulitkan kode) Jadi, untuk saat ini, itu hanya saklar ON / OFF yang sederhana, dan papan selalu dinyalakan .

Langkah 2: Bagian

Anda akan perlu:
Wajib:
1. Sebuah kotak
2. Papan Arduino dengan output PWM (kebetulan saya punya yang lama tergeletak, Diecimila)
3. Dua motor servo RC standar (saya menggunakan Futaba - S3003, mereka memiliki torsi 3,2 Kg / cm, lebih dari cukup untuk menggerakkan pintu atau tangan)
4. Baterai 6-12 V (saya menggunakan baterai drone AR saya, ini adalah 11.1 v / 1000 mA)
3. Sakelar SPTT atau SPST untuk pelatuk (pada dasarnya, sakelar apa pun yang cocok untuk Anda!)
5. Sakelar lain untuk baterai
6. Tombol untuk mengatur ulang Arduino jika Anda ingin memulai kembali gerakan / kode dari atas.
7. Beberapa kabel jumper

Pilihan:
Jika Anda ingin mendesain langkah yang termasuk memindahkan kotak (seperti langkah terakhir dalam video), maka Anda bisa mendapatkan:
1. Perisai motor Arduino, ini juga berguna untuk proyek lain (atau Anda dapat mendesain H-bridge sendiri, cari)
2. Mobil RC murah sehingga Anda dapat mengambil motor DC dan gear box
Selain itu, masih di bagian "opsional", saya telah membangun sirkuit de-bounce perangkat keras untuk memiliki pemicu bersih saat sakelar dinyalakan / dimatikan. Ini dapat dilewati dan mudah diimplementasikan dalam perangkat lunak Arduino menggunakan penundaan atau timer. Saya melakukan debounce perangkat keras karena saya akan segera mengubah kode untuk menggunakan interupsi, dan karena yang terakhir tidak memungkinkan penggunaan fungsi delay / timer yang dapat diandalkan dalam rutinitas, jadi saya harus membangun rangkaian de-bounce sederhana untuk penggunaan di masa mendatang. . Jika Anda ingin melewati bagian ini, maka cukup sambungkan sakelar / resistor sederhana untuk menyematkan 2 arduino dan mengimplementasikan rutinitas pembongkaran perangkat lunak.
Untuk pelepasan perangkat keras:
1. kapasitor elektrolit 10mF
2. 10K resistor
3. Sebuah logika BUKAN gerbang i.e Inverter (chip 74HC04) Ini memiliki enam inverter, tetapi Anda hanya perlu satu.
Mari kita membangunnya …

Langkah 3: Membangun Kotak

Anda dapat menggunakan kotak apa saja yang Anda rasa cocok. Saya membangun milik saya, mungkin tidak sempurna, tetapi masih banyak pribadi :)
1. Saya menggunakan 2 lembar kayu BALSA 5mm, sangat mudah dikerjakan dengan menggunakan pemotong, dan relatif kuat karena bobotnya yang ringan.
2. Dikonsumsi 5 tabung lem Cyanoacrylat (alias perekat cepat yang kuat)
Ini dia:
SEBUAH 22 x 14 x 14 cm kotak

Langkah 4: Skema

Di atas adalah skema (digambar menggunakan Fritzing), menunjukkan:
Bagian atas: Papan utama Arduino, 2 servos dan konektivitas switch. Perhatikan bahwa seperti yang disebutkan sebelumnya Anda dapat mengganti seluruh sirkuit debounce (kanan atas) dengan resistor / sakelar sederhana.
Baik servo "pintu" dan "tangan" diberi daya langsung dari pin 5v pada Arduino. Kabel sinyal terhubung ke pin 9 dan 10 masing-masing. Pin ini mendukung PWM, jadi saya menggunakannya untuk mengontrol sudut / posisi servo (dari 0 hingga 180 derajat maks).
Catatan: tombol merah hanya reset (mirip dengan yang ditemukan di muka papan Arduino). Saya menambahkannya untuk memiliki akses cepat untuk mengatur ulang papan / perangkat lunak kapan saja tanpa membuka kotak. Cukup hubungkan pin RESET ke Ground untuk melakukan reset.
Bagian bawah: diperlukan jika Anda ingin menggunakan motor DC dan memindahkan mesin. Ini adalah pelindung motor Arduino, dipasang di atas Arduino, sehingga semua pin dari kedua papan terhubung satu sama lain. Saya menunjukkan kepada mereka di bawah ini sebagai terpisah hanya untuk kejelasan, semoga! Pelindung ini dapat mengontrol hingga 2 motor DC (2 saluran A / B) dengan sangat mudah. Saya hanya menggunakan satu sekarang. Hal ini memungkinkan untuk diatur dalam kode, arah, kecepatan, dan istirahat dari salah satu dari 2 saluran / motor yang tersedia. Saya menggunakan saluran B seperti yang ditunjukkan di bawah ini. pin mana
13 untuk arah, pin 11 untuk kecepatan dan pin 8 untuk kontrol rem.
Baterai adalah 11.1 / 1000 mA, terhubung ke perisai, sehingga memberi makan motor DC, papan arduino utama dan servos. jika Anda tidak menggunakan perisai, maka Anda dapat langsung menghubungkan baterai ke per barel daya pada papan arduino utama.

Langkah 5: Memperbaiki Servo

Ini adalah servos tangan dan pintu yang dipasang:
Pertama-tama Anda perlu menginstal servos di tempat yang benar, ini membutuhkan sedikit percobaan dan kesalahan sampai Anda mendapatkan gerakan yang diperlukan. Anda dapat menggunakan contoh Servo yang disediakan dalam arduino IDE untuk menguji servos dan jumlah defleksi yang dibutuhkan untuk masing-masing, dan dengan demikian memutuskan posisi akhir dan panjang lengan untuk servos pintu dan tangan.
Lengannya hanya terbuat dari kayu balsa, saya membuatnya lebih tebal untuk menahan robekan.
Di bawah ini adalah bagaimana saya melakukannya. Hanya satu catatan tentang servo tangan. Anda perlu poros servo untuk berada langsung di bawah tepi penutup (seperti yang ditunjukkan di bawah), ini untuk menghindari kesulitan dalam membuat tangan yang berhasil menekan sakelar, dan juga dapat kembali ke dalam kotak.


Langkah 6: Menghubungkan Switch, Servos dan Arduino

Buat semua koneksi terlihat pada langkah skematis, dan coba letakkan semua di dalam kotak seperti yang ditunjukkan di atas:

Langkah 7: Opsional: Motor DC dan Baterai

Di atas adalah bagaimana saya meletakkan kotak gear motor DC (diambil dari mobil RC murah), juga menunjukkan penempatan adonan dan saklar.
Pastikan untuk menempatkan gigi di tengah mungkin untuk menyeimbangkan kotak, Anda mungkin perlu memasukkan beberapa berat di dalam kotak untuk menyeimbangkannya lebih setelah perakitan akhir, karena baterai yang saya gunakan agak berat (100 gr) dan menyebabkan beberapa goyangan saat mengganti atau memindahkan kotak.
Perhatikan bahwa motor dc kecepatan dikendalikan oleh pin 11, Arah dengan pin 13, dan rem pada pin 8, ini dianggap saluran B pada pelindung motor Arduino.
Melalui perakitan saya mencoba menyembunyikan semua switch kabel dan komponen lain untuk memiliki kotak otentik yang sederhana. Ini berlaku untuk roda, jadi saya membuat pelek di sekelilingnya yang menjadi tuan rumah roda dan baterai, dan juga menyediakan akses ke tombol reset merah.

Langkah 8: Kode

Untuk menulis kode arduino, Anda memerlukan arduino IDE (unduh di sini)
Saya menggunakan versi 1.0.5, pastikan untuk memilih port COM yang benar (windows) dan tipe board dari dalam IDE, kemudian gunakan kode di bawah ini, dan tekan unggah.
CATATAN: Nilai-nilai yang saya gunakan dalam kode untuk mengatur defleksi maksimum servos dibuat persis untuk kotak ini dengan mempertimbangkan posisi servos, sumbu dan sudut. Saya mendapatkan ini melalui persidangan. Jadi, Anda perlu menyusun nilai-nilai Anda sendiri sesuai dengan kotak Anda dan penempatan servo.
Untuk referensi, di bawah ini adalah nilai min / maks yang saya gunakan untuk setiap servo karena Anda akan melihatnya terjadi dalam kode:
Pintu:
80 bersembunyi, 155 terbuka penuh
Tangan:
0 bersembunyi, 129 menekan saklar

Ini kodenya (Lebih baik mengunduh file yang terlampir pada langkah ini daripada menyalin / menempel dari bawah):
#termasuk
Servo doorServo;
Servo handServo;
int switch_pin = 2; // atur sakelar pada pin 2
// variabel motorik
int motorThrottle = 11;
int motorDirection = 13;
int motorBrake = 8;
int pos = 0;
int selectedMove = 0; // pindahkan pemilih
int Testmove = 0; // mode uji: atur untuk memindahkan angka untuk menguji hanya satu gerakan yang dipilih
// (atur ke Nol untuk menjalankan normal i.e: roundrobbin on amm move)
pengaturan batal ()
{
Serial.begin (9600);
pinMode (switch_pin, INPUT);
doorServo.attach (9); // atur servo pintu pada Pin 9 pwm
handServo.attach (10); // atur servo tangan pada Pin 10 pwm
doorServo.write (80); // setel pintu ke posisi sembunyi
handServo.write (0); // atur tangan ke posisi sembunyi

// Setup Channel B, (karena Channel A dicadangkan oleh servos pintu dan tangan dan tidak dapat digunakan pada saat yang bersamaan)
pinMode (motorDirection, OUTPUT); // Memulai pin Saluran Motor
pinMode (motorBrake, OUTPUT); // Memulai pin B Saluran Rem

}

membatalkan loop ()
{
if (Testmove! = 0) {
selectedMove = Testmove;
}

// jika sakelar menyala, maka gerakkan pintu dan tangan untuk mematikannya …
if (digitalRead (switch_pin) == HIGH)
{

if (selectedMove> 10) {selectedMove = 0; } // saat semua gerakan dimainkan, ulangi gerakan dari awal
// di bawah ini semua "Moves" yang saya rancang sejauh ini, masing-masing adalah fungsi yang tertulis di bawah ini dalam kode, mengeksekusi nama, abit aneh? ya karena ada yang ditulis dalam bahasa Arab
if (selectedMove == 0) {switchoff (); }
lain jika (selectedMove == 1) {switchoff (); }
lain jika (selectedMove == 2) {switchoffbitaraddod (); }
lain jika (selectedMove == 3) {crazydoor (); }
lain jika (selectedMove == 4) {crazyslow (); }
lain jika (selectedMove == 5) {m7anika7anika (); }
lain jika (selectedMove == 6) {m3alla2 (); }
lain jika (selectedMove == 7) {switchoff (); }
lain jika (selectedMove == 8) {matrix (); }
lain jika (selectedMove == 9) {sneak (); }
lain jika (selectedMove == 10) {zee7 (); }

if (Testmove == 0) {
selectedMove ++; // swith untuk pindah selanjutnya jika tidak dalam mode uji
}
}
}

// Perpustakaan gerakan
// gerakan dasar
batal mematikan ()
{
// Pindah pintu
untuk (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
keterlambatan (15);
}

// Bergerak tangan
untuk (pos = 0; pos <129; pos = 4)
{
handServo.write (pos);
keterlambatan (15);
}

// menyembunyikan tangan
untuk (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
keterlambatan (15);
}

// bersembunyi pintu
untuk (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
keterlambatan (15);
}
}

// pindah 3: buka dan tunggu, lalu gerakkan tangan dan tunggu, lalu beralih dan sembunyikan
membatalkan switchoffbitaraddod ()
{
// Pindah pintu
untuk (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
keterlambatan (15);
}
keterlambatan (800);
// Bergerak tangan
untuk (pos = 0; pos <100; pos = 4)
{
handServo.write (pos);
keterlambatan (15);
}
keterlambatan (1000);
untuk (pos = 100; pos <129; pos = 4)
{
handServo.write (pos);
keterlambatan (15);
}

// menyembunyikan tangan
untuk (pos = 129; pos> = 0; pos- = 5)
{
handServo.write (pos);
keterlambatan (15);
}

// bersembunyi pintu
untuk (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
keterlambatan (15);


}

}

// pindah 4: buka pintu lalu tutup berkali-kali, tunggu, lalu cepat-cepat buka kembali dan sembunyikan.

membatalkan crazydoor ()
{

// Pindah pintu
untuk (pos = 80; pos <125; pos = 3)
{
doorServo.write (pos);
keterlambatan (15);
}

// bersembunyi pintu
untuk (pos = 125; pos> = 80; pos- = 5)
{
doorServo.write (pos);
keterlambatan (15);
}
// Pindah pintu
untuk (pos = 80; pos <110; pos = 3)
{
doorServo.write (pos);
keterlambatan (15);
}

// bersembunyi pintu
untuk (pos = 110; pos> = 80; pos- = 15)
{
doorServo.write (pos);
keterlambatan (15);
}
keterlambatan (700);
// Pindah pintu
untuk (pos = 80; pos <125; pos = 3)
{
doorServo.write (pos);
keterlambatan (15);
}
keterlambatan (700);
// bersembunyi pintu
untuk (pos = 125; pos> = 80; pos- = 5)
{
doorServo.write (pos);
keterlambatan (15);
}

// ---- dari saklar ---- //
// Pindah pintu
untuk (pos = 80; pos <155; pos = 8)
{
doorServo.write (pos);
keterlambatan (15);
}

// Bergerak tangan
untuk (pos = 0; pos <129; pos = 3)
{
handServo.write (pos);
keterlambatan (15);
}

// menyembunyikan tangan
untuk (pos = 129; pos> = 0; pos- = 3)
{
handServo.write (pos);
keterlambatan (15);
}

// bersembunyi pintu
untuk (pos = 155; pos> = 80; pos- = 15)
{
doorServo.write (pos);
keterlambatan (15);
}

}

// pindah 5: buka pintu, lalu gerakkan tangan dengan sangat lambat ke depan dan kembali ke persembunyian dengan sangat lambat, lalu segera tutup pintu
membatalkan crazyslow ()
{
// Pindah pintu
untuk (pos = 80; pos <155; pos = 1)
{
doorServo.write (pos);
keterlambatan (30);
}

// Bergerak tangan
untuk (pos = 0; pos <129; pos = 1)
{
handServo.write (pos);
keterlambatan (30);
}

// menyembunyikan tangan
untuk (pos = 129; pos> = 0; pos- = 1)
{
handServo.write (pos);
keterlambatan (30);
}

// bersembunyi pintu
untuk (pos = 155; pos> = 125; pos- = 1)
{
doorServo.write (pos);
keterlambatan (30);
}
keterlambatan (100);
untuk (pos = 125; pos> = 80; pos- = 4)
{
doorServo.write (pos);
keterlambatan (15);
}

}
// pindah 6:
void m7anika7anika () {
// Pindah pintu
untuk (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
keterlambatan (15);
}

// Bergerak tangan
untuk (pos = 0; pos <70; pos = 1)
{
handServo.write (pos);
keterlambatan (15);
}
keterlambatan (800);


// bersembunyi pintu
untuk (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
keterlambatan (15);
}

// bersembunyi pintu
untuk (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
keterlambatan (15);
}
// bersembunyi pintu
untuk (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
keterlambatan (15);
}
// bersembunyi pintu
untuk (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
keterlambatan (15);
}

handServo.write (40);
keterlambatan (1000);

// Bergerak tangan
untuk (pos = 40; pos <129; pos = 4)
{
handServo.write (pos);
keterlambatan (15);
}

// menyembunyikan tangan
untuk (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
keterlambatan (15);
}


untuk (pos = 120; pos> = 80; pos - = 1)
{
doorServo.write (pos);
keterlambatan (15);
}



}
void m3alla2 () {
// Pindah pintu
untuk (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
keterlambatan (15);
}

// Bergerak tangan
untuk (pos = 0; pos <127; pos = 4)
{
handServo.write (pos);
keterlambatan (15);
}
// bersembunyi pintu
untuk (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
keterlambatan (15);
}
delay (2000);

untuk (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
keterlambatan (15);
}

untuk (pos = 155; pos> = 140; pos- = 3)
{
doorServo.write (pos);
keterlambatan (15);
}
untuk (pos = 140; pos <155; pos = 3)
{
doorServo.write (pos);
keterlambatan (15);
}
keterlambatan (500);
// menyembunyikan tangan
untuk (pos = 127; pos> = 0; pos- = 4)
{
handServo.write (pos);
keterlambatan (15);
}

// bersembunyi pintu
untuk (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
keterlambatan (15);
}
}

kekosongan matriks ()
{
// Pindah pintu
untuk (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
keterlambatan (15);
}

// Bergerak tangan
untuk (pos = 0; pos <80; pos = 4)
{
handServo.write (pos);
keterlambatan (15);
}

untuk (pos = 80; pos <129; pos = 1)
{
handServo.write (pos);
keterlambatan (30);
}
keterlambatan (300);

untuk (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
keterlambatan (10);
}

// bersembunyi pintu
untuk (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
keterlambatan (15);
}

}
batal menyelinap ()
{
// Pindah pintu
untuk (pos = 80; pos <130; pos = 1)
{
doorServo.write (pos);
keterlambatan (30);
}
delay (2000);

// Bergerak tangan
untuk (pos = 0; pos <40; pos = 1)
{
handServo.write (pos);
keterlambatan (30);
}

keterlambatan (500);

untuk (pos = 130; pos <155; pos = 4)
{
doorServo.write (pos);
keterlambatan (15);
}
keterlambatan (100);

untuk (pos = 40; pos <90; pos = 4)
{
handServo.write (pos);
keterlambatan (15);
}
keterlambatan (500);
// menyembunyikan tangan
untuk (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (pos);
keterlambatan (15);
}
keterlambatan (100);
untuk (pos = 70; pos <90; pos = 4)
{
handServo.write (pos);
keterlambatan (15);
}
keterlambatan (100);
untuk (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (pos);
keterlambatan (15);
}
keterlambatan (100);

untuk (pos = 70; pos <129; pos = 4)
{
handServo.write (pos);
keterlambatan (15);
}

untuk (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
keterlambatan (15);
}
// bersembunyi pintu
untuk (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
keterlambatan (15);
}
}


membatalkan zee7 ()
{
// Pindah pintu
untuk (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
keterlambatan (15);
}
delay (2000);
// maju @ setengah kecepatan ke kiri
digitalWrite (motorDirection, LOW); // Tetapkan arah KANAN Saluran B
digitalWrite (motorBrake, LOW); // Lepaskan Rem untuk Saluran B
analogWrite (motorThrottle, 100); // Putar motor di Saluran B dengan kecepatan penuh
keterlambatan (300);
digitalWrite (motorBrake, HIGH); // Eengage the Brake untuk Channel B
delay (2000);

// mundur @ setengah kecepatan ke kanan
digitalWrite (motorDirection, HIGH); // Tetapkan arah KIRI Saluran B
digitalWrite (motorBrake, LOW); // Lepaskan Rem untuk Saluran B
analogWrite (motorThrottle, 100); // Putar motor di Saluran B dengan kecepatan setengah
keterlambatan (300);
digitalWrite (motorBrake, HIGH); // Eengage the Brake untuk Channel B
keterlambatan (1000);

// Bergerak tangan
untuk (pos = 0; pos <129; pos = 4)
{
handServo.write (pos);
keterlambatan (15);
}

// menyembunyikan tangan
untuk (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
keterlambatan (15);
}

// bersembunyi pintu
untuk (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
keterlambatan (15);
}
}


Langkah 9: Pembaruan Opsional: Deteksi Gerakan

Saya punya sensor proximity hari ini (GP2Y0A21), jadi sekarang saya bisa menggunakannya untuk memindahkan mesin jika pengguna mendekati toggle switch :)
Untuk langkah tambahan ini, saya mengasumsikan Anda sudah membuat roda untuk memungkinkan gerakan (lihat langkah opsional 8). Yang tersisa sekarang adalah menambahkan sensor dan membuat beberapa modifikasi dalam kode untuk deteksi gerakan.
Sensor ini memiliki 3 kabel, kabel sinyal kuning terhubung pin 3 pada Arduino, sedangkan merah dan hitam terhubung ke v5 dan tanah masing-masing di papan tulis.
Saya telah menempatkan sensor yang tersembunyi di bawah pintu seperti yang ditunjukkan pada gambar, sehingga dapat 'melihat' pergerakan pengguna hanya ketika pintu terbuka. persis apa yang saya butuhkan!
Saya juga harus mengubah kode sedikit (di sini) untuk menerapkan rutin deteksi gerakan (lihat kode, dalam fungsi zee7 () ), sehingga ketika gerakan terdeteksi, kotak akan bergerak, pertama ke kanan, lalu ke kiri, lalu tangan membalik sakelar dan bersembunyi. Kode ini banyak dikomentari, saya harap saya tidak berlebihan!
Anda dapat menemukan kode yang diperbarui di bawah ini, juga perhatikan bahwa saya telah membuat mesin mengambil gerakan secara acak, ini dapat diubah kembali menjadi berurutan dengan hanya mengatur boolean randomize = false;
Terima kasih SEMUA untuk saran hebat Anda!
Kode (Lebih baik mengunduh file yang dilampirkan pada langkah ini daripada menyalin / menempel dari bawah):
#termasuk
Servo doorServo;
Servo handServo;
TimerA unsigned long, TimerB; // pengatur waktu untuk rutin deteksi gerakan
int switch_pin = 2; // atur sakelar pada pin 2
// variabel motorik
int motorThrottle = 11;
int motorDirection = 13;
int motorBrake = 8;
// Variabel Jarak
int motionPin = 3; // pin sensor gerak pada analog 0
int lastDist = 0; // untuk mengingat jarak terakhir
int currentDist = 0;
ambang int = 200; // Ambang Batas Gerakan (atur sedemikian rupa sehingga Anda mendapatkan kepekaan deteksi gerakan yang diinginkan)

int pos = 0;
int selectedMove = 0; // pindahkan pemilih
int Testmove = 0; // mode uji: atur untuk memindahkan angka untuk menguji hanya satu gerakan yang dipilih
// (atur ke Nol untuk menjalankan normal i.e: roundrobbin di semua gerakan)
boolean randomise = true; // jika benar, kotak akan melakukan penggerak secara acak, jika disetel ke false maka pemindahan akan dilakukan secara berurutan dari 1 hingga 10

pengaturan batal ()
{
Serial.begin (9600);
pinMode (switch_pin, INPUT);
doorServo.attach (9); // atur servo pintu pada Pin 9 pwm
handServo.attach (10); // atur servo tangan pada Pin 10 pwm
doorServo.write (80); // setel pintu ke posisi sembunyi
handServo.write (0); // atur tangan ke posisi sembunyi
// Atur Saluran B, karena Saluran A dicadangkan oleh servos pintu dan tangan dan tidak dapat digunakan pada saat yang bersamaan
pinMode (motorDirection, OUTPUT); // Memulai pin Saluran Motor
pinMode (motorBrake, OUTPUT); // Memulai pin B Saluran Rem

}

membatalkan loop ()
{
// jika sakelar menyala, maka gerakkan pintu dan tangan untuk mematikannya …
if (digitalRead (switch_pin) == HIGH)
{

if (Testmove == 0)
{

jika (acak == salah)
{
if (selectedMove> 10)
{
selectedMove = 0; // ketika semua gerakan dimainkan, ulangi gerakan dari awal
}
}
lain
{
selectedMove = acak (11);
}
}
lain
{
selectedMove = Testmove;
}
Serial.println (selectedMove);
if (selectedMove == 0) {switchoff (); }
lain jika (selectedMove == 1) {switchoff (); }
lain jika (selectedMove == 2) {switchoffbitaraddod (); }
lain jika (selectedMove == 3) {crazydoor (); }
lain jika (selectedMove == 4) {crazyslow (); }
lain jika (selectedMove == 5) {m7anika7anika (); }
lain jika (selectedMove == 6) {m3alla2 (); }
lain jika (selectedMove == 7) {switchoff (); }
lain jika (selectedMove == 8) {matrix (); }
lain jika (selectedMove == 9) {sneak (); }
lain jika (selectedMove == 10) {zee7 (); }

if (Testmove == 0 && mengacak == false) {
selectedMove ++; // beralih ke langkah selanjutnya jika tidak dalam mode uji
}
}
}
// Perpustakaan gerakan
// gerakan dasar
batal mematikan ()
{
// Pindah pintu
untuk (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
keterlambatan (15);
}

// Bergerak tangan
untuk (pos = 0; pos <129; pos = 4)
{
handServo.write (pos);
keterlambatan (15);
}

// menyembunyikan tangan
untuk (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
keterlambatan (15);
}

// bersembunyi pintu
untuk (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
keterlambatan (15);
}
}

// pindah 3: buka dan tunggu, lalu gerakkan tangan dan tunggu, lalu beralih dan sembunyikan
membatalkan switchoffbitaraddod ()
{
// Pindah pintu
untuk (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
keterlambatan (15);
}
keterlambatan (800);
// Bergerak tangan
untuk (pos = 0; pos <100; pos = 4)
{
handServo.write (pos);
keterlambatan (15);
}
keterlambatan (1000);
untuk (pos = 100; pos <129; pos = 4)
{
handServo.write (pos);
keterlambatan (15);
}

// menyembunyikan tangan
untuk (pos = 129; pos> = 0; pos- = 5)
{
handServo.write (pos);
keterlambatan (15);
}

// bersembunyi pintu
untuk (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
keterlambatan (15);


}

}

// pindah 4: buka pintu lalu tutup berkali-kali, tunggu, lalu cepat-cepat buka kembali dan sembunyikan.

membatalkan crazydoor ()
{

// Pindah pintu
untuk (pos = 80; pos <125; pos = 3)
{
doorServo.write (pos);
keterlambatan (15);
}

// bersembunyi pintu
untuk (pos = 125; pos> = 80; pos- = 5)
{
doorServo.write (pos);
keterlambatan (15);
}
// Pindah pintu
untuk (pos = 80; pos <110; pos = 3)
{
doorServo.write (pos);
keterlambatan (15);
}

// bersembunyi pintu
untuk (pos = 110; pos> = 80; pos- = 15)
{
doorServo.write (pos);
keterlambatan (15);
}
keterlambatan (700);
// Pindah pintu
untuk (pos = 80; pos <125; pos = 3)
{
doorServo.write (pos);
keterlambatan (15);
}
keterlambatan (700);
// bersembunyi pintu
untuk (pos = 125; pos> = 80; pos- = 5)
{
doorServo.write (pos);
keterlambatan (15);
}

// ---- dari saklar ---- //
// Pindah pintu
untuk (pos = 80; pos <155; pos = 8)
{
doorServo.write (pos);
keterlambatan (15);
}

// Bergerak tangan
untuk (pos = 0; pos <129; pos = 3)
{
handServo.write (pos);
keterlambatan (15);
}

// menyembunyikan tangan
untuk (pos = 129; pos> = 0; pos- = 3)
{
handServo.write (pos);
keterlambatan (15);
}

// bersembunyi pintu
untuk (pos = 155; pos> = 80; pos- = 15)
{
doorServo.write (pos);
keterlambatan (15);
}

}

// pindah 5: buka pintu, lalu gerakkan tangan dengan sangat lambat ke depan dan kembali ke persembunyian dengan sangat lambat, lalu segera tutup pintu
membatalkan crazyslow ()
{
// Pindah pintu
untuk (pos = 80; pos <155; pos = 1)
{
doorServo.write (pos);
keterlambatan (30);
}

// Bergerak tangan
untuk (pos = 0; pos <129; pos = 1)
{
handServo.write (pos);
keterlambatan (30);
}

// menyembunyikan tangan
untuk (pos = 129; pos> = 0; pos- = 1)
{
handServo.write (pos);
keterlambatan (30);
}

// bersembunyi pintu
untuk (pos = 155; pos> = 125; pos- = 1)
{
doorServo.write (pos);
keterlambatan (30);
}
keterlambatan (100);
untuk (pos = 125; pos> = 80; pos- = 4)
{
doorServo.write (pos);
keterlambatan (15);
}

}
// pindah 6:
void m7anika7anika () {
// Pindah pintu
untuk (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
keterlambatan (15);
}

// Bergerak tangan
untuk (pos = 0; pos <70; pos = 1)
{
handServo.write (pos);
keterlambatan (15);
}
keterlambatan (800);


// bersembunyi pintu
untuk (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
keterlambatan (15);
}

// bersembunyi pintu
untuk (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
keterlambatan (15);
}
// bersembunyi pintu
untuk (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
keterlambatan (15);
}
// bersembunyi pintu
untuk (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
keterlambatan (15);
}

handServo.write (40);
keterlambatan (1000);

// Bergerak tangan
untuk (pos = 40; pos <129; pos = 4)
{
handServo.write (pos);
keterlambatan (15);
}

// menyembunyikan tangan
untuk (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
keterlambatan (15);
}


untuk (pos = 120; pos> = 80; pos - = 1)
{
doorServo.write (pos);
keterlambatan (15);
}



}
void m3alla2 () {
// Pindah pintu
untuk (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
keterlambatan (15);
}

// Bergerak tangan
untuk (pos = 0; pos <127; pos = 4)
{
handServo.write (pos);
keterlambatan (15);
}
// bersembunyi pintu
untuk (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
keterlambatan (15);
}
delay (2000);

untuk (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
keterlambatan (15);
}

untuk (pos = 155; pos> = 140; pos- = 3)
{
doorServo.write (pos);
keterlambatan (15);
}
untuk (pos = 140; pos <155; pos = 3)
{
doorServo.write (pos);
keterlambatan (15);
}
keterlambatan (500);
// menyembunyikan tangan
untuk (pos = 127; pos> = 0; pos- = 4)
{
handServo.write (pos);
keterlambatan (15);
}

// bersembunyi pintu
untuk (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
keterlambatan (15);
}
}

kekosongan matriks ()
{
// Pindah pintu
untuk (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
keterlambatan (15);
}

// Bergerak tangan
untuk (pos = 0; pos <80; pos = 4)
{
handServo.write (pos);
keterlambatan (15);
}

untuk (pos = 80; pos <129; pos = 1)
{
handServo.write (pos);
keterlambatan (30);
}
keterlambatan (300);

untuk (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
keterlambatan (10);
}

// bersembunyi pintu
untuk (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
keterlambatan (15);
}

}
batal menyelinap ()
{
// Pindah pintu
untuk (pos = 80; pos <130; pos = 1)
{
doorServo.write (pos);
keterlambatan (30);
}
delay (2000);

// Bergerak tangan
untuk (pos = 0; pos <40; pos = 1)
{
handServo.write (pos);
keterlambatan (30);
}

keterlambatan (500);

untuk (pos = 130; pos <155; pos = 4)
{
doorServo.write (pos);
keterlambatan (15);
}
keterlambatan (100);

untuk (pos = 40; pos <90; pos = 4)
{
handServo.write (pos);
keterlambatan (15);
}
keterlambatan (500);
// menyembunyikan tangan
untuk (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (pos);
keterlambatan (15);
}
keterlambatan (100);
untuk (pos = 70; pos <90; pos = 4)
{
handServo.write (pos);
keterlambatan (15);
}
keterlambatan (100);
untuk (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (pos);
keterlambatan (15);
}
keterlambatan (100);

untuk (pos = 70; pos <129; pos = 4)
{
handServo.write (pos);
keterlambatan (15);
}

untuk (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
keterlambatan (15);
}
// bersembunyi pintu
untuk (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
keterlambatan (15);
}
}

// langkah ini akan membuka pintu dan menunggu gerakan, jika terdeteksi di dekat sakelar,
// kotak akan bergerak pertama ke Kanan, lalu ke Kiri, dan akhirnya tangan bergerak dan mematikan sakelar
membatalkan zee7 ()
{

// buka pintu
untuk (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
keterlambatan (15);
}
delay (1200); // tunggu untuk menstabilkan pembacaan sensor setelah membuka pintu

// atur timer dan baca sensornya
// tunggu gerakan yang melebihi ambang batas atau jika timer kedaluwarsa (5 detik),
lastDist = analogRead (motionPin);
TimerA = millis ();

while (millis () - TimerA <= 5000)
{
currentDist = analogRead (motionPin);

// Apakah jarak saat ini menyimpang dari jarak terakhir lebih dari ambang batas?
// jika ya, maka pindahkan kotak ke kanan
if ((currentDist> lastDist thresh || currentDist <lastDist - thresh) || currentDist> 300)
{
// maju @ setengah kecepatan ke kiri (pilih kecepatan dan penundaan
//(i.e tunda (300) menurut Anda kotak dan tegangan baterai sehingga gerakan lemparan diinginkan)
digitalWrite (motorDirection, LOW); // Tetapkan arah KANAN Saluran A
digitalWrite (motorBrake, LOW); // Lepaskan Rem untuk Saluran B
analogWrite (motorThrottle, 100); // Putar motor di Saluran B dengan kecepatan penuh
keterlambatan (300);
digitalWrite (motorBrake, HIGH); // Eengage the Brake untuk Channel B
istirahat;
}
lastDist = currentDist;
}

// atur timer dan baca sensornya
// tunggu gerakan yang melebihi ambang batas atau jika timer kedaluwarsa (5 detik),
delay (1200); // tunggu untuk menstabilkan pembacaan sensor setelah membuka pintu
lastDist = analogRead (motionPin);
TimerB = millis ();
while (millis () - TimerB <= 5000)
{
currentDist = analogRead (motionPin);
// apakah kotak sudah bergerak ke kanan dan jarak saat ini menyimpang dari jarak terakhir lebih dari ambang batas?
// Jika ya, maka pindah ke Kiri
if ((currentDist> lastDist thresh || currentDist <lastDist - thresh) || currentDist> 300)
{
// mundur @ setengah kecepatan ke kanan (pilih kecepatan dan penundaan
//(i.e tunda (300) menurut Anda kotak dan tegangan baterai sehingga gerakan lemparan diinginkan)
digitalWrite (motorDirection, HIGH); // Tetapkan arah KIRI Saluran B
digitalWrite (motorBrake, LOW); // Lepaskan Rem untuk Saluran B
analogWrite (motorThrottle, 100); // Putar motor di Saluran B dengan kecepatan setengah
keterlambatan (300);
digitalWrite (motorBrake, HIGH); // Eengage the Brake untuk Channel B
istirahat;
}

lastDist = currentDist;

}
keterlambatan (100);
// Bergerak tangan
untuk (pos = 0; pos <130; pos = 4)
{
handServo.write (pos);
keterlambatan (15);
}

// menyembunyikan tangan
untuk (pos = 130; pos> = 0; pos- = 4)
{
handServo.write (pos);
keterlambatan (15);
}

// bersembunyi pintu
untuk (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
keterlambatan (15);
}
}

3 Orang Membuat Proyek Ini!

  • AndyC159 berhasil!

  • SamL84 berhasil!

  • melton1313 berhasil!

Apakah Anda membuat proyek ini? Bagikan dengan kami!

Rekomendasi

  • Mesin Sortasi Sekrup

  • PCB BOT (Mengikuti Garis, Menghindari Rintangan & Robot yang Dikontrol Bluetooth dalam satu PCB)

  • Internet of Things Class

  • Warna Kontes Pelangi

  • Kontes Fandom

  • Tantangan Pesta

194 Diskusi

0

sedang mencoba

4 tahun lalu di Pendahuluan

Terima kasih untuk ini! Saya membuat proyek Arduino pertama saya berdasarkan instruksi ini: naga yang tidak berguna!

4 balasan 0

Ajannsedang mencoba

Jawab 3 tahun yang lalu

Mesin nagamu luar biasa. !!! Artistik

0

TJAOkevinsedang mencoba

Jawab 3 tahun yang lalu

Luar Biasa !!!!!

0

riachisedang mencoba

Balas 4 tahun lalu di Pendahuluan

Kamu Menakjubkan :) !!!

Kepribadian yang hebat untuk Naga! Saya berharap Anda dapat mengulang video sambil naga langsung menghadap kamera (tampilan atas), saya merasa ini akan lucu, jadi lihat lidah menyelinap keluar!

Terima kasih telah berbagi video Anda dan senang bahwa i'able saya telah membantu

0

sedang mencobariachi

Balas 4 tahun lalu di Pendahuluan

Saya mencoba tampilan atas pada tahap sebelumnya tetapi tidak berhasil (melihat terlalu banyak bagian dalam yang berantakan) jadi saya menolaknya ketika saya mengambil video ini. Saya pikir Anda benar: pada tahap akhir itu akan tampak hebat! Sayangnya saya sudah memberikan naga itu … Selanjutnya ke proyek selanjutnya!

0

br1pro

4 tahun yang lalu

Sangat menyenangkan! kerja keras memperbaiki servos dan mendesain tangan. Terima kasih atas instruksi ini!

1 balasan 0

riachibr1pro

Balas 4 tahun lalu di Pendahuluan

Pria yang luar biasa! sangat bagus :) ada video?

0

clincoln

5 tahun lalu

Tonton videonya terlebih dahulu lalu tertawa

1 balasan 0

TobiasVclincoln

Balas 4 tahun lalu di Pendahuluan

Saya tahu saya melakukannya! : D

0

rileyw

5 tahun lalu

Video yang super keren membuatnya tampak seperti punya pikiran sendiri

0

Elitekilla117

5 tahun yang lalu di Pendahuluan

Mesin tidak berguna saya dengan kode arduino dan riachis! Dibuat menjadi tardis dari Dr.who. :)
http://www.youtube.com/watch?v=aDs0T52o6-M

2 balasan 0

riachiElitekilla117

Jawab 5 tahun yang lalu di Pendahuluan

SUKA!!!! :)) dilakukan dengan sangat baik, sangat senang melihat kotak bom Anda hidup! Saya juga dramatisasi dan musiknya: p tidak bisa menahan diri untuk menyarankan 3 modifikasi kecil jika saya boleh :)?
- akan lebih bagus untuk meletakkan mesin dalam posisi berdiri, saya tahu bahwa ini akan membuat kehilangan gravitasi untuk menutup pintu, tetapi solusi sederhana adalah dengan meletakkan 2 karet gelang yang melekat pada bagian dalam pintu di satu sisi dan ke sisi dalam kotak untuk ujung yang lain, ini akan membuat pintu menutup ketika servo pintu menutup … periksa langkah membangun saya, Anda akan melihat karet gelang di Langkah 6 …
- juga bagaimana dengan melukis tangan hitam, itu akan lebih licik dan licin
! Juga ujung tangan dapat dicat merah berdarah atau dihiasi dengan wajah gila atau sesuatu seperti itu ..
- Hapus langkah terakhir karena tidak ada yang terjadi di dalamnya (seharusnya menjadi salah satu yang memindahkan kotak) dan tulis langkah Anda sendiri …
Namun demikian, lupakan sarannya, saya menyukai mesin kamu! Dan terima kasih atas banyak terima kasihnya, tolong Anda dapat menguranginya dan menjaga video fokus pada mesin :)
Semoga gf Anda menyukainya!

0

Elitekilla117riachi

Jawab 5 tahun yang lalu di Pendahuluan

Hahah Terima kasih atas pujiannya :) Sebenarnya saya ingin melakukan lebih banyak untuk itu tetapi karena waktu yang sulit saya tidak dapat memasukkan banyak detail yang saya inginkan. Saya ingin menambahkan beberapa warna pada lengan tetapi tidak punya waktu untuk itu. Dan saya ingin menggambar wajah di lengan dengan pisau tetapi sudah dibungkus dan siap untuk diberikan padanya untuk Natal. Hehehe. Saya pikir dia akan menyukainya. Saya juga ingin membuatnya berdiri tetapi takut karet gelang akan memberi beban terlalu banyak pada servos. Pintunya sudah cukup berat. Langkah terakhir yang saya lakukan karena membuat Anda dalam ketegangan menunggu untuk keluar. Hahaha tapi saya menghargai semua bantuan teman saya! Pasti layak!

0

chuckletushy

5 tahun lalu

Ini harus saya buat … luar biasa

0

wrs715

5 tahun yang lalu di Pendahuluan

Ini adalah proyek pertama yang saya lihat menggunakan Arduino di mana saya berpikir, "Ya, itu sepadan. Sekarang saya harus mendapatkannya." Pekerjaan yang fantastis!

0

siliconghost

5 tahun yang lalu di Pendahuluan

Wow, proyek luar biasa! Sukai putaran Anda agar lebih menarik!

0

bob3030

5 tahun lalu

Perangkat satu orang yang tidak berguna adalah perangkat lain yang benar-benar hebat, dari dunia ini, kami akan berpikir, menyenangkan untuk dimiliki, didambakan oleh banyak perangkat yang tidak berguna. Terima kasih atas pembaruan Anda untuk proyek ini. Terima kasih sudah memposting.

0

goyang

5 tahun yang lalu di Pendahuluan

Pemikiran 1: Menggunakan Arduino untuk hal ini hanyalah kerja keras yang konyol
Pemikiran 2: Setelah menonton video-Menggunakan Arduino untuk ini adalah jenius murni!
Saya tunduk pada kreativitas Anda!

0

Stumitch

5 tahun yang lalu di Pendahuluan

Itu sungguh luar biasa! Agak mengingatkan saya pada kepribadian Wall-E. Terima kasih untuk proyek yang luar biasa!

0

gazillabytes

5 tahun yang lalu di Pendahuluan

Benar-benar tidak berguna! Bagus sekali. Saya terinspirasi dan perlu membangun satu untuk meja saya. Terima kasih.