ዝርዝር ሁኔታ:

AVR/Arduino RFID Reader በ UART ኮድ በ C: 4 ደረጃዎች
AVR/Arduino RFID Reader በ UART ኮድ በ C: 4 ደረጃዎች

ቪዲዮ: AVR/Arduino RFID Reader በ UART ኮድ በ C: 4 ደረጃዎች

ቪዲዮ: AVR/Arduino RFID Reader በ UART ኮድ በ C: 4 ደረጃዎች
ቪዲዮ: Arduino Interrupt 2024, ህዳር
Anonim
AVR/Arduino RFID Reader በ UART ኮድ በ C ውስጥ
AVR/Arduino RFID Reader በ UART ኮድ በ C ውስጥ

RFID በሁሉም ቦታ የሚገኝ እብደት ነው - ከዕቃ ቆጠራ ስርዓቶች እስከ ባጅ መታወቂያ ስርዓቶች። ወደ የመደብር ሱቅ ከሄዱ እና እነዚያን የብረት መመርመሪያ በሚመስሉ ነገሮች በመግቢያ/መውጫ ነጥቦች ላይ ከተጓዙ ፣ ከዚያ RFID ን አይተውታል። RFID ን በማቀናበር ላይ ጥሩ መረጃ ለማግኘት ብዙ ቦታዎች አሉ ፣ እና ይህ አስተማሪው ተከታታይ ግቤትን ለማንበብ በሚያስፈልገው የ C ኮድ ላይ በማተኮር ፓራላክስ RFID አንባቢን (Serial TTL) ን በ AVR ላይ በመጫን ላይ ያተኩራል። ኮዱ በ C ውስጥ ነው እና ማንኛውንም ውጫዊ ቤተመጽሐፍት አይጠቀምም። በእውነቱ ፣ ከ RFID አንባቢው የባውድ ፍጥነት ጋር በማመሳሰል እና የተገናኘበትን ዲጂታል ፒን በማንበብ UART ን ሳይጠቀም በቀጥታ 2400 ባውድን ይናገራል። ተደሰተ? እኔ ራሴ.

ደረጃ 1: ዕቃዎቹን ያግኙ

ዕቃዎቹን ያግኙ
ዕቃዎቹን ያግኙ

