Litar

Cara Membina Mesin Tidak Usul lain: Mudah Membuat, dan Sulit Digunakan !: 9 Langkah (dengan Gambar)

IOT ADAPTATION IN TRANSFORMING INDUSTRY & HUMAN WAY OF LIFE

IOT ADAPTATION IN TRANSFORMING INDUSTRY & HUMAN WAY OF LIFE

Isi kandungan:

Anonim

Begitu banyak mesin yang tidak berguna dibina, mengapa bangunan lain? Sederhana, sangat menyeronokkan :), menyeronokkan untuk membina dan menyeronokkan untuk dimainkan.
Saya cuba memberikan versi ini watak, kerana saya selalu merasakan ada orang yang "berfikir di dalam kotak", jadi di sini saya cuba, saya harap saya berjaya memberikan "dia" kehidupan!
Saya sangat gembira untuk berkongsi dengan anda segala langkah, dengan semua harapan bahawa anda akan dengan mudah membina anda dan memberikannya watak pahit atau lebih baik! Versi saya adalah berdasarkan kepada Arduino, anda mungkin menganggap ia terlalu berlebihan, tetapi dengan fleksibiliti yang diberikan kepada saya, saya fikir ia berbaloi.
Berikut adalah video yang semuanya disatukan. Kemudian, kami akan bergerak ke bahagian, langkah, skema dan kod
Izinkan saya tahu komen dan / atau soalan anda jika ada.
Harap anda nikmati!
f.

Bekalan:

Langkah 1: Bagaimana Ia Berfungsi?

Segala-galanya disambungkan ke papan Arduino, lembaga menunggu sehingga suis ditetapkan kepada logik TINGGI, yaitu, apabila anda menghidupkan suis, papan memberi isyarat dua motor servo untuk bergerak dengan cara yang spesifik (lebih lanjut kemudian), setelah itu , servo yang disambungkan ke "tangan" akan menghidupkan semula suis ke kedudukan OFF, dan kembali ke dalam kotak, diikuti dengan servo "pintu". maka segala-galanya berulang.
Jika anda melihat video di atas, setiap kali suis ditukar, mesin bertindak balas dengan cara yang berbeza, dan ini dilakukan dengan hanya menulis fungsi yang berbeza dengan pemasaan yang berlainan dalam kod Arduino, (saya panggil mereka "Bergerak"). Setiap kali suis ditukar, saya memanggil langkah baru sehingga semuanya selesai, saya mulakan. ambil perhatian bahawa dalam langkah 9, saya menyediakan satu lagi versi kod yang memilih bergerak secara rawak dan bukan berurutan. Anda boleh menambah seberapa banyak langkah yang anda mahu, selagi anda mempunyai memori yang cukup pada Arduino.
Arduino sentiasa ON, inilah sebabnya saya menambah suis untuk bateri untuk menjimatkan kuasa apabila mesin tidak digunakan. Saya sudah merancang untuk menggunakan gangguan pada suis, bukan pengesanan TINGGI / LOW mudah semasa dan gandingannya dengan mod tidur. Ini akan menjimatkan kuasa apabila mesin tidak digunakan, dan juga membolehkan ia sentiasa bersedia (tetapi ini juga akan merumitkan kod) Jadi, pada masa ini, ia hanya mudah ON / OFF switch, dan papan sentiasa berkuasa .

Langkah 2: Bahagian

Anda perlu:
Mandatori:
1. Kotak
2. Mana-mana papan Arduino dengan output PWM (saya kebetulan mempunyai yang lama meletakkan di sekitar, Diecimila)
3. Dua motor servo RC standard (saya menggunakan Futaba - S3003, mereka mempunyai tork 3,2 Kg / cm, lebih daripada cukup untuk memindahkan pintu atau tangan)
4. Bateri 6-12 V (Saya menggunakan bateri drone AR saya, ia adalah 11.1 v / 1000 mA)
3. Tukar SPTT atau SPST untuk pencetus (pada dasarnya, mana-mana suis yang sesuai dengan anda!)
5. Suis lain untuk bateri
6. Butang tekan untuk menetapkan semula Arduino jika anda mahu memulakan semula langkah / kod dari atas.
7. Sesetengah wayar jumper

Pilihan:
Sekiranya anda ingin merancang langkah yang termasuk memindahkan kotak sekitar (seperti langkah terakhir dalam video), maka anda boleh mendapatkan:
1. Perisai motor Arduino, ini juga berguna untuk projek lain (atau anda boleh merancang jambatan H sendiri, cari ia)
2. Kereta RC yang murah supaya anda boleh mengambil motor DC dan kotak gearnya
Selain itu, masih dalam bahagian "pilihan", saya telah membina litar de-bounce perkakasan untuk mempunyai pencetus bersih apabila suis ditukar / dimatikan. Ini boleh dilangkau dan mudah dilaksanakan dalam perisian arduino menggunakan kelewatan atau pemasa. Saya melakukan debet perkakasan kerana saya tidak lama lagi akan mengubah kod untuk menggunakan gangguan, dan kerana yang terakhir tidak membenarkan penggunaan fungsi penangguhan / pemasa yang boleh dipercayai dalam rutin, jadi saya terpaksa membina litar de-bounce mudah untuk kegunaan masa depan . Jika anda ingin melangkau bahagian ini, silakan hubungkan satu suis / perintang mudah ke pin 2 arduino dan melaksanakan rutin debat software.
Untuk perkakasan debounce:
1. kapasitor elektrolitik 10mF
2. 10K resistor
3. Logik TIDAK gate i.e Inverter (cip 74HC04) Ini mempunyai enam inverter, tetapi anda hanya perlu satu.
Mari kita bina …

Langkah 3: Membina Kotak

Anda boleh menggunakan mana-mana kotak yang anda cari sesuai. Saya membina lombong, mungkin tidak sempurna, tetapi masih banyak peribadi :)
1. Saya menggunakan 2 lembar kayu BALSA 5mm, sangat mudah untuk digunakan dengan menggunakan pemotong, dan agak kuat memandangkan berat ringan yang luar biasa.
2. Digunakan 5 tiub gam Cyanoacrylat (aka pelekat bertindak cepat kuat)
Ini dia:
A 22 x 14 x 14 cm kotak

Langkah 4: Skematik

Di atas adalah skematik (digambar menggunakan Fritzing), yang menunjukkan:
Bahagian teratas: Papan utama arduino, 2 servo dan suis sambungan. Perhatikan bahawa seperti yang dinyatakan sebelum ini, anda boleh menggantikan litar debounce (kanan kanan) dengan perintang mudah / suis.
Kedua-dua servo "pintu" dan "tangan" dikuasakan terus dari pin 5v pada Arduino. Wayar isyarat disambungkan kepada pin 9 dan 10 masing-masing. Pin ini menyokong PWM, oleh itu saya menggunakannya untuk mengawal sudut / kedudukan servo (maksima 0 hingga 180 darjah).
Nota: butang tolak merah hanyalah set semula (serupa dengan yang terdapat pada muka arduino papan). Saya menambah ia mempunyai akses cepat untuk menetapkan semula papan / perisian pada bila-bila masa tanpa membuka kotak. Cuma sambungkan pin RESET ke Ground untuk membuat penetapan semula.
Bahagian bawah: diperlukan jika anda ingin menggunakan motor DC dan gerakkan mesin sekitar. Ini adalah perisai motor arduino, ia dipasang di atas Arduino, jadi semua pin kedua-dua papan disambungkan ke satu sama lain. Saya menunjukkan mereka di bawah seperti yang dipisahkan hanya untuk kejelasan, mudah-mudahan! Perisai ini boleh mengendalikan sehingga 2 DC motor (2 saluran A / B) dengan kemudahan yang luar biasa. Saya hanya menggunakan satu sekarang. Ia membolehkan untuk menetapkan kod, arah, kelajuan dan pemecahan mana-mana 2 saluran / motor yang ada. Saya menggunakan saluran B seperti ditunjukkan di bawah. di mana pin
13 untuk arah, pin 11 untuk kelajuan dan pin 8 untuk kawalan brek.
Bateri ini adalah 11.1 / 1000 mA, disambungkan ke perisai, sehingga memberi makan motor DC, papan arduino utama dan servos. jika anda tidak menggunakan perisai, maka anda boleh menyambungkan bateri terus ke laras kuasa pada papan arduino utama.

Langkah 5: Menetapkan Servos

Berikut adalah servos tangan dan pintu yang dipasang:
Anda perlu terlebih dahulu memasang servos di tempat yang betul, ini memerlukan sedikit percubaan dan kesilapan sehingga anda mendapat pergerakan yang diperlukan. Anda boleh menggunakan contoh Servo yang disediakan dalam IDE arduino untuk menguji servos dan jumlah pesongan yang diperlukan untuk setiap satunya, dan dengan itu memutuskan kedudukan terakhir dan panjang lengan untuk servo pintu dan tangan.
Lengannya hanya dibuat dari kayu balsa, saya membuatnya lebih tebal untuk menahan beberapa luka.
Berikut adalah cara saya melakukannya. Hanya satu nota mengenai servo tangan. Anda memerlukan aci servo untuk berada di bawah tepi penutup (seperti yang ditunjukkan di bawah), ini untuk mengelakkan kesukaran dalam membuat tangan yang berjaya memukul suis, dan juga dapat kembali ke dalam kotak.


