Proyecto de Expo joven 2023

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.

De antemano, muchas gracias por cooperar.

@johnx05 Hola buenas noche, que modulo usa? Arduino UNO, ESP32 o otra y cual RFID?

Mira los videos del link, tal vez te sirvan de guía.
Lector de tarjetas rfid con registro de asistencia - International / Español - Arduino Forum

Saludos

1 Like

Estoy usando Arduino Uno y módulos RFID

Gracias

@johnx05 Aquí también hay un proyecto con Arduino UNO https://www.hackster.io/Techatronic/door-security-system-arduino-rfid-project-2cbcfd#code

1 Like

Lee las normas del foro, lo primero que dicen es buscar antes que preguntar.
El foro esta lleno de soluciones del tipo que estas buscando.

1 Like

Gracias

1 Like

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 usar también un modulo RTC como el DS3231:

Conección:
UNO             DS3231
GND               GND
 5V               VCC
 A4                SDA
 A5                SCL

Ya hé escrito algo así unos días pasado, ve aquí:

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());
}

Un saludo, Rudy.

1 Like

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().

1 Like

En verdad no me importa que se demore, solo me importa que funcione jaja, me puedes explicar un poco eso del Demo?

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é).

1 Like

@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.

1 Like

Disculpa, es que soy muy nuevo en esto y no se hacerlo muy bien o comprenderlo de forma correcta

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.

Lo que no entiendo es: Estas en un proyecto Expo Joven 2023 y esperas que te hagamos TU proyecto?