ล็อครหัส Arduino การทำล็อค RFID ด้วย Arduino

ในบทความนี้ฉันจะแสดงวิธีสร้างรหัสล็อคจาก Arduino ในการทำเช่นนี้ เราต้องการไฟ LED สีแดงและสีเขียว ออด Arduino nano จอ LCD พร้อมตัวแปลง I2C เซอร์โวไดรฟ์ และแป้นพิมพ์เมทริกซ์ขนาด 4x4 เมื่อเปิดเครื่อง หน้าจอจะเขียนว่า "Enter code",

ไฟ LED สีแดงจะเปิดขึ้น

และสีเขียวจะดับลง เซอร์โวจะถูกตั้งค่าเป็น 0 ° เมื่อป้อนตัวเลขแล้ว * จะสว่างขึ้นบนหน้าจอ

หากป้อนรหัสไม่ถูกต้อง หน้าจอจะแสดง "Enter cod" หากรหัสถูกต้อง จะมีเสียงบี๊บ เซอร์โวจะหมุน 180° หน้าจอจะขึ้นว่า "เปิด"

ไฟ LED สีเขียวจะเปิดขึ้น

และสีแดงจะปิด หลังจาก 3 วินาที เซอร์โวจะกลับสู่ตำแหน่งเริ่มต้น ไฟ LED สีแดงจะเปิดขึ้น และไฟ LED สีเขียวจะดับลง จอแสดงผลจะเขียนว่า "ปิด",

จากนั้นหน้าจอจะเขียนว่า "Enter code." ตอนนี้เกี่ยวกับโครงการ ก่อนอื่นเราเชื่อมต่อ Arduino กับสายไฟด้วย เขียงหั่นขนม(หน้าสัมผัสไฟฟ้า)

จากนั้นเราเชื่อมต่อแป้นพิมพ์เมทริกซ์กับผู้ติดต่อ D9 - D2

จากนั้นเซอร์โว เราเชื่อมต่อกับพิน 10

LED สีแดงที่ขา 11

สีเขียว - เพื่อตรึง 12

Buzzer - เพื่อพิน 13

ตอนนี้อัปโหลดร่าง

#รวม #รวม #รวม #รวม iarduino_KB KB(9, 8, 7, 6, 5, 4, 3, 2); LiquidCrystal_I2C จอแอลซีดี (0x27, 16, 2); เซอร์โวเซอร์โว int pass = (3, 6, 1, 8); int ใน; int r = 11; int ก. = 12; การตั้งค่าเป็นโมฆะ () ( KB.begin(KB1); pinMode(r, OUTPUT); pinMode(g, OUTPUT); lcd.init(); lcd.backlight(); digitalWrite(g, LOW); digitalWrite(r, HIGH) ); servo.attach(10); servo.write(0); lcd.setCursor(0, 0); ) void loop() ( lcd.clear(); lcd.print("Enter code."); ในขณะที่ ( !KB.check(KEY_DOWN)) ( ล่าช้า(1); ) ใน = KB.getNum; lcd.clear(); lcd.setCursor(0, 0); lcd.print("*"); while (!KB.check(KEY_DOWN)) ตรวจสอบ (KEY_DOWN)) (ล่าช้า(1); ) ใน = KB.getNum; lcd.print("*"); ในขณะที่ (!KB.check(KEY_DOWN)) (ล่าช้า(1); ) ใน = KB.getNum; lcd.print("*"); while (!KB.check(KEY_DOWN)) ( delay(1); ) in = KB.getNum; lcd.print("*"); if (in == pass) ( if (ใน == ผ่าน) ( ถ้า (ใน == ผ่าน) ( ถ้า (ใน == ผ่าน) ( lcd.clear(); lcd.setCursor(0, 0); lcd.print("Open."); tone( 13, 400, 750); servo.write (180); digitalWrite (r, LOW); digitalWrite (g, สูง); ความล่าช้า (3000); lcd.clear (); lcd.setCursor (0, 0); จอแอลซีดี พิมพ์ ("ปิด."); โทน (13, 300, 700); servo.write (0); digitalWrite (g, LOW); digitalWrite (r, สูง); dela ปี(1000); ) ) ) ) )

นั่นคือทั้งหมดที่ สนุกกับการล็อครหัส!

รายการองค์ประกอบวิทยุ

การกำหนด พิมพ์ นิกาย ปริมาณ บันทึกร้านค้าแผ่นจดบันทึกของฉัน
E1 บอร์ด Arduino

Arduino นาโน 3.0

