久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: 【Arduino】168種傳感器系列實驗(150)--AS608光學(xué)指紋識別模塊 [打印本頁]

作者: eagler8    時間: 2020-2-16 20:43
標(biāo)題: 【Arduino】168種傳感器系列實驗(150)--AS608光學(xué)指紋識別模塊
37款傳感器與模塊的提法,在網(wǎng)絡(luò)上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止37種的。鑒于本人手頭積累了一些傳感器和模塊,依照實踐出真知(一定要動手做)的理念,以學(xué)習(xí)和交流為目的,這里準(zhǔn)備逐一動手試試做實驗,不管成功與否,都會記錄下來---小小的進(jìn)步或是搞不定的問題,希望能夠拋磚引玉。

【Arduino】168種傳感器模塊系列實驗(資料+代碼+圖形+仿真)
實驗一百四十九:AS608光學(xué)指紋識別模塊 智能鎖/考勤門禁開發(fā)/指紋采集模塊














作者: eagler8    時間: 2020-2-16 20:45


指紋 (fingerprint)
也叫手印,即是表皮上突起的紋線。由于人的指紋是遺傳與環(huán)境共同作用產(chǎn)生的,因而指紋人人皆有,卻各不相同。由于指紋重復(fù)率極小,大約150億分之一,故其稱為“人體身份證”。指紋是人類手指末端指腹上由凹凸的皮膚所形成的紋路,指紋能使手在接觸物件時增加摩擦力,從而更容易發(fā)力及抓緊物件,它是人類進(jìn)化過程中自然形成的。伸出手,仔細(xì)觀察,可以發(fā)現(xiàn)小小的指紋也分三種類型:有同心圓或螺旋紋線,看上去像水中漩渦的,叫斗形紋(whorl);有的紋線是一邊開口的,即像簸箕似的,叫箕形紋(loop);有的紋形像弓一樣,叫弓形紋(arch)。除總體形狀不同之外,各人指紋紋形的多少、長短也不同。指紋在胎兒第三四個月便開始產(chǎn)生,到六個月左右就形成了。當(dāng)嬰兒長大成人,指紋也只不過放大增粗,紋樣終生不會發(fā)生改變。

作者: eagler8    時間: 2020-2-16 20:47
指紋形成基礎(chǔ)
人的皮膚由表皮、真皮和皮下組織三部分組成。指紋就是表皮上突起的紋線。由于人的遺傳特性。雖然指紋人人皆有,但各不相同。在皮膚發(fā)育過程中,雖然表皮、真皮以及基質(zhì)層都在共同成長,柔軟的皮下組織長得相對比堅硬的表皮快,因此會對表皮產(chǎn)生源源不斷的上頂壓力,迫使長得較慢的表皮向內(nèi)層組織收縮塌陷,逐漸變彎打皺,以減輕皮下組織施加給它的壓力。如此一來,一方面使勁向上攻,一方面被迫往下撤,導(dǎo)致表皮長得曲曲彎彎,坑洼不平,形成紋路。這種變彎打皺的過程隨著內(nèi)層組織產(chǎn)生的上層壓力的變化而波動起伏,形成凹凸不平的脊紋或皺褶,直到發(fā)育過程中止,最終定型為至死不變的指紋。


各人的指紋除形狀不同之外,紋形的多少、長短也不同。據(jù)說,全世界的五十多億人中,還沒有發(fā)現(xiàn)兩個指紋完全相同的人呢。 目前尚無系統(tǒng)的指紋研究資料,中醫(yī)的望診,西醫(yī)的皮紋學(xué),涉及到掌紋的論述也只是只言片語。但是,生命科學(xué)的飛速發(fā)展,卻為今天重新研究掌紋同生命體的有機(jī)聯(lián)系提供了更廣闊的視野。 目前發(fā)現(xiàn),掌紋只在胎生的靈長類動物和人類中存在。而人類的手紋較靈長類動物更為豐富和多變,這至少預(yù)示著只從外界環(huán)境作用不能解釋這種現(xiàn)象,而需從掌紋的形成同生命體的內(nèi)在的關(guān)聯(lián)性作進(jìn)一步研究。






作者: eagler8    時間: 2020-2-16 20:48
指紋學(xué)(dactylography)
運(yùn)用皮膚學(xué)、生物化學(xué)、有機(jī)化學(xué)、高等數(shù)學(xué)、電子計算機(jī)等學(xué)科的知識和方法,研究掌面膚紋生理特征、紋理結(jié)構(gòu)及其收集、顯現(xiàn)、儲存、分類與識別的原理和方法的科學(xué)。自17世紀(jì)開始,西方一些醫(yī)生和人類學(xué)者就對指紋進(jìn)行了長期的潛心探索。19世紀(jì)20年代,普魯士布雷斯勞大學(xué)教授普金耶首先從解剖學(xué)的角度將指紋作了較為復(fù)雜的分類。1879年,蘇格蘭醫(yī)生福爾茨利用自己研究的指紋術(shù)首次幫助日本各方查獲了盜x。1880年,福爾茨第一次提出了指紋“人各不同、終生不變”的特性。 1892 年,英國學(xué)者高爾頓的《指紋學(xué)》(1892),提出了三個影響重大的科學(xué)論點:1.指紋終生不變;2.指紋可識別;3.指紋可分類。1896年,亨利又進(jìn)一步研究出一套指紋分析法,世人稱為“高爾頓—亨利指紋分類系統(tǒng)”。該系統(tǒng)將指紋分為乎拱型、凸拱型、撓骨環(huán)狀型、尸骨環(huán)狀型、螺紋型五種類型。20世紀(jì)初,這種指紋分析方法相繼為世界各國所采納,并在此基礎(chǔ)上,使指紋學(xué)逐漸形成一門獨立的學(xué)科。





作者: eagler8    時間: 2020-2-16 20:50
指紋結(jié)構(gòu)
指紋,也稱為手印,有廣義狹義之分:狹義的指紋是指人的手指第一節(jié)手掌面皮膚上的乳突線花紋;廣義的指紋則包括指頭紋、指節(jié)紋和掌紋。指紋與指印在字面上有區(qū)別,即指紋是指手指第一節(jié)手掌面皮膚上的乳突線花紋,指印則是這個乳突線花紋留下的印痕,但是在司法實踐中,約定俗成,指紋與指印的概念是通用的。留下印痕主要是由于在人的手指、手掌面的皮膚上,存在有大量的汗腺和皮脂腺(想想您緊張或激動時手心里的汗),只要生命活動存在,就不斷地有汗液、皮脂液排出,有點像原子印章不斷有油墨滲到印文表面,因此,只要手指、手掌接觸到物體表面,就會象原子印章一樣自動留下印痕。當(dāng)然,這主要是說手指、手掌本身能留下指紋的原因。如果手指、手掌粘上其它液體樣物質(zhì),如頭面部的油脂(這是您最常要用的"印泥盒")、血液和按捺指紋的油墨等時,留下指紋的原理就更象蓋普通印章。指紋的取證,包括指紋的搜尋和發(fā)現(xiàn)。指紋的搜尋范圍:(1)犯x活動中心;(2)現(xiàn)場的進(jìn)出口及其周圍;(3)犯x分子可能接觸過的物品;(4)犯x分子遺留在現(xiàn)場上的各種兇器和物品。并且它們的復(fù)雜度足以提供用于鑒別的足夠特征。指紋除了具有唯一性外,還具有遺傳性和不變性。尚未發(fā)現(xiàn)有不同的人擁有相同的指紋,所以每個人的指紋也是不一樣的。由于指紋是每個人獨有的標(biāo)記,近幾百年來,罪x在犯案現(xiàn)場留下的指紋,均成為追捕疑犯的重要線索。現(xiàn)今鑒別指紋方法已經(jīng)電腦化,使鑒別程序更快更準(zhǔn)。由于每個人的遺傳基因均不同,故指紋也不同。然而,指紋的形成雖然主要受到遺傳影響,但是也有環(huán)境因素(5%),當(dāng)胎兒在母體內(nèi)發(fā)育三至四個月時,指紋就已經(jīng)形成,兒童在成長期間指紋會略有改變,直到青春期14歲左右時才會定型。在皮膚發(fā)育過程中,雖表皮、真皮,以及基質(zhì)層都在共同成長,但柔軟的皮下組織長得比相對堅硬的表皮快。 有人說骨髓移植后指紋會改變,那是不對的。除非是植皮或者深達(dá)基底層的損傷,否則指紋是不會變的。





