Registro electrónico
Componentes y suministros
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 2 | ||||
| × | 4 |
Acerca de este proyecto
Un problema que tenemos con frecuencia en Taipei Hackerspace es que la gente no sabe cuándo estamos abiertos. Nuestra regla básica es simple:siempre que un miembro keyholder está en el Hackerspace, cualquiera / todos pueden entrar. En la práctica, aunque la gente nunca sabe realmente si hay alguien allí.
Podrían llamar al espacio, o incluso enviar un correo electrónico a la lista de correo, mientras que las personas que conozco generalmente terminan preguntándome directamente:oye, ¿hay alguien en el espacio en este momento? Como no siempre sé la respuesta, se buscó una solución mejor, tal vez más tecnológica o pirata:construyamos un sistema de registro / salida electrónico que muestre el estado actual de nuestro sitio web.
La idea principal es que en Taipei casi todo el mundo tiene una EasyCard, una tarjeta RFID de 13,56 MHz que se utiliza para todo el transporte público de la ciudad y mucho más. El módulo de antena de tarjeta RC522 parece ser capaz de leer la tarjeta bastante bien, y todo lo que necesito es el número de identificación, que es bastante sencillo (después de buscar el código fuente en los foros de Arduino).
El proyecto en pocas palabras es:
- Utilice Arduino Mega con una placa RC522 para obtener el número de identificación de una EasyCard determinada
- Use brujas para saber si la persona está registrando su entrada o salida
- Utilice LED para proporcionar algunos comentarios y una interfaz de usuario básica para el hardware
- Servidor Node.js para comunicarse con Arduino, interconectar la base de datos de registro / salida y proporcionar API y acceso en tiempo real a los datos
- Cree una pequeña interfaz en el sitio web para mostrar el estado del registro
Ahora permítanme profundizar en las diferentes partes en detalle.
RFID
El módulo RC522 tiene 8 pines y Arduino puede usar la biblioteca SPI para comunicarse con él. Usé Arduino Mega ADK, porque los pines SPI son convenientemente accesibles, a diferencia de, por ejemplo, el Leonardo, para el que habría tenido que hacer algunos cables o cabezales nuevos. Las conexiones RC522 (número de pin) -> Mega (número de pin) se realizan de manera que:
- SA (1) → SS (53)
- SCK (2) → SCK (52)
- MOSI (3) → MOSI (51)
- MISO (4) → MISO (50)
- (5) no conectado
- GND (6) → GND
- RST (8) → (cualquier pin digital)
- + 3,3 V (8) → + 3,3 V
El código fuente para hablar con la tarjeta es de un blog, y creo que originalmente de una tienda de tecnología en China (basado en la gran cantidad de comentarios en chino simplificado).
Interruptores y comentarios visuales
Quería crear una interfaz lo más sencilla posible para el lector de tarjetas. Se agregó este par de interruptores y LED (el D1 es verde y el D2 es rojo). Después de que el Arduino recibió una identificación de tarjeta del lector, los LED parpadean para indicar a las personas que presionen los botones Check In o Check Out. Si presionan cualquiera de ellos, el LED correspondiente parpadeará con mucha intensidad durante un momento, y la identificación de la tarjeta y el evento de registro / salida se enviarán a la computadora conectada a través de una conexión en serie
El circuito (muy básico) para los botones de check-in / out y los LED de retroalimentación visual. "Pines" se refieren a los pines de Arduino utilizados en la versión actual
Si no se presiona ningún botón en aproximadamente 10 segundos, la lectura se descarta y el lector de tarjetas vuelve al modo de escucha.
Servidor web
Node.js es muy útil para hacer servicios web rápidos, y el soporte de su biblioteca no es tan malo en absoluto, aunque no todo es fácil:su documentación es a menudo escasa en el mejor de los casos. Sin embargo, fue el más rápido en poner las cosas en funcionamiento, ya que he usado antes casi todos los componentes necesarios.
El servidor se comunica con Arduino a través de la biblioteca de puerto serie. Estoy más acostumbrado al pyserial de Python, aunque en este caso fue muy útil que el puerto serial pueda emitir eventos de lectura, por lo que el servidor puede esperar hasta que haya algo para leer y ejecutar algunas funciones en los datos entrantes. En mi experiencia, serialport no sería bueno para todos los casos de esquina que encontré en serial-land, pero en esta configuración funciona muy bien.
Elegí SQLite3 para almacenar los datos, usando la biblioteca sqlite3. Hay un montón de otros, tuve que mirar alrededor de cuál todavía se está desarrollando. Esta biblioteca en particular no es tan mala, aunque me encontré luchando bastante contra la falta de documentación y la asincronicidad. El código resultante es bastante feo, estoy seguro, en algunos lugares ineficiente porque no sabía cómo llegar al resultado que quería de una manera menos indirecta, todavía parece funcionar y eso es lo que importa para un prototipo.
Primero hice una API REST simple para consultar a las personas actualmente registradas, y luego agregué actualizaciones push (en tiempo real) a través de socket.io, para hacerlo más agradable. Es genial que sin ninguna encuesta, todos los clientes puedan actualizarse una vez que alguien inicie o cierre sesión.
Dado que este código se ejecuta en una computadora diferente a la de nuestro servidor web principal, tuvimos que jugar con el encabezado Access-Control-Allow-Origin y ajustar la configuración de nuestro enrutador para que sea accesible para la web correctamente.
Intenté agregar un script bastante autónomo que el front-end puede cargar, y maneja todo, solo se necesita un elemento div o span HTML apropiado para mostrar la información.
Configuración de hardware para registrar entrada / salida:Arduino Mega, circuito RFID-RC522 y algunos interruptores y LED.El resultado es bastante bueno, siempre que el lector de tarjetas no se bloquee. Originalmente, los resultados se mostraban en una tabla, pero quería que fuera más humano, así que este es el formato con el que terminé:
Captura de pantalla de la página de inicio con una situación de registro en particularTambién puede haber personas sin nombre, simplemente muestran algo como "En este momento hay tres personas registrado en el Hackerspace:Greg y otras dos personas ".
SpaceAPI
También hay un proyecto llamado Space API para una especificación unificada para exponer información sobre el espacio en sí (
Este dispositivo de registro está integrado con nuestro punto final de la API espacial de Taipei Hackerspace para mostrar nuestro estado de apertura, por lo que se puede usar con, por ejemplo, la aplicación de Android My Hackerspaces, o con las otras aplicaciones enumeradas en el sitio de la API de Space.
¡Vive!
Aquí hay un video de demostración rápida de cómo funciona:
https://www.youtube.com/embed/L3ccO_AuhQ8?feature=oembedPor lo tanto, puede visitar nuestro sitio web en https://taipeihack.org/#open para ver los resultados en vivo, y pasar si está en el vecindario si hay alguien en el espacio '.
Todo el código fuente se comparte en un repositorio de Github:el boceto de Arduino, el script del servidor y cualquier archivo adicional. Estoy seguro de que hay muchas cosas que podrían mejorarse al respecto ...
Informe original:registro electrónico en Taipei Hackerspace
Código
Github
https://github.com/taipeihackerspace/thcheckinhttps://github.com/taipeihackerspace/thcheckinEsquemas
Proceso de manufactura