1 5V ไปยังแผ่นจดบันทึก
E8, E9 ตัวต้านทาน

220 โอห์ม

2 smd ไปยังแผ่นจดบันทึก
E6 ไดโอดเปล่งแสง

AL102G

1 สีแดง ไปยังแผ่นจดบันทึก
E7 ไดโอดเปล่งแสง

AL307G

1 สีเขียว ไปยังแผ่นจดบันทึก
E3 จอ LCDด้วยอินเทอร์เฟซ I2C1 แสงไฟสีเขียว ไปยังแผ่นจดบันทึก
E5 เซอร์โวSG901 180 องศา ไปยังแผ่นจดบันทึก
E2 Buzzer5V1 บู ไปยังแผ่นจดบันทึก
E4 แป้นพิมพ์4x41 เมทริกซ์ ไปยังแผ่นจดบันทึก
ไม่ เขียงหั่นขนม640 คะแนน1 โดยไม่ต้องบัดกรี

กุญแจรหัส DIY บน Arduino


พื้นหลัง

มันเกิดขึ้นมากจนเราตัดสินใจติดตั้งรหัสล็อคที่ประตูของเราในที่ทำงาน เพราะเมื่อเราวิ่งเข้าไปเรื่อย ๆ เราออกจากสำนักงาน ประตูที่จะต้องปิดตลอดเวลาเมื่อไม่มีคนอาศัยอยู่ กุญแจมักจะถูกลืมอยู่ข้างใน โดยทั่วไปแล้ว เราตัดสินใจว่ารหัสล็อคเป็นวิธีที่ดี

หลังจากค้นหาของตามตลาดนัดและอีเบย์ของจีนแล้ว ฉันไม่พบอะไรที่ถูกและจริงจังมากหรือน้อยและตัดสินใจทำเอง ฉันจะจองทันทีว่าเลือกแพลตฟอร์ม Arduino เพราะความเรียบง่าย เนื่องจากไม่มีประสบการณ์เกี่ยวกับไมโครคอนโทรลเลอร์เลย

ที่ประตู ด้านนอกของประตู ควรมีแป้นพิมพ์สำหรับใส่รหัสผ่าน และโครงสร้างที่เหลือจะยึดไว้ด้านใน ใช้สวิตช์กกเพื่อควบคุมการปิดประตูโดยสมบูรณ์ ออกจากสำนักงานมีคนกด "*" บนแป้นพิมพ์และโดยไม่ต้องรอให้ประตูปิดประตูที่ใกล้ชิดกว่าจะไปเกี่ยวกับธุรกิจของเขาเมื่อประตูปิดสนิทสวิตช์กกจะปิดและล็อคจะปิด ประตูเปิดโดยป้อนรหัสผ่าน 4 หลักแล้วกด "#"

เครื่องประดับ

Arduino UNO = 18 เหรียญ
Arduino protoshield + เขียงหั่นขนม = $6
L293D = $1
มัดสายไฟ 30 ชิ้นสำหรับกระดานเพาะพันธุ์ = $4
ช่องเสียบ RJ45 2 ช่อง = $4
ปลั๊ก RJ45 2 อัน = 0.5 เหรียญสหรัฐ
ตัวกระตุ้นเซ็นทรัลล็อค = 250 รูเบิล
สวิตช์กก = ขาดฟรีจากหน้าต่างเก่า
โลหะ Espagnolette ขนาดมหึมา = ฟรี
เคสจากดุม D-LINK เก่า เหล็ก 1.5 mm = ฟรี
แหล่งจ่ายไฟจากฮับ D-LINK เดียวกันสำหรับ 12 และ 5v = ฟรีเช่นกัน
สกรูและน็อตจำนวนมากสำหรับยึดสิ่งของทั้งหมดนี้เข้ากับเคส = 100 รูเบิล
แผงควบคุมจาก สัญญาณกันขโมย= ฟรี

รวม: $33.5 และ 350 rubles

คุณพูดไม่น้อยและคุณจะพูดถูก แต่คุณต้องจ่ายเพื่อความสุข! และเป็นการดีเสมอที่จะรวบรวมบางสิ่งด้วยมือของคุณเอง นอกจากนี้ การออกแบบสามารถลดราคาได้อย่างมากหากคุณใช้ MK เปล่าโดยไม่มี Arduino

การเตรียมการประกอบ

