RFID считыватель + серво + кнопка для считывание состояние двери открыта или закрыта.

85vehiza
Offline
Зарегистрирован: 26.12.2016

Я нашел скейч рфид считыватель и серво скейчь вот такой  

#include <Servo.h> 

 
Servo dimkaservo; 
 
#include <SPI.h> 
 
#include <MFRC522.h> // это скачанная библиотека "RFID". 
 
/* 
 
подключение для 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}; 
 
int LedPinSindex; // индекс, для массива Светодиодов. 
 
void setup() { 
 
Serial.begin(9600); // Initialize serial communications with the PC. 
 
Serial.println("Prilozhite kartu / 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 <= 3; 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 == 422455350) // если "UID" номер совпал. 
 
 
// включим светодиод. 
 
digitalWrite(ledPins[0], HIGH); 
 
// Печатаем в Serial монитор . 
 
Serial.println("Hi Dmitry"); 
 
// поворачиваем servo на 170 градусов. 
 
dimkaservo.write(170); 
 
 
// также и с другими номерами карт. 
 
else if (uidDec == 959884118) 
 
 
digitalWrite(ledPins[1], HIGH); 
 
Serial.println("Hi Sergey"); 
 
dimkaservo.write(170); 
 
 
else if (uidDec == 695670870) 
 
 
digitalWrite(ledPins[2], HIGH); 
 
Serial.println("Hi Peter"); 
 
dimkaservo.write(170); 
 
 
else if (uidDec == 695670614) 
 
 
digitalWrite(ledPins[3], HIGH); 
 
Serial.println("Hi Vasily"); 
 
dimkaservo.write(170); 
 
 
else // если "UID" номер карты не совпал. 
 
 
// включим все светодиоды. 
 
for(LedPinSindex = 0; LedPinSindex <= 3; LedPinSindex++)digitalWrite(ledPins[LedPinSindex],HIGH); 
 
Serial.println("Neizvestnaja karta / unknown card"); 
 
 
Serial.println("====================================="); 
 
delay(3000); // пауза 3 секунды. 
 
dimkaservo.write(10); // возвращаем servo обратно. 
 
// и выключим все светодиоды. 
 
for(LedPinSindex = 0; LedPinSindex <= 3; LedPinSindex++)digitalWrite(ledPins[LedPinSindex],LOW); 
 
}
он все работает но как к ниму подключить кнопку чтобы при открывании двери контакты размыкались и серво не поворачивалась через 3 сек а ждала пока мы закроем дверь. А если мы поднесем карту она раз лакирует дверь серво откроется и через 3 сек серво сново закрывает помогите прошу от души мне 13 лет
inspiritus
Offline
Зарегистрирован: 17.12.2012

для того, чтобы Вам моглиответить запостите код должным образом . 

и возраст тут не при чем.

valera678
Offline
Зарегистрирован: 04.11.2016
qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
/*
//#1
светодиод -> 8 (Led_pin) 0 горит/ 1 нет
       GND ->  GND
серва  -> 5 (servo_pin)
геркон -> A3 (gercon_pin) 0 дверь закрыта / 1 нет
//#2
кнопка1 -> A1 (btm1_pin) 0 нажата/ 1 нет
       GND ->  GND
кнопка2 -> A2 (btm2_pin) 0 нажата/ 1 нет
       GND ->  GND
//#3               Arduino Uno
RFID_RC522 RST -> 9 (RST_pin)
        SDA(SS)-> 10 (SDA_pin)
        MOSI   -> 11 (MOSI_pin)
        MISO   -> 12 (MISO_pin)
        SCK    -> 13 (SCK_pin)
        3,3В   -> 3,3В
        GND    -> GND

        Card UID: E6 38 FE 13  брелок
        Card UID: 5A 5D 39 D5  пластик
*/
//#1
const int Led_pin = 8 ; // нога светодиода
uint8_t Led ;
const int interval = 2000 ; // интервал после нажатия клавиши 2 сек

#include <Servo.h>
Servo myservo;
const int servo_pin = 5  ; // нога серво
const int servo_OFF = 0; // серва закрыта
const int servo_ON = 90; // серва открыта
const int gercon_pin = A3  ; // нога геркона
uint8_t gercon ;
//#2
const int btm1_pin = A1  ; // нога кнопки
const int btm2_pin = A2  ; // нога кнопки
//#3
byte uidCard1[4] = {0xE6, 0x38, 0xFE, 0x13};
byte uidCard2[4] = {0x5A, 0x5D, 0x39, 0xD5};
#include <SPI.h>
#include <MFRC522.h>
const int SDA_pin = 10;
const int RST_pin = 9;

MFRC522 rfid(SDA_pin, RST_pin); // Instance of the class

void setup() {
  //#1
  pinMode(Led_pin, OUTPUT);
  digitalWrite(Led_pin, Led = 0);
  myservo.attach(servo_pin);
  pinMode(gercon_pin, INPUT_PULLUP);
  //#2
  pinMode(btm1_pin, INPUT_PULLUP);
  pinMode(btm2_pin, INPUT_PULLUP);
  //#3
  SPI.begin(); // Init SPI bus
  rfid.PCD_Init(); // Init MFRC522
}

void loop() {
  static uint32_t MILLIS ;
  MILLIS = millis() ;
  //#1
  static uint32_t future1 = 0 ;
  gercon = digitalRead(gercon_pin); // опрос состояния двери
  if (!gercon && !Led && (MILLIS >= future1)) { // убеждаемся что дверь закрыта и подошло время закрывать на замок
    digitalWrite(Led_pin, Led = 1);
    myservo.write(servo_OFF);  // закрываем
  }
  //#2
  if (!digitalRead(btm1_pin)) { // первая открывающая кнопка
    digitalWrite(Led_pin, Led = 0);
    future1 = millis() + interval;
    myservo.write(servo_ON);
  }
  if (!digitalRead(btm2_pin)) { // вторая открывающая кнопка
    digitalWrite(Led_pin, Led = 0);
    future1 = millis() + interval;
    myservo.write(servo_ON);
  }
  //#3
  static uint32_t future3 = 0 ;
  if (MILLIS >= future3)   {
    future3 = MILLIS + 1000 ;
    if ( rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
      if (rfid.uid.uidByte[0] == uidCard1[0] ||
          rfid.uid.uidByte[1] == uidCard1[1] ||
          rfid.uid.uidByte[2] == uidCard1[2] ||
          rfid.uid.uidByte[3] == uidCard1[3] ) {
        digitalWrite(Led_pin, Led = 0);
        future1 = millis() + interval;
        myservo.write(servo_ON);
      }
      if (rfid.uid.uidByte[0] == uidCard2[0] ||
          rfid.uid.uidByte[1] == uidCard2[1] ||
          rfid.uid.uidByte[2] == uidCard2[2] ||
          rfid.uid.uidByte[3] == uidCard2[3] ) {
        digitalWrite(Led_pin, Led = 0);
        future1 = millis() + interval;
        myservo.write(servo_ON);
      }
    }
  }
}