Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Pager bidirecional da velha escola com Arduino

Componentes e suprimentos

Cartão SIM de IoT global de holograma
× 1
Arduino UNO
× 1
Arduino GSM shield V2
× 1
Adafruit LCD Shield Kit com display de 16x2 caracteres - apenas 2 pinos usava! - AZUL E BRANCO
× 1
Hammond Project Box 4.7 x 2.6 x 1.4 Azul translúcido
× 1

Aplicativos e serviços online

Roteador de dados de holograma

Sobre este projeto





Introdução


Procurando recriar a glória do final dos anos 90 e início dos anos 2000, pensei em tentar fazer meu próprio pager bidirecional, como Jay-Z costumava usar! Mas descobri que essa ideia é mais útil do que à primeira vista - eu a projetei para que pudesse ser usada por crianças no lugar de um telefone celular real, ou poderia ser usada como um botão "SOS" para alguém que trabalha sozinha ao ar livre ou mesmo se exercitando (se fosse um pouco menor). E nas últimas semanas, este dispositivo esteve sempre ligado na minha sala de estar, onde minha esposa e eu deixamos mensagens bobas uma para a outra.

Resumo:Este projeto envia e recebe mensagens de texto (SMS) por meio de um arduino com modem celular embutido em um pequeno gabinete com uma tela LCD e botões de controle simples.

Observe que o código para este projeto inclui a capacidade de executar o sistema a partir da interface serial para que você possa construir e usar uma versão deste projeto mesmo se você não tiver um escudo de LCD!





Seleção de hardware


Eu tinha um Arduino GSM Shield que queria usar com este projeto junto com um cartão SIM da Hologram, então combinando com um Arduino UNO eu tinha feito muito sentido. A Adafruit faz um escudo de tela LCD com botões embutidos e, como usa o barramento I2C, usa apenas dois pinos no Arduino para a tela e cinco botões, deixando muito espaço para personalizações futuras.

O LCD tem uma bela cor de fundo azul, então imaginei que combiná-lo com uma caixa azul translúcida ficaria bem. Empilhar as três placas uma sobre a outra criou algumas conexões muito limpas e não foi um problema elétrico porque as duas blindagens usam pinos diferentes um do outro.
  • Blindagem LCD:4 e 5 pinos analógicos para o barramento I2C (junto com alimentação de + 5 V e aterramento [mas apenas o aterramento próximo ao pino Vin, não aquele próximo ao pino 5 V])
  • Blindagem GSM:pinos 2 e 3 para serial de software e pino 7 para reinicialização de energia (além de energia e aterramento, obviamente, embora eu nunca tenha visto nenhum detalhe sobre isso na documentação)

Tudo o resto é livre para expandir ainda! Outros dispositivos ainda podem ser adicionados ao barramento I2C.

Durante o desenvolvimento, o sistema funcionou bem apenas com a energia USB do meu laptop para enviar e receber SMS, embora eu suspeite que precisará de mais energia para usar dados celulares GPRS de maneira confiável.





Comunicação celular


O Hologram fornece um serviço de dados de celular que funciona com qualquer dispositivo que aceite um cartão SIM. Depois de registrar meu cartão SIM para serviço, com apenas um clique extra consegui atribuir a ele um número de telefone no código de área de minha escolha. Outro recurso que torna este projeto excelente como comunicador infantil, por exemplo, é que é muito barato manter o serviço ativo ($ 0,40 / mês) e posso pausá-lo a qualquer momento se parar de usar o dispositivo. Como a maioria dos planos de celular, o recebimento de mensagens de texto é gratuito e o envio custa US $ 0,19 cada. No futuro, esse custo pode ser reduzido ainda mais usando uma conexão de dados com o serviço de nuvem do Hologram, onde uma mensagem pode ser automaticamente encaminhada para um serviço de SMS gratuito. $ 0,60 por um megabyte de dados gerará um monte de pequenas mensagens de texto.

Por alguma razão, embora o escudo GSM estivesse funcionando corretamente, ele não executaria corretamente o GSMScanner e GSMModem getIMEI () funções projetadas para configuração inicial e solução de problemas. Muito enganador! As funções de dados SMS e GPRS funcionaram bem, então se alguém souber por que o modem ainda não consegue me dizer seu próprio número IMEI, eu adoraria ouvir suas idéias.





Código e interface


Adafruit tem excelentes instruções para mostrar o escudo LCD em ação e o Arduino tem um bom guia de introdução para o escudo GSM que mostra as funções importantes, então a maior parte do meu código foi baseado nesses dois corpos de funções, além da minha própria adição interface de usuário.

Eu nunca tinha programado uma interface de usuário antes que não fosse inserir uma letra em uma linha de comando com um teclado, então eu queria mantê-la simples. Decidi fazer uma seleção de mensagens predefinidas para enviar que poderiam ser percorridas com as teclas para cima e para baixo - na verdade, mais fácil do que eu pensava!

