Pentru functionalitatea de baza se vor folosi: 1x Arduino UNO, 1x Servomotor, 1x Modul RFID. La acestea pentru o utilizare mai intuitiva se vor adauga urmatoarele componte extra: 1x buzzer, 1x I2C LCD Display, 3x LEDs
Utilizatorul prezinta cartela la senzorul RFID. Daca aceasta este gresita, buzzer-ul si semaforul vor atentiona utilizatorul de acest lucru. Daca este corecta, va fi actionat servomotorul, ridicand bariera. In tot acest timp semaforul se va afla in 3 stari, determinate de pozitia barierei: RED (CLOSED), YELLOW (AJAR = OPENING/CLOSING), GREEN (OPEN), iar pe display vor fi afisate mesaje corespunzatoare.
Schema bloc:
Am folosit bibliotecile
#include <SPI.h> - RFID communication #include <MFRC522.h> - RFID #include <Servo.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <string.h>
Am pornit din exemplul DumpInfo din biblioteca MFRC522, care afiseaza datele unui tag detectat, din care am selectat UID-ul acestuia. De acolo am creat vectorul (de strings) de taguri acceptate, vectorul de masini in parcare, logica acceptarii in parcare, interactiunea/oferirea de informatii prin intermediul display-ului, buzzer-ului, semaforului.
Functia de loop:
void loop() { lcd.createChar(0, smiley); lcd.createChar(1, frown); if(getPresentCars() == CAPACITY ) display_fullMessage(); else display_WelcomeCounter(); lightsRed(); // by default the gate is lowered // Look for new cards if ( ! mfrc522.PICC_IsNewCardPresent()) return; // Select one of the cards if ( ! mfrc522.PICC_ReadCardSerial()) return; String tag = getTagID(); // accepted tag and free slots in the parking area if (validTag(tag) && (getPresentCars() != CAPACITY || is_carPresent(tag)) ) { if (!is_carPresent(tag)) addCar(tag); else removeCar(tag); lightsYellow(); tone(BUZZER_PIN, 6644, 250); // acceptance okay-ish sound raiseGate(); lightsGreen(); delay(2500); lightsYellow(); lowerGate(); } else { lightsFail(); buzzerFail(); delay(3000); } }
Implementarea functiilor din loop poate fi vazuta in fisiserul parking.ino din arhiva aflata in sectiunea Download.
(*) - In realitate nu se verifica doar daca este un tag valid. Verificam de asemenea si daca masina doreste sa iasa din parcare sau sa intre. Daca masina vrea sa iasa se va ridica bariera si aici se termina acest caz, dar daca masina vrea sa intre intai trebuie sa fie indeajuns de multe locuri disponibile in parcare, altfel se trece in rutina de fail precizata la 4.2.
Pentru vizualizarea unui exemplu de utilizare se poate apasa pe imagine (link spre youtube). In exemplu se poate observa rutina urmatoare:
Desi pare simplist, proiectul poate avea o grad de utilitate destul de mare, prin parcarile private, rezidentiale etc. Pentru a fi folosite in aceste spatii ar fi nevoie totusi de un motor cu putere mult mai mare pentru a putea misca barierele/portile.