Arduino RFID dörrlås (4 / 5 steg)
Steg 4: Program!
Tid att programmera din arduino. Detta kan vara lite knepigt med hjälp av en grundläggande arduino, kan du behöva trycka på reset-knappen flera gånger före och under den första delen av uppladdningen. En mycket viktig sak att komma ihåg, du får ett uppladdning fel om du inte tillfälligt koppla ID-20 seriell linjen till den arduino Rx linje. ATMega168 bara har 1 Rx ingång och det används för att ladda upp koden till tala till programmeraren. Koppla från ID-20 medan programmering sedan ansluter den tillbaka i när din gjort. Jag använde en FTDI programmerare som kan du programmera arduino via USB med bara 4 trådar. Controller Schematisk visar en pin header anslutning så att du kan ansluta en direkt. Sparkfun säljer också denna del men många kanske redan har den.
Du kan enkelt ladda upp min kod till din arduino och aldrig ser tillbaka men whats roligt i det? Låt mig förklara den grundläggande idén om hur det fungerar.
Först av allt, jag ville inte några externa knappar/växlar/etc och jag ville inte att programmera arduino varje gång jag ville lägga till ett nytt kort. Därför ville jag använda bara RFID kontroll den krets samt kontroll över dörrlåset.
Programmet startar på blå LED tyder på att det är redo att läsa ett nytt kort. När kortet läses avgör det om det är ett giltigt kort eller inte genom att jämföra vad det läsa i till en lista över giltiga kort. Om användaren är giltig, arduino inaktiverar den blå lampan och tänds den gröna lampan i 5 sekunder. Det visar också på en annan utgång höga i 5 sekunder. Denna utgång är ansluten till TIP31A transistorn och gör små arduino att kontrollera en mycket större 12v 300mA dörrlåset utan att skadas. Efter 5 sekunder dörr lås åter låser och LED vänder tillbaka blå vänta på ett annat kort för att läsas. Om kortet är ogiltigt sedan ändras LED till rött i några sekunder och tillbaka till blått för att vänta på ett annat kort.
Det är viktigt att dörren låser fortfarande arbete även om arduino förlorar makt över natten eller återställs. Därför alla giltiga kort ID lagras i EEPROM-minne. ATMega168 har 512 byte EEPROM minne. Varje RFID-kort har ett 5 Hex byten serienummer och en 1 Hex Byte kolla summa som vi kan använda för att kontrollera det fanns inga fel i överföringen mellan ID-20 och arduino.
Giltiga kort är lagrade i EEPROM genom att använda den första byten som en räknare. Till exempel om det finns 3 giltigt kort lagras den första byten i EEPROM skulle vara 3. EEPROM.read(0); = 3. Att veta detta, och faktumet att varje ID är 5 byte långt vi vet att 1-5 är kort en, 6-10 är kort 2 och 11-15 är kort 3. Vi kan göra en loop som ser igenom EEPROM 5 byte i taget och försöker hitta kortet som lästes i av läsaren.
Men hur kan vi lägga nya kort till EEPROM när kretsen har installerats?? Jag har läst i en av RFID korten jag har och hård kodade det vara Master RFID kort. Så även om den hela EEPROM torkas fungerar master kortet fortfarande. När ett kort läses, kontrollerar den först för att se om det är Master card, om inte, sedan fortsätter att se om det är ett giltigt kort eller inte. Om kortet är master kort har vi arduino gå in i en "programmeringsläge" där det blinkar RGB och väntar på en annan giltig tag att läsa. Nästa etiketten som läses läggs till nästa gratis plats i EEPROM och räknaren är ökat 1 om kortet inte redan finns i EEPROM minne. Läsaren sedan återgår till normalt läge och väntar ett nytt kort att läsa.
För närvarande har jag inte programmerat ett sätt att ta bort ett kort som skäl för att ta bort ett kort skulle sannolikt vara det var försvunnet eller stulet. Eftersom detta skulle troligen kunna 1-10 personer vore den enklaste sak att göra att hårt program ett Master radera kort som skall torka alla kort från EEPROM då re lägga dem alla, som tar bara några sekunder. Jag har lagt till kod för att torka EEPROM men jag har inte genomfört denna funktion ännu. .
Koden är fäst i en text arkivera en kopia av listan över delar.