Inhoudsopgave:

Arduino High Tech Safe: 6 stappen
Arduino High Tech Safe: 6 stappen

Video: Arduino High Tech Safe: 6 stappen

Video: Arduino High Tech Safe: 6 stappen
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, November
Anonim
Arduino High Tech Kluis
Arduino High Tech Kluis

Dit is mijn arduino high-tech kluis. U moet uw vinger scannen, uw kaart scannen en vervolgens een 4-cijferig wachtwoord invoeren om de lade te ontgrendelen. Dit project wordt niet aanbevolen voor beginners omdat het erg geavanceerd is. De code is lang, maar ik zal het in dit project delen. De kosten bedragen ongeveer $ 75 als je dezelfde kluis bouwt als ik. Dit project kan ook 1-3 dagen in beslag nemen. Dus laten we beginnen!

Benodigdheden

Om dezelfde kluis te bouwen als de mijne heb je nodig:

Arduino (Uno aanbevolen omdat ik geen stappen heb voor arduino mega of nano. Maar je kunt ze nog steeds gebruiken)

broodplankje

servo-

jumperdraden

joystick

20*4 (u kunt 16*4 gebruiken, maar u moet de code wijzigen)

vingerafdrukscanner

mfrc522 rfid-kaartscanner

een emmer lego's

Stap 1: Een doos bouwen

Een doos bouwen
Een doos bouwen

Eerst heb je een doos nodig om je elektronica in te doen. Je kunt lego's, een 3D-geprinte doos of zelfs karton gebruiken! (Hoewel dit misschien moeilijker is) Vergeet niet om er gaten in te maken voor een lade en je elektronica. Als u de rfid-kaartscanner gebruikt, hoeft u daar geen gat voor te maken als uw muren dun zijn. De kaarten werken nog, maar je moet de sleutelhangers dicht doen zodat de rfid-kaart senor ze kan lezen. Laat ook ruimte over voor je arduino en draden binnenin. OPMERKING: Wanneer u de lade bouwt, laat u er een gat in zodat uw servo kan draaien en de lade kan vergrendelen.

Stap 2: Bedrading

Bedrading!
Bedrading!

Deze stap kan ingewikkeld zijn omdat u de draden op de exacte plek moet aansluiten, anders werkt de elektronica niet. Ik heb geen bedradingsschema, maar ik zal je vertellen dat ze allemaal gaan. De bedrading is alleen voor arduino uno. Je zult moeten zoeken naar waar je de draden moet plaatsen als je een arduino mega of nano gebruikt. Als je niet alle elektronica gebruikt die ik heb, kun je die bedrading gewoon overslaan.

Vingerafdrukscanner: groene draad: D2 witte draad: D3 zwarte draad: GND rode draad: 5V

Joystick: 5V = 3.3V GND = GND X = A2 Y = A3 Schakelaar = D4

rfid-kaartscanner: 3.3V = 3.3V rst = D9 GND = GND miso = D12 mosi = D11 sck = D13 sda = D10

lcd-scherm: 5V = 5V GND = GND sda = A4 sck = A5

Servo: rode draad: 5V Bruine draad: GND gele draad: D6

OPMERKING: SLUIT DE RFID-KAARTSCANNER NIET AAN OP 5V. ALS JE DAT DOET, ZAL HET BREKEN!!!

Je vraagt je misschien af waarom ik zei om de joystickvoeding aan te sluiten op 3,3V als er 5V aan de zijkant staat. Dat komt omdat de servo, het scherm en de vingerafdrukscanner 5V nodig hebben. Als je daar de joystick aan toevoegt, werkt de elektronica misschien niet omdat alles 5V nodig heeft. De joystick werkt nog steeds met 3.3V. Het is gewoon dat de maximale waarde niet 1023 is, maar ~ 670.

Stap 3: Bibliotheken downloaden

In dit project heb je 6 bibliotheken nodig om alle elektronica te gebruiken. 1 voor de servo, 1 voor de vingerafdruksensor, 2 voor rfid-kaartscanner en 2 voor het scherm. De joystick heeft geen bibliotheek nodig. Wat is nu een bibliotheek? Het is eigenlijk een bestand dat veel code bevat die u met eenvoudige opdrachten in uw project kunt gebruiken. Om deze bibliotheken te krijgen, moet je naar een plaats met de naam GitHub gaan. Als je weet hoe je bibliotheken moet downloaden en uitpakken, ga dan naar de onderstaande links voor de downloads. Als je niet weet hoe, kun je naar mijn instructable gaan die vertelt over het downloaden van een bibliotheek in stap 3:

of zoek een YouTube-video over het downloaden van een Arduino-bibliotheek van GitHub

LINKS NAAR LIARATEN:

Servo

vingerafdruksensor:

spi

rfid-kaartsensor

schermbibliotheek 1

schermbibliotheek 2

Stap 4: Vingerafdruksensor en RFID-kaartsensor instellen

In deze stap wordt beschreven hoe u de vingerafdruksensor en rfid-kaartsensor instelt. Tenzij u uw vingerafdruksensor al hebt gebruikt, moet u deze laten zien hoe uw vingerafdruk eruitziet, zodat deze in het geheugen kan worden opgeslagen. Zelfs als u het eerder hebt gebruikt, moet u deze stap waarschijnlijk nog steeds uitvoeren. Ik zal je in het kort vertellen hoe je het moet doen, maar als het geen zin heeft, ga dan naar dezelfde instructable link in de laatste stap. Het gaat er heel goed overheen. Basic open gewoon arduino ide. Ga naar bestand > voorbeelden > adafruit vingerafdruksensor > inschrijven. Upload code naar Arduino, open de seriële monitor en volg de stappen die het je vertelt. Wanneer het je vertelt om het een nummer te geven. Typ 1# in.

Voor de rfid-kaart is deze stap vrij eenvoudig. Open arduino-idee. Ga naar bestand > voorbeelden > mfrc522 > lees persoonsgegevens. Upload naar arduino en open seriële monitor. Scan de kaart of sleutelhanger die je bij je sensor wilt gebruiken. Dan krijg je wat informatie. Zoek naar de ID van de kaart, dit zijn 4 sets van 2 cijfers. Zoiets als dit: AB 45 2Y 45 maar uw code zal anders zijn. Schrijf dit op een stuk papier. Je hebt het later weer nodig. Dat is het voor deze stap.

Stap 5: DE CODE

Dit zal voor de meesten van jullie de moeilijkste stap zijn, maar het is vrij eenvoudig. Kopieer en plak eerst de code van onderaf in de arduino ide. Ten tweede, bewerk de 2 secties waar EDIT CODE staat. 1 sectie is voor de kaartscanner, 1 is voor de joystick. Deze stappen kunnen niet worden overgeslagen. Als je klaar bent, upload je de code naar arduino!

#include #include Fingerprint.h>

#erbij betrekken

#erbij betrekken

#erbij betrekken

#erbij betrekken

LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIEF);

#define RST_PIN 9

#define SS_PIN 10

MFRC522 mfrc522(SS_PIN, RST_PIN);

SoftwareSerial mySerial(2, 3);

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

Servo-servo;

char d1;

char d2;

teken d3;

char d4;

ongeldige setup(){

servo.bevestigen (6);

servo.schrijven(170);

lcd.begin(20, 4);

Serieel.begin(9600);

terwijl (!Serial);

SPI.begin();

mfrc522. PCD_Init();

vertraging(4);

mfrc522. PCD_DumpVersionToSerial();

vertraging (100);

Serial.println("\n\nAdafruit-vingerdetectietest");

vinger.begin(57600);

vertraging (5);

if (finger.verifyPassword()) {

Serial.println("Alle systemen werken, ");

lcd.wissen();

lcd.setCursor(1, 0);

lcd.print("Vinger scannen a.u.b.");

} anders {

Serial.println("FOUT: Vingerafdruksensor niet gevonden!");

lcd.setCursor(0, 0);

lcd.print("FOUT: Vingerafdruk");

lcd.setCursor(1, 1);

lcd.print("sensor niet gevonden!");

terwijl (1) { vertraging(1); }

}

vinger.getTemplateCount();

Serial.print("Sensor bevat "); Serial.print(vinger.templateCount); Serial.println ("sjablonen"); Serial.println("Wachten op geldige vinger…"); }

void(* resetFunc) (void) = 0;

lege lus() {

getFingerprintIDez();

vertraging (50);

}

