NOVO CÓDIGO PARA O NOSSO KIT SMART HOME ARDUINO

Vídeo deste Kit no nosso canal do YouTube:

Para quem adora artigos com Arduino, certamente conhece o nosso Kit Smart Home Arduino! Já o apresentamos neste artigo, a até já criamos uma aplicação para smartphone para o mesmo! Contudo, de tudo o que fizemos, faltava algo que considerávamos ser essencial para este produto: um código onde fosse possível controlar todos os sensores/atuadores através da própria casa! E foi precisamente isso que fizemos e vamos, neste artigo, mostrar o código utilizado, bem como ensinar a navegar na interface!

 

Imagem Produto Comprar
  Kit Iniciante Educacional Smart Home Arduino

 

  • Código Arduino
/*Código para o Projeto: Voltímetro Testador de Pilhas
  - Material necessário:
    -> Kit Smart Home Arduino Electrofun
  *****************************************************NAVEGAÇÃO******************************************************
    -> Para navegar na interface, utilizamos os dois botões posicionados na frente do kit.
    -> O botão mais à esquerda permite a troca entre menus, com acesso à informação sobre os atuadores/sensores
    -> O botão mais à direita permite interagir nesses menus, como acionar ou desativar um atuador.
  *******************************************************************************************************************
  Para mais informações sobre o projeto:
  https://www.electrofun.pt/blog/novo-codigo-para-o-nosso-kit-smart-home-arduino
  Electrofun@2022 ---> www.electrofun.pt
*/

#include 
#include 

//Definição dos pinos
#define pinoSensorGas A0
#define pinoLDR A1
#define pinoSensorNivelAgua A2
#define pinoSensorPrecipitacao A3
#define pinoSensorPIR 2
#define pinoBuzzer 3
#define pinoBotao1 4
#define pinoLEDAmarelo 5
#define pinoVentoinhaIN1 6
#define pinoVentoinhaIN2 7
#define pinoBotao2 8
#define pinoMotorServoPorta 9
#define pinoMotorServoJanela 10
#define pinoRele 12
#define pinoLEDBranco 13

//Definir a velocidade da comunicação série para 9600
#define SerialBaud 9600

//Declaração de variáveis
bool gasDetetado, luzDetetada, chuvaDetetada, movimentoDetetado;

bool estadoJanela = false, estadoLEDAmarelo, estadoLEDBranco, estadoRele, estadoVentoinha_IN1, estadoVentoinha_IN2;

int leituraPinoSensorGas, leituraPinoLDR, leituraPinoSensorPrecipitacao, leituraPinoSensorNivelAgua;
bool leituraPinoSensorPIR, leituraPinoBotao1, leituraPinoBotao2;

int debouce = 200;
long stTime = 0;

//Novos caracteres para o LCD
byte chama[] = {
  B00100,
  B01110,
  B01110,
  B11111,
  B11111,
  B11111,
  B11111,
  B01110
};

byte chuva[] = {
  B10001,
  B00100,
  B10001,
  B00100,
  B10001,
  B00100,
  B10001,
  B00100
};

byte movimento[] = {
  B11111,
  B00001,
  B00001,
  B00010,
  B00100,
  B01000,
  B10000,
  B11111
};

//Declaração de objetos
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo servo_porta;
Servo servo_janela;

void definirPinos() {
  pinMode(pinoSensorGas, INPUT);
  pinMode(pinoLDR, INPUT);
  pinMode(pinoSensorNivelAgua, INPUT);
  pinMode(pinoSensorPrecipitacao, INPUT);
  pinMode(pinoSensorPIR, INPUT);
  pinMode(pinoBuzzer, OUTPUT);
  pinMode(pinoBotao1, INPUT);
  pinMode(pinoLEDAmarelo, OUTPUT);
  pinMode(pinoVentoinhaIN1, OUTPUT);
  pinMode(pinoVentoinhaIN2, OUTPUT);
  pinMode(pinoBotao2, INPUT);
  pinMode(pinoMotorServoPorta, OUTPUT);
  pinMode(pinoMotorServoJanela, OUTPUT);
  pinMode(pinoRele, OUTPUT);
  pinMode(pinoLEDBranco, OUTPUT);
}

