SOBRE

LightBlog
Responsive Ads Here

domingo, 25 de maio de 2014

Projeto automação Android e Arduino via Bluetooth


A principal intenção deste projeto é fazer a comunicação bluetooth entre um tablet Galaxy S e um Arduino uno, enviando comandos para ligar as luzes, acionar o alarme, desligar a chave geral da casa e abrir o portão. No vídeo abaixo é possível ver o sistema funcionando.



Abaixo pode ser visualizado o código fonte do Arduino, note que nesta aplicação o Arduino só recebe dados, não envia nenhum para o tablet.

 #include <Servo.h>  
 // Portas de comunicação  
 #define SERVO   A8  
 #define BANHEIRO 14  
 #define COZINHA  15  
 #define SALA   16  
 #define QUARTO  17  
 #define GARAGEM  7  
 #define ALARME  A7  
 #define SIRENE  3  
 #define ON    1  
 #define OFF    0  
 // Notas do alarme  
 #define NOTA_RE  294  
 #define NOTA_FA  349  
 // Flags de controle  
 int FLAGCozinha  = LOW;  
 int FLAGBanheiro  = LOW;  
 int FLAGSala    = LOW;  
 int FLAGQuarto   = LOW;  
 int FLAGGaragem  = LOW;  
 int FLAGPortao   = 0;  
 int FLAGAlarme   = 0;  
 int FLAGChaveGeral = ON;  
 char cmd     = ' ';  
 Servo servo;  
 void cmdPortao()  
 {  
  int pos;  
  if (!FLAGPortao) {  
   FLAGPortao = 1;  
   for(pos = 0; pos < 90; pos += 1) {  
    servo.write(pos);  
    delay(15);  
   }  
  }  
  else {  
   FLAGPortao = 0;  
   for(pos = 90; pos>=0; pos-=1) {  
    servo.write(pos);  
    delay(15);  
   }  
  }  
 }  
 void luzBanheiro()  
 {  
  if (!FLAGBanheiro) {  
   FLAGBanheiro = HIGH;  
   digitalWrite(BANHEIRO, FLAGBanheiro);  
  }  
  else {  
   FLAGBanheiro = LOW;  
   digitalWrite(BANHEIRO, FLAGBanheiro);  
  }  
 }  
 void luzCozinha()  
 {  
  if (!FLAGCozinha) {  
   FLAGCozinha = HIGH;  
   digitalWrite(COZINHA, FLAGCozinha);  
  }  
  else {  
   FLAGCozinha = LOW;  
   digitalWrite(COZINHA, FLAGCozinha);  
  }  
 }  
 void luzSala()  
 {  
  if (!FLAGSala) {  
   FLAGSala = HIGH;  
   digitalWrite(SALA, FLAGSala);  
  }  
  else {  
   FLAGSala = LOW;  
   digitalWrite(SALA, FLAGSala);  
  }  
 }  
 void luzGaragem()  
 {  
  if (!FLAGGaragem) {  
   FLAGGaragem = HIGH;  
   digitalWrite(GARAGEM, FLAGGaragem);  
  }  
  else {  
   FLAGGaragem = LOW;  
   digitalWrite(GARAGEM, FLAGGaragem);  
  }  
 }  
 void luzQuarto()  
 {  
  if (!FLAGQuarto) {  
   FLAGQuarto = HIGH;  
   digitalWrite(QUARTO, FLAGQuarto);  
  }  
  else {  
   FLAGQuarto = LOW;  
   digitalWrite(QUARTO, FLAGQuarto);  
  }  
 }  
 void cmdAlarme()  
 {  
  if (!FLAGAlarme) {  
   FLAGAlarme = HIGH;  
  }  
  else {  
   FLAGAlarme = LOW;  
   noTone(SIRENE);  
  }  
 }  
 void leSensor()  
 {  
  int valor = analogRead(ALARME);  
  if (valor < 950) {  
   tone(SIRENE, NOTA_RE);  
   delay(500);  
   tone(SIRENE, NOTA_FA);  
   delay(500);  
   tone(SIRENE, NOTA_RE);  
   delay(500);  
  }  
 }  
 void chaveGeralOFF()  
 {  
  FLAGBanheiro = LOW;  
  digitalWrite(BANHEIRO, FLAGBanheiro);  
  FLAGCozinha = LOW;  
  digitalWrite(COZINHA, FLAGCozinha);  
  FLAGQuarto = LOW;  
  digitalWrite(QUARTO, FLAGQuarto);  
  FLAGGaragem = LOW;  
  digitalWrite(GARAGEM, FLAGGaragem);  
  FLAGSala = LOW;  
  digitalWrite(SALA, FLAGSala);  
 }  
 void setup()  
 {  
  // Servo motor  
  servo.attach(SERVO);  
  Serial.begin(9600);  
  // Leds  
  pinMode(BANHEIRO, OUTPUT);  
  pinMode(SERVO, OUTPUT);  
  pinMode(COZINHA, OUTPUT);  
  pinMode(SALA, OUTPUT);  
  pinMode(QUARTO, OUTPUT);  
  pinMode(GARAGEM, OUTPUT);  
  pinMode(ALARME, INPUT);  
  pinMode(SIRENE, OUTPUT);  
 }  
 void loop()  
 {  
  if (FLAGAlarme) {  
   leSensor();  
  }  
  if (Serial.available()) {  
   cmd = Serial.read();  
   if (FLAGChaveGeral) {  
    switch (cmd) {  
     case 'P': ;// Abre e fecha portao  
     case 'p': cmdPortao();  
          break;  
     case 'C': ;// Acende e apaga luz da cozinha  
     case 'c': luzCozinha();  
          break;  
     case 'Q': ;// Acende e apaga luz do quarto  
     case 'q': luzQuarto();  
          break;  
     case 'G': ;// Acende e apaga luz da garagem  
     case 'g': luzGaragem();  
          break;  
     case 'S': ;// Acende e apaga luz da sala  
     case 's': luzSala();  
          break;  
     case 'B': ;// Acende e apaga luz da sala  
     case 'b': luzBanheiro();  
          break;  
     case 'A': ;// Ativa e dasativa o alarme  
     case 'a': cmdAlarme();  
          break;  
     case 'O': ;  
     case 'o': FLAGChaveGeral = OFF;  
          chaveGeralOFF();  
          break;  
    }  
   }  
   else if (cmd == 'O') {  
    FLAGChaveGeral = ON;  
   }  
  }  
 }