LusoRobótica - Robótica em Português
Sistemas específicos => Arduino / AVR => Tópico iniciado por: Ricardo em 01 de Setembro de 2011, 20:12
-
Boas,
Tenho estado particularmente interessado na interacção arduino-android. Vejo como um campo com futuro a utilização dos tablets (ou smartphones) como interface para os microcontroladores. Já andei a ver umas coisas sobre a placa ioio mas para já parece-me mais prático e funcional a ligação entre o android e o arduino via bluetooth.
Há tempos comprei um tablet ZTE V9 (originalmente associado à vodafone) por 120 euros, e apesar de ser um equipamento de entrada de gama, tem tudo o que existe neste tipo de equipamentos: GPS, WIFI, 3G, Bluetooth, acelerómetro, e embora traga instalada a versão android 2.1, é fácil o seu upgrade para a versão 2.2, que já permite mais algumas funcionalidades.
A programação no android é feita em Java e utilizando o editor Eclipse, já consegui programar algumas pequenas aplicações que usam o bluetooth para comunicar via serial com outros dispositivos.
O segundo passo foi arranjar um módulo bluetooth baratinho que permitisse a ligação ZTE-arduino, e pelo meio resolvi juntar uma ideia que já andava a pensar há algum tempo, que consiste no controlo de um rgb led strip.
Juntando estas ideias todas, e sem grandes embelezamentos, cheguei a este resultado provisório que me deixa bastante optimista quanto a outras ideias que gostaria de desenvolver.
O esquema actual é este:
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fwww.iznogud.com%2Fimagens%2Fbt_led.png&hash=d963377dda6db8dc1f13e28ddbc111b71e3ad40c)
O código arduino é muito simples:
#define START_COLOR_CHAR '^'
#define END_COLOR_CHAR 'c'
#define COLOR_SIZE 16
#define REDPIN 5
#define GREENPIN 6
#define BLUEPIN 3
char serialMessage[COLOR_SIZE];
char *msg="R000G000B000";
unsigned int count;
unsigned int readChar;
boolean readingSerial;
void setup() {
readingSerial = false;
Serial.begin(9600);
pinMode(REDPIN, OUTPUT);
pinMode(GREENPIN, OUTPUT);
pinMode(BLUEPIN, OUTPUT);
analogWrite(REDPIN, 255);
analogWrite(GREENPIN, 255);
analogWrite(BLUEPIN, 255);
}
void loop() {
/*if (Serial.available() > 0 && !readingSerial) {
Serial.println((char)Serial.read());
}*/
serialReadColor();
delay(100);
}
void serialReadColor() {
readingSerial = true;
count = 0;
iniReading:
if (Serial.available() > 0) {
readChar = Serial.read();
if (readChar == END_COLOR_CHAR || count == COLOR_SIZE) {
goto endReading;
} else {
serialMessage[count++] = readChar;
goto iniReading;
}
}
goto iniReading;
endReading:
readingSerial = false;
serialMessage[count] = '\0';
// lcd.clear();
if(count==12)
{
Serial.println(serialMessage);
cor();
}
else
{
Serial.println(count);
}
}
void cor()
{
msg = serialMessage;
char R[4]="000";
char G[4]="000";
char B[4]="000";
int r, g, b;
//strncpy(de,msg+0,1);
strncpy(R,msg+1,3);
//strncpy(dd,msg+4,1);
strncpy(G,msg+5,3);
strncpy(B,msg+9,3);
Serial.print("R:");
Serial.print(R);
Serial.print(";G:");
Serial.print(R);
Serial.print(";G:");
Serial.println(B);
r=atoi(R);
g=atoi(G);
b=atoi(B);
analogWrite(REDPIN, r);
analogWrite(GREENPIN, g);
analogWrite(BLUEPIN, b);
}
Já o código Java não é fácil de colocar aqui… mas mais tarde deixo o projecto todo (quando estiver mais limpinho…)
O resultado é isto:
P1120454 (http://www.youtube.com/watch?v=56ug5RAHHC0#)
P1120455 (http://www.youtube.com/watch?v=OwsOmeql_jM#)
P1120456 (http://www.youtube.com/watch?v=Hc7M-8-tLeA#)
Sugestões?
PS: Em principio este projecto irá ligar-se futuramente ao "exaustorino"(http://lusorobotica.com/index.php?topic=3454.msg39576#msg39576 (http://lusorobotica.com/index.php?topic=3454.msg39576#msg39576)) fazendo com que a minha cozinha assuma cada vez mais o papel de divisão mais inteligente da casa.
;D
-
Gostaria era de saber como foi feita a programação para o android.
-
Gostaria era de saber como foi feita a programação para o android.
Como disse, só não ponho aqui todo o projecto da parte do android porque também ainda estou a dar os primeiros passos no java, e o projecto em causa é uma espécie de baú com uma série de outras experiências (GPS, SD card, Camera, SQL, etc...). Assim que limpar aquilo ou criar um projecto só para este assunto, ponho-o aqui.
Ainda assim, posso garantir que para este projecto é tudo surpreendentemente simples.
-
Muito interessante ;)
-
Bom projecto ... tambem estou a iniciar-me num deste tipo, e tal como tu ainda ando a atinar com o java, tenho feito app para o android, agora estou a fazer uma calculadora.
A troca de duvidas ou sugestões e sempre bem vinda. Desde já fica aqui algo para dares umas vistas de olhos poder ser que ajude : http://code.google.com/p/cellbots/source/browse/#svn%2Ftrunk%2Fandroid%2Fjava%2Fcellbots%2Fsrc%2Fcom%2Fcellbots%2Fdirectcontrol (http://code.google.com/p/cellbots/source/browse/#svn%2Ftrunk%2Fandroid%2Fjava%2Fcellbots%2Fsrc%2Fcom%2Fcellbots%2Fdirectcontrol)
Bom trabalho e Obrigado ;)