Langkah 6: Menyambungkan Switch, Servos dan Arduino

Buat semua sambungan yang dilihat dalam langkah skema, dan cuba masukkan semua di dalam kotak yang serupa dengan apa yang ditunjukkan di atas:

Langkah 7: Pilihan: Motor DC dan Bateri

Di atas adalah bagaimana saya meletakkan kotak gear motor DC (diambil dari kereta RC murah), juga menunjukkan adunan dan menukar penempatan.
Pastikan anda meletakkan gear sebagai berpusat mungkin untuk mengimbangi kotak, anda mungkin perlu meletakkan berat di dalam kotak untuk mengimbanginya lebih banyak selepas perhimpunan terakhir, kerana bateri yang saya gunakan sedikit berat (100 gr) dan menyebabkan beberapa wiggling apabila menukar atau memindahkan kotak.
Perhatikan bahawa motor dc kelajuan dikawal oleh pin 11, Arah dengan pin 13, dan brek pada pin 8, ini dianggap saluran B pada perisai motor arduino.
Melalui perhimpunan itu, saya cuba menyembunyikan semua suis wayar dan komponen lain untuk mempunyai kotak autentik yang mudah. Ini terpakai pada roda, jadi saya membuat pinggiran di sekitar mereka yang menjadi tuan rumah kedua-dua roda dan bateri, dan juga menyediakan akses kepada butang set semula merah.

Langkah 8: Kod

Untuk menulis kod untuk arduino, anda memerlukan arduino IDE (muat turun di sini)
Saya menggunakan versi 1.0.5, hanya pastikan anda memilih port COM (windows) dan papan yang betul dari dalam IDE, kemudian gunakan kod di bawah, dan tekan muat naik.
NOTA: Nilai-nilai yang saya gunakan dalam kod untuk menetapkan pesongan max servos dibuat tepat untuk kotak ini dengan mengambil kira kedudukan servos, paksi dan sudut servo. Saya mendapat ini melalui percubaan. Oleh itu, anda perlu merangka nilai anda sendiri mengikut kotak anda dan penempatan servo.
Untuk rujukan, di bawah adalah nilai min / max yang saya gunakan untuk setiap servo kerana anda akan melihatnya yang berlaku dalam kod:
Pintu:
80 bersembunyi, 155 terbuka sepenuhnya
Tangan:
0 bersembunyi, 129 menolak pada suis

Berikut ialah kod (Lebih baik untuk memuat turun fail yang dilampirkan pada langkah ini dan bukannya copy / paste dari bawah):
#include
Pintu servisServo;
Servo handServo;
int switch_pin = 2; // suis set pada pin 2
// pemboleh ubah motor
int motorThrottle = 11;
int motorDirection = 13;
int motorBrake = 8;
int pos = 0;
int selectedMove = 0; // pemilih bergerak
int Testmove = 0; // mod ujian: tetapkan untuk memindahkan nombor untuk menguji hanya satu langkah yang dipilih
/ / (set ke Zero untuk berjalan secara normal i.e: roundrobbin pada bergerak amm)
batal persediaan ()
{
Serial.begin (9600);
pinMode (switch_pin, INPUT);
doorServo.attach (9); // servo pintu set pada pin 9 pwm
handServo.attach (10); // servo servo di pin 10 pwm
doorServo.write (80); / / set pintu untuk menyembunyikan kedudukan
handServo.write (0); / / Menetapkan tangan untuk menyembunyikan kedudukan

// Penyediaan Saluran B, (kerana Saluran A disusun oleh pintu dan servo tangan dan tidak boleh digunakan pada masa yang sama)
pinMode (motorDirection, OUTPUT); // Memulakan pin B Channel Motor
pinMode (motorBrake, OUTPUT); // Memulakan pin B saluran Brek

}

kekosongan gelung ()
{
jika (Testmove! = 0) {
selectedMove = Testmove;
}

// jika suis hidup, kemudian pindahkan pintu dan tangan untuk mematikannya …
jika (digitalRead (switch_pin) == TINGGI)
{

jika (selectedMove> 10) {selectedMove = 0; } // apabila semua langkah dimainkan, ulangi langkah dari permulaan
// di bawah adalah semua "Bergerak" saya direka setakat ini, masing-masing adalah fungsi yang ditulis di bawah dalam kod, melaksanakan nama-nama, abit pelik? ya seperti ada yang ditulis dalam bahasa arab
jika (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) {matriks (); }
lain jika (selectedMove == 9) {sneak (); }
lain jika (selectedMove == 10) {zee7 (); }

jika (Testmove == 0) {
selectedMove ++; // swith ke langkah seterusnya jika tidak dalam mod ujian
}
}
}