ฉันอยากจะพูดสองสามคำเกี่ยวกับการซื้อองค์ประกอบหลักของการออกแบบแอคทูเอเตอร์ ที่ร้านขายรถยนต์ในท้องถิ่น พวกเขาเสนอแอคทูเอเตอร์ให้ฉันสองประเภท: "มีสายสองสายและมีห้าสาย" ตามที่พนักงานขายบอก พวกเขาเหมือนกันทุกประการ และความแตกต่างในจำนวนสายไฟไม่ได้มีความหมายอะไรเลย อย่างไรก็ตาม มันกลับกลายเป็นว่าไม่เป็นเช่นนั้น! ฉันเลือกอุปกรณ์ที่มีสายไฟสองเส้น ใช้ไฟ 12v ดีไซน์แบบห้าสายมีสวิตช์จำกัดเพื่อควบคุมการเคลื่อนไหวของคันโยก ฉันรู้ว่าฉันซื้อมาผิดก็ต่อเมื่อฉันถอดมันออกจากกันและมันก็สายเกินไปที่จะเปลี่ยน ระยะชักของคันโยกนั้นสั้นเกินไปที่จะดันสลักได้อย่างเหมาะสม ดังนั้นจึงจำเป็นต้องปรับเปลี่ยนเล็กน้อย กล่าวคือ ถอดแหวนรองยางสองอันออกซึ่งจะทำให้จังหวะของคันโยกแอคชูเอเตอร์สั้นลง การทำเช่นนี้ต้องเลื่อยร่างกายตาม ด้วยเลื่อยวงเดือนธรรมดาเพราะเครื่องซักผ้าที่สองอยู่ข้างใน เทปพันท่อสีน้ำเงินสำหรับเราเช่นเคย ช่วยเราประกอบกลับในภายหลังได้เสมอ

ในการควบคุมมอเตอร์แอคชูเอเตอร์ ไดรเวอร์มอเตอร์ L293D ถูกใช้ ซึ่งสามารถทนต่อโหลดสูงสุดได้ถึง 1200 mA ในกรณีของเรา เมื่อมอเตอร์แอคทูเอเตอร์หยุด โหลดสูงสุดเพิ่มขึ้นเป็น 600 mA เท่านั้น

ผู้ติดต่อจากแป้นพิมพ์ ลำโพง และไฟ LED สองดวงถูกลบออกจากแผงควบคุมจากสัญญาณเตือนความปลอดภัย รีโมตคอนโทรลและอุปกรณ์หลักควรจะเชื่อมต่อโดยใช้ขั้วต่อแบบบิดเกลียวและ RJ45

การเขียนโปรแกรม

เนื่องจากฉันไม่เคยมีประสบการณ์กับการเขียนโปรแกรม Arduino มาก่อนเลยจนถึงตอนนี้ ฉันใช้ประโยชน์จากการพัฒนาและบทความของผู้อื่นจากเว็บไซต์ arduino.cc ใครสนใจสามารถดูรหัสน่าเกลียดนี้ได้ :)

ภาพถ่ายและวิดีโอ

โฮสต์ของช่อง youtube "AlexGyver" ถูกขอให้ทำล็อคอิเล็กทรอนิกส์ด้วยมือของเขาเอง ยินดีต้อนรับสู่วงจรวิดีโอเกี่ยวกับการล็อคอิเล็กทรอนิกส์บน Arduino ใน ในแง่ทั่วไปอาจารย์จะอธิบายความคิด

มีหลายตัวเลือกสำหรับการสร้างระบบ ล็อคอิเล็กทรอนิกส์. ส่วนใหญ่มักใช้ล็อกประตู ลิ้นชัก ตู้ และยังสร้างที่ซ่อนและตู้เซฟลับ ดังนั้นคุณต้องสร้างเลย์เอาต์ที่สะดวกในการทำงานและคุณสามารถแสดงโครงสร้างระบบได้ชัดเจนและละเอียดจากภายในและภายนอก ดังนั้นฉันจึงตัดสินใจทำกรอบที่มีประตู สิ่งนี้จะต้อง แท่งสี่เหลี่ยม 30 x 30. ไม้อัด 10 มม. บานพับประตู. ตอนแรกฉันต้องการทำกล่องไม้อัด แต่ฉันจำได้ว่าทุกอย่างในห้องเกลื่อนไปด้วยอะไหล่ ไม่มีที่ไหนที่จะใส่กล่องดังกล่าว ดังนั้นจะทำการจัดวาง หากมีคนต้องการใส่กุญแจอิเล็กทรอนิกส์ให้ตัวเองจากนั้นดูที่เลย์เอาต์คุณสามารถทำซ้ำทุกอย่างได้อย่างง่ายดาย

