Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Contactloos Gebaarslot: Veilige toegang met APDS-9960 en Arduino

Onderdelen en benodigdheden

SparkFun APDS-9960 1
Arduino UNO 1
RGB Diffused Common Cathode 1
Adafruit Standaard LCD - 16x2 Wit op Blauw 1
Weerstand 4,75k ohm 2
Draadbruggen (standaard) 1
Weerstand 1k ohm 1

Apps en online diensten

  • Arduino IDE

Over dit project

*De APDS-9960-sensor werkt niet met de Arduino Nano of Mega 2560 (naar mijn testen).

Dit project is eenvoudig te maken en te gebruiken. Voel je vrij om elke soort servo of vergrendelingsmechanisme te gebruiken. Dit is bedoeld als startplatform voor een gebaar-gebaseerd slot. Laten we bouwen!

Materialen

Ik kocht de meeste onderdelen bij Amazon.com en de APDS-9960-sensor bij Sparkfun. Je kunt alleen een Arduino Uno of Micro 3.3V gebruiken, andere bordjes werken niet om een of andere vreemde reden.

Montage

Bevestig de LCD zoals getoond. Als je geen 10k potentiometer hebt, gebruik dan een 1k-weerstand van contrast naar GND. De APDS-9960-sensor moet worden geshift als je de Arduino Uno gebruikt; wat ik deed is de SCL en SDA verbinden met een 4,7k-weerstand, en ze dan high trekken door de 4,7k-weerstand naar 3,3V. Vervolgens verbinden met A4 en A5, respectievelijk (zie schema). De Arduino kan werken op een 9V-batterij met een DC-stroombaar.

Behuizing

Ik gebruikte een eenvoudig kartonnen doos en knipte gaten eruit waar de componenten zouden komen. Je kunt alles op een printplaat solderen, maar ik liet het in het breadboard en verbond jumperdraden met de componenten. Na afloop zag er zo uit:

Contactloos Gebaarslot: Veilige toegang met APDS-9960 en Arduino

Code

Arduino-code (C/C++)
/* Hardware Connections: IMPORTANT: The APDS-9960 can only accept 3.3V!
Arduino Pin APDS-9960 Board Function
3.3V VCC Power
GND GND Ground
A4 SDA I2C Data
A5 SCL I2C Clock
2 INT Interrupt
Resources: Include Wire.h and SparkFun_APDS-9960.h */
#include 
#include 
#include 
#include 

#define PINSIZE 6
#define SERVOPIN 9
// Hoeveel gebaren lang je wachtwoord is
#define APDS9960_INT 2 // Moet een interrupt-pin zijn

LiquidCrystal lcd(12,11,6,5,4,3);
Servo servo;
uint8_t proximity_data = 0;
int red_led = A1;
int green_led = A2;
int pageNum = 0; // Het LCD "pagina" nummer
String secret[PINSIZE] = {"UP","DOWN","UP","UP","RIGHT","LEFT"}; // Wachtwoord hier. Moet in HOOFDLETTERS. Kan "UP", "DOWN", "LEFT", of "RIGHT" zijn
String currentGesture = "";
int numRight = 0;
SparkFun_APDS9960 apds = SparkFun_APDS9960(); // Init APDS-9960 bibliotheek
int 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("Your password is ");
  Serial.print(PINSIZE);
  Serial.println(" gestures long.");
  Serial.println();
  Serial.println(F("----------------"));
  Serial.println(F("APDS-9960 Lock"));
  Serial.println(F("----------------"));
  attachInterrupt(0, interruptRoutine, FALLING);
  if ( apds.init() ) {
    Serial.println(F("APDS-9960 initialization complete"));
  } else {
    Serial.println(F("Something went wrong during APDS-9960 init!"));
  }
  if ( !apds.setProximityGain(PGAIN_1X) ) {
    Serial.println(F("Something went wrong trying to set PGAIN"));
  }
  if ( apds.enableProximitySensor(false) ) {
    Serial.println(F("Proximity sensor is now running"));
  } else {
    Serial.println(F("Something went wrong during sensor 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(pageNum==0){
    if ( !apds.readProximity(proximity_data) ) {
      Serial.println("Error reading proximity value");
    } else {
      Serial.println(proximity_data);
      if((proximity_data >= 40) && (pageNum==0)){
        pageNum=1;
        delay(2000);
      }
    }
  }
  switch(pageNum){
    case 0:
      LCDClear();
      lcd.print("Locked- get");
      lcd.setCursor(0,1);
      lcd.print("3 inches away.");
      blinkRed();
      LCDClear();
      break;
    case 1:
      numRight = 0;
      lcd.print("Enter code...");
      lcd.setCursor(0,0);
      for(int x=0; x0;x--){
    LCDClear();
    lcd.print("Closing in: ");
    lcd.setCursor(0,1);
    lcd.print(x);
    lcd.setCursor(1,1);
    lcd.print(" seconds...");
    delay(1000);
  }
  LCDClear();
  lcd.print("Closing");
}

Schema's

Contactloos Gebaarslot: Veilige toegang met APDS-9960 en Arduino

Productieproces

  1. De Evolutie en Fabricage van Moderne Pin-Tumbler Sloten
  2. Combinatieslot: Ontwerp, Productie en Historische Evolutie
  3. Slimme Plantenalarmer – DIY Sensor voor Optimale Hydratatie
  4. Bouw een Italiaanse Woordklok met Arduino Nano, NeoPixel, LCD en RTC
  5. Bespaar Arduino-pins: Sluit een 4x3-toetsenblok aan met slechts 3 verbindingen
  6. Bouw een Betrouwbare Sigfox kWh Meter met Arduino MKR Fox 1200
  7. Bluetooth Temperatuurmeter met Arduino Nano
  8. Arduino Nano Companion Kit – Essentiële Componenten & Hulpmiddelen voor DIY Electronica
  9. USB MIDI Adapter Kit voor Arduino Micro / Leonardo – Complete Onderdelenlijst
  10. Geïsoleerde analoge ingangsschakeling voor Arduino bouwen
  11. Precisie Reactietijd Test met Arduino UNO