
- •Розділ 1аналітичний розділ
- •1.1 Система контролю і управління доступом
- •1.2 Кодування даних транспондерів
- •1.3 Антиколізія
- •1.4 Приклад проектування базової групи платформи транспондерів
- •1.5 Результати проведення випробування транспондер на пар
- •1.6 Пристрої ідентифікації доступу
- •1.7Пристрої контролю й керування доступом
- •1.8 Мережеві системи
- •1.9 Автономні системи
- •Розділ 2 розробка апаратної підсистеми
- •2.1 Апаратна платформа Arduino
- •2.2 Arduino Uno
- •2.3 Огляд модуляFrid–rc522
- •2.3.1 Iso cтандарти
- •2.4 Spi — послідовний периферійний інтерфейс
- •2.5 Опис сервоприводаTowerPro sg90
- •Розділ 3 розробка програмної підсистеми
- •3.1 Середовище розробки Arduino
- •3.2 Створення найпростішого прикладу в середовищі Arduino
- •3.3 Автономні системи контролю і управління доступом
- •3.2 Мережеві системи контролю і управління доступом
- •3.3 Опис роботи програмного забезпечення
- •Розділ 4 економічна частина
- •4.1 Розрахунок витрат на розробку та впровадження проектного рішення
- •4.2 Розрахунок часу на створення
- •4.3 Розрахунок кошторису капітальних витрат на обладнання
- •4.4 Розрахунок виробничої площі робочих місць розробників та вартість основних фондів
- •4.6 Визначення розміру заробітної плати зайнятих у проекті
- •4.7 Розрахунок витрат на електроенергію
- •4.8 Визначення витрат на сировину і матеріали
- •4.9 Розрахунок собівартості розробки
- •4.10 Розрахунок ціни
- •4.11 Розрахунок техніко-економічних показників на розробку
- •Розділ 5 охорона праці та безпека в надзвичайних ситуаціях
- •5.1. Оцінка стану охорони праці на підприємстві
- •5.2 Аналіз стану пожежної безпеки
- •5.3 Виявлення небезпечних і шкідливих виробничих факторів
- •5.4 Безпека в надзвичайних ситуаціях
- •5.5 Заходи щодо поліпшення охорони праці та пожежної безпеки
- •Висновки
- •Перелік скорочень, символів та спеціальних термінів
- •Список використаних джерел
- •Додатки
3.3 Опис роботи програмного забезпечення
#include <SPI.h> // стандартна в Arduino IDE бібліотека для роботи з SPI шиною.
#include <Servo.h> // стандартна в Arduino IDE бібліотека для управління сервомоторчиком
#include <MFRC522.h> // Хедер з однойменим класом для управління радіочастотною ідентифікацією.
// номери пінів управління радіочастотною ідентифікацією.
#define SS_PIN 10
#define RST_PIN 9
const int RGB_LED_PINUMBERS[] = { 5, 6, 7 }; // номери пінів-виходів для RGB-світлодіода
const int SERVO_PINUMBER = 3; // номери пінів управління сервомоторчиком
const int BUZZER_PINUMBER = 4; // номери пінів управління бузером
const int BUTTON_PINUMBER = 2; // номер входа, подключенний до кнопкі
const int NEW_CARD_CHECK_DELAY = 500; // затримка між перевірками піднесеній карти в мілісекундах
const int OPEN_CLOSE_DELAY = 3000; // затримка між відкриттям і закриттям
const byte tehUID[4] = { 0x33, 0xFF, 0x6B, 0x9A }; // tehUID карти, на яку реагуємо позитивно
bool buttonState = 0; // змінна для зберігання стану кнопки
enum States { // Стан контролера:
wait, check, open, close
}; States state; // поточний стан
bool rightCard; // Для запам'ятовування в циклі перевірки вірності карти, вірна вона
bool white; // Стан світлодіода (чи горить), поки перебуваємо в стані очікування карти
int pos = 0; // Положення ротора сервомотора (градуси)
Servo myservo; // Примірник Servo для управління сервомотором
MFRC522 mfrc522(SS_PIN, RST_PIN); // Примірник MFRC522 для управління РЧІ-рідером.
void setup() {
Serial.begin(9600); // Почати спілкування з компом по послідовному порту
SPI.begin(); // Ініціалізація SPI-шини.
mfrc522.PCD_Init(); // Ініціалізація РЧІ-читалки
myservo.attach(SERVO_PINUMBER); // Ініціалізація керуючого сервоприводом об'єкта із зазначеним піном для роботи
Serial.println("Scan PICC to see UID and type..."); // розмовляємо з портом, так.
white = false; // До початку роботи світлодіод не горить
state = wait; // Робота починається з стану очікування
// активуємо на вихід піни для RGB-лампочки:
pinMode(RGB_LED_PINUMBERS[0], OUTPUT); // red
pinMode(RGB_LED_PINUMBERS[1], OUTPUT); // green
pinMode(RGB_LED_PINUMBERS[2], OUTPUT); // blue
pinMode(BUZZER_PINUMBER, OUTPUT); // активуємо на вихід пін для гудка
pinMode(BUTTON_PINUMBER, INPUT); // активуємо пін на вхід, чекаємо кнопку}
void loop() {
switch (state){
case wait:
Waiting();
return;
case check:
Checking();
return;
case open:
Opening();
return;
case close:
Closing();
return;
}
}
void Waiting(){
delay(NEW_CARD_CHECK_DELAY);
/// мигаем белым:
if (!white){
digitalWrite(RGB_LED_PINUMBERS[0], HIGH); // запалюємо червоний
digitalWrite(RGB_LED_PINUMBERS[1], HIGH); // запалюємо зелений
digitalWrite(RGB_LED_PINUMBERS[2], HIGH); // запалюємо синій
white = true;
}
else{
digitalWrite(RGB_LED_PINUMBERS[0], LOW); // гасимо красний
digitalWrite(RGB_LED_PINUMBERS[1], LOW); // гасимо зелений
digitalWrite(RGB_LED_PINUMBERS[2], LOW); // гасимо синій
white = false;
}
// перевіряємо наявність нової карти:
if (mfrc522.PICC_IsNewCardPresent())
state = check;
// зчитуємо значення з входу кнопки
buttonState = digitalRead(BUTTON_PINUMBER);
// перевіряємо чи натиснута кнопка
// якщо натиснута, то buttonState будет HIGH:
if (buttonState == HIGH) {
state = open;
}
}
void Checking(){
// Жовтий:
digitalWrite(RGB_LED_PINUMBERS[0], HIGH); // запалюємо червоний
digitalWrite(RGB_LED_PINUMBERS[1], HIGH); // запалюємо зелений
digitalWrite(RGB_LED_PINUMBERS[2], LOW); // гасимо синій
// Прочитуємо UID однією з піднесеної карток
if (!mfrc522.PICC_ReadCardSerial()) {
return;
}
delay(500);
rightCard = true; // Забуваємо про попередню перевірку
// перевіряємо лічений UID:
for (byte i = 0; i < 4; i++) {
if (tehUID[i] != mfrc522.uid.uidByte[i])
rightCard = false;
}
if (rightCard)
state = open; // Відкриваємося, якщо та сама
else{
Serial.println("Unknown CARD.");
digitalWrite(5, HIGH); // запалюємо світлодіод
digitalWrite(6, LOW); // гасимо світлодіод
digitalWrite(7, LOW); // гасимо світлодіод
digitalWrite(4, HIGH);
//buzz(4, 7000, 2000); // buzz the buzzer on pin 4 at 2500Hz for 500 milliseconds
delay(2000); // wait a bit between buzzes
digitalWrite(4, LOW);
state = wait; // Чекаємо іншу, якщо ні
}
}
void Opening(){
Serial.println("OPEN");
digitalWrite(RGB_LED_PINUMBERS[0], LOW);
digitalWrite(RGB_LED_PINUMBERS[1], HIGH); // Зеленим
digitalWrite(RGB_LED_PINUMBERS[2], LOW);
delay(500); // імітуємо активну діяльність. Зчитування відбувається набагато швидше. Ця затримка створена для краси презентації.
ServoOpen();
state = close;
}
void Closing(){
delay(OPEN_CLOSE_DELAY);
digitalWrite(RGB_LED_PINUMBERS[1], LOW);
ServoClose();
state = wait;
}
// Дві процидурку повороту ротора серви на 180:
void ServoOpen(){
for (pos = 0; pos <= 180; pos += 1){ // Крутимо з нульового положення на протилежне по одному градусу
myservo.write(pos); // Говоримо серве рухатися на градус далі
delay(15); // 15мс чекаємо завершення повороту
}
}
void ServoClose(){
for (pos = 180; pos >= 0; pos -= 1){
myservo.write(pos);
delay(15);
}
}