ล็อครหัส Arduino ล็อคอิเล็กทรอนิกส์อัจฉริยะบน Arduino ทำงานผ่าน Bluetooth - ประตูหน้าเช่น Spiderman รหัสแสดงอยู่ด้านล่าง

13.04.2022

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

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

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

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

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

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

อาร์ดูโน่ ออด
5V วีซีซี
จีเอ็นดี จีเอ็นดี
พิน 5 ไอโอ

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

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

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

ร่าง:

#รวม #รวม #รวม // ห้องสมุด "RFID" #กำหนด SS_PIN 10 #กำหนด RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); uidDec แบบยาวที่ไม่ได้ลงนาม, uidDecTemp; // เพื่อจัดเก็บหมายเลขแท็กในรูปแบบทศนิยม เซอร์โวเซอร์โว; การตั้งค่าเป็นโมฆะ () ( Serial.begin (9600); Serial.println ("กำลังรอการ์ด ... "); SPI.begin (); // การเริ่มต้น SPI / เริ่มต้นบัส SPI mfrc522.PCD_Init (); // การเริ่มต้น MFRC522 / เริ่มต้น MFRC522 การ์ด servo.attach(6); servo.write(0); // ตั้งค่าเซอร์โวเป็นสถานะปิด ) void loop() ( // ค้นหาป้ายกำกับใหม่ถ้า (! mfrc522.PICC_IsNewCardPresent()) ( return; ) // เลือกแท็กถ้า (! 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 ผลลัพธ์ในบรรทัดต่อไปนี้:

ถ้า (uidDec == 3763966293) // เปรียบเทียบ Uid ของแท็ก ถ้ามันเท่ากับอันที่กำหนด เซอร์โวไดรฟ์จะเปิดวาล์ว

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

วิดีโอ:

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

เป็นเวลา 10 ปีที่ครอบครัวของฉันและฉันพยายามปรับปรุงและสร้างความสะดวกสบายสูงสุดในบ้านเดชาของเรา เราสร้าง ซ่อมแซม ฯลฯ บ้าน โรงนา โรงอาบน้ำ…..และในที่สุดก็มาถึงรั้วถนน ประตู และประตูรั้ว ทำเช่นนี้ตามมโนธรรม งบประมาณ และความสะดวก

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

งานมีดังต่อไปนี้:

  1. ล็อคต้องทำงานร่วมกับวิดีโออินเตอร์คอมที่ติดตั้งไว้ก่อนหน้านี้ (เปิดประตูโดยไม่ต้องออกจากบ้าน)
  2. สามารถเปิดประตูด้วยกุญแจธรรมดาและไม่มีกุญแจจากถนนและลานบ้าน
  3. จะพอดีกับงบประมาณที่เหลือมากถึง 5,000 รูเบิล

การค้นหาใน RuNet นำเสนอช่วงราคาต่อไปนี้ตั้งแต่ 7,000 ถึงอนันต์ การซื้อโซลูชันสำเร็จรูปไม่จำเป็นอีกต่อไป และเกิดทางเลือกที่เป็นไปได้มากมาย กล่าวคือ การตัดประตูด้วยตัวเอง!

หลังจากการคำนวณและการคำนวณบางอย่างแล้วก็ตัดสินใจซื้อล็อคระบบเครื่องกลไฟฟ้าราคาประมาณ 2,000 รูเบิล แป้นพิมพ์กันน้ำราคา 350 รูเบิล และไมโครคอนโทรลเลอร์ที่จะขับมาที่นี่ เนื่องจากมีบอร์ด Arduino nano รีเลย์และชิ้นส่วนหลวมและสายไฟบางอันหลายตัว ความแตกต่างระหว่างราคาของชุดอุปกรณ์สำเร็จรูปจึงมากกว่า 4,000 รูเบิล สำหรับฉัน มันเป็นโบนัสที่ยอดเยี่ยมสำหรับกระเป๋าเงินของคุณและการพัฒนาตนเอง

ตอนนี้จากคำพูดสู่การกระทำ:

หลังจากซื้อส่วนประกอบที่จำเป็นทั้งหมดแล้ว ฉันก็เริ่มเลื่อย

แผนภาพการเชื่อมต่อคีย์บอร์ด

