Leitor RFID móvel - um projeto Maker Kit usando Particle & Ubidots
Durante os últimos anos, Ubidots se uniu à Particle para atingir um objetivo final; permitindo a criação rápida, fácil e eficiente de IoT .
Avançando até os dias atuais, temos orgulho de afirmar que ambos os produtos estão sendo usados para acelerar IoT em nível global . Desde empreendedores e start-ups até grandes e pequenas empresas, estamos ajudando as empresas a criar um futuro baseado em dados.
Recentemente, Friedl aceitou o desafio de criar um produto IoT Desde o início, o conhecimento de Friedl sobre o assunto era limitado. Porém, graças às pesquisas que realizou - e a muitos vídeos do Youtube -, ele se tornou confiante em utilizar diversas ferramentas para materializar seu objetivo; Criando um leitor RFID móvel sem ser um IoT .
Depois de alcançar esse resultado surpreendente, entramos em contato com Friedl para parabenizá-lo pelo sucesso e aprender com sua conquista. Também queríamos partilhar esta história com a Comunidade Ubidots porque acreditamos que é uma história para inspirar e aprender.
À luz dessas grandes conquistas, minha entrevista explorará o processo de desenvolvimento de Friedl, as técnicas que ele usou para atingir seu objetivo e outras lições valiosas.
A postagem original pode ser encontrada no site da Particle Community . Friedl gentilmente compartilhou isso com Ubidots também.
Escrito por : friedl_1977
Como primeiro projeto, decidi construir um leitor RFID móvel postando dados ao vivo para MySQL, Google Sheets ou Ubidots via Webhooks.
- Crédito da foto: Migal Vanas
Observação:
Este não é um tutorial propriamente dito, mas apenas uma vitrine do produto. Como tive muita ajuda do Particle Forum, decidi publicar meus arquivos e código Eagle para disponibilizá-los a qualquer pessoa que queira usá-los.
Presumo que você tenha conhecimento básico do ambiente do Particle, web hooks e tenha configurado sua conta e dispositivos no Particle Console. Caso contrário, faça-o antes de tentar esta compilação.
O resumo:
Construir um scanner RFID verdadeiramente sem fio (móvel) com o objetivo de digitalizar cartões RFID, capturar os UIDs desses cartões e publicá-los em qualquer um deles;
Lista de materiais:
- Módulo leitor de cartão MFRC522 3
- Bateria 3.7V LiPo 1
- Módulo de bateria 1
- LM394N1
- Conjunto de 0603 LEDs para indicador de bateria
- 2 LEDs RGB para status do sistema e status de leitura do cartão
- Partícula Fóton
- Interruptor deslizante - Alimentação principal
- Inclinar 1 interruptor
- PCB de design personalizado (de PCBWAY ou similar )
- Gabinete de design personalizado
- Vários resistores 0603
- Ferrita 2 !!!
Primeiras coisas primeiro:
Se você for como eu, um gabinete de protótipo genérico simples não será suficiente, então coloquei um pouco de esforço extra, conheci meu caminho no Rhinoceros e projetei um gabinete simples, mas elegante (ou pelo menos pensei assim) que mostraria o Particle Photon e alguns outros componentes.
Além disso, decidi não optar por uma placa proto genérica porque ODEIO fios. Incluí uma imagem da minha tentativa inicial de fazer uma placa “bonita” usando placa proto e fios de jumper, mas depois de algumas horas percebi que simplesmente não funcionaria. Mais uma curva de aprendizado, pesquisei no Google e passei algumas horas no YouTube e consegui me orientar no Autodesk Eagle. Vale cada minuto gasto.
***A última imagem indicando a PCB totalmente montada com LED de status indicando "OK ", bem como o LM3914N em ação indicando ±90% de bateria carregada. (7 de 8 LEDs)
Enviei os arquivos Gerber para PCBWAY e em menos de uma semana e In tinha meu novo PCB personalizado pronto para montagem.
O importante:
Agora, a codificação é a parte com a qual mais tenho dificuldade, mas graças a algum cavalheiro prestativo nos fóruns Particle e Hackster, criei o código abaixo. Provavelmente não é o código mais limpo já escrito, mas funciona, então sinta-se à vontade para usar e melhorar se desejar.
// Projeto: Registro de presença RFID móvel // Um projeto da FireFli (PTY) LTD // Data: julho de 2019 // Compilado por: Friedl Basson // Detalhes: Digitalização de UIDs de cartões RFID e postagem via webhooks para UbiDots , mySQL DB ou Google Sheets // Créditos: Agradecimentos especiais à comunidade Particle por ajudar e tornar este projeto possível! // Firmware: V2.1.1 //Modo Sistema// - comente se você irá configurar WiFi via aplicativo Particle e não precisa se conectar a outra rede Wireless após o fato //SYSTEM_MODE(SEMI_AUTOMATIC); // Esta instrução #include foi adicionada automaticamente pelo Particle IDE. #include "RFID.h" #include < Ubidots .h> /* Define os pinos usados para os pinos SS (SDA) e RST (reset) para AMBOS o hardware e o software SPI */ #define SS_PIN A2 #define RST_PIN D2 /* Defina os pinos usados para os pinos DATA OUT (MOSI), DATA IN (MISO) e CLOCK (SCK) SOMENTE para SOFTWARE SPI */ #define MOSI_PIN D3 #define MISO_PIN D4 #define SCK_PIN D5 //Inicializando RGB START - RGB LED e a campainha é usada como indicador de status do sistema int redPin = D6; int pinoverde = D1; int pinoazul = D0; int buzzPin = D7; //Inicializando RGB END /* Cria uma instância da biblioteca RFID */ #if Defined(_USE_SOFT_SPI_) RFID RC522(SS_PIN, RST_PIN, MOSI_PIN, MISO_PIN, SCK_PIN); // Software SPI #else RFID RC522(SS_PIN, RST_PIN); // SPI de hardware #endif //const char* WEBHOOK_NAME = "rfid_uid"; const char* WEBHOOK_NAME = " Ubidots "; Ubidots ubidots ("webhook", UBI_PARTICLE); void configuração() {Serial.begin(9600); // WiFi.listen(); pinMode(redPin, SAÍDA); pinMode(pinoverde, SAÍDA); pinMode(azulPin, SAÍDA); pinMode(buzzPin, SAÍDA); // Configurando credenciais para nova conexão WiFi /* Esta seção só é necessária se você quiser se conectar a uma nova rede WiFi após a configuração inicial. Isso só funcionará se as credenciais WiFi atuais tiverem sido apagadas. O código será executado SOMENTE UMA VEZ na inicialização e definirá novas credenciais especificadas. Depois que novas credenciais forem definidas, esse código não será executado novamente. */ WiFi.on(); if (!WiFi.hasCredentials()) { WiFi.setCredentials("SSID", "SENHA", WPA2, WLAN_CIPHER_AES); } WiFi.connect(); espere até (WiFi.ready); Partícula.connect(); #if !definido(_USE_SOFT_SPI_) /* Habilita a interface HW SPI */ SPI.setDataMode(SPI_MODE0); SPI.setBitOrder(MSBFIRST); SPI.setClockDivider(SPI_CLOCK_DIV8); SPI.begin(); #endif /* Inicializa o leitor RFID */ RC522.init(); atraso(5000); digitalWrite(pinoazul, ALTO); digitalWrite(pinoverde, ALTO); digitalWrite(pinovermelho, LOW); } void loop() { /* Contador de loop temporário */ uint8_t i; /* Um cartão foi detectado? */ if (RC522.isCard()) { /* Se sim, então obtenha seu número de série */ RC522.readCardSerial(); caracterestr[16]; snprintf(str, sizeof(str) , "%02X %02X %02X %02X" , RC522.serNum[0] , RC522.serNum[1] , RC522.serNum[2] , RC522.serNum[3] ); // Webhooks// /* RFID_WP = nome do seu webhook str = seus dados que você deseja publicar PRIVATE ou PUBLIC */ // Particle.publish("RFID_WP", str, PRIVATE); //Publicar dados no banco de dados Wordpress // Particle.publish("XLS", str, PRIVATE); // Publicar dados no Planilhas Google Serial.print(str); /* Adiciona pares de valores-chave de contexto */ ubidots .addContext("UID", str); char* contexto = (char *) malloc(sizeof(char) * 60); /* Constrói o contexto com o array acima para enviar para Ubidots */ ubidots .getContext(context); ubidots .add("UID", 1, contexto); // Altere o nome da sua variável bool bufferSent = false; bufferSent = ubidots .send(WEBHOOK_NAME, PUBLIC); // Usará webhooks de partículas para enviar dados //} // - TRY Ubidots - // // digitalWrite(buzzPin, HIGH); atraso(500); digitalWrite(buzzPin, BAIXO); digitalWrite(bluePin, BAIXO); atraso(750); digitalWrite(pinoazul, ALTO); } else if (RC522.isCard()) { RC522.readCardSerial(); charstr[16]; snprintf(str, sizeof(str) , "%02X %02X %02X %02X" , RC522.serNum[0] , RC522.serNum[1] , RC522.serNum[2] , RC522.serNum[3] ); digitalWrite(bluePin, BAIXO); digitalWrite(pinoverde, LOW); digitalWrite(pinovermelho, ALTO); //digitalWrite(buzzPin,HIGH); atraso(1000); digitalWrite(pinoazul, ALTO); digitalWrite(pinoverde, ALTO); digitalWrite(pinovermelho, LOW); digitalWrite(buzzPin, BAIXO); } atraso(500); }
Front-ends:
Graças à função webhook no Particle Console, consegui postar o código perfeitamente em praticamente qualquer lugar. Agora, se você conhece PHP e MySQL muito bem, poderá escrever seu próprio script do lado do servidor, mas para aqueles que são novos nisso como eu, eu recomendaria os dois serviços a seguir;
Eles diferem muito, então você deve dar uma olhada em ambos para determinar qual é mais adequado para seu uso. Resumindo, se você deseja que os dados sejam publicados ao vivo em um local de sua escolha, o Zapier (ou algo semelhante) é a melhor opção. Se você não se importa em armazenar dados no servidor de outra pessoa, Ubidots é uma opção muito mais econômica (custo por ponto de dados) e tem o benefício adicional de alguns widgets bacanas para apresentar seus dados de forma gráfica. Anexei uma captura de tela de um Dashboard que construí no Ubidots .
- Crédito da foto: Migal Vanas
Em retrospectiva:
Inicialmente pensei que construir um indicador de bateria que funcionasse fora do microcontrolador fosse a melhor ideia, pois funcionaria de forma independente e liberaria os pinos digitais necessários, mas a desvantagem disso é que sem uma entrada analógica sendo enviada ao MC , você não será capaz de exibir a duração da bateria em um dashboard . O LM3914N também requer alguns cálculos para definir volutas de referência e determinar quais resistores usar dependendo da diferença de tensão entre o status “totalmente carregado” e “esgotado”. Tenha em mente que por todas as razões práticas você deve trabalhar com 3,1V na bateria já descarregada, pois a maioria dos componentes não funcionará abaixo de 3V ou começará a se comportar esporadicamente. Seis de um, suponho.
Eu também não usaria o interruptor de inclinação novamente para acionar o indicador de bateria, pois ele é muito sensível e causa 'oscilação'. Um simples interruptor tátil parece uma ideia muito melhor... só uma ideia.
Obrigatório:
A maior curva de aprendizado aqui para mim foi o efeito que qualquer metal ou circuito terá e um leitor RFID. Projetei, construí e testei toda a unidade primeiro conectada a uma fonte de alimentação constante. Devido ao design compacto da unidade, a bateria foi instalada muito próxima do módulo leitor RFID. A consequência…. Sem varreduras 😲 Como medida temporária, enrolei a bateria em fita isolante elétrica que fez um trabalho “ok”. Encomendei Ferrite da Amazon como Ave Maria e como num passe de mágica a interferência era coisa do passado.
Obrigado a todos que ajudaram de alguma forma com o projeto, @ScruffR por entender que todos tínhamos que começar de algum lugar e mostrar extrema paciência 🙂 Também um grande obrigado a @Joe da Particle pelos incríveis Maker Kits. Ansiosa por mais projetos!!!
Arquivos:
Esquema Eagle - DOWNLOAD
Arquivo Eagle Board - DOWNLOAD
Incrível, certo? Agora, como prometido... Aqui você encontrará algumas das perguntas que Friedl gentilmente respondeu.
P/O que fez você começar no ecossistema IoT ?
R/ Sempre gostei de tecnologia e meu desejo de criar coisas novas se encaixou perfeitamente no setor de IoT . Desenvolver coisas novas que possam melhorar a vida é o que mais gosto.
P/Por que você experimentou muitas plataformas?
A/ Como sou completamente novo em IoT e não gosto muito de codificação, estava procurando uma plataforma fácil de usar que também fosse econômica, em vez de escrever a minha própria. Descobri que a maioria das plataformas foi projetada tendo em mente os usuários experientes, o que torna muito difícil para alguém novo na IoT . Mesmo alguns usuários experientes podem achar que gastam muito tempo configurando sistemas desnecessariamente complicados. Como meu foco é principalmente o desenvolvimento de produtos, design de produtos e PCB, era fundamental que eu encontrasse uma solução que pudesse entender rapidamente e começar a usar.
P/ O que você aprendeu com cada um deles?
R/ A maioria das plataformas parece difícil de aprender e muito cara se você não tomar cuidado. Custos iniciais baixos ou versões “gratuitas” podem facilmente induzi-lo a usar o produto, mas assim que você começar a transmitir dados ao vivo, ele se revelará bastante caro.
P/Por que você decidiu usar Ubidots ?
A/ Ubidots provou ser o melhor de ambos, fácil de aprender, bastante barato e com política de uso de dados justa. Além disso, o apoio foi ótimo! A GUI é fácil de entender e a opção de etiqueta personalizada é interessante, embora um pouco cara.
Eu realmente espero que esta história inspire você a começar a construir e mexer em seus próprios IoT e, melhor ainda, esperamos que você use Ubidots para aproveitar seus melhores esforços para habilitar seu processo.