void iniciarLCD() {
  lcd.init();
  lcd.backlight();
  lcd.createChar(0, chama);
  lcd.createChar(1, chuva);
  lcd.createChar(2, movimento);
  lcd.setCursor(0, 0);
  lcd.print("KIT SMART HOUSE");
  lcd.setCursor(3, 1);
  lcd.print("ELECTROFUN");
  delay(3000);
  lcd.clear();
}

void lerTratarSensores() {
  if (stTime == 0 || millis() - stTime > 3000) {
    leituraPinoSensorGas = analogRead(pinoSensorGas);
    leituraPinoLDR = analogRead(pinoLDR);
    leituraPinoSensorPrecipitacao = analogRead(pinoSensorPrecipitacao);
    leituraPinoSensorNivelAgua = analogRead(pinoSensorNivelAgua);
    leituraPinoSensorPIR = digitalRead(pinoSensorPIR);
    if (leituraPinoSensorGas >= 200) {
      gasDetetado = true;
    } else {
      gasDetetado = false;
    }
    if (leituraPinoLDR <= 700) { luzDetetada = true; } else { luzDetetada = false; } if (leituraPinoSensorPrecipitacao >= 100) {
      chuvaDetetada = true;
    } else {
      chuvaDetetada = false;
    }
    leituraPinoSensorNivelAgua = map(leituraPinoSensorNivelAgua, 0, 1023, 0, 100);
    if (leituraPinoSensorPIR == 1) {
      movimentoDetetado = true;
    } else {
      movimentoDetetado = false;
    }
    /*Serial.print("Gás: ");
      Serial.println(gasDetetado);
      Serial.print("Luz: ");
      Serial.println(luzDetetada);
      Serial.print("Chuva: ");
      Serial.println(chuvaDetetada);
      Serial.print("Nível Água: ");
      Serial.println(leituraPinoSensorNivelAgua);
      Serial.print("Movimento: ");
      Serial.println(movimentoDetetado);
      Serial.println();*/
    stTime = millis();
  }
  if (gasDetetado) {
    tone(pinoBuzzer, 440);
    delay(125);
    delay(100);
    noTone(pinoBuzzer);
    delay(100);
    tone(pinoBuzzer, 440);
    delay(125);
    delay(100);
    noTone(pinoBuzzer);
    delay(300);
  }
}

