Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Arduino - Tekenen via internet met stappenmotorcontroller

Componenten en benodigdheden

Arduino UNO
× 1
PHPoC WiFi Shield 2 voor Arduino
× 1
PHPoC stappenmotorcontroller
× 2
Makeblock XY-plotter
× 1

Over dit project

Demonstratie

Als Arduino nieuw voor je is, kun je aan de slag met:

  • Arduino-zelfstudies voor nieuwelingen.
  • Alles over motor voor Arduino

Hoe het werkt

Wanneer een vinger het tekengebied op de webpagina aanraakt, wordt de XY-coördinaat van het aanraakpunt naar Arduino gestuurd. Na het schalen van de coördinaat, zal Arduino twee stappenmotoren verplaatsen om de pen naar die coördinaat te lokaliseren. Tijdens de bewegingsperiode stuurt Arduino continu het traject van de pen naar de web-app, de web-app tekent het traject op het canvas.

Broncode

De broncode bestaat uit twee delen:Arduino-code en code voor de webgebruikersinterface.

Arduino-code

Dit is Arduino-code, die in een oneindige lus wordt uitgevoerd om:

  • Het commando ontvangen van de webpagina en de taak uitvoeren volgens het commando.
  • CMD_MOVE:verplaats de pen naar een positie door de tweestapsmotor te besturen
  • CMD_PEN_UP:breng de pen omhoog door de hoek van de servomotor te veranderen
  • CMD_PEN_DOWN:laat de pen zakken door de hoek van de servomotor te veranderen
  • Lees continu de huidige positie van de pen en verzend deze naar de webpagina

Webgebruikersinterface

Zie code in het gedeelte Code

  • De gebruikersinterface bieden
  • De gebruikersgebeurtenis afhandelen en commando met coördinaat naar Arduino sturen
  • Het traject van Arduino ontvangen en op de webpagina tekenen

remote_draw.php is een bestand dat de webgebruikersinterface bevat. Het moet worden opgeslagen op PHPoC [WiFi] Shield. Voer de volgende stappen uit om het bestand naar PHPoC [WiFi] Shield te uploaden:

  • Kopieer de onderstaande code en sla deze op in het bestand remote_draw.php.
  • Plaats PHPoC Debugger
  • Verbind PHPoC met PHPoC [WiFi] Shield via een micro-USB-kabel volgens deze instructie. Houd er rekening mee dat Arduino van stroom moet worden voorzien.
  • Upload het bestand remote_draw.php naar PHPoC [WiFi] Shield volgens deze instructie

Hoe

  • Netwerkinformatie configureren voor PHPoC-schild of PHPoC WiFi-schild
  • Plaats PHPoC-bibliotheek
  • Plaats de PHPoC-uitbreidingsbibliotheek
  • Code compileren en uploaden naar Arduino
  • Webgebruikersinterface uploaden naar PHPoC [WiFi]-schild
  • Open Serial Monitor en kopieer het IP-adres van PHPoC Shield
  • Toegang tot webgebruikersinterface via webbrowser:http://ip_address_of_shield /remote_draw.php
  • Tekenen via internet

Om elektronische componenten te kopen, kunt u ze bestellen op utsource.net

De beste Arduino-starterkit voor beginners

Zie de beste Arduino-kit voor beginners


Functiereferenties

  • Serial.begin()
  • Serial.println()
  • vertraging()
  • millis() ​​​​​​​
  • for-lus
  • terwijl-lus
  • indien anders
  • loop()
  • setup()
  • String.toInt()
  • String.substring()
  • String.indexOf()
  • String.remove()
  • String.equals()

Code

  • Arduino-code
  • Webgebruikersinterface