作者: eagler8    時間: 2020-2-17 10:00
指紋特征(Fingerprint characteristics)
在人的指紋中包含大量的信息,這些信息稱為指紋特征。包括有許多特征點,特征點提供了指紋唯一性的確認(rèn)信息,這是進(jìn)行指紋識別的基礎(chǔ)。分為總體特征和局部特征,總體特征又包括了核心點(位于指紋紋路的漸進(jìn)中心)、 三角點(位于從核心點開始的第一個分叉點或者斷點,或者兩條紋路會聚處、孤立點、折轉(zhuǎn)處,或者指向這些奇異點)、紋數(shù)(指紋紋路的數(shù)量);局部特征是指紋的細(xì)節(jié)特征,在特征點處的方向、曲率、 節(jié)點的位置,這都是區(qū)分不同指紋的重要指標(biāo)。




總體特征是指那些用人眼直接就可以觀察到的特征。包括紋形、模式區(qū)、核心點、三角點和紋數(shù)等。
1、紋形,指紋專家在長期實踐的基礎(chǔ)上,根據(jù)脊線的走向與分布情況一般將指紋分為三大類——環(huán)型(loop,又稱斗形)、弓形(arch)、螺旋形(whorl)。
2、模式區(qū)即指紋上包括了總體特征的區(qū)域,從此區(qū)域就能夠分辨出指紋是屬于哪一種類型的。有的指紋識別算法只使用模式區(qū)的數(shù)據(jù),有的則使用所取得的完整指紋。
3、核心點位于指紋紋路的漸進(jìn)中心,它在讀取指紋和比對指紋時作為參考點。許多算法是基于核心點的,即只能處理和識別具有核心點的指紋。
4、三角點位于從核心點開始的第一個分叉點或者斷點,或者兩條紋路會聚處、孤立點、折轉(zhuǎn)處,或者指向這些奇異點。三角點提供了指紋紋路的計數(shù)跟蹤的開始之處。
5、紋數(shù),即模式區(qū)內(nèi)指紋紋路的數(shù)量。在計算指紋的紋路時,一般先連接核心點和三角點,這條連線與指紋紋路相交的數(shù)量即可認(rèn)為是指紋的紋數(shù)。

局部特征指紋節(jié)點的特征。指紋的紋路并不是連續(xù)、平滑筆直的,經(jīng)常會出現(xiàn)分叉、折轉(zhuǎn)或中斷。這些交叉點、折轉(zhuǎn)點或斷點稱為"特征點",它們提供了指紋唯一性的確認(rèn)信息。
1、方向:相對于核心點,特征點所處的方向。
2、曲率:紋路方向改變的速度。
3、位置:節(jié)點的位置坐標(biāo),通過x/y坐標(biāo)來描述。它可以是絕對坐標(biāo),也可以是與三角點(或特征點)的相對坐標(biāo)。





作者: eagler8    時間: 2020-2-17 10:26


指紋識別(fingerprint identification)
讀取指紋圖象、提取特征、保存數(shù)據(jù)和比對。在一開始,通過指紋讀取設(shè)備讀取到人體指紋的圖象,取到指紋圖象之后,要對原始圖象進(jìn)行初步的處理,使之更清晰。接下來,指紋辨識軟件建立指紋的數(shù)字表示——特征數(shù)據(jù),一種單方向的轉(zhuǎn)換,可以從指紋轉(zhuǎn)換成特征數(shù)據(jù)但不能從特征數(shù)據(jù)轉(zhuǎn)換成為指紋,而兩枚不同的指紋不會產(chǎn)生相同的特征數(shù)據(jù)。指紋識別技術(shù)作為生物體特征識別技術(shù)之一在新世紀(jì)逐漸成熟,進(jìn)入了人類的生產(chǎn)生活領(lǐng)域。

指紋識別技術(shù)是眾多生物特征識別技術(shù)中的一種,所謂生物特征識別技術(shù)(biometrics ),系指利用人體所固有的 生理特征或行為特征來進(jìn)行個人身份鑒定,由于生物識別所具有的便捷與安全等優(yōu)點使得生物識別技術(shù)在身份認(rèn)證識別和網(wǎng)絡(luò)安全領(lǐng)域擁有廣闊的應(yīng)用前景,可用的生物特征識別技術(shù)有指紋、人臉、聲紋、虹膜等,指紋是其中應(yīng)用最為廣泛的一種。從20世紀(jì)60年代起新型的電子計算機(jī)技術(shù)進(jìn)人指紋鑒定領(lǐng)域,為指紋鑒定自動化開辟了新的途徑。近幾年, 指紋識別技術(shù)應(yīng)用到智能手機(jī)上,成為支持手機(jī)解鎖、在線支付的重要基礎(chǔ)技術(shù)。在未來,基于FIDO等協(xié)議,指紋識別等生物特征識別技術(shù)將全面取代現(xiàn)有的密碼體系。在指紋識別算法上,最初是對指紋分類技術(shù)的研究,以提高指紋檔案檢索的效率。目前主流的指紋識別算法則基于指紋紋線的端點、分叉點等細(xì)節(jié)特征。隨著指紋識別技術(shù)在移動設(shè)備的應(yīng)用,指紋采集芯片的尺寸日益小型化,基于汗孔、紋線形狀等3級特征的識別算法受到日益重視。在指紋采集技術(shù)上, 首先出現(xiàn)的是油墨捺印方法。油墨捺印的指紋卡片通過掃描方式數(shù)字化后進(jìn)行存儲和后續(xù)處理。20世紀(jì)70年代以后,光學(xué)式指紋采集技術(shù)的出現(xiàn)和普及促進(jìn)了指紋的現(xiàn)場快速采集和驗證。移動設(shè)備上的應(yīng)用則促進(jìn)了小尺寸超薄指紋采集技術(shù)的快速發(fā)展。


作者: eagler8    時間: 2020-2-17 10:41
指紋識別采集技術(shù)
1、光學(xué)識別技術(shù)
屬于第一代指紋識別技術(shù),借助光學(xué)技術(shù)采集指紋是歷史最久遠(yuǎn)、使用最廣泛的技術(shù)。將手指放在光學(xué)鏡片上,手指在內(nèi)置光源照射下,用棱鏡將其投射在電荷耦合器件(CCD) 上,進(jìn)而形成脊線(指紋圖像中具有一定寬度和走向的紋線)呈黑色、谷線(紋線之間的凹陷部分)呈白色的數(shù)字化的、可被指紋設(shè)備算法處理的多灰度指紋圖像。
2、溫差感應(yīng)式識別技術(shù)
它的優(yōu)點是可在0.1s內(nèi)獲取指紋圖像,而且傳感器體積和面積最小,即通常所說的滑動式指紋識別儀就是采用該技術(shù)。缺點是:受制于溫度局限,時間一長,手指和芯片就處于相同的溫度了。
3、半導(dǎo)體硅感技術(shù)(電容式技術(shù))
第二代電容式傳感器,根據(jù)指紋的嵴和峪與半導(dǎo)體電容感應(yīng)顆粒形成的電容值大小不同,來判斷什么位置是嵴什么位置是峪。其工作過程是通過對每個像素點上的電容感應(yīng)顆粒預(yù)先充電到某一參考電壓。當(dāng)手指接觸到半導(dǎo)體電容指紋表現(xiàn)上時,因為嵴是凸起、峪是凹下,根據(jù)電容值與距離的關(guān)系,會在嵴和峪的地方形成不同的電容值。然后利用放電電流進(jìn)行放電。因為嵴和峪對應(yīng)的電容值不同,所以其放電的速度也不同。嵴下的像素(電容量高)放電較慢,而處于峪下的像素(電容量低)放電較快。根據(jù)放電率的不同,可以探測到嵴和峪的位置,從而形成指紋圖像數(shù)據(jù)。
4、生物射頻指紋識別技術(shù)
發(fā)展到今天,出現(xiàn)第三代生物射頻指紋識別技術(shù)(射頻原理真皮指紋核心技術(shù)(線型采集器)),射頻傳感器技術(shù)是通過傳感器本身發(fā)射出微量射頻信號,穿透手指的表皮層去控測里層的紋路,來獲得最佳的指紋圖像。因此對汗手指,干手指等困難手指通過可高達(dá)99%,防偽指紋能力強(qiáng),指紋敏感器的識別原理只對人的真皮皮膚有反應(yīng),從根本上杜絕了人造指紋的問題,寬溫區(qū):適合特別寒冷或特別酷熱的地區(qū)。因為射頻傳感器產(chǎn)生高質(zhì)量的圖像,因此射頻技術(shù)是最可靠,最有力的解決方案。除此之外,高質(zhì)量圖像還允許減小傳感器,無需犧牲認(rèn)證的可靠性,從而降低成本并使得射頻傳感器思想的應(yīng)用到可移動和大小不受拘束的任何領(lǐng)域中。





