ШЛАГБАУМ
Перед началом выполнения проекта необходимо ознакомиться с лабораторной работой "Серводвигатель"
Общий план выполнения работы:
- Разработать схему устройства, способного пропускать в город только тех, кому по тем или иным причинам разрешён доступ.
- Реализовать данную схему.
- Написать программу для микроконтроллера.
- Провести тестирование устройства.
Непосредственное выполнение работы:
Ознакомьтесь со считыванием меток при помощи RFID-модуля RC522
Необходимые материалы:
- Плата Arduino - 1шт.
- RFID-модуль RC522 - 1 шт.
- Серводвигатель - 1шт.
- RFID-метка - 2 шт.
- Провода - 11 шт (8 "папа - мама", 3 "папа - папа").
- Адаптер питания 5V со шнуром USB - microUSB.
Возьмите все необходимые материалы. Удобно расположите микроконтроллер, сервопривод и RFID-модуль. Аккуратно, без сильных нажимов, во избежании поломки материалов, подсоедините каждый элемент как показано на схеме. Внимательно проверьте, правильно ли подключены элементы, проверьте полярность элементов, посмотрите, заземлена ли цепь.
Схема лабораторной установки:
Подключение RFID-модуля:
Сервопривод подключаем к той же плате, пины 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