Электронный замок на карточке
- Войдите на сайт для отправки комментариев
Ср, 09/07/2014 - 16:36
Ребят, помогите! В программирование я не очень разбираюсь.
Делаю проэкт "Электронный замок на карточке" .
Задачи:
-сканирывать карточку
-подовать звуковой сигнал
-подовать световой сигнал
-выводить информацию на lcd дисплей
-если карта правельная(зарегистрированная) , то поворачивать сервопривод на 170 градусов
// всё вышеперечисленное я сделал
Мне нужна помощь в следующим:
Мне нужно добавить к коду кнопку, при нажатие которой сервопривод возвращался бы в исходное положение(10 градусов).
Кто знает как это сделать, пожалуйста, пишите в комментариях.
Вот код:
#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <MFRC522.h> // это скачанная библиотека "RFID".
#define BUZZER_PIN 6
Servo dimkaservo;
LiquidCrystal_I2C lcd(0x27,16,2);
/*
подключение для Arduino Uno и Mega, производится к разным Pin!
----------------------------------------------------- Nicola Coppola
* Pin layout should be as follows:
* Signal Pin Pin Pin
* Arduino Uno Arduino Mega MFRC522 board
* ------------------------------------------------------------
* Reset 9 5 RST
* SPI SS 10 53 SDA
* SPI MOSI 11 51 MOSI
* SPI MISO 12 50 MISO
* SPI SCK 13 52 SCK
*/
// два Pin (SS и RST) допускают произвольное подключение и конфигурируются в коде.
// !(SS - он же - SDA).
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // объект MFRC522C / reate MFRC522 instance.
unsigned long uidDec, uidDecTemp; // для отображения номера карточки в десятичном формате
//*************************************************************
// Массив 4 Светодиодов, для визуального контроля.
//*************************************************************
int ledPins[] = {2,3,4,5,6};
int LedPinSindex; // индекс, для массива Светодиодов.
void setup() {
lcd.init(); // инициализация LCD
lcd.backlight(); // включаем подсветку
Serial.begin(9600); // Initialize serial communications with the PC.
Serial.println("Prilozhite kartu / Waiting for card...");
lcd.print("Prilozhite kartu");
lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
lcd.print("Waiting for card");
SPI.begin(); // инициализация SPI / Init SPI bus.
mfrc522.PCD_Init(); // инициализация MFRC522 / Init MFRC522 card.
dimkaservo.attach(7); // servo подключён к 7 Pin.
dimkaservo.write(10); // устанавливаем положение servo, в момент подачи питания.
// весь массив светодиодов делаем OUTPUT.
for(LedPinSindex = 0; LedPinSindex <= 4; LedPinSindex++)
{
pinMode(ledPins[LedPinSindex],OUTPUT);
}
}
void loop() {
// Поиск новой карточки / Look for new cards.
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Выбор карточки / Select one of the cards.
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
uidDec = 0;
// Выдача серийного номера карточки "UID".
for (byte i = 0; i < mfrc522.uid.size; i++)
{
uidDecTemp = mfrc522.uid.uidByte[i];
uidDec = uidDec*256+uidDecTemp;
}
Serial.println("Serijnyj nomer karty / Card UID: ");
Serial.println(uidDec);
// ------------------------
// начинаем сравнивать номер "UID", поднесённой к ридеру карты,
// с записанным номером "UID" карты в sketch.
// замените!!! "UID" № "422455350", на номер "UID" № вашей карты.
if (uidDec == 1683245007) // если "UID" номер совпал.
{
digitalWrite(ledPins[0], HIGH);
Serial.println("Hi, Ivan");
lcd.clear();
lcd.print(" Hi, Ivan");
dimkaservo.write(170);
tone(BUZZER_PIN, 3000, 1000);
delay(3000);
lcd.clear();
lcd.print("Prilozhite kartu");
lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
lcd.print("Waiting for card");
for(LedPinSindex = 0; LedPinSindex <= 4; LedPinSindex++)digitalWrite(ledPins[LedPinSindex],LOW);
dimkaservo.write(10); // возвращаем servo обратно.
}
// также и с другими номерами карт.
else if (uidDec == 324990116)
{
digitalWrite(ledPins[0], HIGH);
Serial.println("Hi, Natalia");
lcd.clear();
lcd.print(" Hi, Natalia");
dimkaservo.write(170);
tone(BUZZER_PIN, 3000, 1000);
delay(3000);
lcd.clear();
lcd.print("Prilozhite kartu");
lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
lcd.print("Waiting for card");
for(LedPinSindex = 0; LedPinSindex <= 4; LedPinSindex++)digitalWrite(ledPins[LedPinSindex],LOW);
dimkaservo.write(10); // возвращаем servo обратно.
}
else if (uidDec == 695670870)
{
digitalWrite(ledPins[0], HIGH);
Serial.println("Hi, Aleksei");
lcd.clear();
lcd.print(" Hi, Aleksei");
dimkaservo.write(170);
tone(BUZZER_PIN, 3000, 1000);
delay(3000);
lcd.clear();
lcd.print("Prilozhite kartu");
lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
lcd.print("Waiting for card");
for(LedPinSindex = 0; LedPinSindex <= 4; LedPinSindex++)digitalWrite(ledPins[LedPinSindex],LOW);
dimkaservo.write(10); // возвращаем servo обратно.
}
else if (uidDec == 695680870)
{
digitalWrite(ledPins[0], HIGH);
Serial.println(" Hi, Nikolai");
lcd.clear();
lcd.print(" Hi, Nikolai");
dimkaservo.write(170);
tone(BUZZER_PIN, 3000, 1000);
delay(3000);
lcd.clear();
lcd.print("Prilozhite kartu");
lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
lcd.print("Waiting for card");
for(LedPinSindex = 0; LedPinSindex <= 4; LedPinSindex++)digitalWrite(ledPins[LedPinSindex],LOW);
dimkaservo.write(10); // возвращаем servo обратно.
}
else // если "UID" номер карты не совпал.
{
// включим все светодиоды.
for(LedPinSindex = 1; LedPinSindex <= 1; LedPinSindex++)digitalWrite(ledPins[LedPinSindex],HIGH);
Serial.println("Neizvestnaj karta / Unknown card");
lcd.clear();
lcd.print("Net takoi karti");
lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
lcd.print("Unknown card");
tone(BUZZER_PIN, 200, 1000);
delay(3000);
lcd.clear();
lcd.print("Prilozhite kartu");
lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
lcd.print("Waiting for card");
for(LedPinSindex = 0; LedPinSindex <= 4; LedPinSindex++)digitalWrite(ledPins[LedPinSindex],LOW);
}
Serial.println("=====================================");
}
зачем столько одинаковых блоков? сделайте условие сложнее с операторами или
ну или сделайте массив с разрешенными номерами и сравнивайте значение карточки со значениями в массиве
можно добавить защищенную кнопку чтобы вносить новые карточки не перепрошивая мк
а кнопка для возврата зачем? пусть сам возвращается черзе определенное время
Смысл в том чтобы использовать эту систему вместо обычеого замка на двери в доме на дачи. И когда уезжаешь с дачи нажать на кнопку и дверь закроется. А когда ты на даче и ходишь из дома во двор туда-сюда, постоянно открывать даерь с карточкой не удобно.
а если так нечасто используется целесообразно ли использовать электронный замок? мало ли электричество пропадет, молния ударит (у меня так раз было, полулицы осталась без телеков и другой техники)
Дверь надо снабдить концевиком(герконом с магнитом) - чтобы знать когда она закрыта - чтобы повернуть серву. А кнопку привязать к тригеру(програмному). В итоге дверь закроется по двум условиям - нажимали кнопку и дверь закрыта.
а проверку карт удобнее делать так:
lcd.print("Card No: "); lcd.println(card); switch(card){ case 2158602968: case 2158602967: tone(3,1500,60); lcd.println("Access Granted"); openDoor(); break; default: tone(3,700,100); lcd.println("Access Denided"); }Всем привет а вы не моглибы вот стаким скетчем разобратся и добавить туда серво чтоб в туалете задвижку закрывать .
дапутим чтоб войти в тубзик воспользуемся ключем от rc522 потом из нутри закрытся воспользоватся карточкой если можно напишите скетч спасибо
ах да на счет карточки ей же и открывать тубзик если вы все дела переделали)