Actualmente, ya tengo una idea guía de la cerradura, me estoy basando en otro proyecto que encontré en el foro, lo que pasa es que como nunca he hecho este tipo de cosas la verdad no se mucho y mi ignorancia es un poco alta, quería basar todo el Hardware en este diagrama, pero no entiendo unas cosas, no aparecen los valores de el Relé
EL código esta en un comentario mio más abajo, quería pedir un poco de ayuda sobre cómo montarlo todo y si alguno puede averiguar o decirme cuales son los valores del Relé y los diodos
He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español@johnx05.
En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.
Ya tengo el Software y estoy comprando el Hardware, el software lo saque de una publicación en el foro así mismo como el Hardware, la única nueva pregunta que me surge es si me podrían ayudar a ver como incluir de forma fácil un pequeño sistema de control de asistencia qué no incluya el uso de páginas Web como la mayoría qué he visto con RFID, osea cual es la forma más fácil y sencilla para incluirle el sistema de control de asistencia a la cerradura RFID, mi idea es que cuando se pase el llavero con la frecuencia correcta y se abra la puerta, envié a su vez algún tipo de señal a algo que marque la asistencia del empleado/Estudiante qué va a ingresar
En este video vi que utilizan esa manera de hacerlo, pero quería saber si se podía hacer lo mismo pero usando un mismo lector RFID RC522, ósea que cuando se pase el llavero con la frecuencia dentro del mismo código envié el dato de la asistencia a Excel al abrir la puerta, voy a adjuntar el código que estoy usando con la cerradura, lo que específicamente digo es como pegar quizás directamente el código del control de asistencia del video a la función If que hace que se abra la cerradura
#include <EEPROM.h>
#include <SPI.h>
#include <MFRC522.h>
/*
In the ESP8266, D3 pin is RST_PIN and
D4 pin is SS_PIN
*/
#define RST_PIN 0
#define SS_PIN 2
// Buzzer
#define Buz 16
// Portón
#define Por 15
MFRC522 reader(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;
// Inicio de la EEPROM
#define EEPROM_ADDR 0
// Asignamos los valores de los llaveros RFID
String CardNumber = "EXXXXXX1 - EXXXXXX2";
void setup()
{
// Definimos la función de los pines
pinMode(Buz, OUTPUT);
pinMode(Por, OUTPUT);
Serial.begin(9600); // Initialize serial communications and wait until it is ready
while (!Serial)
{
// Nothing here. Just wait for serial to be present
}
SPI.begin();
reader.PCD_Init();
// Just wait some seconds...
delay(4);
// Prepare the security key for the read and write functions.
// Normally it is 0xFFFFFFFFFFFF
// Note: 6 comes from MF_KEY_SIZE in MFRC522.h
for (byte i = 0; i < 6; i++)
{
key.keyByte[i] = 0xFF; //keyByte is defined in the "MIFARE_Key" 'struct' definition in the .h file of the library
}
// Definimos los estados iniciales de las salidas
digitalWrite(Buz, LOW);
digitalWrite(Por, LOW);
Serial.println(CardNumber);
delay(2000);
}
void loop()
{
// Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle.
if (!reader.PICC_IsNewCardPresent())
{
return;
}
// Select one of the cards. This returns false if read is not successful; and if that happens, we stop the code
if (!reader.PICC_ReadCardSerial())
{
return;
}
// At this point, the serial can be read. We transform from byte to hex
String serial = "";
for (int x = 0; x < reader.uid.size; x++)
{
// If it is less than 10, we add zero
if (reader.uid.uidByte[x] < 0x10)
{
serial += "0";
}
// Transform the byte to hex
serial += String(reader.uid.uidByte[x], HEX);
// Add a hypen
if (x + 1 != reader.uid.size)
{
serial += "";
}
}
// Transform to uppercase
serial.toUpperCase();
Serial.println(CardNumber);
Serial.println("Read serial is: " + serial);
// Halt PICC
reader.PICC_HaltA();
// Stop encryption on PCD
reader.PCD_StopCrypto1();
if (CardNumber.indexOf(serial) >= 0) {
// Encendemos el buzzer
digitalWrite(Buz, LOW);
// Apagamos el electroimán
digitalWrite(Por, HIGH);
delay(1500);
}
else {
Serial.println("Access denied");
//Emitimos 3 pitidos para avisar de un error en la lectura de la tarjeta
emitirPitido(5);
}
// Apagamos el buzzer
digitalWrite(Buz, LOW);
// Encendemos el electroimán
digitalWrite(Por, LOW);
delay(500);
}
// Función para emitir un pitido en el buzzer
void emitirPitido(int cantidad) {
for (int i = 0; i < cantidad; i++) {
digitalWrite(Buz, HIGH);
delay(100);
digitalWrite(Buz, LOW);
delay(100);
}
}
Puedes cambiar su código con eso o usar un trozo de código:
//PROYECTO DE RESIDENCIAS ITCV
//RFID
#include <Wire.h>
#include <SPI.h>
#include <uRTCLib.h> // the uRTC library for real time clock functions by Naguissa has to be installed
/* Wiring DS3231 to the ESP32 UNO
* SDA 21 A4
* SCL 22 A5
* VCC 5V 5V
* GND GND GND
* 32K -
* SQW -
*/
#include <MFRC522.h>
#include <LiquidCrystal_I2C.h>
#define SS_PIN 53
#define RST_PIN 5
#define LED_G 4 //define green LED pin
#define LED_R 2 //define red LED
#define BUZZER 7 //buzzer pin
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
LiquidCrystal_I2C lcd(0x3f, 16, 2);
bool userIn = false;
int countUser1 = 0;
int countLeft1 = 0;
// uRTCLib rtc;
uRTCLib rtc(0x68); // Más información en https://lastminuteengineers.com/ds3231-rtc-arduino-tutorial/
char daysOfTheWeek[7][12] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };
void setup() {
Serial.begin(9600); // Initiate a serial communication
lcd.backlight();
lcd.clear();
Serial.print("introduzca tarjeta");
SPI.begin(); // Initiate SPI bus
mfrc522.PCD_Init(); // Initiate MFRC522
pinMode(LED_G, OUTPUT);
pinMode(LED_R, OUTPUT);
pinMode(BUZZER, OUTPUT);
noTone(BUZZER);
Serial.println("Inicializar RTC");
URTCLIB_WIRE.begin();
// Comenta la siguiente línea una vez que hayas configurado la fecha y la hora.
// La siguiente línea establece el RTC con una fecha y hora explícitas
// por ejemplo para poner el 26 de Agosto de 2023 a las 10:56 deberias llamar:
rtc.set(0, 56, 10, 7, 26, 8, 23);
// rtc.set(segundos, minutos, hora, día de la semana, día del mes, mes, año)
// establece el día de la semana (1=domingo, 7=sábado)
}
void loop() {
Serial.println();
{
// Look for new cards
if (!mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Select one of the cards
if (!mfrc522.PICC_ReadCardSerial()) {
return;
}
//Show UID on serial monitor
Serial.print("UID tag :");
String content = "";
byte letter;
for (byte i = 0; i < mfrc522.uid.size; i++) {
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(mfrc522.uid.uidByte[i], HEX));
}
Serial.println();
Serial.print("Message : ");
content.toUpperCase();
if (content.substring(1) == "50 FF 1F A4") //change here the UID of the card/cards that you want to give access
{
if (!userIn) {
Serial.println("osciloscopio itcv N:0150 Entrada");
entrada();
} else {
Serial.println("osciloscopio itcv N:0150 Salida");
salida();
}
delay(2000);
}
}
}
void entrada() {
delay(500);
digitalWrite(LED_G, LOW);
tone(BUZZER, 500);
delay(300);
noTone(BUZZER);
delay(5000);
digitalWrite(LED_G, HIGH);
if (content.substring(1) == "50 FF 1F A4") {
userIn = true;
countUser1++;
Serial.println("UserIn entra ");
Serial.print(countUser1);
Serial.println(" veces");
Serial.print("Entrada: ");
setTime();
}
}
void salida() {
delay(500);
digitalWrite(LED_G, LOW);
tone(BUZZER, 500);
delay(300);
noTone(BUZZER);
delay(5000);
digitalWrite(LED_G, HIGH);
if (content.substring(1) == "50 FF 1F A4") {
userIn = false;
countLeft1++;
Serial.println("UserIn sale ");
Serial.print(countLeft1);
Serial.println(" veces"); // también puedes controlar con un RTC reloj y puedes controlar a qué hora sale y entra o con un modulo con WIFI como ESP32 DEV KIT o Arduino Uno con WIFI
Serial.print("Salida: ");
setTime();
}
}
void setTime() {
rtc.refresh();
Serial.print(rtc.day());
Serial.print('/');
Serial.print(rtc.month());
Serial.print('/');
Serial.print(rtc.year());
Serial.print(" ");
Serial.print(rtc.hour());
Serial.print(':');
Serial.print(rtc.minute());
Serial.print(':');
Serial.println(rtc.second());
}
Eso que preguntas lo resuelves con un simple demo de la librería RFID
Cuando en el demo lees una tarjeta te dice.. tarjeta XXXX bueno con eso activas un rele y luego de un tiempo lo cierras.
En tu código veo muchos delay() eso hará que todo lo que hagas se demore. Ve a Documentación y aprende como usar millis().
Se refiere a un ejemplo de la librería.
Te basas en un ejemplo (así ya tienes parte del código hecho) y le agregas lo que te hace falta (o sea, el manejo del relé).
@johnx05 te puso un ejemplo pero la librería tmb tiene ejemplos.
Donde veas un digitalWrite ahi tienes la posible acción sobre un rele.
No entiendo que parte no comprendes.
Hay Serial.print que te dicen Ingreso correcto o te muestran la tarjeta leida bueno eso es un ingreso permitido supongo, o ta vez debas validarlo contra valores guardados en tu Arduino.
Es que en verdad busco una solución mucho más simple, cuento con muy poco presupuesto y yo pensaba más como que solo me imprimiera la hora y el día con el mes, más que nada mi pregunta es si es posible solo idear un sistema de asistencia pero que solo se vea en pantalla cuando se ejecuta el programa y se abra la cerradura con la señal RFID, algo básico como, 13 horas con 23 minutos del 23 de setiembre, algo así sencillo
Si, obviamente que se puede, y cuentas con suficiente información aquí y en internet como para, con un poco de empeño, llegar a resultado que buscas.
Dale que puedes, es más sencillo de lo que parece a primera vista.