- Komponen Diperlukan
- APDS9960 RGB & Sensor Gerakan
- Rajah Litar
- Penjelasan Kod
- Menguji Angkat Tanpa Sentuhan yang Dikawal Gerakan
Pada masa pandemi Corona ini, lif telah menjadi tempat berisiko tinggi di mana semua orang menyentuh butang yang sama. Di banyak tempat, orang telah menemui helah untuk mencegah kontak dengan butang lif seperti menggunakan kertas pam, tusuk gigi, atau tisu kebersihan untuk menekan butang angkat.
Oleh itu, sebagai penerusan projek keselamatan Corona kami sebelumnya seperti mesin pembersih automatik, pemantauan suhu tanpa sentuh, dan pengesan jarak Sosial, di sini kita akan membina prototaip Elevator terkawal Gesture menggunakan Arduino Nano.
Ini Contactless Elevator menggunakan Arduino Nano, yang Gesture Sensor APDS9960, dan modul paparan OLED. Dengan panel kawalan berasaskan isyarat ini, anda dapat mengawal Lift anda dengan mudah dengan membuat gerakan tangan. Sensor APDS9960 digunakan untuk membaca gerak isyarat. Gerak ke atas dan ke bawah digunakan untuk menetapkan nombor lantai, isyarat kiri adalah untuk menutup pintu lif dan menggerakkan lif mengikut nombor lantai dan isyarat Kanan digunakan untuk membuka pintu.
Komponen Diperlukan
- Arduino Nano
- Modul Paparan OLED
- APDS9960 RGB & Sensor Gerakan
- Papan roti
- Wayar Pelompat
APDS9960 RGB & Sensor Gerakan
Modul Pengesanan RGB & Gesture APDS9960 adalah papan pelarian kecil yang dilengkapi dengan sensor APDS-9960 terbina dalam, penapis penyekat UV dan IR, empat dioda terpisah yang sensitif terhadap arah yang berbeza, dan antara muka yang serasi dengan I2C. Sensor ini dapat digunakan untuk pengukuran cahaya dan warna ambien, pengesanan jarak, dan penginderaan isyarat tanpa sentuhan. Ini memiliki jarak pengesanan gerakan antara 10 hingga 20 cm dan dapat digunakan untuk mengendalikan mikrokontroler, robot, dan dalam banyak proyek lain.
Ciri-ciri:
- Voltan Operasi: 2.4V hingga 3.6V
- Julat operasi: 4-8in (10-20cm).
- Antaramuka I2C (Alamat I2C: 0x39).
- Cahaya Ambient dan RGB Color Sensing, Proximity
- Sensing, dan Gesture Detection dalam Modul Optik
- Antaramuka Kompatibel Mod Cepat I2C-bus dengan Kadar Data hingga 400 kHz.
Rajah Litar
Diagram Litar untuk Lif Tanpa Kontak menggunakan APDS9960 diberikan di bawah.
Kami menghubungkan Arduino Nano dengan Sensor APDS9960 dan Paparan OLED. Pin VCC dan GND kedua-dua Sensor APDS9960 dan Paparan OLED disambungkan ke 3.3V dan GND Arduino. Sementara pin SCL dan SDA APDS9960 Sensor dan OLED Display disambungkan ke pin A5 dan A4 dari Arduino.
Pin OLED & APDS9960 |
Pin Arduino Nano |
VCC |
3.3v |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Beginilah rupa penyediaan lengkap untuk Gesture Elevator yang menggunakan Arduino:
Untuk mengetahui lebih lanjut mengenai paparan OLED dan hubungannya dengan pengawal mikro lain, ikuti pautan tersebut.
Penjelasan Kod
Kod lengkap untuk Lifless Contactless menggunakan APDS9960 diberikan pada akhir halaman. Di sini kami menerangkan beberapa bahagian penting kod. Dalam program ini, kita akan menggunakan perpustakaan APDS9960 dan Adafruit_SH1106 . Perpustakaan APDS9960 boleh dimuat turun dari Arduino IDE. Untuk memuat turun perpustakaan, pergi ke Sketsa> Library Manager> Search dan kemudian masukkan untuk Arduino APDS9960. Sementara perpustakaan Adafruit_SH1106 boleh dimuat turun dari sini.
Jadi seperti biasa mulakan kod dengan memasukkan semua perpustakaan yang diperlukan. Adafruit_SH1106.h adalah versi pustaka Adafruit yang diubah suai.
#sertakan
Pada baris seterusnya, tentukan pemboleh ubah untuk menyimpan nombor lantai dan tingkat semasa di mana pengguna ingin pergi.
int floornum = 0; int currentfloor = 0;
Selepas itu, masukkan bitmap untuk gambar UP Arrow, Down Arrow, Open Door, dan Close Door. Kod HEX untuk gambar boleh dihasilkan dengan menggunakan penukar seperti Image2cpp. Untuk mengetahui lebih lanjut mengenai cara menggunakan Image2cpp, ikuti tutorial penjana kod Arduino QR ini.
PROGMEM tidak ditandatangani const = 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 () , mulakan Monitor Serial pada kadar baud 9600 untuk tujuan penyahpepijatan. Kemudian pada baris seterusnya, mulailah paparan OLED dan sensor APDS9960 dengan kaedah begin () seperti berikut:
Serial.begin (9600); if (! APDS.begin ()) {Serial.println ("Ralat semasa memulakan sensor APDS9960!"); } Serial.println ("Mengesan gerak isyarat…"); display.begin (SH1106_SWITCHCAPVCC, 0x3C);
Selepas memulakan penjana paparan dan sensor, membersihkan penampan paparan dengan clearDisplay () kaedah dan menetapkan saiz fon dan warna menggunakan display.setTextSize () dan display.setTextColor () kaedah.
display.setTextSize (2); display.setTextColor (PUTIH); display.clearDisplay (); paparan.display ();
Di dalam gelung kekosongan () , sentiasa periksa apakah ada isyarat yang dibuat. Jika ya, baca nilai isyarat dan periksa gerak isyaratnya (ATAS, BAWAH, KANAN, KIRI) dan cetak bacaan yang sesuai pada monitor bersiri. Gerak isyarat ATAS dan BAWAH digunakan untuk menetapkan nombor lantai di mana pengguna ingin pergi. Gerakan kiri adalah untuk menutup pintu lif dan menggerakkan lif mengikut nombor lantai sementara isyarat Kanan digunakan untuk membuka pintu.
jika (APDS.gestureAvailable ()) {int gesture = APDS.readGesture (); tukar (gerak isyarat) {case GESTURE_UP: Serial.println ("Isyarat yang Diketahui"); display.clearDisplay (); floornum ++; rumah1 (); rehat; kes GESTURE_DOWN: Serial.println ("Isyarat DOWN Dikesan"); display.clearDisplay (); floornum -; rumah1 (); rehat; kes GESTURE_LEFT: Serial.println ("Isyarat KIRI yang dikesan"); display.clearDisplay (); mulakan (); rehat; kes GESTURE_RIGHT: Serial.println ("Isyarat Kanan Dikesan"); display.clearDisplay (); rumah1 (); rehat; lalai: rehat; }
Fungsi home1 () digunakan untuk melukis paparan rumah untuk lif. Ini terdiri daripada anak panah atas, panah bawah, pintu terbuka, tanda pintu tutup, dan nombor lantai semasa. Fungsi drawBitmap () digunakan untuk melukis gambar pada paparan OLED. Fungsi sintaks untuk drawBitmap () diberikan di bawah:
drawBitmap (int16_t x, int16_t y, bitmap, int16_t w, int16_t h, warna);
Di mana:
int16_t x, int16_t y adalah koordinat X dan Y paparan OLED
bitmap adalah nama bitmap
int16_t w, int16_t h adalah tinggi dan berat gambar.
batal rumah1 () {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, pintu, 29, 30, PUTIH); display.drawBitmap (60, 15, tertutup, 29, 30, PUTIH); paparan.display (); }
Fungsi start () digunakan untuk menggerakkan lift ke atas atau ke bawah. Untuk itu, tingkat bawah sekarang dibandingkan dengan nombor lantai di mana pengguna mahu pergi. Sekiranya nombor lantai lebih besar daripada lantai no. maka lif akan bergerak ke atas dan jika bilangan lantai lebih rendah daripada lantai no. maka lif akan bergerak ke bawah. Lif akan berhenti apabila kedua-dua lantai semasa dan tingkat no. sama.
batal mula () {while (floornum> currentfloor) {Serial.println ("going UP"); lantai semasa ++; display.drawBitmap (0, 0, ke atas, 100, 64, PUTIH); display.setCursor (101,23); display.println (currentfloor); paparan.display (); display.clearDisplay (); kelewatan (2000); } sementara (floornum <currentfloor) {Serial.println ("turun"); lantai semasa--; display.drawBitmap (0, 0, bawah, 100, 64, PUTIH); display.setCursor (101,23); display.println (currentfloor); paparan.display (); display.clearDisplay (); kelewatan (2000); } if (floornum == currentfloor) {Serial.println ("Dicapai"); display.clearDisplay (); rumah1 (); Serial.print (currentfloor); }}
Menguji Angkat Tanpa Sentuhan yang Dikawal Gerakan
Setelah perkakasan dan kod siap, sambungkan Arduino Nano ke komputer riba dan muat naik kod lengkap yang diberikan di bawah. Seperti yang anda lihat secara lalai OLED akan memaparkan Elevator UI.
Sekarang angkat tangan ke atas atau ke bawah, seperti yang ditunjukkan dalam video di bawah ini, untuk meletakkan lantai di mana anda mahu pergi. Kemudian buat isyarat kiri kerana mengakui lif untuk menuju ke tingkat itu. Sekiranya anda mahu menghentikan lif, kemudian buat gerakan yang betul dengan tangan anda.
Video dan kod kerja lengkap untuk projek ini diberikan di bawah. Semoga anda seronok membina projek ini. Sekiranya anda mempunyai pertanyaan mengenai projek ini, sila tinggalkan di bahagian komen.