RFID-Alarmanlage


von Fabian Kainka
Elektronik-Labor   Projekte   AVR 



Bei Pollin gibt es einen RFID-Reader-Bausatz für 125-kHz-Transponder. Jeder Schlüssel meldet eine eindeutige ID-Nummer, die es kein zweites mal auf der Welt gibt. Eine Spule sendet ein 125-kHz-Signal und empfängt die Daten vom Schlüssel. Bezugsquelle:  www.pollin.de/shop/dt/MDQ5OTgxOTk-/Bausaetze_Module/Bausaetze/Bausatz_RFID_125kHz_Empfaenger.html

 

Die Spule wurde zusammen mit einer RGB-LED an der Tür befestigt. Außerdem gibt es einen Magnetkontakt und eine Sirene.


 
Auf der Platine arbeitet ein ATtiny2313. Das Beispielprogramm von Pollin ist in Bascom geschrieben. Die Anpassung war einfach. Im Programm steht nun der Schlüssel  (Wert = "F2010586D9") als Konstante. Wenn dieser Schlüssel ausgelesen wird, wird die LED auf grün geschaltet und der Alarm deaktiviert. Achtung, die Konstante wurde als Vorsichtsmaßnahme gegen Einbrecher geändert. Wer die Anlage nachbauen will, muss zuerst seinen eigenen Schlüssel auslesen.



http://www.youtube.com/user/bkelektronik

'-------------------------------------------------------------------------------
' Beispielprogramm für den Pollin-Electronic RFID-Bausatz, ArtNr:810059
' Es dient zum Auslesen einer HITAG RFID-Karte mittels eines Atmel U2270B.
' Âusschnitte des Codes wurden von der Beispielsoftware für den Em4095 von
' www.mcselec.de übernommen und für den U2270B abgeändert
' Als Controller wird ein AT-Tiny 2313 verwendet.

' Sie handeln auf eigene Gefahr!
' Bei diesen Daten handelt es sich um Beispielanwendungen die nicht für den produktiven
' Einsatz geacht sind.
' Pollin Electronic gibt keine Garantien irgendeiner Art , weder ausdrücklich
' noch implizit , einschließlich unbegrenzt aller Garantien der Verwendbarkeit
' dieser Daten für einen bezeichneten oder nicht bezeichneten Zweck.
' Pollin Electronic ist nicht haftbar für jedwede Folgeschäden die aufgrund
' der Benutzung dieser Daten entstehen. Dies gilt auch dann, wenn
' Pollin Electronic von der Möglichkeit eines solchen Schadens unterrichtet worden ist.
' Firma: Pollin-Electronic-GmbH
' Autor: Christian Schmailzl
' Anpassung: Fabian Kainka
'------------------------------------------------------------------------------------

$regfile = "2313def.dat" ' Controller : Tiny 2313
$baud = 9600 ' Übertragungsrate der UART-Schnittstelle
$crystal = 8000000 ' Taktfrequenz des Controllers

Dim Tags(5) As Byte '"Tags" als Array mit 5 Bytes definieren bytes
Dim Zaehler As Byte '"Zähler" als Byte definieren
Dim Wert As String * 5 '"Wert" als String mit 5 Hexwerten definieren

Config Portb = Output 'Port B als Ausgang definieren
Config Hitag = 64 , Type = Em4095 , Demod = Pind.3 , Int = @int1 'konfiguriert den Timer und die Variablen für HITAG
_cfe Alias Portd.2 '_cfe wird dem Portd.2 zugewiesen
Config _cfe = Output '_cfe wird als Ausgand definiert
_cfe = 1 '_cfe wird high

Config Debounce = 30 'Tastenentprellung = 30ms

On Int1 Checkints Nosave 'Int1 wird als Eingang für HITAG verwendet

Mcucr.isc10 = 1 ' entspricht: config INT1 = changing ( der Befehl wird vom MC unterstützt,

Mcucr.isc11 = 0 ' beim 2313 aber nicht von Bascom)







Enable Interrupts 'Enable all interrupts

' Set Portb.6 ' Led 1 einschalten
' Set Portb.7 ' Led 2 einschalten


Main:

' Portb.1 grüm
' Portb.3 blau
' Portb.4 rot


' ab hier beginnt das Hauptprogramm
Set Portb.0

Do
Set Portb.3 'rot ' Do-Schleife
If Readhitag(tags(1)) = 1 Then ' INT1 wird enabled
For Zaehler = 5 To 1 Step -1 ' For-Schleife beginnend von 5 nach 1; rückwärts zählend
Wert = Wert + Hex(tags(zaehler)) ' "Wert" = bestehender inhalt in der Variable + gerade gelesenen
' Tag an Position vom Zähler
Next

If Wert = "F2010586D9" Then

Set Portb.6
Reset Portb.3
Set Portb.1 'grün ' Ende For-Schleife
Reset Portb.0
Wait 10
Reset Portb.1
Set Portb.3
Set Portb.0
Else
Reset Portb.6
Set Portb.0
End If
Gosub Senden ' gehe zu Unterroutine
End If ' Ende der If-Abfrage

Debounce Pind.4 , 1 , Taste1 , Sub ' Taste 1 entprellen; wenn gerdückt, zur Unterroutine "Taste1" springen
Debounce Pind.5 , 1 , Taste2 , Sub ' Taste 2 entprellen; wenn gerdückt, zur Unterroutine "Taste2" springen
Debounce Pind.6 , 1 , Taste3 , Sub ' Taste 3 entprellen; wenn gerdückt, zur Unterroutine "Taste3" springen
Waitms 500 ' Warte 500 ms
Loop ' Sprunganweisung zum Anfang Do-Schleife

Taste2:
Return

Taste1: ' Unterroutine "Taste1"

If _cfe = 1 Then ' If-Abfrage
Print "ausgeschaltet" ' Text über UART ausgeben

_cfe = 0 ' _cfe auf low setzen -> Treiberstufen des U2270b abschalten
Bitwait Pind.4 , Reset ' Warte bis Pind.4 = low
Waitms 30 ' Warte 30ms ( Entprellung)
Bitwait Pind.4 , Set 'Warte bis Pind.4 = high
Print "eingeschaltet" ' Text über UART ausgeben
_cfe = 1 ' _cfe auf high setzen -> Treiberstufen des U2270b einschalten
Gosub Main ' Sprunganweisung zum Anfang der Hauptschleife
End If ' Ende der If-Anweisung
Return ' Sprunganweisung in die Hauptschleife

Taste3: ' Unterroutine "Taste3"
Toggle Portb.7 ' Led 2 Zustand wechseln
Wert = "T3" ' Wert = "T3"
Gosub Senden ' Sprungbefehl zur Unterroutine "Senden"
Bitwait Pind.6 , Reset ' Led 2 Zustand wechseln
Return ' Sprunganweisung in die Hauptschleife

Checkints: ' Unterroutine "Checkints:"
Call _checkhitag ' Eine ausgelagerte Unterroutine aufrufen
Return ' Sprunganweisung in die Hauptschleife


Senden: ' Unterroutine "Senden"
Print Wert ' Variable "Wert" über Uart ausgeben
Wert = "" ' Inhalt von Variable "Wert" = ""
Return 'Sprunganweisung in die Hauptschleife

End


Elektronik-Labor   Projekte   AVR