Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Arduino - Desenho via Web usando o controlador de motor de passo

Componentes e suprimentos

Arduino UNO
× 1
PHPoC WiFi Shield 2 para Arduino
× 1
PHPoC Stepper Motor Controller
× 2
Makeblock XY Plotter
× 1

Sobre este projeto





Demonstração


Se você é novo no Arduino, pode começar com:
  • Tutoriais do Arduino para iniciantes.
  • Tudo sobre motor para Arduino





Como funciona


Quando um dedo toca na área de desenho na página da web, a coordenada XY do ponto de toque é enviada ao Arduino. Após escalar a coordenada, o Arduino moverá dois motores de passo para localizar a caneta nessa coordenada. Durante o período de movimentação, o Arduino envia continuamente a trajetória da caneta para o aplicativo da web, o aplicativo da web desenha a trajetória na tela.





Código-fonte


O código-fonte inclui duas partes:código do Arduino e código da interface do usuário da web.

Código Arduino

Este é o código arduino, que é executado em loop infinito para:
  • Receber o comando da página da web e executar a tarefa de acordo com o comando.
  • CMD_MOVE:mova a caneta para uma posição controlando o motor de duas etapas
  • CMD_PEN_UP:levante a caneta mudando o ângulo do servo motor
  • CMD_PEN_DOWN:abaixe a caneta alterando o ângulo do servo motor
  • Ler continuamente a posição atual da caneta e enviar para a página da web

Interface do usuário da web

Veja o código na seção Código
  • Fornecimento da interface do usuário
  • Manipular o evento do usuário e enviar o comando com coordenadas para o Arduino
  • Receber a trajetória do Arduino e desenhá-la na página da web

remote_draw.php é um arquivo que contém a interface do usuário da web. Ele precisa ser armazenado no escudo PHPoC [WiFi]. Para fazer upload do arquivo para PHPoC [WiFi] Shield, execute as seguintes etapas:
  • Copie o código abaixo e salve-o no arquivo remote_draw.php.
  • Instale o depurador PHPoC
  • Conecte o PHPoC à proteção do PHPoC [WiFi] via cabo micro-USB de acordo com esta instrução. Observe que o Arduino deve estar ligado.
  • Faça upload do arquivo remote_draw.php para PHPoC [WiFi] Shield de acordo com esta instrução





Como fazer

  • Informações de rede de configuração para escudo PHPoC ou escudo WiFi PHPoC
  • Instale a biblioteca PHPoC
  • Instale a biblioteca de expansão PHPoC
  • Compilar e fazer upload do código para o Arduino
  • Carregue a interface do usuário da web para o escudo PHPoC [WiFi]
  • Abra o Serial Monitor e copie o endereço IP do PHPoC Shield
  • Acesse a interface do usuário da web por meio do navegador da web:http:// ip_address_of_shield /remote_draw.php
  • Desenhar via web

Para comprar componentes eletrônicos, você pode encomendá-los em utsource.net





O melhor Arduino Starter Kit para iniciantes


Veja o melhor kit Arduino para iniciantes







Referências de função

  • Serial.begin ()
  • Serial.println ()
  • atraso ()
  • milis ()
  • para loop
  • while loop
  • se mais
  • loop ()
  • configuração ()
  • String.toInt ()
  • String.substring ()
  • String.indexOf ()
  • String.remove ()
  • String.equals ()

Código

  • Código Arduino
  • Interface do usuário da web