Empilhando as três placas uma sobre a outra com um cartão SIM funcional (até mesmo do seu próprio telefone!) E exibindo o código abaixo, você obterá um dispositivo de mensagem de texto que funciona assim:
  • Ligue-o, ele inicializa e avisa quando a rede está conectada
  • Botão esquerdo:vai para a tela “inicial”
  • Botão para a direita:Confirmar na mensagem recebida, permitindo que a próxima mensagem chegue, se houver uma. Também escurece a tela se não houver mensagem atual.
  • Botões para cima / para baixo:percorrer a seleção de mensagens pré-programadas para enviar. Acho que você pode colocar quantos quiser no código; Comecei com quatro.
  • Botão Selecionar:enviar a mensagem atualmente selecionada

É isso! As mensagens recebidas são exibidas automaticamente, independentemente do menu ativo no dispositivo, e até acenderão a luz de fundo se ela estiver desligada.

A próxima etapa lógica pode ser adicionar um menu de números de destino para as mensagens enviadas ou apenas fazer com que ele responda automaticamente à última mensagem recebida (usando o remoteNumber () função).





Compilação final


Para cortar as aberturas na caixa do projeto, usei uma broca para furos normais e, em seguida, uma broca multifuncional Dremel (# 561) com guia (# 565) para os recortes maiores. Usar algumas placas e grampos extras para fazer um gabarito para guiar a Dremel teria proporcionado linhas mais limpas, mas estou bastante feliz com o que fiz à mão livre. O bit definitivamente queria vagar mais do que eu esperava!

Os únicos fios reais no projeto são para alimentação para adicionar uma bateria de 9 V e switch - sem uma bateria, pode ser alimentado por USB ou um plugue de parede e pronto!

Uma bateria de 9 V e um clipe se encaixam perfeitamente ao lado do Arduino e sob o escudo GSM (que tem quase o mesmo tamanho de um Arduino Mega). Soldei os fios a alguns pinos do conector para facilitar a conexão de energia.

Felizmente, o escudo GSM tinha cabos extra longos e dobráveis ​​em seus pinos. Consegui dobrá-los ligeiramente para que não acertassem os soquetes no Arduino, deixando essas conexões livres para meu conector de alimentação. Eu suspeito que é por isso que os pinos são assim! O escudo do LCD na parte superior tem pinos curtos e robustos sem conexões fêmeas na parte frontal, então dobrar os pinos é o único método que encontrei para conectar outras coisas além dos escudos nesta configuração.

Prender os fios de solda da porta USB e alguns outros na parte inferior do Arduino permite que ele se encaixe bem no gabinete em uma fita de espuma de duplo stick. Em seguida, as placas se empilham para deixar o LCD e os botões ligeiramente salientes acima da parte superior do gabinete - perfeito!





Conclusão


Vou continuar mexendo neste sistema e até mesmo deixar meu sobrinho de 4 anos mexer um pouco nele. Acho que funciona muito bem como mensageiro, mas fiquei surpreso ao ver que gosto ainda mais dele como um minúsculo outdoor em minha casa para exibir mensagens. Estou feliz com a estética, o que ajuda nisso.

Um trabalho adicional sobre isso poderia ter um segundo menu para selecionar o destinatário de uma mensagem, escurecer automaticamente o visor para economizar energia, adicionar luzes / campainhas / motores de pager para notificações ou qualquer outro comportamento de interface de usuário preferido que você possa desejar!

O sistema também pode ser fundamentalmente alterado para exibir notificações de um serviço como o IFTTT, como se você tivesse um pacote entregue ou os últimos tweets de alguém. O que você está construindo? Como você melhoraria o sistema?

Aproveitar!

-Mike

Você pode ler mais sobre mim e meus projetos no meu blog, incluindo mais sobre este projeto.

(Este projeto foi possível como parte de Holograma Programa Hacker-In-Residence. Para obter mais informações, entre em contato com Sheena, coordenadora de conteúdo do Hologram, em [email protected] )

Código

  • Código do sistema para Arduino
Código do sistema para Arduino Arduino
 / ** * Sistema de pager bidirecional com serviço de celular Arduino e Hologram * Mike Schaus * 28 de dezembro de 2016 * Feito como parte do programa Hologram Hacker-In-Residence * * Este projeto envia e recebe texto (SMS) mensagens via * um arduino com modem celular embutido em um pequeno gabinete * com uma tela LCD e botões de controle simples. * * Observe que o código está incluído para funcionar por meio da blindagem de LCD OU * do monitor serial, portanto, você pode usar esse código mesmo sem * uma blindagem de LCD. * / # include  #define PINNUMBER "" // inclui o código da biblioteca LCD:#include  #include  #include  // O escudo usa os pinos I2C SCL e SDA. No Arduinos clássico // este é Analog 4 e 5, então você não pode mais usar aqueles para analogRead () // No entanto, você pode conectar outros sensores I2C ao barramento I2C e compartilhar // o barramento I2C.Adafruit_RGBLCDShield lcd =Adafruit_RGBLCDShield ( ); // Esses # define tornam mais fácil definir a cor da luz de fundo # define OFF 0x0 # define ON 0x1 // torna o caractere especial de seta na seta de byte do LCD [8] ={B00000, B00000, B01000, B01100, B01110, B01100, B01000, B00000}; // inicializar a biblioteca GSM instanceGSM gsmAccess (false); // inclua um parâmetro 'true' para debug enabledGSM_SMS sms; // char array do número de telefone para enviar SMS // altere o número 12125551212 para um número // você tem acesso tochar remoteNumber [20] ="12125551212"; // Matriz para conter o número que um SMS é recuperado de char senderNumber [20]; // matriz char das mensagens de saída possíveis para escolher a partir do menu * respostas [] ={"Mike =Impressionante!", "Sim", "Não", "Olá!"}; // # define NUMRESPONSES 4 // se alguém sabe como calcular isso, eu sou todo ouvidos # define NUMRESPONSES (sizeof (responses) / sizeof (char *)) // graças ao comentário de Steve Kemp ! posição int =-1; // desta forma, o primeiro botão pressionado sempre mostrará a primeira opção do menuint inByte =0; // byte serial de entrada para interfaceboolean backlight =true; // rastreia o status da luz de fundo para togglingunsigned long previousMillis =0; // armazenará a última vez que as mensagens foram verificadas # define CHECKINTERVAL 1500 // com que freqüência verificar as mensagens de textovoid setup () {// coloque o código de configuração aqui, para executar uma vez:// inicializar comunicações seriais Serial.begin (9600); Serial.println (F ("SMS Message Sender - iniciando ...")); // configura o número de colunas e linhas do LCD:lcd.begin (16, 2); // Imprime uma mensagem no LCD lcd.print (F ("Hello, Hologram!")); lcd.setCursor (0, 1); lcd.print (F ("Iniciando ...")); lcd.setBacklight (ON); // configura o caractere de seta para exibição lcd.createChar (0, seta); // estado da conexão boolean notConnected =true; // Iniciar escudo GSM // Se seu SIM tiver PIN, passe-o como um parâmetro de begin () entre aspas while (notConnected) {if (gsmAccess.begin (PINNUMBER) ==GSM_READY) {notConnected =false; Serial.println (F ("O GSM está conectado porque você é incrível")); Serial.println (F ("Aguardando mensagens, ou enviar com \" s \ "")); Serial.println (); lcd.clear (); lcd.setCursor (0,0); tela inicial(); } else {Serial.println (F ("Não conectado")); lcd.clear (); lcd.setCursor (0,0); lcd.print (F ("Não conectado")); atraso (1000); }}} // este é o sistema de menu functionvoid showResponses () {// Serial.println (posição); // apenas para sistema de menu de depuração lcd.clear (); lcd.setCursor (0,0); // certifique-se de que a posição do cursor é válida if (position <0) position =0; if (posição> NUMRESPONSES-1) posição =NUMRESPONSES-1; // escreve a seleção atual e a próxima opção se houver outra opção lcd.write (0); // caractere de seta lcd.print (posição + 1); lcd.print ("-"); lcd.print (respostas [posição]); if (posição  0) {inByte =Serial.read (); // obtém o byte de entrada if (inByte =='s') {printResponseOptions (); while (Serial.available ()> 0) {// limpar o buffer do teclado apenas no caso de char junk =Serial.read (); } enquanto (Serial.available () ==0); // Espere aqui até que o buffer de entrada tenha um caractere inByte =Serial.parseInt (); // gostaria de verificar a escolha válida aqui para ser mais robusto sendSMS (responses [inByte]); }} // verifica se há novas mensagens apenas uma vez a cada poucos segundos para manter a interface mais responsiva unsigned long currentMillis =millis (); if (currentMillis - previousMillis> =CHECKINTERVAL) {previousMillis =currentMillis; receberSMS (); // leva cerca de 26 ms quando não há mensagens}} 

Esquemas

A montagem é na verdade muito mais simples do que o esquema sugere - a maioria das conexões são feitas simplesmente empilhando os dois escudos no topo do Arduino! Qualquer coisa além disso é opcional para energia da bateria.

Processo de manufatura

  1. Monitoramento de CO2 com Sensor K30
  2. Comunicação para surdos-cegos com 1Sheeld / Arduino
  3. Aceitar moeda de controle com Arduino
  4. Arduino com Bluetooth para controlar um LED!
  5. Sensor capacitivo de impressão digital com um Arduino ou ESP8266
  6. Brincando com Nextion Display
  7. Braço robótico controlado por Nunchuk (com Arduino)
  8. Medindo a radiação solar com Arduino
  9. Mini Radar com Arduino
  10. Como fazer música com um Arduino