// Perpustakaan bergerak
// langkah asas
void switchoff ()
{
// Pintu bergerak
untuk (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}

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

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

/ // menyembunyikan pintu
untuk (pos = 155; pos> = 80; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}
}

// bergerak 3: buka dan tunggu, kemudian gerakkan tangan dan tunggu, kemudian beralih dan sembunyikan
void switchoffbitaraddod ()
{
// Pintu bergerak
untuk (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}
kelewatan (800);
// Bergerak tangan
untuk (pos = 0; pos <100; pos = 4)
{
handServo.write (pos);
kelewatan (15);
}
kelewatan (1000);
untuk (pos = 100; pos <129; pos = 4)
{
handServo.write (pos);
kelewatan (15);
}

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

/ // menyembunyikan pintu
untuk (pos = 155; pos> = 80; pos = 3)
{
doorServo.write (pos);
kelewatan (15);


}

}

// pindahkan 4: pintu terbuka kemudian tutupnya berkali-kali, tunggu, kemudian segera buka semula dan matikan dan sembunyikan.

void crazydoor ()
{

// Pintu bergerak
untuk (pos = 80; pos <125; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}

/ // menyembunyikan pintu
untuk (pos = 125; pos> = 80; pos = 5)
{
doorServo.write (pos);
kelewatan (15);
}
// Pintu bergerak
untuk (pos = 80; pos <110; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}

/ // menyembunyikan pintu
untuk (pos = 110; pos> = 80; pos = 15)
{
doorServo.write (pos);
kelewatan (15);
}
kelewatan (700);
// Pintu bergerak
untuk (pos = 80; pos <125; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}
kelewatan (700);
/ // menyembunyikan pintu
untuk (pos = 125; pos> = 80; pos = 5)
{
doorServo.write (pos);
kelewatan (15);
}

/ / ---- daripada suis ---- //
// Pintu bergerak
untuk (pos = 80; pos <155; pos = 8)
{
doorServo.write (pos);
kelewatan (15);
}

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

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

/ // menyembunyikan pintu
untuk (pos = 155; pos> = 80; pos = 15)
{
doorServo.write (pos);
kelewatan (15);
}

}

// bergerak 5: pintu terbuka, kemudian bergerak tangan perlahan-lahan ke hadapan dan kembali bersembunyi dengan sangat perlahan, kemudian dengan cepat menutup pintu
void crazyslow ()
{
// Pintu bergerak
untuk (pos = 80; pos <155; pos = 1)
{
doorServo.write (pos);
kelewatan (30);
}

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

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

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

}
// langkah 6:
tidak sah m7anika7anika () {
// Pintu bergerak
untuk (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}

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


/ // menyembunyikan pintu
untuk (pos = 155; pos> = 130; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}

/ // menyembunyikan pintu
untuk (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}
/ // menyembunyikan pintu
untuk (pos = 155; pos> = 130; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}
/ // menyembunyikan pintu
untuk (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}

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

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

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


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



}
void m3alla2 () {
// Pintu bergerak
untuk (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}

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

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

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

/ // menyembunyikan pintu
untuk (pos = 155; pos> = 80; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}
}

