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

Arduino - Zeichnen über das Web mit Schrittmotorsteuerung

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
PHPoC WiFi Shield 2 für Arduino
× 1
PHPoC-Schrittmotorsteuerung
× 2
Makeblock XY Plotter
× 1

Über dieses Projekt

Vorführung

Wenn Sie neu bei Arduino sind, können Sie mit :

. beginnen
  • Arduino-Tutorials für Neulinge.
  • Alles über den Motor für Arduino

Wie es funktioniert

Wenn ein Finger den Zeichenbereich auf der Webseite berührt, wird die XY-Koordinate des Berührungspunkts an Arduino gesendet. Nach dem Skalieren der Koordinate bewegt Arduino zwei Schrittmotoren, um den Stift zu dieser Koordinate zu lokalisieren. Während der Bewegungsphase sendet Arduino kontinuierlich die Flugbahn des Stifts an die Web-App, die Web-App zeichnet die Flugbahn auf der Leinwand.

Quellcode

Der Quellcode umfasst zwei Teile:Arduino-Code und Web-Benutzeroberflächen-Code.

Arduino-Code

Dies ist Arduino-Code, der in einer Endlosschleife ausgeführt wird, um:

  • Empfangen des Befehls von der Webseite und Erledigen der Aufgabe gemäß dem Befehl.
  • CMD_MOVE:Bewegen Sie den Stift zu einer Position, indem Sie den Zweischrittmotor steuern
  • CMD_PEN_UP:Heben Sie den Stift an, indem Sie den Winkel des Servomotors ändern
  • CMD_PEN_DOWN:Senken Sie den Stift, indem Sie den Winkel des Servomotors ändern
  • Lesen Sie kontinuierlich die aktuelle Position des Stifts und senden Sie sie an die Webseite

Webbenutzeroberfläche

Siehe Code im Abschnitt Code

  • Bereitstellung der Benutzeroberfläche
  • Behandeln des Benutzerereignisses und Senden des Befehls mit Koordinate an Arduino
  • Erhalte die Flugbahn von Arduino und zeichne sie auf der Webseite

remote_draw.php ist eine Datei, die die Webbenutzeroberfläche enthält. Es muss auf dem PHPoC [WiFi] Shield gespeichert werden. Um die Datei auf PHPoC [WiFi] Shield hochzuladen, führen Sie bitte die folgenden Schritte aus:

  • Kopieren Sie den folgenden Code und speichern Sie ihn in der Datei remote_draw.php.
  • PHoC-Debugger installieren
  • Verbinden Sie PHPoC mit dem PHPoC [WiFi] Shield über ein Micro-USB-Kabel gemäß dieser Anleitung. Beachten Sie, dass Arduino mit Strom versorgt werden muss.
  • Laden Sie die Datei remote_draw.php gemäß dieser Anleitung in das PHPoC [WiFi] Shield hoch

Anleitung

  • Netzwerkinformationen für PHPoC-Schild oder PHPoC-WiFi-Schild konfigurieren
  • PHoC-Bibliothek installieren
  • PHoC-Erweiterungsbibliothek installieren
  • Code kompilieren und auf Arduino hochladen
  • Web-Benutzeroberfläche auf PHPoC [WiFi]-Schild hochladen
  • Öffne den Serial Monitor und kopiere die IP-Adresse von PHPoC Shield
  • Zugriff auf die Webbenutzeroberfläche über einen Webbrowser:http://ip_address_of_shield /remote_draw.php
  • Über das Web zeichnen

Um elektronische Komponenten zu kaufen, können Sie diese bei utsource.net bestellen

Das beste Arduino Starter Kit für Anfänger

Siehe Das beste Arduino-Kit für Anfänger


Funktionsreferenzen

  • Seriell.begin()
  • Seriell.println()
  • verzögerung()
  • millis() ​​​​​​
  • for-Schleife
  • while-Schleife
  • wenn sonst
  • Schleife()
  • setup()
  • String.toInt()
  • String.substring()
  • String.indexOf()
  • String.remove()
  • String.equals()

