Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Arduino - Dessin via le Web à l'aide d'un contrôleur de moteur pas à pas

Composants et fournitures

Arduino UNO
× 1
PHPoC WiFi Shield 2 pour Arduino
× 1
Contrôleur de moteur pas à pas PHPoC
× 2
Plotter Makeblock XY
× 1

À propos de ce projet

Démonstration

Si vous êtes nouveau sur Arduino, vous pouvez commencer avec :

  • Tutoriels Arduino pour les débutants.
  • Tout sur le moteur pour Arduino

Comment ça marche

Lorsqu'un doigt touche la zone de dessin de la page Web, la coordonnée XY du point de contact est envoyée à Arduino. Après avoir mis à l'échelle la coordonnée, Arduino déplacera deux moteurs pas à pas pour localiser le stylo à cette coordonnée. Pendant la période de déplacement, Arduino envoie en continu la trajectoire du stylo à l'application Web, l'application Web dessine la trajectoire sur la toile.

Code source

Le code source comprend deux parties :le code Arduino et le code de l'interface utilisateur Web.

Code Arduino

Il s'agit du code arduino, qui s'exécute en boucle infinie vers :

  • Recevoir la commande de la page Web et effectuer la tâche en fonction de la commande.
  • CMD_MOVE :déplacez le stylet vers une position en contrôlant le moteur à deux étapes
  • CMD_PEN_UP :relevez le stylet en modifiant l'angle du servomoteur
  • CMD_PEN_DOWN :abaissez le stylet en modifiant l'angle du servomoteur
  • Lire en continu la position actuelle du stylet et envoyer à la page Web

Interface utilisateur Web

Voir le code dans la section Code

  • Fournir l'interface utilisateur
  • Gestion de l'événement utilisateur et envoi de la commande avec coordonnées à Arduino
  • Recevoir la trajectoire d'Arduino et la dessiner sur la page Web

remote_draw.php est un fichier qui contient l'interface utilisateur Web. Il doit être stocké sur PHPoC [WiFi] Shield. Afin de télécharger le fichier sur PHPoC [WiFi] Shield, veuillez suivre les étapes suivantes :

  • Copiez le code ci-dessous et enregistrez-le dans le fichier remote_draw.php.
  • Installer le débogueur PHPoC
  • Connectez PHPoC à PHPoC [WiFi] Shield via un câble micro-USB conformément à cette instruction. Notez qu'Arduino doit être alimenté.
  • Télécharger le fichier remote_draw.php sur PHPoC [WiFi] Shield conformément à cette instruction

Comment faire

  • Configurer les informations réseau pour PHPoC shield ou PHPoC WiFi shield
  • Installer la bibliothèque PHPoC
  • Installer la bibliothèque d'extension PHPoC
  • Compilez et téléchargez le code sur Arduino
  • Télécharger l'interface utilisateur Web sur PHPoC [WiFi] shield
  • Ouvrez Serial Monitor et copiez l'adresse IP de PHPoC Shield
  • Accéder à l'interface utilisateur Web via un navigateur Web :http://ip_address_of_shield /remote_draw.php
  • Dessiner via le Web

Pour acheter des composants électroniques, vous pouvez les commander sur utsource.net

Le meilleur kit de démarrage Arduino pour débutant

Voir le meilleur kit Arduino pour les débutants


Références de fonction

  • Serial.begin()
  • Série.println()
  • retard()
  • millis() ​​​​​​​
  • boucle for
  • boucle while
  • si autre
  • boucle()
  • configuration()
  • String.toInt()
  • String.substring()
  • Chaîne.indexOf()
  • Chaîne.remove()
  • Chaîne.égales()

Code

  • Code Arduino
  • Interface utilisateur Web
Code ArduinoArduino
#include #include #include #define MAX_X 55550 // l'unité est le pas#define MAX_Y 68780 // l'unité est le pas#define TOUCH_OFFSET 5000 // l'unité est 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 ((long)40 * STEP_MODE)#define SPEED_LONG)_COEF ( SPEED_MODE)40 ((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 define RESOLUTION 500#define MIN_UPDATE_INTERVAL 100 // en 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; /* direction du traceur XY lorsque le moteur X avance, selon l'installation, il doit être testé pour déterminer les valeurs*/int forwardDirY =+1; /* direction du traceur XY lorsque le moteur Y monte, selon l'installation, il doit être testé pour déterminer les valeurs*/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); // déplace le stylo vers (0, 0) stepX.stepGotoSW(0, -forwardDirX); stepY.stepGotoSW(0, -forwardDirY); xyAttente(); stepX.setPosition(0) ; stepY.setPosition(0) ; // Décommentez ce bloc pour la première exécution et modifiez la valeur aux lignes 6, 7 de ce fichier et à la ligne 33 de index.php en fonction de la valeur dans la console IDE /* // vérifiez les étapes max stepX.stepGotoSW(1, forwardDirX); stepY.stepGotoSW(1, forwardDirY); xyAttente(); // modifiez ces valeurs à la ligne 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); xyAttente(); 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); vitesse longueX =SPEED_X_COEF * abs(deltaX); vitesse longueY =SPEED_Y_COEF * abs(deltaY); if(speedX> speedY) { if(speedX> SPEED_X_MAX) speedX =SPEED_X_MAX; double rapport =deltaY / (double)deltaX ; speedY =(long) (rapport * speedX); } else { if(speedY> SPEED_Y_MAX) speedY =SPEED_Y_MAX; double rapport =deltaX / (double)deltaY ; vitesseX =(long) (rapport * vitesseY); } long accelX; accélération longue; if(speedX  MIN_UPDATE_INTERVAL) isUpdate =true ; long curX =stepX.getPosition(); long curY =stepY.getPosition(); long deltaX =curX - preX; long deltaY =curY - preY; longue 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; envoyerPositionVersWeb(); // envoie la position actuelle à afficher sur le Web}void sendPositionToWeb() { char wbuf[20]; long x =stepX.getPosition() * forwardDirX; long y =stepY.getPosition() * forwardDirY; Données de chaîne =Chaîne(F("[")) + x + Chaîne(F(",")) + y + Chaîne(F(",")) + penState + Chaîne(F("]\n")); data.toCharArray(wbuf, data.length() + 1); server.write(wbuf, data.length());}void setup() { Serial.begin(9600); while(!Série); Phpoc.begin(PF_LOG_SPI | PF_LOG_NET); server.beginWebSocket("xy_plotter"); Serial.print("Adresse du serveur WebSocket :"); Serial.println(Phpoc.localIP()); Expansion.begin(460800); attache.servo(8) ; /** REMARQUE :Pour la première exécution :* - décommentez le dernier bloc dans xyInit() * - exécutez le code Arduino * - modifiez la valeur aux lignes 6, 7 de ce fichier et à la ligne 33 d'index.php en fonction de la valeur dans l'IDE console. **/ xyInit(); lastUpdateMillis =millis();}void loop() { // attend un nouveau client :PhpocClient client =server.available(); if(client) { String data =client.readLine(); if(données) { //Série.println(données); séparateur d'octetsPos1 =data.indexOf(':'); séparateur d'octetsPos2 =data.lastIndexOf(':'); octet 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); //xyAttendez(); while(stepX.getState()> 1 || stepY.getState()> 1) xyCheckUpdateToWeb(); penDown(); Pause; case CMD_PEN_UP ://xyWait(); while(stepX.getState()> 1 || stepY.getState()> 1) xyCheckUpdateToWeb(); penUp(); Pause; case CMD_MOVE :xyGoto(x, y); Pause; } } } xyCheckUpdateToWeb();}
Interface utilisateur WebPHP
Arduino - Bouclier PHPoC - Traceur XY

WebSocket :null


Processus de fabrication

  1. Décodeur DTMF utilisant uniquement Arduino
  2. Contrôleur DMX Web
  3. Système robotique de détection humaine utilisant Arduino Uno
  4. Contrôleur de jeu Arduino
  5. Système d'alarme Arduino :SERENA
  6. Jouet contrôlé par Android utilisant un bouclier de moteur Raspberry
  7. Robot suiveur de ligne
  8. Contrôler Arduino Rover à l'aide de Firmata et de la manette Xbox One
  9. Arduino - Envoyer la température au Web via série