void atualizarInfoLCD() {
  lcd.setCursor(0, 0);
  lcd.print("ESTADO CASA");
  if (gasDetetado == 0 && chuvaDetetada == 0 && movimentoDetetado == 0) {
    lcd.setCursor(0, 1);
    lcd.print("       OK       ");
  } else if (gasDetetado == 0 && chuvaDetetada == 0 && movimentoDetetado == 1) {
    lcd.setCursor(0, 1);
    lcd.print(" ");
    lcd.setCursor(7, 1);
    lcd.print(" ");
    lcd.setCursor(8, 1);
    lcd.print(" ");
    lcd.setCursor(14, 1);
    lcd.write(2);
    lcd.setCursor(15, 1);
    lcd.write(2);
  } else if (gasDetetado == 0 && chuvaDetetada == 1 && movimentoDetetado == 0) {
    lcd.setCursor(0, 1);
    lcd.print(" ");
    lcd.setCursor(7, 1);
    lcd.write(1);
    lcd.setCursor(8, 1);
    lcd.print(" ");
    lcd.setCursor(14, 1);
    lcd.print(" ");
    lcd.setCursor(15, 1);
    lcd.print(" ");
  } else if (gasDetetado == 0 && chuvaDetetada == 1 && movimentoDetetado == 1) {
    lcd.setCursor(0, 1);
    lcd.print(" ");
    lcd.setCursor(7, 1);
    lcd.write(1);
    lcd.setCursor(8, 1);
    lcd.print(" ");
    lcd.setCursor(14, 1);
    lcd.write(2);
    lcd.setCursor(15, 1);
    lcd.write(2);
  } else if (gasDetetado == 1 && chuvaDetetada == 0 && movimentoDetetado == 0) {
    lcd.setCursor(0, 1);
    lcd.write(0);
    lcd.setCursor(7, 1);
    lcd.print(" ");
    lcd.setCursor(8, 1);
    lcd.print(" ");
    lcd.setCursor(14, 1);
    lcd.print(" ");
    lcd.setCursor(15, 1);
    lcd.print(" ");
  } else if (gasDetetado == 1 && chuvaDetetada == 0 && movimentoDetetado == 1) {
    lcd.setCursor(0, 1);
    lcd.write(0);
    lcd.setCursor(7, 1);
    lcd.print(" ");
    lcd.setCursor(8, 1);
    lcd.print(" ");
    lcd.setCursor(14, 1);
    lcd.write(2);
    lcd.setCursor(15, 1);
    lcd.write(2);
  } else if (gasDetetado == 1 && chuvaDetetada == 1 && movimentoDetetado == 0) {
    lcd.setCursor(0, 1);
    lcd.write(0);
    lcd.setCursor(7, 1);
    lcd.write(1);
    lcd.setCursor(8, 1);
    lcd.print(" ");
    lcd.setCursor(14, 1);
    lcd.print(" ");
    lcd.setCursor(15, 1);
    lcd.print(" ");
  } else if (gasDetetado == 1 && chuvaDetetada == 1 && movimentoDetetado == 1) {
    lcd.setCursor(0, 1);
    lcd.write(0);
    lcd.setCursor(7, 1);
    lcd.write(1);
    lcd.setCursor(8, 1);
    lcd.print(" ");
    lcd.setCursor(14, 1);
    lcd.write(2);
    lcd.setCursor(15, 1);
    lcd.write(2);
  }
}

void menu1LCD() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("PORTA");
  do {
    leituraPinoBotao1 = digitalRead(pinoBotao1);
    leituraPinoBotao2 = digitalRead(pinoBotao2);
  } while (leituraPinoBotao1 == 1 && leituraPinoBotao2 == 1);
  if (leituraPinoBotao1 == 0) {
    delay(debouce);
    menu2LCD();
  }
  else if (leituraPinoBotao2 == 0) {
    delay(debouce);
    servo_porta.write(180);
    delay(2000);
    servo_porta.write(0);
  }
}

void menu2LCD() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("JANELA");
  lcd.setCursor(0, 1);
  if (estadoJanela) {
    lcd.print("ABERTA ");
  } else {
    lcd.print("FECHADA");
  }
  do {
    leituraPinoBotao1 = digitalRead(pinoBotao1);
    leituraPinoBotao2 = digitalRead(pinoBotao2);
  } while (leituraPinoBotao1 == 1 && leituraPinoBotao2 == 1);
  if (leituraPinoBotao1 == 0) {
    delay(debouce);
    menu3LCD();
  }
  else if (leituraPinoBotao2 == 0) {
    delay(debouce);
    estadoJanela = !estadoJanela;
    if (estadoJanela) {
      servo_janela.write(130);
    } else {
      servo_janela.write(0);
    }
    menu2LCD();
  }
}

