- Необходимые компоненты
- APDS9960 RGB и датчик жестов
- Принципиальная электрическая схема
- Код Пояснение
- Тестирование бесконтактного подъема, управляемого жестами
Во время пандемии короны лифты стали местом повышенного риска, где все нажимают одни и те же кнопки. Во многих местах люди обнаружили уловки для предотвращения контакта с кнопками лифта, такие как использование бумаги для откачивания, зубочисток или гигиенических салфеток для нажатия кнопок лифта.
Итак, в продолжение наших предыдущих проектов безопасности Corona, таких как автоматическая дезинфицирующая машина, бесконтактный мониторинг температуры и детектор социального расстояния, здесь мы собираемся создать прототип лифта, управляемого жестами, с использованием Arduino Nano.
Этот бесконтактный лифт использует Arduino Nano, датчик жестов APDS9960 и модуль дисплея OLED. С помощью этой панели управления на основе жестов вы можете легко управлять своим лифтом, делая жест рукой. Датчик APDS9960 используется для чтения жестов. Жесты ВВЕРХ и ВНИЗ используются для установки номера этажа, левый жест - закрыть дверь лифта и переместить лифт в соответствии с номером этажа, а жест вправо используется для открытия двери.
Необходимые компоненты
- Ардуино Нано
- Модуль дисплея OLED
- APDS9960 RGB и датчик жестов
- Макетная плата
- Перемычки
APDS9960 RGB и датчик жестов
Модуль APDS9960 RGB и обнаружения жестов - это небольшая коммутационная плата, которая поставляется со встроенным датчиком APDS-9960, УФ- и ИК-фильтрами, четырьмя отдельными диодами, чувствительными к разным направлениям, и интерфейсом, совместимым с I2C. Этот датчик может использоваться для измерения окружающего света и цвета, обнаружения приближения и распознавания жестов без прикосновения. Он имеет диапазон обнаружения жестов от 10 до 20 см и может использоваться для управления микроконтроллером, роботом и во многих других проектах.
Особенности:
- Рабочее напряжение: от 2,4 В до 3,6 В
- Рабочий диапазон: 4-8 дюймов (10-20 см).
- Интерфейс I2C (адрес I2C: 0x39).
- Окружающий свет и определение цвета RGB, близость
- Зондирование и обнаружение жестов в оптическом модуле
- Интерфейс, совместимый с быстрым режимом шины I2C, со скоростью передачи данных до 400 кГц.
Принципиальная электрическая схема
Принципиальная схема бесконтактного лифта с использованием APDS9960 приведена ниже.
Мы связываем Arduino Nano с датчиком APDS9960 и OLED-дисплеем. Контакты VCC и GND сенсора APDS9960 и OLED-дисплея подключены к 3,3 В и GND Arduino. В то время как контакты SCL и SDA датчика APDS9960 и OLED-дисплея подключены к контактам A5 и A4 Arduino соответственно.
OLED и APDS9960 контакт |
Штырь Arduino Nano |
VCC |
3,3 В |
GND |
GND |
SCL |
A5 |
ПДД |
A4 |
Вот как будет выглядеть полная настройка лифта, управляемого жестами, с использованием Arduino:
Чтобы узнать больше об OLED-дисплее и его взаимодействии с другими микроконтроллерами, перейдите по ссылке.
Код Пояснение
Полный код для бесконтактного лифта с APDS9960 приведен в конце страницы. Здесь мы объясняем некоторые важные части кода. В этой программе мы собираемся использовать библиотеки APDS9960 и Adafruit_SH1106 . Библиотеку APDS9960 можно загрузить из Arduino IDE. Чтобы загрузить библиотеку, перейдите в Sketch> Library Manager> Search и введите Arduino APDS9960. В то время как библиотека Adafruit_SH1106 можно скачать здесь.
Итак, как обычно, запустите код, включив все необходимые библиотеки. Adafruit_SH1106.h - это модифицированная версия исходной библиотеки Adafruit.
#включают
В следующих строках определите переменные для хранения текущего этажа и номера этажа, на котором пользователь хочет пойти.
int floornum = 0; int currentfloor = 0;
После этого введите растровые изображения для изображений «Стрелка вверх», «Стрелка вниз», «Открыть дверь» и «Закрыть дверь». HEX-код изображения может быть сгенерирован с помощью конвертера, такого как Image2cpp. Чтобы узнать больше о том, как использовать Image2cpp, следуйте этому руководству по генератору QR-кода Arduino.
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, ………………………… …………………………………………………………..};
В функции setup () инициализируйте Serial Monitor со скоростью 9600 бод для целей отладки. Затем в следующих строках инициализируйте OLED-дисплей и датчик APDS9960 с помощью метода begin () следующим образом:
Serial.begin (9600); if (! APDS.begin ()) {Serial.println («Ошибка инициализации датчика APDS9960!»); } Serial.println ("Обнаружение жестов…"); display.begin (SH1106_SWITCHCAPVCC, 0x3C);
После инициализации дисплея и датчика очистите буфер дисплея с помощью метода clearDisplay () и установите размер и цвет шрифта с помощью методов display.setTextSize () и display.setTextColor () .
display.setTextSize (2); display.setTextColor (БЕЛЫЙ); display.clearDisplay (); display.display ();
Внутри пустого цикла () , постоянно проверять, если какой - либо жест был сделан. Если да, то считайте значения жестов и проверьте, какой это жест (ВВЕРХ, ВНИЗ, ВПРАВО, ВЛЕВО), и распечатайте соответствующие показания на последовательном мониторе. Жесты ВВЕРХ и ВНИЗ используются для установки номера этажа, на который хочет перейти пользователь. Левый жест - закрыть дверь лифта и переместить лифт в соответствии с номером этажа, в то время как правый жест используется для открытия двери.
если (APDS.gestureAvailable ()) {int жест = APDS.readGesture (); переключатель (жест) {case GESTURE_UP: Serial.println («Обнаружен жест ВВЕРХ»); display.clearDisplay (); floornum ++; Дом 1(); сломать; case GESTURE_DOWN: Serial.println («Обнаружен жест ВНИЗ»); display.clearDisplay (); floornum -; Дом 1(); сломать; case GESTURE_LEFT: Serial.println («Обнаружен левый жест»); display.clearDisplay (); Начало(); сломать; case GESTURE_RIGHT: Serial.println («Обнаружен ПРАВЫЙ жест»); display.clearDisplay (); Дом 1(); сломать; по умолчанию: перерыв; }
Функция home1 () используется для рисования домашнего дисплея лифта. Он состоит из стрелки вверх, стрелки вниз, знаков «Открыть дверь», «Закрыть дверь» и текущего номера этажа. Функция drawBitmap () используется для рисования изображений на OLED-дисплее. Синтаксис функции drawBitmap () приведен ниже:
drawBitmap (int16_t x, int16_t y, растровое изображение, int16_t w, int16_t h, цвет);
Где:
int16_t x, int16_t y - координаты X и Y OLED-дисплея
растровое изображение - это имя растрового изображения
int16_t w, int16_t h - высота и вес изображения.
void home1 () {display.setCursor (101,23); display.println (floornum); display.drawBitmap (23, 0, вверх, 40, 18, БЕЛЫЙ); display.drawBitmap (26, 46, стрелка вниз, 40, 18, БЕЛЫЙ); display.drawBitmap (0, 15, открывание двери, 29, 30, БЕЛЫЙ); display.drawBitmap (60, 15, закрытый, 29, 30, БЕЛЫЙ); display.display (); }
Функция start () используется для перемещения лифта вверх или вниз. Для этого текущий номер этажа сравнивается с номером этажа, на котором пользователь хочет перейти. Если номер этажа больше, чем текущий номер этажа. то лифт будет двигаться вверх, и если номер этажа меньше текущего этажа. тогда лифт пойдет вниз. Лифт остановится, когда на текущем этаже нет. и этаж нет. подобные.
void start () {while (floornum> currentfloor) {Serial.println ("вверх"); currentfloor ++; display.drawBitmap (0, 0, вверх, 100, 64, БЕЛЫЙ); display.setCursor (101,23); display.println (текущий этаж); display.display (); display.clearDisplay (); задержка (2000); } while (floornum <currentfloor) {Serial.println ("спуститься"); currentfloor--; display.drawBitmap (0, 0, вниз, 100, 64, БЕЛЫЙ); display.setCursor (101,23); display.println (текущий этаж); display.display (); display.clearDisplay (); задержка (2000); } if (floornum == currentfloor) {Serial.println ("Достигнуто"); display.clearDisplay (); Дом 1(); Serial.print (текущий этаж); }}
Тестирование бесконтактного подъема, управляемого жестами
Когда оборудование и код будут готовы, подключите Arduino Nano к ноутбуку и загрузите полный код, указанный ниже. Как видите, по умолчанию OLED отображает пользовательский интерфейс лифта.
Теперь махните рукой вверх или вниз, как показано на видео ниже, чтобы установить пол там, где вы хотите идти. Затем сделайте левый жест, подтверждающий, что лифт поднимается на этот этаж. Если вы хотите остановить подъемник, то сделайте правильный жест рукой.
Полное рабочее видео и код этого проекта приведены ниже. Надеюсь, вам понравилось строить этот проект. Если у вас есть какие-либо вопросы по этому проекту, оставьте их в разделе комментариев.