ไฟ LED แสดงสถานะเพิ่มเติม (สีขาว, สีเขียว, สีแดง) ของสัญญาณแผงปุ่มกด (อินพุต, รหัสผ่านที่ถูกต้อง, ประตูเปิด, ถูกปฏิเสธ)

  • พิน 9 สีเหลือง
  • พิน 10 สีเขียว
  • พิน 11 สีแดง

แผง (ตาราง) ทำจากลูกแก้ว ตัดเป็นกล่องช็อคโกแลต และเพื่อนบ้านในออฟฟิศยิ้ม แต่คัตเตอร์ที่เล็กที่สุดกลับอ้วนขึ้นเล็กน้อยดังนั้นฉันจึงต้องทำงานกับตะไบเข็ม

มันเป็นวันหยุดสุดสัปดาห์ฉันไปเดชา

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

ขอแนะนำล็อคประตูที่ควบคุมด้วยปุ่ม RF

ล็อคทำงานดังนี้: แสดงกุญแจของเรา (แท็ก RFID) - ล็อคปิด, แสดงกุญแจอีกครั้ง - ล็อคเปิด เพื่อให้เห็นภาพการทำงานของล็อค มีการใช้ไฟ LED สองสี (เส้น) จำนวน 6 ดวง เมื่อปิดไฟสีแดงจะกะพริบ เมื่อเปิดไฟสีเขียวจะกะพริบ หากคุณนำกุญแจของคนอื่นมา ไฟ LED สีแดงจะกะพริบ

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

“เครื่องจักร” ถูกควบคุมด้วยสายไฟสองเส้น ขั้วหนึ่งยืดก้านออก ขั้วกลับขั้วดึงก้านกลับ ที่แรงดันไฟฟ้า 12 โวลต์ กระแสไฟฟ้า 6 แอมแปร์ มาก...
ไม่มีลิมิตสวิตช์ใน "เครื่องจักร"

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

ในแผนภาพ (ด้านบน) แขน “ปิด” จะถูกเน้นด้วยสีแดง และแขน “เปิด” จะถูกเน้นด้วยสีเขียว แขนได้รับพลังงานแยกจากกันผ่านตัวต้านทาน (อยู่ในแหล่งจ่ายไฟ) มีการนำการแยกกำลังของแขนสะพานเพื่อกำจัดผลบวกลวง

คำอธิบาย: ผ่านตัวต้านทาน 33 โอห์ม (ในแผนภาพแหล่งจ่ายไฟ) แรงดันไฟฟ้า 12 โวลต์จะชาร์จตัวเก็บประจุ (2000-μF ในแต่ละแขน) เมื่อแรงดันไฟฟ้าควบคุมมาถึงจากคอนโทรลเลอร์ Arduino_ProMini 168 ไปที่อินพุต "ปิด" (หรือคล้ายกับ "เปิด") ผ่านออปโตคัปเปลอร์ PVT322 - แขนกุญแจที่เกี่ยวข้องจะเปิดขึ้น ในกรณีนี้สิ่งต่อไปนี้จะเกิดขึ้น: ในขณะที่เปิดกุญแจพลังงานจากตัวเก็บประจุจะ "ดึง" มอเตอร์ของ "เครื่องจักร" อย่างมีพลัง เมื่อตัวเก็บประจุคายประจุ (สิ่งนี้เกิดขึ้นอย่างรวดเร็ว) มอเตอร์ของ "เครื่องจักร" จะถูกขับเคลื่อนโดยกระแสที่จำกัดโดยตัวต้านทาน (33 โอห์ม) ด้วยเหตุนี้เมื่อสิ้นสุดกระบวนการ "ปิด" - "เปิด" ล็อคแกนจึงเคลื่อนที่ค่อนข้างช้า

วิธีการควบคุมเครื่องยนต์นี้เหมาะสมที่สุด

วงจรจ่ายไฟเป็นหม้อแปลงไฟฟ้า โดยทั่วไป วงจรล็อคจะใช้พลังงานจากแบตเตอรี่ 12 โวลต์ 2.8 Ah และวงจรจ่ายไฟจะรักษาแบตเตอรี่ให้อยู่ในระดับที่กำหนด ไฟ LED แสดงการทำงานบ่งชี้การทำงานปกติของแหล่งจ่ายไฟ

ไดโอดทั้งหมดคือ 1N4007 (ฉันลืมระบุบนแผนภาพและมีคนถามคำถาม - อันไหน?)

(1) มีการประกอบเครื่องจำกัดกระแสไฟฟ้าสูงสุดแล้ว ตัวต้านทานอาร์ 1 เกณฑ์กระแสบนตั้งไว้ที่ 300 mA
บนโคลงแบบรวม LM317 (2) ประกอบตัวปรับแรงดันไฟฟ้า แรงดันไฟฟ้าเสถียรภาพจะถูกปรับโดยตัวต้านทาน2 - แรงดันไฟฟ้าของแบตเตอรี่ควรเป็น 13.7 โวลต์

แรงดันไฟฟ้าจากแบตเตอรี่จ่ายไปสามจุด
ผ่านตัวต้านทาน (ตัวละ 33 โอห์ม) บน (X), (Y) - แหล่งจ่ายไฟไปที่แขนของปุ่ม "ไดรเวอร์" ของมอเตอร์ "เครื่องจักร"

ฉันประกอบอุปกรณ์ส่วนใหญ่ของฉันจากสิ่งที่ได้รับ โครงการนี้ก็ไม่มีข้อยกเว้น ฉันใช้ตัวเรือนเป็นที่อยู่อาศัย :) จากบัลลาสต์อิเล็กทรอนิกส์:

LEDs No.-2 ... No.-7 เป็นแบบสองสี พวกเขาอยู่ในแถว ใช้เพื่อแสดงภาพกระบวนการ “เปิด” และ “ปิด” ล็อค การจัดแต่ง.

ความคืบหน้าไม่หยุดนิ่งและ "ล็อคอัจฉริยะ" ปรากฏมากขึ้นที่ประตูอพาร์ทเมนต์ โรงรถ และบ้านเรือน

ล็อคที่คล้ายกันจะเปิดขึ้นเมื่อคุณกดปุ่มบนสมาร์ทโฟนของคุณ โชคดีที่สมาร์ทโฟนและแท็บเล็ตเข้ามาในชีวิตประจำวันของเราแล้ว ในบางกรณี “ล็อคอัจฉริยะ” เชื่อมต่อกับ “บริการคลาวด์” เช่น Google Drive และเปิดจากระยะไกล นอกจากนี้ตัวเลือกนี้ยังช่วยให้ผู้อื่นสามารถเข้าถึงการเปิดประตูได้

โปรเจ็กต์นี้จะใช้สมาร์ทล็อคเวอร์ชัน DIY บน Arduino ซึ่งสามารถควบคุมจากระยะไกลได้จากทุกที่ในโลก

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

การล็อคแบบนี้อาจเป็นก้าวแรกที่ยอดเยี่ยมในโครงการสมาร์ทโฮมของคุณ

การตั้งค่าเซ็นเซอร์ลายนิ้วมือ

ในการทำงานกับเซ็นเซอร์ลายนิ้วมือมีไลบรารี่ที่ยอดเยี่ยมสำหรับ Arduino ซึ่งช่วยให้กระบวนการตั้งค่าเซ็นเซอร์ง่ายขึ้นอย่างมาก โปรเจ็กต์นี้ใช้ Arduino Uno บอร์ด Adafruit CC3000 ใช้สำหรับเชื่อมต่ออินเทอร์เน็ต

เริ่มต้นด้วยการเชื่อมต่อพลังงาน:

  • เชื่อมต่อพิน 5V จากบอร์ด Arduino เข้ากับรางไฟฟ้าสีแดง
  • พิน GND จาก Arduino เชื่อมต่อกับรางสีน้ำเงินบนแผงวงจรไร้บัดกรี

มาดูการเชื่อมต่อเซ็นเซอร์ลายนิ้วมือกัน:

  • ขั้นแรกให้เชื่อมต่อสายไฟ ในการดำเนินการนี้ สายสีแดงเชื่อมต่อกับราง +5 V และสายสีดำเชื่อมต่อกับราง GND
  • สายสีขาวของเซ็นเซอร์เชื่อมต่อกับขา 4 บน Arduino
  • สายสีเขียวไปที่ขา 3 บนไมโครคอนโทรลเลอร์

