Удалённое управление 6‑осевым роботами-манипулятором Arduino через веб-интерфейс
Компоненты и материалы
| Arduino UNO | ×1 |
| PHPoC WiFi Shield для Arduino | ×1 |
| 6DOF робот-манипулятор | ×1 |
О проекте
Для новичков рекомендую изучить: Arduino — Motor, Servo Motor, WiFi.
1. Демонстрация
(Видео в оригинале)
2. Пользовательский интерфейс


Робот имеет 6 моторов:
- Зона A: моторы 2, 3, 4 (три сустава манипулятора)
- Зона B: мотор 1 (база)
- Зона C: мотор 5 (вращение гриппера)
- Зона D: мотор 6 (гриппер)
3. Архитектура системы

4. Алгоритм работы
Клиентская часть (веб-интерфейс на JavaScript+HTML+CSS): при касании/клике получаем координаты (x,y). Для зоны A нужны геометрические расчёты углов моторов 2,3,4 (см. раздел 5).

Серверная часть (Arduino): получает набор углов, плавно двигает все 6 моторов одновременно. Для плавности каждый мотор движется малыми шагами с паузами. Шагов одинаковое количество (stepNum), но величина шага (step) разная для каждого мотора. stepNum выбирается максимальным.


5. Геометрические расчёты (зона A)
Задача: известны фиксированная точка C, целевая точка D (ввод пользователя), длины звеньев CB=b, BA=a, AD=d. Найти углы C, B, A. Предполагаем ∠B = ∠A = α. Вводим доп. точки и отрезки.
Расчёт через теорему косинусов в треугольнике CDE, решение квадратного уравнения для α, затем β = π – α, γ через систему уравнений из теоремы косинусов в треугольниках BDC и BDA. Итоговые углы моторов 2,3,4: (δ+γ), β, β.
6. Исходный код
Два файла:
- RobotArmWeb.ino — код Arduino
- Remote_arm.php — веб-приложение, загружается в PHPoC WiFi Shield. Также нужен файл
flywheel.png.

RobotArmWeb.ino (Arduino)
#include <Phpoc.h>
#include <Servo.h>
int angle_init[] = {90, 101, 165, 153, 90, 120};
int angle_offset[] = {0, 11, -15, -27, 0, 137};
int cur_angles[] = {90, 101, 165, 153, 90, 120};
int dest_angles[] = {0, 0, 0, 0, 0, 0};
int angle_max[] = {180, 180, 160, 120, 180, 137};
int angle_min[] = { 0, 0, 0, 20, 0, 75};
int direction[] = {1, 1, 1, 1, 1 ,-1};
int angleSteps[] = {3, 2, 2, 2, 4 ,4};
Servo servo[6];
PhpocServer server(80);
PhpocClient client;
int stepNum = 0;
void setup(){
Serial.begin(9600);
Phpoc.begin(PF_LOG_SPI | PF_LOG_NET);
server.beginWebSocket("remote_arm");
for(int i=0;i<6;i++) servo[i].attach(i+2);
for(int i=0;i<6;i++) servo[i].write(angle_init[i]);
}
void loop() {
client = server.available();
if(client) {
String angleStr = client.readLine();
if(angleStr) {
// парсинг 6 углов через запятую
int commaPos1 = -1;
for(int i=0;i<5;i++){
int commaPos2 = angleStr.indexOf(',', commaPos1+1);
int angle = angleStr.substring(commaPos1+1, commaPos2).toInt();
dest_angles[i] = angle * direction[i] + angle_offset[i];
commaPos1 = commaPos2;
}
int angle5 = angleStr.substring(commaPos1+1).toInt();
dest_angles[5] = angle5 * direction[5] + angle_offset[5];
stepNum = 0;
for(int i=0;i<6;i++){
int dif = abs(cur_angles[i] - dest_angles[i]);
int step = dif / angleSteps[i];
if(stepNum < step) stepNum = step;
}
}
}
if(stepNum > 0){
for(int i=0;i<6;i++){
int angleStepMove = (dest_angles[i] - cur_angles[i]) / stepNum;
cur_angles[i] += angleStepMove;
if(cur_angles[i] > angle_max[i]) cur_angles[i] = angle_max[i];
else if(cur_angles[i] < angle_min[i]) cur_angles[i] = angle_min[i];
servo[i].write(cur_angles[i]);
}
stepNum--;
delay(20);
}
}
remote_arm.php (PHP/JS веб-приложение)
<!DOCTYPE html>
<html>
<head>
<title>Arduino - Arm Robot - Web</title>
<meta name="viewport" content="width=device-width, initial-scale=0.9">
<style> body { text-align: center; } canvas { background-color: #FFFFFF; } </style>
<script>
// ... полный код веб-интерфейса с Canvas, WebSocket, геометрическими расчётами, управлением зонами A-D, отрисовкой робота и отправкой углов на Arduino ...
</script>
</head>
<body>
<h2>Arduino - Control Arm Robot via Web</h2>
<canvas id="servo"></canvas>
<p>WebSocket : <span id="ws_state">null</span><br></p>
<button id="wc_conn" type="button" onclick="wc_onclick();">Connect</button>
</body>
</html>
Схема
Требуется внешний источник питания для 6 моторов.

Производственный процесс
- Simple Pi Robot — Сборка 2WD автономного ровера на Raspberry Pi
- Arduino Power Control Center: N-FET, P-FET, реле и RTC
- Удаленное IoT-управление самодельной манипулятором
- Робот-ускользатор на сервоприводе: сборка на Arduino и HC-SR04
- Автономный линий-следующий робот на Arduino UNO
- DIY-контроллер увлажнителя на Arduino с реле: безопасная работа с высоким напряжением
- Arduino UNO + WiFi Shield: реальный график температуры в вебе через Serial
- LittleArm 2C: 3D-печатаемый робот-манипулятор на Arduino для STEM-обучения
- Автономный домашний помощник-робот: полный список деталей и руководство по настройке (ROS, Alexa, MoveIt)
- Набор для создания робота с умной внутренней навигацией на базе Arduino