Code

  • Arduino-Code
  • Web-Benutzeroberfläche
Arduino-CodeArduino
#include #include #include #define MAX_X 55550 // Einheit ist Schritt#define MAX_Y 68780 // Einheit ist Schritt#define TOUCH_OFFSET 5000 // Einheit ist step#define PEN_STATE_UP 0#define PEN_STATE_DOWN 1#define CMD_PEN_UP 0#define CMD_PEN_DOWN 1#define CMD_MOVE 2#define STEP_MODE 32#define SPEED_X_COEF ((lang)40 * STEP_MODE)#define SPEED_Y_COEF (lange) ((long)1500 * STEP_MODE)#define SPEED_Y_MAX ((long)1500 * STEP_MODE)#define ACCEL_X_MAX ((long)6000 * STEP_MODE)#define ACCEL_Y_MAX ((long)6000 * STEP_MODE)#define STEP_STATE_STOP 0#define STEP_STATE_LOCK 1# define RESOLUTION 500#define MIN_UPDATE_INTERVAL 100 // in MillisekundenPhpocServer server(80);ExpansionStepper stepX(14);ExpansionStepper stepY(13);Servoservo;long preX =0;long preY =0;byte penState =PEN_STATE_UP;bool isUnlockedX =false;bool isUnlockedY =false;int forwardDirX =-1; /* Richtung des XY-Plotters bei Vorwärtsbewegung von Motor X, je nach Installation, Es sollte getestet werden, um die Werte zu bestimmen*/int forwardDirY =+1; /* Richtung des XY-Plotters wenn Motor Y nach oben bewegt, je nach Installation, Es sollte getestet werden, um die Werte zu bestimmen */unsigned long lastUpdateMillis;void penUp() { servo.write(110); penState =PEN_STATE_UP;}void penDown() {servo.write(180); penState =PEN_STATE_DOWN;}void xyWait() { while(stepX.getState()> 1 || stepY.getState()> 1);}void xyInit() { penUp(); stepX.setMode(STEP_MODE); stepX.setVrefStop(4); stepX.setVrefDrive(15); stepX.setResonance(120, 250); stepX.setSpeed(20000); stepX.setAccel(50000); stepY.setMode(STEP_MODE); stepY.setVrefStop(4); stepY.setVrefDrive(15); stepY.setResonance(120, 250); stepY.setSpeed(20000); stepY.setAccel(50000); // Stift nach (0, 0) bewegen stepX.stepGotoSW (0, -forwardDirX); stepY.stepGotoSW(0, -forwardDirY); xyWait(); stepX.setPosition(0); stepY.setPosition(0); // Entkommentieren Sie diesen Block für den ersten Durchlauf und ändern Sie den Wert in Zeile 6, 7 dieser Datei und Zeile 33 von index.php entsprechend dem Wert in der IDE-Konsole /* // Überprüfen Sie die maximalen Schritte stepX.stepGotoSW(1, forwardDirX); stepY.stepGotoSW(1, forwardDirY); xyWait(); // ändern Sie diesen Wert in Zeile 45 von index.php Serial.print(F("MAX_X:")); Serial.println (stepX.getPosition() * forwardDirX); Serial.print (F("MAX_Y:")); Serial.println (stepY.getPosition() * forwardDirY); */ xyGoto(TOUCH_OFFSET, TOUCH_OFFSET); xyWait(); stepX.setEioMode(0, EIO_MODE_LOCK); stepX.setEioMode(1, EIO_MODE_LOCK); stepY.setEioMode(0, EIO_MODE_LOCK); stepY.setEioMode(1, EIO_MODE_LOCK);}void xyGoto(long x, long y) { if(x  (MAX_X – TOUCH_OFFSET)) x =MAX_X – TOUCH_OFFSET; if(y  (MAX_Y – TOUCH_OFFSET)) y =MAX_Y – TOUCH_OFFSET; x *=forwardDirX; y *=forwardDirY; int32_t deltaX =x - stepX.getPosition(); int32_t deltaY =y - stepY.getPosition(); deltaX =abs(deltaX); deltaY =abs(deltaY); lange speedX =SPEED_X_COEF * abs(deltaX); lange GeschwindigkeitY =SPEED_Y_COEF * abs(deltaY); if(speedX> speedY) { if(speedX> SPEED_X_MAX) speedX =SPEED_X_MAX; doppeltes Verhältnis =deltaY / (doppeltes)deltaX; speedY =(lang) (Verhältnis * speedX); aufrechtzuerhalten. Sonst { if (speedY> SPEED_Y_MAX) speedY =SPEED_Y_MAX; doppeltes Verhältnis =deltaX / (doppeltes)deltaY; speedX =(lang) (Verhältnis * speedY); } long accelX; lange Beschleunigung; if (speedX  MIN_UPDATE_INTERVAL) isUpdate =true; long curX =stepX.getPosition(); long curY =stepY.getPosition(); langes deltaX =curX - preX; langes deltaY =curY - preY; long dist =sqrt(pow(deltaX, 2) + pow(deltaY, 2)); if(dist> RESOLUTION) isUpdate =true; if(isUpdate ==false || dist ==0) return false; lastUpdateMillis =curMillis; preX =curX; preY =curY; sendPositionToWeb(); // aktuelle Position zur Anzeige im Web senden}void sendPositionToWeb() { char wbuf[20]; long x =stepX.getPosition() * forwardDirX; long y =stepY.getPosition() * forwardDirY; Stringdaten =String(F("[")) + x + String(F(",")) + y + String(F(",")) + penState + String(F("]\n")); data.toCharArray(wbuf, data.length() + 1); server.write (wbuf, data.length ());}void setup () { Serial.begin (9600); while(!Seriell); Phpoc.begin(PF_LOG_SPI | PF_LOG_NET); server.beginWebSocket("xy_plotter"); Serial.print("WebSocket-Serveradresse:"); Serial.println (Phpoc.localIP()); Erweiterung.begin(460800); servo.attach(8); /** HINWEIS:Für den ersten Lauf:* - Entkommentieren Sie den letzten Block in xyInit() * - Führen Sie Arduino-Code aus * - Ändern Sie den Wert in Zeile 6, 7 dieser Datei und Zeile 33 von index.php entsprechend dem Wert in IDE Konsole. **/ xyInit(); lastUpdateMillis =millis();}void loop() { // auf einen neuen Client warten:PhpocClient client =server.available(); if(client) { String data =client.readLine(); if (Daten) {//Serial.println (Daten); Byte-TrennzeichenPos1 =data.indexOf(':'); Byte-TrennzeichenPos2 =data.lastIndexOf(':'); Byte cmd =data.substring(0, separatorPos1).toInt(); long x =data.substring(separatorPos1 + 1,separatorPos2).toInt(); long y =data.substring(separatorPos2 + 1).toInt(); switch(cmd) { case CMD_PEN_DOWN:xyGoto(x, y); //xyWait(); while(stepX.getState()> 1 || stepY.getState()> 1) xyCheckUpdateToWeb(); penDown(); brechen; Fall CMD_PEN_UP://xyWait(); while(stepX.getState()> 1 || stepY.getState()> 1) xyCheckUpdateToWeb(); penUp(); brechen; Fall CMD_MOVE:xyGoto(x, y); brechen; } } } xyCheckUpdateToWeb();}
Web-BenutzeroberflächePHP
Arduino - PHPoC Shield - XY-Plotter

WebSocket :null


Herstellungsprozess

  1. DTMF-Decoder, der nur Arduino verwendet
  2. Webbetriebener DMX-Controller
  3. Robotersystem zur Erkennung von Menschen mit Arduino Uno
  4. Arduino-Gamecontroller
  5. Arduino-Alarmsystem:SERENA
  6. Android-gesteuertes Spielzeug mit Raspberry Motor Shield
  7. Linienfolger-Roboter
  8. Steuern Sie Arduino Rover mit Firmata und Xbox One-Controller
  9. Arduino - Temperatur über eine serielle Schnittstelle an das Web senden
  10. Arduino - Freischaltung von Webmustern