Как измерить крутящий момент сервопривода с помощью Arduino
Узнайте, как с помощью Arduino измерить крутящий момент серводвигателей, которые вы собираетесь использовать в своих проектах.
В повседневной жизни нам часто от различных производителей предоставляется ряд статистических данных, которые в лучшем случае имеют слабую связь с опытом реальных пользователей.
Производители смартфонов утверждают, что их аккумуляторы служат дольше, чем на самом деле. Технологические компании рекламируют всю свою продукцию как самые компактные версии, а автомобильные компании могут похвастать ложными показателями экономии топлива.
Производители серводвигателей ничем не отличаются. Они предъявляют различные показатели, связанные с величиной крутящего момента, который могут создавать их двигатели.
В данном проекте мы создадим инструмент для измерения диапазона крутящего момента, создаваемого сервоприводами стандартного размера.
Таким образом, будет легко проверить, сможет ли конкретный сервопривод создавать крутящий момент, необходимый для какого-либо проекта.
Используя тензодатчик, Arduino Uno, каркас, напечатанный на 3D принтере, и несколько других деталей, вы сможете просто поместить серводвигатель на место тестирования и точно измерить крутящий момент, который он выдает.
Компоненты
- Arduino Uno;
- тензодатчик 20 кг;
- плата усилителя тензодатчика HX711;
- блок питания для макетной платы;
- беспаечная макетная плата;
- перемычки;
- 4 вставки M4;
- 2 винта M4 x 6 мм.
В дополнение к вышеперечисленным материалам для тестирования вам понадобится сервопривод размером для любительских проектов.
Как измерить крутящий момент серводвигателя
Крутящий момент рассчитывается путем умножения силы на расстояние. В данном проекте будет немного сложно получить силу, действующую на сервопривод. Для этого необходимо использовать тензодатчик.
С конструкцией и использованием тензодатчиков обычно связаны сложные детали, но для целей данного проекта тензодатчик представляет собой датчик, который позволяет компьютеру преобразовывать небольшие изменения напряжения в силу.
Используя тензодатчик, мы можем измерить точно расстояние между осью вращения сервопривода и рычагом на валу сервопривода.
Имейте в виду, что сервопривод будет давить на тензодатчик при попытке его поворота.
Принимая во внимание измерение силы с тензодатчика, а также вращение и длину рычага сервопривода, мы сможем рассчитать крутящий момент, создаваемый сервоприводом.
Сборка инструмента тестирования
Механическая конструкция инструмента тестирования проста и состоит из двух частей, напечатанных на 3D принтере, и пары крепежных элементов.
Никаких специальных параметров печати не требуется, поэтому для деталей подойдет любой жесткий пластик.
На самом деле, поскольку для данного проекта эстетика не является приоритетом, вы можете использовать большую высоту слоя, чтобы ускорить время печати.
Примечание: для печати использовался принтер Monoprice MP Select Mini с высотой слоя 0,3 мм.
На видео ниже показан процесс установки крепежных вставок.
Процесс сборки
Первым шагом при сборке инструмента измерения крутящего момента серводвигателя является установка крепежных вставок, которые позволят надежно фиксировать сервоприводы, а затем убирать их, не повреждая напечатанный на 3D принтере каркас.
Чтобы установить вставку, поместите ее на отверстие для крепежа сервопривода. Затем аккуратно вдавите вставку с помощью паяльника, нагретого примерно до 120°C. Не нажимайте на вставку слишком сильно. Пусть тепло сделает всю работу за вас и позволит вставке погрузиться в пластик. При удалении паяльника расплавленный пластик затвердевает вокруг вставки, создавая очень прочное соединение.
Затем установите тензодатчик в квадратное отверстие, но так, чтобы стрелка на датчике была направлена в сторону от сервопривода.
Тензодатчик должен вставляться плотно и ровно, чтобы избежать ошибок при измерении силы.
И наконец, большая плоская поверхность на напечатанном каркасе используется для макетной платы.
У макетной платы есть клейкая подложка. Просто снимите ее покрытие и приклейте плату к напечатанному на 3D принтере каркасу.
Заполнение макетной платы
Как только проектирование механических составляющих проекта завершено, мы можем начать работу над схемой.
Сначала подключите блок питания к макетной плате с противоположной стороны от тензодатчика. Блок питания расположен на макетной плате так, что его выводы подачи питания соединяются с шинами питания макетной платы.
На блоке питания находится переключатель, который контролирует выходное напряжение. Для данного проекта мы будем использовать 5 вольт. Там же есть выключатель питания. Пока выключите питание.
Теперь, перед установкой HX711 на макетную плату, необходимо выполнить подготовительный шаг.
Проблема в том, что плата HX711 почти такая же по ширине, как макетная плата. Если HX711 установить на макетную плату, мы не сможем подключить ее к тензодатчику.
Поэтому мы сначала разместим перемычки.
У HX711 на стороне, ближайшей к серводвигателю, есть четыре соединения. Используйте маленькие кусочки проволоки, чтобы сделать перемычки на макетной плате длиной примерно пять шагов.
Когда мы установим HX711 над установленными перемычками, у нас всё равно будет доступ к ее выводам для возможности подключения других перемычек.
Чтобы сделать этот шаг немного понятнее, ниже приведена фотография.
Как только перемычки установлены, установите плату HX711 рядом с источником питания. Убедитесь, что выводы платы совпадают с установленными перемычками.
Наконец, Arduino Uno будет расположена рядом с инструментом измерения крутящего момента.
Подключения питания:
- подключите вывод GND платы Arduino к выводу GND на макетной плате;
- подключите вывод GND платы HX711 к макетной плате;
- подключите черный провод серводвигателя к выводу GND Arduino;
- подключите вывод Vin платы Arduino к выводу Vcc на макетной плате;
- подключите вывод VCC платы HX711 к выводу Vcc на макетной плате;
- подключите красный провод серводвигателя к выводу 5V на Arduino.
Сигнальные соединения:
- подключите желтый провод серводвигателя к выводу D9 платы Arduino;
- подключите вывод DT платы HX711 к выводу D3 платы Arduino;
- подключите вывод SCK платы HX711 к выводу D2 платы Arduino.
Подключение тензодатчика:
- подключите красный провод тензодатчика к выводу E+ платы HX711;
- подключите черный провод тензодатчика к выводу E- платы HX711;
- подключите зеленый провод тензодатчика к выводу A- платы HX711;
- подключите белый провод тензодатчика к выводу A+ платы HX711.
Программирование Arduinio
Когда механическая и электрическая сборки завершены, последний шаг – загрузить прошивку в Arduino.
/*
Данный проект включает в себя простое устройство, используемое для
измерения выходного крутящего момента серводвигателя.
Устройство состоит из каркаса, напечатанного на 3D принтере, в который
вставляются сервопривод и тензодатчик. Сервопривод вращает вал в тензодатчик,
с которого считываются показания.
По показаниям силы тензодатчика и с учетом расстояния между центром
серводвигателя и тензодатчиком можно рассчитать крутящий момент.
*/
// Включение библиотек для взаимодействия с HX711 и серводвигателем
#include "HX711.h"
#include <Servo.h>
// Конфигурация
#define calibration_factor -7050.0 // Это значение получено с помощью скетча HX711_Calibration
int trialRuns = 5; // Это определяет количество измерений силы сервопривода на тензодатчике.
// Эти измерения будут усреднены для получения единственного показания.
float armLength = 2.75; // Это расстояние (в см) между центром вращения сервопривода и тензодатчиком.
// Оно зависит от механической конструкции испытательной установки.
// Определение соединений между HX711 и Arduino
#define DT 3 // Вывод DT на HX711 DT подключен к выводу D3 на Arduino
#define SCK 2 // Вывод SCK на HX711 подключен к выводу D2 на Arduino
// Инициализация HX711
HX711 loadCell(DT, SCK);
// Создание объекта серводвигателя
Servo testServo;
void setup()
{
// Запуск последовательного соединения
Serial.begin(9600);
Serial.println(" - Torque Measurement Tool - "); // Печать заголовка
Serial.println();
// Установить вывод, используемый для управления серводвигателем
testServo.attach(9);
loadCell.set_scale(calibration_factor); // Это значение получено с помощью скетча HX711_Calibration
loadCell.tare(); // Сбросить на ноль, чтобы компенсировать любую существующую нагрузку
// Чтобы начать испытание, вал серводвигателя должен быть прикреплен так,
// чтобы он соприкасался с тензодатчиком под углом 140 градусов к сервоприводу.
testServo.write(140); // Переместить сервопривод к тензодатчику
Serial.println("Initialization complete.");
Serial.println("Send 's' to begin testing. Send 'h' for help.");
Serial.println();
}
void loop()
{
// Если пользователь посылает 's' по последовательному порту, начать проверку крутящего момента
if(Serial.read() == 's' || Serial.read() == 'S')
{
measureTorque();
}
// Если пользователь посылает 'h' по последовательному порту, показать инструкции
if(Serial.read() == 'h' || Serial.read() == 'H')
{
Serial.println("Right now, the Arduino has moved the servo into its starting position.");
Serial.println("In the servo's current position, install the horn so that it is just touching the load cell.");
Serial.println("When you are ready, send 's' over Serial and the Arduino will begin testing the servo's torque.");
Serial.println("You will see the Arduino move the servo into the load cell five different times.");
Serial.println("Each time the servo hits the load cell, the Arduino will take a reading.");
Serial.println("Those readings will be averaged to calculate the torque delivered by the servo.");
Serial.println("Keep an eye on the Serial monitor to see the results.");
Serial.println();
Serial.println("Send 's' to begin testing.");
Serial.println();
}
}
void measureTorque()
{
/*
Чтобы проверить крутящий момент серводвигателя, Arduino переместит рычаг сервопривода так,
чтобы он давил на тензодатчик. Полученная сила создаст показания тензодатчика.
Arduino примет пять показаний, чтобы вычислить среднее значение силы.
Поскольку расстояние между центром вращения сервопривода и тензодатчиком известно из
конструкции каркаса, Arduino может рассчитать крутящий момент, создаваемый сервоприводом.
*/
Serial.println("Individual Readings: ");
float individualReadings[trialRuns]; // Этот массив будет хранить показания тензодатчика для пяти тестов
for(int i = 0; i < 5; i++)
{
testServo.write(180); // Отвести серводвигатель от тензодатчика
delay(1000); // Подождать перед движением серводвигателя
loadCell.tare(); // Сбросить показания на ноль, чтобы компенсировать любую существующую нагрузку
testServo.write(130); // Переместить серводвигатель к тензодатчику. Угол 130 градусов на самом деле
// находится внутри тензодатчика, поэтому сервопривод будет давить в
// направлении этого положения, прикладывая силу к тензодатчику.
delay(1000); // Wait for the servo to move
individualReadings[i] = loadCell.get_units(); // Take a measurment from the load cell
Serial.print(individualReadings[i]); // Print the measurment over Serial
Serial.print(" ");
}
// Теперь, когда у нас есть 5 отдельных показаний, усредняем их, чтобы получить одно
// среднее показание
float readingsSum = 0; // Создать переменную для хранения суммы всех показаний
// Пройтись по массиву и сложить все показания
for(int y = 0; y < trialRuns; y++)
{
readingsSum = readingsSum + individualReadings[y];
}
// Разделить на количество показаний, чтобы получить среднее значение
float averageReading = readingsSum / trialRuns;
Serial.println();
Serial.println();
Serial.println("Average Reading:"); // Напечатать среднее значение в последовательный порт
Serial.println(averageReading);
// Из среднего показания рассчитать крутящий момент, обеспечиваемый серводвигателем
// с помощью формулы T = F * r , где T - крутящий момент, F - показание тензодатчика (сила),
// r - радиус вращения (расстояние между серводвигателем и тензодатчиком).
// Единицы измерения крутящего момента - кг*см
float servoTorque = averageReading * armLength; // Calculate the torque
Serial.println();
Serial.println("Torque:"); // Print the torque
Serial.print(servoTorque);
Serial.println(" kgcm");
testServo.write(180); // После завершения проверки отвести серводвигатель от тензодатчика
}
Процедура тестирования, используемая Arduino, относительно проста.
Arduino загонит сервопривод в тензодатчик. Полученная сила на тензодатчике создаст показание, которое Arduino получит от HX711.
Arduino будет повторять измерения пять раз, получая пять отдельных показаний от тензодатчика. Эти пять отдельных показаний затем усредняются, чтобы получить значение силы, с которой сервопривод воздействует на тензодатчик.
Расстояние между центром вращения сервопривода и тензодатчиком рассчитывается исходя из конструкции каркаса. Arduino может рассчитать крутящий момент, создаваемый сервоприводом, по среднему показанию и расстоянию между тензодатчиком и сервоприводом.
Запуск теста
После всей работы по сборке инструмента тестирования и программированию Arduino, мы, наконец, можем измерить крутящий момент, создаваемый сервоприводами. Но сначала нам нужно установить тестируемый сервопривод в измерительный инструмент.
Чтобы установить сервопривод, просто вставьте его в корпус.
Сервопривод должен быть расположен так, чтобы вал двигателя находился ближе всего к тензодатчику.
Провода сервопривода выйдут через отверстие за тензодатчиком, откуда их можно подключить к Arduino.
Чтобы закрепить сервопривод на месте, используйте как минимум два винта M4 x 6 мм.
Данная система может работать полностью от USB порта вашего компьютера.
Если вы используете только питание USB, сервопривод будет работать от 5 В. Поскольку сервоприводы обычно работают от других напряжений, вы также можете использовать панель питания на макетной плате. Это позволит вам обеспечить сервопривод более высоким напряжением, чем 5 В от USB порта.
После включения системы откройте монитор последовательного порта. Вам будет предложено отправить через порт символ 's', когда вы будете готовы начать тест.
В этот момент Arduino должна начать отводить рычаг сервопривода от тензодатчика, и как только тестирование запустится, он вернется обратно.
Поскольку сервопривод пытается переместиться в положение внутри тензодатчика, он будет оказывать усилие на датчик.
Arduino будет измерять эту силу, преобразовывать ее в крутящий момент и отправлять результаты на монитор последовательного порта.
Ниже показано видео, демонстрирующее работу инструмента тестирования сервоприводов.