Postagem em destaque

Controle PID de Potência em Corrente Alternada - Arduino e TRIAC - Parte I

Este post é o primeiro de uma série de seis que escrevi tratando de controle de potência e PID (controle proporcional, integral e derivativo...

domingo, 19 de outubro de 2014

Carrinho i-racer II

Como o carrinho é comandado pelo bluetooth, o jeito mais óbvio de hackeá-lo é substituir o software de controle do carrinho, que roda no Android, por algum outro. Para isso, é necessário descobrir os comandos que o software envia ao carrinho, de maneira a podermos comandá-lo a partir de outros dispositivos.

Existe um documento que descreve esses comandos, mas para testar fiz um "pograminha" para rodar no Arduino e ler os comandos.

Taí o bicho:

#include <SoftwareSerial.h>

SoftwareSerial irace(10, 11); // RX, TX
int BluetoothData; 

void setup() 
{
  Serial.begin(9600);
  irace.begin(9600);
  Serial.println("Fim Setup");
}

int i=1;
void loop() 
{
   if (irace.available())
   {
      BluetoothData=irace.read();
      Serial.print(BluetoothData,HEX);
      Serial.print(',');
      if((i % 20) == 0)
        Serial.println();
      i++;
   }
}

Essa é a tela do software, com a definição do de cada botão de comando.



Em seguida foi só parear o bluetooth do Arduino com o do celular, pilotar o aplicativo e fazer as leituras. Eis alguns exemplos, prá gente entender a bagaça:

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,71,71,71,71,71,71,71,71,71,71,71,71,71,71,
71,71,71,71,71,71,71,71,71,71,71,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,31,31,31,31,31,
32,22,22,22,23,23,24,25,25,26,27,27,28,28,29,29,2A,2B,2B,2B,
2C,2C,2C,2C,2D,2D,2D,2D,2D,2D,2D,2D,2D,2E,2E,2E,2E,2E,2E,2E,
2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,
2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,
2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,
2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,
2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,2E,
2E,2E,2E,2E,2E,2F,2F,2F,2F,2F,2F,2F,2F,20,2F,3F,3F,3F,3F,3F,
3F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,
2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,
2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,
2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,
2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,2F,3F,3F,3F,3F,3F,3F,3F,3F,
3F,3F,3F,3F,3F,3F,3F,3F,3F,3F,3F,3F,3F,2F,2F,2F,2F,2F,2F,20,
2F,2F,2E,2C,2B,29,28,27,26,84,83,81,41,62,63,64,65,16,16,17,
17,17,18,18,19,19,1A,1B,1B,1B,1C,1C,1C,1C,1D,1D,1D,1E,1E,1F,
1F,10,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,
1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,
1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,
1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,
1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,
1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,1F,
1F,1F,1F,1F,1F,1F,1F,0,

Quando não pressionamos nada no controle, nenhum dado é enviado. Quando eu toco o centro da Virtual Control Bar ele manda o comando 0. Depois, eu vou variando as direções, o que vc pode perceber pelo primeiro dígito dos número hexa acima. Primeiro eu acionei o carrinho para trás (primeiro dígito 2), depois para a frente (dígito 1). O segundo dígito é a intensidade, que vc vê que vai variando de intensidade à medida que eu desloco o dedo, indo de 2 até F no caso do movimento para trás.

Então é isso, bastaria então fazer um programa que envie esses comandos ao carrinho para que ele possa se movimentar. Moleza, não?

Aqui uma imagem do circuito do Arduino: