Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

PHP-Webinterface zur Steuerung des Arduino Uno – Komplettanleitung

Komponenten und Zubehör

Arduino UNO × 1
Arduino Ethernet Shield 2 × 1
DHT11 Temperatur- & Feuchtesensor (4 Pin) × 1
2-Kanal-Relais-Modul × 4
Mini-Breadboard × 1
Flammsensor × 1
MQ4 Gassensor (Methan) × 1
LDR (Fotowiderstand) × 1
Bodenfeuchtesensor (Hygrometer) × 3
ADSL-Routerkabel (LAN) × 1
Netzstecker (1-fach) × 7
Netzdose (1-fach) × 7
9 V Blockbatterie + Klinkenkabel × 1

Werkzeuge

Apps & Online-Dienste

Projektbeschreibung

Ziel: Professionelles Webinterface zur Fernsteuerung von Aquarium & Bewässerung sowie Überwachung von Umgebungswerten (Temp, Feuchte, Gas, Flamme, Licht, Bodenfeuchte) über LAN/WLAN. Entstanden aus dem Bedarf, während Abwesenheit (Urlaub) Aquarium-Filter, Fütterung, Belüftung steuern zu können.

Architektur

Kommunikationsfluss

  1. User klickt auf Arduinautomotion.php Buttons (Formular → POST an formvalue.php).
  2. formvalue.php speichert in $_SESSION & leitet per GET an ArduinoSide.php (IP des Shields) weiter.
  3. Arduino empfängt Parameter, schaltet Relais, liest Sensoren.
  4. Arduino sendet Sensordaten per GET an communication.php (Server).
  5. communication.php schreibt in $_SESSION.
  6. control.php liest Session & stellt Daten für Arduinautomotion.php bereit.
  7. Seite neu laden (oder Auto-Refresh) → aktuelle Werte sichtbar.

Hinweis: POST für Server-intern (sicherer), GET für Arduino→Server (einfacher auf Arduino).

Apache-Server einrichten (Localhost)

z. B. AppServ → www/Arduinautomotion.php. Zugriff im LAN: https://192.168.1.20/Arduinautomotion.php (eigene IP verwenden).

Arduinautomotion.php – Hauptdashboard

Vier Bereiche (Tabs via JS):

SVG-Grafik verbindet Sensoren/Objekte mit Zentralpunkt – farbige Linien zeigen Status an. Footer mit Animation.

Arduinautomotioncontrol.php

Liest alle $_SESSION-Werte (Sensoren + Relais-Stati) und stellt sie als PHP-Variablen für Arduinautomotion.php bereit.

Arduinautomotionformvalue.php

Empfängt POST vom Hauptformular, speichert Relais-Befehle in Session, zeigt Empfangsbestätigung & leitet per verstecktem Formular (GET) an ArduinoSide.php (192.168.1.21) weiter.

Arduinautomotioncommunication.php

Empfängt GET vom Arduino (Sensordaten), schreibt in Session. Wird vom Arduino per Communication-Button aufgerufen.

ArduinoSide (auf Ethernet Shield)

Einfacher Webserver (Port 80). Zeigt Sensordaten in versteckten Formularfeldern + „Communication“-Button. Bei Klick → Daten an Server. Gleichzeitig prüft Arduino URL-Parameter (?airpump=pumpIsOn&...) und schaltet Relais.

Verdrahtung (Arduino Uno + Ethernet Shield)

Wichtig: Pins 10–13 durch Ethernet Shield belegt → Analogpins für Sensoren nutzen!

KomponentePin
DHT11Digital 2
Relais 1 (Pumpe/Lampe)Digital 3 / 4
Relais 2 (Futter/Heizer)Digital 5 / 6
Relais 3 (Filter ext/int)Digital 7 / 8
Relais 4 (Bewässerung)Digital 9
Ethernet ShieldPins 10–13 (SPI)
LDRA0
FlammsensorA1
MQ4A2
Hygrometer 1A3
Hygrometer 2A4
Hygrometer 3A5
PHP-Webinterface zur Steuerung des Arduino Uno – Komplettanleitung

Arduino-Sketch (Auszug)


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

DHT dht;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 21); // Feste IP des Shields
EthernetServer server(80);

int pump=3, lamp=4, feed=5, heater=6, 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);
  digitalWrite(pump,HIGH); digitalWrite(lamp,HIGH); digitalWrite(feed,HIGH);
  digitalWrite(heater,HIGH); digitalWrite(filterex,HIGH); digitalWrite(filterin,HIGH); digitalWrite(irrigation,HIGH);
  dht.setup(2);
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server at "); Serial.println(Ethernet.localIP());
}

void loop() {
  delay(dht.getMinimumSamplingPeriod());
  float h = dht.getHumidity();
  float t = dht.getTemperature();
  float f = dht.toFahrenheit(t);
  int ldr = analogRead(A0);
  int flame = analogRead(A1);
  int mq4 = analogRead(A2);
  int hygA = analogRead(A3);
  int hygB = analogRead(A4);
  int hygC = analogRead(A5);

  EthernetClient client = server.available();
  if (client) {
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (readString.length() < 135) readString += c;
        if (c == '\n') {
          // HTTP Header senden
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();
          client.println("ArduinoSide");
          client.println("");
          client.println("
"); // Versteckte Felder mit Sensorwerten client.println(""); client.println(""); client.println(""); client.println(""); client.println(""); client.println(""); client.println(""); client.println(""); client.println(""); client.println(""); client.println("
"); break; } } } delay(1); client.stop(); // Relais aus URL-Parametern steuern 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("client disconnected"); } }

Test & Ergebnis

Projekt getestet mit echtem Aquarium & Bewässerungspumpe – funktioniert zuverlässig. Zugriff per Browser (PC & Android) im lokalen Netzwerk. Video-Demo im Originalartikel.

Erweiterungsidee

Statt lokalem Apache: Cloud-Hosting (z. B. TheAmplituhedron.com) für weltweiten Zugriff ohne Port-Forwarding. Projekt offen für Weiterentwicklung.

Herstellungsprozess

  1. Ihr erstes AWS CloudFormation Template erstellen – Ein praktischer Leitfaden
  2. LED mit PIR-Bewegungsmelder am Raspberry Pi steuern
  3. Temperatur- und Luftfeuchtedaten zwischen zwei Arduinos via Firebase übertragen
  4. Universelle IR-Fernbedienung mit Arduino bauen: Schritt-für-Schritt-Anleitung
  5. Arduino-Uno-Roboter zur Personenerkennung – Sensorintegration Schritt für Schritt
  6. DIY Infrarot-Herzschlag-Sensor mit Arduino: Schritt-für-Schritt-Anleitung
  7. Digitales Stadiometer bauen: Körpergröße messen mit Arduino & Lasersensor VL53L0X
  8. Smart IoT-Glas bauen: Füllstand überwachen mit ESP8266, Arduino & Ultraschall
  9. Erdmassen-Messung mit Arduino: Schritt-für-Schritt DIY-Anleitung
  10. Digitaler Kompass in Echtzeit mit Arduino & Processing bauen