作者: eagler8    時間: 2020-2-17 11:15


技術(shù)特點
指紋識別技術(shù)的主要優(yōu)點為:
1、指紋是人體獨一無二的特征,并且它們的復(fù)雜度足以提供用于鑒別的足夠特征;
2、如果要增加可靠性,只需登記更多的指紋、鑒別更多的手指,最多可以多達(dá)十個,而每一個指紋都是獨一無二的;
3、掃描指紋的速度很快,使用非常方便;
4、讀取指紋時,用戶必需將手指與指紋采集頭相互接觸,與指紋采集頭直接;
5、接觸是讀取人體生物特征最可靠的方法;
6、指紋采集頭可以更加小型化,并且價格會更加的低廉;
指紋識別技術(shù)的主要缺點為:
1、某些人或某些群體的指紋指紋特征少,難成像;
2、過去因為在壞人記錄中使用指紋,使得某些人害怕“將指紋記錄在案”。
3、實際上指紋鑒別技術(shù)可以不存儲任何含有指紋圖像的數(shù)據(jù),而只是存儲從指紋中得到的加密的指紋特征數(shù)據(jù);
4、每一次使用指紋時都會在指紋采集頭上留下用戶的指紋印痕,而這些指紋痕跡存在被用來復(fù)制指紋的可能性。
5、指紋是用戶的重要個人信息,某些應(yīng)用場合用戶擔(dān)心信息泄漏。


作者: eagler8    時間: 2020-2-17 14:00
本帖最后由 eagler8 于 2020-2-17 14:30 編輯

AS608 系列芯片
芯片內(nèi)置 DSP 運(yùn)算單元,集成了指紋識別算法,能高效快速采集圖像并識別指紋特征。AS608基于 ARM Cortex-M 系列內(nèi)核開發(fā)的高性能 32 位微控制器,集成4K 字節(jié)指令 Cache,工作頻率可達(dá) 144MHz,內(nèi)嵌 Flash 容量可達(dá) 512K 字節(jié),SRAM 容量可達(dá) 128K 字節(jié),最大可擴(kuò)展 16M 字節(jié)外部 SQI Flash。內(nèi)嵌 Flash 具有 MPU 保護(hù),能夠有效保護(hù)用戶代碼的安全。

AS608 系列芯片具有豐富的片上外設(shè),1 個 USB2.0 全速設(shè)備接口、2 個 SPI 主接口、1 個 SPI 從接口、2 個 UART 接口、1 個 I2C 接口、1 個光學(xué) CMOS 傳感器接口(LOCSC)、1 個智能卡主接口(SCI)、1 個語音 PWM 輸出接口(VPWM)、1 個 ISO7816 收發(fā)控制器(ISO7816)、1 個 SWPS 接口,具有多達(dá) 48 個 GPIO,并且每個 GPIO 都具有中斷功能。

AS608 系列芯片內(nèi)嵌了多種加解密算法,支持 DES、AES、RSA、ECC 以及多種 HASH 算法。AS608 系列芯片采用模數(shù)混合技術(shù)設(shè)計,內(nèi)部集成多種功能的模擬模塊,減少外圍電路設(shè)計,有效降低板級系統(tǒng)的成本。內(nèi)部集成了 3 個用于電源轉(zhuǎn)換的 LDO:1 個用于 5V 轉(zhuǎn) 3.3V 的 LDO5033、1 個用于 3.3V 轉(zhuǎn) 1.8V 的LDO3318、1 個用于 1.8V 轉(zhuǎn) 1.2V 的 LDO1812,這些 LDO 為芯片內(nèi)部各功能模塊提供相應(yīng)工作電源的同時,也可為其外圍電路提供適當(dāng)?shù)碾娏鳌?nèi)部還集成了 2 個環(huán)振:1 個可輸出高達(dá) 144MHz 的高頻環(huán)振 HFROSC,經(jīng)過出廠校準(zhǔn)后,精度可達(dá)±1.5%;1 個輸出頻率約為 32KHz 的低頻環(huán)振 LFROSC,可用于提供休眠模式時鐘。





作者: eagler8    時間: 2020-2-17 14:44


AS608指紋模塊
集成了光路和指紋處理部分的一體化指紋處理模塊,具有體積小、功耗低、接口簡單的特點,可靠性高、識別速度快、干濕手指適應(yīng)性好,指紋搜索速度快。模塊配備了串口、USB 通訊接口,用戶無需研究復(fù)雜的圖像處理及指紋識別算法,只需通過簡單的串口、USB 按照通訊協(xié)議便可控制模塊。模塊可應(yīng)用于各種考勤機(jī)、保險箱柜、指紋門禁系統(tǒng)、指紋鎖等場合。


作者: eagler8    時間: 2020-2-17 14:57
模塊技術(shù)指標(biāo)




作者: eagler8    時間: 2020-2-17 15:01


作者: eagler8    時間: 2020-2-17 15:03
模塊電原理圖




作者: yechuan220    時間: 2020-2-17 15:18
感覺很高深的樣子,感覺很復(fù)雜
作者: eagler8    時間: 2020-2-17 19:35


光學(xué)指紋模塊工作原理
是指利用光的折攝和反射原理,將手指放在光學(xué)鏡片上,手指在內(nèi)置光源照射下,光從底部射向三棱鏡,并經(jīng)棱鏡射出,射出的光線在手指表面指紋凹凸不平的線紋上折射的角度及反射回去的光線明暗就會不一樣。用棱鏡將其投射在電荷耦合器件上CMOS或者CCD上,進(jìn)而形成脊線(指紋圖像中具有一定寬度和走向的紋線)呈黑色、谷線(紋線之間的凹陷部分)呈白色的數(shù)字化的、可被指紋設(shè)備算法處理的多灰度指紋圖像。其優(yōu)點主要表現(xiàn)為經(jīng)歷長期實用檢驗、系統(tǒng)穩(wěn)定性較好、成本亦較低、能提供分辨力為500 dpi( dot per inch)的圖像。特別是能實現(xiàn)較大區(qū)域的指紋圖像采集,有效克服大面積半導(dǎo)體指紋傳感器價格昂貴缺點。該傳感器局限性主要體現(xiàn)于潛在指印方面,不但會降低指紋圖像的質(zhì)量,嚴(yán)重時,還可能導(dǎo)致兩個指印重疊,顯然難以滿足實際應(yīng)用需要。此外,臺板涂層及CCD陣列會隨時間推移產(chǎn)生損耗,可能導(dǎo)致采集的指紋圖像質(zhì)量下降。隨著光學(xué)技術(shù)發(fā)展,一些新穎的技術(shù)手段亦已應(yīng)用于指紋圖像的采集,這樣能顯著減小光學(xué)指紋傳感器的體積。






作者: eagler8    時間: 2020-2-17 19:36
yechuan220 發(fā)表于 2020-2-17 15:18
感覺很高深的樣子,感覺很復(fù)雜

不會啊,簡單知識點

作者: eagler8    時間: 2020-2-18 11:44
指紋識別過程
分為兩個次要過程,分為四個部分。兩個次要的過程是指紋記錄和交叉核對過程。指紋記錄過程由四個部分組成:指紋采集、指紋預(yù)處理、指紋檢查和指紋模板采集。指紋比對過程還包括四個部分:指紋采集、指紋預(yù)處理、指紋特征比對和匹配。在這兩個過程中,指紋圖像的前處理都存在,但指紋圖像的取值和指紋 特征的值似乎有相同的名稱,但它們的內(nèi)在算法和性質(zhì)是完全不同的。在引入指紋的過程中,更頻繁地獲得指紋圖像,而單值提取部分的算法更多地關(guān)注一些特征值的辨析和獲取過程。