batal matriks ()
{
// Pintu bergerak
untuk (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}

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

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

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

/ // menyembunyikan pintu
untuk (pos = 155; pos> = 80; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}

}
void sneak ()
{
// Pintu bergerak
untuk (pos = 80; pos <130; pos = 1)
{
doorServo.write (pos);
kelewatan (30);
}
kelewatan (2000);

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

kelewatan (500);

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

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

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

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


void zee7 ()
{
// Pintu bergerak
untuk (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}
kelewatan (2000);
// maju @ separuh kelajuan ke kiri
digitalWrite (motorDirection, LOW); // Menetapkan arahan KANAN B Channel
digitalWrite (motorBrake, LOW); // Menanggalkan Brek untuk Channel B
analogWrite (motorThrottle, 100); / / Putar motor di Channel B pada kelajuan penuh
kelewatan (300);
digitalWrite (motorBrake, HIGH); // Kurangkan Brek untuk Channel B
kelewatan (2000);

// mundur @ separuh kelajuan ke kanan
digitalWrite (motorDirection, HIGH); // Menetapkan arah LEFT arahan Channel B
digitalWrite (motorBrake, LOW); // Menanggalkan Brek untuk Channel B
analogWrite (motorThrottle, 100); // Putar motor di Channel B pada separuh kelajuan
kelewatan (300);
digitalWrite (motorBrake, HIGH); // Kurangkan Brek untuk Channel B
kelewatan (1000);

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

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

/ // menyembunyikan pintu
untuk (pos = 155; pos> = 80; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}
}


Langkah 9: Kemas Kini Pilihan: Pengesanan Pergerakan

Saya mempunyai sensor kedekatan hari ini (GP2Y0A21), jadi kini saya boleh menggunakannya untuk memindahkan mesin jika pengguna mendekati suis toggle :)
Untuk langkah tambahan ini, saya mengandaikan anda telah membina roda untuk membolehkan pergerakan (lihat langkah pilihan 8). Apa yang dibiarkan sekarang adalah untuk menambah sensor dan membuat beberapa pengubahsuaian dalam kod untuk pengesanan pergerakan.
Sensor mempunyai 3 wayar, wayar isyarat kuning disambungkan ke pin 3 pada arduino, sementara merah dan hitam disambungkan ke v5 dan tanah masing-masing di papan.
Saya telah meletakkan sensor yang tersembunyi di bawah pintu seperti yang ditunjukkan dalam gambar, oleh itu ia boleh 'melihat' pergerakan pengguna hanya apabila pintu dibuka. apa yang saya perlukan!
Saya juga harus menukar kod sedikit (di sini) untuk melaksanakan rutin pengesanan pergerakan (lihat kod, dalam fungsi zee7 () ), supaya apabila pergerakan dikesan, kotak akan bergerak, pertama ke kanan, kemudian ke kiri, maka tangan membalikkan suis dan bersembunyi. Kod ini banyak mengulas, saya harap saya tidak keterlaluan!
Anda boleh mencari kod yang dikemaskini di bawah, juga ambil perhatian bahawa saya telah membuat mesin memilih bergerak secara rawak, ini boleh diubah kembali ke urut-urutan dengan hanya menetapkan boolean rawak = palsu;
Terima kasih SEMUA untuk cadangan hebat anda!
Kod (Lebih baik untuk memuat turun fail yang dilampirkan ke langkah ini dan bukan salinan / tampal dari bawah):
#include
Pintu servisServo;
Servo handServo;
TimerA yang tidak ditandatangani, TimerB; // pemasa untuk rutin pengesanan pergerakan
int switch_pin = 2; // suis set pada pin 2
// pemboleh ubah motor
int motorThrottle = 11;
int motorDirection = 13;
int motorBrake = 8;
/ Pembolehubah Jarak
int motionPin = 3; // pin sensor gerakan pada analog 0
int lastDist = 0; // untuk mengingati jarak terakhir
int currentDist = 0;
int thresh = 200; // Threshold for Movement (menetapkannya agar anda mendapatkan sensetivity yang diinginkan pengesanan gerakan)

int pos = 0;
int selectedMove = 0; // pemilih bergerak
int Testmove = 0; // mod ujian: tetapkan untuk memindahkan nombor untuk menguji hanya satu langkah yang dipilih
/ / (set ke Zero untuk berjalan secara normal i.e: roundrobbin pada semua bergerak)
boolean rawak = benar; // jika benar, kotak akan melakukan penggerak secara rawak, jika ditetapkan kepada palsu maka langkah akan dilakukan secara seragam dari 1 hingga 10

batal persediaan ()
{
Serial.begin (9600);
pinMode (switch_pin, INPUT);
doorServo.attach (9); // servo pintu set pada pin 9 pwm
handServo.attach (10); // servo servo di pin 10 pwm
doorServo.write (80); / / set pintu untuk menyembunyikan kedudukan
handServo.write (0); / / Menetapkan tangan untuk menyembunyikan kedudukan
// Penyediaan Saluran B, kerana Channel A disediakan oleh servo pintu dan tangan dan tidak dapat digunakan pada waktu yang sama
pinMode (motorDirection, OUTPUT); // Memulakan pin B Channel Motor
pinMode (motorBrake, OUTPUT); // Memulakan pin B saluran Brek

}

