roboforum.ru

Технический форум по робототехнике.

Управление роботом балансиром по блютуз

Наше хобби — конструировать и программировать.
Демонстрация готовых роботов и устройств построенных своими руками.

Re: Управление роботом балансиром по блютуз

Сообщение difo » 26 мар 2017, 11:15

Большое спасибо за вашу помощь и участие .Но вы не учли МОЮ квалификацию.Это первый опыт .Собрал по готовой схеме.Залил готовый скейтч.
Но как двигаться дальше большой вопрос .Есть модуль блютуз НС -6 .Куда подключить понятно ТХ РХ . Но как это вставить в готовый скейтч
Вложения
balancing.rar
(5.92 КиБ) Скачиваний: 0
Неудача — это только повод начать заново, на сей раз умнее.
difo
 
Сообщения: 62
Зарегистрирован: 30 май 2014, 12:32

Re: Управление роботом балансиром по блютуз

Сообщение Eruman » 26 мар 2017, 12:32

К сожалению, вашей железки под рукой нет, проверить не могу, но вместе можно попробовать нащупать решение.

Для начала поэкспериментируйте с ардуинкой, залив простой скетч включения и выключения светодиода на порте D13.

Код для дуины примерно такой
Код: Выделить всёРазвернуть
void setup() {
  Serial.begin(9600);
}

void loop() {
  if (Serial.available()) {
    int inByte = Serial.read();
    if (inByte=='1') digitalWrite(13, HIGH);
    if (inByte=='0') digitalWrite(13, LOW);
  }
}


Проверить без ВТ можно так: код работает также с монитором порта в Arduino IDE, отправляйте 1 и 0 на скорости 9600, контролируйте свечение светодиода на D13.

Дальше играем со смартфоном. Пример для Ai я показал, нужно на сайт зайти, под гугл-аккаунтом, и собрать из кирпичей программу. Установите на андроидный смартфон программу https://play.google.com/store/apps/deta ... ion3&hl=ru

Сконнектите смартфон и среду, запустите программу. К ардуинке прикрутите ВТ (Rx к TX, и наоборот, землю к земле, питание к питанию). Смартфоном найдите модуль, подключите (пароль обычно 1234).

С помощью смартфона поиграйтесь со светодиодом. Если все включается, то можно переходить к управлению роботом. ;)
Соединяй и здравствуй.
Аватара пользователя
Eruman
 
Сообщения: 897
Зарегистрирован: 12 авг 2010, 15:10
Откуда: Астраханская обл.

Re: Управление роботом балансиром по блютуз

Сообщение difo » 27 мар 2017, 17:09

Спасибо за помощь .Первый раз пользуюсь этой программой. При попытке соединения. Пишет Error 507 .Вроде все собрал как у ВАС .Только добавил кнопки .Ваш скейтч работает через БЛЮТУЗ ТЕРМИНАЛ .Подскажите в чем проблема.
Вложения
Безымянный.png
Неудача — это только повод начать заново, на сей раз умнее.
difo
 
Сообщения: 62
Зарегистрирован: 30 май 2014, 12:32

Re: Управление роботом балансиром по блютуз

Сообщение difo » 31 мар 2017, 15:35

Привет всем кто не ответил. 4 дня трахал MIT AI .Пробовал и так и сяк и об косяк.Бесполезное зря потраченное время.Полез ГУГЛ там у всех
теже проблема ОШИБКА 507 515 и тд. Пробовал запустить на разных телефонах .Результат ПОЛНАЯ ХРЕНЬ, Нашел программу BLUETOOTH ELEKTRONICS Все работает замечательно .
Если я еще ВАМ уважаемый ERUMAN не очень надоел .Подскажите как можно приделать НС 05 в мой скейтч .Заранее благодарю . Или подскажите где искать .
Неудача — это только повод начать заново, на сей раз умнее.
difo
 
Сообщения: 62
Зарегистрирован: 30 май 2014, 12:32

Re: Управление роботом балансиром по блютуз

Сообщение Eruman » 01 апр 2017, 08:50

Я с детьми работаю, потому толстокожий :)
Не понял: как вы железяку к программному коду приделать желаете?