指紋識別的第一步是指紋圖像的獲取,目前已經(jīng)有多種指紋圖像的獲取方式,主要有光學(xué)指紋采集技術(shù)、電容式傳感器指紋采集、溫度傳感指紋獲取技術(shù)、超聲波指紋采集技術(shù)、電磁波指紋采集技術(shù),獲得圖像后進(jìn)行預(yù)處理加工,要實現(xiàn)圖像的灰度變換、分割、均衡化、增強(qiáng)、 細(xì)化等預(yù)處理步驟。首先要把指紋從整個圖案上分割出來, 背景圖和指紋分布圖的灰度是不同的,這就確定了兩者強(qiáng)度的區(qū)別, 利用梯度這個概念就能將指紋從背景圖中很好的分離開;均衡化是預(yù) 處理中的重要一步,在提取時根據(jù)環(huán)境的不同得到的指紋圖像不同區(qū)域的像素分布點是不同的,均衡化就是將不同區(qū)域分布的像素進(jìn)行均值劃分得到亮度分布均衡的圖像;為了便于特征的提取,在幾步加工后的圖像還要智能化增強(qiáng),Daugmann實現(xiàn)了利用Gabor小波逼近的方法使指紋圖像的紋路線條更加清晰,即白的部分更白,黑的部分更黑,線條的邊緣分布更加平滑。




對于處理好的指紋圖像,指紋的紋路已經(jīng)十分清晰,要進(jìn)行指紋識別必須要進(jìn)行特征提取,分離出那些具體的特征點來代替不同的紋路,首先提取指紋的特征端點和叉點,將端點叉點圖像進(jìn)行九宮格分割,利用指紋特征分布的灰度值是不同的這個特性,將指紋圖像的端點和叉點分離出來,對于奇異點的提取利用Poincare公式,利用這個公式提取方向場周圍劇烈變化的點,我們在計算機(jī)中使用不同的算法分別實現(xiàn)各個特征點的提取過程。

最后將識別的指紋分類操作,指紋的分類是用采集的指紋特征與數(shù)據(jù)庫中保存的指紋特征相比較,判斷是否屬于同一指紋,首先根據(jù)指紋的紋形進(jìn)行粗匹配,進(jìn)而利用指紋形態(tài)和細(xì)節(jié)特征進(jìn)行精確匹配給出相比較指紋的相似性程度。根據(jù)應(yīng)用的不同,對指紋的相似性得分進(jìn)行排序或給出是否為同一指紋的判決結(jié)果,指紋對比有兩種方式: 一對一比對是根據(jù)用戶從數(shù)據(jù)庫中檢索出待對比的用戶指紋,再與新采集的指紋比對;一對多比對是新采集的指紋和數(shù)據(jù)庫中的所有指紋逐一比對。





作者: eagler8    時間: 2020-2-18 15:49
模塊接口
模塊接口采用 8 芯 1.25 mm 間距單排插座,PCB 如圖 2.1.1 所示。模塊內(nèi)部內(nèi)置了手指探測電路,用戶可讀取狀態(tài)引腳TCH(WAK)判斷有無手指按下。

引腳號  名稱   類型        功能描述
1            Vi              In        模塊電源正輸入端+3.3V(請勿接3.3V以上電源,否則燒毀模塊!)         
2           TX            Out        串行數(shù)據(jù)輸出,接MCU或TTL串口的RX。
3           RX             In        串行數(shù)據(jù)輸入,接MCU或TTL串口的TX。
4          GND           -        信號地。內(nèi)部與電源地連接。
5          TCH          Out        感應(yīng)信號輸出,默認(rèn)高電平有效
6          UA            In         觸摸感應(yīng)電源輸入端,3.3v供電
7          D+           -          USB D+
8          D-           -           USB D-
(7腳,8腳為USB信號線,使用串口控制模塊時可以懸空不用)





作者: eagler8    時間: 2020-2-18 16:06





作者: eagler8    時間: 2020-2-18 18:46
實驗之一:Adafruit指紋傳感器,更改密碼示例
安裝庫:IDE—工具—管理庫—搜索Adafruit-Fingerprint-Sensor-Library—安裝
實驗接線:
Vi      +3.3V(請勿接3.3V以上電源,否則燒毀模塊!)         
TX      2     
RX      3
GND    GND





作者: eagler8    時間: 2020-2-18 18:49
  1. /*
  2.   【Arduino】168種傳感器模塊系列實驗(資料+代碼+圖形+仿真)
  3.   實驗一百五十:AS608光學(xué)指紋識別模塊 智能鎖/考勤門禁開發(fā)/指紋采集模塊
  4.   實驗之一:Adafruit指紋傳感器,更改密碼示例
  5.   安裝庫:IDE—工具—管理庫—搜索Adafruit-Fingerprint-Sensor-Library—安裝
  6.   實驗接線:
  7.   Vi      +3.3V(請勿接3.3V以上電源,否則燒毀模塊!)
  8.   TX      2
  9.   RX      3
  10.   GND    GND
  11. */

  12. #include <Adafruit_Fingerprint.h>

  13. // On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white
  14. // uncomment this line:
  15. // #define mySerial Serial1

  16. // For UNO and others without hardware serial, we must use software serial...
  17. // pin #2 is IN from sensor (GREEN wire)
  18. // pin #3 is OUT from arduino  (WHITE wire)
  19. // comment these two lines if using hardware serial
  20. SoftwareSerial mySerial(2, 3);

  21. // Using sensor without password
  22. Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

  23. // Using sensor with password
  24. //Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial, 1337);

  25. void setup()
  26. {
  27.   while (!Serial);  // For Yun/Leo/Micro/Zero/...

  28.   Serial.begin(9600);
  29.   Serial.println("Adafruit fingerprint sensor, change password example");

  30.   // set the data rate for the sensor serial port
  31.   finger.begin(19200);

  32.   if (finger.verifyPassword()) {
  33.     Serial.println("Found fingerprint sensor!");
  34.   } else {
  35.     Serial.println("Did not find fingerprint sensor :(");
  36.     while (1);
  37.   }

  38.   Serial.print("Set password... ");
  39.   uint8_t p = finger.setPassword(1337);
  40.   if (p == FINGERPRINT_OK) {
  41.     Serial.println("OK"); // Password is set
  42.   } else {
  43.     Serial.println("ERROR"); // Failed to set password
  44.   }
  45. }

  46. void loop()
  47. {

  48. }
復(fù)制代碼



作者: eagler8    時間: 2020-2-18 19:01


作者: eagler8    時間: 2020-2-18 19:03

找不到指紋傳感器