uint8_t getFingerprintID() {

uint8_t p = vinger.getImage();

schakelaar (p) {

geval FINGERPRINT_OK:

Serial.println("Afbeelding genomen");

pauze;

geval FINGERPRINT_NOFINGER:

Serial.println("Geen vinger gedetecteerd");

retour p;

geval FINGERPRINT_PACKETRECIEVERR:

Serial.println("Communicatiefout");

retour p;

geval FINGERPRINT_IMAGEFAIL:

Serial.println("Afbeeldingsfout");

retour p;

standaard:

Serial.println("Onbekende fout");

retour p;

}

p = vinger.image2Tz();

schakelaar (p) {

geval FINGERPRINT_OK:

Serial.println("Beeld geconverteerd");

pauze;

geval FINGERPRINT_IMAGEMESS:

Serial.println("Afbeelding te rommelig");

retour p;

geval FINGERPRINT_PACKETRECIEVERR:

Serial.println("Communicatiefout");

retour p;

geval FINGERPRINT_FEATUREFAIL:

Serial.println("Kon vingerafdrukken niet vinden");

retour p;

geval FINGERPRINT_INVALIDIMAGE:

Serial.println("Kon vingerafdrukken niet vinden");

retour p;

standaard:

Serial.println("Onbekende fout");

retour p;

}

p = vinger.fingerFastSearch();

if (p == VINGERAFDRUK_OK) {

Serial.println("Een afdrukovereenkomst gevonden!");

} else if (p == FINGERPRINT_PACKETRECIEVEERR) { Serial.println ("Communicatiefout");

retour p;

} else if (p == FINGERPRINT_NOTFOUND) {

Serial.println("Geen overeenkomst gevonden");

retour p;

} anders {

Serial.println("Onbekende fout");

retour p;

}

Serial.print("Gevonden ID #"); Seriële.afdruk (vinger.vinger-ID);

Serial.print(" met vertrouwen van "); Serial.println(vinger.vertrouwen);

return finger.fingerID;

}

