Я недавно купил комплект для роботизированной руки 4 DOF (Степень свободы) . Я успешно собрал его, и теперь я хочу запрограммировать Arduino для управления им.
Я знаю, как заставить сервоприводы работать, используя arduino, но не мог понять, как переместить руку в определенные позиции.
Я попытался вручную создать двумерный массив с значениями вращения для каждого двигателя в градусах. Это работает, но очень сложно получить значения и создать массив. В настоящее время я скорректировал значения методом проб и ошибок.
Массив, который я создал вручную:
short first[] = { 180 , 80 , 0 , 90 };
short pos[][4] =
{
{ 180 , 80 , 00 , 85 },
{ 180 , 85 , 00 , 80 },
{ 180 , 90 , 00 , 75 },
{ 180 , 95 , 00 , 75 },
{ 180 , 100 , 0 , 70 },
{ 180 , 110 , 0 , 70 },
{ 180 , 115 , 0 , 70 },
{ 180 , 120 , 0 , 65 },
{ 180 , 125 , 0 , 65 },
{ 180 , 130 , 0 , 65 },
{ 180 , 135 , 0 , 65 },
{ 180 , 140 , 0 , 65 },
{ 180 , 145 , 0 , 65 },
{ 180 , 150 , 0 , 65 },
{ 180 , 150 , 0 , 70 },
{ 180 , 150 , 0 , 75 },
{ 180 , 150 , 0 , 80 },
{ 180 , 150 , 0 , 90 },
{ 180 , 145 , 0 , 90 },
{ 180 , 140 , 0 , 90 },
{ 180 , 135 , 0 , 90 },
{ 180 , 130 , 0 , 90 },
{ 180 , 125 , 0 , 90 },
{ 180 , 120 , 0 , 90 },
{ 180 , 115 , 0 , 90 },
{ 180 , 110 , 0 , 90 },
{ 170 , 110 , 0 , 90 },
{ 160 , 110 , 0 , 90 },
{ 150 , 110 , 0 , 90 },
{ 140 , 110 , 0 , 90 },
{ 130 , 110 , 0 , 90 },
{ 130 , 115 , 0 , 90 },
{ 120 , 120 , 0 , 90 },
{ 120 , 125 , 0 , 90 },
{ 120 , 130 , 0 , 90 },
{ 120 , 135 , 0 , 90 },
{ 120 , 137 , 0 , 90 },
{ 120 , 139 , 0 , 90 },
{ 120 , 140 , 0 , 85 },
{ 120 , 140 , 0 , 80 },
{ 120 , 140 , 0 , 75 },
{ 120 , 140 , 0 , 70 },
};
Полный код, который я написал :
/*
* claws - 90 close 75 open
* elbow - 0 to 100
* sholder - 30 to 180
*/
Servo Servos[4];
void setup()
{
Servos[0].attach(3);
Servos[1].attach(5);
Servos[2].attach(9);
Servos[3].attach(11);
reset();
run();
Servos[0].detach();
Servos[1].detach();
Servos[2].detach();
Servos[3].detach();
}
void run()
{
for(int i=0; i<sizeof(pos) / sizeof(short) /4 ; i++)
{
for(int j=3; j>=0; j--)
{
Servos[j].write(pos[i][j]);
delay(15);
}
delay(15);
}
for(int i=-1+ sizeof(pos) / sizeof(short) /4;i>=0 ; i--)
{
for(int j=3; j>=0; j--)
{
Servos[j].write(pos[i][j]);
delay(15);
}
delay(15);
}
delay(3000);
}
void reset()
{
for(int i=3; i>=0; i--)Servos[i].write(first[i]);
}
void loop(){}
Я хочу, чтобы какая-то функция вычисляла значения массива для любой заданной координаты или чего-то подобного (это движения каждого сервопривода для позиционирования конца рычага в этой точке)
Фотография руки :
Вот страница продукта фактической руки :
https://www.amazon.in/gp/product/B07LDNY9J3/ref=ppx_yo_dt_b_asin_title_o03_s00?ie=UTF8&psc=1