1. Parametre zdroja tie velmi nepoviem. Ako som vyssie spominal je to PC zdroj ale uz je vybrany a doska osadena v mojej skrinke uz vela z nej nenacitam. Je to daco novsie 1-2 roky stare.
2. To ti tie vela toho nepoviem, bol dodany z branickou. Neni to ani tesla ani cina. Je to polske mozno vyrobene v cine.
Je na nom vytlacene 12 a 24 a 12 je odfajknute. V podstatne je jedno ci to das na jednosmerne alebo striedave napatie.
Pri jednosmernom len zopne. Pri striedavombude zopnat/bzucat.
3. Ohladom rele uz som tu raz pisal. je to rele z ciny napajane z arduina 5V
Toto je komplet kod programu
Kód: Vybrat vše
/********************************************************************************************/
/* -= Slave 2 - branicka =- */
/*********************************************************************************************
* Verzia: 0.92
* Popis: Program pre otvaranie garazovej brany RFID/Paywave
* Change log: 0.9 zakladna verzia otvarania
* 0.91 doladenie komunikacie, cas na zvonenie
* 0.92 doladovanie programu
*
* Autor: dzooky
* Kontakt: www.dzooky.eu (info@dzooky.eu)
* --------------------------------------------------------------------------------------------
* Periferie: MAX485 - RS485
* MFRC522 - Citacka kariet
*
*
* --------------------------------------------------------------------------------------------
* Pinout:
*
* Periferia Arduino
* Signal Pin Pin
* --------------------------------------------------------------------------------------------
* RX RS485 RO D2
* TX RS485 DI D3
* TXenable RS485 DE + RE D4
* Odomknutie Rele D5
* Zvoncek Tlacidlo D6
* RST/Reset RST D9
* SPI SS SDA(SS) D10
* SPI MOSI MOSI D11
* SPI MISO MISO D12
* SPI SCK SCK D13
* --------------------------------------------------------------------------------------------
* Message:
*
* Typ Meno Smer Popis
* Boolean data1 In Otvor branu
* Boolean data1 Out Zvoncek
*********************************************************************************************/
#include <SoftwareSerial.h>
#include <SoftEasyTransfer.h> //kniznica pre RS485
#include <SPI.h> //SPI kniznica
#include <MFRC522.h> //Kniznice pre MFRC522
#include <Bounce2.h> //Kniznica pre osetrenie zakmitov
//Definovanie pinov a pouzitych nazvov
#define RS485RX 2 //RO pin RS485
#define RS485TX 3 //DI pin RS485
#define TXenableRS485 4 //RE + DE
#define RELE 5
#define ZVONCEK 6
#define RST_PIN 9 //MFRC522 Reset
#define SS_PIN 10 //MFRC522 Set pin
SoftwareSerial RSSerial(RS485RX, RS485TX); //Arduino RX - RS485 RO, Arduino TX - RS485 DI
SoftEasyTransfer ET;
struct PayloadTX{
byte nodeID, address;
boolean data1; //otvor branu
boolean data2; //nepouziva sa
int data3, data4, data5;}; //nepouziva sa
PayloadTX emontx; // create an instance
//Cisla kariet
String read_rfid, old_rfid; //Uchovanie cisla karty
String peto_mbank = "3788ddc8";
String peto_trkarta = "a7b7b219045038";
String peto_kluce = "d4b8a5be";
String ivka_kluce = "1478a4be";
String mamocka_kluce = "245644dc";
String smax1 = "c6f534b";
String smax2 = "6466a4be";
String cmax1 = "b47513ca";
String cmax2 = "e4b946cc";
boolean otvor = false; //Premenna pre otvorenie, true ak je spravny kod
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
const int cas_rele = 2000;
static uint32_t rele_start;
boolean RELAY = HIGH;
Bounce debouncer = Bounce();
boolean zvoncek;
const int zvoncek_timer = 10000;
void setup()
{
Serial.begin(9600); //Inicializacia seriovej komunikacie
msgs(1,">>> Zaciatok inicializacie <<<");
msgs(1,"Verzia: 1.92");
msgs(1,"Inicializacia seriovej komunikacie");
pinMode(TXenableRS485,OUTPUT);
RSSerial.begin(9600);
ET.begin(details(emontx), &RSSerial);
digitalWrite(TXenableRS485,LOW);
msgs(1,"Inicializacia citacky kariet");
SPI.begin(); //Inicializacia SPI zbernice
mfrc522.PCD_Init(); //Inicializacia MFRC522 citacky
msgs(1,"Inicializacia rele");
pinMode(RELE, OUTPUT);
digitalWrite(RELE, RELAY);
msgs(1,"Inicializacia tlacidla");
pinMode(ZVONCEK, INPUT_PULLUP);
debouncer.attach(ZVONCEK);
debouncer.interval(5); // interval in ms
msgs(1,">>> Koniec inicializacie <<<");
}
void loop()
{
citacka();
//debouncer.update();
//zvoncek = debouncer.read();
//RSSerial.listen();
//if(ET.receiveData()) komunikacia(); //Ak dostal data
if(otvor == true) ovladanie_brany();
}
void komunikacia()
{
msgs(1,"Master ma kontaktuje");
if(emontx.nodeID == 0 && emontx.address == 2 && emontx.data1 == true) ovladanie_brany(); //Ak kontaktuje master prave mna
if(zvoncek == true)
{
msgs(1,"Posielam data");
emontx.nodeID = 2; //1 - ID slave
emontx.address = 0; //0 - ID Mastra
emontx.data1 = zvoncek;
digitalWrite(TXenableRS485,HIGH);
ET.sendData();
digitalWrite(TXenableRS485,LOW);
}
}
void ovladanie_brany()
{
msgs(1,"Otvaram branu");
rele_start = millis();
otvor = false;
while(millis() - rele_start < cas_rele)
{
digitalWrite(RELE, RELAY);
RELAY = !RELAY;
delay(10);
}
digitalWrite(RELE, HIGH);
}
boolean citacka()
{
Serial.println("som tu");
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent()) return false;
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) return false;
dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
Serial.println(read_rfid);
if (read_rfid==peto_mbank ||
read_rfid==peto_trkarta ||
read_rfid==peto_kluce ||
read_rfid==ivka_kluce ||
read_rfid==mamocka_kluce ||
read_rfid==smax1 ||
read_rfid==smax2 ||
read_rfid==cmax1 ||
read_rfid==cmax2)
{
msgs(0,"Spravny kod: ");
otvor = true;
}
else
{
msgs(0,"Nespravny kod: ");
otvor = false;
}
msgs(1,read_rfid);
emfrc522.PICC_HaltA();
}
/*
* Helper routine to dump a byte array as hex values to Serial.
*/
void dump_byte_array(byte *buffer, byte bufferSize)
{
read_rfid="";
for (byte i = 0; i < bufferSize; i++)
{
read_rfid=read_rfid + String(buffer[i], HEX);
}
}
void msgs(boolean type, String msg)
{
if(type == 0) Serial.print(msg);
if(type == 1) Serial.println(msg);
}
Obsahuje aj tlacidlo co je zvocek a RS485 ktory zatial nepouzivam.
Toto je funkcia ktora obsluhuje kontrolu karty a vyhodnotenie ci je spravna karta aby vedelo arduino ci ma otvarat
Kód: Vybrat vše
boolean citacka()
{
Serial.println("som tu");
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent()) return false;
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) return false;
dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
Serial.println(read_rfid);
if (read_rfid==peto_mbank ||
read_rfid==peto_trkarta ||
read_rfid==peto_kluce ||
read_rfid==ivka_kluce ||
read_rfid==mamocka_kluce ||
read_rfid==smax1 ||
read_rfid==smax2 ||
read_rfid==cmax1 ||
read_rfid==cmax2)
{
msgs(0,"Spravny kod: ");
otvor = true;
}
else
{
msgs(0,"Nespravny kod: ");
otvor = false;
}
msgs(1,read_rfid);
emfrc522.PICC_HaltA();
}
/*
* Helper routine to dump a byte array as hex values to Serial.
*/
void dump_byte_array(byte *buffer, byte bufferSize)
{
read_rfid="";
for (byte i = 0; i < bufferSize; i++)
{
read_rfid=read_rfid + String(buffer[i], HEX);
}
}
@marh
Neviem ci ma zmysel davat namiesto zamku led, lebo program nevyhodnoti ze ma otvarat branu, teda zopnut rele.
@pavel1tu
Pytal si sa co vrati ci skomolene alebo co.
No ako som pisal uz nevrati nic
Hlasku "Som tu" som dostaval teda program volal funkciu na zistovanie porovnavanie kariet.
Ale uz nevypisoval ziadnu kartu, teda jej cislo. Tusim ze sa dostaval aj do dump_byte_array ale nevratil ziadne cislo karty.