int getFingerprintIDez() {

uint8_t p = vinger.getImage();

if (p != VINGERAFDRUK_OK) retourneer -1;

p = vinger.image2Tz();

if (p != VINGERAFDRUK_OK) retourneer -1;

p = vinger.fingerFastSearch();

if (p != VINGERAFDRUK_OK) retourneer -1;

Serial.print("Gevonden ID #"); Seriële.afdruk (vinger.vinger-ID);

Serial.print(" met vertrouwen van "); Serial.println(vinger.vertrouwen);

if(vinger.fingerID == 1){

lcd.wissen();

lcd.setCursor(2, 0);

lcd.print("Vinger geaccepteerd, ");

lcd.setCursor(2, 0);

lcd.print("nu kaart scannen…");

lcd.setCursor(0, 3);

lcd.print("===================>");

while(! mfrc522. PICC_IsNewCardPresent());

while(! mfrc522. PICC_ReadCardSerial());

if (mfrc522.uid.uidByte[0] == 0x92 && //========================CODE BEWERKEN======== ==============

mfrc522.uid.uidByte[1] == 0xAB && //Neem dat stuk papier met de ID erop, er waren 4 sets van 2 cijfers

mfrc522.uid.uidByte[2] == 0x90 && //Kijk naar de code, zie waar 0x92, 0xAB, 0x90, 0x1c staat? Voer elk in

mfrc522.uid.uidByte [3] == 0x1C) { // van de 2-cijferige sectie na de 0x. Het gedeelte van de ID zegt bijvoorbeeld:

lcd.wissen(); //3E, voer dan de 3E in na de 0x om 0x3E te maken. Doe dit voor elke sectie

lcd.setCursor(3, 0);

lcd.print("Eindelijk, voer in");

lcd.setCursor(1, 1);

lcd.print("joystick-wachtwoord");

while(analogRead(A2) >= 100 &&

analoog lezen (A2) <= 670 &&

analoog lezen (A3) >= 100 &&

analoog lezen (A3) <= 670){

}

lcd.setCursor(8, 4);

lcd.print("*"); if(analogRead(A2) <= 100){

d1 = L;

}

if(analogRead(A2) >= 670){

d1 = R;

}

if(analogRead(A3) <= 100){

d1 = U;

}

if(analogRead(A3) >= 670){

d1 = D;

}

vertraging (500);

while(analogRead(A2) >= 100 &&

analoog lezen (A2) <= 670 &&

analoog lezen (A3) >= 100 &&

analoog lezen (A3) <= 670){

}

lcd.print("*");

if(analogRead(A2) <= 100){

d2 = L;

}

if(analogRead(A2) >= 670){

d2 = R;

}

if(analogRead(A3) <= 100){

d2 = U;

}

if(analogRead(A3) >= 670){

d2 = D;

}

vertraging (500);

while(analogRead(A2) >= 100 &&

analoog lezen (A2) <= 670 &&

analoog lezen (A3) >= 100 &&

analoog lezen (A3) <= 670){

}

lcd.print("*");

if(analogRead(A2) <= 100){

d3 = L;

}

if(analogRead(A2) >= 670){

d3 = R;

}

if(analogRead(A3) <= 100){

d3 = U;

}

if(analogRead(A3) >= 670){

d3 = D;

}

vertraging (500);

while(analogRead(A2) >= 10 &&

analoog lezen (A2) <= 670 &&

analoog lezen (A3) >= 100 &&

analoog lezen (A3) <= 670){

}

lcd.print("*");

if(analogRead(A2) <= 100){

d4 = L;

}

if(analogRead(A2) >= 670){

d4 = R;

}

if(analogRead(A3) <= 100){

d4 = U;

}

if(analogRead(A3) >= 670){

d4 = D;

}

vertraging (500);

if(d1 == L && d2 == U && d3 == L && d4 == R){ //=================CODE BEWERKEN====== ================

lcd.wissen(); // Dit gedeelte is waar je het wachtwoord kunt bewerken met de joystick

lcd.setCursor(2, 0); // het wachtwoord is ingesteld op links, links, rechts. Als je wilt veranderen

lcd.print("Toegang verleend!"); //it, zet een L voor links, R voor rechts, U voor omhoog of D voor omlaag in een van de

lcd.setCursor(2, 1); //4 secties met een letter na de == tekens.

lcd.print("Lade ontgrendeld.");

lcd.setCursor(2, 2);

lcd.print("Als je klaar bent, verplaats dan");

lcd.setCursor(1, 3);

lcd.print("joystick om opnieuw te vergrendelen");

servo.schrijven(90);

while(analogRead(A2) >= 100 &&

analoog lezen (A2) <= 670 &&

analoog lezen (A3) >= 100 &&

analoog lezen (A3) <= 670);

servo.schrijven(170);

lcd.setCursor(3, 0);

lcd.print("Lade vergrendeld");

vertraging (3000);

resetFunc();

}anders{

lcd.wissen();

lcd.setCursor(2, 0);

lcd.print("TOEGANG GEWEIGERD!!!");

lcd.setCursor(0, 2);

lcd.print("Systeem opnieuw opstarten…");

vertraging (3000);

resetFunc();

}

}anders{

lcd.wissen();

lcd.setCursor(2, 0);

lcd.print("TOEGANG GEWEIGERD!!!");

lcd.setCursor(0, 2);

lcd.print("Systeem opnieuw opstarten…");

vertraging (3000);

resetFunc();

}

}anders{

lcd.wissen();

lcd.setCursor(2, 0);

lcd.print("TOEGANG GEWEIGERD!!!");

lcd.setCursor(0, 2);

lcd.print("Systeem opnieuw opstarten…");

vertraging (3000);

resetFunc();

}

return finger.fingerID; }

Stap 6: Voltooien

Een ding ben ik vergeten te vertellen, nou 2 dingen is dat ik dit heb gebouwd voordat ik foto's nam, dus ik kon je niet laten zien hoe ik de doos heb gebouwd. De andere is dat het aan te raden is om het servodeel op het draaiende deel te schroeven. Als je dat niet doet, kan iemand aan de lade trekken terwijl deze is vergrendeld en het stuk eraf trekken. Maar voordat je hem vastschroeft, moet je de juiste plek vinden om hem op te zetten, omdat de servo tot op zekere hoogte draait. Of je kunt het gewoon in de code veranderen. Als sommige elektronica raar doet, wil je misschien een andere manier vinden om voor sommige van hen 5V te krijgen. Ik merkte dat wanneer mijn vingerafdrukscanner flitste, het scherm er een beetje mee flitste en dat de servo geluid zou maken. Als de servo bewoog, werd het scherm gedimd. Ik hoop dat je genoten hebt van het project! Als je vragen hebt, laat ze dan achter in reacties. Ik ben niet veel op instructables, maar ik zal ze zo snel mogelijk beantwoorden!

Aanbevolen: