Блокировка, управляемая жестами
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 |
Приложения и онлайн-сервисы
|
Об этом проекте
* Датчик APDS-9960 не работает с Arduino Nano или Mega 2560 (в моем тестировании).
Этот проект легко создать и использовать. Не стесняйтесь использовать в этом проекте любой сервопривод или фиксирующий механизм. Это должно быть стартовой платформой для блокировки на основе жестов. На строительство!
Материалы
Я получил большую часть своих запчастей на Amazon.com и датчик APDS-9960 от Sparkfun. Пока вы можете использовать только Arduino Uno или Micro 3.3v, так как любая другая плата не будет работать по какой-то странной причине.
Сборка
Прикрепите ЖК-дисплей, как показано. Если у вас нет потенциометра 10 кОм, используйте резистор 1 кОм, идущий от контраста к GND. Датчик APDS-9960 необходимо будет сместить при использовании Arduino Uno, поэтому я взял SCL и SDA и подключил их к резистору 4,7 кОм, а затем поднял их, установив резистор 4,7 кОм на 3,3 В. Затем подключите их к A4 и A5 соответственно (см. Схему). Arduino может работать от 9-вольтовой батареи с подключенным блоком питания постоянного тока.
Корпус
Я использовал простую картонную коробку и вырезал из нее отверстия, чтобы они совпадали с тем, где будут размещаться компоненты. Вы можете припаять все это к монтажной плате, но я просто оставил это на макетной плате и подключил перемычки к компонентам. Когда я закончил, это выглядело так.
Код
- Код Arduino
Код Arduino C / C ++
/ * Аппаратные соединения:ВАЖНО:APDS-9960 может принимать только 3,3 В! Вывод Arduino APDS-9960 Функция платы 3.3 В VCC Питание GND GND Земля A4 SDA I2C Data A5 SCL I2C Clock 2 INT InterruptResources:Include Wire.h и SparkFun_APDS-9960.h * / # include#include #include #include #define PINSIZE 6 #define SERVOPIN 9 // Сколько жестов длина вашего пароля // Пины # define APDS9960_INT 2 // Должен быть прерыванием pinLiquidCrystal lcd ( 12,11,6,5,4,3); Сервопривод; uint8_t near_data =0; int red_led =A1; int green_led =A2; int pageNum =0; // ЖКИ "страница" String secret [PINSIZE] ={"ВВЕРХ", "ВНИЗ", "ВВЕРХ", "ВВЕРХ", "ВПРАВО", "ВЛЕВО"}; // Пароль идет сюда. Должен быть ЗАГЛАВНЫМ. Может принимать значения «ВВЕРХ», «ВНИЗ», «ВЛЕВО» или «ВПРАВО». Строка currentGesture =""; int numRight =0; SparkFun_APDS9960 apds =SparkFun_APDS9960 (); // Инициализация библиотеки APDS-9960int isr_flag =0; void setup () {// Установить вывод прерывания как входной pinMode (APDS9960_INT, INPUT); lcd.begin (16,2); servo.attach (SERVOPIN); servo.write ( 0); servo.detach (); // Инициализируем последовательный порт Serial.begin (9600); Serial.print («Ваш пароль -»); Серийный.печать (PINSIZE); Serial.println («жестикулирует долго»); Serial.println (); Serial.println (F ("----------------")); Serial.println (F («Замок APDS-9960»)); Serial.println (F ("----------------")); // Инициализируем подпрограмму обслуживания прерывания attachInterrupt (0, interruptRoutine, FALLING); // Инициализируем APDS-9960 (настраиваем I2C и начальные значения) if (apds.init ()) {Serial.println (F ("Инициализация APDS-9960 завершена")); } else {Serial.println (F ("Что-то пошло не так во время инициализации APDS-9960!")); } if (! apds.setProximityGain (PGAIN_1X)) {Serial.println (F («Что-то пошло не так при попытке установить PGAIN»)); } if (apds.enableProximitySensor (false)) {Serial.println (F («Датчик приближения запущен»)); } else {Serial.println (F ("Что-то пошло не так во время инициализации датчика!")); } // Запускаем механизм датчика жестов APDS-9960 if (apds.enableGestureSensor (true)) {Serial.println (F («Датчик жестов запущен»)); } else {Serial.println (F ("Что-то пошло не так во время инициализации датчика жестов!")); }} void loop () {if (pageNum ==0) {if (! apds.readProximity (inity_data)) {Serial.println ("Ошибка чтения значения близости"); } else {Serial.println (близость_данных); если ((близость_данные> =40) &&(pageNum ==0)) {pageNum =1; задержка (2000); }}} переключатель (pageNum) {case 0:LCDClear (); lcd.print («Заблокировано - получить»); lcd.setCursor (0,1); lcd.print ("3 дюйма"); blinkRed (); LCDClear (); ломать; случай 1:numRight =0; lcd.print («Введите код ...»); lcd.setCursor (0,0); для (int x =0; x 0; x -) {LCDClear (); lcd.print ("Закрытие:"); lcd.setCursor (0,1); lcd.print (x); lcd.setCursor (1,1); lcd.print ("секунды ..."); delay (1000);} LCDClear (); lcd.print ("Закрытие");}
Схема
Производственный процесс