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

Arduino per Web-Pattern-Entsperrung sichern – Einfache Einrichtung & Fernsteuerung

Komponenten und Materialien

Projektübersicht

Dieses Projekt implementiert ein Smartphone-ähnliches Entsperrmuster für Arduino-Geräte, um unbefugten Zugriff zu verhindern. Als Demonstrationsanwendung dient die Steuerung eines Servomotors. Die Idee basiert auf zwei PHPoC-Projekten, die für Arduino adaptiert wurden.

Warum PHPoC WiFi Shield?

Funktionsweise

Datenfluss

Webbrowser ←→ PHPoC WiFi Shield ←→ Arduino

Authentifizierungsprozess

  1. Der Nutzer zeichnet ein Muster im Browser.
  2. Das Muster wird in einen String umgewandelt (z. B. 1,4,8,6,3) und per WebSocket an den Arduino gesendet.
  3. Arduino vergleicht den empfangenen String mit dem fest hinterlegten Muster.
  4. Bei Übereinstimmung: 202 (ACCEPTED), Authentifizierungsvariable = true.
  5. Bei Abweichung: 401 (DENIED), Authentifizierungsvariable = false.

Steuerbefehle werden nur ausgeführt, wenn die Authentifizierungsvariable true ist. Nach einem konfigurierbaren Timeout (Standard 10 s) erlischt die Authentifizierung automatisch.

Muster-Mapping

Die 3×3-Punkte werden zeilenweise von 1 bis 9 nummeriert. Die Verbindungsreihenfolge ergibt den Muster-String.

Installation & Einrichtung

1. WLAN-Konfiguration des PHPoC Shields

Siehe offizielle Anleitung.

2. Web-UI auf den PHPoC Shield hochladen

3. Arduino-Code schreiben

  • PHPoC-Bibliothek in der Arduino IDE installieren.
  • Quellcode ArduinoUnlockExample.ino kompilieren und hochladen.

Testen

  1. Seriellen Monitor öffnen → IP-Adresse notieren.
  2. Browser: https://<IP-Adresse>/unlock.php
  3. „Connect“ klicken und Muster zeichnen.

Code

unlock.php (Web-UI)

<!DOCTYPE html>
<html>
<head>
<title>Arduino - PHPoC Shield</title>
<meta name="viewport" content="width=device-width, initial-scale=0.7, maximum-scale=0.7">
<meta charset="utf-8">
<style>
body { text-align: center; font-size: width/2pt; }
h1, h2, button { font-weight: bold; font-size: width/2pt; }
</style>
<script>
// ... (JavaScript-Code für Pattern-Unlock & Servo-Steuerung via WebSocket)
// Vollständiger Code im Originalprojekt verfügbar.
</script>
</head>
<body>
<h1>Arduino - Web Pattern Unlock</h1>
<div id="unlock_area" style="display:block;">
<canvas id="unlock"></canvas>
</div>
<div id="control_area" style="display:none;">
<canvas id="servo"></canvas>
<p>Winkel: <span id="debug">0</span></p>
</div>
<h2>
<p>WebSocket: <span id="ws_state">null</span></p>
<button id="bt_connect" onclick="connect_onclick()">Connect</button>
</h2>
</body>
</html>

ArduinoUnlockExample.ino

/* Arduino Webserver - Pattern Unlock */
#include <SPI.h>
#include <Phpoc.h>
#include <Servo.h>

#define CMD_AUTH 0
#define CMD_CTRL 1
#define ACCEPTED "202"
#define UNAUTHORIZED "401"

PhpocServer server(80);
Servo servo;
String pattern;
bool authenticated;
unsigned long timeout;
unsigned long lastActiveTime;

void setup() {
  Serial.begin(9600);
  while(!Serial);
  Phpoc.begin(PF_LOG_SPI | PF_LOG_NET);
  server.beginWebSocket("web_pattern");
  Serial.print("WebSocket Server Adresse: ");
  Serial.println(Phpoc.localIP());

  servo.attach(8);
  servo.write(90);
  pattern = String("1,4,8,6,3");
  authenticated = false;
  timeout = 10000; // 10 s
  lastActiveTime = 0;
}

void loop() {
  PhpocClient client = server.available();
  if (client) {
    String data = client.readLine();
    if (data) {
      int pos = data.indexOf(':');
      int cmd = data.substring(0, pos).toInt();

      if (cmd == CMD_AUTH) {
        String reqPattern = data.substring(pos+1);
        reqPattern.remove(reqPattern.indexOf(13));
        reqPattern.remove(reqPattern.indexOf(10));
        if (pattern.equals(reqPattern)) {
          authenticated = true;
          sendResponse(ACCEPTED, 3);
          lastActiveTime = millis();
        } else {
          authenticated = false;
          sendResponse(UNAUTHORIZED, 3);
        }
      } else if (cmd == CMD_CTRL) {
        if (authenticated) {
          int angle = data.substring(pos+1).toInt();
          angle = map(angle, 90, -90, 0, 180);
          servo.write(angle);
          lastActiveTime = millis();
        } else {
          sendResponse(UNAUTHORIZED, 3);
        }
      }
    }
  }
  // Timeout-Prüfung
  if (authenticated && ((millis() - lastActiveTime) > timeout)) {
    authenticated = false;
    sendResponse(UNAUTHORIZED, 3);
  }
}

void sendResponse(char *data, int len) {
  server.write(data, len);
}

Schaltplan

Arduino per Web-Pattern-Entsperrung sichern – Einfache Einrichtung & Fernsteuerung
Verdrahtung: Arduino UNO + PHPoC Shield + Servo an Pin 8

Weiterführende Links

Herstellungsprozess

  1. Die Entwicklung und Produktion massengefertigter Kleidungsschnitte
  2. Web-gesteuertes DMX-Lichtsystem – Arduino Master Controller
  3. Bluetooth-gesteuerter Arduino-Spybot bauen – Überwachungsroboter mit IP-Kamera
  4. FlickMote: Gestensteuerung per Ultraschall & IR für Smart Home (Arduino 101)
  5. DIY Arduino TV-B-Gone: Universelle TV-Aus-Fernbedienung
  6. Einen eigenen LED-Master-Clock mit Alarm bauen – aus 12 Metern Entfernung ablesbar
  7. Find Me: Smarter Gegenstands-Finder mit Arduino und Bluetooth
  8. Optimierte Stromversorgungslösungen für Arduino-Projekte
  9. Arduino Tic Tac Toe mit MAX7219 LED-Matrix und Karton-Gehäuse
  10. Intelligenten Arduino-Vierbeiner-Roboter bauen: Schritt-für-Schritt-Anleitung