Подключение датчика жестов APDS-9960 к Arduino
В этой статье подробно расскажу о APDS-9960, который представляет собой датчик света (RGB) и датчик жестов. В конце статьи приведу пример схему подключения датчика к Arduino UNO с небольшим кодом.
Технические параметры
► Напряжение питания: 3.3В;
► Дистанция обнаружения: 10-20 см;
► Интерфейс: I2C, адрес 0x39;
► Габариты: 20 х 15 х 3 мм;
► Вес: 2 грамм.
Общие сведенья о датчике APDS-9960
Датчик жестов APDS-9960 — это многофункциональный ИК-датчик, который способен обнаруживать жесты, RGB цвет и освещенность. Связь с микроконтроллерами осуществляется по протоколу I2C. Рабочие напряжение датчика составляет 3,3 В, а вот логическая часть может работать с 5 В.
Конструктивно датчик состоит из одного ИК светодиода (излучателя) и четырех фотодиодов (приемников), которые в свою очередь обнаруживают ИК-излучение. Поэтому когда выполняем какой либо жест, датчик получает отраженное ИК излучение фотодиодами и производится расчет направления и скорости. Диапазон обнаружения от 10 до 20 см.
Подробную информацию можно получить с документации на датчик, скачать можно нажав на эту кнопку или в конце статьи.
Назначение контактов:
► VL — дополнительное питание ИК-светодиода. Должно быть 3,0 – 4,5 В;
► VCC и GND — питание модуля, 3.3 В;
► SCL — шина I2C;
► SDA— шина I2C;
► INT — вывод внешнего прерывания.
На передней части датчика имеются две припаянные перемычки.
PS — перемычка соединяет источник питания датчика и ИК-светодиода. Когда перемычка установлена, необходимо подключать только контакт VCC. Если, перемычки нету, необходимо подавать питание на контакт VCC (2,4 — 3,6 В) и на контактов VL (3,0 — 4,5 В) отдельно. По молчанию перемычка установлена.
I2C PU — это трех контактная перемычка, используемая для подключения и отключения подтягивающих резисторов шны I2C. По умолчанию эта перемычка установлена.
Подключение датчика APDS-9960 к Arduino
Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Датчик освещенности и приближения APDS-9960 x 1 шт.
► Провод DuPont, 2,54 мм, 20 см, F-M (Female — Male) x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.
Описание:
В примере покажу как подключить датчик жестов APDS-9960 к Arduino UNO. В скетче будем определять движения руки, полученные данные отправим в последовательный порт.
Подключение:
Схема не сложная, необходимо всего четыре провода, сначала подключаем шину I2C, вывод SCL и SDA, подключам к выводам A4 и A5 (Arduino UNO), далее подключаем питание питание GND к GND и VCC к 3.3V, схема собрана, теперь надо подготовить программную часть.
Установка библиотек:
Для работы с модулем APDS-9960 необходимо установить библиотеку от «Sparkfun«, которая позволит нам упростить работу с датчиком. Для этого, переходим в Скетч —> Подключить библиотеку —> Управление библиотеками.
В строке поиска введите «SparkFun_APDS9960», находим и устанавливаем библиотеку.
Программа:
Первая программа определяет направление движение руки, а так же определяет приближение и отдалении, загружаем скетч в контроллер Arduno UNO.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
#include <Wire.h> // Подключаем библиотеку Wire #include <SparkFun_APDS9960.h> // Подключаем библиотеку SparkFun_APDS9960 #define APDS9960_INT 2 // Указываем вывод прерывания SparkFun_APDS9960 apds = SparkFun_APDS9960(); // Создаем объект int isr_flag = 0; // Создаем переменную isr_flag void setup() { // Инициализируем последовательную связь и отправляем сообщения Serial.begin(9600); Serial.println(); Serial.println(F("--------------------------------")); Serial.println(F("APDS-9960 - GestureTest")); Serial.println(F("--------------------------------")); // Инициализируем прерывание на спад attachInterrupt(0, interruptRoutine, FALLING); // Инициализируем APDS-9960 if ( apds.init() ) { Serial.println(F("APDS-9960 initialization complete")); } else { Serial.println(F("Something went wrong during APDS-9960 init!")); } if ( apds.enableGestureSensor(true) ) { Serial.println(F("Gesture sensor is now running")); } else { Serial.println(F("Something went wrong during gesture sensor init!")); } } void loop() { if( isr_flag == 1 ) { detachInterrupt(0); handleGesture(); isr_flag = 0; attachInterrupt(0, interruptRoutine, FALLING); } } void interruptRoutine() { isr_flag = 1; } void handleGesture() { if ( apds.isGestureAvailable() ) { switch ( apds.readGesture() ) { case DIR_UP: Serial.println("UP"); break; case DIR_DOWN: Serial.println("DOWN"); break; case DIR_LEFT: Serial.println("LEFT"); break; case DIR_RIGHT: Serial.println("RIGHT"); break; case DIR_NEAR: Serial.println("NEAR"); break; case DIR_FAR: Serial.println("FAR"); break; default: Serial.println("NONE"); } } } |
После загрузки скетча проведите рукой влево, вправо, вперед, назад и приблизьте и отдалите. Последовательный монитор будет отображать данные жеста всякий раз, когда будет обнаружено прерывание.
Будут вопросы пишите.
Ссылки
Библиотека APDS9960
Купить в Самаре и области
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Провода DuPont, 2,54 мм, 20 см
Датчик жестов GY-9960, APDS-9960