Мазмуну:

Arduino High Tech Safe: 6 кадам
Arduino High Tech Safe: 6 кадам

Video: Arduino High Tech Safe: 6 кадам

Video: Arduino High Tech Safe: 6 кадам
Video: Amazing arduino project 2024, Июль
Anonim
Arduino High Tech Safe
Arduino High Tech Safe

Бул менин arduino жогорку технологиялык сейфим. Сиз манжаңызды сканерлеп, картты сканерлеп, анан суурманын кулпусун ачуу үчүн 4 орундуу сырсөздү киргизишиңиз керек. Бул долбоор жаңы баштагандарга сунушталбайт, анткени ал абдан өнүккөн. Код узун, бирок мен аны бул долбоордо бөлүшөм. Мен сыяктуу сейфти курсаңыз, баасы 75 доллардын тегерегинде. Бул долбоорду бүтүрүү үчүн 1-3 күн талап кылынышы мүмкүн. Ошентип, баштайлы!

Жабдуулар

Меникиндей сейфти куруу үчүн сизге керек болот:

Arduino (Uno сунушталат, анткени менде ардуино мега же нано үчүн кадамдар жок. Бирок сиз дагы колдоно берсеңиз болот)

нан

servo

секирүүчү зымдар

джойстик

20*4 (сиз 16*4 колдоно аласыз, бирок кодду өзгөртүүгө туура келет)

манжа изинин сканери

mfrc522 rfid карта сканери

лего чакасы

1 -кадам: кутуча куруу

Куту куруу
Куту куруу

Адегенде сизге электроникаңызды салуу үчүн куту керек болот. Сиз легос, 3d басылган куту же картонду колдонсоңуз болот! (Бул кыйыныраак болсо да) Тартмага тешиктерди жана электроникаңызды коюуну унутпаңыз. Эгерде сиз rfid карта сканерин колдонуп жатсаңыз, анда дубалдарыңыз жука болсо, анда тешик кылуунун кажети жок. Карталар дагы эле иштейт, бирок сиз ачкычтарды жабышыңыз керек, андыктан rfid карта сенатору аларды окуй алат. Ошондой эле ардуино жана зымдар үчүн орун калтырыңыз. ЭСКЕРТҮҮ: Тартманы курганыңызда, анын тешигин калтырыңыз, ошондо сервону буруп, суурманы кулпулай алат.

2 -кадам: Улантуу

Wiring Up!
Wiring Up!

Бул кадам татаал болушу мүмкүн, анткени зымдарды так жерге туташтыруу керек же электроника иштебейт. Менде зымдардын схемасы жок, бирок ар бири кетерин айтам. Кабелдер arduino uno үчүн гана. Эгерде сиз arduino мега же нано колдонуп жатсаңыз, зымдарды коюу керек болчу. Эгерде сизде менде болгон бардык электроникаларды колдонбой жатсаңыз, анда бул зымдарды өткөрүп жиберсеңиз болот.

Бармак басуу сканери: жашыл зым: D2 ак зым: D3 кара зым: GND кызыл зым: 5V

Джойстик: 5V = 3.3V GND = GND X = A2 Y = A3 Switch = D4

rfid карта сканери: 3.3V = 3.3V rst = D9 GND = GND miso = D12 mosi = D11 sck = D13 sda = D10

lcd экраны: 5V = 5V GND = GND sda = A4 sck = A5

Кызмат: кызыл зым: 5V Браун зым: GND сары зым: D6

ЭСКЕРТҮҮ: RFID КАРТА СКАННЕРИН 5В КОЮУГА БОЛБО. СЕН БОЛСОҢ БУЗУЛАТ !!!

Сиз кызыкдар болушуңуз мүмкүн, эмне үчүн мен 5 джойстиктин кубаттуулугун 3.3Вга туташтырып койгом деп айтканымда, 5В тарапта. Себеби servo, экран жана манжа изинин сканерине 5В керек. Эгер джойстикти кошсоңуз, электроника иштебей калышы мүмкүн, анткени баарына 5В керек. Джойстик дагы 3.3V менен иштейт. Бул максималдуу мааниси 1023 болбойт, ал ~ 670 болот.

3 -кадам: Китепканаларды жүктөө

Бул долбоордо сизге бардык электрониканы колдонуу үчүн 6 китепкана керек болот. Серво үчүн 1, манжа изинин сенсору үчүн 1, rfid карт сканери үчүн 2 жана экран үчүн 2. Джойстикке китепкананын кереги жок. Эми китепкана деген эмне? Бул негизи сиздин долбоордо жөнөкөй буйруктар менен колдоно турган көптөгөн коддорду камтыган файл. Бул китепканаларды алуу үчүн GitHub деп аталган жерге баруу керек. Эгерде сиз китепканаларды кантип түшүрүп, ачууну билсеңиз, жүктөмөлөрдү алуу үчүн төмөнкү шилтемелерге өтүңүз. Эгерде сиз кантип билбесеңиз, анда 3-кадамда китепкананы кантип жүктөө керектиги тууралуу менин инструктажыма барсаңыз болот:

