Membuat Detektor Gerakan & Gerak dengan Sensor PIR dan Arduino Nano
Komponen dan Perlengkapan
Berikut adalah komponen yang dibutuhkan untuk proyek ini:
Arduino Nano R3 – 1 unit
TPA81 Devantech 8 Pixel Thermal Array Sensor – 1 unit
ElectroPeak HC-SR505 Infrared PIR Motion Sensor – 8 unit
ElectroPeak 0.96inch SPI 128X64 OLED Display Module – 1 unit
Breadboard (umum) – 1 unit
Kabel Jumper Male/Female – 1 set
Aplikasi dan Layanan Online
Arduino IDE digunakan untuk menulis dan mengunggah kode ke papan Arduino.
Tentang Proyek Ini
Dalam artikel ini, kami akan menunjukkan cara membuat detektor gerakan menggunakan komponen sederhana seperti sensor PIR dan Arduino Nano. Setelah membaca artikel ini, Anda akan mampu:
Menguraikan aplikasi sensor PIR dan cara kerjanya
Menjalankan sensor PIR 8 piksel bernama TPA81
Menggunakan sensor PIR untuk mendeteksi gerakan serta gerakan tangan dengan Arduino
Membuat detektor canggih untuk menambah atau mengurangi volume speaker
Sensor Inframerah Pasir (PIR): Cara Kerjanya?
Sensor inframerah pasir (PIR sensor) adalah sensor elektronik yang mengukur cahaya inframerah (IR) yang memancarkan dari objek dalam bidang pandangnya. Sensor ini paling sering digunakan dalam detektor gerakan berbasis PIR. Semua objek dengan suhu di atas nol absolut memancarkan energi panas dalam bentuk radiasi. Biasanya radiasi ini tidak terlihat oleh mata manusia karena memancarkan pada panjang gelombang inframerah, namun dapat terdeteksi oleh perangkat elektronik yang dirancang untuk tujuan tersebut.
Istilah "pasir" (passive) dalam konteks ini merujuk pada fakta bahwa perangkat PIR tidak menghasilkan atau memancarkan energi untuk tujuan deteksi. Mereka bekerja sepenuhnya dengan mendeteksi radiasi inframerah yang dipancarkan atau dipantulkan oleh objek. Mereka tidak mendeteksi atau mengukur panas secara langsung. (Sumber: Wikipedia)
TPA81 adalah array termopil yang mendeteksi inframerah dalam rentang 2um-22um. Ini adalah panjang gelombang panas radiasi. Sensor piroelektrik yang umum digunakan dalam pencuri alarm dan untuk menyalakan lampu luar ruangan, mendeteksi inframerah dalam gelombang yang sama. Sensor piroelektrik ini hanya dapat mendeteksi perubahan tingkat panas – sehingga berfungsi sebagai detektor gerakan. Meskipun berguna dalam robotika, aplikasinya terbatas karena tidak dapat mendeteksi dan mengukur suhu sumber panas statis. Jenis sensor lain adalah array termopil. Digunakan dalam termometer inframerah non-kontak. Mereka memiliki sudut deteksi atau bidang pandang (FOV) yang sangat lebar sekitar 100° dan memerlukan pelindung atau lensa atau biasanya keduanya untuk mendapatkan FOV yang lebih berguna sekitar 12°. Beberapa sudah dilengkapi lensa bawaan. Baru-baru ini, sensor dengan array termopil, elektronika bawaan, dan lensa silikon telah tersedia. Ini adalah jenis yang digunakan dalam TPA81. TPA81 memiliki array delapan termopil yang disusun dalam baris. TPA81 dapat mengukur suhu 8 titik berseberangan secara bersamaan. TPA81 juga dapat mengontrol servo untuk memutar modul dan membangun citra termal. TPA81 dapat mendeteksi nyala lilin pada jarak 2 meter (6 kaki) dan tidak terpengaruh oleh cahaya sekitar!
Sensor PIR mirip dengan kamera yang hanya bisa melihat hal-hal hangat. Jadi TPA81 adalah kamera termal dengan resolusi 8 piksel, dan tentu saja tubuh manusia selalu memancarkan panas. Sekarang, jika kita mengontrol sensor PIR dengan pengontrol dan menentukan beberapa gerakan untuk sensor PIR, kita dapat membuat detektor gerakan sederhana.
Dalam proyek ini, kami memutuskan untuk membuat sistem detektor gerakan menggunakan PIR dan Arduino. Kami menggunakan TPA81 sebagai PIR, tetapi agak mahal, jadi jika Anda ingin menghemat uang, Anda dapat menggunakan 8 sensor PIR sederhana tanpa kepala putih (bagian fokus). TPA81 mendukung protokol I2C dan kompatibel dengan Arduino Nano. Proyek keren ini membantu Anda mempelajari dasar-dasar pemrosesan citra dan deteksi gerakan. Yuk, kita mulai!
Rangkaian
Jika Anda ingin menggunakan 8 sensor PIR alih-alih TPA81, Anda harus menghubungkan 8 sensor PIR tunggal ke papan Arduino dan membacanya satu per satu. Dengan cara ini Anda dapat menghemat beberapa uang!
Kode
Untuk rangkaian pertama (Menggunakan TPA81), Anda harus menyalin kode ke Arduino IDE. Namun terlebih dahulu Anda harus menambahkan perpustakaan lalu mengunggah kode. Unduh perpustakaan TPA81 dari tautan berikut. Jika ini pertama kali Anda menjalankan papan Arduino, jangan khawatir. Cukup ikuti langkah-langkah berikut:
Kunjungi www.arduino.cc/en/Main/Software dan unduh perangkat lunak untuk OS Anda. Instal perangkat lunak IDE sesuai petunjuk.
Jalankan Arduino IDE, hapus teks editor, dan salin kode berikut ke dalam teks editor.
Buka sketch dan sertakan perpustakaan (Unduh perpustakaan dari tautan berikut). Klik tambahkan perpustakaan ZIP dan tambahkan perpustakaan.
Pilih papan di alat dan papan, pilih Arduino Nano.
Hubungkan Arduino ke PC Anda dan atur port COM di alat dan port.
Tekan tombol Unggah (tanda panah).
Anda siap!
#include "Wire.h"
#include "TPA81.h"
// Buat instance TPA81 baru
TPA81 tpa;
void setup() {
Serial.begin(9600);
// Anda perlu memulai perpustakaan Wire untuk menggunakan perpustakaan TPA81
Wire.begin();
}
void loop() {
// Cetak suhu lingkungan
Serial.print(tpa.getAmbient());
Serial.print(" ");
// Cetak semua titik suhu
for (int i = 1; i <= 8; i++) {
Serial.print(tpa.getPoint(i));
Serial.print(" ");
}
Serial.println(" ");
delay(100);
}
Setelah menjalankan kode ini, buka Terminal Serial di Arduino IDE dan lihat suhu array 8 yang dirasakan oleh TPA81. Angka pertama pada setiap baris adalah suhu total. Sekarang taruh tangan Anda di depan sensor dan lihat suhu tubuh Anda. Untuk mendefinisikan gerakan dengan tangan, Anda harus mengetahui suhu tangan Anda dan mengaturnya sebagai offset. Kami mengatur ke 29 derajat. Unggah kode berikut untuk melihat gerakan tangan Anda di depan TPA81.
#include "Wire.h"
#include "TPA81.h"
// Buat instance TPA81 baru
TPA81 tpa;
void setup() {
Serial.begin(9600);
// Anda perlu memulai perpustakaan Wire untuk menggunakan perpustakaan TPA81
Wire.begin();
}
void loop() {
// Cetak suhu lingkungan
Serial.print(tpa.getAmbient());
Serial.print(" ");
// Cetak semua titik suhu
for (int i = 1; i <= 8; i++) {
if (tpa.getPoint(i)>29) Serial.print("# ");
else Serial.print(". ");
}
Serial.println(" ");
delay(100);
}
Kami menulis algoritma untuk mendeteksi gerakan sederhana seperti meningkatkan atau menurunkan volume pemutar suara. Anda dapat menyalin kode berikut dan mencobanya.
#include "Wire.h"
#include "TPA81.h"
#include "ssd1306.h"
#include "DHT.h"
// Buat instance TPA81 baru
TPA81 tpa;
#define VCCSTATE SSD1306_SWITCHCAPVCC
#define WIDTH 128
#define HEIGHT 64
#define PAGES 8
#define OLED_RST 9
#define OLED_DC 8
#define OLED_CS 10
#define SPI_MOSI 11 /* hubungkan ke pin DIN OLED */
#define SPI_SCK 13
uint8_t oled_buf[WIDTH * HEIGHT / 8];
int gesture[8][20];
int tgesture[8];
int sum=0;
int sflag; // bendera standby
int gcount;
int c;
int ex;
int vol=5;
// ... (kode gambar dan fungsi tampilan OLED tetap sama) ...
Apa Selanjutnya?
Dengan metode di atas, Anda dapat memperluas kode untuk mendeteksi gerakan lain seperti mengetuk, menarik, melepaskan, meregang, dan lain-lain. Kemudian tentukan perintah untuk melakukan tugas tertentu saat setiap gerakan dan gerak terdeteksi.