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;
}
}
}