же GitHubдан arduino китепканасын кантип жүктөө керектиги боюнча youtube видеосун издеңиз

ЛИРАРИЯЛАРГА Шилтемелер:

Серво

манжа изинин сенсору:

github.com/PaulStoffregen/SPI

rfid карта сенсору

экран китепканасы 1

экран китепканасы 2

4 -кадам: Манжа изинин сенсорун жана Rfid карта сенсорун орнотуу

Бул кадам манжа изинин сенсорун жана rfid карта сенсорун кантип орнотуу керектиги жөнүндө айтылат. Эгер манжа изинин сенсорун колдоно элек болсоңуз, аны манжаңыздын изи кандай экенин көрсөтүшүңүз керек, андыктан аны эсинде сактай аласыз. Мурда колдонсоңуз дагы, бул кадамды дагы деле жасашыңыз керек. Мен муну кантип кылууну кыскача айтып берем, бирок мааниси жок болсо, акыркы кадамда ошол эле үйрөтүүчү шилтемеге өтүңүз. Бул анын үстүнөн абдан жакшы өтөт. Негизги эле ачык arduino ide. Файлга өтүү> мисалдар> adafruit манжа изинин сенсору> катталуу. Кодду arduinoго жүктөңүз, сериялык мониторду ачыңыз жана ал айткан кадамдарды аткарыңыз. Качан сизге номер бергиле десе. 1#териңиз.

Эми rfid картасы үчүн бул кадам абдан оңой. Open arduino ide. Файлга өтүү> мисалдар> mfrc522> жеке маалыматтарды окуу. Arduinoго жүктөп, сериялык мониторду ачыңыз. Сенсор менен келген картаны же ачкычты сканерлеңиз. Андан кийин ал сизге бир аз маалымат берет. Картанын идентификаторун издеңиз, ал 2 цифрадан турган 4 топтом болот. Ушул сыяктуу бир нерсе: AB 45 2Y 45 бирок сиздин код башкача болот. Муну кагазга жаз. Кийинчерээк сизге дагы керек болот. Мына ушул кадам үчүн.

5 -кадам: КОД

Бул көбүңүз үчүн эң оор кадам болуп калат, бирок бул абдан жөнөкөй. Алгач кодду төмөндөн arduino ideге көчүрүп чаптаңыз. Экинчиден, EDIT CODE делген 2 бөлүмдү түзөтүңүз. 1 бөлүм карта сканери үчүн, 1 джойстик үчүн. Бул кадамдарды өткөрүп жиберүүгө болбойт. Бүткөндөн кийин, кодду arduinoго жүктөңүз!

#кошуу #манжа изин кошуу.h>

#кошуу

#кошуу

#кошуу

#кошуу

LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, Позитивдүү);

#аныктоо RST_PIN 9

#аныктоо SS_PIN 10

MFRC522 mfrc522 (SS_PIN, RST_PIN);

SoftwareSerial mySerial (2, 3);

Adafruit_Fingerprint манжа = Adafruit_Fingerprint (& mySerial);

Servo servo;

char d1;

char d2;

char d3;

char d4;

жараксыз орнотуу () {

servo.attach (6);

servo.write (170);

lcd.begin (20, 4);

Serial.begin (9600);

while (! Сериялык);

SPI.begin ();

mfrc522. PCD_Init ();

кечигүү (4);

mfrc522. PCD_DumpVersionToSerial ();

кечиктирүү (100);

Serial.println ("\ n / nАдафруттун манжаларын аныктоо сынагы");

finger.begin (57600);

кечигүү (5);

if (finger.verifyPassword ()) {

Serial.println ("Бардык системалар иштеп жатат");

lcd.clear ();

lcd.setCursor (1, 0);

lcd.print ("Сураныч манжаңызды сканерлеңиз");

} башка {

Serial.println ("ERROR: Finger Print Sensor табылган жок!");

lcd.setCursor (0, 0);

lcd.print ("ERROR: Finger Print");

lcd.setCursor (1, 1);

lcd.print ("сенсор табылган жок!");

while (1) {delay (1); }

}

finger.getTemplateCount ();

Serial.print ("Сенсор камтыйт"); Serial.print (finger.templateCount); Serial.println ("шаблондор"); Serial.println ("Жарактуу манжа күтүлүүдө …"); }

