Перший pet-проект: автоматизація контрольно-пропускного пункту

Нещодавно ми писали невелику статтю про те, як одночасно навчатися та працювати в ІТ-компанії. Якщо коротко, то для початку добре було б знайти собі ментора, який може надати рекомендації щодо літератури та подальшого напрямку розвитку. Надзвичайно корисно мати хоча б один повністю завершений pet-проект, навіть якщо він буде простеньким. Далі вже необхідно складати резюме та шукати вакансії. Поради щодо написання резюме можна знайти тут, а вакансії можна моніторити нашій групі по хештегу #work_itkpi. У даній же статті розглянемо приклад невеличкого pet-проекту.

Даний матеріал розіб’ємо на дві складові – постановка задачі і основні кроки реалізації, та детальний туторіал.

Постановка задачі

Перш за все, необхідно придумати такий проект, який був би цікавий у реалізації та допоміг би вивчити щось нове. Можливо, це буде якийсь “велосипед” чи вже існуюча програма, головне реалізувати її власноруч. Моя ідея прийшла зовні: до мене звернулись із проханням реалізувати автоматизований доступ до гаражного кооперативу, основною задачею якого було б обмеження доступу до нього тих, хто не оплатив оренду вчасно. Оскільки замовник не вказував мову виконання та використовувані технології, то було обрано мову С# та організацію доступу за допомогою RFID-карток.

В результаті дослідження ринку пропускних систем з’ясував, що жодна компанія у місті не спроможна реалізувати поставлену задачу, оскільки ніхто не працює одночасно із програмним забезпеченням та “залізом”.

Почнемо з найголовнішого – Windows-застосунку. Оскільки дана система необхідна лише локально для одного кооперативу, то не було сенсу робити її у вигляді веб-додатку. Вислухавши основну ідею додатку з боку замовника, запропонував внести додаткові функції, такі як запам’ятовування поточного статусу користувача (В гаражі/Поза ним) та історія платежів. Після внесення усіх правок ТЗ набуло наступного вигляду:

  • Додавання нових користувачів.

  • Визначення, чи користувач є боржником. Якщо так – не впускати на територію, а лише випускати.

  • Додавання кількох карт для одного користувача.

  • Редагування його особистої інформації.

  • Запам’ятовування поточного статусу користувача( В гаражі/Поза ним).

  • Надання користувачу можливості оплати.

  • Списання щомісячної плати адміністрацією.

  • Можливість дізнатися коротку інформацію про всіх користувачів відразу.

  • Історія платежів користувачів та списань адміністрацією.

Короткі рекомендації щодо реалізації

Перш за все, необхідно визначитися з тим, чи конструювати власний RFID-читач, чи купити готовий. Оскільки я вирішив взяти повністю готові компоненти, то це спростило розробку. Набір початкових деталей наступний: 2 RFID-читачі, плата Arduino та двохканальне реле.

Далі потрібно розробити базу даних, яка задовольнила би вимоги ТЗ. Для реалізації БД вибрав підхід Code First.

Врешті, необхідно побудувати графічний інтерфейс для роботи з нею, та не забути про основне призначення додатку – зчитування даних RFID-карт. Тому в головну форму необхідно помістити наступне:

  • Інформація про користувача

  • Поле для відображення помилок

  • Невидиме поле для вводу даних з карт

  • Кнопка ручного відкриття воріт

Наступний крок – читання RFID-карт та визначення, з якого пристрою прийшов сигнал. Готові читачі сприймаються системою як клавіатури, тобто зразу вводять номер карти у текстове поле. Таким чином, маємо номер карти. За цим номером знаходимо у БД користувача та виводимо інформацію про нього. У разі відсутності заборгованостей також подаємо команду на відкриття воріт та змінюємо статус його місцезнахоження (в гаражі/поза ним). При натисненні кнопки лише подаємо команду на відкривання воріт.

Залишилось реалізувати лише подання команди на плату та запрограмувати роботу плати. Задача подати сигнал до Arduino виявилася чи не найпростішою у всьому проекті: відкрити COM-порт, подати туди спеціальний сигнал, закрити порт. Щодо програмування плати – при отриманні сигналу подаємо живлення на pin, що відповідає за відкриття воріт, чекаємо визначений час та подаємо живлення на закриття.

Звичайно ж, як і будь-якій справі, можуть виникнути труднощі, але завжди необхідно вміти не здаватися, намагатися щось зробити, поки не придумаєш правильний варіант. Також можна звернутися за допомогою до більш досвідченої людини.

Чим важливі такі навчальні проекти для роботодавця? А тим, що повністю реалізований проект показує, що людина вміє вчитися самостійно, вміє досягати поставлених цілей та вирішувати нестандартні проблеми, які так чи інакше знайдуться у будь-якому проекті.

Ось такий вийшов не складний, проте цікавий pet-проект. Такий не соромно продемонструвати на співбесіді. Більш детально щодо реалізації та написання коду розкажу у наступній частині статті.