void menu3LCD() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("LED AMARELO");
  estadoLEDAmarelo = digitalRead(pinoLEDAmarelo);
  if (estadoLEDAmarelo) {
    lcd.setCursor(0, 1);
    lcd.print("LIGADO   ");
  } else {
    lcd.setCursor(0, 1);
    lcd.print("DESLIGADO");
  }
  do {
    leituraPinoBotao1 = digitalRead(pinoBotao1);
    leituraPinoBotao2 = digitalRead(pinoBotao2);
  } while (leituraPinoBotao1 == 1 && leituraPinoBotao2 == 1);
  if (leituraPinoBotao1 == 0) {
    delay(debouce);
    menu4LCD();
  }
  else if (leituraPinoBotao2 == 0) {
    delay(debouce);
    estadoLEDAmarelo = !estadoLEDAmarelo;
    if (estadoLEDAmarelo) {
      digitalWrite(pinoLEDAmarelo, HIGH);
    } else {
      digitalWrite(pinoLEDAmarelo, LOW);
    }
    menu3LCD();
  }
}

void menu4LCD() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("LED BRANCO");
  estadoLEDBranco = digitalRead(pinoLEDBranco);
  if (estadoLEDBranco) {
    lcd.setCursor(0, 1);
    lcd.print("LIGADO   ");
  } else {
    lcd.setCursor(0, 1);
    lcd.print("DESLIGADO");
  }
  do {
    leituraPinoBotao1 = digitalRead(pinoBotao1);
    leituraPinoBotao2 = digitalRead(pinoBotao2);
  } while (leituraPinoBotao1 == 1 && leituraPinoBotao2 == 1);
  if (leituraPinoBotao1 == 0) {
    delay(debouce);
    menu5LCD();
  }
  else if (leituraPinoBotao2 == 0) {
    delay(debouce);
    estadoLEDBranco = !estadoLEDBranco;
    if (estadoLEDBranco) {
      digitalWrite(pinoLEDBranco, HIGH);
    } else {
      digitalWrite(pinoLEDBranco, LOW);
    }
    menu4LCD();
  }
}

void menu5LCD() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("RELE");
  estadoRele = digitalRead(pinoRele);
  if (estadoRele) {
    lcd.setCursor(0, 1);
    lcd.print("LIGADO   ");
  } else {
    lcd.setCursor(0, 1);
    lcd.print("DESLIGADO");
  }
  do {
    leituraPinoBotao1 = digitalRead(pinoBotao1);
    leituraPinoBotao2 = digitalRead(pinoBotao2);
  } while (leituraPinoBotao1 == 1 && leituraPinoBotao2 == 1);
  if (leituraPinoBotao1 == 0) {
    delay(debouce);
    menu6LCD();
  }
  else if (leituraPinoBotao2 == 0) {
    delay(debouce);
    estadoRele = !estadoRele;
    if (estadoRele) {
      digitalWrite(pinoRele, HIGH);
    } else {
      digitalWrite(pinoRele, LOW);
    }
    menu5LCD();
  }
}

void menu6LCD() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("VENTOINHA");
  estadoVentoinha_IN1 = digitalRead(pinoVentoinhaIN1);
  estadoVentoinha_IN2 = digitalRead(pinoVentoinhaIN2);
  if (estadoVentoinha_IN1 || estadoVentoinha_IN1) {
    lcd.setCursor(0, 1);
    lcd.print("LIGADA   ");
  } else {
    lcd.setCursor(0, 1);
    lcd.print("DESLIGADA");
  }
  do {
    leituraPinoBotao1 = digitalRead(pinoBotao1);
    leituraPinoBotao2 = digitalRead(pinoBotao2);
  } while (leituraPinoBotao1 == 1 && leituraPinoBotao2 == 1);
  if (leituraPinoBotao1 == 0) {
    delay(debouce);
    menu7LCD();
  }
  else if (leituraPinoBotao2 == 0) {
    delay(debouce);
    estadoVentoinha_IN1 = !estadoVentoinha_IN1;
    if (estadoVentoinha_IN1) {
      digitalWrite(pinoVentoinhaIN1, HIGH);
      digitalWrite(pinoVentoinhaIN2, LOW);
    } else {
      digitalWrite(pinoVentoinhaIN1, LOW);
      digitalWrite(pinoVentoinhaIN2, LOW);
    }
    menu6LCD();
  }
}

