Tradutor

sexta-feira, 6 de setembro de 2013

Comunicação por entrada de áudio com Iphone ou Android

Pessoal,
Segue mais um interessante dispositivo que pode ser utilizado em projetos com o Arduino. Com esta placa podemos comunicar o Arduino com smartphones (Android, Iphone, HTC) tornando ainda mais vastas as possibilidades de ligação entre esses dois aparelhos.
Modem para utilizar a conexão de áudio entre um smartphone (Iphone e Android) e o Arduino.


Existem várias formas de fazer o Arduino se comunicar com seu Smartphone Android ou seu Iphone, como bluetooth, wifi, outros. Porem uma forma muito mais simples de fazer isso é através da entrada de áudio.

Telefone de diferentes empresas possuem pinagens de áudio diferentes como por exemplo o Samsung Galaxy e o Iphone, esta placa possui um switch para se tornar compatível com diferentes modelos como Samsung, Apple, HTC.  



Este modem serial permite que seja feita a interface entre a placa Arduino e os telefone Android e Iphone pela entrada de áudio, possibilitando a integração de seu smartphone com futuros projetos. Para isso são necessárias bibliotecas do Arduino e um software no lado do telefone.

Devido ao software utilizar um conexão de áudio para comunicação, alguns dados corrompidos podem aparecer de tempos em tempos, é recomendado que leve este fato em consideração durante a codificação de seu software, verifique como evitar isso na biblioteca do Arduino e no exemplo descrito mais abaixo.

O Arduino Softmodem pode ser utilizado em vários projetos, conforme será mostrado logo abaixo.


Como funciona:
Basicamente, o controle remoto funciona da seguinte forma, o acionamento de um botão irá dispara um gatilho e o microcontrolador na placa irá codificar o comando em formato binário, em seguida controlar o LED para que pisque em uma determinada frequência. 


A estrutura será a mesma, se quisermos fazê-lo para smartphones, o aparelho deve ser capaz de codificar um comando e controlar o LED, como não há acesso direto a partir do telefone para o LED, precisaremos de um microcontrolador para ouvir a entrada do smartphone, e piscar o LED de acordo.


A fim de ser compatível com quase todos os smartphones, incluindo iPhone e Android, escolhemos a entrada de áudio como a interface entre o telefone e o microcontrolador, isto significa que será usada o sinal de áudio para representar o comando, que será decodificado pelo softmodem e lido pelo microcontrolador.
Para este exemplo utilizaremos os seguintes componenetes:

    Arduino Uno x 1 (como o microcontrolador)
    Soft modem x 1
    IR LED x 1
    Arduino breadboard shield x 1(somente para uma prototipação mais limpa)
    Fio para Headphone x 1


Configurando o Hardware:
A configuração do hardware é bem simples, conecte o softmodem aos pinos do Arduino e conecte o breadboard shield logo em cima, depois conecte o IR LED no pino 3 do Arduino UNO (PWM). Finalmente conecte o softmodem e o iphone através do cabo de audio.
Codificando o Arduino:
O Arduino UNO deverá cuidar para que o Led pisque quando acionado e também escutar aos comandos do softmodem. Quando lidamos com a entrada do softmodem, o código do comando enviado por ele pode ter o tamanho de vários bytes, assim devemos utilizar um buffer de entrada para receber o comando completo. Utilizaremos 3 bibliotecas em nosso código, Controle IR (IRremote), Softmodem e buffer (ByteBuffer).

Na configuração devemos inicializar o softmodem e o buffer.

void setup()
{
Serial.begin(9600);

// Initialize the buffer with a capacity for 4 bytes
buffer.init(4);

delay(1000);
modem.begin();
}

Na função de Loop o Arduino ficará escutando o softmodem. Emquanto o modem estiver livre, receberemos 2 Bytes do softmodem. Devemos checar se devemos limpar o buffer. Se não, colocaremos os 2 Bytes no buffer. É assim que recebemos o comando do modem, após areceber o comendo, simplesmente usamos a função IRsend para enviar o comando para o IR LED através do protocolo NEC.

void loop() {

while(modem.available()){
int c = modem.read();
if((buffer.getSize() == 4 || buffer.getSize() == 0) && c == 0xFF) {
buffer.clear();
} else {
buffer.put(c);
}
}

if(buffer.getSize() == 4) {
long cmd = buffer.getLong();

Serial.print("Sending cmd: ");
Serial.println(cmd, HEX);

irsend.sendNEC(cmd, 32); // NEC Protocol command
delay(100);
}
Há uma questão que encontramos quando nós rodamos o código. Ambos irRemote e biblioteca SoftModem estão usando timer2, por isso tivemos de descomentar a linha 61 na biblioteca IRremoteInt.h para resolver o conflito.


App IOS:
Esta demonstração é bem simples, temos dois botões na tela e cada botão representa um comando. Temos também uma info view onde é possível alterar os comandos para cada botão. Usaremos um gerados serial para codificar o comando de áudio, sinal este que será recebido pelo modem. 

- (void)buttonPressed:(UIButton*)button {

NSString* buttonKey = (button.tag == 1) ? @"first" : @"second";
NSString* hex = [[NSUserDefaults standardUserDefaults] stringForKey:buttonKey];
hex = [hex substringFromIndex:2];
NSData* hexData = [hex hexToBytes];
//NSLog(@"%@", hex);
//NSLog(@"%@", [hex hexToBytes]);

[APP_DELEGATE.generator writeByte:0xff];
[APP_DELEGATE.generator writeBytes:[hexData bytes] length:hexData.length];

Exemplos:
Seguem alguns exemplos que utilizam a porta de áudio para comunicação, como o leitor de cartão de crédito móvel.
 
Bibliotecas:

Nenhum comentário:

Postar um comentário