![]() |
|
|
#1 |
|
Junior Member
Регистрация: 05.06.2015
Сообщений: 27
Вес репутации: 0 ![]() |
Всем привет!
Я новичёк в робототехнике, но у меня есть желание, сделать воздушного робота на основе роутера TL-WR703N и прошивки CyberWtr. За основу взять летательный аппарат Зефир: https://youtu.be/1DIjHMABM7g Процесс сборки: https://youtu.be/K4EO5_E8euQ Компоненты электроники (то что есть в наличии): 1. KV2200 двигатель + XXD 30A ESC 2. Ardunio NANO CH340 3. Серво SG90 - 2 шт. 4. Usb Hub. 5. Роутер WT3020 6. Webcam Logitech QuickCam E3500 Щас пытаюсь разобраться с управлением сервомоторов. Скетч: Код:
#include <CyberLib.h>
#include <Servo.h>
Servo leftservo;
Servo rightservo;
long previousMillis;
uint8_t LedStep = 0; // Счетчик
int i;
boolean light_stat;
uint8_t inByte;
#define init {D4_Out; D5_Out; D6_Out; D7_Out; D8_Out; D11_Out; D12_Out;}
void setup()
{
leftservo.attach(9); // Подключение сервоприводов к порту
rightservo.attach(10); // Подключение сервоприводов к порту
init; // Инициализация портов
D11_Low; // Динамик OFF
randomSeed(A6_Read); //Получить случайное значение
horn(); //звуковое оповещение готовности робота
UART_Init(57600);// Инициализация порта для связи с роутером
leftservo.write(90); // Повернуть левый серво на 0 градусов
rightservo.write(90); // Повернуть правый серво на 0 градусов
}
void loop()
{
if (UART_ReadByte(inByte)) //Если что то пришло
{
switch (inByte) // Смотрим какая команда пришла
{
case 'x': // Газ
gas();
break;
case 'W': // Движение вниз
bottom();
break;
case 'D': // Поворотjт влево
robot_rotation_left();
break;
case 'A': // Поворот вправо
robot_rotation_right();
break;
case 'S': // Движение назад
top();
break;
case 'U': // Камера поднимается вверх
break;
case 'J': // Камера опускается вниз
break;
case 'H': // Камера поворачивается вправо
break;
case 'K': // Камера поворачивается влево
break;
case 'B': // Бластер
D12_High;
break;
case 'C': // Клаксон
horn();
break;
case 'V': // Включить/Выключить фары
if(light_stat)
{
D8_Low;
light_stat=false;
} else
{
D8_High;
light_stat=true;
}
break;
}
}
}
void horn()
{
for(uint8_t i=0; i<12; i++) beep(70, random(100, 2000)); //звуковое оповещение
}
void bottom()
{
leftservo.write(45); // Повернуть левый серво влево на 45 градусов
rightservo.write(45); // Повернуть правый серво влево на 45 градусов
delay(150);
leftservo.write(90); // Повернуть левый серво влево на 45 градусов
rightservo.write(90); // Повернуть правый серво влево на 45 градусов
}
void gas()
{
leftservo.write(45); // Повернуть левый серво влево на 45 градусов
rightservo.write(45); // Повернуть правый серво влево на 45 градусов
}
void top()
{
leftservo.write(135); // Повернуть левый серво влево на 45 градусов
rightservo.write(135); // Повернуть правый серво влево на 45 градусов
delay(150);
leftservo.write(90); // Повернуть левый серво влево на 45 градусов
rightservo.write(90); // Повернуть правый серво влево на 45 градусов
}
void robot_rotation_left()
{
leftservo.write(45); // Повернуть левый серво влево на 45 градусов
rightservo.write(135); // Повернуть правый серво влево на 45 градусов
delay(150);
leftservo.write(90); // Повернуть левый серво влево на 45 градусов
rightservo.write(90); // Повернуть правый серво влево на 45 градусов
}
void robot_rotation_right()
{
leftservo.write(135); // Повернуть левый серво влево на 45 градусов
rightservo.write(45); // Повернуть правый серво влево на 45 градусов
delay(150);
leftservo.write(90); // Повернуть левый серво влево на 45 градусов
rightservo.write(90); // Повернуть правый серво влево на 45 градусов
}
http://www.poprobot.ru/home/zapuskbe...rnogodvigatela Если со всем этим разберусь, то сборка Зефирки и монтажа электроники много времени не займет. Последний раз редактировалось Goblin; 06.06.2015 в 07:20. |
|
|
|
|
|
#2 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Радиус действия WiFi слабоват для такого аппарата
Еще будет задержка при передачи команд, видео будет смазанным, так как динамика картинки достаточно высокая |
|
|
|
|
|
#3 |
|
Junior Member
Регистрация: 05.06.2015
Сообщений: 27
Вес репутации: 0 ![]() |
Направленная антена решает эту проблему дальности полета. К примеру с такой антеной http://russian.signalantennas.com/se...00v-89803.html можно увеличить дальность до нескольких км. А вот задержка команд это печально... Можно с этим что-то придумать? Задержка видео не настолько критична.
|
|
|
|
|
|
#4 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Можно попробовать слать команды по telnet или netcat
задержки будут минимальными |
|
|
|
|
|
#5 |
|
Junior Member
Регистрация: 05.06.2015
Сообщений: 27
Вес репутации: 0 ![]() |
|
|
|
|
|
|
#6 |
|
Junior Member
Регистрация: 05.06.2015
Сообщений: 27
Вес репутации: 0 ![]() |
Админ подскажи пож-та, в моем скетче не правильно работают сервы, при подачи команды они почему то крутятся только в 1-ну сторону до 90 градусов.
А вот в этом примере все норм работает: Код:
/*
Arduino Servo
*/
#include "Servo.h"
Servo servoMain; // Объект Servo
Servo servoMain1; // Объект Servo
void setup()
{
servoMain.attach(10); // Servo присоединен к 10 выводу
servoMain1.attach(9); // Servo присоединен к 10 выводу
}
void loop()
{
servoMain.write(90); // Центровать серво
servoMain1.write(90); // Центровать серво
delay(150); // Пауза 0,15 сек.
servoMain.write(45); // Повернуть серво влево на 45 градусов
servoMain1.write(135); // Повернуть серво вправо на 45 градусов
delay(150); // Пауза 0,15 сек.
servoMain.write(135); // Повернуть серво вправо на 45 градусов
servoMain1.write(45); // Повернуть серво влево на 45 градусов
delay(150); //Пауза 0,15 сек.
servoMain.write(90); // Центровать серво
servoMain1.write(90); //Центровать серво
delay(150); // Пауза 0,15 сек.
}
Последний раз редактировалось Goblin; 06.06.2015 в 07:55. |
|
|
|
|
|
#7 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Не понимаю, зачем поварачивать сервы через каждые 150мс
Они не успеют повернуться как придет следующая команда Весь этот код можно смело упростить на две строчки, которые я привел ниже, от delay лучше отказаться так как они будут торможить систему оправлением PHP код:
PHP код:
|
|
|
|
|
|
#8 | |
|
Junior Member
Регистрация: 05.06.2015
Сообщений: 27
Вес репутации: 0 ![]() |
Цитата:
PHP код:
Щас попробую 2-ой вариант управления сервами. |
|
|
|
|
|
|
#9 | |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Ну так для чего опять теже не нужные две строчки?
Цитата:
|
|
|
|
|
|
|
#10 |
|
Junior Member
Регистрация: 05.06.2015
Сообщений: 27
Вес репутации: 0 ![]() |
PHP код:
PHP код:
Последний раз редактировалось Goblin; 07.06.2015 в 13:04. |
|
|
|
![]() |
| Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|