Topic: Cерво sg90 двигается рывками по bluetooth
Добрый день товарищи не могу решить проблему следующего плана:
Собрал манипулятор на сервах sg90 с Ардуино Nano
Питание серво и БТ внешнее от блока питания ( 5в 2а 10W)
Управление через смартфон слайдерами
Если подключать ардуино через USB OTG кабель то сервы двигаются плавно никаких проблем
Если подключить через блютуз ( попробовал все и HM10 HC -05(06) ) то при медленном движении слайдера на телефоне серво двигается не плавно а с рывками, если слайдер сместить быстро то проблема уходит, на 9600 бод это заметно сильнее всего а на 115000 блютуз работает немного плавнее, но через USB OTG кабель на тех же 115200 таких проблем с рывками нет, при медленном движении слайдером на смартфоне сервы двигаются плавненько и точно позиционируются.
Блютуз подключен через Hard Serial по гайду на Remote XY примера с сервой
Не путать с дребезгом сервы! их нет, в простое сервы стоят неподвижно, так же не играет роли одна это серва или несколько, отсутствие нагрузки тоже роли не играет. Делэй RemoteXY_delay() усугубляет ситуацию
Вот код:
/*
-- New project --
This source code of graphical user interface
has been generated automatically by RemoteXY editor.
To compile this code using RemoteXY library 3.1.13 or later version
download by link http://remotexy.com/en/library/
To connect using RemoteXY mobile app by link http://remotexy.com/en/download/
- for ANDROID 4.15.01 or later version;
- for iOS 1.12.1 or later version;
This source code is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
*/
//////////////////////////////////////////////
// RemoteXY include library //
//////////////////////////////////////////////
// можете включить вывод отладочной информации в Serial на 115200
//#define REMOTEXY__DEBUGLOG
// определение режима соединения и подключение библиотеки RemoteXY
#define REMOTEXY_MODE__HARDSERIAL
// настройки соединения
#define REMOTEXY_SERIAL Serial
#define REMOTEXY_SERIAL_SPEED 115200
#define REMOTEXY_ACCESS_PASSWORD "1234"
#include <RemoteXY.h>
// конфигурация интерфейса RemoteXY
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] = // 65 bytes
{ 255,5,0,0,0,58,0,19,0,0,0,72,77,45,49,48,0,31,1,106,
200,1,1,5,0,4,12,9,84,18,128,2,26,4,13,46,85,18,128,2,
26,4,14,85,81,18,128,2,26,4,15,123,81,18,128,2,26,4,14,165,
81,18,128,2,26 };
// структура определяет все переменные и события вашего интерфейса управления
struct {
// input variables
int8_t slider_01; // oт 0 до 100
int8_t slider_02; // oт 0 до 100
int8_t slider_03; // oт 0 до 100
int8_t slider_04; // oт 0 до 100
int8_t slider_05; // oт 0 до 100
// other variable
uint8_t connect_flag; // =1 if wire connected, else =0
} RemoteXY;
#pragma pack(pop)
/////////////////////////////////////////////
// END RemoteXY include //
/////////////////////////////////////////////
#include <Servo.h>
Servo myservo1;
Servo myservo2;
Servo myservo3;
Servo myservo4;
Servo myservo5;
void setup()
{
RemoteXY_Init ();
myservo1.attach(2);
myservo2.attach(3);
myservo3.attach(4);
myservo4.attach(5);
myservo5.attach(6);
RemoteXY.slider_01 = 50;
RemoteXY.slider_02 = 50;
RemoteXY.slider_03 = 50;
RemoteXY.slider_04 = 50;
RemoteXY.slider_05 = 50;
// TODO you setup code
}
void loop()
{
RemoteXY_Handler ();
myservo1.writeMicroseconds(RemoteXY.slider_01 * 20 + 500);
myservo2.writeMicroseconds(RemoteXY.slider_02 * 20 + 500);
myservo3.writeMicroseconds(RemoteXY.slider_03 * 20 + 500);
myservo4.writeMicroseconds(RemoteXY.slider_04 * 20 + 500);
myservo5.writeMicroseconds(RemoteXY.slider_05 * 20 + 500);
// TODO you loop code
// используйте структуру RemoteXY для передачи данных
// не используйте функцию delay(), вместо нее используйте RemoteXY_delay()
}