kekosongan gelung ()
{
// jika suis hidup, kemudian pindahkan pintu dan tangan untuk mematikannya …
jika (digitalRead (switch_pin) == TINGGI)
{

jika (Testmove == 0)
{

jika (rawak == palsu)
{
jika (selectedMove> 10)
{
selectedMove = 0; // apabila semua bergerak dimainkan, ulangi gerakan dari awal
}
}
lain
{
selectedMove = random (11);
}
}
lain
{
selectedMove = Testmove;
}
Serial.println (selectedMove);
jika (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) {matriks (); }
lain jika (selectedMove == 9) {sneak (); }
lain jika (selectedMove == 10) {zee7 (); }

jika (Testmove == 0 && rawak == false) {
selectedMove ++; // beralih ke langkah seterusnya jika tidak dalam mod ujian
}
}
}
// Perpustakaan bergerak
// langkah asas
void switchoff ()
{
// Pintu bergerak
untuk (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}

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

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

/ // menyembunyikan pintu
untuk (pos = 155; pos> = 80; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}
}

// bergerak 3: buka dan tunggu, kemudian gerakkan tangan dan tunggu, kemudian beralih dan sembunyikan
void switchoffbitaraddod ()
{
// Pintu bergerak
untuk (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}
kelewatan (800);
// Bergerak tangan
untuk (pos = 0; pos <100; pos = 4)
{
handServo.write (pos);
kelewatan (15);
}
kelewatan (1000);
untuk (pos = 100; pos <129; pos = 4)
{
handServo.write (pos);
kelewatan (15);
}

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

/ // menyembunyikan pintu
untuk (pos = 155; pos> = 80; pos = 3)
{
doorServo.write (pos);
kelewatan (15);


}

}

// pindahkan 4: pintu terbuka kemudian tutupnya berkali-kali, tunggu, kemudian segera buka semula dan matikan dan sembunyikan.

void crazydoor ()
{

// Pintu bergerak
untuk (pos = 80; pos <125; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}

/ // menyembunyikan pintu
untuk (pos = 125; pos> = 80; pos = 5)
{
doorServo.write (pos);
kelewatan (15);
}
// Pintu bergerak
untuk (pos = 80; pos <110; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}

/ // menyembunyikan pintu
untuk (pos = 110; pos> = 80; pos = 15)
{
doorServo.write (pos);
kelewatan (15);
}
kelewatan (700);
// Pintu bergerak
untuk (pos = 80; pos <125; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}
kelewatan (700);
/ // menyembunyikan pintu
untuk (pos = 125; pos> = 80; pos = 5)
{
doorServo.write (pos);
kelewatan (15);
}

/ / ---- daripada suis ---- //
// Pintu bergerak
untuk (pos = 80; pos <155; pos = 8)
{
doorServo.write (pos);
kelewatan (15);
}

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

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

/ // menyembunyikan pintu
untuk (pos = 155; pos> = 80; pos = 15)
{
doorServo.write (pos);
kelewatan (15);
}

}

// bergerak 5: pintu terbuka, kemudian bergerak tangan perlahan-lahan ke hadapan dan kembali bersembunyi dengan sangat perlahan, kemudian dengan cepat menutup pintu
void crazyslow ()
{
// Pintu bergerak
untuk (pos = 80; pos <155; pos = 1)
{
doorServo.write (pos);
kelewatan (30);
}

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

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

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

}
// langkah 6:
tidak sah m7anika7anika () {
// Pintu bergerak
untuk (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}

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


/ // menyembunyikan pintu
untuk (pos = 155; pos> = 130; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}

/ // menyembunyikan pintu
untuk (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}
/ // menyembunyikan pintu
untuk (pos = 155; pos> = 130; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}
/ // menyembunyikan pintu
untuk (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}

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

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

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


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



}
void m3alla2 () {
// Pintu bergerak
untuk (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}

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

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

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

/ // menyembunyikan pintu
untuk (pos = 155; pos> = 80; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}
}

batal matriks ()
{
// Pintu bergerak
untuk (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}

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

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

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

/ // menyembunyikan pintu
untuk (pos = 155; pos> = 80; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}

}
void sneak ()
{
// Pintu bergerak
untuk (pos = 80; pos <130; pos = 1)
{
doorServo.write (pos);
kelewatan (30);
}
kelewatan (2000);

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

kelewatan (500);

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

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

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

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

// langkah ini akan membuka pintu dan menunggu gerakan, jika dikesan berhampiran suis,
// kotak akan bergerak terlebih dahulu ke Kanan, dan kemudian ke Kiri, dan akhirnya tangan bergerak dan mematikan suis
void zee7 ()
{

//buka pintu
untuk (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}
kelewatan (1200); // tunggu untuk menstabilkan bacaan sensor selepas membuka pintu

// tetapkan pemasa dan baca sensor
// tunggu pergerakan yang melebihi ambang atau jika pemasa luput (5 saat),
lastDist = analogRead (motionPin);
TimerA = millis ();

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

/ / Adakah jarak semasa menyimpang dari jarak terakhir dengan lebih daripada ambang?
// jika ya, kemudian alihkan kotak ke kanan
jika ((currentDist> lastDist thresh || currentDist <lastDist - thresh) || currentDist> 300)
{
// maju @ separuh kelajuan ke kiri (pilih kelajuan dan kelewatan
/ / (kelewatan) (300) mengikut kotak dan voltan bateri sedemikian rupa supaya lontaran pergerakan adalah wajar)
digitalWrite (motorDirection, LOW); // Menetapkan arah KANAN Channel A
digitalWrite (motorBrake, LOW); // Menanggalkan Brek untuk Channel B
analogWrite (motorThrottle, 100); / / Putar motor di Channel B pada kelajuan penuh
kelewatan (300);
digitalWrite (motorBrake, HIGH); // Kurangkan Brek untuk Channel B
pecah;
}
lastDist = currentDist;
}

