En este tutorial veremos como hacer un reloj de control de personal con el módulo RC522 un esp32, todos los datos se subirán a los servicios en la nube de thingspeak, en su versión gratuita. Este proyecto nos puede servir para controlar la entrada y salida, del personal de una empresa para poder llevar el registro detallado. Vamos a ver el armado del circuito, el código fuente, como crear un canal en thingspeak, y también probaremos el sistema.
Tal vez pueda interesarte proyectos en arduino, pic, robótica, telecomunicaciones, suscribete en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 mucho videos con código fuentes completos y diagramas
Circuito
Componentes electrónicos
Un Buzzer
Cables Dupont hembra macho
Un Esp32
Características del módulo ESP32-T
Conectividad
El módulo ESP32 dispone de todas las variantes del WiFi:
- 802.11 b/g/n/e/i/n
- Wi-Fi Direct (P2P), P2P Discovery, P2P Group Owner mode and P2P Power Management
Esta versión nueva incluye la conectividad mediante Bluethoot de bajo consumo
- Bluetooth v4.2 BR/EDR and BLE
- BLE Beacon
Además, puede comunicarse mediante los protocoles SPI, I2C, UART, MAC Ethernet, Host SD
Prestaciones del microcontrolador
La CPU está formado por un SoC modelo Tensilica LX6 con las siguientes características y memoria
- Doble núcleo de 32 bits con velocidad de 160MHz
- Memoria ROM de 448 kBytes
- Memoria SRAM de 520kBytes
Dispne de 48 Pines
- 18 ADC de 12 bits
- 2 DAC de 8 bits
- 10 pines sensores de contacto
- 16 PWM
- 20 Entradas/salidas digitales
Alimentación y modos de consumo
Para un correcto funcionamiento del ESP32 es necesario subministrar un voltaje de entre 2,8V y 3,6V. La energía que consume depende del modo de funcionamiento. Contiene un modo, el Ultra Low Power Solution (ULP), en que se continúan realizando tareas básicas (ADC, RTC…) en el modo Sleep.
Pines hembra
Módulo RFID RC522
Módulo Rfid Rc522 13.56mhz Tarjeta Y Llavero Arduino
El módulo utiliza 3.3V como voltaje de alimentación y se controla a través del protocolo SPI, por lo que es compatible con casi cualquier microcontrolador, Arduino o tarjeta de desarrollo.
El RC522 utiliza un sistema avanzado de modulación y demodulación para todo tipo de dispositivos pasivos de 13.56Mhz. El dispositivo maneja el ISO14443A y soporta el algoritmo de encriptación Quick CRYPTO1 y MIFARE.
El circuito MF RC522 es utilizado para comunicación inalámbrica a 13.56Mhz para escribir o leer datos de aplicaciones de bajo consumo de energía, bajo costo y tamaño reducido. Ideal para dispositivos portátiles o tarjetas.
Características Modelo: MF522-ED
Corriente de operación: 13-26mA a 3.3V
Corriente de standby: 10-13mA a 3.3V
Corriente de sleep-mode: <80µA
Corriente máxima: 30mA
Frecuencia de operación: 13.56Mhz
Distancia de lectura: 0 a 60mm
Protocolo de comunicación: SPI
Velocidad de datos máxima: 10Mbit/s
Dimensiones: 40 x 60 mm
Temperatura de operación: -20 a 80ºC
Humedad de operación: 5%-95%
Máxima velocidad de SPI: 10Mbit/s
Circuito Impreso
Archivo gerber
Código Fuente
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
// Importar bibliotecas necesarias #include <WiFi.h> #include <HTTPClient.h> #include <SPI.h> #include <MFRC522.h> const int pinRST = 15; // Pin RST del módulo RC522 const int pinSDA = 5; // pin SDA del módulo RC522 const int buzzer = 27; const int led = 2;//Led onboard del esp32 MFRC522 rfid(pinSDA, pinRST); String urlCaracteres; // Establezca su nombre y contraseña de wifi const char* ssid = "Tu_red_wifi"; const char* password = "Tu_clave_wifi"; // La URL de tu canal de thingspeak con el número de api_key String nombreServidor = "https://api.thingspeak.com/update?api_key=TU_API_KEY"; void setup() { pinMode(buzzer, OUTPUT); pinMode(led, OUTPUT); SPI.begin(); rfid.PCD_Init();//Inicilializar lector Serial.begin(9600); // Velocidad del terminal serial WiFi.begin(ssid, password); // Intenta conectarte a wifi con nuestra contraseña Serial.println("Conectando"); // Imprime nuestro estado en el monitor de serie // Espera a que se conecte el wifi while(WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Conectado a la red WiFi con la dirección IP: "); Serial.println(WiFi.localIP()); //Dos bip indican que se conectó el dispositivo a la red wifi bip(100); delay(400); bip(100); } void loop() { if (rfid.PICC_IsNewCardPresent()) // Hay una nueva tarjeta presente { if (rfid.PICC_ReadCardSerial()) // Leemos el contenido de la tarjeta { Serial.println("UID de la tarjeta:"); for (byte i = 0; i < rfid.uid.size; i++) { urlCaracteres += rfid.uid.uidByte[i]; } Serial.print(urlCaracteres); Serial.println(); if(urlCaracteres=="128115470" || urlCaracteres=="19712918253"){//Estas son las dos tarjeta registradas if(urlCaracteres=="128115470"){ bip(30); urlCaracteres="50"; Serial.println("ID 50"); } if(urlCaracteres=="19712918253"){ bip(30); urlCaracteres="100"; Serial.println("ID 100"); } Serial.println("Tarjeta Correcta"); digitalWrite(led, HIGH); if(WiFi.status()== WL_CONNECTED){ // Comprueba que la wifi todavía esté conectada HTTPClient http; // Inicializar nuestro cliente HTTP String url = nombreServidor + "&field1=" + urlCaracteres ; // Definir nuestra URL completa http.begin(url.c_str()); // Inicializa nuestra solicitud HTTP int codigoRespuestaHTTP = http.GET(); // Enviar solicitud HTTP if (codigoRespuestaHTTP > 0){ // Verifica que haya código de estado HTTP correcto Serial.print("Codigo de respuesta HTTP: "); Serial.println(codigoRespuestaHTTP); digitalWrite(led, LOW); }else{ Serial.print("Codigo de error: "); Serial.println(codigoRespuestaHTTP); //Reintentamos una vez más por si hubo un error en la comunicación http.begin(url.c_str()); // Inicializa nuestra solicitud HTTP int codigoRespuestaHTTP = http.GET(); // Enviar solicitud HTTP if (codigoRespuestaHTTP > 0){ // Verifica que haya código de estado HTTP correcto Serial.print("Codigo de respuesta HTTP: "); Serial.println(codigoRespuestaHTTP); } } http.end(); } else { Serial.println("WiFi desconectado"); } }else { Serial.println("Acceso denegado"); bip(750); delay(1250); } } } urlCaracteres=""; } //Sonido del buzzer void bip(int demora){ digitalWrite(buzzer, HIGH); delay(demora); digitalWrite(buzzer, LOW); } |
Tal vez pueda interesarte proyectos en arduino, pic, robótica, telecomunicaciones, suscribete en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 mucho videos con código fuentes completos y diagramas
PROYECTO RECOMENDADO