ШЛАГБАУМ

 

Источник.

Перед началом выполнения проекта необходимо ознакомиться с лабораторной работой  "Серводвигатель" 

Общий план выполнения работы:

  1. Разработать схему устройства, способного пропускать в город только тех,  кому по тем или иным причинам разрешён доступ.
  2. Реализовать данную схему.
  3. Написать программу для микроконтроллера.
  4. Провести тестирование устройства. 

Непосредственное выполнение работы: 

Ознакомьтесь со считыванием меток при помощи RFID-модуля RC522

Необходимые материалы:

  1. Плата Arduino - 1шт.
  2. RFID-модуль RC522 - 1 шт.
  3. Серводвигатель - 1шт.
  4. RFID-метка - 2 шт.
  5. Провода - 11 шт (8 "папа - мама", 3 "папа - папа").
  6. Адаптер питания 5V со шнуром USB - microUSB.

Возьмите все необходимые материалы. Удобно расположите  микроконтроллер, сервопривод и RFID-модуль. Аккуратно, без сильных нажимов, во избежании поломки материалов, подсоедините каждый элемент как показано на схеме.  Внимательно проверьте, правильно ли подключены элементы, проверьте полярность элементов, посмотрите, заземлена ли цепь.

Схема лабораторной установки:

Подключение RFID-модуля:

Рисунок взят из: https://infourok.ru/ustroystvo-kontrolya-dostupa-po-rfid-metkam-3336007.html

Сервопривод подключаем к той же плате, пины 5V, GND и, например, ~3 (один из пинов, поддерживающих ШИМ)

Разработка скетча.

Создаём новый скетч и называем его, например, RFIDservo. Проверяем правильность выбранных платы и порта.

Подключаем необходимые библиотеки:

#include <SPI.h>
#include <Servo.h>
#include <MFRC522.h>

Записываем необходимые директивы , глобальные переменные и константы:

#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);
int servoPin = 6;
const int minAngle = 90;
const int maxAngle = 0;
const int step = 5;

Создаём объект типа Servo:

Servo Servo1;
 
Записываем в массив уникальный идентификатор метки (пример):
 
const uint8_t valid_uid[] = { 0x62, 0x4B, 0x4E, 0x1C };
 
Для удобства запишем отдельно два метода, один из которых поднимает шлагбаум, а другой опускает:
 
void turn() {
   int angle = minAngle;
   while (angle != maxAngle)  {
      Servo1.write(angle);
      delay(100);
      angle-=step;
   }
}

void turn1()  {
   int angle = maxAngle;
   while (angle != minAngle) {
      Servo1.write(angle);
      delay(100);
      angle+=step;
   }
}
 
Функция setup(): 
 
void setup() {
   Serial.begin(9600);
   SPI.begin();
   mfrc522.PCD_Init();
   Servo1.attach(servoPin);
}
 
В функции loop() производим считывание меток и поднятие шлагбаума, если метка допустима: 
 
void loop() {
   if(!mfrc522.PICC_IsNewCardPresent())
   return;

   if(!mfrc522.PICC_ReadCardSerial())
   return;

   if((mfrc522.uid.size == sizeof(valid_uid)) &&
   (memcmp(&mfrc522.uid.uidByte, &valid_uid,
   sizeof(valid_uid)) == 0))
   {
      turn();
      delay(5000);
      turn1();
   }
}
 
Задание: вы можете управлять шлагбаумом, внеся свои изменения в методы turn() и turn1(). Попробуйте модифицировать программу так, чтобы открывание шлагбаума провоцировалось использованием нескольких RFID-меток.
 
 
 


/messages/6046