Home › Tag Archives › wireless

Shield GSM GPRS baseado em SIM900

A finalidade deste shield é conectar o arduino (qualquer um, mas é preciso fazer uma pequena alteração para o Mega) à rede celular para enviar e receber mensagens (SMS) ou se conectar à internet (GPRS). Você teoricamente (isso eu nunca testei) também pode conectar um microfone e/ou alto falante aos respectivos conectores e “ligar” para o seu projeto e ouvir o que se passa ao redor.

Nota: é muito comum as pessoas (incluindo muitos vendedores) confundirem GPRS com GPS. São duas funcionalidades complementares mas completamente diferentes. Este shield não tem funcionalidade GPS e são raros os que tem, porque geralmente faz mais sentido comprar as duas coisas separadamente.

A documentação completa do shield é fornecida pela Elecfreaks. Na página você irá encontarar diagramas e diversas informações importantes, mas os exemplos não são muito bons. Use a biblioteca que eu sugiro mais adiante.

Este shield precisa de alimentação extra. Ele não vai funcionar direito, se chegar a funcionar, apenas com a alimentação recebida do computador pelo cabo USB. Use a fonte fornecida com o shield.

O SIM900 precisa ser “ligado” para funcionar. Neste shield isso é feito dando um pulso no pino D6 do Arduino. Mas você também pode fazer isso apertando o botão S_PWR no shield.

A princípio você pode achar isso incoveniente, mas tenha em mente que o consumo do módulo é elevado. Dessa forma você tem um controle e para poupar energia só precisará ligar o “celular” quando realmente for necessário. Se não quiser ter que ficar apertando o botão, simplesmente programe seu sketch para ativar D6.

Você não precisa do arduino para usar esse shield. Com alguns fios e um adaptador USB-TTL você pode conectar o shield diretamente a um computador e usar um terminal serial qualquer para enviar e receber comandos.

A melhor biblioteca que conheço para esse shield é a GSM Shield Library. Compatível com o IDE 1.x.

Para testar a comunicação com a internet, rode o exemplo GSMSHIELD->GSM_GPRSLibrary_AT. Esse exemplo traz o conteúdo da página em google.com.

Problemas com o Arduino Mega

Esta combinação funciona sem qualquer problema no Arduino UNO, mas para usar com o Arduino Mega é necessário mudar a porta usada para comunicação:

1)Escolha um pino livre qualquer no Mega. Neste exemplo eu vou usar o D53 (também funcionou com o D10);

2)Edite a linha em GSM.cpp, para que aponte para o novo pino:

#define _GSM_TXPIN_ 2

Minha linha ficou assim:
#define _GSM_TXPIN_ 53

3) Remova o jumper que conecta S_TX ao pino D2 e, com um fio, conecte S_TX ao pino escolhido

A foto abaixo mostra o pino 22 sendo usado, só para facilitar o enquadramento:

O problema é que por default o shield se comunica com o arduino através de uma porta serial virtual criada pela biblioteca SoftwareSerial nos pinos D2 e D3, porém por alguma razão o shield não consegue usar o pino D2 do Mega para isso. Note que o shield tem previsão para usar a porta serial “real” em D0 e D1, mas isso conflitaria com a comunicação do Arduino com a porta USB. Só dá para usar a porta serial real em situações bem controladas.

Procedimento básico de teste

  1. Coloque um cartão SIM no slot sob o shield;
  2. Encaixe o shield no Arduino;
  3. Conecte o plug de alimentação externa ao arduino;
  4. Aperte o botão S_PWR por um segundo. O LED STA deve acender e o LED NET comecará a piscar. Observe o ritmo das piscadas. Se estiver piscando uma vez a cada 3s, o shield está pronto para estabelecer comunicação com a rede celular;
  5. Supondo que você tenha acesso à internet pelo chip escolhido, rode o exemplo GSMSHIELD->GSM_GPRSLibrary_AT. Se o shield conseguir estabelecer comunicação GPRS, você verá algo assim na porta serial:

—————————-————————————————————-
GSM Shield testing.

status=READY
TEST
status=ATTACHED

189.119.98.144

Number of data received:
0

Data received:

HTTP/1.0 302 Found
Location: http://www.google.com.br/
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Set-Cookie: PREF=ID=88974c4a4ce7d358:FF=0:TM=1356638512:LM=1356638512:S=7ZrafKBfjFkjdNiU; expires=Sat, 27-Dec-2014 20:01:52 GMT; path=/; domain=.google.com
Set-Cookie: NID=67=M3yKlvZcLBDQf7zPokAkH8yuKfs6g3sugEclhXF3xOXadcRkBrcIwYXLk_9iCdHZys6DcFwP20NDYU3VMzoidFGJJyP3cfirxhaw63ly4wdRWOOdfLi4fBUcCRYe8Ec5; expires=Fri, 28-Jun-2013 20:01:52 GMT; path=/; domain=.google.com; HttpOnly
P3P: CP=”This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info.”
Date: Thu, 27 Dec 2012 20:01:52 GMT
Server: gws
Content-Length: 222
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN

<HTML><HEAD><meta http-equiv=”content-type” content=”text/html;charset=utf-8″>
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF=”http://www.google.com.br/”>here</A>.
</BODY></HTML>

CLOSED

——————————————————————————–

Para enviar SMS

Cuidado! Certifique-se de usar um chip de uma operadora que cobre barato por SMS enviado, como o TIM Infinity. Durante os testes você pode acabar enviando, às vezes sem saber, muitas mensagens.

Rode o exemplo GSMSHIELD->GSM_GPRSLibrary_SMS. Nos meus testes só funcionou quando eu mudei a seguinte linha:

 if (gsm.begin(2400)){

para

 if (gsm.begin(4800)){

Por default, o sketch apenas vai listar as mensagens contidas no chip. Se você quiser enviar um SMS toda vez que o arduino for inicializado, descomente as seguintes linhas:

   // if (sms.SendSMS(“34567890”, “Arduino SMS”))
  //    Serial.println(“\nSMS sent OK”);

Trocando 34567890 pelo número do telefone que vai receber o SMS.

Display

O módulo suporta o encaixa direto de módulos display Nokia 5110 (vendido separadamente) que tenham o seguinte pinout:

  • 1 – VCC
  • 2 – GND
  • 3 – SCE
  • 4 – RST
  • 5 – D/C
  • 6 – DIN (MODI/MOSI)
  • 7 – SCLK
  • 8 – LED

A ordem dos pinos de 3 a 7 (destacados em verde) não é realmente importante, porque em geral você pode escolher isso no sketch. Mas a posição dos pinos 1, 2 e 8 precisa ser como indicado.

Notar que, para economizar pinos, o pino 8 é permanentemente conectado a +VCC, por isso o sketch não poderá controlar o acendimento do backlight. Por um lado isso gera um problema de consumo, mas por outro, supostamente o display só deve ser conectado quando você estiver debugando o projeto.

Você pode usar, entre outras, a biblioteca LCD5110_Graph

Outras fontes de informação

As páginas seguintes tratam de shields diferentes, mas cada uma delas tem informação interessante, que não encontrei na página oficial, incluindo exemplos GPRS

Módulos Bluetooth Master e Slave

Módulo slave

 

Módulo Master

 

Para entender o propósito e aplicação desses módulos, é preciso assimilar o seguinte:

  • O master só pode se comunicar com um (e apenas um) slave;
  • O slave pode se comunicar com um (e apenas um) master ou um (e apenas um) computador com suporte bluetooth, que nesse caso atua como master;
  • Não pode haver comunicação entre dois slaves ou dois masters. É preciso um de cada. Salvo engano, é uma limitação do protocolo BT;
  • Tanto o master quanto o slave podem ser conectados fisicamente a qualquer coisa que ofereça uma porta serial UART* TTL. Isso pode ser um computador com um adaptador USB – serial TTL, o arduino (qualquer um deles) ou quaisquer outros microcontroladores e dispositivos prontos que tenham portas seriais, mesmo se forem “caixas pretas”. Se a porta segue o padrão UART (“RS232”), deve funcionar;

* No mundo do PC, aprendemos a chamar isso pelo nome genérico de “RS232”, que não está inteiramente certo nesse caso. “UART” é um termo genérico mais apropriado quando descemos ao nível dos microcontroladores.

Funcionamento do módulo master
É preciso prestar atenção ao LED:

  • Piscando rapidamente (várias vezes por segundo): O master não tem registro de já ter pareado com um slave;
  • Piscando devagar (aprox. uma vez por segundo): O master “lembra” de ter pareado com um slave, mas não está pareado no momento;
  • Aceso: pareado

Uma vez que o master não tenha registro de já ter sido pareado com um slave, o pareamento ocorrerá automaticamente quando um slave for ligado no alcance dele. Ele sempre lembrará desse slave pelo seu endereço MAC e não pareará com nenhum outro que apareça, a não ser que se aperte o botão, que apagará o MAC gravado (você pensou que o botão servia para parear, né? Eu também!).

Funcionamento do módulo slave

  • LED piscando: a porta não está “aberta” ainda. Simplesmente parear não adianta;
  • LED aceso: porta serial aberta

Uso no PC

Você pode usar tanto o master quanto o slave no PC, desde que use um adaptador USB-serial (TTL) ou algo do gênero. A vantagem de usar esses módulos no PC é que o computador nem precisa saber o que é BT, livrando você de se envolver com configurações do stack, pareamento, etc. Nada de mexer com Bluesoleil ou com o stack padrão do Windows. Só é preciso instalar o driver do adaptador que você escolheu, que vai criar uma porta serial que você vai usar.

Leia também: Notas sobre a comunicação com o Android

Módulo receptor RF de 315MHz

Este módulo pode ser usado em conjunto com um transmissor para comunicação entre arduinos. Porém meu “foco” é a sua capacidade de decodificar comandos emitidos por controles remotos comerciais operando na faixa dos 315MHz.

Atenção:  o receptor precisa de uma antena mas vem sem ela. Solde um pedaço de fio de aproximadamente 23.8cm (este é o comprimento “ótimo” para 315Mhz) no orifício que você vê no canto inferior esquerdo da foto. O fio pode ficar enrolado como uma espiral, para poupar espaço.

Instale a biblioteca RC-Switch.

Rode o sketch Examples->RCSwitch->ReceiveDemo_Simple

O pino DATA do receptor é conectado ao pino 2 do arduino.

Ao apertar os botões de um controle remoto compatível, algo assim deve aparecer na porta serial (eu apertei dois botões):

Received 1393741 / 24bit Protocol: 1
Received 1393777 / 24bit Protocol: 1

Testado com um controle remoto genérico baseado no bem conhecido chip codificador SC2262 (PT2262) e com vários outros baseados no mais sofisticado ev1527 (SC1527,RT1527, FP1527).

Notas sobre comunicação com Android via módulo bluetooth

Este texto se refere a esses módulos.

Do lado Arduino

Como um dispositivo Android, assim como um computador comum, se comporta como um Master, o módulo apropriado para ser usado no Arduino é um slave.

O módulo bluetooth é completamente “transparente”. Para o Arduino, é uma porta serial qualquer. Ele não precisa de programação específica.

No Arduino UNO ou Duemilanove, o módulo é conectado nos pinos D0 e D1, que são compartilhados com a porta USB. Por essa razão:

  • Desconecte o módulo BT do Arduino quando precisar fazer o upload de um sketch. A presença do módulo impede a comunicação pela porta USB.
  • É aconselhável alimentar o Arduino com fonte externa e desconectar a USB quando estiver se comunicando por BT, para evitar que a conexão serial criada via USB interfira com a comunicação via BT.

Você pode rodar no Arduino qualquer sketch que transmita pela porta serial. De preferência continuamente.

Por exemplo: Exemplos-> 4.Communication -> ASCII Table. Esse exemplo só transmite durante o setup, então basta apertar o RESET para transmitir. Se quiser transmitir continuamente, mova a transmissão para o loop.

Do lado Android
As seguintes apps funcionam:

Se ao rodar o Bluetooth SPP a resposta for “Bluetooth serial port connection fail”, tente com outro telefone Android. Nos meus testes funcionou com o Motorola Quench, mas no Hero H200 só o Amarino aparentemente funciona.

Lembre-se:
O LED vermelho no módulo BT só pára de piscar, ficando aceso, quando a conexão serial está aberta. É o mesmo que dizer que se o LED estiver aceso, a porta está em uso. E no Android, assim como no Windows, dois programas não podem acessar uma mesma porta serial ao mesmo tempo.

Módulo de comunicação sem fio NRF24L01+

Também chamado de NRF24L01P. Esse módulo é usado em pares, mas pode ser vendido por unidade.

  • Worldwide 2.4GHz ISM band operation
  • 250kbps, 1Mbps and 2Mbps on air data
  • Ultra low power operation
  • 11.3mA TX at 0dBm output power
  • 13.5mA RX at 2Mbps air data rate
  • 900nA in power down
  • 26µA in standby-I
  • On chip voltage regulator
  • 1.9 to 3.6V supply range
  • Enhanced ShockBurst™
  • Automatic packet handling
  • Auto packet transaction handling
  • 6 data pipe MultiCeiver™
  • Drop-in compatibility with nRF24L01
  • On-air compatible in 250kbps and 1Mbps with nRF2401A, nRF2402, nRF24E1 and nRF24E2
  • Low cost BOM
  • ±60ppm 16MHz crystal
  • 5V tolerant inputs
  • Compact 20-pin 4x4mm QFN package

Note que esse é a versão “plus” do NRF24L01. Note também que o pinout é muito diferente. Para começar, o módulo NRF24L01 tem 10 pinos, enquanto o NRF24L01+ tem apenas 8.
Todos os meus módulos são testados com este demo (versão software SPI) ou com este (versão hardware SPI). Antes de testar com outros, teste com eles. Notar que as duas versões tem uma ligeira diferença na ligação (pinos D10 e D13 são trocados), mas elas são equivalentes. O arduino configurado com uma versão TX se comunica com um arduino configurado com qualquer das versões RX. Não é preciso instalar bibliotecas para rodar os demos.
Os exemplos da biblioteca RF24 parecem ser muito superiores, mas não consegui colocar para funcionar.