ตอนนี้เรามาดูโมดูล CC3000 กันดีกว่า:

  • เราเชื่อมต่อพิน IRQ จากบอร์ด CC3000 ไปยังพิน 2 บน Arduino
  • VBAT - เพื่อปักหมุด 5
  • CS - เพื่อปักหมุด 10
  • หลังจากนี้คุณจะต้องเชื่อมต่อพิน SPI เข้ากับ Arduino: MOSI, MISO และ CLK - ไปยังพิน 11, 12 และ 13 ตามลำดับ

ในตอนท้ายคุณต้องจ่ายไฟ: Vin - ไปยัง Arduino 5V (รางสีแดงบนแผงวงจรของคุณ) และ GND ถึง GND (รางสีน้ำเงินบนเขียงหั่นขนม)

ภาพของโครงการที่ประกอบเสร็จแล้วแสดงอยู่ด้านล่าง:

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

หากคุณยังไม่ได้ดำเนินการ โปรดสร้างบัญชีกับ Adafruit IO

หลังจากนี้ เราจะก้าวไปสู่ขั้นตอนต่อไปของการพัฒนา "ล็อคอัจฉริยะ" บน Arduino กล่าวคือ การพัฒนาแบบร่างที่จะส่งข้อมูลไปยัง Adafruit IO เนื่องจากโปรแกรมมีขนาดค่อนข้างใหญ่ ในบทความนี้ เราจะเน้นและพิจารณาเฉพาะส่วนหลักของโปรแกรม จากนั้นเราจะให้ลิงก์ไปยัง GitHub ซึ่งคุณสามารถดาวน์โหลดภาพร่างฉบับเต็มได้

ร่างเริ่มต้นด้วยการโหลดไลบรารีที่จำเป็นทั้งหมด:

#รวม

#รวม

#รวม

#รวม "Adafruit_MQTT.h"

#รวม "Adafruit_MQTT_CC3000.h"

#รวม

#รวม >

หลังจากนี้คุณจะต้องแก้ไขภาพร่างเล็กน้อยโดยใส่พารามิเตอร์ของเครือข่าย WiFi ของคุณโดยระบุ SSID และรหัสผ่าน:

#กำหนด WLAN_SECURITY WLAN_SEC_WPA2>

นอกจากนี้ คุณต้องป้อนชื่อและรหัส AIO ของคุณเพื่อเข้าสู่บัญชี Adafruit IO ของคุณ:

#กำหนด AIO_SERVERPORT 1883

#กำหนด AIO_USERNAME "adafruit_io_name"

#กำหนด AIO_KEY "adafruit_io_key">

บรรทัดต่อไปนี้มีหน้าที่รับผิดชอบในการโต้ตอบและประมวลผลข้อมูลจากเซ็นเซอร์ลายนิ้วมือ หากเซ็นเซอร์ถูกเปิดใช้งาน (ลายนิ้วมือตรงกัน) จะมี "1":

const ถ่าน FINGERPRINT_FEED PROGMEM = AIO_USERNAME "/feeds/fingerprint";

ลายนิ้วมือ Adafruit_MQTT_Publish = Adafruit_MQTT_Publish(&mqtt, FINGERPRINT_FEED);

นอกจากนี้ เราจำเป็นต้องสร้างอินสแตนซ์ของวัตถุ SoftwareSerial สำหรับเซ็นเซอร์ของเรา:

ซอฟต์แวร์อนุกรม mySerial(3, 4);

หลังจากนี้เราสามารถสร้างวัตถุสำหรับเซ็นเซอร์ของเราได้:

นิ้ว Adafruit_Fingerprint = Adafruit_Fingerprint(&mySerial);

ภายในภาพร่าง เราระบุว่า ID นิ้วใดควรเปิดใช้งานการล็อคในอนาคต ตัวอย่างนี้ใช้ 0 ซึ่งสอดคล้องกับ ID ของลายนิ้วมือแรกที่เซ็นเซอร์ใช้:

รหัสนิ้ว int = 0;

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

การเปิดใช้งาน intCounter = 0;

int การเปิดใช้งานครั้งล่าสุด = 0;

เวลาเปิดใช้งาน int = 10 * 1,000;

ในส่วนเนื้อหาของฟังก์ชัน setup() เราจะเริ่มต้นเซ็นเซอร์ลายนิ้วมือและตรวจสอบให้แน่ใจว่าชิป CC3000 เชื่อมต่อกับเครือข่าย WiFi ของคุณ