Железяка, она и есть железяка. Под неё ни драйверов, ни настроек не надо. Подключили к дуине к RX/TX, и радуемся.

Расшифруйте свою идею подробнее, если можно. И желательно с картинками :)
Соединяй и здравствуй.
Аватара пользователя
Eruman
 
Сообщения: 897
Зарегистрирован: 12 авг 2010, 15:10
Откуда: Астраханская обл.

Re: Управление роботом балансиром по блютуз

Сообщение difo » 01 апр 2017, 11:54

Прошу прощения за резкий тон.Вопрос вот в чем .Двигатели постоянно задействованы на удержание горизонта.Как внести в эту кучу действий управление .То есть можно
изменять скорость двигателей
изменять угол баланса гироскопа
или оставить как есть
Подрастает внук и чем его заинтересовать. Ну не делать же с ним табуретку. Ардуино идеальная платформа для этого.
После вашего предыдущего урока разобрался в работе НС 05 и ДОСЫТА НАИГРАЛСЯ LED.Спасибо поимел кучу знаний и радости .
Вложения
balancing.rar
(5.92 КиБ) Скачиваний: 0
Неудача — это только повод начать заново, на сей раз умнее.
difo
 
Сообщения: 62
Зарегистрирован: 30 май 2014, 12:32

Re: Управление роботом балансиром по блютуз

Сообщение Eruman » 02 апр 2017, 11:18

Удалось управлять светодиодом - отлично.
Теперь присмотримся к loop() балансира:
Код: Выделить всёРазвернуть
void loop() {
  /* Update all the values */
  uint8_t* data = i2cRead(0x3B,14); 
  accX = ((data[0] << 8) | data[1]);
  accY = ((data[2] << 8) | data[3]);
  accZ = ((data[4] << 8) | data[5]); 
  gyroY = ((data[10] << 8) | data[11]);
 
  /* Calculate the angls based on the different sensors and algorithm */
  accYangle = (atan2(accX,accZ)+PI)*RAD_TO_DEG;
 
  double gyroYrate = -((double)gyroY/131.0);
  gyroYangle += gyroYrate*((double)(micros()-timer)/1000000);

  kalAngleY = kalmanY.getAngle(accYangle, gyroYrate, (double)(micros()-timer)/1000000);
  timer = micros();
 
  in = kalAngleY;
  pid.Compute();
  if (out < 0) {
    pwm = -1 * out;
    analogWrite(11, 0);
    analogWrite(10, pwm);
  } else {
    pwm = out;
    analogWrite(10, 0);
    analogWrite(11, pwm);
  }
 
  delay(1); // The accelerometer's maximum samples rate is 1kHz
}

Команда pid.Compute() рассчитала переменную out, от которой зависит движение робота. Можно после этой команды вставить корректировку её значения, чтобы качать балансер в нужную сторону. Заведем специальную переменную, чтобы хранить число итераций, и переменную для приращения. Там, где в заголовке есть строчка double in, out, setpoint; добавим строчки
double delta;
int iter;

Они нам нужны чтобы корректура длилась некоторое время.
Код: Выделить всёРазвернуть
  if (Serial.available()) {
    int inByte = Serial.read();
    if (inByte=='1') {
      delta=10; // Приращение
      iter=50;  // Итерации
    }
    if (inByte=='0') {
      delta=-10;
      iter=50;
    }
  }
  if (iter>0) {
    iter--;
    out=out+delta;
  }


В сетапе все прекрасно, но скорость обмена высоковата. НС-05, вроде бы, держит 9600, а не 115200. Меняем.

Балуемся переменными. Публикуем результаты опытов. :)
Соединяй и здравствуй.
Аватара пользователя
Eruman
 
Сообщения: 897
Зарегистрирован: 12 авг 2010, 15:10
Откуда: Астраханская обл.

Re: Управление роботом балансиром по блютуз

Сообщение difo » 02 апр 2017, 22:12

Спасибо за ваше участие .Осмыслю немедленно напишу о результате.Не понятно с переменными .Буду заливать и пробовать.
Вложения
Безымянный.jpg
Неудача — это только повод начать заново, на сей раз умнее.
difo
 
