- วัสดุที่จำเป็น
- โมดูลเซ็นเซอร์ลายนิ้วมือ GT511C3 (FPS)
- เชื่อมต่อเซ็นเซอร์พิมพ์ลายนิ้วมือ GT511C3 กับ Arduino
- Arduino พร้อม GT511C3
- การเขียนโปรแกรม Arduino สำหรับ GT511C3 Finger Print Sensor
- การทำงานของเซ็นเซอร์พิมพ์ลายนิ้วมือ GT511C3 กับ Arduino
Biometrics ถูกใช้เป็นระบบพิสูจน์ตัวตนที่เชื่อถือได้มาเป็นเวลานานแล้ว ปัจจุบันมีระบบไบโอเมตริกซ์ที่ซับซ้อนซึ่งสามารถระบุบุคคลได้ด้วยจังหวะการเต้นของหัวใจหรือแม้กระทั่งจากดีเอ็นเอของเขา วิธีการอื่น ๆ ที่เป็นไปได้ ได้แก่ การจดจำเสียงการจดจำใบหน้าการสแกนม่านตาและการสแกนลายนิ้วมือ ซึ่งการจดจำการพิมพ์ลายนิ้วมือเป็นวิธีที่ใช้กันอย่างแพร่หลายเราสามารถค้นหาได้ตั้งแต่ระบบการเข้างานธรรมดาไปจนถึงสมาร์ทโฟนไปจนถึงการตรวจสอบความปลอดภัยและอื่น ๆ อีกมากมาย
ในการกวดวิชานี้เราจะได้เรียนรู้วิธีการใช้งานที่เป็นที่นิยมGT511C3 พิมพ์ลายนิ้วมือเซนเซอร์ (FPS) กับ Arduino มี FPS มากมายและเราได้เรียนรู้วิธีใช้มันเพื่อสร้างการออกแบบเช่นระบบการเข้าร่วมเครื่องลงคะแนนเสียงระบบรักษาความปลอดภัยเป็นต้น แต่ GT511C3 นั้นล้ำหน้ากว่าด้วยความแม่นยำสูงและเวลาตอบสนองที่เร็วขึ้นดังนั้นเราจะได้เรียนรู้วิธีใช้งาน กับ Arduino ที่จะลงทะเบียนลายนิ้วมือที่มันแล้วตรวจสอบลายนิ้วมือเมื่อจำเป็น มาเริ่มกันเลย
วัสดุที่จำเป็น
- Arduino นาโน / UNO
- GT511C3 เซ็นเซอร์พิมพ์ลายนิ้วมือ
- หน้าจอ LCD 16x2
- หม้อ - ตัวต้านทาน 10k และ 1k, 10k, 22k
- ปุ่มกด
- การเชื่อมต่อสายไฟ
- กระดานขนมปัง
โมดูลเซ็นเซอร์ลายนิ้วมือ GT511C3 (FPS)
ก่อนที่จะดำน้ำในโครงการให้เราทำความเข้าใจเกี่ยวกับโมดูลเซ็นเซอร์ลายนิ้วมือ GT511C3และวิธีการทำงาน เซ็นเซอร์นี้แตกต่างกันมากในรูปแบบเซ็นเซอร์ Capacitive และ Ultrasonic Fingerprint ที่ใช้กันทั่วไปในสมาร์ทโฟนของเราGT511C3 เป็นเซ็นเซอร์ลายนิ้วมือแสงซึ่งหมายความว่ามันอาศัยอยู่กับภาพของลายนิ้วมือของคุณให้รู้จักรูปแบบของมัน ใช่คุณอ่านถูกต้องจริงๆแล้วเซ็นเซอร์มีกล้องอยู่ข้างในซึ่งถ่ายภาพลายนิ้วมือของคุณจากนั้นประมวลผลภาพเหล่านี้โดยใช้ ARM Cortex M3 IC ที่มีประสิทธิภาพในตัว ภาพด้านล่างแสดงด้านหน้าและด้านหลังของเซ็นเซอร์พร้อมพิน
ดังที่คุณเห็นเซ็นเซอร์มีกล้อง (จุดดำ) ล้อมรอบด้วยไฟ LED สีน้ำเงินไฟ LED เหล่านี้จะต้องสว่างขึ้นเพื่อให้ได้ภาพที่ชัดเจนของลายนิ้วมือ จากนั้นภาพเหล่านี้จะถูกประมวลผลและแปลงเป็นค่าไบนารีโดยใช้ARM Microcontrollerร่วมกับ EEPROM โมดูลนี้ยังมี LED SMD สีเขียวเพื่อแสดงกำลังไฟ ภาพลายนิ้วมือแต่ละภาพมีขนาด 202x258 พิกเซลความละเอียด 450dpi เซ็นเซอร์สามารถลงทะเบียนเรียนได้ไม่เกิน 200 ลายนิ้วมือและสำหรับแต่ละแม่แบบลายนิ้วมือก็จะระบุรูปแบบหมายเลข 0-199 จากนั้นในระหว่างการตรวจจับสามารถเปรียบเทียบลายนิ้วมือที่สแกนกับเทมเพลตทั้งหมด 200 แบบโดยอัตโนมัติและหากพบว่าตรงกันก็จะให้หมายเลข ID ของลายนิ้วมือนั้นโดยใช้Smack Finger 3.0อัลกอริทึมบนไมโครคอนโทรลเลอร์ ARM เซ็นเซอร์สามารถทำงานได้ตั้งแต่ 3.3V ถึง 6V และสื่อสารผ่านการสื่อสารแบบอนุกรมที่ 9600 หมุดสื่อสาร (Rx และ Tx) มีความทนทานเพียง 3.3V เท่านั้นอย่างไรก็ตามแผ่นข้อมูลไม่ได้ระบุอะไรมากเกี่ยวกับเรื่องนี้ ขาออกของ GT511C3 FPS แสดงอยู่ด้านล่าง
นอกเหนือจากการสื่อสารแบบอนุกรมแล้วโมดูลยังสามารถเชื่อมต่อโดยตรงกับคอมพิวเตอร์ผ่านการเชื่อมต่อ USBโดยใช้หมุดที่แสดงในภาพก่อนหน้า เมื่อเชื่อมต่อกับคอมพิวเตอร์แล้วโมดูลสามารถควบคุมได้โดยใช้แอปพลิเคชัน SDK_DEMO.exe ซึ่งสามารถดาวน์โหลดได้จากลิงค์ แอปพลิเคชั่นนี้ช่วยให้ผู้ใช้สามารถลงทะเบียน / ตรวจสอบ / ลบลายนิ้วมือและจดจำลายนิ้วมือได้ ซอฟต์แวร์นี้ยังช่วยให้คุณอ่านภาพที่เซ็นเซอร์จับได้ซึ่งควรค่าแก่การลองใช้ หรือคุณสามารถใช้ซอฟต์แวร์นี้ได้แม้ว่าเซ็นเซอร์จะเชื่อมต่อกับ Arduino เราจะพูดถึงเรื่องนี้ในบทความนี้ในภายหลัง
คุณสมบัติที่น่าสนใจอีกอย่างเกี่ยวกับเซ็นเซอร์คือปลอกโลหะรอบบริเวณที่ตรวจจับ ขณะที่ผมบอกก่อนหน้านี้ไฟ LED สีฟ้าจะต้องมีการเปิดใช้เซ็นเซอร์ในการทำงานแต่ในแอปพลิเคชั่นที่เซ็นเซอร์ควรรอลายนิ้วมืออย่างแข็งขันจะเป็นไปไม่ได้ที่จะเปิด LED ไว้ตลอดเวลาเนื่องจากจะทำให้เซ็นเซอร์ร้อนขึ้นและทำให้เซ็นเซอร์เสียหาย ดังนั้นในกรณีดังกล่าวสามารถต่อปลอกโลหะเข้ากับพินอินพุตสัมผัสแบบ capacitive ของ MCU เพื่อตรวจจับว่ามีการสัมผัสหรือไม่ ถ้าใช่ไฟ LED สามารถเปิดได้และสามารถเริ่มกระบวนการตรวจจับได้ วิธีนี้ไม่ได้แสดงที่นี่เนื่องจากอยู่นอกขอบเขตของบทความนี้
เมื่อทำงานที่ 3.3V เซ็นเซอร์จะกินไฟประมาณ 130mA ต้องใช้เวลาเกือบ 3 วินาทีในการลงทะเบียนนิ้วและ 1 วินาทีในการระบุ อย่างไรก็ตามหากจำนวนเทมเพลตที่ลงทะเบียนน้อยความเร็วในการจดจำก็จะสูง สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับเซ็นเซอร์คุณสามารถดูเอกสารข้อมูลนี้จาก ADH-Tech ซึ่งเป็นผู้ผลิตโมดูลอย่างเป็นทางการ
เชื่อมต่อเซ็นเซอร์พิมพ์ลายนิ้วมือ GT511C3 กับ Arduino
GT511C3 FPS มีพินพาวเวอร์สองพินซึ่งสามารถขับเคลื่อนด้วยพิน + 5V ของ Arduino และพินสื่อสารสองพิน Rx และ Tx ซึ่งสามารถเชื่อมต่อกับพินดิจิทัลของ Arduino สำหรับการสื่อสารแบบอนุกรม นอกจากนี้เรายังได้เพิ่มปุ่มกดและ LCD เพื่อแสดงสถานะเซ็นเซอร์ แผนภาพวงจรที่สมบูรณ์สำหรับการเชื่อมต่อ GT511C3 FPS กับ Arduinoมีอยู่ด้านล่าง
เนื่องจากพิน Rx และ Tx มีความทนทานต่อ 3.3V เราจึงใช้ตัวแบ่งที่เป็นไปได้ที่ด้าน Rx เพื่อแปลง 5V เป็น 3.3V ตัวต้านทาน 10k และตัวต้านทาน 22k แปลงสัญญาณ 5V จากขา Arduino Tx เป็น 3.3V ก่อนที่จะถึงพิน Rx ของ FPS เซ็นเซอร์ยังสามารถใช้พลังงานจาก 3.3V แต่ตรวจสอบให้แน่ใจว่า Arduino ของคุณสามารถจ่ายกระแสไฟฟ้าเพียงพอสำหรับเซ็นเซอร์ เราได้เชื่อมต่อ LCD ในโหมด 4 บิตที่ขับเคลื่อนโดยขา 5V ของ Arduino ปุ่มกดเชื่อมต่อกับพิน D2 ซึ่งเมื่อกดจะทำให้โปรแกรมอยู่ในโหมดลงทะเบียนซึ่งผู้ใช้สามารถลงทะเบียนนิ้วใหม่ได้ หลังจากลงทะเบียนโปรแกรมแล้วจะยังคงอยู่ในโหมดการสแกนเพื่อสแกนนิ้วที่สัมผัสเซ็นเซอร์
Arduino พร้อม GT511C3
ดังที่ได้กล่าวไว้ก่อนหน้านี้ GT511C3 FPS สื่อสารผ่านการสื่อสารแบบอนุกรมเซ็นเซอร์เข้าใจรหัสฐานสิบหกและสำหรับรหัสฐานสิบหกแต่ละรหัสจะมีการดำเนินการเฉพาะ คุณสามารถตรวจสอบแผ่นข้อมูลเพื่อทราบค่าฐานสิบหกทั้งหมดและฟังก์ชันที่เกี่ยวข้องหากคุณสนใจ แต่โชคดีสำหรับเรา bboyho ได้สร้างไลบรารีไว้แล้วซึ่งสามารถใช้กับ Arduino ได้โดยตรงเพื่อลงทะเบียนและตรวจจับลายนิ้วมือ สามารถดาวน์โหลดไลบรารี Github สำหรับ GT511C3 FPS ได้จากลิงค์ด้านล่าง
GT511C3 Arduino Library
ลิงค์จะดาวน์โหลดไฟล์ ZIP จากนั้นคุณจะต้องเพิ่มลงใน Arduino IDE ของคุณโดยทำตามคำสั่ง Sketch -> Include Library -> Add. ZIP Library เมื่อคุณเพิ่มไลบรารีแล้วให้รีสตาร์ท IDE ของคุณและคุณจะสามารถค้นหาโปรแกรม e xample สำหรับ GT511C3 FSP ภายใต้ไฟล์ -> ตัวอย่าง -> เครื่องสแกนลายนิ้วมือ TTLดังที่แสดงด้านล่าง
คุณควรเห็นโปรแกรมตัวอย่างสี่โปรแกรมโปรแกรมการกะพริบจะกะพริบสีน้ำเงินที่นำบน FPS โปรแกรมการลงทะเบียนและรหัสนิ้วสามารถใช้เพื่อลงทะเบียนและระบุนิ้วได้ตามนั้น โปรดทราบว่านิ้วหนึ่งครั้งที่ลงทะเบียนแล้วโมดูลจะจำได้เสมอแม้ว่าจะปิดอยู่ก็ตาม
โปรแกรม Serial Pass-through สามารถอัปโหลดไปยัง Arduino เพื่อใช้แอปพลิเคชัน Demo_SDK.exe ที่เรากล่าวถึงก่อนหน้านี้ในบทความนี้ หากต้องการลบเทมเพลตลายนิ้วมือหรือบันทึกสำเนาในคอมพิวเตอร์ของคุณสามารถใช้แอปพลิเคชัน SDK นี้ได้
การเขียนโปรแกรม Arduino สำหรับ GT511C3 Finger Print Sensor
จุดมุ่งหมายของเราคือการเขียนโปรแกรมที่จะลงทะเบียนนิ้วเมื่อกดปุ่มและแสดงหมายเลข ID ของนิ้วที่ลงทะเบียนแล้ว เราควรจะสามารถแสดงข้อมูลทั้งหมดบน LCD เพื่อให้โครงการเป็นแบบสแตนด์อะโลนได้ รหัสที่สมบูรณ์ในการทำเช่นเดียวกันคือการให้ที่ด้านล่างของหน้านี้ฉันกำลังแบ่งสิ่งเดียวกันออกเป็นตัวอย่างเล็ก ๆ เพื่อช่วยให้คุณเข้าใจดีขึ้น
เช่นเคยเราเริ่มต้นโปรแกรมด้วยการรวมไลบรารีที่จำเป็นที่นี่เราจะต้องมีไลบรารี FPS_GT511C3 สำหรับโมดูล FPS ของเราซีเรียลซอฟต์แวร์เพื่อใช้ D4 และ D5 ในการสื่อสารแบบอนุกรมและคริสตัลเหลวสำหรับการเชื่อมต่อ LCD จากนั้นเราต้องพูดถึงพินที่เชื่อมต่อกับ FPS และ LCD หากคุณทำตามแผนภาพวงจรเช่นนี้แสดงว่าเป็น 4 และ 5 สำหรับ FPS และ D6 ถึง D11 สำหรับ LCD รหัสเดียวกันแสดงอยู่ด้านล่าง
#include "FPS_GT511C3.h" // รับไลบรารีจาก https://github.com/sparkfun/Fingerprint_Scanner-TTL # รวม "SoftwareSerial.h" // ไลบรารีอนุกรมซอฟต์แวร์ #include
ภายในฟังก์ชั่น การตั้งค่า เราจะแสดงข้อความเกริ่นนำบนจอ LCD จากนั้นเริ่มต้นโมดูล FPS คำสั่ง fps.SetLED (จริง) จะเปิดไฟ LED สีฟ้าบนเซ็นเซอร์คุณสามารถปิดได้ด้วย fps SetLED (เท็จ) เมื่อไม่ต้องการเนื่องจากจะทำให้เซ็นเซอร์ร้อนขึ้นหากปล่อยทิ้งไว้อย่างต่อเนื่อง เราได้สร้างพิน D2 เป็นพินอินพุตและเชื่อมต่อกับตัวต้านทานแบบดึงขึ้นภายในเพื่อเชื่อมต่อปุ่มกดเข้ากับพิน
การตั้งค่าเป็นโมฆะ () { Serial.begin (9600); lcd.begin (16, 2); // เริ่มต้น 16 * 2 LCD lcd.print ("GT511C3 FPS"); // Intro Message line 1 lcd.setCursor (0, 1); lcd.print ("กับ Arduino"); // Intro Message line 2 ล่าช้า (2000); lcd.clear (); fps.Open (); // ส่งคำสั่งอนุกรมเพื่อเริ่มต้น fp fps.SetLED (จริง); // เปิดไฟ LED เพื่อให้ fps เห็น pinMode ลายนิ้วมือ(2, INPUT_PULLUP); // เชื่อมต่อกับตัวต้านทานแบบดึงขึ้นภายในเป็นขาอินพุต}
ภายในฟังก์ชัน void loop เราต้องตรวจสอบว่ากดปุ่มหรือไม่หากกดเราจะลงทะเบียนนิ้วใหม่และบันทึกเทมเพลตด้วยหมายเลข ID โดยใช้ฟังก์ชันการลงทะเบียน ถ้าไม่เราจะรอให้นิ้วกดในเซ็นเซอร์ต่อไป หากกดเราจะระบุลายนิ้วมือโดยเปรียบเทียบกับเทมเพลตลายนิ้วมือที่ลงทะเบียนทั้งหมดโดยใช้วิธี 1: N เมื่อพบหมายเลข ID เราจะแสดงยินดีต้อนรับตามด้วยหมายเลข ID หากการพิมพ์ลายนิ้วมือไม่ตรงกับนิ้วใด ๆ ที่ลงทะเบียนจำนวน ID จะเท่ากับ 200 ในกรณีนั้นเราจะแสดงยินดีต้อนรับไม่ทราบ
ถ้า (digitalRead (2)) // ถ้ากดปุ่ม { Enroll (); // ลงทะเบียนลายนิ้วมือ } // ระบุการทดสอบลายนิ้วมือ if (fps.IsPressFinger ()) { fps.CaptureFinger (false); รหัส int = fps.Identify1_N (); lcd.clear (); lcd.print ("ยินดีต้อนรับ:"); ถ้า (id == 200) lcd.print ("Unkown"); // หากไม่รู้จัก lcd.print (id); ล่าช้า (1,000); }
ลงทะเบียน ฟังก์ชั่นจะต้องใช้เวลาสามปัจจัยการผลิตตัวอย่างจะลงทะเบียนเรียนหนึ่งนิ้วที่ประสบความสำเร็จ เมื่อลงทะเบียนแม่แบบสำหรับนิ้วนั้นจะถูกสร้างขึ้นซึ่งจะไม่ถูกลบเว้นแต่ผู้ใช้จะบังคับด้วยคำสั่ง HEX รหัสการลงทะเบียนนิ้วแสดงอยู่ด้านล่างวิธีการ IsPressFinger ใช้เพื่อตรวจสอบว่ามีการตรวจพบนิ้วหรือไม่ถ้าใช่ภาพจะถูกจับโดยใช้ CaptureFinger และในที่สุดก็ใช้ Enroll1, Enroll2 และ Enroll3 สำหรับตัวอย่างที่แตกต่างกันสามตัวอย่างเพื่อให้สามารถลงทะเบียนด้วยนิ้วเดียวได้สำเร็จ จอ LCD จะแสดงหมายเลข ID ของนิ้วหากลงทะเบียนสำเร็จมิฉะนั้นจะแสดงข้อความล้มเหลวพร้อมรหัส รหัส 1 หมายถึงการพิมพ์ลายนิ้วมือไม่ชัดเจนดังนั้นคุณต้องลองอีกครั้ง รหัส 2 เป็นตัวบ่งชี้ความล้มเหลวของหน่วยความจำและรหัส 3 คือการระบุว่านิ้วได้รับการลงทะเบียนแล้ว
เป็นโมฆะ Enroll () // ลงทะเบียนฟังก์ชันจากโปรแกรม exmaple ไลบรารี{ int enrollid = 0; บูล usedid = จริง; ในขณะที่ (usedid == true) { usedid = fps.CheckEnrolled (enrollid); ถ้า (usedid == true) enrollid ++; } fps.EnrollStart (ลงทะเบียน); // ลงทะเบียน lcd.print ("ลงทะเบียน #"); lcd.print (ลงทะเบียน); ในขณะที่ (fps.IsPressFinger () == false) ล่าช้า (100); บูลเบรท = fps.CaptureFinger (จริง); int iret = 0; ถ้า (bret! = false) { lcd.clear (); lcd.print ("เอานิ้วออก"); fps.Enroll1 (); ในขณะที่ (fps.IsPressFinger () == จริง) ล่าช้า (100); lcd.clear (); lcd.print ("กดอีกครั้ง"); ในขณะที่ (fps.IsPressFinger () == false) ล่าช้า (100); bret = fps.CaptureFinger (จริง); ถ้า (bret! = false) { lcd.clear (); lcd.print ("เอานิ้วออก"); fps.Enroll2 (); ในขณะที่ (fps.IsPressFinger () == จริง) ล่าช้า (100); lcd.clear (); lcd.print ("กดอีกครั้ง"); ในขณะที่ (fps.IsPressFinger () == false) ล่าช้า (100); bret = fps.CaptureFinger (จริง); ถ้า (bret! = false) { lcd.clear (); lcd.print ("เอานิ้วออก"); iret = fps.Enroll3 (); ถ้า (iret == 0) { lcd.clear (); lcd.print ("การลงทะเบียนสำเร็จ"); } else { lcd.clear (); lcd.print ("การลงทะเบียนล้มเหลว:"); lcd.print (iret); } } else lcd.print ("ล้มเหลว 1"); } else lcd.print ("ล้มเหลว 2"); } else lcd.print ("ล้มเหลว 3"); }
การทำงานของเซ็นเซอร์พิมพ์ลายนิ้วมือ GT511C3 กับ Arduino
เมื่อฮาร์ดแวร์และโค้ดของเราพร้อมแล้วก็ได้เวลาทดสอบโครงการของเรา อัปโหลดรหัสไปยัง Arduino และเปิดเครื่องฉันแค่ใช้พอร์ต micro-usb เพื่อเปิดโครงการ ในการบูตเราจะเห็นข้อความแนะนำบนหน้าจอ LCD จากนั้นจะแสดงข้อความ“ Hi!.. ” ซึ่งหมายความว่า FPS พร้อมที่จะสแกนนิ้วแล้วหากมีการกดนิ้วใด ๆ ที่ลงทะเบียนไว้จะมีข้อความ "ยินดีต้อนรับ" ตามด้วยหมายเลข ID ของนิ้วนั้นตามที่แสดงด้านล่าง
หากต้องลงทะเบียนนิ้วใหม่เราสามารถใช้ปุ่มกดเพื่อเข้าสู่โหมดการลงทะเบียนและปฏิบัติตามคำแนะนำ LCD เพื่อลงทะเบียนนิ้ว หลังจากขั้นตอนการลงทะเบียนเสร็จสมบูรณ์หน้าจอ LCD จะแสดงข้อความ“ Hi!.. ” อีกครั้งเพื่อระบุว่ามีการอ่านเพื่อระบุนิ้วอีกครั้ง การทำงานที่สมบูรณ์สามารถพบได้ที่วิดีโอลิงก์ด้านล่าง
จากตรงนี้คุณสามารถพัฒนาสิ่งที่น่าสนใจมากมายได้โดยใช้โมดูลเซ็นเซอร์ Finger Print หวังว่าคุณจะเข้าใจบทช่วยสอนและสนุกกับการสร้างสิ่งที่เป็นประโยชน์หากคุณมีคำถามใด ๆ ทิ้งไว้ในส่วนความคิดเห็นหรือใช้ฟอรัมสำหรับคำถามทางเทคนิคอื่น ๆ