作者: eagler8    時間: 2020-2-21 16:39
  1. /*
  2.   【Arduino】168種傳感器模塊系列實驗(資料+代碼+圖形+仿真)
  3.   實驗一百五十:AS608光學(xué)指紋識別模塊 智能鎖/考勤門禁開發(fā)/指紋采集模塊
  4.   
  5.   實驗之二:輸入序號,注冊指紋示例
  6.   安裝庫:IDE—工具—管理庫—搜索Adafruit-Fingerprint-Sensor-Library—安裝
  7.   實驗接線:
  8.   Vi      +3.3V(請勿接3.3V以上電源,否則燒毀模塊!)
  9.   TX      2
  10.   RX      3
  11.   GND    GND
  12. */

  13. #include <Adafruit_Fingerprint.h>

  14. // On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white
  15. // uncomment this line:
  16. // #define mySerial Serial1

  17. // For UNO and others without hardware serial, we must use software serial...
  18. // pin #2 is IN from sensor (GREEN wire)
  19. // pin #3 is OUT from arduino  (WHITE wire)
  20. // comment these two lines if using hardware serial
  21. SoftwareSerial mySerial(2, 3);

  22. Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

  23. uint8_t id;

  24. void setup()  
  25. {
  26.   Serial.begin(9600);
  27.   while (!Serial);  // For Yun/Leo/Micro/Zero/...
  28.   delay(100);
  29.   Serial.println("\n\nAdafruit Fingerprint sensor enrollment");

  30.   // 設(shè)置傳感器串行端口的數(shù)據(jù)速率
  31.   finger.begin(57600);
  32.   
  33.   if (finger.verifyPassword()) {
  34.     Serial.println("Found fingerprint sensor!");
  35.   } else {
  36.     Serial.println("Did not find fingerprint sensor :(");
  37.     while (1) { delay(1); }
  38.   }
  39. }

  40. uint8_t readnumber(void) {
  41.   uint8_t num = 0;
  42.   
  43.   while (num == 0) {
  44.     while (! Serial.available());
  45.     num = Serial.parseInt();
  46.   }
  47.   return num;
  48. }

  49. void loop()                      // 循環(huán)執(zhí)行
  50. {
  51.   Serial.println("Ready to enroll a fingerprint!");
  52.   Serial.println("Please type in the ID # (from 1 to 127) you want to save this finger as...");
  53.   id = readnumber();
  54.   if (id == 0) {// ID #0 not allowed, try again!
  55.      return;
  56.   }
  57.   Serial.print("Enrolling ID #");
  58.   Serial.println(id);
  59.   
  60.   while (!  getFingerprintEnroll() );
  61. }

  62. uint8_t getFingerprintEnroll() {

  63.   int p = -1;
  64.   Serial.print("Waiting for valid finger to enroll as #"); Serial.println(id);
  65.   while (p != FINGERPRINT_OK) {
  66.     p = finger.getImage();
  67.     switch (p) {
  68.     case FINGERPRINT_OK:
  69.       Serial.println("Image taken");
  70.       break;
  71.     case FINGERPRINT_NOFINGER:
  72.       Serial.println(".");
  73.       break;
  74.     case FINGERPRINT_PACKETRECIEVEERR:
  75.       Serial.println("Communication error");
  76.       break;
  77.     case FINGERPRINT_IMAGEFAIL:
  78.       Serial.println("Imaging error");
  79.       break;
  80.     default:
  81.       Serial.println("Unknown error");
  82.       break;
  83.     }
  84.   }

  85.   // OK success!

  86.   p = finger.image2Tz(1);
  87.   switch (p) {
  88.     case FINGERPRINT_OK:
  89.       Serial.println("Image converted");
  90.       break;
  91.     case FINGERPRINT_IMAGEMESS:
  92.       Serial.println("Image too messy");
  93.       return p;
  94.     case FINGERPRINT_PACKETRECIEVEERR:
  95.       Serial.println("Communication error");
  96.       return p;
  97.     case FINGERPRINT_FEATUREFAIL:
  98.       Serial.println("Could not find fingerprint features");
  99.       return p;
  100.     case FINGERPRINT_INVALIDIMAGE:
  101.       Serial.println("Could not find fingerprint features");
  102.       return p;
  103.     default:
  104.       Serial.println("Unknown error");
  105.       return p;
  106.   }
  107.   
  108.   Serial.println("Remove finger");
  109.   delay(2000);
  110.   p = 0;
  111.   while (p != FINGERPRINT_NOFINGER) {
  112.     p = finger.getImage();
  113.   }
  114.   Serial.print("ID "); Serial.println(id);
  115.   p = -1;
  116.   Serial.println("Place same finger again");
  117.   while (p != FINGERPRINT_OK) {
  118.     p = finger.getImage();
  119.     switch (p) {
  120.     case FINGERPRINT_OK:
  121.       Serial.println("Image taken");
  122.       break;
  123.     case FINGERPRINT_NOFINGER:
  124.       Serial.print(".");
  125.       break;
  126.     case FINGERPRINT_PACKETRECIEVEERR:
  127.       Serial.println("Communication error");
  128.       break;
  129.     case FINGERPRINT_IMAGEFAIL:
  130.       Serial.println("Imaging error");
  131.       break;
  132.     default:
  133.       Serial.println("Unknown error");
  134.       break;
  135.     }
  136.   }

  137.   // OK success!

  138.   p = finger.image2Tz(2);
  139.   switch (p) {
  140.     case FINGERPRINT_OK:
  141.       Serial.println("Image converted");
  142.       break;
  143.     case FINGERPRINT_IMAGEMESS:
  144.       Serial.println("Image too messy");
  145.       return p;
  146.     case FINGERPRINT_PACKETRECIEVEERR:
  147.       Serial.println("Communication error");
  148.       return p;
  149.     case FINGERPRINT_FEATUREFAIL:
  150.       Serial.println("Could not find fingerprint features");
  151.       return p;
  152.     case FINGERPRINT_INVALIDIMAGE:
  153.       Serial.println("Could not find fingerprint features");
  154.       return p;
  155.     default:
  156.       Serial.println("Unknown error");
  157.       return p;
  158.   }
  159.   
  160.   // OK converted!
  161.   Serial.print("Creating model for #");  Serial.println(id);
  162.   
  163.   p = finger.createModel();
  164.   if (p == FINGERPRINT_OK) {
  165.     Serial.println("Prints matched!");
  166.   } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
  167.     Serial.println("Communication error");
  168.     return p;
  169.   } else if (p == FINGERPRINT_ENROLLMISMATCH) {
  170.     Serial.println("Fingerprints did not match");
  171.     return p;
  172.   } else {
  173.     Serial.println("Unknown error");
  174.     return p;
  175.   }   
  176.   
  177.   Serial.print("ID "); Serial.println(id);
  178.   p = finger.storeModel(id);
  179.   if (p == FINGERPRINT_OK) {
  180.     Serial.println("Stored!");
  181.   } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
  182.     Serial.println("Communication error");
  183.     return p;
  184.   } else if (p == FINGERPRINT_BADLOCATION) {
  185.     Serial.println("Could not store in that location");
  186.     return p;
  187.   } else if (p == FINGERPRINT_FLASHERR) {
  188.     Serial.println("Error writing to flash");
  189.     return p;
  190.   } else {
  191.     Serial.println("Unknown error");
  192.     return p;
  193.   }   
  194. }
復(fù)制代碼



作者: eagler8    時間: 2020-2-21 17:14
Adafruit指紋傳感器注冊
找到指紋傳感器!
準(zhǔn)備注冊指紋!
請鍵入要將此手指另存為……





作者: eagler8    時間: 2020-2-22 06:26


作者: eagler8    時間: 2020-2-22 08:16
注冊ID#1
等待有效手指注冊為1
.
.
.
……拍攝的圖像
圖像轉(zhuǎn)換
取下手指
身份證1
再次放置同一個手指
……拍攝的圖像
圖像轉(zhuǎn)換
為1創(chuàng)建模型
指紋匹配!
身份證1
存儲!
等待有效手指注冊為1





作者: eagler8    時間: 2020-2-22 09:16
補(bǔ)充:安裝Adafruit指紋傳感器庫
使用Arduino控制指紋傳感器模塊的最簡單方法是使用該傳感器的Adafruit庫。按照下面的說明安裝庫:
傳感器的Adafruit庫下載地址(含eroll文件)
https://github.com/IT-XIAOXIAO/Adafrui

首先下載Adafruit指紋傳感器庫。下載完成后,您將得到一個.zip文件;
解壓縮.zip文件,你會看到一個Adafruit-Fingerprint-Sensor-Library-master文件夾;
將Adafruit-Fingerprint-Sensor-Library-master文件夾重命名為Adafruit_Fingerprint_Sensor_Library文件夾;
將文件夾移動到您的Arduino IDE安裝庫文件夾;
最后,重新打開Arduino IDE。




作者: eagler8    時間: 2020-2-22 09:55
  1. /*
  2.   【Arduino】168種傳感器模塊系列實驗(資料+代碼+圖形+仿真)
  3.   實驗一百五十:AS608光學(xué)指紋識別模塊 智能鎖/考勤門禁開發(fā)/指紋采集模塊

  4.   實驗之三:查找一個匹配的指紋
  5.   安裝庫:IDE—工具—管理庫—搜索Adafruit-Fingerprint-Sensor-Library—安裝
  6.   實驗接線:
  7.   Vi      +3.3V(請勿接3.3V以上電源,否則燒毀模塊!)
  8.   TX      2
  9.   RX      3
  10.   GND    GND
  11. */

  12. #include <Adafruit_Fingerprint.h>

  13. // On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white
  14. // uncomment this line:
  15. // #define mySerial Serial1

  16. // For UNO and others without hardware serial, we must use software serial...
  17. // pin #2 is IN from sensor (GREEN wire)
  18. // pin #3 is OUT from arduino  (WHITE wire)
  19. // comment these two lines if using hardware serial
  20. SoftwareSerial mySerial(2, 3);

  21. Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

  22. void setup()  
  23. {
  24.   Serial.begin(9600);
  25.   while (!Serial);  // For Yun/Leo/Micro/Zero/...
  26.   delay(100);
  27.   Serial.println("\n\nAdafruit finger detect test");

  28.   // set the data rate for the sensor serial port
  29.   finger.begin(57600);
  30.   delay(5);
  31.   if (finger.verifyPassword()) {
  32.     Serial.println("Found fingerprint sensor!");
  33.   } else {
  34.     Serial.println("Did not find fingerprint sensor :(");
  35.     while (1) { delay(1); }
  36.   }

  37.   finger.getTemplateCount();
  38.   Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
  39.   Serial.println("Waiting for valid finger...");
  40. }

  41. void loop()                     // run over and over again
  42. {
  43.   getFingerprintIDez();
  44.   delay(50);            //don't ned to run this at full speed.
  45. }

  46. uint8_t getFingerprintID() {
  47.   uint8_t p = finger.getImage();
  48.   switch (p) {
  49.     case FINGERPRINT_OK:
  50.       Serial.println("Image taken");
  51.       break;
  52.     case FINGERPRINT_NOFINGER:
  53.       Serial.println("No finger detected");
  54.       return p;
  55.     case FINGERPRINT_PACKETRECIEVEERR:
  56.       Serial.println("Communication error");
  57.       return p;
  58.     case FINGERPRINT_IMAGEFAIL:
  59.       Serial.println("Imaging error");
  60.       return p;
  61.     default:
  62.       Serial.println("Unknown error");
  63.       return p;
  64.   }

  65.   // OK success!

  66.   p = finger.image2Tz();
  67.   switch (p) {
  68.     case FINGERPRINT_OK:
  69.       Serial.println("Image converted");
  70.       break;
  71.     case FINGERPRINT_IMAGEMESS:
  72.       Serial.println("Image too messy");
  73.       return p;
  74.     case FINGERPRINT_PACKETRECIEVEERR:
  75.       Serial.println("Communication error");
  76.       return p;
  77.     case FINGERPRINT_FEATUREFAIL:
  78.       Serial.println("Could not find fingerprint features");
  79.       return p;
  80.     case FINGERPRINT_INVALIDIMAGE:
  81.       Serial.println("Could not find fingerprint features");
  82.       return p;
  83.     default:
  84.       Serial.println("Unknown error");
  85.       return p;
  86.   }
  87.   
  88.   // OK converted!
  89.   p = finger.fingerFastSearch();
  90.   if (p == FINGERPRINT_OK) {
  91.     Serial.println("Found a print match!");
  92.   } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
  93.     Serial.println("Communication error");
  94.     return p;
  95.   } else if (p == FINGERPRINT_NOTFOUND) {
  96.     Serial.println("Did not find a match");
  97.     return p;
  98.   } else {
  99.     Serial.println("Unknown error");
  100.     return p;
  101.   }   
  102.   
  103.   // found a match!
  104.   Serial.print("Found ID #"); Serial.print(finger.fingerID);
  105.   Serial.print(" with confidence of "); Serial.println(finger.confidence);

  106.   return finger.fingerID;
  107. }

  108. // returns -1 if failed, otherwise returns ID #
  109. int getFingerprintIDez() {
  110.   uint8_t p = finger.getImage();
  111.   if (p != FINGERPRINT_OK)  return -1;

  112.   p = finger.image2Tz();
  113.   if (p != FINGERPRINT_OK)  return -1;

  114.   p = finger.fingerFastSearch();
  115.   if (p != FINGERPRINT_OK)  return -1;
  116.   
  117.   // found a match!
  118.   Serial.print("Found ID #"); Serial.print(finger.fingerID);
  119.   Serial.print(" with confidence of "); Serial.println(finger.confidence);
  120.   return finger.fingerID;
  121. }
復(fù)制代碼



作者: eagler8    時間: 2020-2-22 10:01
已注冊手指指紋檢測試驗
找到指紋傳感器!
傳感器包含2個模板
正在等待有效的手指……





作者: eagler8    時間: 2020-2-22 10:04


找到ID#1,置信度為236
找到ID#1,置信度143
找到ID#1   置信度為151
找到ID#2,置信度為100
找到ID#2,置信度為95
找到ID#2,置信度為131
找到ID#1,置信度為69


作者: eagler8    時間: 2020-2-22 10:29

  實驗之四:讀取指紋庫并列表


  1. /*
  2.   【Arduino】168種傳感器模塊系列實驗(資料+代碼+圖形+仿真)
  3.   實驗一百五十:AS608光學(xué)指紋識別模塊 智能鎖/考勤門禁開發(fā)/指紋采集模塊

  4.   實驗之四:讀取指紋庫并列表
  5.   安裝庫:IDE—工具—管理庫—搜索Adafruit-Fingerprint-Sensor-Library—安裝
  6.   實驗接線:
  7.   Vi      +3.3V(請勿接3.3V以上電源,否則燒毀模塊!)
  8.   TX      2
  9.   RX      3
  10.   GND    GND
  11. */


  12. #include <Adafruit_Fingerprint.h>

  13. int getFingerprintIDez();

  14. // pin #2 is IN from sensor (GREEN wire)
  15. // pin #3 is OUT from arduino  (WHITE wire)
  16. SoftwareSerial mySerial(2, 3);


  17. Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

  18. void setup()  
  19. {
  20.   while(!Serial);
  21.   Serial.begin(9600);
  22.   Serial.println("Fingerprint template extractor");

  23.   // set the data rate for the sensor serial port
  24.   finger.begin(57600);
  25.   
  26.   if (finger.verifyPassword()) {
  27.     Serial.println("Found fingerprint sensor!");
  28.   } else {
  29.     Serial.println("Did not find fingerprint sensor :(");
  30.     while (1);
  31.   }

  32.   // Try to get the templates for fingers 1 through 10
  33.   for (int finger = 1; finger < 10; finger++) {
  34.     downloadFingerprintTemplate(finger);
  35.   }
  36. }

  37. uint8_t downloadFingerprintTemplate(uint16_t id)
  38. {
  39.   Serial.println("------------------------------------");
  40.   Serial.print("Attempting to load #"); Serial.println(id);
  41.   uint8_t p = finger.loadModel(id);
  42.   switch (p) {
  43.     case FINGERPRINT_OK:
  44.       Serial.print("Template "); Serial.print(id); Serial.println(" loaded");
  45.       break;
  46.     case FINGERPRINT_PACKETRECIEVEERR:
  47.       Serial.println("Communication error");
  48.       return p;
  49.     default:
  50.       Serial.print("Unknown error "); Serial.println(p);
  51.       return p;
  52.   }

  53.   // OK success!

  54.   Serial.print("Attempting to get #"); Serial.println(id);
  55.   p = finger.getModel();
  56.   switch (p) {
  57.     case FINGERPRINT_OK:
  58.       Serial.print("Template "); Serial.print(id); Serial.println(" transferring:");
  59.       break;
  60.    default:
  61.       Serial.print("Unknown error "); Serial.println(p);
  62.       return p;
  63.   }
  64.   
  65.   // one data packet is 267 bytes. in one data packet, 11 bytes are 'usesless' :D
  66.   uint8_t bytesReceived[534]; // 2 data packets
  67.   memset(bytesReceived, 0xff, 534);

  68.   uint32_t starttime = millis();
  69.   int i = 0;
  70.   while (i < 534 && (millis() - starttime) < 20000) {
  71.       if (mySerial.available()) {
  72.           bytesReceived[i++] = mySerial.read();
  73.       }
  74.   }
  75.   Serial.print(i); Serial.println(" bytes read.");
  76.   Serial.println("Decoding packet...");

  77.   uint8_t fingerTemplate[512]; // the real template
  78.   memset(fingerTemplate, 0xff, 512);

  79.   // filtering only the data packets
  80.   int uindx = 9, index = 0;
  81.   while (index < 534) {
  82.       while (index < uindx) ++index;
  83.       uindx += 256;
  84.       while (index < uindx) {
  85.           fingerTemplate[index++] = bytesReceived[index];
  86.       }
  87.       uindx += 2;
  88.       while (index < uindx) ++index;
  89.       uindx = index + 9;
  90.   }
  91.   for (int i = 0; i < 512; ++i) {
  92.       //Serial.print("0x");
  93.       printHex(fingerTemplate[i], 2);
  94.       //Serial.print(", ");
  95.   }
  96.   Serial.println("\ndone.");

  97.   /*
  98.   uint8_t templateBuffer[256];
  99.   memset(templateBuffer, 0xff, 256);  //zero out template buffer
  100.   int index=0;
  101.   uint32_t starttime = millis();
  102.   while ((index < 256) && ((millis() - starttime) < 1000))
  103.   {
  104.     if (mySerial.available())
  105.     {
  106.       templateBuffer[index] = mySerial.read();
  107.       index++;
  108.     }
  109.   }
  110.   
  111.   Serial.print(index); Serial.println(" bytes read");
  112.   
  113.   //dump entire templateBuffer.  This prints out 16 lines of 16 bytes
  114.   for (int count= 0; count < 16; count++)
  115.   {
  116.     for (int i = 0; i < 16; i++)
  117.     {
  118.       Serial.print("0x");
  119.       Serial.print(templateBuffer[count*16+i], HEX);
  120.       Serial.print(", ");
  121.     }
  122.     Serial.println();
  123.   }*/
  124. }



  125. void printHex(int num, int precision) {
  126.     char tmp[16];
  127.     char format[128];

  128.     sprintf(format, "%%.%dX", precision);

  129.     sprintf(tmp, format, num);
  130.     Serial.print(tmp);
  131. }

  132. void loop()
  133. {}
