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!