RFID считыватель + серво + кнопка для считывание состояние двери открыта или закрыта.
- Войдите на сайт для отправки комментариев
Пнд, 26/12/2016 - 16:36
Я нашел скейч рфид считыватель и серво скейчь вот такой
#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 лет
для того, чтобы Вам моглиответить запостите код должным образом .
и возраст тут не при чем.
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
/* //#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); } } } }