ทุกสิ่งที่คุณต้องการสำหรับปราสาทมีอยู่ในร้านค้าจีนแห่งนี้

เป้าหมายคือการพัฒนาวงจรและเฟิร์มแวร์ที่มีประสิทธิภาพสูงสุดสำหรับ ล็อคอิเล็กทรอนิกส์. คุณจะสามารถใช้ผลลัพธ์เหล่านี้ในการติดตั้งระบบเหล่านี้บนประตู ลิ้นชัก ตู้ และสถานที่หลบซ่อนของคุณได้

ประตูพร้อมแล้ว ตอนนี้คุณต้องหาวิธีเปิดและปิดด้วยระบบอิเล็กทรอนิกส์ เพื่อจุดประสงค์เหล่านี้ สลักโซลินอยด์อันทรงพลังจาก aliexpress นั้นเหมาะสม (ลิงก์ไปยังร้านค้าด้านบน) หากคุณใช้แรงดันไฟฟ้ากับขั้ว เครื่องจะเปิดขึ้น ความต้านทานของคอยล์อยู่ที่เกือบ 12 โอห์ม ซึ่งหมายความว่าที่แรงดัน 12 โวลต์ คอยล์จะกินประมาณ 1 แอมแปร์ จะรับมือกับงานนี้และ แบตเตอรี่ลิเธียมและเพิ่มโมดูล เราปรับให้เข้ากับแรงดันไฟฟ้าที่เหมาะสม แม้ว่าอาจจะมากกว่าเล็กน้อย ห่าติดอยู่กับ ข้างในประตูในระยะไกลเพื่อไม่ให้ขอบเกาะติดและปิดกระแทกได้ ห่าควรเป็นคู่ในรูปแบบของกล่องโลหะ การใช้โดยไม่ได้ใช้งานจะไม่สะดวกและไม่ถูกต้อง เราจะต้องวางขั้นตอน อย่างน้อยก็สร้างลักษณะการทำงานปกติ

ในโหมดไม่ได้ใช้งานสลักเปิดตามปกตินั่นคือหากมีที่จับที่ประตูเราให้แรงกระตุ้นเราเปิดประตูด้วยที่จับ แต่ถ้าคุณสปริงมัน วิธีนี้ไม่เหมาะอีกต่อไป ตัวแปลงบูสต์รองรับโหลดไม่ได้ ในการเปิดประตูแบบสปริง คุณจะต้องใช้แบตเตอรี่ขนาดใหญ่ขึ้นและตัวแปลงที่ทรงพลังกว่า หรือแหล่งจ่ายไฟหลักและให้คะแนนความเป็นอิสระของระบบ ร้านค้าในจีนมีความหวือหวา ขนาดใหญ่. พอดีกับกล่อง สามารถจ่ายไฟได้โดยใช้รีเลย์หรือทรานซิสเตอร์มอสเฟต หรือสวิตช์เปิดปิดบนทรานซิสเตอร์ตัวเดียวกัน ตัวเลือกที่น่าสนใจและราคาไม่แพงคือเซอร์โวที่เชื่อมต่อกับก้านสูบที่มีองค์ประกอบการล็อค - สลักหรือวาล์วที่จริงจังกว่า นอกจากนี้ยังอาจต้องใช้เข็มถักที่ทำจากเหล็กซึ่งทำหน้าที่เป็นก้านสูบ ระบบดังกล่าวไม่ต้องการกระแสไฟขนาดใหญ่ แต่มันใช้พื้นที่มากขึ้นและตรรกะการควบคุมที่ฉลาดแกมโกงมากขึ้น

เซอร์โวมีสองประเภท อันทรงพลังขนาดเล็กและขนาดใหญ่ซึ่งสามารถดันเข้าไปในรูได้อย่างง่ายดายด้วยหมุดโลหะที่จริงจัง ทั้งสองตัวเลือกที่แสดงทำงานทั้งสองประตูและ ลิ้นชัก. คุณจะต้องปรับแต่งกล่องให้เป็นรูในผนังเลื่อน

ส่วนที่สอง

ในบทนี้เราจะมาเรียนรู้วิธีการทำ ระบบง่ายๆซึ่งจะปลดล็อคโดย กุญแจอิเล็กทรอนิกส์(เม็ทเคะ).

