Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Arduino - Dibujar vía web usando el controlador de motor paso a paso

Componentes y suministros

Arduino UNO
× 1
PHPoC WiFi Shield 2 para Arduino
× 1
Controlador de motor paso a paso PHPoC
× 2
Trazador XY Makeblock
× 1

Acerca de este proyecto

Demostración

Si es nuevo en Arduino, puede comenzar con:

  • Tutoriales de Arduino para principiantes.
  • Todo sobre motor para Arduino

Cómo funciona

Cuando un dedo toca el área de dibujo en la página web, la coordenada XY del punto de contacto se envía a Arduino. Después de escalar la coordenada, Arduino moverá dos motores de paso para ubicar el lápiz en esa coordenada. Durante el período de movimiento, Arduino envía continuamente la trayectoria del lápiz a la aplicación web, la aplicación web dibuja la trayectoria en el lienzo.

Código fuente

El código fuente incluye dos partes:código Arduino y código de interfaz de usuario web.

Código Arduino

Este es el código arduino, que se ejecuta en bucle infinito para:

  • Recibir el comando de la página web y realizar la tarea de acuerdo con el comando.
  • CMD_MOVE:mueva el lápiz a una posición controlando el motor de dos pasos
  • CMD_PEN_UP:levante el lápiz cambiando el ángulo del servomotor
  • CMD_PEN_DOWN:baje el lápiz cambiando el ángulo del servomotor
  • Leer continuamente la posición actual del lápiz y enviarlo a la página web

Interfaz de usuario web

Ver código en la sección de Código

  • Proporcionar la interfaz de usuario
  • Manejar el evento del usuario y enviar el comando con coordenadas a Arduino
  • Recibir la trayectoria de Arduino y dibujarla en la página web

remote_draw.php es un archivo que contiene la interfaz de usuario web. Debe almacenarse en PHPoC [WiFi] Shield. Para cargar el archivo en PHPoC [WiFi] Shield, siga los siguientes pasos:

  • Copie el siguiente código y guárdelo en el archivo remote_draw.php.
  • Instale el depurador PHPoC
  • Conecte PHPoC a PHPoC [WiFi] Shield mediante un cable micro-USB de acuerdo con estas instrucciones. Tenga en cuenta que Arduino debe estar encendido.
  • Sube el archivo remote_draw.php a PHPoC [WiFi] Shield de acuerdo con estas instrucciones

Cómo

  • Configurar información de red para PHPoC Shield o PHPoC WiFi Shield
  • Instale la biblioteca PHPoC
  • Instale la biblioteca de expansión PHPoC
  • Compile y cargue código en Arduino
  • Sube la interfaz de usuario web al escudo PHPoC [WiFi]
  • Abra Serial Monitor y copie la dirección IP de PHPoC Shield
  • Acceda a la interfaz de usuario web a través del navegador web:http:// ip_address_of_shield /remote_draw.php
  • Dibujar a través de la Web

Para comprar componentes electrónicos, puede solicitarlos en utsource.net

El mejor kit de inicio de Arduino para principiantes

Vea el mejor kit de Arduino para principiantes


Referencias de funciones

  • Serial.begin ()
  • Serial.println ()
  • retraso ()
  • milis ()
  • para bucle
  • ciclo while
  • si es otra cosa
  • bucle ()
  • configuración ()
  • String.toInt ()
  • String.substring ()
  • String.indexOf ()
  • String.remove ()
  • String.equals ()

Código

  • Código Arduino
  • Interfaz de usuario web
