Cada vez que conseguimos um novo cliente, Mario Bros ganha uma moeda
Como qualquer startup, ficamos entusiasmados sempre que nossas métricas crescem de forma positiva, e às vezes podemos ficar ainda mais entusiasmados se ganharmos uma moeda do Mario cada vez que conseguimos um novo cliente... Provavelmente você estará se perguntando como, certo?
Como uma plataforma de monitoramento poderosa , decidimos imediatamente usar Ubidots para começar a monitorar métricas em nossos próprios dashboards , mas o que realmente queríamos era criar um sistema que pudesse notificar todos os membros da nossa equipe sempre que conseguíssemos um novo cliente para ficarmos entusiasmados. e comemorando.
Uma das primeiras perguntas foi: como podemos motivar toda a nossa equipe no dia a dia sendo avisados quando conquistamos um novo cliente? Foi uma pergunta fácil de responder, acabamos comprando algumas sirenes de polícia. Mas, na verdade, a parte difícil do projeto foi descobrir como integrar sirenes policiais comuns e baratas aos Ubidots . Uma característica positiva dos membros da equipe Ubidots é que todos nós somos hackers em tempo integral, então poderíamos facilmente ser criativos em relação ao assunto.
Para integrar as sirenes decidimos adquirir duas placas de desenvolvimento customizadas ESP8266 que nos permitiriam gerenciar um relé para controlar o estado da luz de cada sirene. Além disso, queríamos avisar a equipe, mas o som de uma sirene da polícia poderia ser um pouco irritante, então decidimos reproduzir os sons de Mario Bros para torná-lo mais emocionante e menos intrusivo.
No final o resultado que obtivemos foi o seguinte:
O principal objetivo deste post é compartilhar todos os detalhes técnicos do projeto com a nossa comunidade Ubidots , para que você possa replicá-lo e se manter informado em tempo real sobre tudo o que possa ser medido. (Se você está iniciando um canal no YouTube, este pode ser um projeto adequado para você;))
Vamos começar a hackear!
Passo a passo
- Visão geral do projeto
- Configuração Ubidots
- Programação
- Fiação
- Resumo
Requisitos
- (1) Conta Ubidots
- (2) ESP8266 - Módulo relé de 1 canal
- (1) Módulo de som MP3 de cartão mini SD WTV020-SD-16P
- (1) Alto-falante de metal com fios - 8 ohm 0,5W
- Cabos elétricos
- (1) Luz Rotativa da Polícia - Verde
- (1) Luz Rotativa de Polícia - Vermelha
1. Visão geral do projeto
Como mencionamos anteriormente, decidimos adquirir duas sirenes policiais para sermos avisados sempre que conseguirmos um novo cliente ou quando houver uma rotatividade, diferenciando as sirenes pelas cores. Se a sirene verde acender, significa que temos um novo cliente. Se a sirene vermelha ligar, significa que perdemos um cliente.
Para poder controlar as sirenes com base no status do cliente, integramos Ubidots em uma Ubidots usando uma UbiFunction , um recurso que permite criar sua própria API e obter acesso a dados, APIs e ferramentas usando HTTPS. Este guia não abordará como lidar com o UbiFunction , caso você esteja interessado em obter mais detalhes, consulte este guia .
Com as métricas dos clientes já integradas em uma conta Ubidots , procedemos com algumas configurações na plataforma para definir algumas variáveis. Depois, tivemos que estabelecer uma assinatura das variáveis no MQTT para acionar o respectivo relé, a sirene verde ou a sirene vermelha, e é aqui que a mágica acontece. - Mario ganha uma moeda, ou perde uma vida... Temos que ser realistas!
2. Configuração Ubidots
As variáveis encarregadas de reportar o status dos clientes serão criadas automaticamente após a configuração do UbiFunction . Apenas para fins de teste, vamos criar um novo dispositivo com as variáveis desejadas a serem tratadas.
Se você deseja manipular dados do seu canal do YouTube , Twitter , Instagram , ou basicamente, ficar de olho em alguma métrica em funcionamento, basta consultar a documentação da API para consumi-los usando o UbiFunction . Neste ponto, você poderá obter as métricas para publicá-las diretamente em sua Ubidots .
Sem mais nada a dizer, vamos entrar em detalhes sobre como configurar um evento Ubidots para evitar resultados falso-positivos. Realmente não queremos que nossa equipe comemore em vão.
1) Vá para a seção Dispositivo Ubidots e crie um novo dispositivo chamado “ cliente ”. Para criar um novo dispositivo, clique no sinal de mais azul localizado no canto superior direito da tela. Em seguida, selecione os dispositivos “ em branco ” e atribua o nome definido.
2) Entre no dispositivo criado anteriormente e inclua 2 novas variáveis brutas . Para criar as variáveis, vá até a seção de dispositivos, clique em “ Adicionar Variável > Raw ” e atribua um nome para a variável a ser criada. Para este projeto, nomeamos as variáveis com:
- churn: variável responsável por receber um flag positivo (1) toda vez que um cliente churn
- new-client: variável encarregada de receber uma flag positiva (1) sempre que conseguirmos um novo cliente.
Com as variáveis já recebendo dados, é hora de fazer alguns truques para evitar falsos positivos caso nossos dispositivos percam a conexão.
3) Os módulos instalados funcionam em MQTT como protocolo de comunicação. Se você não estiver familiarizado com ele, recomendamos fortemente que você dê uma olhada na documentação oficial .
Este protocolo possui uma característica especial chamada " Mensagem Retida ". Basicamente, permite que o corretor mantenha a última mensagem de um tópico específico, definindo o sinalizador de mensagem retida, de modo que sempre que um dispositivo estabelecer uma assinatura com o tópico, o corretor retornará automaticamente a última mensagem retida.
Com base nisso, decidimos montar um Evento Ubidots para definir as variáveis “ churn ” e “ new-client ” como 0 logo após o recebimento da flag positiva (1). O que buscamos com isso é evitar um falso positivo caso as sirenes percam a conexão com a internet.
Imagine se a sirene verde fosse ativada e de repente o módulo WiFi perdesse a conexão. O que pode estar acontecendo?... Assim que o módulo WiFi restabelecer sua conexão, a sirene restabelecerá a assinatura também com a variável "novo-cliente", e se o último valor fosse o sinalizador positivo - 1, ela ligaria automaticamente a sirene novamente quando a notificação para aquele cliente era antiga.
Para configurar um evento Ubidots Dados> Eventos ” em sua Ubidots . Em seguida, crie um novo evento selecionando " + Adicionar evento ". Na configuração de configuração do evento, selecione o Dispositivo e a Variável com a qual deseja configurar as condições do seu Evento, no nosso caso o dispositivo é “ cliente ” e as variáveis são “ churn ” e “ novo-cliente ”.
NOTA : Este evento deve ser criado para ambas as variáveis de forma independente.
Com a variável já selecionada, certifique-se de que o trigger do evento tenha a seguinte configuração:
- " new-client " (variável) - Valor -> é igual a - 1 por 0 minutos.
Para prosseguir com a configuração da ação, pressione a seta para a direita localizada no canto inferior direito da página. Selecione “ Definir variável ” como ação, escolha a mesma variável relacionada ao gatilho e atribua “ 0 ” como valor.
Para finalizar, salve as alterações pressionando as setas para a direita.
Depois que o evento for criado com sucesso, repita o mesmo processo para criar um segundo evento para a variável ausente.
Após configurar os eventos, o comportamento esperado é que toda vez que a variável receber a flag positiva um valor igual a 1 vá para 0 automaticamente. Para melhor compreensão consulte a imagem abaixo:
4. Como você provavelmente já notou, as variáveis que estão reportando os " novos-clientes " e " churns " estão apenas atualizando uma flag positiva cada vez que Ubidots atualiza uma das variáveis, também queremos saber o total de novos clientes ou rotações que temos. Para isso, temos que configurar uma Variável Sintética que irá somar o total de flags recebidas na variável por um período de tempo definido.
Para criar a variável Sintética, selecione "+Adicionar variável > Sintética " dentro do dispositivo " cliente ". Em seguida, aplique a seguinte fórmula:
sum(x, data_range): Retorna a soma dos dots no data_range especificado.
Onde:
- X: é a variável desejada
- Intervalo_dados: o período de tempo desejado para retornar o somatório.
A fórmula final para cada variável deve ser:
- sum(“novo-cliente”, “1M”)
- soma(“rotatividade”, “1 milhão”)
Para finalizar a criação da variável, selecione “aceitar” e atribua o nome que desejar.
Neste ponto, você poderá ver o total de novos clientes ou rotações ocorridas durante um mês.
5. Agora com sua Ubidots já configurada, é hora de ser criativo e construir um dashboard para exibir todos os seus dados em um só lugar. Confira este guia para saber todos os detalhes sobre os diferentes widgets que você pode configurar em sua Ubidots .
3. Programação
3.1. Controle de sirenes
O módulo responsável pelo controle de status das sirenes é o relé ESP8266 + 1 Canal. O código base para ambas as sirenes será o mesmo, a única mudança que você notará está no rótulo da variável. Você deve atribuir o respectivo rótulo de variável onde deseja que o módulo ESP8266 estabeleça a conexão para ativar a sirene direita.
1. Para poder trabalhar com a ESP8266 no Arduino IDE, você precisará instalar a plataforma ESP8266 usando o Arduino Board Manager pré-configurado. Se você não estiver familiarizado com a adição de uma placa com o Arduino IDE, consulte este artigo para obter orientações adicionais .
2. Com a plataforma ESP8266 instalada, selecione o dispositivo ESP8266 com o qual você está trabalhando. No caso, estamos trabalhando com um “ Módulo ESP8266 Genérico ”. Para selecionar sua placa no Arduino IDE, selecione Ferramentas > Placa “Módulo ESP8266 Genérico” .
3. Baixe e instale a Ubidots MQTTESP8266 . Para obter uma explicação detalhada de como instalar bibliotecas usando o Arduino IDE, consulte este guia .
4. Agora, com os códigos de amostra a seguir, você poderá assinar as variáveis que relatam os valores.
Depois de inserir o código, você precisará atribuir seu Ubidots TOKEN , SSID (nome WiFi) e senha exclusivos da rede disponível. Caso suas variáveis e dispositivo estejam gerenciando um rótulo diferente dos usados neste guia, certifique-se de atribuir os rótulos corretos.
- Exemplo de código para a Sirene Vermelha:
/**************************************** * Incluir bibliotecas ****** **********************************/ #include " Ubidots ESPMQTT.h" /****** ********************************** * Definir Constantes ************* ***************************/ #define TOKEN "***" // Seu TOKEN Ubidots #define WIFINAME "***" / /Seu SSID #define WIFIPASS "***" // Seu Wifi Pass #define DEVICE_LABEL "customers" // Coloque aqui o rótulo do seu dispositivo Ubidots #define VARIABLE_LABEL "churn" // Coloque aqui o rótulo da variável Ubidots Ubidots client(TOKEN); byte reléOn[] = {0xA0, 0x01, 0x01, 0xA2}; //0xA00101A2 byte reléOff[] = {0xA0, 0x01, 0x00, 0xA1}; //0xA00100A1 /**************************************** *Funções Auxiliares*** *************************************/ void callback(char* topic, byte* payload, unsigned int length) { if ((char)payload[0]=='1') // Retransmissão em { Serial.write(relayOn, sizeof(relayOn)); atraso(10000); Serial.write(relayOff, sizeof(relayOff)); } } /****************************************** * Funções principais **** ************************************/ void setup() { // coloque seu código de configuração aqui, para executar uma vez: cliente. ubidots SetBroker("business.api. ubidots .com"); // Define o corretor corretamente para a conta comercial client.setDebug(false); // Passa um valor bool verdadeiro ou falso para ativar mensagens de depuração client.wifiConnection(WIFINAME, WIFIPASS); cliente.begin(retorno de chamada); cliente. ubidots Assinar(DEVICE_LABEL, VARIABLE_LABEL); //Inserir o dataSource e os Labels da Variável Serial.begin(9600); } void loop() { if(!client.connected()) { client.reconnect(); cliente. ubidots Assinar(DEVICE_LABEL, VARIABLE_LABEL); //Inserir o dataSource e os rótulos da variável } client.loop(); }
- Exemplo de código para a Sirene Verde:
/**************************************** * Incluir bibliotecas ****** **********************************/ #include " Ubidots ESPMQTT.h" /****** ********************************** * Definir Constantes ************* ***************************/ #define TOKEN "***" // Seu TOKEN Ubidots #define WIFINAME "***" / /Seu SSID #define WIFIPASS "***" // Seu Wifi Pass #define DEVICE_LABEL "customers" // Coloque aqui o rótulo do seu dispositivo Ubidots #define VARIABLE_LABEL "new-customer" // Coloque aqui o rótulo da variável Ubidots Cliente Ubidots (TOKEN ); byte reléOn[] = {0xA0, 0x01, 0x01, 0xA2}; //0xA00101A2 byte reléOff[] = {0xA0, 0x01, 0x00, 0xA1}; //0xA00100A1 /**************************************** *Funções Auxiliares*** *************************************/ void callback(char* topic, byte* payload, unsigned int length) { if ((char)payload[0]=='1') // Retransmissão em { Serial.write(relayOn, sizeof(relayOn)); atraso(10000); Serial.write(relayOff, sizeof(relayOff)); } } /****************************************** * Funções principais **** ************************************/ void setup() { // coloque seu código de configuração aqui, para executar uma vez: cliente. ubidots SetBroker("business.api. ubidots .com"); // Define o corretor corretamente para a conta comercial client.setDebug(false); // Passa um valor bool verdadeiro ou falso para ativar mensagens de depuração client.wifiConnection(WIFINAME, WIFIPASS); cliente.begin(retorno de chamada); cliente. ubidots Assinar(DEVICE_LABEL, VARIABLE_LABEL); //Inserir o dataSource e os Labels da Variável Serial.begin(9600); } void loop() { if(!client.connected()) { client.reconnect(); cliente. ubidots Assinar(DEVICE_LABEL, VARIABLE_LABEL); //Inserir o dataSource e os rótulos da variável } client.loop(); }
5. Verifique seu código no IDE do Arduino. Para fazer isso, no canto superior esquerdo do nosso Arduino IDE você verá o ícone Check Mark selecione-o para verificar seu código.
6. Carregue o código em seu “Módulo ESP8266 genérico” . Para fazer isso, escolha o ícone de “ seta para a direita” ao lado do ícone de “marca de seleção”.
7. Para verificar a conectividade do dispositivo e os dados enviados, abra o monitor serial selecionando o ícone “lupa” no canto superior direito do Arduino IDE para ver os logs .
3.2. Controle de sons
O módulo responsável pelo controle do MP3 é o WEMOS D1. Basicamente, o código estabelece a assinatura com as mesmas variáveis configuradas em cada sirene, mas isso também reproduziria os sons de Mario Bros. Lembrar:
- Se a sirene verde ligar, o alto-falante reproduzirá o som de Mario Bros ganhando uma moeda – Ubidots ganha um novo cliente.
- Se a sirene vermelha ligar, o alto-falante reproduzirá o som de Mario Bros perdendo uma vida - Ubidots perde um novo cliente.
1. Com a plataforma ESP8266 instalada, selecione o dispositivo ESP8266 com o qual você está trabalhando. Neste caso, estamos trabalhando com um “ WeMos D1 ”. Para selecionar sua placa no Arduino IDE, selecione Ferramentas > Placa “WeMos D1” .
2. Caso não tenha feito isso na etapa anterior, baixe e instale a biblioteca Ubidots MQTTESP8266 Para obter uma explicação detalhada de como instalar bibliotecas usando o Arduino IDE, consulte este guia .
3. Coloque o seguinte código em seu Arduino IDE. Depois de colar o código, certifique-se de atribuir seu Ubidots TOKEN , SSID (nome WiFi) e senha exclusivos da rede disponível.
/**************************************** * Incluir bibliotecas ****** **********************************/ #include " Ubidots ESPMQTT.h" /****** ********************************** * Definir Constantes ************* ***************************/ #define TOKEN "***" // Seu TOKEN Ubidots #define WIFINAME "***" / /Seu SSID #define WIFIPASS "***" // Seu Wifi Pass #define DEVICE_LABEL "customers" // Coloque aqui o rótulo do seu dispositivo Ubidots #define RED_SIREN "churn" // Coloque aqui o rótulo da sua variável Ubidots #define GREEN_SIREN "new- cliente" // Coloque aqui o rótulo da sua variável Ubidots #define RESET D5 #define NEXT D6 #define PLAY D7 Ubidots client(TOKEN); /************************************** *Funções Auxiliares****** **********************************/ void activate(int pin) { digitalWrite(pin, LOW); atraso(500); digitalWrite(pino, ALTO); } retorno de chamada void (char* tópico, byte* carga útil, comprimento interno não assinado) { char val = carga útil[0]; //Serial.println(tópico); if (strstr(topic,"novo-cliente") && val == '1') { ativar(RESET); ativar(JOGAR); atraso(2000); } else if (strstr(topic,"churn") && val == '1') { ativar(RESET); ativar(PRÓXIMO); atraso(2000); } } /****************************************** * Funções principais **** ************************************/ void setup() { pinMode(RESET, OUTPUT); pinMode(PRÓXIMO, SAÍDA); pinMode(PLAY, SAÍDA); digitalWrite(RESET, ALTO); digitalWrite(PRÓXIMO, ALTO); digitalWrite(PLAY, ALTO); // coloque seu código de configuração aqui, para executar uma vez: client. ubidots SetBroker("industrial.api. ubidots .com"); // Define o corretor corretamente para a conta comercial client.setDebug(false); // Passa um valor bool verdadeiro ou falso para ativar mensagens de depuração client.wifiConnection(WIFINAME, WIFIPASS); cliente.begin(retorno de chamada); cliente. ubidots Assinar(DEVICE_LABEL, GREEN_SIREN); //Inserir o cliente dataSource e Labels da Variável. ubidots Assinar(DEVICE_LABEL, RED_SIREN); Serial.begin(9600); } void loop() { if(!client.connected()) { client.reconnect(); cliente. ubidots Assinar(DEVICE_LABEL, GREEN_SIREN); //Inserir o cliente dataSource e Labels da Variável. ubidots Assinar(DEVICE_LABEL, RED_SIREN); } cliente.loop(); }
4. Verifique seu código no IDE do Arduino. Para fazer isso, no canto superior esquerdo do nosso Arduino IDE você verá o ícone Check Mark selecione-o para verificar seu código.
5. Carregue o código em seu “WeMos D1” . Para fazer isso, escolha o ícone de “ seta para a direita” ao lado do ícone de “marca de seleção”.
6. Se você não está familiarizado com o módulo MP3, é altamente recomendável que você consulte este guia , um dos melhores para começar.
Com base em nossa experiência, certifique-se de usar o formato correto para o SD e também para as músicas a serem reproduzidas.
- Tamanho do cartão Micro SD: 1 ou 2 GB no máximo.
- Formato Micro SD: FAT - Recomendamos que você formate seu cartão SD usando o SD Card Formatter .
- Formato das músicas: AD4 - Recomendamos que você use AD4Converter .
Para economizar alguns minutos de trabalho, nesta pasta você encontrará os sons do Mario Bros utilizados no projeto.
Com base na lógica utilizada no código, a primeira música identificada no cartão Micro SD como "0000" reproduzirá o som do Mario Bros quando ele estiver ganhando uma moeda, e a segunda identificada como "0001" reproduzirá o som do Mario Bros. som quando ele perdeu uma vida.
4. Fiação
NOTA IMPORTANTE: Antes de estabelecer todas as conexões em conjunto, certifique-se de que as placas possuam o código de amostra já carregado. Além disso, certifique-se de que eles estejam funcionando corretamente com sua conta Ubidots
Para facilitar a compreensão da fiação, dividi esse processo em diferentes etapas. Siga o diagrama e a tabela de fiação mostrada abaixo para estabelecer as conexões adequadas.
- Controle do módulo MP3
Para integrar o módulo relé ESP8266+1 canal com as sirenes tivemos que fazer algumas modificações na fiação original de cada sirene. Basicamente, removemos a chave manual de cada sirene para substituí-la pelo módulo de relé.
Para poder alimentar cada módulo de relé ESP8266 + 1 canal, utilizamos um carregador de celular para regular a tensão de entrada de 110V a 5V.
Consulte o diagrama abaixo para ter uma referência de como estabelecer a modificação na fiação original das sirenes, também de como energizar os módulos ESP8266.
- Controle do módulo MP3
O módulo MP3 possui diferentes configurações . Com base nos requisitos necessários para este projeto, decidimos utilizar o “circuito de aplicação do modo MP3”.
Consulte a tabela de fiação e o diagrama abaixo para estabelecer as configurações adequadas:
- Todo o sistema
Para finalizar, ligue a placa WEMOS com a saída de 5V do regulador utilizado:
Com as devidas conexões dos fios já estabelecidas, coloque todos os componentes dentro das sirenes e prossiga com a instalação das sirenes. No nosso caso, decidimos colocá-los na parede principal do nosso escritório.
5. Resumo
Nós realmente gostamos do tempo de hacking para reconstruir a funcionalidade das sirenes da polícia para notificar toda a equipe sobre o status dos clientes em tempo real, mas de uma forma divertida usando os sons do Mario Bros.
Sabemos que este é um projeto interno que não poderia ser tão útil para todos, mas achamos relevante para todos aqueles que estão iniciando seus canais no YouTube, b logs ou até mesmo em uma empresa e desejam acompanhar métricas de forma amigável e em tempo real sempre que você conseguir um novo assinante, visitante ou cliente.
Se você é um criador apaixonado como nós e decide reproduzir este projeto, fique à vontade para compartilhá-lo, mas não esqueça de nos marcar em @ubidots ubidots de nossas redes sociais ( facebook , linkedin , twitter , instagram ). Será um prazer compartilhá-lo com Ubidots .
Projetos IoT mais úteis: