Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Arduino - Рисование через Интернет с помощью контроллера шагового двигателя

Компоненты и расходные материалы

Arduino UNO
× 1
PHPoC WiFi Shield 2 для Arduino
× 1
Контроллер шагового двигателя PHPoC
× 2
XY-плоттер Makeblock
× 1

Об этом проекте

Демонстрация

Если вы новичок в Arduino, вы можете начать с:

  • Руководства по Arduino для новичков.
  • Все о моторе для Arduino

Как это работает

Когда палец касается области рисования на веб-странице, координата XY точки касания отправляется в Arduino. После масштабирования координаты Arduino переместит два шаговых двигателя, чтобы переместить перо в эту координату. В течение периода перемещения Arduino непрерывно отправляет траекторию пера в веб-приложение, веб-приложение рисует траекторию на холсте.

Исходный код

Исходный код состоит из двух частей:кода Arduino и кода веб-интерфейса пользователя.

Код Arduino

Это код Arduino, который запускается в бесконечном цикле, чтобы:

  • Получение команды с веб-страницы и выполнение задачи в соответствии с командой.
  • CMD_MOVE:переместите перо в положение, управляя двумя шаговыми двигателями.
  • CMD_PEN_UP:поднимите перо, изменив угол серводвигателя.
  • CMD_PEN_DOWN:опустите перо, изменив угол серводвигателя.
  • Непрерывно считывать текущее положение пера и отправлять на веб-страницу.

Пользовательский веб-интерфейс

См. Код в разделе «Код»

  • Обеспечение пользовательского интерфейса
  • Обработка пользовательского события и отправка команды с координатами в Arduino.
  • Получение траектории от Arduino и рисование ее на веб-странице.

remote_draw.php - это файл, содержащий пользовательский веб-интерфейс. Его необходимо хранить на PHPoC [WiFi] Shield. Чтобы загрузить файл в PHPoC [WiFi] Shield, выполните следующие действия:

  • Скопируйте приведенный ниже код и сохраните его в файле remote_draw.php.
  • Установить отладчик PHPoC
  • Подключите PHPoC к PHPoC [WiFi] Shield через кабель micro-USB в соответствии с этой инструкцией. Обратите внимание, что Arduino должен быть включен.
  • Загрузите файл remote_draw.php в PHPoC [WiFi] Shield в соответствии с этой инструкцией.

Как сделать

  • Сконфигурируйте сетевую информацию для PHPoC Shield или PHPoC WiFi shield.
  • Установить библиотеку PHPoC
  • Установить библиотеку расширения PHPoC
  • Скомпилируйте и загрузите код в Arduino
  • Загрузить пользовательский веб-интерфейс в PHPoC [WiFi] Shield
  • Откройте Serial Monitor и скопируйте IP-адрес PHPoC Shield.
  • Доступ к веб-интерфейсу пользователя через веб-браузер:http:// ip_address_of_shield /remote_draw.php
  • Рисование через Интернет

Чтобы купить электронные компоненты, вы можете заказать их на utsource.net

Лучший стартовый комплект Arduino для начинающих

См. «Лучший комплект Arduino для начинающих»


  • Serial.begin ()
  • Serial.println ()
  • delay ()
  • миллис ()
  • цикл для
  • цикл while
  • если еще
  • цикл ()
  • setup ()
  • String.toInt ()
  • String.substring ()
  • String.indexOf ()
  • String.remove ()
  • String.equals ()

Код

  • Код Arduino
  • Пользовательский веб-интерфейс
Код 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 шаг # определить PEN_STATE_UP 0 # определить PEN_STATE_DOWN 1 # определить CMD_PEN_UP 0 # определить CMD_PEN_DOWN 1 # определить CMD_MOVE 2 # определить STEP_MODE 32 # определить SPEED_X_COEF ((длинный) 40 * STEP_MODE) #define SPEED_ME_ODE ((длинный) 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_STEP_STEP 0_STATE) #define STEP_STEP 0_STATE) #define STEP_STEP 0_STATE define RESOLUTION 500 # define MIN_UPDATE_INTERVAL 100 // в миллисекундахPhpocServer server (80); ExpansionStepper stepX (14); ExpansionStepper stepY (13); Servo servo; long preX =0; long preY =0; byte penState =PEN_STATE_locked; boXol isUnUnUn; bool isUnlockedY =false; int forwardDirX =-1; / * направление XY плоттера при движении двигателя X вперед, в зависимости от установки. Это должно быть протестировано для определения значений * / int forwardDirY =+1; / * направление XY плоттера при движении двигателя Y вверх, в зависимости от установки. Это должно быть проверено для определения значений * / 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); // перемещаем перо на (0, 0) stepX.stepGotoSW (0, -forwardDirX); stepY.stepGotoSW (0, -forwardDirY); xyWait (); stepX.setPosition (0); stepY.setPosition (0); // раскомментируйте этот блок для первого запуска и измените значение в строке 6, 7 этого файла и строке 33 index.php в соответствии со значением в консоли IDE / * // проверьте максимальное количество шагов stepX.stepGotoSW (1, forwardDirX); stepY.stepGotoSW (1, forwardDirY); xyWait (); // изменить это значение в строке 45 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; если (y  (MAX_Y - TOUCH_OFFSET)) y =MAX_Y - TOUCH_OFFSET; х * =forwardDirX; y * =forwardDirY; int32_t deltaX =x - stepX.getPosition (); int32_t deltaY =y - stepY.getPosition (); deltaX =abs (deltaX); deltaY =abs (deltaY); длинная скоростьX =SPEED_X_COEF * abs (deltaX); long speedY =SPEED_Y_COEF * abs (deltaY); if (speedX> speedY) {if (speedX> SPEED_X_MAX) speedX =SPEED_X_MAX; двойное соотношение =deltaY / (двойное) deltaX; speedY =(long) (ratio * speedX); } else {if (speedY> SPEED_Y_MAX) speedY =SPEED_Y_MAX; двойное соотношение =deltaX / (двойное) deltaY; speedX =(long) (ratio * speedY); } long AccelX; долгое ускорение; если (скоростьX <скоростьY) {ускорение =ACCEL_Y_MAX; двойное передаточное число =ускорение / (удвоение) скорости; AccelX =(длинный) (коэффициент * скоростьX); } еще {AccelX =ACCEL_X_MAX; двойное передаточное число =ускорение X / (двойное) скорость X; ускорение =(длинный) (коэффициент * скоростьY); } if (deltaX! =0) stepX.command (F ("goto% ld% lu% lu"), x, speedX, AccelX); if (deltaY! =0) stepY.command (F ("goto% ld% lu% lu"), y, speedY, ускорение);} void xyCheckUpdateToWeb () {bool isUpdate =false; беззнаковое длинное curMillis =millis (); если ((curMillis - lastUpdateMillis)> MIN_UPDATE_INTERVAL) isUpdate =true; long curX =stepX.getPosition (); long curY =stepY.getPosition (); long deltaX =curX - preX; long deltaY =curY - preY; long dist =sqrt (pow (deltaX, 2) + pow (deltaY, 2)); если (расст> РАЗРЕШЕНИЕ) isUpdate =true; if (isUpdate ==false || dist ==0) return false; lastUpdateMillis =curMillis; preX =curX; preY =curY; sendPositionToWeb (); // отправляем текущую позицию для отображения в сети} void sendPositionToWeb () {char wbuf [20]; long x =stepX.getPosition () * forwardDirX; long y =stepY.getPosition () * forwardDirY; Строковые данные =String (F ("[")) + x + String (F (",")) + y + String (F (",")) + penState + String (F ("] \ n")); data.toCharArray (wbuf, data.length () + 1); server.write (wbuf, data.length ());} установка void () {Serial.begin (9600); в то время как (! серийный); Phpoc.begin (PF_LOG_SPI | PF_LOG_NET); server.beginWebSocket ("xy_plotter"); Serial.print ("Адрес сервера WebSocket:"); Serial.println (Phpoc.localIP ()); Expansion.begin (460800); сервопривод (8); / ** ПРИМЕЧАНИЕ:для первого запуска:* - раскомментируйте последний блок в xyInit () * - запустите код Arduino * - измените значение в строке 6, 7 этого файла и строке 33 index.php в соответствии со значением в IDE консоль. ** / xyInit (); lastUpdateMillis =millis ();} void loop () {// ждем нового клиента:PhpocClient client =server.available (); если (клиент) {Строковые данные =client.readLine (); if (данные) {//Serial.println(data); разделитель байтовPos1 =data.indexOf (':'); разделитель байтовPos2 =data.lastIndexOf (':'); байт cmd =data.substring (0, separatorPos1) .toInt (); длинный x =data.substring (separatorPos1 + 1, separatorPos2) .toInt (); длинный y =data.substring (separatorPos2 + 1) .toInt (); переключатель (cmd) {case CMD_PEN_DOWN:xyGoto (x, y); // xyWait (); while (stepX.getState ()> 1 || stepY.getState ()> 1) xyCheckUpdateToWeb (); penDown (); ломать; case CMD_PEN_UP:// xyWait (); while (stepX.getState ()> 1 || stepY.getState ()> 1) xyCheckUpdateToWeb (); penUp (); ломать; case CMD_MOVE:xyGoto (x, y); ломать; }}} xyCheckUpdateToWeb ();} 
Пользовательский веб-интерфейс PHP
     Arduino - PHPoC Shield - XY Plotter   <стиль> тело {выравнивание текста:центр; цвет фона:# 33C7F2; } #canvas {margin-right:auto; маржа слева:авто; положение:относительное; цвет фона:#FFFFFF; } холст {положение:абсолютное; слева:0px; верх:0px; переполнение-у:авто; переполнение-x:скрыто; -webkit-overflow-scrolling:сенсорный; / * отличная встроенная прокрутка webkit * /} # layer1 {z-index:2; } # layer2 {z-index:1; } # layer3 {z-index:0; }     

WebSocket: null


Производственный процесс

  1. Декодер DTMF с использованием только Arduino
  2. Веб-контроллер DMX
  3. Робототехническая система для обнаружения человека с использованием Arduino Uno
  4. Игровой контроллер Arduino
  5. Система сигнализации Arduino:SERENA
  6. Игрушка под управлением Android с использованием Raspberry Motor Shield
  7. Робот-последователь линии
  8. Управление Arduino Rover с помощью Firmata и контроллера Xbox One
  9. Arduino - отправка температуры в Интернет через последовательный
  10. Arduino - разблокировка веб-шаблона