Código Arduino Arduino
 #include  #include  #include  #define MAX_X 55550 // unidade é a etapa # define MAX_Y 68780 // unidade é etapa # define TOUCH_OFFSET 5000 // unidade é passo # 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 ((longo) 40 * STEP_MODE) #define_MODE SPEED_Y_COEF (long) 40 STEPED_Y_COEF * ((longo) 1500 * STEP_MODE) #define SPEED_Y_MAX ((longo) 1500 * STEP_MODE) #define ACCEL_X_MAX ((longo) 6000 * STEP_MODE) #define ACCEL_Y_MAX ((longo) 6000 * STEP_MODE) #define ACCEL_X_MAX ((longo) 6000 * STEP_MODE) #define ACCEL_Y_MAX ((longo) 6000 * STEP_MODE # define STEPTA_STATE_ST 1 define RESOLUÇÃO 500 # define MIN_UPDATE_INTERVAL 100 // em milissegundos servidorPhpocServer (80); ExpansionStepper stepX (14); ExpansionStepper stepY (13); Servo servo; long preX =0; long preY =0; byte penState =PEN_STATE_UPed; bool isUnlockedY =false; int forwardDirX =-1; / * direção do plotter XY quando o motor X avança, dependendo da instalação, deve ser testado para determinar os valores * / int forwardDirY =+1; / * direção do plotter XY quando o motor Y se move para cima, dependendo da instalação, deve ser testado para determinar os valores * / 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); // move a caneta para (0, 0) stepX.stepGotoSW (0, -forwardDirX); stepY.stepGotoSW (0, -forwardDirY); xyWait (); stepX.setPosition (0); stepY.setPosition (0); // descomente este bloco para a primeira execução e altere o valor na linha 6, 7 deste arquivo e linha 33 de index.php de acordo com o valor no console IDE / * // verifique os passos máximos stepX.stepGotoSW (1, forwardDirX); stepY.stepGotoSW (1, forwardDirY); xyWait (); // altere esses valores na linha 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); velocidade longaX =SPEED_X_COEF * abs (deltaX); velocidade longaY =SPEED_Y_COEF * abs (deltaY); if (speedX> speedY) {if (speedX> SPEED_X_MAX) speedX =SPEED_X_MAX; proporção dupla =deltaY / (duplo) deltaX; speedY =(longo) (proporção * speedX); } else {if (speedY> SPEED_Y_MAX) speedY =SPEED_Y_MAX; proporção dupla =deltaX / (duplo) deltaY; speedX =(longo) (proporção * speedY); } long accelX; long accelY; if (speedX  MIN_UPDATE_INTERVAL) isUpdate =true; longo curX =stepX.getPosition (); long curY =stepY.getPosition (); longo deltaX =curX - preX; deltaY longo =curY - presa; 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 (); // envia a posição atual para exibir na web} void sendPositionToWeb () {char wbuf [20]; long x =stepX.getPosition () * forwardDirX; long y =stepY.getPosition () * forwardDirY; Dados de string =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 ("endereço do servidor WebSocket:"); Serial.println (Phpoc.localIP ()); Expansion.begin (460800); servo.attach (8); / ** NOTA:Para a primeira execução:* - descomente o último bloco em xyInit () * - execute o código Arduino * - altere o valor na linha 6, 7 deste arquivo e na linha 33 de index.php de acordo com o valor no IDE console. ** / xyInit (); lastUpdateMillis =millis ();} void loop () {// aguarde um novo cliente:PhpocClient client =server.available (); if (cliente) {String data =client.readLine (); if (dados) {//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 (); switch (cmd) {case CMD_PEN_DOWN:xyGoto (x, y); // xyWait (); while (stepX.getState ()> 1 || stepY.getState ()> 1) xyCheckUpdateToWeb (); penDown (); pausa; case CMD_PEN_UP:// xyWait (); while (stepX.getState ()> 1 || stepY.getState ()> 1) xyCheckUpdateToWeb (); penUp (); pausa; case CMD_MOVE:xyGoto (x, y); pausa; }}} xyCheckUpdateToWeb ();} 
Interface do usuário da web PHP
     Arduino - PHPoC Shield - XY Plotter       

WebSocket: null


Processo de manufatura

  1. Decodificador DTMF usando apenas Arduino
  2. Controlador DMX operado pela web
  3. Sistema de detecção de humanos usando Arduino Uno
  4. Controlador de jogo Arduino
  5. Sistema de alarme Arduino:SERENA
  6. Brinquedo controlado pelo Android usando Raspberry Motor Shield
  7. Robô seguidor de linha
  8. Controle o Arduino Rover usando Firmata e o controlador do Xbox One
  9. Arduino - Enviar temperatura para a Web via serial
  10. Arduino - Desbloqueio de Padrão da Web