void (* resetFunc) (void) = 0;

void loop () {

getFingerprintIDez ();

кечиктирүү (50);

}

uint8_t getFingerprintID () {

uint8_t p = finger.getImage ();

которуу (p) {

Case FINGERPRINT_OK:

Serial.println ("Сүрөт тартылган");

тыныгуу;

Case FINGERPRINT_NOFINGER:

Serial.println ("Бармак аныкталган жок");

return p;

case FINGERPRINT_PACKETRECIEVEERR:

Serial.println ("Байланыш катасы");

return p;

учурда FINGERPRINT_IMAGEFAIL:

Serial.println ("Сүрөт катасы");

return p;

демейки:

Serial.println ("Белгисиз ката");

return p;

}

p = finger.image2Tz ();

которуу (p) {

Case FINGERPRINT_OK:

Serial.println ("Сүрөт айландырылды");

тыныгуу;

учурда FINGERPRINT_IMAGEMESS:

Serial.println ("Сүрөт өтө башаламан");

return p;

case FINGERPRINT_PACKETRECIEVEERR:

Serial.println ("Байланыш катасы");

return p;

Case FINGERPRINT_FEATUREFAIL:

Serial.println ("Манжа изинин өзгөчөлүктөрү табылган жок");

return p;

Case FINGERPRINT_INVALIDIMAGE:

Serial.println ("Манжа изинин өзгөчөлүктөрү табылган жок");

return p;

демейки:

Serial.println ("Белгисиз ката");

return p;

}

p = finger.fingerFastSearch ();

эгер (p == FINGERPRINT_OK) {

Serial.println ("Басма матч табылды!");

} else if (p == FINGERPRINT_PACKETRECIEVEERR) {Serial.println ("Байланыш катасы");

return p;

} эгер башка (p == FINGERPRINT_NOTFOUND) {

Serial.println ("Дал келгени табылган жок");

return p;

} башка {

Serial.println ("Белгисиз ката");

return p;

}

Serial.print ("ID #табылды"); Serial.print (finger.fingerID);

Serial.print ("ишеним менен"); Serial.println (манжа. Ишеним);

return finger.fingerID;

}

