Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Interface Web em PHP para Controlar Arduino Uno via Ethernet Shield

Componentes e Materiais

Componente Quantidade
Arduino UNO 1
Arduino Ethernet Shield 2 (W5500) 1
Sensor DHT11 Temperatura/Umidade (4 pinos) 1
Módulo Relé 2 Canais 4
Mini Protoboard 1
Sensor de Chama (Flame) 1
Sensor Gás MQ-4 (Metano/Gás Natural) 1
LDR (Sensor de Luz) 1
Sensor Higrômetro Solo (YL-69 ou similar) 3
Cabo ADSL/RJ45 (Ethernet) 1
Plugues e Tomadas (1 via) – para relés 7 cada
Bateria 9V + Conector Barril 1

Ferramentas

Software e Serviços

Sobre o Projeto

O Arduinautomotion é um sistema de automação residencial que permite monitorar e controlar aquário, irrigação e sensores ambientais via interface web PHP hospedada localmente (Apache), comunicando-se com o Arduino via Ethernet Shield.

Arquitetura

Páginas PHP (Lado Servidor)

Arquivo Função
Arduinautomotion.php Painel principal: dashboard visual (SVG/JS), botões de controle, alertas, abas Sala/Aquário/Plantas/Guia.
Arduinautomotioncontrol.php Incluído no painel principal; lê variáveis de sessão para popular o dashboard.
Arduinautomotionformvalue.php Recebe POST do painel principal, salva comandos em $_SESSION e envia via GET ao Arduino (botão "Send and Get Data").
Arduinautomotioncommunication.php Recebe GET do Arduino (dados dos sensores) e salva em $_SESSION.

Fluxo de Comunicação

  1. Usuário interage no Arduinautomotion.php → submete formulário → Arduinautomotionformvalue.php (POST).
  2. Arduinautomotionformvalue.php salva em $_SESSION e abre nova aba com GET para https://IP_ARDUINO/.
  3. Arduino recebe GET, aciona relés, lê sensores e responde com página HTML contendo formulário oculto POST/GET para Arduinautomotioncommunication.php.
  4. Usuário clica "Communication" na página do Arduino → dados vão para Arduinautomotioncommunication.php (GET) → salva em $_SESSION.
  5. Usuário recarrega Arduinautomotion.php → dashboard atualizado via Arduinautomotioncontrol.php.

Ligações (Pinout Arduino UNO + Ethernet Shield)

Dispositivo Pino Arduino Observação
DHT11 (Dados) D2
Relé 1 (Bomba ar / Bomba água) D3, D4 2 canais
Relé 2 (Lâmpada / Alimentador) D5, D6 2 canais
Relé 3 (Aquecedor / Filtro externo) D7, D8 2 canais
Relé 4 (Filtro interno / Irrigação) D9, (D10 reservado) D10–D13 usados pelo Ethernet Shield (SPI)
Ethernet Shield (SPI) D10 (CS), D11 (MOSI), D12 (MISO), D13 (SCK) Não use estes pinos para outros fins
LDR A0
Sensor Chama A1
MQ-4 Gás A2
Higrômetro 1 (Planta 1) A3
Higrômetro 2 (Planta 2) A4
Higrômetro 3 (Planta 3) A5

Importante: Pinos D10–D13 são reservados ao Ethernet Shield (SPI). Use pinos analógicos como digitais (A0–A5) para sensores e D2–D9 para atuadores.

Código Principal – Arduino (ArduinoSide_Code.ino)


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

DHT dht;

// Configuração de rede
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 21);      // IP fixo do Arduino na LAN
EthernetServer server(80);          // Porta HTTP

// Pinos dos relés (LOW = ligado, módulo relé ativo em LOW)
int pump = 3, lamp = 4, feed = 5, heater = 6;
int filterex = 7, filterin = 8, irrigation = 9;

String readString;