ในอนาคต คุณสามารถปรับแต่งและขยายฟังก์ชันการทำงานได้ ตัวอย่างเช่น เพิ่มฟังก์ชัน "การเพิ่มคีย์ใหม่และลบออกจากหน่วยความจำ" ในกรณีพื้นฐาน ให้พิจารณาตัวอย่างง่ายๆ เมื่อมีการระบุรหัสคีย์เฉพาะไว้ล่วงหน้าในโค้ดโปรแกรม

ในบทช่วยสอนนี้ เราจะต้อง:

ในการดำเนินโครงการ เราจำเป็นต้องติดตั้งไลบรารี:

2) ตอนนี้ คุณต้องเชื่อมต่อ Buzzer ซึ่งจะให้สัญญาณหากกุญแจทำงานและล็อคเปิดขึ้น และสัญญาณที่สองเมื่อล็อคปิด

เราเชื่อมต่อออดตามลำดับต่อไปนี้:

Arduino Buzzer
5V VCC
GND GND
พิน 5 IO

3) เซอร์โวจะใช้เป็นกลไกการปลดล็อก สามารถเลือกเซอร์โวใดก็ได้ ขึ้นอยู่กับขนาดที่คุณต้องการและแรงที่เซอร์โวสร้างขึ้น เซอร์โวมี 3 พิน:

ชัดเจนยิ่งขึ้น คุณสามารถดูว่าเราเชื่อมต่อโมดูลทั้งหมดในภาพด้านล่างอย่างไร:

ตอนนี้ หากทุกอย่างเชื่อมต่อแล้ว คุณสามารถดำเนินการตั้งโปรแกรมได้

ร่าง:

#รวม #รวม #รวม // ห้องสมุด "RFID" #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); uidDec แบบยาวที่ไม่ได้ลงนาม, uidDecTemp; // เพื่อจัดเก็บหมายเลขแท็กในรูปแบบทศนิยม Servo servo; การตั้งค่าเป็นโมฆะ () ( Serial.begin (9600); Serial.println ("กำลังรอการ์ด ... "); SPI.begin (); // การเริ่มต้น SPI / Init SPI บัส mfrc522.PCD_Init (); // การเริ่มต้น MFRC522 / Init MFRC522 card.servo.attach(6); servo.write(0); // set servo to closed state ) void loop() ( // ค้นหาป้ายกำกับใหม่ if (! mfrc522.PICC_IsNewCardPresent()) ( return; ) // เลือกแท็ก if (! mfrc522.PICC_ReadCardSerial()) ( return; ) uidDec = 0; // การออกหมายเลขซีเรียลของแท็กสำหรับ (ไบต์ i = 0; i< mfrc522.uid.size; i++) { uidDecTemp = mfrc522.uid.uidByte[i]; uidDec = uidDec * 256 + uidDecTemp; } Serial.println("Card UID: "); Serial.println(uidDec); // Выводим UID метки в консоль. if (uidDec == 3763966293) // Сравниваем Uid метки, если он равен заданому то серва открывает. { tone(5, 200, 500); // Делаем звуковой сигнал, Открытие servo.write(90); // Поворациваем серву на угол 90 градусов(Отпираем какой либо механизм: задвижку, поворациваем ключ и т.д.) delay(3000); // пауза 3 сек и механизм запирается. tone(5, 500, 500); // Делаем звуковой сигнал, Закрытие } servo.write(0); // устанавливаем серву в закрытое сосотояние }

มาวิเคราะห์ร่างในรายละเอียดเพิ่มเติม:

ในการค้นหา UID ของการ์ด (ป้ายกำกับ) คุณต้องเขียนแบบร่างนี้ไปยัง Arduino ประกอบวงจรที่อธิบายข้างต้น และเปิดคอนโซล (การตรวจสอบพอร์ตอนุกรม) เมื่อคุณนำแท็กไปที่ RFID ตัวเลขจะปรากฏในคอนโซล

ต้องป้อน UID ที่เป็นผลลัพธ์ในบรรทัดต่อไปนี้:

If (uidDec == 3763966293) // เปรียบเทียบ Uid ของป้ายกำกับ หากเท่ากับค่าที่ระบุ เซอร์โวจะเปิดวาล์ว

สำหรับการ์ดแต่ละใบ ตัวระบุนี้จะไม่ซ้ำกันและไม่ซ้ำกัน ดังนั้น เมื่อคุณแสดงบัตรที่มี ID ที่คุณตั้งค่าไว้ในโปรแกรม ระบบจะเปิดการเข้าถึงโดยใช้เซอร์โว

วิดีโอ:

มีอะไรให้อ่านอีกบ้าง