I denna laboration beskrivs hur en RFID‑lösning kan användas i Cisco Packet Tracer för att styra en dörr och en garageport med hjälp av ett mikroprocessorbaserat styrkort (MCU). Fokus ligger inte enbart på hur lösningen byggs rent praktiskt, utan även på varför vissa tekniska val är nödvändiga samt vilka vanliga problem och felsökningsmoment som kan uppstå.
Topologi

Det är viktigt att uppmärksamma att både RFID‑läsaren och MCU:n använder analoga pinnar, men att dessa kan adresseras/kodas på olika sätt beroende på enhet och programmeringsspråk.
Grundläggande funktionsprincip
Först detekterar RFID‑läsaren om ett RFID‑kort finns inom dess läsområde. När ett kort upptäcks läses kortets ID av via kortets inställningar (attribut). Baserat på detta ID avgör RFID‑läsaren om kortet är giltigt eller inte.
- Giltigt kort (Authorized): ID = 1001
- Ogiltigt kort (Unauthorized): alla andra ID‑värden
- Ingen tagg i närheten: inget ID detekteras
RFID‑läsaren skickar därefter ett värde via en analog utgång till MCU:n. MCU:n läser detta analoga värde och använder det som beslutsunderlag för att styra dörren och garageporten. Endast vid giltigt kort öppnas dörrarna, annars förblir de stängda.
Vad är RFID? – teknisk översikt
RFID står för Radio Frequency Identification och är en teknik som används för att identifiera objekt eller personer trådlöst med hjälp av radiovågor. Tekniken bygger på att en RFID‑läsare kommunicerar med en RFID‑tagg, ofta i form av ett plastkort eller en liten bricka, utan att fysisk kontakt krävs.
I ett typiskt passersystem, till exempel vid ingången till ett arbetsrum, håller användaren sitt passerkort nära en kortläsare. Läsaren sänder då ut ett elektromagnetiskt fält som aktiverar RFID‑taggen. Taggen svarar genom att skicka tillbaka sitt unika ID (identifierare), vilket är ett tal eller en kod som representerar användaren i systemet.
RFID‑baserade passersystem bygger i praktiken på principen ”något du har”, det vill säga ett fysiskt kort eller en bricka. Detta skiljer sig från kodlås som bygger på ”något du kan”, exempelvis en PIN‑kod. I mer avancerade säkerhetssystem kombineras dessa metoder för ökad säkerhet, vilket kallas tvåfaktorsautentisering.
Användningsområden för RFID
RFID används i många vardagliga och industriella sammanhang, bland annat för passerkontroll (kort och taggar för dörrar och lokaler), kollektivtrafik och biljettsystem, logistik och lagerhantering, betalningssystem (kontaktlösa kort), spårning av utrustning och produkter, mm.
Inställningar i RFID Reader och RFID Card
För att RFID-lösningen ska fungera korrekt i Packet Tracer krävs vissa inställningar i både RFID Reader och RFID Card. Dessa inställningar påverkar hur information kan skickas mellan enheterna och är avgörande för att MCU:n ska kunna tolka RFID-läsarens beslut.
Inställningar i RFID Reader
I RFID Reader-enheten ändrades inställningarna i fliken I/O Config så att antalet Analog Slots ökades från 0 till 2. Anledningen till detta är att RFID-läsaren som standard inte har några aktiva analoga utgångar. Genom att öka antalet analog slots skapas möjligheten att skicka analoga värden från enheten.
Det är inte alltid uppenbart varför värdet behöver vara just 2, men i praktiken innebär detta att minst en analog slot blir tillgänglig för användning. Utan denna inställning kommer anrop till analogWrite() i RFID-läsarens JavaScript-kod inte att ge någon faktisk utsignal, även om koden i sig är korrekt.
I fliken Thing Editor konfigurerades därefter Slot Mapping. Där valdes:
- Analog som slot-typ
- Slot 1 som aktiv slot
Denna mappning innebär att RFID-läsarens interna logik kopplas till en fysisk analog pin (A1). Det är först efter denna mappning som RFID-läsaren kan skicka ett analogt värde till MCU:n.
Inställningar i RFID Card
RFID-korten konfigurerades i fliken Attributes. För det kort som ska representera ett obehörigt kort (Unauthorized) ändrades värdet på attributet CardID till 2001.
Det behöriga kortet (Authorized) behöll värdet 1001. Dessa ID-värden används i RFID-läsarens kod för att avgöra om ett kort ska ge tillträde eller inte.
Genom att arbeta med olika CardID-värden kan man simulera ett verkligt passersystem där varje kort har ett unikt ID som jämförs mot en behörighetslista.
JavaScript för RFID Reader och Python script för MCU
var DELAY_TIME = 200;
var X_READ_DISTANCE = 80;
var Y_READ_DISTANCE = 80;
var cardID = 0;
var state = 2; // 2=Waiting, 0=Valid, 1=Invalid
function setup() {
IoEClient.setup({
type: "RFID Reader",
states: [
{ name: "Card ID", type: "number", unit: "", controllable: false },
{
name: "Status",
type: "options",
options: { "0": "Valid", "1": "Invalid", "2": "Waiting" },
controllable: false
}
]
});
}
function loop() {
var devices = devicesAt(getCenterX(), getCenterY(), X_READ_DISTANCE, Y_READ_DISTANCE);
var found = false;
var id = 0;
for (var i = 0; i < devices.length; i++) {
if (devices[i] === getName()) continue;
var v = getDeviceProperty(devices[i], "CardID");
if (v === undefined || v === null) {
v = getDeviceProperty(devices[i], "Card ID");
}
if (v !== undefined && v !== null) {
id = Number(v);
found = true;
break;
}
}
if (!found) {
cardID = 0;
state = 2; // Waiting
} else {
cardID = id;
if (cardID === 1001) state = 0; // Valid
else state = 1; // Invalid
}
// SKICKA STATUS SOM ANALOGT VÄRDE
analogWrite(A1, state);
IoEClient.reportStates(cardID + "," + state);
delay(DELAY_TIME);
}
from gpio import *
from time import *
# Koppling enligt din beskrivning:
# Door D0 -> MCU D1
# Garage-door D0 -> MCU D2
door = 1
garage = 2
# RFID reader A1 -> MCU A1
# I MCU-Python används oftast siffror för analogpinnar: A0=0, A1=1, A2=2...
reader = A1
def main():
pinMode(door, OUT)
pinMode(garage, OUT)
while True:
state = analogRead(reader) # 0=Valid, 1=Invalid, 2=Waiting (från RFID-skriptet)
if state == 0:
customWrite(door, 1)
customWrite(garage, 1)
else:
customWrite(door, 0)
customWrite(garage, 0)
sleep(0.1)
if __name__ == "__main__":
main()