void setup() {
  Serial.begin(9600);
  
  pinMode(pump, OUTPUT); pinMode(lamp, OUTPUT); pinMode(feed, OUTPUT);
  pinMode(heater, OUTPUT); pinMode(filterex, OUTPUT); pinMode(filterin, OUTPUT);
  pinMode(irrigation, OUTPUT);
  
  // Relés desligados (HIGH) por padrão
  digitalWrite(pump, HIGH); digitalWrite(lamp, HIGH); digitalWrite(feed, HIGH);
  digitalWrite(heater, HIGH); digitalWrite(filterex, HIGH); digitalWrite(filterin, HIGH);
  digitalWrite(irrigation, HIGH);
  
  dht.setup(2);                   // DHT11 no D2
  
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("Servidor em: ");
  Serial.println(Ethernet.localIP());
}

void loop() {
  // Leitura sensores (respeita tempo mínimo DHT11)
  delay(dht.getMinimumSamplingPeriod());
  float humidity = dht.getHumidity();
  float temperature = dht.getTemperature();
  float fahrenheit = dht.toFahrenheit(temperature);
  
  int ldrValue = analogRead(A0);
  int flameValue = analogRead(A1);
  int mq4Value = analogRead(A2);
  int hyg1 = analogRead(A3);
  int hyg2 = analogRead(A4);
  int hyg3 = analogRead(A5);
  
  EthernetClient client = server.available();
  if (client) {
    Serial.println("Novo cliente");
    boolean currentLineIsBlank = true;
    
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (readString.length() < 200) readString += c;
        
        if (c == '\n' && currentLineIsBlank) {
          // Resposta HTTP + página HTML com formulário de retorno
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();
          client.println("");
          client.println("ArduinoSide");
          client.println("");
          client.println("");
          
          // Formulário GET para enviar dados de volta ao PHP
          client.println("
"); client.println(""); client.println(""); client.println(""); client.println(""); client.println(""); client.println(""); client.println(""); client.println(""); client.println(""); client.println(""); client.println("
"); client.println(""); break; } if (c == '\n') currentLineIsBlank = true; else if (c != '\r') currentLineIsBlank = false; } } delay(1); client.stop(); // Processa comandos recebidos via GET (ex: ?airpump=pumpIsOn&...) if (readString.indexOf("?airpump=pumpIsOn") > 0) digitalWrite(pump, LOW); else if (readString.indexOf("?airpump=pumpIsOff") > 0) digitalWrite(pump, HIGH); if (readString.indexOf("&lamp=lampIsOn") > 0) digitalWrite(lamp, LOW); else if (readString.indexOf("&lamp=lampIsOff") > 0) digitalWrite(lamp, HIGH); if (readString.indexOf("&feed=feedIsOn") > 0) digitalWrite(feed, LOW); else if (readString.indexOf("&feed=feedIsOff") > 0) digitalWrite(feed, HIGH); if (readString.indexOf("&heater=heaterIsOn") > 0) digitalWrite(heater, LOW); else if (readString.indexOf("&heater=heaterIsOff") > 0) digitalWrite(heater, HIGH); if (readString.indexOf("&filterex=exIsOn") > 0) digitalWrite(filterex, LOW); else if (readString.indexOf("&filterex=exIsOff") > 0) digitalWrite(filterex, HIGH); if (readString.indexOf("&filterin=inIsOn") > 0) digitalWrite(filterin, LOW); else if (readString.indexOf("&filterin=inIsOff") > 0) digitalWrite(filterin, HIGH); if (readString.indexOf("&irrigation=start") > 0) digitalWrite(irrigation, LOW); else if (readString.indexOf("&irrigation=stop") > 0) digitalWrite(irrigation, HIGH); readString = ""; Serial.println("Cliente desconectado"); } }

Arquivos PHP Principais (Resumo)

Arduinautomotioncontrol.php

<?php session_start(); ?>
<?php
$temperatureCelsiusValue = $_SESSION['TemperatureCelsius'];
$temperatureFahrenheitValue = $_SESSION['TemperatureFahrenheit'];
$humidityValue = $_SESSION['Humidity'];
$flamesensorValue = $_SESSION['Flame'];
$MQ4sensorValue = $_SESSION['MQ4Sensor'];
$LdrValue = $_SESSION['LDRSensor'];
$pumpValue = $_SESSION['Airpump'];
$lampValue = $_SESSION['Lamp'];
$feedingValue = $_SESSION['Feeding'];
$heaterValue = $_SESSION['Heater'];
$filterexValue = $_SESSION['Filterex'];
$filterinValue = $_SESSION['Filterin'];
$plant1Value = $_SESSION['Plant1H'];
$plant2Value = $_SESSION['Plant2H'];
$plant3Value = $_SESSION['Plant3H'];
$irrigationValue = $_SESSION['Irrigation'];
?>

Arduinautomotionformvalue.php

<?php session_start(); ?>
<?php
$_SESSION['Airpump'] = $_POST["pump"];
$_SESSION['Lamp'] = $_POST["lamp"];
$_SESSION['Feeding'] = $_POST["feed"];
$_SESSION['Heater'] = $_POST["heater"];
$_SESSION['Filterex'] = $_POST["filterexternal"];
$_SESSION['Filterin'] = $_POST["filterinternal"];
$_SESSION['Irrigation'] = $_POST["irrigationsystem"];
?>
<!-- Exibe valores e botão para enviar ao Arduino via GET -->
<form action="https://192.168.1.21/" method="get" target="_blank">
  <input type="hidden" name="airpump" value="<?php echo $_SESSION['Airpump'];?>">
  <input type="hidden" name="lamp" value="<?php echo $_SESSION['Lamp'];?>">
  <input type="hidden" name="feed" value="<?php echo $_SESSION['Feeding'];?>">
  <input type="hidden" name="heater" value="<?php echo $_SESSION['Heater'];?>">
  <input type="hidden" name="filterex" value="<?php echo $_SESSION['Filterex'];?>">
  <input type="hidden" name="filterin" value="<?php echo $_SESSION['Filterin'];?>">
  <input type="hidden" name="irrigation" value="<?php echo $_SESSION['Irrigation'];?>">
  <input type="submit" value="Send and Get Data" class="subMit">
</form>

Arduinautomotioncommunication.php

<?php session_start(); ?>
<?php
$_SESSION['TemperatureCelsius'] = $_GET["temperatureCelsius"];
$_SESSION['TemperatureFahrenheit'] = $_GET["temperatureFahrenheit"];
$_SESSION['Humidity'] = $_GET["humidity"];
$_SESSION['Flame'] = $_GET["flame"];
$_SESSION['MQ4Sensor'] = $_GET["MQ4sensor"];
$_SESSION['LDRSensor'] = $_GET["LDRsensor"];
$_SESSION['Plant1H'] = $_GET["plant1H"];
$_SESSION['Plant2H'] = $_GET["plant2H"];
$_SESSION['Plant3H'] = $_GET["plant3H"];
?>

Configuração do Servidor Apache (Localhost)

  1. Instale Apache + PHP (ex: XAMPP, WAMP, AppServ).
  2. Coloque os arquivos PHP em htdocs/Arduinautomotion/ (ou www/).
  3. Acesse via https://SEU_IP_LOCAL/Arduinautomotion/Arduinautomotion.php.
  4. No Arduino, defina IPAddress ip(192,168,1,21); (IP fixo na mesma sub-rede).
  5. No PHP, use o IP do Arduino (192.168.1.21) e do servidor (192.168.1.20).

Acesso Remoto (Opcional)

Melhorias Sugeridas

Arquivos Extras (Custom Parts)

Processo de manufatura

  1. Crie Seu Primeiro Template AWS CloudFormation — Um Guia Prático
  2. Controle um LED com Sensor de Movimento PIR no Raspberry Pi
  3. Transferência de Dados de Temperatura e Umidade entre Dois Arduinos via Firebase
  4. Construa um Controle Remoto IR Universal com Arduino: Guia Passo a Passo
  5. Robô de Detecção Humana Baseado em Arduino Uno: Integração de Sensores Passo a Passo
  6. Construa um Sensor de Batimento Cardíaco Infravermelho Confiável com Arduino: Guia Passo a Passo
  7. Construa um Estadiómetro Digital: Acompanhe a Altura com Arduino e Sensor a Laser
  8. Construa um Pote Inteligente IoT com ESP8266, Arduino e Sensor Ultrassônico – Monitoramento em Tempo Real
  9. Medir a Massa da Terra com Arduino: Guia DIY Passo a Passo
  10. Construa uma Bússola Digital em Tempo Real com Arduino e Processing