復(fù)制代碼




作者: eagler8    時間: 2020-2-22 10:35
指紋模板提取器
找到指紋傳感器!
------------------------------------
試圖加載1
加載模板1
試圖獲取1
模板1傳輸:
讀取534字節(jié)。
正在解碼數(shù)據(jù)包……





作者: eagler8    時間: 2020-2-22 10:37


試圖加載3
未知錯誤12
------------------------------------
試圖加載4
未知錯誤12
------------------------------------
試圖加載#5
未知錯誤12
------------------------------------
試圖加載#6
未知錯誤12
------------------------------------
試圖加載7
未知錯誤12
------------------------------------
試圖加載#8
未知錯誤12
------------------------------------
試圖加載#9
未知錯誤12


作者: eagler8    時間: 2020-2-22 10:47
實驗之五:輸入序號,刪除指定指紋模板

  1. /*
  2.   【Arduino】168種傳感器模塊系列實驗(資料+代碼+圖形+仿真)
  3.   實驗一百五十:AS608光學(xué)指紋識別模塊 智能鎖/考勤門禁開發(fā)/指紋采集模塊

  4.   實驗之五:輸入序號,刪除指定指紋模板
  5.   安裝庫:IDE—工具—管理庫—搜索Adafruit-Fingerprint-Sensor-Library—安裝
  6.   實驗接線:
  7.   Vi      +3.3V(請勿接3.3V以上電源,否則燒毀模塊!)
  8.   TX      2
  9.   RX      3
  10.   GND    GND
  11. */

  12. #include <Adafruit_Fingerprint.h>

  13. // On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white
  14. // uncomment this line:
  15. // #define mySerial Serial1

  16. // For UNO and others without hardware serial, we must use software serial...
  17. // pin #2 is IN from sensor (GREEN wire)
  18. // pin #3 is OUT from arduino  (WHITE wire)
  19. // comment these two lines if using hardware serial
  20. SoftwareSerial mySerial(2, 3);

  21. Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

  22. void setup()  
  23. {
  24.   Serial.begin(9600);
  25.   while (!Serial);  // For Yun/Leo/Micro/Zero/...
  26.   delay(100);
  27.   Serial.println("\n\nDelete Finger");

  28.   // set the data rate for the sensor serial port
  29.   finger.begin(57600);
  30.   
  31.   if (finger.verifyPassword()) {
  32.     Serial.println("Found fingerprint sensor!");
  33.   } else {
  34.     Serial.println("Did not find fingerprint sensor :(");
  35.     while (1);
  36.   }
  37. }


  38. uint8_t readnumber(void) {
  39.   uint8_t num = 0;
  40.   
  41.   while (num == 0) {
  42.     while (! Serial.available());
  43.     num = Serial.parseInt();
  44.   }
  45.   return num;
  46. }

  47. void loop()                     // run over and over again
  48. {
  49.   Serial.println("Please type in the ID # (from 1 to 127) you want to delete...");
  50.   uint8_t id = readnumber();
  51.   if (id == 0) {// ID #0 not allowed, try again!
  52.      return;
  53.   }

  54.   Serial.print("Deleting ID #");
  55.   Serial.println(id);
  56.   
  57.   deleteFingerprint(id);
  58. }

  59. uint8_t deleteFingerprint(uint8_t id) {
  60.   uint8_t p = -1;
  61.   
  62.   p = finger.deleteModel(id);

  63.   if (p == FINGERPRINT_OK) {
  64.     Serial.println("Deleted!");
  65.   } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
  66.     Serial.println("Communication error");
  67.     return p;
  68.   } else if (p == FINGERPRINT_BADLOCATION) {
  69.     Serial.println("Could not delete in that location");
  70.     return p;
  71.   } else if (p == FINGERPRINT_FLASHERR) {
  72.     Serial.println("Error writing to flash");
  73.     return p;
  74.   } else {
  75.     Serial.print("Unknown error: 0x"); Serial.println(p, HEX);
  76.     return p;
  77.   }   
  78. }
復(fù)制代碼




作者: eagler8    時間: 2020-2-22 10:55


Delete Finger
Found fingerprint sensor!
Please type in the ID # (from 1 to 127) you want to delete...

刪除指紋
找到指紋傳感器!
請輸入要刪除的ID(從1到127)……


作者: eagler8    時間: 2020-2-22 11:09


刪除ID#9
刪除!
請輸入要刪除的ID(從1到127)。。。
刪除ID#8
刪除!
請輸入要刪除的ID(從1到127)。。。
刪除ID#7
刪除!
請輸入要刪除的ID(從1到127)。。。
刪除ID#6
刪除!
請輸入要刪除的ID(從1到127)。。。
刪除ID#5
刪除!
請輸入要刪除的ID(從1到127)。。。
刪除ID#4
刪除!
請輸入要刪除的ID(從1到127)。。。
刪除ID#3
刪除!
請輸入要刪除的ID(從1到127)。。。


作者: eagler8    時間: 2020-2-22 11:19

  實驗之六:刪除所有指紋模板

  1. /*
  2.   【Arduino】168種傳感器模塊系列實驗(資料+代碼+圖形+仿真)
  3.   實驗一百五十:AS608光學(xué)指紋識別模塊 智能鎖/考勤門禁開發(fā)/指紋采集模塊

  4.   實驗之六:刪除所有指紋模板
  5.   安裝庫:IDE—工具—管理庫—搜索Adafruit-Fingerprint-Sensor-Library—安裝
  6.   實驗接線:
  7.   Vi      +3.3V(請勿接3.3V以上電源,否則燒毀模塊!)
  8.   TX      2
  9.   RX      3
  10.   GND    GND
  11. */

  12. #include <Adafruit_Fingerprint.h>

  13. // On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white
  14. // uncomment this line:
  15. // #define mySerial Serial1

  16. // For UNO and others without hardware serial, we must use software serial...
  17. // pin #2 is IN from sensor (GREEN wire)
  18. // pin #3 is OUT from arduino  (WHITE wire)
  19. // comment these two lines if using hardware serial
  20. SoftwareSerial mySerial(2, 3);

  21. Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

  22. void setup()  
  23. {
  24.   Serial.begin(9600);
  25.   while (!Serial);  // For Yun/Leo/Micro/Zero/...
  26.   delay(100);

  27.   Serial.println("\n\nDeleting all fingerprint templates!");
  28.   Serial.println("Press 'Y' key to continue");

  29.   while (1) {
  30.     if (Serial.available() && (Serial.read() == 'Y')) {
  31.       break;
  32.     }
  33.   }

  34.   // set the data rate for the sensor serial port
  35.   finger.begin(57600);
  36.   
  37.   if (finger.verifyPassword()) {
  38.     Serial.println("Found fingerprint sensor!");
  39.   } else {
  40.     Serial.println("Did not find fingerprint sensor :(");
  41.     while (1);
  42.   }
  43.   
  44.   finger.emptyDatabase();

  45.   Serial.println("Now database is empty :)");
  46. }

  47. void loop() {
  48. }
復(fù)制代碼




作者: eagler8    時間: 2020-2-22 11:21
正在刪除所有指紋模板!
按“Y”鍵繼續(xù)





作者: eagler8    時間: 2020-2-22 11:23


Found fingerprint sensor!
Now database is empty :)

找到指紋傳感器!
現(xiàn)在數(shù)據(jù)庫為空:)