int getFingerprintIDez () {

uint8_t p = finger.getImage ();

if (p! = FINGERPRINT_OK) -1 кайтаруу;

p = finger.image2Tz ();

if (p! = FINGERPRINT_OK) return -1;

p = finger.fingerFastSearch ();

if (p! = FINGERPRINT_OK) -1 кайтаруу;

Serial.print ("ID #табылды"); Serial.print (finger.fingerID);

Serial.print ("ишеним менен"); Serial.println (манжа. Ишеним);

эгер (finger.fingerID == 1) {

lcd.clear ();

lcd.setCursor (2, 0);

lcd.print ("Манжа кабыл алынды");

lcd.setCursor (2, 0);

lcd.print ("азыр картаны сканерлөө …");

lcd.setCursor (0, 3);

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

while (! mfrc522. PICC_IsNewCardPresent ());

while (! mfrc522. PICC_ReadCardSerial ());

if (mfrc522.uid.uidByte [0] == 0x92 && // ====================== КОДДУ ТҮЗӨТҮҮ ======== ==============

mfrc522.uid.uidByte [1] == 0xAB && // Идентификатору бар кагазды алыңыз, 2 цифрадан турган 4 топтом бар болчу

mfrc522.uid.uidByte [2] == 0x90 && // Кодду караңыз, 0x92, 0xAB, 0x90, 0x1c деп жазылганын караңыз? Ар бирин киргизиңиз

mfrc522.uid.uidByte [3] == 0x1C) {// 0xтен кийинки 2 орундуу бөлүмдүн. Мисалы, ID бөлүмүндө айтылат

lcd.clear (); // 3E, андан кийин 0x3E кылуу үчүн 0xтен кийин 3E киргизиңиз. Муну ар бир бөлүм үчүн жасаңыз

lcd.setCursor (3, 0);

lcd.print ("Акыры, киргиз");

lcd.setCursor (1, 1);

lcd.print ("джойстиктин сырсөзү");

while (analogRead (A2)> = 100 &&

analogRead (A2) <= 670 &&

analogRead (A3)> = 100 &&

analogRead (A3) <= 670) {

}

lcd.setCursor (8, 4);

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

d1 = L;

}

эгер (analogRead (A2)> = 670) {

d1 = R;

}

if (analogRead (A3) <= 100) {

d1 = U;

}

эгер (analogRead (A3)> = 670) {

d1 = D;

}

кечигүү (500);

while (analogRead (A2)> = 100 &&

analogRead (A2) <= 670 &&

analogRead (A3)> = 100 &&

analogRead (A3) <= 670) {

}

lcd.print ("*");

if (analogRead (A2) <= 100) {

d2 = L;

}

эгер (analogRead (A2)> = 670) {

d2 = R;

}

if (analogRead (A3) <= 100) {

d2 = U;

}

эгер (analogRead (A3)> = 670) {

d2 = D;

}

кечигүү (500);

while (analogRead (A2)> = 100 &&

analogRead (A2) <= 670 &&

analogRead (A3)> = 100 &&

analogRead (A3) <= 670) {

}

lcd.print ("*");

if (analogRead (A2) <= 100) {

d3 = L;

}

эгер (analogRead (A2)> = 670) {

d3 = R;

}

if (analogRead (A3) <= 100) {

d3 = U;

}

эгер (analogRead (A3)> = 670) {

d3 = D;

}

кечигүү (500);

while (analogRead (A2)> = 10 &&

analogRead (A2) <= 670 &&

analogRead (A3)> = 100 &&

analogRead (A3) <= 670) {

}

lcd.print ("*");

if (analogRead (A2) <= 100) {

d4 = L;

}

эгер (analogRead (A2)> = 670) {

d4 = R;

}

if (analogRead (A3) <= 100) {

d4 = U;

}

эгер (analogRead (A3)> = 670) {

d4 = D;

}

кечигүү (500);

эгерде (d1 == L && d2 == U && d3 == L && d4 == R) {// ================ EDIT CODE ====== =================

lcd.clear (); // Бул бөлүм сиз джойстик менен сырсөздү түзөтө аласыз

lcd.setCursor (2, 0); // сырсөз солго, өйдө, оңго коюлган. Эгер өзгөрткүңүз келсе

lcd.print ("Мүмкүнчүлүк берилди!"); // it, L үчүн солго, R үчүн оңго, U үчүн өйдө, же D үчүн ылдый

lcd.setCursor (2, 1); // == белгилеринен кийин тамга менен 4 бөлүм.

lcd.print ("Тартма кулпусу ачылган.");

lcd.setCursor (2, 2);

lcd.print ("Бүткөндө, жылдыр");

lcd.setCursor (1, 3);

lcd.print ("relock to joystick");

servo.write (90);

while (analogRead (A2)> = 100 &&

analogRead (A2) <= 670 &&

analogRead (A3)> = 100 &&

analogRead (A3) <= 670);

servo.write (170);

lcd.setCursor (3, 0);

lcd.print ("Тартма кулпуланган");

кечигүү (3000);

resetFunc ();

} башка {

lcd.clear ();

lcd.setCursor (2, 0);

lcd.print ("КИРҮҮ четке кагылды !!!");

lcd.setCursor (0, 2);

lcd.print ("Системаны кайра жүктөө…");

кечигүү (3000);

resetFunc ();

}

} башка {

lcd.clear ();

lcd.setCursor (2, 0);

lcd.print ("КИРҮҮ четке кагылды !!!");

lcd.setCursor (0, 2);

lcd.print ("Системаны кайра жүктөө…");

кечигүү (3000);

resetFunc ();

}

} башка {

lcd.clear ();

lcd.setCursor (2, 0);

lcd.print ("КИРҮҮ четке кагылды !!!");

lcd.setCursor (0, 2);

lcd.print ("Системаны кайра жүктөө…");

кечигүү (3000);

resetFunc ();

}

return finger.fingerID; }

6 -кадам: Бүтүрүү

Мен сизге айтууну унутуп койгон бир нерсе, 2 нерсе - муну мен сүрөткө түшөрдөн мурун кургам, ошондуктан мен кутуну кантип курганымды көрсөтө алган жокмун. Экинчиси, servo бөлүгүн бурулуп жаткан бөлүккө буроо сунушталат. Антпесеңиз, кимдир бирөө суурманы кулпулап турганда тартып, бөлүгүн чечип алышы мүмкүн. Бирок аны буроодон мурун, аны коюуга туура жерди табыңыз, анткени servo белгилүү бир деңгээлге бурулат. Же жөн эле коддо өзгөртө аласыз. Эгерде кээ бир электроника күлкүлүү болуп жатса, анда алардын кээ бирлерине 5В алуунун башка жолун тапкыңыз келиши мүмкүн. Мен манжа изинин сканери жарк эткенде, экран аны менен бир аз жарк этип, серво ызы -чуу чыгарарын байкадым. Серво кыймылдаганда, экран күңүрт болуп калат. Долбоор сизге жакты деп ишенем! Суроолоруңуз болсо, комментарийге калтырыңыз. Мен көп көрсөтмөлөрдү бербейм, бирок аларга мүмкүн болушунча жооп берем!

Сунушталууда: