Lector de RFID móvil: un proyecto de kit de fabricantes utilizando Particle y Ubidots

Durante los últimos años, Ubidots se ha asociado con Particle para realizar un objetivo final; habilitando la creación rápida, fácil y eficiente de soluciones IoT
Avancemos hasta el día de hoy y estamos orgullosos de afirmar que ambos productos se están utilizando para acelerar IoT a nivel global . Desde emprendedores y empresas emergentes hasta empresas grandes y pequeñas, estamos ayudando a las empresas a crear el futuro impulsado por los datos.
Recientemente, Friedl asumió el desafío de crear un IoT desde cero. edge de Friedl sobre el tema era limitado. Sin embargo, gracias a la investigación que realizó, y muchos videos de YouTube, se confió en usar una variedad de herramientas para materializar su objetivo; Creación de un lector de RFID móvil sin ser un IoT .
Después de lograr este sorprendente resultado, nos pusimos en contacto con Friedl para felicitarlo por su éxito y aprender de su logro. También queríamos compartir esta historia con la comunidad Ubidots porque creemos que es una historia para inspirar y aprender.
A la luz de estos grandes logros, mi entrevista explorará el proceso de desarrollo de Friedl, las técnicas que utilizó para alcanzar su objetivo y otras lecciones valiosas.
La publicación original se puede encontrar en el sitio de la comunidad Particle . Friedl también lo ha compartido amablemente con Ubidots .
Escrito por : Friedl_1977
Como primer proyecto, me propuse construir un lector RFID móvil que publicara datos en vivo en MySQL, Google Sheets o Ubidots a través de Webhooks.
- Crédito de la foto: Migal Vanas.
Nota:
Este no es un tutorial como tal, sino solo una muestra del producto. Como he recibido mucha ayuda del foro Particle , he decidido publicar mis archivos y código Eagle para ponerlo a disposición de cualquier persona que quiera usarlo.
Supongo que tieneedge básico del entorno Particle , ganchos web y ha configurado su cuenta y dispositivos en consola Particle . Si no, hágalo antes de intentar esta construcción.
El resumen:
Construir un escáner RFID verdaderamente inalámbrico (móvil) con el propósito de escanear tarjetas RFID, capturar los UID de estas tarjetas y publicarlos en cualquiera de ellas;
Lista de materiales:
- Módulo lector de 3 tarjetas MFRC522
- Batería LiPo de 3,7 V 1
- de batería 1 módulo
- LM394N 1
- Montón de LED 0603 para indicador de batería
- 2 x LED RGB para el estado del sistema y el estado de lectura de la tarjeta
- Fotón Particle
- Interruptor deslizante - Alimentación principal
- Interruptor de inclinación 1
- PCB de diseño personalizado (de PCBWAY o similar )
- Gabinete de diseño personalizado
- Varias resistencias 0603
- Ferrita 2 !!!
Lo primero es lo primero:
Si eres como yo, el prototipo genérico simple no será suficiente, por lo que pongo un poco de esfuerzo extra, tengo que conocer el rinoceronte y diseñé un recinto simple, pero elegante (o al menos) que mostraría el fotón Particle y algunos otros componentes.
Además de esto, decidí no optar por una placa de prototipos genérica porque ODIO absolutamente los cables. Incluí una imagen de mi intento inicial de hacer una placa "bonita" usando una placa proto y cables de puente, pero después de un par de horas me di cuenta de que simplemente no funcionaba. Otra curva de aprendizaje más: busqué en Google, pasé un par de horas en YouTube y logré orientarme en Autodesk Eagle. Vale la pena cada minuto invertido.
***La última imagen indica la PCB completamente ensamblada con el LED de estado que indica "OK ", así como el LM3914N en acción que indica ±90% de batería cargada. (7 de 8 LED)
Envié los archivos Gerber a PCBWAY y en menos de una semana tenía mis nuevos PCB personalizados listos para ensamblar.
Lo importante:
Ahora la codificación, esta es la parte con la que más lucho, pero gracias a un caballero útil en los foros de Particle y hackster, se me ocurrió el siguiente código. Ahora probablemente no sea el código más limpio jamás escrito, pero funciona, así que siéntase libre de usar y mejorar si lo desea.
// Proyecto: Registro de asistencia de RFID móvil // Un proyecto de Firefli (Pty) Ltd // Fecha: julio de 2019 // Compilado por: Friedl Basson // Detalles: Escanee para los UID de las tarjetas RFID y la publicación a través de Webhooks a, UbiDots, MySQL DB o Google Sheets // Credits: ¡Agradaciones especiales a la comunidad Particle para asistir y hacer este proyecto Posible! // firmware: v2.1.1 // Modo del sistema // - Comentar si se configurará WiFi a través de la aplicación Particle y no necesita conectarse a otra red inalámbrica después del hecho // System_Mode (semi_automático); // Esta declaración #Clude fue agregada automáticamente por el IDE Particle . #include "rfid.h" #include <Ubidots.h> /* Definir los pines utilizados para los pines SS (SDA) y RST (RESET) tanto para hardware como de software SPI* /#define SS_PIN A2 #Define RST_PIN D2 /* Define los PIN utilizados para los datos (MOSI), datos (MISO) (MISO) (SCIK) para PINS SPI) para SPI) para Pins Spi) */#define MOSI_PIN D3 #define miso_pin d4 #define sck_pin d5 // inicializando el inicio RGB - RGB LED y timbre se usa como indicador de estado del sistema int redpin = d6; int greenpin = d1; int bluepin = d0; int buzzpin = d7; // Inicialización de RGB end/ * Crear una instancia de la biblioteca RFID */#if definida (_use_soft_spi_) rfid rc522 (ss_pin, rst_pin, mosi_pin, miso_pin, sck_pin); // Software SPI #ELSE RFID RC522 (SS_PIN, RST_PIN); // hardware spi #endif // const char* webhook_name = "rfid_uid"; const char* webhook_name = "Ubidots"; Ubidots ubidots("webhook", ubi_PARTICLE); setup () void () {Serial.Begin (9600); // wifi.listen (); PinMode (Redpin, salida); PinMode (GreenPin, salida); PinMode (bluepin, salida); PinMode (Buzzpin, salida); // Configuración de credenciales para una nueva conexión wifi /* Esta sección solo es necesaria si desea conectarse a una nueva red WiFi después de la configuración inicial, esto solo funcionará si se han bordeado las credenciales de WiFi actuales. El código se ejecutará solo una vez en el inicio y establecerá nuevas credenciales especificadas. Una vez que se establecen nuevas credenciales, este código no volverá a ejecutar. */ Wifi.on (); if (! wifi.hascredentials ()) {wifi.setCredentials ("ssid", "contraseña", wpa2, wlan_cipher_aes); } Wifi.connect (); waituntil (wifi.ready); Particle.connect (); #if! Defined (_use_soft_spi_) / * Habilitar la interfaz HW SPI * / SPI.SetDatamode (SPI_MODE0); Spi.SetBitorder (MSBFIRST); Spi.setClockDivider (SPI_CLOCK_DIV8); Spi.begin (); #endif / * inicializar el lector rfid * / rc522.init (); retraso (5000); DigitalWrite (bluepin, alto); DigitalWrite (Greenpin, High); DigitalWrite (Redpin, Low); } void loop () { / * contador de bucle temporal * / uint8_t i; /* ¿Se ha detectado una tarjeta? */ if (rc522.iscard ()) {/ *Si es así, obtenga su número de serie */ rc522.readCardserial (); char str [16]; SnPrintf (STR, SizeoF (STR), " %02x %02x %02x %02x", RC522.Sernum [0], RC522.Sernum [1], RC522.Sernum [2], RC522.Sernum [3]); // webhooks /// * rfid_wp = su nombre webhook str = sus datos desea publicar privado o público */ // Particle.publish ("rfid_wp", str, privado); // publicar datos en WordPress DB // Particle.Publish ("XLS", STR, privado); // publicar datos en Google Sheets Serial.print (STR); / * Agrega pares de valores clave de contexto */ ubidots.addContext ("uid", str); char * context = (char *) malloc (sizeOf (char) * 60); / * Construye el contexto con la matriz anterior para enviar a Ubidots */ ubidots.getContext (contexto); ubidots.add ("uid", 1, contexto); // Cambiar para su nombre variable bool buffersent = false; bufferSent = ubidots.send (webhook_name, public); // utilizará webhooks particle para enviar datos //} // - prueba Ubidots - // // DigitalWrite (Buzzpin, High); retraso (500); DigitalWrite (Buzzpin, Low); DigitalWrite (bluepin, bajo); retraso (750); DigitalWrite (bluepin, alto); } else if (rc522.iscard ()) {rc522.readcardserial (); char str [16]; SnPrintf (STR, SizeoF (STR), " %02x %02x %02x %02x", RC522.Sernum [0], RC522.Sernum [1], RC522.Sernum [2], RC522.Sernum [3]); DigitalWrite (bluepin, bajo); DigitalWrite (GreenPin, Low); DigitalWrite (Redpin, High); // DigitalWrite (Buzzpin, High); retraso (1000); DigitalWrite (bluepin, alto); DigitalWrite (Greenpin, High); DigitalWrite (Redpin, Low); DigitalWrite (Buzzpin, Low); } retraso (500); }
Extremos frontales:
Gracias a la función webhook en la consola Particle , pude publicar sin problemas el código en casi cualquier lugar. Ahora, si conoce bastante bien PHP y MySQL, es posible que pueda escribir su propio script del lado del servidor, pero para aquellos que son nuevos en esto como yo, recomendaría los siguientes dos servicios;
Se diferencian mucho, por lo que puede echar un vistazo a ambos para determinar cuál es más adecuado para su uso. En pocas palabras, si desea que los datos se publiquen en vivo en una ubicación de su elección, Zapier (o algo similar) es el camino a seguir. Si no le importa almacenar datos en el servidor de otra persona, Ubidots es una forma mucho más rentable (costo por punto de datos) y tiene el beneficio adicional de algunos ingeniosos widgets para presentar sus datos de forma gráfica. Adjunto una captura de pantalla de un Dashboard que construí en Ubidots .
- Crédito de la foto: Migal Vanas.
En retrospectiva:
Inicialmente pensé que construir un indicador de batería que funcionara fuera del microcontrolador era la mejor idea, ya que funcionaría de forma independiente y liberaría pines digitales muy necesarios, pero la desventaja de esto es que sin enviar una entrada analógica al MC. , no puedes mostrar la duración de la batería en un dashboard. El LM3914N también requiere algunos cálculos para establecer volutas de referencia y determinar qué resistencias usar dependiendo de la diferencia de voltaje entre el estado "completamente cargado" y "agotado". Tenga en cuenta que por todas las razones prácticas debe trabajar con 3,1 V en la batería, ya que la mayoría de los componentes no funcionarán por debajo de 3 V o comenzarán a comportarse esporádicamente. Seis de uno, supongo.
Tampoco volvería a utilizar el interruptor de inclinación para activar el indicador de batería, ya que es demasiado sensible y provoca un "parpadeo". Un simple interruptor táctil parece una idea mucho mejor... solo una idea.
Imprescindible:
La mayor curva de aprendizaje aquí para mí fue el efecto que tendrá cualquier metal o circuito y un lector RFID. Diseñé, construí y probé toda la unidad primero conectada a una fuente de alimentación constante. Debido al diseño compacto de la unidad, la batería se instaló muy cerca del módulo lector RFID. La consecuencia…. Sin escaneos 😲 Como medida temporal, envolví la batería en cinta aislante eléctrica, lo que funcionó “bien”. Pedí ferrita a Amazon como Ave María y, como por arte de magia, la interferencia fue cosa del pasado.
Gracias a todos los que ayudaron con el proyecto de alguna manera, @scruffr por comprender que todos teníamos que comenzar en algún lugar y mostrar paciencia extrema 🙂 También muchas gracias a @joe en Particle por los increíbles kits de fabricantes. ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡!!!
Archivos:
Esquema del Águila - DESCARGAR
Archivo de tablero Eagle - DESCARGAR
Impresionante, ¿verdad? Ahora, como prometí... Aquí encontrará algunas de las preguntas que Friedl amablemente respondió.
P/ ¿Qué te hizo iniciarte en el ecosistema IoT ?
R/ Siempre me ha gustado la tecnología y mis ganas de crear cosas nuevas encajan perfectamente en el sector IoT . Desarrollar cosas nuevas que puedan mejorar la vida es lo que más me gusta.
P/ ¿Por qué probaste muchas plataformas?
R/ Como soy completamente nuevo en IoT y no me gusta mucho la codificación, estaba buscando una plataforma fácil de usar que también fuera rentable en lugar de escribir la mía propia. Descubrí que la mayoría de las plataformas se diseñaron teniendo en cuenta la experiencia de los usuarios, lo que hace que sea muy difícil para alguien nuevo en IoT. Incluso algunos usuarios experimentados podrían dedicar demasiado tiempo a configurar un sistema innecesariamente complicado. Como mi enfoque es principalmente el desarrollo de productos, diseño de productos y PCB, era imperativo encontrar una solución que pudiera comprender y comenzar a usar rápidamente.
P/ ¿Qué aprendiste de cada uno de ellos?
R/ La mayoría de las plataformas parecen difíciles de aprender y muy caras si no se tiene cuidado. Los bajos costos iniciales o las versiones “gratuitas” pueden fácilmente atraerlo a usar el producto, pero tan pronto como comience a transmitir datos en vivo, resultará bastante costoso.
P/ ¿Por qué decidiste optar por Ubidots?
R/ Ubidots demostró ser lo mejor de ambos: fácil de aprender, bastante económico y con una política de uso de datos justa. Además de esto, ¡el apoyo fue excelente! La GUI es bastante fácil de entender y la opción de etiqueta personalizada es interesante, aunque un poco cara.
Realmente espero que esta historia lo inspire a comenzar a construir y modificar sus propios IoT de diferentes tipos y, mejor aún, esperamos que utilice Ubidots para aprovechar sus mejores esfuerzos para habilitar su proceso.