ในเนื้อความของฟังก์ชัน loop() เราเชื่อมต่อกับ Adafruit IO บรรทัดต่อไปนี้รับผิดชอบสิ่งนี้:

หลังจากเชื่อมต่อกับแพลตฟอร์ม Adafruit IO เราจะตรวจสอบลายนิ้วมือสุดท้าย หากตรงกันและไม่ได้เปิดใช้งานการล็อค เราจะส่ง "1" ไปที่ Adafruit IO เพื่อประมวลผล:

ถ้า (รหัสลายนิ้วมือ == รหัสลายนิ้วมือ && lockState == เท็จ) (

Serial.println(F("ได้รับสิทธิ์การเข้าถึงแล้ว!"));

lockState = จริง;

Serial.println(F("ล้มเหลว"));

Serial.println(F("ตกลง!"));

LastActivation = มิลลิวินาที();

หากภายในฟังก์ชัน loop() มีการเปิดใช้งานการล็อคและเราถึงค่าการหน่วงเวลาที่ระบุไว้ข้างต้นแล้ว เราจะส่ง "0":

ถ้า ((activationCounter - LastActivation > การเปิดใช้งาน) && lockState == จริง) (

lockState = เท็จ;

ถ้า (! ลายนิ้วมือเผยแพร่ (สถานะ)) (

Serial.println(F("ล้มเหลว"));

Serial.println(F("ตกลง!"));

คุณสามารถดาวน์โหลดโค้ดเวอร์ชันล่าสุดได้ที่ GitHub

ถึงเวลาทดสอบโครงการของเราแล้ว! อย่าลืมดาวน์โหลดและติดตั้งไลบรารี่ที่จำเป็นทั้งหมดสำหรับ Arduino!

ตรวจสอบให้แน่ใจว่าคุณได้ทำการเปลี่ยนแปลงที่จำเป็นทั้งหมดกับร่างและอัปโหลดไปยัง Arduino ของคุณ หลังจากนั้นให้เปิดหน้าต่าง Serial Monitor

เมื่อ Arduino เชื่อมต่อกับเครือข่าย WiFi เซ็นเซอร์ลายนิ้วมือจะเริ่มกะพริบเป็นสีแดง วางนิ้วของคุณบนเซ็นเซอร์ ควรแสดงหมายเลข ID ในหน้าต่างมอนิเตอร์แบบอนุกรม หากตรงกัน ข้อความ "ตกลง!" จะปรากฏขึ้น ซึ่งหมายความว่าข้อมูลได้ถูกส่งไปยังเซิร์ฟเวอร์ Adafruit IO แล้ว

แผนผังและภาพร่างสำหรับการกำหนดค่าล็อคเพิ่มเติมโดยใช้ตัวอย่าง LED

ตอนนี้เรามาดูส่วนของโครงการที่รับผิดชอบโดยตรงในการควบคุมล็อคประตูกัน หากต้องการเชื่อมต่อกับเครือข่ายไร้สายและเปิดใช้งาน/ปิดใช้งานการล็อค คุณจะต้องมีโมดูล Adafruit ESP8266 เพิ่มเติม (โมดูล ESP8266 ไม่จำเป็นต้องมาจาก Adafruit) จากตัวอย่างด้านล่าง คุณสามารถประเมินความง่ายในการแลกเปลี่ยนข้อมูลระหว่างสองแพลตฟอร์ม (Arduino และ ESP8266) โดยใช้ Adafruit IO

ในส่วนนี้เราจะไม่ทำงานโดยตรงกับการล็อค แต่เราจะเชื่อมต่อ LED เข้ากับพินที่จะเชื่อมต่อล็อคในภายหลังแทน นี่จะทำให้เรามีโอกาสทดสอบโค้ดของเราโดยไม่ต้องเจาะลึกรายละเอียดของการออกแบบตัวล็อค

รูปแบบค่อนข้างง่าย: ก่อนอื่นให้ติดตั้ง ESP8266 บนเขียงหั่นขนม หลังจากนั้นให้ติดตั้ง LED อย่าลืมว่าขายาว (บวก) ของ LED เชื่อมต่อผ่านตัวต้านทาน ขาที่สองของตัวต้านทานเชื่อมต่อกับพิน 5 บนโมดูล ESP8266 เราเชื่อมต่อ LED ตัวที่สอง (แคโทด) เข้ากับพิน GND บน ESP8266

วงจรที่ประกอบเสร็จสมบูรณ์แสดงไว้ในภาพด้านล่าง


ตอนนี้เรามาดูแบบร่างที่เราใช้สำหรับโปรเจ็กต์นี้ ขอย้ำอีกครั้งว่าโค้ดมีขนาดค่อนข้างใหญ่และซับซ้อน ดังนั้นเราจะดูเฉพาะส่วนหลักเท่านั้น:

เราเริ่มต้นด้วยการเชื่อมต่อไลบรารีที่จำเป็น:

#รวม

#รวม "Adafruit_MQTT.h"

#รวม "Adafruit_MQTT_Client.h"

การกำหนดการตั้งค่า WiFi:

#กำหนด WLAN_SSID "your_wifi_ssid"

#กำหนด WLAN_PASS "your_wifi_password"

#กำหนด WLAN_SECURITY WLAN_SEC_WPA2

เรายังกำหนดค่าพารามิเตอร์ Adafruit IO อีกด้วย เช่นเดียวกับในส่วนก่อนหน้า:

#define AIO_SERVER "io.adafruit.com"

#กำหนด AIO_SERVERPORT 1883

#กำหนด AIO_USERNAME "adafruit_io_username"

#กำหนด AIO_KEY "adafruit_io_key"

เราระบุว่าเราเชื่อมต่อ LED กับพินใด (ในอนาคตนี่จะเป็นล็อคหรือรีเลย์ของเรา):

อินท์รีเลย์พิน = 5;

การโต้ตอบกับเซ็นเซอร์ลายนิ้วมือ ดังเช่นในส่วนก่อนหน้า:

const ถ่าน LOCK_FEED PROGMEM = AIO_USERNAME "/feeds/lock";

Adafruit_MQTT_สมัครสมาชิกล็อค = Adafruit_MQTT_Subscribe(&mqtt, LOCK_FEED);

ในส่วนเนื้อหาของฟังก์ชัน setup() เราระบุว่าพินที่ LED เชื่อมต่ออยู่ควรทำงานในโหมด OUTPUT:

pinMode(รีเลย์พิน, เอาท์พุต);

ภายในลูป loop() เราจะตรวจสอบก่อนว่าเราเชื่อมต่อกับ Adafruit IO หรือไม่:

หลังจากนี้เราจะตรวจสอบว่ารับสัญญาณอะไรอยู่ หากส่ง "1" เราจะเปิดใช้งานพินที่เราประกาศไว้ก่อนหน้านี้ซึ่ง LED ของเราเชื่อมต่ออยู่ หากเราได้รับ "0" เราจะโอนผู้ติดต่อไปที่สถานะ "ต่ำ":

Adafruit_MQTT_สมัครสมาชิก *สมัครสมาชิก;

ในขณะที่ ((สมัครสมาชิก = mqtt.readSubscription(1,000))) (

ถ้า (สมัครสมาชิก == &ล็อค) (

Serial.print(F("ได้: "));

Serial.println((ถ่าน *)lock.lastread);

// บันทึกคำสั่งลงในข้อมูลสตริง

คำสั่ง String = String((char *)lock.lastread);

ถ้า (คำสั่ง == "0") (

digitalWrite (รีเลย์พิน, ต่ำ);

ถ้า (คำสั่ง == "1") (

digitalWrite (รีเลย์พิน, สูง);

คุณสามารถค้นหาสเก็ตช์เวอร์ชันล่าสุดได้บน GitHub

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

หากต้องการตั้งโปรแกรมชิป ESP8266 คุณสามารถใช้ตัวแปลง USB-FTDI แบบธรรมดาได้

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

การทดสอบโครงการ

ตอนนี้เรามาเริ่มการทดสอบกันดีกว่า! ไปที่เมนูผู้ใช้ของ Adafruit IO ใต้เมนูฟีด ตรวจสอบว่าสร้างลายนิ้วมือและช่องล็อคหรือไม่ (ในหน้าจอการพิมพ์ด้านล่างคือเส้นลายนิ้วมือและล็อค):


หากไม่มี คุณจะต้องสร้างมันขึ้นมาด้วยตนเอง

ตอนนี้เราต้องแน่ใจว่ามีการแลกเปลี่ยนข้อมูลระหว่างลายนิ้วมือและช่องล็อค ช่องล็อคต้องใช้ค่า "1" เมื่อช่องลายนิ้วมือรับค่า "1" และในทางกลับกัน

ในการดำเนินการนี้ เราใช้เครื่องมือ Adafruit IO ที่ทรงพลังมาก: ทริกเกอร์ ทริกเกอร์เป็นเงื่อนไขหลักที่คุณสามารถนำไปใช้กับช่องที่กำหนดค่าได้ นั่นคือสามารถใช้เพื่อเชื่อมต่อระหว่างสองช่องสัญญาณได้

สร้างทริกเกอร์เชิงโต้ตอบใหม่จากส่วนทริกเกอร์ใน Adafruit IO ซึ่งจะให้ความสามารถในการแลกเปลี่ยนข้อมูลระหว่างเซ็นเซอร์ลายนิ้วมือและช่องล็อค:


นี่คือสิ่งที่ควรมีลักษณะเช่นนี้เมื่อมีการกำหนดค่าทริกเกอร์ทั้งสอง:

ทั้งหมด! ตอนนี้เราสามารถทดสอบโครงการของเราได้แล้ว! เราวางนิ้วบนเซ็นเซอร์และดูว่า Arduino เริ่มกระพริบตาด้วย LED ที่สอดคล้องกับการส่งข้อมูลได้อย่างไร หลังจากนั้นไฟ LED บนโมดูล ESP8266 ควรเริ่มกระพริบ ซึ่งหมายความว่าได้เริ่มรับข้อมูลผ่าน MQTT แล้ว ไฟ LED บนแผงวงจรควรเปิดขึ้นในขณะนี้

หลังจากการหน่วงเวลาที่คุณกำหนดไว้ในแบบร่าง (ค่าเริ่มต้นคือ 10 วินาที) ไฟ LED จะดับลง ยินดีด้วย! คุณสามารถควบคุม LED ด้วยลายนิ้วมือของคุณได้จากทุกที่ในโลก!

การตั้งค่าล็อคอิเล็กทรอนิกส์

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

ในการเชื่อมต่อล็อคโดยตรงคุณจะต้องมีส่วนประกอบเพิ่มเติม: แหล่งจ่ายไฟ 12 V, แจ็คสำหรับเชื่อมต่อพลังงาน, ทรานซิสเตอร์ (ในตัวอย่างนี้ใช้ IRLB8721PbF MOSFET แต่คุณสามารถใช้อันอื่นได้เช่นทรานซิสเตอร์สองขั้ว TIP102 หากคุณใช้ทรานซิสเตอร์แบบไบโพลาร์ คุณจะต้องเพิ่มตัวต้านทาน

ด้านล่างนี้เป็นแผนภาพไฟฟ้าสำหรับเชื่อมต่อส่วนประกอบทั้งหมดเข้ากับโมดูล ESP8266:


โปรดทราบว่าหากคุณใช้ทรานซิสเตอร์ MOSFET คุณไม่จำเป็นต้องมีตัวต้านทานระหว่างพิน 5 ของโมดูล ESP8266 กับทรานซิสเตอร์

โครงการที่ประกอบเสร็จสมบูรณ์แสดงไว้ในภาพด้านล่าง:


จ่ายไฟให้กับโมดูล ESP8266 โดยใช้โมดูล FTDI และเชื่อมต่อแหล่งจ่ายไฟ 12V เข้ากับแจ็ค หากคุณใช้หมุดที่แนะนำข้างต้นในการเชื่อมต่อ คุณจะไม่ต้องเปลี่ยนแปลงอะไรในภาพร่าง

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

การพัฒนาเพิ่มเติมของโครงการ Smart Lock

โครงการของเราได้เปิดตัวการควบคุมระยะไกลของล็อคประตูโดยใช้ลายนิ้วมือ

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

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

แสดงความคิดเห็น คำถาม และแบ่งปันประสบการณ์ส่วนตัวของคุณด้านล่าง แนวคิดและโครงการใหม่ ๆ มักเกิดในการสนทนา!

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

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

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

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

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

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

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

ส่วนที่สอง