- Komponen Diperlukan
- APDS9960 RGB & Sensor Gerakan
- Diagram Sirkuit
- Penjelasan Kode
- Menguji Pengangkatan Tanpa Sentuhan yang Dikendalikan Gerakan
Saat pandemi Corona kali ini, elevator telah menjadi tempat berisiko tinggi di mana semua orang menyentuh tombol yang sama. Di banyak tempat, orang telah menemukan trik untuk mencegah kontak dengan tombol elevator seperti menggunakan kertas pompa, tusuk gigi, atau tisu sanitasi untuk menekan tombol lift.
Jadi, sebagai kelanjutan dari proyek keamanan Corona kami sebelumnya seperti mesin pembersih otomatis, pemantauan suhu tanpa kontak, dan detektor jarak sosial, di sini kita akan membangun prototipe Elevator yang dikontrol gerakan menggunakan Arduino Nano.
Ini Elevator Contactless menggunakan Arduino Nano, sebuah APDS9960 Gesture Sensor, dan modul display OLED. Dengan panel kontrol berbasis gerakan ini, Anda dapat dengan mudah mengontrol Pengangkatan dengan membuat gerakan tangan. Sensor APDS9960 digunakan untuk membaca gerakan. Gestur KE ATAS dan TURUN digunakan untuk mengatur nomor lantai, gestur kiri menutup pintu lift dan memindahkan lift sesuai dengan nomor lantai dan gestur Kanan digunakan untuk membuka pintu.
Komponen Diperlukan
- Arduino Nano
- Modul Layar OLED
- APDS9960 RGB & Sensor Gerakan
- Papan tempat memotong roti
- Kabel Jumper
APDS9960 RGB & Sensor Gerakan
APDS9960 RGB & Gesture Detection Module adalah papan breakout kecil yang dilengkapi dengan sensor APDS-9960 built-in, filter pemblokiran UV dan IR, empat dioda terpisah yang peka terhadap arah yang berbeda, dan antarmuka yang kompatibel dengan I2C. Sensor ini dapat digunakan untuk pengukuran cahaya dan warna sekitar, deteksi jarak, dan penginderaan gerakan tanpa sentuhan. Ini memiliki jangkauan deteksi gerakan 10 hingga 20 cm dan dapat digunakan untuk mengontrol mikrokontroler, robot, dan di banyak proyek lainnya.
Fitur:
- Tegangan Operasional: 2.4V hingga 3.6V
- Rentang Operasi: 4-8in (10-20cm).
- Antarmuka I2C (Alamat I2C: 0x39).
- Cahaya Sekitar dan RGB Color Sensing, Proximity
- Penginderaan, dan Deteksi Gerakan dalam Modul Optik
- Antarmuka Kompatibel Mode Cepat I2C-bus dengan Kecepatan Data hingga 400 kHz.
Diagram Sirkuit
Diagram Sirkuit untuk Lift Tanpa Kontak menggunakan APDS9960 diberikan di bawah ini.
Kami menghubungkan Arduino Nano dengan Sensor APDS9960 dan Layar OLED. Pin VCC dan GND dari Sensor APDS9960 dan Layar OLED terhubung ke 3.3V dan GND Arduino. Sementara pin SCL dan SDA Sensor APDS9960 dan Layar OLED terhubung ke pin A5 dan A4 Arduino Masing-masing.
OLED & APDS9960 Pin |
Pin Arduino Nano |
VCC |
3.3v |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Beginilah pengaturan lengkap untuk Elevator yang dikontrol Gerakan menggunakan Arduino akan terlihat:
Untuk mempelajari lebih lanjut tentang layar OLED dan interfacingnya dengan mikrokontroler lain, ikuti tautannya.
Penjelasan Kode
Kode lengkap untuk Lift Tanpa Kontak yang menggunakan APDS9960 diberikan di akhir halaman. Di sini kami menjelaskan beberapa bagian penting dari kode. Dalam program ini, kami akan menggunakan pustaka APDS9960 dan Adafruit_SH1106 . Perpustakaan APDS9960 dapat diunduh dari Arduino IDE. Untuk mengunduh perpustakaan, buka Sketch> Manajer Perpustakaan> Cari dan kemudian masukkan Arduino APDS9960. Sedangkan perpustakaan Adafruit_SH1106 dapat diunduh dari sini.
Jadi seperti biasa, mulailah kode dengan memasukkan semua pustaka yang diperlukan. Adafruit_SH1106.h adalah versi modifikasi dari pustaka Adafruit asli.
#include
Di baris berikutnya, tentukan variabel untuk menyimpan lantai saat ini dan nomor lantai tempat pengguna ingin pergi.
int floornum = 0; int currentfloor = 0;
Setelah itu, masukkan bitmap untuk gambar Panah Atas, Panah Bawah, Pintu Terbuka, dan Pintu Tutup. Kode HEX untuk gambar dapat dibuat dengan menggunakan konverter seperti Image2cpp. Untuk mempelajari lebih lanjut tentang cara menggunakan Image2cpp, ikuti tutorial generator kode QR Arduino ini.
const unsigned char up PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ……………………………………… ………………………………………………………..}; const unsigned char down PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ………………………………… ………………………………………………………..}; const unsigned char dooropen PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xe0,, ……………………… …………………………………………………………..};
Dalam fungsi setup () , inisialisasi Monitor Serial pada baud rate 9600 untuk keperluan debugging. Kemudian pada baris selanjutnya inisialisasi tampilan OLED dan sensor APDS9960 dengan metode begin () sebagai berikut:
Serial.begin (9600); if (! APDS.begin ()) {Serial.println ("Kesalahan menginisialisasi sensor APDS9960!"); } Serial.println ("Mendeteksi gerakan…"); display.begin (SH1106_SWITCHCAPVCC, 0x3C);
Setelah menginisialisasi tampilan dan sensor, kosongkan buffer tampilan dengan metode clearDisplay () dan setel ukuran font dan warna menggunakan metode display.setTextSize () dan display.setTextColor () .
display.setTextSize (2); display.setTextColor (WHITE); display.clearDisplay (); display.display ();
Di dalam void loop () , selalu periksa apakah ada isyarat yang dibuat. Jika ya, baca nilai gerakan dan periksa gerakan mana itu (ATAS, BAWAH, KANAN, KIRI) dan mencetak bacaan yang sesuai pada monitor serial. Gestur KE ATAS dan KE BAWAH digunakan untuk menyetel nomor lantai tempat pengguna ingin pergi. Isyarat kiri adalah menutup pintu lift dan memindahkan lift sesuai dengan nomor lantai sedangkan isyarat Kanan digunakan untuk membuka pintu.
jika (APDS.gestureAvailable ()) {int gesture = APDS.readGesture (); switch (isyarat) {case GESTURE_UP: Serial.println ("Isyarat KE ATAS"); display.clearDisplay (); floornum ++; home1 (); istirahat; case GESTURE_DOWN: Serial.println ("Gerakan BAWAH Terdeteksi"); display.clearDisplay (); floornum -; home1 (); istirahat; case GESTURE_LEFT: Serial.println ("Gerakan KIRI Terdeteksi"); display.clearDisplay (); Mulailah(); istirahat; case GESTURE_RIGHT: Serial.println ("Gerakan KANAN Terdeteksi"); display.clearDisplay (); home1 (); istirahat; default: istirahat; }
Fungsi home1 () digunakan untuk menggambar tampilan rumah untuk elevator. Ini terdiri dari panah Atas, panah bawah, Pintu Terbuka, tanda Tutup Pintu, dan nomor lantai saat ini. Fungsi drawBitmap () digunakan untuk menggambar gambar pada tampilan OLED. Sintaks untuk fungsi drawBitmap () diberikan di bawah ini:
drawBitmap (int16_t x, int16_t y, bitmap, int16_t w, int16_t h, color);
Dimana:
int16_t x, int16_t y adalah koordinat X dan Y dari layar OLED
bitmap adalah nama bitmap
int16_t w, int16_t h adalah tinggi dan berat gambar.
void home1 () {display.setCursor (101,23); display.println (floornum); display.drawBitmap (23, 0, uparrow, 40, 18, WHITE); display.drawBitmap (26, 46, downarrow, 40, 18, WHITE); display.drawBitmap (0, 15, dooropen, 29, 30, WHITE); display.drawBitmap (60, 15, closedoor, 29, 30, WHITE); display.display (); }
Fungsi start () digunakan untuk menggerakkan lift ke atas atau ke bawah. Untuk itu, nomor lantai saat ini dibandingkan dengan nomor lantai tempat pengguna ingin pergi. Jika nomor lantai lebih besar dari lantai saat ini no. maka lift akan bergerak ke atas dan jika nomor lantai lebih kecil dari lantai no. maka lift akan bergerak ke bawah. Lift akan berhenti baik saat lantai no. dan lantai no. adalah sama.
void start () {while (floornum> currentfloor) {Serial.println ("naik"); currentfloor ++; display.drawBitmap (0, 0, up, 100, 64, WHITE); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); penundaan (2000); } while (floornum <currentfloor) {Serial.println ("going Down"); currentfloor--; display.drawBitmap (0, 0, down, 100, 64, WHITE); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); penundaan (2000); } jika (floornum == currentfloor) {Serial.println ("Mencapai"); display.clearDisplay (); home1 (); Serial.print (lantai saat ini); }}
Menguji Pengangkatan Tanpa Sentuhan yang Dikendalikan Gerakan
Setelah perangkat keras dan kode siap, hubungkan Arduino Nano ke laptop dan unggah kode lengkap yang diberikan di bawah ini. Seperti yang Anda lihat secara default, OLED akan menampilkan UI Elevator.
Sekarang lambaikan tangan Anda ke atas atau ke bawah, seperti yang ditunjukkan pada video di bawah ini, untuk mengatur lantai tempat Anda ingin pergi. Kemudian buat gerakan kiri untuk mengakui lift untuk pergi ke lantai itu. Jika Anda ingin menghentikan lift, lakukan gerakan yang benar dengan tangan Anda.
Video dan kode kerja lengkap untuk proyek ini diberikan di bawah ini. Semoga Anda menikmati membangun proyek ini. Jika Anda memiliki pertanyaan tentang proyek ini, silakan tinggalkan di bagian komentar.