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!