// tetapkan pemasa dan baca sensor
// tunggu pergerakan yang melebihi ambang atau jika pemasa luput (5 saat),
kelewatan (1200); // tunggu untuk menstabilkan bacaan sensor selepas membuka pintu
lastDist = analogRead (motionPin);
TimerB = millis ();
sementara (millis () - TimerB <= 5000)
{
currentDist = analogRead (motionPin);
// Adakah kotak sudah bergerak ke kanan dan jarak semasa menyimpang dari jarak terakhir dengan lebih dari ambang?
// Jika ya, kemudian bergerak ke Kiri
jika ((currentDist> lastDist thresh || currentDist <lastDist - thresh) || currentDist> 300)
{
// mundur @ separuh kelajuan ke kanan (pilih kelajuan dan kelewatan
/ / (kelewatan) (300) mengikut kotak dan voltan bateri sedemikian rupa supaya lontaran pergerakan adalah wajar)
digitalWrite (motorDirection, HIGH); // Menetapkan arah LEFT arahan Channel B
digitalWrite (motorBrake, LOW); // Menanggalkan Brek untuk Channel B
analogWrite (motorThrottle, 100); // Putar motor di Channel B pada separuh kelajuan
kelewatan (300);
digitalWrite (motorBrake, HIGH); // Kurangkan Brek untuk Channel B
pecah;
}

lastDist = currentDist;

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

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

/ // menyembunyikan pintu
untuk (pos = 155; pos> = 80; pos = 3)
{
doorServo.write (pos);
kelewatan (15);
}
}

3 Orang Membuat Projek Ini!

  • AndyC159 berjaya!

  • SamL84 berjaya!

  • melton1313 berjaya!

Adakah anda membuat projek ini? Kongsi dengan kami!

Cadangan

  • Mesin sorting skru

  • PCB BOT (Talian Berikutan, Penghalang Penghalang & Robot Kawalan Bluetooth dalam PCB Tunggal)

  • Internet Kelas Perkara

  • Warna Peraduan Rainbow

  • Peraduan Fandom

  • Cabaran Parti

194 Perbincangan

0

isyoutrying

4 tahun yang lalu di Pengenalan

Terima kasih kerana ini! Saya membuat projek Arduino pertama saya berdasarkan pengajaran ini: naga berguna!

4 balasan 0

Ajannisyoutrying

Balas 3 tahun lalu

Mesin naga anda hebat. !!! Artistik

0

TJAOkevinisyoutrying

Balas 3 tahun lalu

Awesome !!!!!

0

riachiisyoutrying

Balas 4 tahun yang lalu pada Pengenalan

Awak hebat :) !!!

Keperibadian besar untuk Naga! Saya harap anda boleh mengulang video sambil membawa naga terus menghadap kamera (pandangan atas), saya rasa ini akan menjadi lucu, jadi lihat lidah menyelinap keluar!

Terima kasih kerana berkongsi video anda dan gembira kerana saya telah membantu

0

isyoutryingriachi

Balas 4 tahun yang lalu pada Pengenalan

Saya mencuba pandangan teratas di peringkat terdahulu tetapi ia tidak berfungsi (melihat terlalu banyak bahagian yang kemas) jadi saya menolaknya apabila saya mengambil video ini. Saya fikir anda betul walaupun: di peringkat akhir ia akan kelihatan hebat! Sayangnya saya sudah memberikan naga jauh … Jadi pada projek seterusnya!

0

br1pro

4 tahun lalu

Sangat menyeronokkan! kerja keras menetapkan servos dan reka bentuk tangan. Terima kasih atas pengajaran ini!

1 jawapan 0

riachibr1pro

Balas 4 tahun yang lalu pada Pengenalan

Lelaki kerja yang hebat! sangat bagus :) mana-mana video?