የሚከተሉትን ክፍሎች ዝርዝር ያስፈልግዎታል

  • RFID Reader (Parallax #28140 $ 39.99)
  • የ RFID መለያ (ፓራላክስ #32397 $ 0.99)
  • AVR ወይም Arduino clone (የአክሲዮን AVR ን የሚጠቀሙ ከሆነ max232 ፣ 5 x 1uF capacitors ፣ እና DE9 አያያዥ ያስፈልግዎታል)
  • ብረታ የሌለው የዳቦ ሰሌዳ

አማራጭ

  • 4 አቀማመጥ ራስጌ
  • ሽቦ

(እና የመለያ መረጃን ለማገናኘት max232 ወዘተ) እንዲሁም የመለያ መረጃን በ RS232 በኩል በመላክ ምትክ የእርስዎን ተወዳጅ LCD ማያ ገጽ ማገናኘት ይችላሉ።

ደረጃ 2 - ክፍሎቹን ያገናኙ

ክፍሎችን ያገናኙ
ክፍሎችን ያገናኙ
ክፍሎችን ያገናኙ
ክፍሎችን ያገናኙ
ክፍሎችን ያገናኙ
ክፍሎችን ያገናኙ

የነገሮች የሃርድዌር ጎን በጣም ቀላል ነው። የእኔን የ RFID አንባቢን በቀጥታ ወደ ዳቦ ሰሌዳዬ ከማስገባት ይልቅ የ RFID ን አንባቢን በተሻለ ሁኔታ ለማንቀሳቀስ ፈጣን ገመድ ለመሥራት መርጫለሁ። ለዚያ ፣ እኔ ከተኛሁበት እና በሶስት ሽቦዎች ላይ ከሸጥኳት አንዲት ሴት ሶኬት ራስጌ ስትሪፕ 4 ቦታዎችን ብቻ አቋረጥኩ። የኤሌክትሪክ ቴፕ የጌትቶ አገናኝን አጠናቀቀ። የ RFID አንባቢ 4 ግንኙነቶች አሉት

  • ቪ.ሲ
  • አንቃ
  • ውጣ
  • Gnd

ምናልባት እርስዎ እንደገመቱት ፣ Vcc ን ከ +5V እና Gnd ወደ መሬት ያገናኙ። የ RFID አንባቢ ብዙ ኃይል ስለሚወስድ ፣ እሱን ለማጥፋት እና በተለያዩ ክፍተቶች ላይ ለማብራት የ ENABLE ፒን መታ ማድረግ ይችላሉ። እኔ በቀላሉ ለመቀጠል መርጫለሁ። የተገላቢጦሽ ስለሆነ እሱን ለማግበር LOW ይጎትቱትታል። በአማራጭ ፣ ከመሬት ጋር ማገናኘት ይችላሉ። እኔ ከወሰንኩ የማስቻል/የማሰናከል አማራጮችን ለመስጠት ከፒንዲ 3 ጋር አገናኘሁት። የ OUT ፒን መለያው ካነበበ በኋላ አንባቢው ተከታታይ መረጃውን የሚልክበት ነው። ከፒንዲ 2 ጋር አገናኘሁት። ማስታወሻ ፣ በፓራላክስ ዩኒቨርስ ውስጥ ፣ ቀይ ማለት ሂድ ማለት ነው። ያ ማለት ፣ አረንጓዴ LED ማለት አሃዱ እንቅስቃሴ -አልባ እና ስራ ፈት ነው ፣ ቀይ LED ደግሞ አሀዱ ንቁ ነው ማለት ነው። * ሽርሽር* ምስል ይሂዱ።

ደረጃ 3 - ኮዱን ይፃፉ

ኮዱን ይፃፉ
ኮዱን ይፃፉ

ከ RFID አንባቢ ውሂቡን ለማንበብ ፣ መለያ መቼ እንደተሰጠ ማወቅ አለብዎት ፣ ውሂቡን ከተከታታይ ወደብ ያውጡ ፣ ከዚያ ወደ አንድ ቦታ ይላኩት።

የ RFID አንባቢ የውሂብ ቅርጸት

የ Parallax RFID አንባቢ በ 2400 ባውድ ቋሚ እና የበረዶ ፍጥነት ፍጥነት መረጃን ይልካል። የ RFID መለያ 10 ባይት ነው። ስህተትን ለይቶ ለማወቅ/ለማረም ፣ አንባቢው ከዘፈቀደ ጫጫታ ሊነሳ ስለሚችል ፣ ባለ 10 ባይት RFID በመነሻ እና በማቆሚያ ተዘግቷል። የመነሻ ተልዕኮ የመስመር ምግብ (0x0A) እና የማቆሚያ ላኪው የጋሪ መመለሻ (0x0 ዲ) ነው። ይህን ይመስላል -

[ጀምር ሳንቲንኤል | ባይት 1 | ባይት 2 | ባይት 3 | ባይት 4 | ባይት 5 | ባይት 6 | ባይት 7 | ባይት 8 | ባይት 9 | ባይት 10 | Sentinel አቁም]እነዚህ ሦስቱ ዋና ደረጃዎች ናቸው።

መለያ ሲቀርብ ይወቁ

ክትትል በሚደረግበት ፒን ላይ ለውጥ መከሰቱን የጽኑዌር ማሳወቂያ በ AVR ላይ የፒን ለውጥ ማቋረጥን እጠቀም ነበር። ለዚህ AVR ን ማዋቀር ቀላል እና ባንዲራውን ማቀናበር ፣ የትኛውን ፒን መከታተል እንደሚፈልጉ ለ MCU መንገር እና ዓለም አቀፍ ማቋረጫ ቢትን ማዘጋጀት ይጠይቃል። PCINT ን ያዋቅሩ

BSET (PCICR ፣ PCIE2); // የፒን ለውጥ ማቋረጫ መቆጣጠሪያ ምዝገባ pcie2 BSET (PCMSK2 ፣ PCINT18); // ለ PCINT18 (PD2) BSET (SREG ፣ 7) የፒን ለውጥ መቋረጥን ያንቁ ፤ // SREG I-bit ን ያዘጋጁበማቋረጫ ቬክተርዬ ውስጥ መላውን ባይት በጥቂቱ አንብቤ ባይት በዓለም አቀፋዊ ባልተለመደ የቁምፊ ድርድር ውስጥ ISR ን አጭር ለማድረግ ይፈልጋሉ። በእያንዳንዱ መቋረጥ የሚከተሉትን አደርጋለሁ

  • ትንሽ ጅምር ላይ መሆኔን ለማረጋገጥ ይፈትሹ
  • በ 2400 ባውድ (የ RFID አንባቢ ፍጥነት) በመካከለኛ ምት ላይ ጊዜውን ያቁሙ
  • የመነሻውን ቢት ይዝለሉ እና ወደ ቀጣዩ ቢት መሃል ያቁሙ
  • እያንዳንዱን ትንሽ ወደ ያልተፈረመ ኢንቲጀር ያንብቡ
  • 8 ቢት ሲኖረኝ ፣ ባይት ወደ ቁምፊ ድርድር ያስገቡ
  • እኔ 12 ባይት ስሰበስብ ለስህተት መለያ መለያው እንደተነበበ ለ MCU ያሳውቁ።

በተከታታይ ልምምዶች ውስጥ በሙከራ ለተወሰኑ መዘግየቶች ከዴቪድ ሜሊስ ኮዱን ከቀየረው ከሚካኤል ሃርት የ SoftSerial ኮድን ቀይሬያለሁ።

RS232 ውፅዓት ይቃኙ

የ PCINT አሠራር የ RS232 ን ውፅዓት ከ RFID አንባቢ ለማንበብ ኮዱን ይ.ል። እኔ 12 ባይት ባገኘሁበት ጊዜ (ባለ 10 ባይት RFID እና ላኪዎች) እኔ bDataReady ን ወደ 1 አዘጋጀሁ እና ዋናው ሉፕ ውሂቡን እንዲያከናውን እና እንዲያሳይ ያድርጉ።

// ይህ የሚያቋርጥ ተቆጣጣሪ ነው ISR (PCINT2_vect) {ከሆነ (BCHK (PIND ፣ RFID_IN)) // የመነሻ ቢት ወደ ዝቅተኛ ይመለሳል ፤ uint8_t ቢት = 0; TunedDelay (CENTER_DELAY); // ለ (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY)/ የመነሻ ቢት ላይ ማዕከል; // ትንሽ ዝለል ፣ ወንድም… ከሆነ (BCHK (PIND ፣ RFID_IN)) BSET (ቢት ፣ x) ፤ ሌላ BCLR (ቢት ፣ x); } TunedDelay (INTRABIT_DELAY); // ዝለል ማቆሚያ ቢት RFID_tag [rxIdx] = ቢት; ++ rxIdx; ከሆነ (rxIdx == 12) bDataReady = 1;}

መለያዎን ያሳዩ

በዋናው () ፣ ለ (ለዘላለም) loop ፣ bDataReady ተዘጋጅቶ እንደሆነ ለማየት እፈትሻለሁ ፣ ይህም አጠቃላይ የ RFID መዋቅር ተልኳል። ከዚያ ትክክለኛ መለያ መሆኑን ለማየት እፈትሻለሁ (ማለትም ቁምፊዎች 0x0A እና 0x0D በቅደም ተከተል ይጀምሩ እና ያቁሙ) ፣ እና እንደዚያ ከሆነ የ RS232 ግንኙነቴን እልክለታለሁ።

ለ (;;) {ከሆነ (bDataReady) {#ifdef _DEBUG_ USART_tx_S ("ባይት ጀምር:"); USART_tx_S (itoa (RFID_tag [0] ፣ & ibuff [0], 16))); ibuff [0] = 0; ibuff [1] = 0; USART_tx_S ("\ n ባይት አቁም"); USART_tx_S (itoa (RFID_tag [11] ፣ & ibuff [0], 16))) ፤#endif if (ValidTag ()) {USART_tx_S ("\ nRFID Tag:"); ለ (uint8_t x = 1; x <11; x ++) {USART_tx_S (itoa (RFID_tag [x] ፣ ibuff ፣ 16))); ከሆነ (x! = 10) USART_tx (& apos: & apos); } USART_tx_S ("\ n"); } rxIdx = 0; bDataReady = 0; }}

ደረጃ 4 ኮድ እና ስንብት

ይህ ገጽ አግባብነት ካለው ኮድ ጋር የዚፕ ፋይል ይ containsል። በ AVR ስቱዲዮ 4.16 ውስጥ ተፃፈ። የፕሮግራም ሰሪ ማስታወሻ ደብተር ፣ ግርዶሽ ወይም ቪ (ወይም ሌላ ነገር) የሚጠቀሙ ከሆነ የታመነ Makefile ን ወደ ማውጫው መቅዳት እና እነዚህን ፋይሎች ወደ ምንጭ መስመር ማከል ያስፈልግዎታል። 16 ሜኸ MCU። በተለየ የሰዓት ድግግሞሽ የሚሮጡ ከሆነ ፣ በባውድ የጥራጥሬ መጠን ላይ ለማስተካከል የተስተካከሉ መዘግየቶችን በሙከራ መወሰን ያስፈልግዎታል። ይህ አስተማሪ በሆነ መንገድ እንደረዳዎት ተስፋ አደርጋለሁ። እንዴት ሊሻሻል እንደሚችል ማንኛውም ጥቆማዎች ካሉዎት እኔን ለማሳወቅ አያመንቱ!

የሚመከር: