Iklan
Deteksi gerakan, lalu menakuti si penyusup dengan bunyi alarm bernada tinggi dan lampu berkedip. Apakah itu terdengar menyenangkan? Tentu saja. Itulah tujuan proyek Arduino hari ini, cocok untuk pemula. Kami akan menulis sepenuhnya dari awal dan pengujian sambil berjalan sehingga Anda mudah-mudahan bisa mendapatkan ide tentang bagaimana semua itu dilakukan daripada hanya menginstal sesuatu yang sudah saya buat.
Penafian: ini tidak akan benar-benar melindungi rumah Anda. Itu mungkin membuat kakakmu kaget ketika dia menyelinap ke kamarmu.
Kamu akan membutuhkan:
- Arduino
- Sensor "ping" ultrasonik, saya gunakan HC-SR04 PIR akan lebih baik, tetapi itu mahal. Sensor ping dapat ditempatkan diam-diam di ambang pintu dan masih melayani pekerjaan dasar yang sama, dan hanya $ 5
- Bel piezo
- Lampu strip LED, dengan kabel yang sama yang kami gunakan kembali dalam proyek ini Bangun Pencahayaan Ambient Dinamis Anda Sendiri Untuk Pusat MediaJika Anda menonton banyak film di PC atau pusat media, saya yakin Anda telah menghadapi dilema pencahayaan; apakah Anda benar-benar mematikan semua lampu? Apakah Anda menyimpannya dalam ledakan penuh? Atau... Baca lebih banyak .
Saat Anda memulai proyek ini, jangan hapus semuanya setiap kali - teruslah membangun di blok terakhir. Pada saat Anda masuk ke bagian "Coding The Alarm System", Anda harus memiliki semua bagian yang terkoneksi, terlihat seperti ini:
Lampu Berkedip
Gunakan diagram pengkabelan dari proyek ini Bangun Pencahayaan Ambient Dinamis Anda Sendiri Untuk Pusat MediaJika Anda menonton banyak film di PC atau pusat media, saya yakin Anda telah menghadapi dilema pencahayaan; apakah Anda benar-benar mematikan semua lampu? Apakah Anda menyimpannya dalam ledakan penuh? Atau... Baca lebih banyak untuk menghubungkan strip LED Anda; jangan mengubah pin, karena kami membutuhkan output PWM. Menggunakan kode ini untuk dengan cepat menguji kabel Anda. Jika semuanya berjalan dengan baik, Anda harus memiliki ini:
Sensor Jarak
Pada modul SR04, Anda akan menemukan 4 pin. VCC dan GND pergi ke + 5V rail dan ground masing-masing; TRIGONOMETRI adalah pin yang digunakan untuk mengirim sinyal sonar, letakkan ini di pin 6; GEMA digunakan untuk membaca kembali sinyal (dan karena itu menghitung jarak) - letakkan ini pada 7.
Untuk membuat semuanya menjadi sangat sederhana, ada perpustakaan yang bisa kita gunakan untuk menelepon NewPing. Unduh dan letakkan di Arduino Anda Perpustakaan folder dan restart IDE sebelum melanjutkan. Tes menggunakan kode ini; buka monitor serial dan pastikan kecepatannya diatur ke 115200 baud. Dengan sedikit keberuntungan, Anda akan melihat beberapa pengukuran jarak dikirim kembali kepada Anda dengan kecepatan yang cukup tinggi. Anda mungkin menemukan varian 1 atau 2 sentimeter, tetapi ini bagus. Coba jalankan tangan Anda di depan sensor, gerakkan ke atas dan ke bawah untuk mengamati bacaan yang berubah.
Kode harus cukup sederhana untuk dipahami. Ada beberapa deklarasi pin yang relevan di awal, termasuk jarak maksimum - ini dapat bervariasi sesuai dengan sensor persis yang Anda miliki, tetapi selama Anda bisa mendapatkan pembacaan kurang dari 1 meter secara akurat, Anda seharusnya baik.
Dalam loop aplikasi pengujian ini, kami menggunakan ping () berfungsi untuk mengirim ping sonar, mendapatkan kembali nilai dalam milidetik dari berapa lama nilai tersebut dikembalikan. Untuk memahami hal ini, kami menggunakan pustaka NewPing yang dibangun secara konstan US_ROUNDTRIP_CM, yang menentukan berapa banyak mikrodetik yang diperlukan untuk mencapai satu sentimeter tunggal. Ada juga penundaan 50 ms antara ping untuk menghindari kelebihan sensor.
Alarm Piezo
Sensor kristal Piezo adalah buzzer yang sederhana dan murah, dan kita dapat menggunakan pin PWM 3 untuk membuat nada yang berbeda. Hubungkan satu kabel ke pin 3, satu ke ground rail - tidak masalah yang mana.
Menggunakan kode ini untuk mengetes.
Satu-satunya cara untuk mematikan alarm yang agak menjengkelkan dan keras adalah dengan menarik sumbatnya. Kode ini sedikit rumit untuk dijelaskan, tetapi melibatkan penggunaan gelombang sinus untuk menghasilkan suara yang khas. Tweak angka untuk bermain dengan nada yang berbeda.
Coding Sistem Alarm
Sekarang kita memiliki semua bagian dari teka-teki ini, mari kita gabungkan semuanya.
Silakan membuat sketsa baru, yang disebut Alarm. Mulailah dengan menggabungkan semua variabel dan sematkan definisi yang kami miliki dalam contoh pengujian hingga sekarang.
#termasuk // Pilih pin berkemampuan PWM mana yang akan digunakan. #define RED_PIN 10. #define GREEN_PIN 11. #define BLUE_PIN 9 #define TRIGGER_PIN 6 // pin Arduino diikat untuk memicu pin pada sensor ultrasonik. #define ECHO_PIN 7 // Pin Arduino diikat ke pin gema pada sensor ultrasonik. #define MAX_DISTANCE 100 // Jarak maksimum yang ingin kita ping (dalam sentimeter). #define ALARM 3 float sinVal; int toneVal;
Mulailah dengan menulis dasar mempersiapkan() berfungsi - kami hanya akan berurusan dengan lampu untuk saat ini. Saya telah menambahkan penundaan 5 detik sebelum loop utama mulai memberi kami waktu untuk keluar dari jalan jika diperlukan.
void setup () {// atur pinModes untuk RGB strip pinMode (RED_PIN, OUTPUT); pinMode (BLUE_PIN, OUTPUT); pinMode (GREEN_PIN, OUTPUT); // atur ulang lampu analogWrite (RED_PIN, 0); analogWrite (BLUE_PIN, 0); analogWrite (RED_PIN, 0); keterlambatan (5000); }
Mari kita gunakan fungsi pembantu yang memungkinkan kita untuk dengan cepat menulis nilai RGB tunggal ke lampu.
// fungsi helper memungkinkan kita untuk mengirim warna dalam satu perintah. warna batal (merah char unsigned, unsigned char green, unsigned char blue) // fungsi penghasil warna. {analogWrite (RED_PIN, red); analogWrite (BLUE_PIN, biru); analogWrite (GREEN_PIN, hijau); }
Akhirnya, loop kami untuk saat ini akan terdiri dari flash warna sederhana antara merah dan kuning (atau, apa pun yang Anda inginkan, ubah saja nilai RGB).
void loop () {color (255,0,0); // penundaan merah (100); warna (255.255,0); // penundaan kuning (100); }
Unggah dan uji itu untuk memastikan Anda berada di jalur yang benar.
Sekarang, mari kita mengintegrasikan sensor jarak untuk memicu lampu-lampu itu hanya ketika sesuatu masuk ke dalam, katakanlah, 50 cm (hanya kurang dari lebar kusen pintu). Kami telah menetapkan pin yang tepat dan mengimpor perpustakaan, jadi sebelum Anda mempersiapkan() fungsi tambahkan baris berikut untuk membuat instance:
Sonar NewPing (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Pengaturan pin baru dan jarak maksimum.
Di bawahnya, tambahkan variabel untuk menyimpan status alarm yang dipicu atau tidak, default ke false, tentu saja.
boolean triggered = false;
Tambahkan baris ke mempersiapkan() berfungsi sehingga kami dapat memantau output pada serial dan debug.
Serial.begin (115200); // Buka monitor serial pada 115200 baud untuk melihat hasil ping.
Selanjutnya, mari ganti nama loop saat ini menjadi alarm() - ini adalah apa yang akan dipanggil jika alarm telah trip.
batal alarm () {warna (255,0,0); // penundaan merah (100); warna (255.255,0); // keterlambatan kuning (100); }
Sekarang buat yang baru loop () fungsi, di mana kita mengambil ping baru, membaca hasilnya, dan memicu alarm jika ada sesuatu yang terdeteksi dalam rentang meteran.
void loop () {if (triggered == true) {alarm (); } else {delay (50); // Tunggu 50 ms antara ping (sekitar 20 ping / detik). 29ms harus menjadi penundaan terpendek antara ping. unsigned int uS = sonar.ping (); // Kirim ping, dapatkan waktu ping dalam mikrodetik (aS). jarak int unsigned = uS / US_ROUNDTRIP_CM; Serial.println (jarak); if (distance <100) {triggered = true; } } }
Biarkan saya jelaskan kode:
- Mulailah dengan memeriksa untuk melihat apakah alarm telah dipicu, dan jika demikian, matikan fungsi alarm (hanya dengan menyalakan lampu saat ini).
- Jika belum dipicu, dapatkan bacaan saat ini dari sensor.
- Jika sensor membaca <100 cm, sesuatu telah melapisi berkasnya (sesuaikan nilainya jika ini memicu terlalu dini untuk Anda, tentu saja).
Cobalah sekarang, sebelum kita menambahkan buzzer piezo yang mengganggu.
Kerja? Bagus. Sekarang mari kita tambahkan bel itu kembali. Menambahkan pinMode ke mempersiapkan() rutin.
pinMode (ALARM, OUTPUT);
Kemudian tambahkan loop buzzer piezo ke fungsi alarm ():
untuk (int x = 0; x <180; x ++) {// ubah derajat menjadi radian kemudian dapatkan nilai dosa sinVal = (sin (x * (3.1412 / 180)))); // hasilkan frekuensi dari nilai dosa toneVal = 2000+ (int (sinVal * 1000)); nada (ALARM, nadaVal); }
Jika Anda mencoba mengompilasi pada titik ini, Anda akan mengalami kesalahan - Saya sengaja membiarkannya sehingga Anda dapat melihat beberapa masalah umum. Dalam hal ini, baik Pustaka Baru dan pustaka nada standar menggunakan interupsi yang sama - keduanya pada dasarnya saling bertentangan, dan tidak banyak yang dapat Anda lakukan untuk memperbaikinya. Oh sayang.
Tapi jangan khawatir. Ini masalah umum, dan seseorang sudah memiliki solusinya - unduh dan tambahkan ini NewTone ke folder Arduino Libraries Anda. Sesuaikan awal program Anda untuk memasukkan ini:
#termasuk
Dan sesuaikan garis:
nada (ALARM, nadaVal);
untuk
NewTone (ALARM, toneVal);
sebagai gantinya.
Itu dia. Atur alarm Anda di pintu kamar Anda untuk pencuri malang berikutnya.
Atau, seekor anjing tolol, yang tampaknya sama sekali tidak terpengaruh oleh alarm.
Mengalami masalah dengan kode? Ini dia aplikasi lengkap. Jika Anda mendapatkan kesalahan acak, coba tempel di bawah ini dan saya akan melihat apakah saya dapat membantu.
Kredit gambar: Alarm kebakaran melalui Flickr
James memiliki gelar BSc dalam Artificial Intelligence, dan bersertifikat CompTIA A + dan Network +. Dia adalah pengembang utama MakeUseOf, dan menghabiskan waktu luangnya bermain VR paintball dan boardgames. Dia telah membangun PC sejak dia masih kecil.