Сообщения: 62
Зарегистрирован: 30 май 2014, 12:32

Re: Управление роботом балансиром по блютуз

Сообщение difo » 05 апр 2017, 17:22

Arduino: 1.8.1 (Windows 7), Плата:"Arduino Nano, ATmega328"

Изменены опции сборки, пересобираем все
balancing22:22: error: expected unqualified-id before 'if'

exit status 1
expected unqualified-id before 'if'

Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"

Ругается .Как исправить
Неудача — это только повод начать заново, на сей раз умнее.
difo
 
Сообщения: 62
Зарегистрирован: 30 май 2014, 12:32

Re: Управление роботом балансиром по блютуз

Сообщение Eruman » 06 апр 2017, 07:20

Там, где в заголовке есть строчка double in, out, setpoint; добавим строчки
double delta;
int iter;


Остальной код нужно добавить после команды pid.Compute() в функции loop()
Соединяй и здравствуй.
Аватара пользователя
Eruman
 
Сообщения: 897
Зарегистрирован: 12 авг 2010, 15:10
Откуда: Астраханская обл.

Re: Управление роботом балансиром по блютуз

Сообщение difo » 06 апр 2017, 10:32

Спасибо. Сейчас мы его СОЕДИНИМ и будем ЗДРАВСТВОВАТЬ.
Ecли я правильно понял то так.

in = kalAngleY;
pid.Compute();
loop();/Поставил в ваш код ; иначе ругается./
if (Serial.available()) {
int inByte = Serial.read();
if (inByte=='1') {
delta=10; // Приращение
iter=50; // Итерации
}
if (inByte=='0') {
delta=-10;
iter

}
}
if (iter>0) {
iter--;
out=out+delta;
}
if (out < 0) {
pwm = -1 * out;
Скейтч загрузился на УРА.
Но машинка НЕ реагирует на подачу питания
Загрузил старый Заработала.
Неудача — это только повод начать заново, на сей раз умнее.
difo
 
Сообщения: 62
Зарегистрирован: 30 май 2014, 12:32

Re: Управление роботом балансиром по блютуз

Сообщение Eruman » 06 апр 2017, 20:18

Нет, не так надо. Loop() уберите. И проверьте все фигурные скобки, сколько открывается и сколько закрывается. Должно быть поровну :)
Соединяй и здравствуй.
Аватара пользователя
Eruman
 
Сообщения: 897
Зарегистрирован: 12 авг 2010, 15:10
Откуда: Астраханская обл.

Re: Управление роботом балансиром по блютуз

Сообщение difo » 11 апр 2017, 23:38

Дружище Eruman. Не работает программа .Разберу и сделаем тележку с управлением по ВТ.Спасибо за потраченное время.
Неудача — это только повод начать заново, на сей раз умнее.
difo
 
Сообщения: 62
Зарегистрирован: 30 май 2014, 12:32

Re: Управление роботом балансиром по блютуз

Сообщение PANYTA » 10 май 2017, 14:17

Чтобы управлять движением, надо управлять "внутренней вертикалью", к которой держит ПИД регулятор.
А вот алгоритм этого управления - ???
Я свой нащупать никак не могу пока.

А канал управления - дело третье. Был у меня и COM порт (по проводу), и WiFi (ESP8266). Сейчас - HC-11 (COM порт по радио).
Аватара пользователя
PANYTA
 
Сообщения: 11
Зарегистрирован: 06 дек 2016, 13:17

Re: Управление роботом балансиром по блютуз

Сообщение difo » 29 май 2017, 16:39

Прекрасная работа .Интересная конструкция .НО управлять можно только если поставить сервомашинку и закрепить на ней модуль гироскопа.
Других способов управления пока я не придумал .Пробовали с ERUMANOM вводить поправки но не получилось.
Неудача — это только повод начать заново, на сей раз умнее.
difo
 
Сообщения: 62
Зарегистрирован: 30 май 2014, 12:32

Пред.След.

Вернуться в Наши проекты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8