Официальный сайт компании Arduino по адресу arduino.cc
Электронный замок на карточке
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Ср, 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("====================================="); }
зачем столько одинаковых блоков? сделайте условие сложнее с операторами или
ну или сделайте массив с разрешенными номерами и сравнивайте значение карточки со значениями в массиве
можно добавить защищенную кнопку чтобы вносить новые карточки не перепрошивая мк
а кнопка для возврата зачем? пусть сам возвращается черзе определенное время
Смысл в том чтобы использовать эту систему вместо обычеого замка на двери в доме на дачи. И когда уезжаешь с дачи нажать на кнопку и дверь закроется. А когда ты на даче и ходишь из дома во двор туда-сюда, постоянно открывать даерь с карточкой не удобно.
а если так нечасто используется целесообразно ли использовать электронный замок? мало ли электричество пропадет, молния ударит (у меня так раз было, полулицы осталась без телеков и другой техники)
Дверь надо снабдить концевиком(герконом с магнитом) - чтобы знать когда она закрыта - чтобы повернуть серву. А кнопку привязать к тригеру(програмному). В итоге дверь закроется по двум условиям - нажимали кнопку и дверь закрыта.
а проверку карт удобнее делать так:
Всем привет а вы не моглибы вот стаким скетчем разобратся и добавить туда серво чтоб в туалете задвижку закрывать .
дапутим чтоб войти в тубзик воспользуемся ключем от rc522 потом из нутри закрытся воспользоватся карточкой если можно напишите скетч спасибо
ах да на счет карточки ей же и открывать тубзик если вы все дела переделали)