Arduino-codeArduino
#include #include #include #define MAX_X 55550 // unit is step#define MAX_Y 68780 // unit is step#define TOUCH_OFFSET 5000 // unit is 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_MAX_COEF#define SPEED_MODE_COEF#define SPEED_MODE_COEF ((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 definieer RESOLUTIE 500#define MIN_UPDATE_INTERVAL 100 // in millisecondePhpocServer server(80);ExpansionStepper stepX(14);ExpansionStepper stepY(13);Servo servo;long preX =0;long preY =0;byte penState =PEN_STATE_UP;bool isUnlockedX =false;bool isUnlockedY =false;int forwardDirX =-1; /* richting van XY-plotter wanneer motor X vooruit beweegt, afhankelijk van installatie. Het moet worden getest om de waarden te bepalen*/int forwardDirY =+1; /* richting van XY-plotter wanneer motor Y omhoog beweegt, afhankelijk van installatie. Het moet worden getest om de waarden te bepalen*/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.setResonantie(120, 250); stepX.setSpeed ​​(20000); stepX.setAccel(50000); stepY.setMode (STEP_MODE); stepY.setVrefStop(4); stepY.setVrefDrive(15); stepY.setResonantie(120, 250); stepY.setSpeed ​​(20000); stepY.setAccel(50000); // verplaats pen naar (0, 0) stepX.stepGotoSW (0, -forwardDirX); stepY.stepGotoSW(0, -forwardDirY); xyWacht(); stepX.setPositie(0); stepY.setPositie (0); // verwijder commentaar bij dit blok voor de eerste run en verander de waarde in regel 6, 7 van dit bestand en regel 33 van index.php volgens de waarde in IDE-console /* // check max steps stepX.stepGotoSW(1, forwardDirX); stepY.stepGotoSW(1, forwardDirY); xyWacht(); // verander deze waarde in regel 45 van 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); xyWacht(); 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(lange x, lange 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 snelheidX =SPEED_X_COEF * abs(deltaX); lange snelheidY =SPEED_Y_COEF * abs(deltaY); if(speedX> speedY) { if(speedX> SPEED_X_MAX) speedX =SPEED_X_MAX; dubbele verhouding =deltaY / (dubbele)deltaX; speedY =(lang) (verhouding * speedX); } else { if(speedY> SPEED_Y_MAX) speedY =SPEED_Y_MAX; dubbele verhouding =deltaX / (dubbele)deltaY; snelheidX =(lang) (verhouding * snelheidY); } lange accelX; lange acceleratie; if (speedX  MIN_UPDATE_INTERVAL) isUpdate =true; lange curX =stepX.getPosition(); lange curY =stepY.getPosition(); lange deltaX =curX - preX; lange deltaY =curY - preY; lange afstand =sqrt(pow(deltaX, 2) + pow(deltaY, 2)); if(dist> RESOLUTIE) isUpdate =true; if(isUpdate ==false || dist ==0) retourneer false; lastUpdateMillis =curMillis; preX =curX; preY =curY; stuurPositieNaarWeb(); // stuur de huidige positie om weer te geven op het web} void sendPositionToWeb () { char wbuf [20]; lange x =stepX.getPosition() * forwardDirX; lange y =stepY.getPosition() * forwardDirY; String data =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(!Serial); Phpoc.begin(PF_LOG_SPI | PF_LOG_NET); server.beginWebSocket("xy_plotter"); Serial.print("WebSocket-serveradres:"); Serial.println(Phpoc.localIP()); Uitbreiding.begin(460800); servo.attach(8); /** OPMERKING:Voor de eerste keer uitvoeren:* - verwijder commentaar op het laatste blok in xyInit() * - voer Arduino-code uit * - verander de waarde in regel 6, 7 van dit bestand en regel 33 van index.php volgens de waarde in IDE troosten. **/ xyInit(); lastUpdateMillis =millis();}void loop() { // wacht op een nieuwe client:PhpocClient client =server.available(); if(client) { String data =client.readLine(); if(data) { //Serial.println(data); byte separatorPos1 =data.indexOf(':'); byte separatorPos2 =data.lastIndexOf(':'); byte cmd =data.substring(0, separatorPos1).toInt(); lange x =data.substring(separatorPos1 + 1, separatorPos2).toInt(); lange y =data.substring(separatorPos2 + 1).toInt(); switch (cmd) { case CMD_PEN_DOWN:xyGoto(x, y); //xyWacht(); while(stepX.getState()> 1 || stepY.getState()> 1) xyCheckUpdateToWeb(); penDown(); pauze; geval CMD_PEN_UP://xyWait(); while(stepX.getState()> 1 || stepY.getState()> 1) xyCheckUpdateToWeb(); penUp(); pauze; geval CMD_MOVE:xyGoto(x, y); pauze; } } } xyCheckUpdateToWeb();}
WebgebruikersinterfacePHP
Arduino - PHPoC Shield - XY-plotter

WebSocket:null


Productieproces

  1. DTMF-decoder met alleen Arduino
  2. Web-gestuurde DMX-controller
  3. Human Detection Robotics System met Arduino Uno
  4. Arduino-gamecontroller
  5. Arduino Alarmsysteem:SERENA
  6. Android bestuurd speelgoed met Raspberry Motor Shield
  7. Lijnvolger Robot
  8. Bedien Arduino Rover met Firmata en Xbox One Controller
  9. Arduino - Stuur temperatuur naar internet via serieel
  10. Arduino - ontgrendeling webpatroon
  11. Arduino-trainingsplatform