- Thành phần bắt buộc
- APDS9960 RGB & Cảm biến cử chỉ
- Sơ đồ mạch
- Giải thích mã
- Thử nghiệm thang máy không chạm điều khiển bằng cử chỉ
Trong thời đại đại dịch Corona này, thang máy đã trở thành nơi có nguy cơ cao khi mọi người đều chạm vào các nút giống nhau. Nhiều nơi, người ta đã phát hiện ra những thủ thuật để ngăn chặn sự tiếp xúc với nút thang máy như dùng giấy bơm, tăm, khăn giấy vệ sinh để nhấn nút thang máy.
Vì vậy, để tiếp tục các dự án an toàn Corona trước đây của chúng tôi như Máy làm vệ sinh tự động, theo dõi nhiệt độ không tiếp xúc và Máy dò khoảng cách xã hội, ở đây chúng tôi sẽ xây dựng nguyên mẫu Thang máy được điều khiển bằng cử chỉ sử dụng Arduino Nano.
Đây Thang Contactless đang sử dụng Arduino Nano, một cử chỉ Sensor APDS9960, và một mô-đun màn hình OLED. Với bảng điều khiển dựa trên cử chỉ này, bạn có thể dễ dàng điều khiển Thang máy của mình bằng cách thực hiện một cử chỉ tay. Cảm biến APDS9960 được sử dụng để đọc các cử chỉ. Cử chỉ LÊN và XUỐNG dùng để cài số sàn, cử chỉ trái là đóng cửa thang máy và di chuyển thang máy theo số tầng và cử chỉ Phải dùng để mở cửa.
Thành phần bắt buộc
- Arduino Nano
- Mô-đun màn hình OLED
- APDS9960 RGB & Cảm biến cử chỉ
- Breadboard
- Dây nhảy
APDS9960 RGB & Cảm biến cử chỉ
APDS9960 RGB & Mô-đun phát hiện cử chỉ là một bảng đột phá nhỏ đi kèm với cảm biến APDS-9960 tích hợp, bộ lọc chặn tia UV và IR, bốn điốt riêng biệt nhạy cảm với các hướng khác nhau và giao diện tương thích I2C. Cảm biến này có thể được sử dụng để đo ánh sáng và màu sắc xung quanh, phát hiện khoảng cách và cảm nhận cử chỉ không chạm. Nó có phạm vi phát hiện cử chỉ từ 10 đến 20 cm và có thể được sử dụng để điều khiển vi điều khiển, robot và trong nhiều dự án khác.
Đặc trưng:
- Điện áp hoạt động: 2.4V đến 3.6V
- Phạm vi hoạt động: 4-8in (10-20cm).
- Giao diện I2C (Địa chỉ I2C: 0x39).
- Ánh sáng xung quanh và cảm biến màu RGB, Khoảng cách
- Phát hiện cảm biến và cử chỉ trong một mô-đun quang học
- Giao diện tương thích chế độ nhanh I2C-bus với tốc độ dữ liệu lên đến 400 kHz.
Sơ đồ mạch
Sơ đồ mạch cho thang máy không tiếp xúc sử dụng APDS9960 được đưa ra dưới đây.
Chúng tôi đang giao tiếp Arduino Nano với Cảm biến APDS9960 và Màn hình OLED. Chân VCC và GND của cả Cảm biến APDS9960 và Màn hình OLED được kết nối với 3.3V và GND của Arduino. Trong khi các chân SCL và SDA của Cảm biến APDS9960 và Màn hình OLED được kết nối với các chân A5 và A4 của Arduino Tương ứng.
Pin OLED & APDS9960 |
Pin Arduino Nano |
VCC |
3,3v |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Đây là cách thiết lập hoàn chỉnh cho Thang máy được điều khiển bằng cử chỉ bằng Arduino sẽ trông như thế nào:
Để tìm hiểu thêm về màn hình OLED và giao diện của nó với các bộ vi điều khiển khác, hãy nhấp vào liên kết.
Giải thích mã
Mã hoàn chỉnh cho Thang máy không tiếp xúc sử dụng APDS9960 được cung cấp ở cuối trang. Ở đây chúng tôi đang giải thích một số phần quan trọng của mã. Trong chương trình này, chúng tôi sẽ sử dụng các thư viện APDS9960 và Adafruit_SH1106 . Thư viện APDS9960 có thể được tải xuống từ Arduino IDE. Để tải xuống thư viện, hãy đi tới Sketch> Library Manager> Search rồi nhập cho Arduino APDS9960. Trong khi thư viện Adafruit_SH1106 có thể được tải xuống từ đây.
Vì vậy, như thường lệ, hãy bắt đầu mã bằng cách bao gồm tất cả các thư viện bắt buộc. Adafruit_SH1106.h là phiên bản sửa đổi của thư viện Adafruit ban đầu.
#include
Trong các dòng tiếp theo, xác định các biến để lưu trữ tầng và số tầng hiện tại nơi người dùng muốn đến.
int floornum = 0; int currentfloor = 0;
Sau đó, nhập bitmap cho hình ảnh Mũi tên LÊN, Mũi tên Xuống, Cửa mở và Cửa đóng. Mã HEX cho hình ảnh có thể được tạo bằng cách sử dụng trình chuyển đổi như Image2cpp. Để tìm hiểu thêm về cách sử dụng Image2cpp, hãy làm theo hướng dẫn tạo mã QR Arduino này.
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,, ………………………… …………………………………………………………..};
Trong hàm setup () , khởi chạy Serial Monitor với tốc độ truyền 9600 cho mục đích gỡ lỗi. Sau đó, trong các dòng tiếp theo, khởi tạo màn hình OLED và cảm biến APDS9960 bằng phương thức begin () như sau:
Serial.begin (9600); if (! APDS.begin ()) {Serial.println ("Lỗi khởi chạy cảm biến APDS9960!"); } Serial.println ("Phát hiện cử chỉ…"); display.begin (SH1106_SWITCHCAPVCC, 0x3C);
Sau khi khởi tạo màn hình và cảm biến, hãy xóa bộ đệm hiển thị bằng phương thức clearDisplay () và đặt kích thước phông chữ và màu sắc bằng các phương thức display.setTextSize () và display.setTextColor () .
display.setTextSize (2); display.setTextColor (TRẮNG); display.clearDisplay (); display.display ();
Bên trong void loop () , liên tục kiểm tra xem có cử chỉ nào được thực hiện không. Nếu có, sau đó đọc các giá trị cử chỉ và kiểm tra xem đó là cử chỉ nào (LÊN, XUỐNG, PHẢI, TRÁI) và in giá trị tương ứng trên màn hình nối tiếp. Cử chỉ LÊN và XUỐNG được sử dụng để đặt số sàn nơi người dùng muốn đến. Động tác bên trái là đóng cửa thang máy và di chuyển thang máy theo số tầng trong khi cử chỉ Bên phải dùng để mở cửa.
if (APDS.gestureAvailable ()) {int Cử chỉ = APDS.readGesture (); switch (cử chỉ) {case GESTURE_UP: Serial.println ("Đã phát hiện cử chỉ LÊN"); display.clearDisplay (); floornum ++; Nhà 1(); phá vỡ; case GESTURE_DOWN: Serial.println ("Đã phát hiện cử chỉ XUỐNG"); display.clearDisplay (); floornum -; Nhà 1(); phá vỡ; case GESTURE_LEFT: Serial.println ("Cử chỉ TRÁI được phát hiện"); display.clearDisplay (); khởi đầu(); phá vỡ; case GESTURE_RIGHT: Serial.println ("Cử chỉ RIGHT được phát hiện"); display.clearDisplay (); Nhà 1(); phá vỡ; default: nghỉ; }
Hàm home1 () được sử dụng để vẽ màn hình chính cho thang máy. Điều này bao gồm một mũi tên Lên, mũi tên xuống, dấu hiệu Cửa mở, Cửa đóng và số sàn hiện tại. Hàm drawBitmap () được sử dụng để vẽ các hình ảnh trên màn hình OLED. Cú pháp cho hàm drawBitmap () được đưa ra dưới đây:
drawBitmap (int16_t x, int16_t y, bitmap, int16_t w, int16_t h, color);
Ở đâu:
int16_t x, int16_t y là tọa độ X và Y của màn hình OLED
bitmap là tên của bitmap
int16_t w, int16_t h là chiều cao và trọng lượng của hình ảnh.
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 (); }
Hàm start () được sử dụng để di chuyển thang máy lên trên hoặc xuống dưới. Do đó, số sàn hiện tại được so sánh với số sàn nơi người dùng muốn đến. Nếu số sàn lớn hơn số sàn hiện tại. thì thang máy sẽ di chuyển lên trên và nếu số sàn nhỏ hơn số sàn hiện tại là không. thì thang máy sẽ chuyển động xuống dưới. Thang máy sẽ dừng khi cả tầng hiện tại không. và số sàn. giống nhau.
void start () {while (floornum> currentfloor) {Serial.println ("sắp LÊN"); currentfloor ++; display.drawBitmap (0, 0, up, 100, 64, WHITE); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); chậm trễ (2000); } while (floornum <currentfloor) {Serial.println ("sắp giảm"); hiện tại--; display.drawBitmap (0, 0, down, 100, 64, WHITE); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); chậm trễ (2000); } if (floornum == currentfloor) {Serial.println ("Đã đạt"); display.clearDisplay (); Nhà 1(); Serial.print (hiện tại); }}
Thử nghiệm thang máy không chạm điều khiển bằng cử chỉ
Khi phần cứng và mã đã sẵn sàng, hãy kết nối Arduino Nano với máy tính xách tay và tải lên mã hoàn chỉnh được cung cấp bên dưới. Như bạn có thể thấy theo mặc định, OLED sẽ hiển thị Giao diện người dùng thang máy.
Bây giờ vẫy tay của bạn lên hoặc xuống, như được hiển thị trong video bên dưới, để đặt tầng nơi bạn muốn đến. Sau đó, thực hiện động tác trái để xác nhận thang máy để đi đến tầng đó. Nếu bạn muốn dừng thang máy, hãy thực hiện động tác phù hợp với tay của bạn.
Đoạn video và mã làm việc hoàn chỉnh cho dự án này được đưa ra dưới đây. Hy vọng bạn thích xây dựng dự án này. Nếu bạn có bất kỳ câu hỏi nào liên quan đến dự án này, hãy để lại trong phần bình luận.