作者: eagler8    時間: 2020-2-22 11:55
Adafruit光學(xué)指紋傳感器相關(guān)資料
learn點adafruit點com/adafruit-optical-fingerprint-sensor/overview

我們喜歡這種特殊的傳感器,因為它不僅易于使用,而且還配備了相當(dāng)簡單的Windows軟件,使模塊的測試變得簡單-您甚至可以使用該軟件進(jìn)行注冊,并在計算機(jī)屏幕上查看指紋的圖像。但是,當(dāng)然,我們不會給您數(shù)據(jù)表和“好運(yùn)”!- 我們編寫了完整的Arduino庫,因此您可以在10分鐘內(nèi)開始運(yùn)行。圖書館可以注冊和搜索,因此非常適合任何項目。我們還編寫了有關(guān)接線和使用的詳細(xì)教程。這是迄今為止您可以獲得的最好的指紋傳感器。
電源電壓: 3.6-6.0VDC
工作電流:最大120mA
峰值電流:最大150mA
指紋成像時間: <1.0秒
窗口面積: 14mm x 18mm
簽名文件: 256字節(jié)
模板文件: 512字節(jié)
存儲容量: 162個模板
安全等級(1-5從低到高安全)
錯誤接受率: <0.001%(安全級別3)
錯誤拒絕率: <1.0%(安全級別3)
接口: TTL串行
波特率: 9600、19200、28800、38400、57600(默認(rèn)為57600)
工作溫度等級: -20C至+ 50C
工作濕度: 40%-85%RH
完整尺寸: 56 x 20 x 21.5mm
暴露的尺寸(放在盒子中時):21mm x 21mm x 21mm三角形
重量: 20克





作者: eagler8    時間: 2020-2-22 14:58
指紋模塊Adafruit-Fingerprint-Sensor-Library庫的示例列表

chanpassword 更改密碼示例
enroll 注冊一個新的指紋 示例
emptyDatabase 刪除所有指紋模板
delete 輸入序號,刪除指定指紋模板
fingerprint 找到一個匹配的指紋(核對指紋)
show_fingerprint_templates讀取指紋庫并列表





作者: eagler8    時間: 2020-2-23 12:30
  1. /*
  2.   【Arduino】168種傳感器模塊系列實驗(資料+代碼+圖形+仿真)
  3.   實驗一百五十:AS608光學(xué)指紋識別模塊+0.91寸OLED液晶屏顯示模塊
  4.   安裝AS608庫:IDE—工具—管理庫—搜索Adafruit-Fingerprint-Sensor-Library—安裝
  5.   安裝OLED庫:IDE—工具—管理庫—搜索Adafruit_SSD1306—安裝
  6.   安裝OLED庫:IDE—工具—管理庫—搜索Adafruit_GFX—安裝

  7.   實驗程序之十三:識別指紋ID,OLED顯示識別人名
  8.   AS608模塊實驗接線
  9.   Vi      +3.3V(請勿接3.3V以上電源,否則燒毀模塊!)
  10.   TX      2
  11.   RX      3
  12.   GND    GND

  13.   OLED 屏幕實驗接線
  14.   oled模塊    Ardunio Uno
  15.   GND---------GND接地線
  16.   VCC---------5V 接電源
  17.   SDA---------A4
  18.   SCL ------- A5
  19. */

  20. #include <Wire.h>
  21. #include <Adafruit_GFX.h>
  22. #include <Adafruit_SSD1306.h>
  23. #define OLED_RESET 4
  24. Adafruit_SSD1306 display(OLED_RESET);

  25. #include <Adafruit_Fingerprint.h>
  26. #include <SoftwareSerial.h>
  27. SoftwareSerial mySerial(2, 3);

  28. Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
  29. int fingerprintID = 0;
  30. String IDname;

  31. void setup() {
  32.   //Fingerprint sensor module setup
  33.   Serial.begin(9600);
  34.   // set the data rate for the sensor serial port
  35.   finger.begin(57600);

  36.   if (finger.verifyPassword()) {
  37.     Serial.println("Found fingerprint sensor!");
  38.   }
  39.   else {
  40.     Serial.println("Did not find fingerprint sensor :(");
  41.     while (1) {
  42.       delay(1);
  43.     }
  44.   }

  45.   //OLED display setup
  46.   Wire.begin();
  47.   display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  48.   //displays main screen
  49.   displayMainScreen();
  50. }

  51. void loop() {
  52.   displayMainScreen();
  53.   fingerprintID = getFingerprintIDez();
  54.   delay(50);
  55.   if (fingerprintID == 1 || fingerprintID == 3) {
  56.     IDname = "huadiao";
  57.     displayUserGreeting(IDname);
  58.   }
  59.   else if (fingerprintID == 2) {
  60.     IDname = "zhanghaoze";
  61.     displayUserGreeting(IDname);
  62.   }
  63. }

  64. // returns -1 if failed, otherwise returns ID #
  65. int getFingerprintIDez() {
  66.   uint8_t p = finger.getImage();
  67.   if (p != FINGERPRINT_OK)  return -1;

  68.   p = finger.image2Tz();
  69.   if (p != FINGERPRINT_OK)  return -1;

  70.   p = finger.fingerFastSearch();
  71.   if (p != FINGERPRINT_OK)  return -1;

  72.   // found a match!
  73.   Serial.print("Found ID #");
  74.   Serial.print(finger.fingerID);
  75.   Serial.print(" with confidence of ");
  76.   Serial.println(finger.confidence);
  77.   return finger.fingerID;
  78. }

  79. void displayMainScreen() {
  80.   display.clearDisplay();
  81.   display.setTextSize(1);
  82.   display.setTextColor(WHITE);
  83.   display.setCursor(7, 5);
  84.   display.println("Waiting fingerprint");
  85.   display.setTextSize(1);
  86.   display.setTextColor(WHITE);
  87.   display.setCursor(52, 20);
  88.   display.println("...");
  89.   display.display();
  90.   delay(2000);
  91. }

  92. void displayUserGreeting(String Name) {
  93.   display.clearDisplay();
  94.   display.setTextColor(WHITE);
  95.   display.setTextSize(2);
  96.   display.setCursor(0, 0);
  97.   display.print("Hello");
  98.   display.setCursor(0, 15);
  99.   display.print(Name);
  100.   display.display();
  101.   delay(5000);
  102.   fingerprintID = 0;
  103. }
復(fù)制代碼



作者: eagler8    時間: 2020-2-23 12:36
本實驗案例中,通過程序之二enroll,注冊了“huadaio”的二個指紋1#和3號,注冊了“zhanghaoze”一個指紋2#。識別指紋ID后,在串口顯示匹配的信心值,在OLED屏顯示匹配的招呼語。

Found fingerprint sensor!
找到指紋傳感器!





作者: eagler8    時間: 2020-2-23 12:46
OLED顯示

Waiting fingerprint
等待指紋




作者: eagler8    時間: 2020-2-23 12:53
串口顯示識別的三個指紋ID




作者: eagler8    時間: 2020-2-23 13:06
OLED屏顯示識別1#指紋“huadaio”




作者: eagler8    時間: 2020-2-23 13:11
OLED屏顯示識別2#指紋“zhanghaoze”




作者: eagler8    時間: 2020-3-4 07:32
還有二個不同型號的指紋模塊,目前不敢動,相關(guān)資料太少了









歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日韩精品视频在线免费观看 | 双性呜呜宫交受不住了h | 日本免费在线观看视频 | 成人动漫免费观看 | 97国产精品 | 两性午夜视频 | 在线免费观看黄色片 | 国产精品一级二级 | 中文字幕在线观看日韩 | 激情91| 日韩一区二区免费视频 | h片免费 | 国产免费成人 | 婷婷在线视频 | 免费看a级片 | 亚洲高清免费视频 | 一级片久久| av不卡一区| 女同一区二区三区 | 久久精品播放 | 色香蕉视频 | 97久久超碰 | 欧美精品福利 | 免费一区二区视频 | 毛片网站视频 | 日韩精品视频在线 | 天堂资源在线 | 激情91 | 四虎影视av | 天天草天天草 | 日韩大片在线观看 | 日韩高清一区 | 欧美亚洲国产精品 | 精品无人国产偷自产在线 | 四虎成人网 | 日本免费在线观看视频 | 久久久精品影院 | 国产做爰免费观看视频 | www.久久久| 蜜臀av在线播放 | 国产一区久久 |