void menu7LCD() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("LUMINOSIDADE");
  if (luzDetetada) {
    lcd.setCursor(0, 1);
    lcd.print("DIA  ");
  } else {
    lcd.setCursor(0, 1);
    lcd.print("NOITE");
  }
  do {
    leituraPinoBotao1 = digitalRead(pinoBotao1);
  } while (leituraPinoBotao1 == 1);
  if (leituraPinoBotao1 == 0) {
    delay(debouce);
    menu8LCD();
  }
}

void menu8LCD() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("FUGA GAS");
  if (gasDetetado) {
    lcd.setCursor(0, 1);
    lcd.print("DETETADA    ");
  } else {
    lcd.setCursor(0, 1);
    lcd.print("NAO DETETADA");
  }
  do {
    leituraPinoBotao1 = digitalRead(pinoBotao1);
  } while (leituraPinoBotao1 == 1);
  if (leituraPinoBotao1 == 0) {
    delay(debouce);
    menu9LCD();
  }
}

void menu9LCD() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("CHUVA");
  if (chuvaDetetada) {
    lcd.setCursor(0, 1);
    lcd.print("DETETADA    ");
  } else {
    lcd.setCursor(0, 1);
    lcd.print("NAO DETETADA");
  }
  do {
    leituraPinoBotao1 = digitalRead(pinoBotao1);
  } while (leituraPinoBotao1 == 1);
  if (leituraPinoBotao1 == 0) {
    delay(debouce);
    menu10LCD();
  }
}

void menu10LCD() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("NIVEL AGUA");
  lcd.setCursor(0, 1);
  lcd.print(leituraPinoSensorNivelAgua);
  lcd.print("%");
  do {
    leituraPinoBotao1 = digitalRead(pinoBotao1);
  } while (leituraPinoBotao1 == 1);
  if (leituraPinoBotao1 == 0) {
    delay(debouce);
    menu11LCD();
  }
}

void menu11LCD() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("MOVIMENTO");
  if (movimentoDetetado) {
    lcd.setCursor(0, 1);
    lcd.print("DETETADO    ");
  } else {
    lcd.setCursor(0, 1);
    lcd.print("NAO DETETADO");
  }
  do {
    leituraPinoBotao1 = digitalRead(pinoBotao1);
  } while (leituraPinoBotao1 == 1);
  if (leituraPinoBotao1 == 0) {
    delay(debouce);
    lcd.clear();
  }
}

void iniciarServos() {
  servo_porta.attach(pinoMotorServoPorta);
  servo_janela.attach(pinoMotorServoJanela);
  servo_porta.write(posicaoFechada);
  servo_janela.write(posicaoFechada);
}

void setup() {
  definirPinos();
  Serial.begin(SerialBaud);
  iniciarServos();
  iniciarLCD();
}

void loop() {
  lerTratarSensores();
  atualizarInfoLCD();
  leituraPinoBotao1 = digitalRead(pinoBotao1);
  if (leituraPinoBotao1 == 0) {
    delay(debouce);
    menu1LCD();
  }
}

 

  • Navegar na Interface
    • Para navegar na interface, utilizamos os dois botões posicionados na frente do kit.
    • O botão mais à esquerda permite a troca entre menus, com acesso à informação sobre os atuadores/sensores
    • O botão mais à direita permite interagir nesses menus, como acionar ou desativar um atuador.

 

Não se esqueçam de ver o nosso vídeo sobre este artigo no nosso canal do YouTube:

Em ElectroFun.pt pode encontrar muitos mais kits educacionais; ou até módulos/sensores para Arduino, e para outras placas microcontroladoras, como Raspberry ou até Micro:Bit! Porém, se prefere vê-los ao vivo, ou se tem qualquer outra dúvida sobre um produto, visite-nos na nossa loja física, em Vila Nova de Gaia, localizada no Grande Porto!