Em certas aplicações, os sistemas baseados em microcontroladores têm de estar ligados à rede GSM, o que permitirá ao utilizador controlar o sistema enviando mensagens ou fazendo uma chamada. A vantagem de usar uma comunicação GSM com um sistema ou dispositivo é que o usuário pode controlar o sistema sem fio, independentemente da distância em comparação com qualquer outra comunicação sem fio, desde que tanto o usuário quanto o dispositivo estejam em uma área de cobertura celular. .
Os telefones celulares possuem módulos GSM integrados que podem ser utilizados pelo processador interno do telefone para fazer uma chamada, enviar ou receber mensagens ou até mesmo conectar-se à rede GPRS. Quando se trata de um sistema baseado em microcontrolador, um módulo GSM separado é usado em vez de um telefone celular propriamente dito. Existem módulos GSM disponíveis que podem fazer comunicação serial com sistemas baseados em microcontroladores. A comunicação é feita através do envio ou recebimento de comandos AT com o módulo GSM. Este projeto específico demonstra como fazer interface com um módulo GSM e ler e exibir SMS no LCD 16*2.
Qualquer placa baseada em microcontrolador AVR que siga o esquema padrão do Arduino e seja atualizada com o bootloader Arduino pode ser chamada de placa Arduino. O Arduino é conhecido como hardware de código aberto e o Arduino IDE também é de código aberto e qualquer pessoa pode contribuir com suas bibliotecas para o Arduino. Todas as placas Arduino devem ser compatíveis com o Arduino IDE, que pode ser usado para programar as placas Arduino.
O funcionamento deste projeto é explicado com base na placa Arduino pro-mini e no IDE versão 1.0.3 para windows. A vantagem desta placa é que ela vem em tamanho muito pequeno; qualquer tipo de conector pode ser soldado em sua periferia de acordo com nossas necessidades. É muito compatível com protoboard e ocupa muito menos espaço de uma protoboard típica.
A imagem da placa Arduino pro-mini e do Arduino IDE é mostrada abaixo:
Fig. 2: Placa Arduino Pro-Mini típica
Fig. 3: Janela do software Arduino IDE
Como a placa Arduino pro-mini não possui circuito para interface com a porta serial ou a porta USB do PC, uma placa conversora USB para TTL externa é necessária para conectá-la ao PC. Este hardware auxilia na programação da placa Arduino e também auxilia na comunicação serial com a porta USB do PC.
4: Placa conversora USB para TTL externa para programação Arduino e comunicação serial
Presume-se que o leitor tenha passado pelo projeto como começar com o Arduino e experimentei todas as coisas discutidas lá. O módulo GSM utilizado neste projeto é um módulo baseado em SIM900 que pode se comunicar com outros dispositivos usando a porta de comunicação serial RS232. Funciona em 9V fonte de alimentação e a imagem da mesma é fornecida abaixo:
Fig. 5: Módulo GSM SIM900 conectado ao pino Tx do módulo da placa Arduino através de max232
O módulo GSM é conectado à placa Arduino usando a porta de comunicação serial. Como o módulo possui porta RS232 e o Arduino pro-mini pode se comunicar usando níveis lógicos TTL, um IC max232 é usado para fazer uma conversão bidirecional entre os níveis lógicos RS232 e TTL. O pino Tx da placa Arduino é conectado ao pino Rx do módulo GSM através do max232 e o pino Rx do Arduino é conectado ao pino Tx do módulo GSM usando o próprio max232.
O código escrito no Arduino é capaz de se comunicar com o módulo GSM usando Comandos AT. O Comandos AT são enviados ou recebidos do módulo usando as funções de comunicação serial fornecidas pela biblioteca Arduino. As funções como Serial.begin que ajuda a inicializar a porta serial com uma determinada taxa de transmissão, Serial.write para enviar dados para a porta serial, funções Serial.available e Serial.read para ler dados da porta serial são utilizados neste projeto e já foram discutidos em projetos anteriores em como fazer comunicação serial com o Arduino, como enviar e receber dados seriais usando arduino e como fazer depuração serial com o Arduino.
Os módulos GSM respondem “OK” quando recebem o comando “AT” e é a melhor forma de verificar a comunicação entre o módulo e o microcontrolador.
+CMGF – Este comando é usado para definir o modo SMS. O modo texto ou PDU pode ser selecionado atribuindo 1 ou 0 no comando.
Sintaxe: AT+CMGF=
0: para modo PDU
1: para modo texto
Por exemplo,
AT+CMGF=1
+CNMI- Este comando AT é usado para especificar como as mensagens SMS recém-chegadas devem ser tratadas. Ele pode ser usado para configurar o modem GSM/GPRS ou telefone celular para rotear mensagens SMS recebidas diretamente para a porta serial ou para salvá-las no armazenamento de mensagens e depois notificar o dispositivo host enviando uma string através da porta serial.
SINTAXE: AT+CNMI=
Por exemplo, para rotear a sequência de mensagens recebidas para a porta serial do dispositivo, o código escrito para este projeto usa o seguinte comando;
AT+CNMI=2,2,0,0,0
Assim que um SMS é recebido, o módulo GSM envia uma longa string para a placa Arduino que consiste em muitos detalhes sobre a mensagem e também inclui o texto original. O código é escrito de forma que irá esperar até que algum caractere seja recebido pela porta serial e assim que começar a receber irá verificar a ocorrência do quarto ' ” ' e escrever o restante dos caracteres diretamente no LCD 16 * 2 . Os caracteres após o quarto ' “ ' na string recebida serão o texto original e o restante dos caracteres são ignorados no código usando as linhas a seguir;
fazer
{
enquanto ( !Serial.available );
} while ( '”' != Serial.read );
fazer
{
enquanto ( !Serial.available );
} while ( '”' != Serial.read );
fazer
{
enquanto ( !Serial.available );
} while ( '”' != Serial.read );
fazer
{
enquanto ( !Serial.available );
} while ( '”' != Serial.read );
O texto SMS é gravado no LCD 16*2 usando as funções da biblioteca
Pode-se verificar e fazer upload do código que pode enviar os mesmos comandos para a placa Arduino conforme explicado no projeto como começar com o Arduino. Certifique-se de que o módulo GSM foi ligado pelo menos 2 minutos antes da placa Arduino começar a enviar os comandos para que o GSM possa estabelecer comunicação com a rede celular correspondente ao cartão SIM nele inserido.
Código fonte do projeto
### /*============================ EG LABS ===================================// Demonstration on how to receive an SMS using GSM module The circuit: LCD: * LCD RS pin to digital pin 12 * LCD Enable pin to digital pin 11 * LCD D4 pin to digital pin 7 * LCD D5 pin to digital pin 6 * LCD D6 pin to digital pin 5 * LCD D7 pin to digital pin 4 * LCD R/W pin to ground * 10K resistor: * ends to +5V and ground * wiper to LCD pin 3 * LED anode attached to digital output 9 * LED cathode attached to ground through a 1K resistor GSM: RX PIN OF GSM TO TX0 PIN OF ARDUINO SHORT THE GROUND PINS OF ARDUINO AND XBEE ============================== EG LABS ===================================*/ #include// initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 7, 6, 5, 4); // give the pin a name: int led = 9; // incoming serial byte int inByte = 0; void setup { pinMode(9, OUTPUT); lcd.begin(16, 2); lcd.print("ENGINEERS GARAGE"); lcd.setCursor(0, 1); lcd.print(" GSM SMS "); delay(1000); // initialize the led pin as an output. pinMode(led, OUTPUT); // start serial port at 9600 bps Serial.begin(9600); // wait for a while till the serial port is ready delay(100); // send the initial data once // Serial.print("AT+CMGF=1nr"); delay(500); Serial.print("AT+CNMI=2,2,0,0,0nr"); delay(2000); digitalWrite(led, HIGH); } void loop { do { while ( !Serial.available ); } while ( '"' != Serial.read ); do { while ( !Serial.available ); } while ( '"' != Serial.read ); do { while ( !Serial.available ); } while ( '"' != Serial.read ); do { while ( !Serial.available ); } while ( '"' != Serial.read ); while ( !Serial.available ); inByte = Serial.read ; while ( !Serial.available ); inByte = Serial.read ; lcd.clear ; while(1) { while ( !Serial.available ); inByte = Serial.read ; if ( inByte == 'r' ) break; else; lcd.write ( inByte ); } } ###
Diagramas de circuito
Diagrama de circuito-recebimento de SMS usando módulo GSM-Arduino | ![]() |
Componentes do Projeto
- Arduino ProMini
- Capacitor
- LCD
- LIDERADO
- MÁX232
- Potenciômetro
- Resistor