Projeto Automação Residencial

O projeto Automação Residencial transforma seu lar em um espaço inteligente e responsivo. Ela proporciona controle total e simplifica a rotina diária.

Você acende as luzes com um comando de voz e ajusta a temperatura antes de sair da cama. Essa tecnologia integra todos os dispositivos em um sistema central.

Ao sair, você ativa a cena de segurança e tranca todas as portas automaticamente. O sistema monitora sua casa constantemente e envia alertas diretos para seu celular.

Você visualiza a imagem das câmeras em tempo real e controla o acesso de visitantes remotamente. Ao retornar, o sistema prepara o ambiente: ele abre as cortinas, liga o ar-condicionado e inicia sua playlist favorita.

A automação otimiza o consumo de energia, pois você programa o funcionamento de eletrodomésticos e luzes. Ela economiza tempo e aumenta o conforto de todos os moradores.

Seu lar inteligente oferece uma vida mais segura e conveniente, permitindo que você desfrute de momentos de descanso sem preocupações.

Localizar MAC do arduino: Dowload

Circuito

Circuito Projeto Automação Residencial

Programação

Arquivo automacao.ino

#include <SPI.h>
#include <Ethernet.h>

// --- CONFIGURAÇÃO DE REDE ---
// Substitua pelo MAC Address do seu Ethernet Shield
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0x09, 0xA7 };
byte ip[] = { 192, 168, 0, 105 };
byte gateway[] = { 192, 168, 0, 1 };
byte subnet[] = { 255, 255, 255, 0 };
EthernetServer server(80);

String readString;  // Armazena a requisição HTTP

// --- CONFIGURAÇÃO DOS RELÉS (Active-LOW: HIGH=OFF, LOW=ON) ---
// Pinos escolhidos para evitar conflitos (0, 1, 10, 11, 12, 13)
int pino_rele1 = 5;
int pino_rele2 = 6;
int pino_rele3 = 7;
int pino_rele4 = 8;
int pino_rele5 = 9;

// Variaveis de estado (true = LIGADO)
boolean ligado_1 = false;
boolean ligado_2 = false;
boolean ligado_3 = false;
boolean ligado_4 = false;
boolean ligado_5 = false;

//////////////////////////////////////////////////////////////////

void setup() {

  // Configura os pinos como OUTPUT
  pinMode(pino_rele1, OUTPUT);
  pinMode(pino_rele2, OUTPUT);
  pinMode(pino_rele3, OUTPUT);
  pinMode(pino_rele4, OUTPUT);
  pinMode(pino_rele5, OUTPUT);


  // Desliga todos os reles na inicialização (HIGH = DESLIGADO no Active-LOW)
  digitalWrite(pino_rele1, HIGH);
  digitalWrite(pino_rele2, HIGH);
  digitalWrite(pino_rele3, HIGH);
  digitalWrite(pino_rele4, HIGH);
  digitalWrite(pino_rele5, HIGH);

  // Inicia comunicação Serial
  Serial.begin(9600);

  // Inicia Ethernet
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();

  Serial.println("Servidor 4 Canais iniciado.");
  Serial.print("Acesse: http://");
  Serial.println(Ethernet.localIP());
}

void loop() {
  // Cria uma conexão de cliente
  EthernetClient client = server.available();
  if (client) {
    // Zera a string para a nova requisição
    readString = "";

    while (client.connected()) {
      if (client.available()) {
        char c = client.read();

        // Armazena a requisição
        if (readString.length() < 100) {
          readString += c;
        }

        // Se a requisição HTTP terminou ('\n' é o fim da primeira linha GET)
        if (c == '\n') {

          Serial.println(readString);

          // --- Controle do Relé 1 (Pino 5) ---
          if (readString.indexOf("?1_on") > 0) {
            digitalWrite(pino_rele1, LOW);  // LIGA
            ligado_1 = true;
          } else if (readString.indexOf("?1_off") > 0) {
            digitalWrite(pino_rele1, HIGH);  // DESLIGA
            ligado_1 = false;
          }

          // --- Controle do Relé 2 (Pino 6) ---
          if (readString.indexOf("?2_on") > 0) {
            digitalWrite(pino_rele2, LOW);  // LIGA
            ligado_2 = true;
          } else if (readString.indexOf("?2_off") > 0) {
            digitalWrite(pino_rele2, HIGH);  // DESLIGA
            ligado_2 = false;
          }

          // --- Controle do Relé 3 (Pino 7) ---
          if (readString.indexOf("?3_on") > 0) {
            digitalWrite(pino_rele3, LOW);  // LIGA
            ligado_3 = true;
          } else if (readString.indexOf("?3_off") > 0) {
            digitalWrite(pino_rele3, HIGH);  // DESLIGA
            ligado_3 = false;
          }

          // --- Controle do Relé 4 (Pino 8) ---
          if (readString.indexOf("?4_on") > 0) {
            digitalWrite(pino_rele4, LOW);  // LIGA
            ligado_4 = true;
          } else if (readString.indexOf("?4_off") > 0) {
            digitalWrite(pino_rele4, HIGH);  // DESLIGA
            ligado_4 = false;
          }

          // --- Controle do Relé 5 (Pino 8) ---
          if (readString.indexOf("?5_on") > 0) {
            digitalWrite(pino_rele5, LOW);  // LIGA
            ligado_5 = false;
          } else if (readString.indexOf("?5_off") > 0) {
            digitalWrite(pino_rele5, HIGH);  // DESLIGA
            ligado_5 = false;
          }


          // --- RESPOSTA HTTP (PÁGINA HTML COMPLETA) ---
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type:text/html");
          client.println("Connection:close");  // Fecha a conexão após a resposta
          client.println();                     // Linha em branco obrigatória após cabeçalhos
          client.println("<!DOCTYPE HTML>");
          client.println("<html lang='pt-br'><head>");
          client.println("<meta name='viewport' content='width=device-width, initial-scale=1.0'> ");
          client.println("<meta charset='utf-8'>");
          client.println("<title>Casa do 2º Informática 1</title>");


          // --- CSS Incorporado ---
          client.println("<style>");
          client.println("body{background:#333;color:#FFF;font-family:Arial,sans-serif;text-align:center;}");
          client.println(".container{width:90%;max-width:500px;margin:50px auto;border:1px solid #555;padding:10px;}");
          client.println(".rele-box{padding:10px;margin-bottom:10px;border-bottom:1px solid #555;display:flex;justify-content:space-between;align-items:center;}");
          client.println(".status{font-weight:bold;}");
          client.println(".on{color:#0F0;}");
          client.println(".off{color:#F00;}");
          client.println("a.button{text-decoration:none;padding:8px 15px;border-radius:5px;cursor:pointer;}");
          client.println("a.ligar{background-color:#0A0;color:white;}");
          client.println("a.desligar{background-color:#A00;color:white;}");
          client.println("@media (max-width:800px) { ");
          client.println(".container{width:max-content;}");
          client.println("}");
          client.println("</style>");
          client.println("</head>");
          client.println("<body><div class='container'>");
          client.println("<h2>Casa do 2º Informática 1</h2>");

          // --- FUNÇÃO PARA GERAR A LINHA DE CADA RELÉ ---
          auto printRelay = [&](int id, const char* name, boolean state) {
            client.print("<div class='rele-box'>");
            client.print("<span>");
            client.print(name);
            client.print("</span>");

            // Botões de Ação
            client.print("<div>");
            // Se estiver LIGADO, mostra botão DESLIGAR
            if (state) {
              //client.print("<span class='status on'>LIGADO</span>");
              client.print(" <a class='button desligar' href='/?");
              client.print(id);
              client.print("_off'>Desligar</a>");
            }
            // Se estiver DESLIGADO, mostra botão LIGAR
            else {
              //client.print("<span class='status off'>DESLIGADO</span>");
              client.print(" <a class='button ligar' href='/?");
              client.print(id);
              client.print("_on'>Ligar</a>");
            }
            client.print("</div>");
            client.print("");

            client.println("</div>");
          };

          // --- CHAMA A FUNÇÃO PARA CADA RELÉ ---
          printRelay(1, "Lâmpada 1 (Terreo)", ligado_1);
          printRelay(2, "Lâmpada 2 (Terreo)", ligado_2);
          printRelay(3, "Lâmpada 3 (Superior)", ligado_3);
          printRelay(4, "Lâmpada 4 (Superior)", ligado_4);
          printRelay(5, "ATUALIZAR", ligado_5);

          client.println("</div></body></html>");

          delay(1);
          client.stop();  // Encerra a conexão
          return;         // Sai do loop 'while (client.connected())'
        }
      }
    }
  }
}

“Quem teme perder já está vencido”

Publicar comentário