0

clincoln

5 tahun lepas

Tonton video di atasnya terlebih dahulu kemudian ketawa awak

1 jawapan 0

TobiasVclincoln

Balas 4 tahun yang lalu pada Pengenalan

Saya tahu saya lakukan! : D

0

rileyw

5 tahun lepas

Super menyejukkan video menjadikannya kelihatan seperti ia mempunyai fikiran sendiri

0

Elitekilla117

5 tahun yang lalu di Pengenalan

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

2 balasan 0

riachiElitekilla117

Balas 5 tahun yang lalu pada Pengenalan

CINTA IT !!!! :)) lelaki yang sangat baik, sangat senang melihat bombbox anda hidup! Saya juga dramatisasi dan muzik: p tidak boleh berhenti sendiri untuk mencadangkan 3 modifikasi kecil jika saya boleh :)?
- ia akan menjadi baik untuk meletakkan mesin di kedudukan berdiri, saya tahu bahawa ini akan membuat kehilangan graviti untuk menutup pintu, tetapi penyelesaian yang mudah adalah untuk meletakkan 2 jalur getah yang dipasang di bahagian dalam pintu di satu sisi dan ke bahagian dalam kotak untuk hujung yang lain, ini akan menutup pintu apabila servo pintu ditutup … periksa langkah membina saya, anda akan melihat jalur getah di Langkah 6 …
- juga bagaimana dengan lukisan tangan dalam warna hitam, ia akan menjadi lebih licik dan licin
! Juga hujung tangan boleh dicat dalam darah berdarah atau dihiasi dengan wajah gila atau sesuatu seperti itu ..
- keluarkan langkah terakhir kerana tiada apa yang berlaku di dalamnya (sepatutnya menjadi yang bergerak kotak) dan tulis langkah anda sendiri …
Walau bagaimanapun, lupakan cadangan itu, saya sayangkan mesineee anda! Dan terima kasih atas begitu banyak orang terima kasih, tolong anda dapat mengurangkannya dan teruskan video yang difokuskan pada mesin :)
Harap gf anda suka!

0

Elitekilla117riachi

Balas 5 tahun yang lalu pada Pengenalan

Hahah Terima kasih atas pujian :) Saya sebenarnya mahu melakukan lebih banyak perkara itu tetapi kerana masalah masa saya tidak dapat memuat banyak maklumat yang saya mahu. Saya ingin menambah warna pada lengan tetapi tidak mempunyai masa untuk mereka. Dan saya ingin menarik muka di tangan dengan tajam tetapi sudah dibungkus dan bersedia untuk diberikan kepadanya untuk Krismas. Hehehe. Saya fikir dia akan menyukainya. Saya juga mahu memilikinya tapi takut band getah akan meletakkan berat badan terlalu banyak pada servos. Pintu itu sudah cukup berat. Pergerakan terakhir yang saya simpan kerana ia membuat anda terus menunggu untuk muncul. Hahaha tapi saya menghargai semua bantuan kawan saya! Pasti berbaloi!

0

chuckletushy

5 tahun lepas

Ini saya perlu buat … itu hebat

0

wrs715

5 tahun yang lalu di Pengenalan

Ini adalah projek pertama yang saya lihat menggunakan Arduino di mana saya fikir, "Ya, it's worth it. Sekarang saya perlu mendapatkannya." Kerja yang hebat!

0

siliconghost

5 tahun yang lalu di Pengenalan

Wow, hebat mengambil projek bersama! Cinta putaran anda menjadikannya lebih menarik!

0

bob3030

5 tahun lepas

Peranti yang tidak berguna seorang lelaki adalah satu lagi yang hebat, dari dunia ini, kita akan berfikir, bersenang-senang untuk dimiliki, didambakan oleh ramai, alat berguna. Terima kasih atas kemas kini anda ke projek ini. Terima kasih kerana menghantar mesej.

0

wobbler

5 tahun yang lalu di Pengenalan

Pemikiran 1: Menggunakan Arduino untuk ini hanya berlebihan yang tidak masuk akal
Pemikiran 2: Selepas menonton video-Menggunakan Arduino untuk ini hanya genius tulen!
Saya tunduk kepada kreativiti anda!

0

stumitch

5 tahun yang lalu di Pengenalan

Thats sangat hebat! Jenis mengingatkan saya tentang personaliti Wall-E. Terima kasih kerana projek yang hebat!

0

gazillabytes

5 tahun yang lalu di Pengenalan

Benar-benar tidak berguna! Nice 'ible. Saya diilhamkan dan perlu membina satu untuk meja saya. Terima kasih.