Множество интересных статей имеется про платформу Arduino, которую можно смело заказать на интернет аукционе Ebay. К данной платформе имеется множество модулей и статей в интернете, поэтому захотелось сделать что-то интересное, пусть и не всегда полезное в быту.
По работе имеется опыт управления платформами с различными степенями свободы, поэтому первым делом захотелось сделать шести-степенную платформу (Stewart Platform), но к сожалению пришло только четыре серво привода, поэтому для начала сделаем трех-степенную платформу.
Итак для построения данного агрегата нам понадобятся следующие комплектующие:
Стоимость платы и контроллера Arduino Mega Kit на аукционе колеблется от $50. С покупкой сервоприводов из Китая тоже не должно возникнуть проблем, стоимость одной штуки около $2. Фанеру можно найти на даче или в магазине. Три скрепки на работе. Самое сложное добыть стиракозавра, обычно данные вид животных можно увидеть на почте или в детском магазине.
Основная задача изготовления платформы заключается в выпиливании основания платформы и самой платформы из фанеры. Управляющие элементы размещаются внутри окружности под углами 120 градусов.
Выпиливание основания платформы размером 10x10 см, а также самой платформы размером 8x8 см. Саму платформу можно оставить квадратной, но для удобства был выпилен треугольник. В месте крепления опор сделаны спилы.
Для сверления первоначально необходимо прочертить окружность, разделенную на три части. В лучах под 120 градусов необходимо приложить сервоприводы, а также разметить точки для сверления.
По готовой разметке высверлить отверстия в зависимости от способа крепления. Для крепления жгутами (наилучший вариант) отверстия должны быть диаметром 4 мм. В случае крепления проволокой (как в моем случае) хватит отверстий диаметром 2 мм.
Для крепления не нашлось ничего кроме скрепок (уже после демонстрации на работе был предложен другой вариант). Скрепки необходимо сделать в виде буквы «Г», которая закрепляется на сервоприводе, и вставляется в крепление на площадке платформы.
На работе мне предложили вместо скрепок использовать шаровое крепление от вертолета Trex 450 (уже заказано из Китая). С данным типом креплений платформа будет более жесткой в конструкции.
Сборка платформы осуществляется в следующей последовательности:
В итоге получается основание платформы, представленное на рисунке ниже. Время выполнения 1 час.
Для подключения первоначально был использован способ, описанный в официальной документации на сайте Arduino. При подключении нескольких сервоприводов питания не хватит, поэтому желательно «запитать» три привода отдельно через стабилизатор напряжения на 5В (подробное описание подключения).
В случае подключения трех сервоприводов на Arduino питания будет не хватать и будет срабатывать защита. Подключение трех приводов через стабилизатор на макетной плате представлено на рисунке ниже:
Управление из Arduino будет осуществляться с помощью 1, 2, 3 аналоговых выходов (Analog Pins) с платы. В моем случае питание также подключено с платы. Пример подключения показан на рисунке:
, где слева направо: синий — 5В, желтый — «земля», красный — привод 1, черный — привод 2, желтый привод 3.
Вся схема подключения имеет вид:
Управление платформой осуществляется с компьютера через последовательный порт, предоставляемый Arduino. Работа с портом осуществляется средствами библиотеки Serial, а управление сервоприводами средствами библиотеки SoftwareServo.
Для разбора команды из последовательного порта используется следующая структура на языке Си:
По работе имеется опыт управления платформами с различными степенями свободы, поэтому первым делом захотелось сделать шести-степенную платформу (Stewart Platform), но к сожалению пришло только четыре серво привода, поэтому для начала сделаем трех-степенную платформу.
Инструменты и материалы
Итак для построения данного агрегата нам понадобятся следующие комплектующие:
Найменование | Количество |
Arduino Mega | 1 шт. |
Сервопривод HXT900 | 3 шт. |
Фанера | 1 шт. |
Стабилизатор напряжения на 5В | 1 шт. |
Скрепка канцелярская | 3 шт. |
Крепление для провода | 3 шт. |
USB Шнур | 1 шт. |
Блок питания | 1 шт. |
Соединительные провода | 13 шт. |
Стиракозавр | 1 шт. |
Стоимость платы и контроллера Arduino Mega Kit на аукционе колеблется от $50. С покупкой сервоприводов из Китая тоже не должно возникнуть проблем, стоимость одной штуки около $2. Фанеру можно найти на даче или в магазине. Три скрепки на работе. Самое сложное добыть стиракозавра, обычно данные вид животных можно увидеть на почте или в детском магазине.
Изготовление платформы
Основная задача изготовления платформы заключается в выпиливании основания платформы и самой платформы из фанеры. Управляющие элементы размещаются внутри окружности под углами 120 градусов.
1 Шаг — Выпиливание
Выпиливание основания платформы размером 10x10 см, а также самой платформы размером 8x8 см. Саму платформу можно оставить квадратной, но для удобства был выпилен треугольник. В месте крепления опор сделаны спилы.
2 Шаг — Сверление
Для сверления первоначально необходимо прочертить окружность, разделенную на три части. В лучах под 120 градусов необходимо приложить сервоприводы, а также разметить точки для сверления.
По готовой разметке высверлить отверстия в зависимости от способа крепления. Для крепления жгутами (наилучший вариант) отверстия должны быть диаметром 4 мм. В случае крепления проволокой (как в моем случае) хватит отверстий диаметром 2 мм.
3 Шаг — Подготовка креплений
Для крепления не нашлось ничего кроме скрепок (уже после демонстрации на работе был предложен другой вариант). Скрепки необходимо сделать в виде буквы «Г», которая закрепляется на сервоприводе, и вставляется в крепление на площадке платформы.
На работе мне предложили вместо скрепок использовать шаровое крепление от вертолета Trex 450 (уже заказано из Китая). С данным типом креплений платформа будет более жесткой в конструкции.
4 Шаг — Сборка платформы
Сборка платформы осуществляется в следующей последовательности:
- продевание поволоки в основание платформы;
- крепление сервоприводов на основании;
- установка креплений для проводов на площадку платформы;
- установка креплений в виде буквы «Г» на сервоприводы.
Итоги
В итоге получается основание платформы, представленное на рисунке ниже. Время выполнения 1 час.
Сборка схемы
Для подключения первоначально был использован способ, описанный в официальной документации на сайте Arduino. При подключении нескольких сервоприводов питания не хватит, поэтому желательно «запитать» три привода отдельно через стабилизатор напряжения на 5В (подробное описание подключения).
В случае подключения трех сервоприводов на Arduino питания будет не хватать и будет срабатывать защита. Подключение трех приводов через стабилизатор на макетной плате представлено на рисунке ниже:
Управление из Arduino будет осуществляться с помощью 1, 2, 3 аналоговых выходов (Analog Pins) с платы. В моем случае питание также подключено с платы. Пример подключения показан на рисунке:
, где слева направо: синий — 5В, желтый — «земля», красный — привод 1, черный — привод 2, желтый привод 3.
Вся схема подключения имеет вид:
Программирование Arduino
Управление платформой осуществляется с компьютера через последовательный порт, предоставляемый Arduino. Работа с портом осуществляется средствами библиотеки Serial, а управление сервоприводами средствами библиотеки SoftwareServo.
Для разбора команды из последовательного порта используется следующая структура на языке Си:
struct _set_pos_cmd_t
{
char cmd;
int pos1;
int pos2;
int pos3;
};
typedef _set_pos_cmd_t set_pos_cmd_t;
* This source code was highlighted with Source Code Highlighter.
Соответственно указываются три позиции в целочисленном виде. Также указывается байт команды, в нашем случае команда записи позиций в контроллер имеет код 0xC1.
Установка позиций сервоприводов осуществляется с помощью функции update_positions, которая отображает значения из команды в значения угла поворота вала сервопривода.
void update_positions()
{
int val = map(servo_position1, VALUE_MINIMUM, VALUE_MAXIMUM, SERVO_MINIMUM, SERVO_MAXIMUM);
myservo1.write(val);
val = map(servo_position2, VALUE_MINIMUM, VALUE_MAXIMUM, SERVO_MINIMUM, SERVO_MAXIMUM);
myservo2.write(val);
val = map(servo_position3, VALUE_MINIMUM, VALUE_MAXIMUM, SERVO_MINIMUM, SERVO_MAXIMUM);
myservo3.write(val);
delay(5);
SoftwareServo::refresh();
}
* This source code was highlighted with Source Code Highlighter.
Итоговая программа для Arduino
- #include <SoftwareServo.h>
-
- #define SET_CMD 0xC1
-
- #define COMMAND_ERROR 0x01
- #define FORMAT_ERROR 0x02
-
- #define VALUE_MINIMUM 0
- #define VALUE_MAXIMUM 4096
-
- #define SERVO_MINIMUM 0
- #define SERVO_MAXIMUM 90
-
- SoftwareServo myservo1;
- SoftwareServo myservo2;
- SoftwareServo myservo3;
-
- int servo_position1 = 0;
- int servo_position2 = 0;
- int servo_position3 = 0;
-
- struct _set_pos_cmd_t
- {
- char cmd;
- int pos1;
- int pos2;
- int pos3;
- };
-
- typedef _set_pos_cmd_t set_pos_cmd_t;
-
- void setup()
- {
- pinMode(13, OUTPUT);
- myservo1.attach(A0);
- myservo2.attach(A1);
- myservo3.attach(A2);
- Serial.begin(115200);
- }
-
- boolean readBytes(char *bytes, int count)
- {
- char data;
-
- for(int counter = 0; counter < count; ++counter)
- {
- data = Serial.read();
- bytes[counter] = data;
- }
-
- Serial.flush();
-
- return true;
- }
-
- void set_positions(char *data)
- {
- set_pos_cmd_t *command = (set_pos_cmd_t*)data;
-
- servo_position1 = command->pos1;
- servo_position2 = command->pos2;
- servo_position3 = command->pos3;
- }
-
- void update_positions()
- {
- int val = map(servo_position1, VALUE_MINIMUM, VALUE_MAXIMUM, SERVO_MINIMUM, SERVO_MAXIMUM);
- myservo1.write(val);
- val = map(servo_position2, VALUE_MINIMUM, VALUE_MAXIMUM, SERVO_MINIMUM, SERVO_MAXIMUM);
- myservo2.write(val);
- val = map(servo_position3, VALUE_MINIMUM, VALUE_MAXIMUM, SERVO_MINIMUM, SERVO_MAXIMUM);
- myservo3.write(val);
- delay(5);
- SoftwareServo::refresh();
- }
-
- void loop()
- {
- int availableBytes = 0;
- char buffer[128];
-
- if((availableBytes = Serial.available()) > 0)
- {
- if(!readBytes(buffer, availableBytes))
- {
- Serial.write(FORMAT_ERROR);
- }
-
- switch(buffer[0])
- {
- case SET_CMD:
- set_positions(buffer);
- Serial.write(0xDA);
- break;
- }
- }
-
- update_positions();
- }
* This source code was highlighted with Source Code Highlighter.
Программа управления
Программа управления трехстепенной платформой написана на языке C#, которая в первоначальном виде имела упрощенный вид:
Последняя версия программы управления платформой приняла вид:
UPD:исходный код класса управления
Видео реализации
Спасибо за внимание!