Código Arduino Arduino
 #include  #include  #include  #define MAX_X 55550 // unit is step # define MAX_Y 68780 // unit is step # define TOUCH_OFFSET 5000 // unit is paso # definir PEN_STATE_UP 0 # definir PEN_STATE_DOWN 1 # definir CMD_PEN_UP 0 # definir CMD_PEN_DOWN 1 # definir CMD_MOVE 2 # definir STEP_MODE 32 # definir SPEED_X_COEF ((largo) 40 * STEP_MODE) #define SPEED_YOD_MODE) #define SPEED_YOD_MODE (largo) ((largo) 1500 * STEP_MODE) #define SPEED_Y_MAX ((largo) 1500 * STEP_MODE) #define ACCEL_X_MAX ((largo) 6000 * STEP_MODE) #define ACCEL_Y_MAX ((largo) 6000 * STEP_MODE) #define STEP_STATECSTK_ 1 define RESOLUTION 500 # define MIN_UPDATE_INTERVAL 100 // en milisegundosPhpocServer 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; / * dirección del trazador XY cuando el motor X avanza, dependiendo de la instalación. Debe probarse para determinar los valores * / int forwardDirY =+1; / * dirección del trazador XY cuando el motor Y se mueve hacia arriba, dependiendo de la instalación. Debe probarse para determinar los valores * / unsigned long lastUpdateMillis; void penUp () {servo.write (110); penState =PEN_STATE_UP;} vacío 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); // mueve el lápiz a (0, 0) stepX.stepGotoSW (0, -forwardDirX); stepY.stepGotoSW (0, -forwardDirY); xyWait (); stepX.setPosition (0); stepY.setPosition (0); // descomente este bloque para la primera ejecución y cambie el valor en la línea 6, 7 de este archivo y la línea 33 de index.php de acuerdo con el valor en la consola IDE / * // verifique los pasos máximos stepX.stepGotoSW (1, forwardDirX); stepY.stepGotoSW (1, forwardDirY); xyWait (); // cambia estos valores en la línea 45 de 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); velocidad largaX =SPEED_X_COEF * abs (deltaX); velocidad largaY =VELOCIDAD_Y_COEF * abs (deltaY); if (velocidadX> velocidadY) {if (velocidadX> VELOCIDAD_X_MAX) velocidadX =VELOCIDAD_X_MAX; relación doble =deltaY / (doble) deltaX; speedY =(largo) (relación * speedX); } else {if (speedY> SPEED_Y_MAX) speedY =SPEED_Y_MAX; relación doble =deltaX / (doble) deltaY; speedX =(largo) (relación * speedY); } long accelX; aceleración larga; if (velocidadX  MIN_UPDATE_INTERVAL) isUpdate =true; long curX =stepX.getPosition (); long curY =stepY.getPosition (); long deltaX =curX - preX; deltaY largo =curY - presa; long dist =sqrt (pow (deltaX, 2) + pow (deltaY, 2)); if (dist> RESOLUCIÓN) isUpdate =true; if (isUpdate ==false || dist ==0) return false; lastUpdateMillis =curMillis; preX =curX; preY =curY; sendPositionToWeb (); // envía la posición actual para mostrarla en la web} void sendPositionToWeb () {char wbuf [20]; long x =stepX.getPosition () * forwardDirX; long y =stepY.getPosition () * forwardDirY; Datos de cadena =Cadena (F ("[")) + x + Cadena (F (",")) + y + Cadena (F (",")) + penState + String (F ("] \ n")); data.toCharArray (wbuf, data.length () + 1); server.write (wbuf, data.length ());} void setup () {Serial.begin (9600); mientras (! Serial); Phpoc.begin (PF_LOG_SPI | PF_LOG_NET); server.beginWebSocket ("xy_plotter"); Serial.print ("Dirección del servidor WebSocket:"); Serial.println (Phpoc.localIP ()); Expansion.begin (460800); servo.attach (8); / ** NOTA:Para la primera ejecución:* - descomente el último bloque en xyInit () * - ejecute el código Arduino * - cambie el valor en la línea 6, 7 de este archivo y la línea 33 de index.php de acuerdo con el valor en IDE consola. ** / xyInit (); lastUpdateMillis =millis ();} void loop () {// espera un nuevo cliente:PhpocClient client =server.available (); if (cliente) {String data =client.readLine (); if (datos) {//Serial.println(data); byte separatorPos1 =data.indexOf (':'); byte separatorPos2 =data.lastIndexOf (':'); byte cmd =data.substring (0, separatorPos1) .toInt (); long x =data.substring (separatorPos1 + 1, separatorPos2) .toInt (); long y =data.substring (separatorPos2 + 1) .toInt (); cambiar (cmd) {caso CMD_PEN_DOWN:xyGoto (x, y); // xyWait (); while (pasoX.getState ()> 1 || pasoY.getState ()> 1) xyCheckUpdateToWeb (); pluma abajo(); descanso; caso CMD_PEN_UP:// xyWait (); while (pasoX.getState ()> 1 || pasoY.getState ()> 1) xyCheckUpdateToWeb (); penUp (); descanso; caso CMD_MOVE:xyGoto (x, y); descanso; }}} xyCheckUpdateToWeb ();} 
Interfaz de usuario web PHP
     Arduino - PHPoC Shield - Trazador XY       

WebSocket: null


Proceso de manufactura

  1. Decodificador DTMF usando solo Arduino
  2. Controlador DMX operado por la web
  3. Sistema de robótica de detección humana con Arduino Uno
  4. Controlador de juego Arduino
  5. Sistema de alarma Arduino:SERENA
  6. Juguete controlado por Android con Raspberry Motor Shield
  7. Robot seguidor de línea
  8. Controla Arduino Rover usando Firmata y el controlador Xbox One
  9. Arduino - Enviar temperatura a la web a través de serie
  10. Arduino - Desbloqueo de patrones web
  11. Plataforma de entrenamiento Arduino