Приветствую Вас, Гость
Чтобы писать сообщения на форуме, авторизуйтесь используя социальную сеть!

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум » Роботы » Нужна помощь? » Вопросы по програмированию Р/У машинки
Вопросы по програмированию Р/У машинки
zaratustraДата: Понедельник, 01.09.2014, 07:08 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 12
Репутация: 0
Статус: Offline
Доброго времени суток друзья, собираю Р\У машинку,  не работает DC двигатель заднего моста. 

Вот тест драйвера двигателя:

Код
/*
  L9110 motor driver controlling 2 small DC motors  
  */
   
const int AIA = 9;  // (pwm) pin 9 connected to pin A-IA  
const int AIB = 5;  // (pwm) pin 5 connected to pin A-IB  
const int BIA = 10; // (pwm) pin 10 connected to pin B-IA   
const int BIB = 6;  // (pwm) pin 6 connected to pin B-IB  
   
byte speed = 255;  // change this (0-255) to control the speed of the motors  
   
void setup() {
   pinMode(AIA, OUTPUT); // set pins to output
   pinMode(AIB, OUTPUT);
   pinMode(BIA, OUTPUT);
   pinMode(BIB, OUTPUT);
}
   
void loop() {
   forward();  
   delay(1000);
   backward();
   delay(1000);
   left();
   delay(1000);
   right();
   delay(1000);
}
   
void backward()
{
   analogWrite(AIA, 0);
   analogWrite(AIB, speed);
   analogWrite(BIA, 0);
   analogWrite(BIB, speed);
}
   
void forward()
{
   analogWrite(AIA, speed);
   analogWrite(AIB, 0);
   analogWrite(BIA, speed);
   analogWrite(BIB, 0);
}
   
void left()
{
   analogWrite(AIA, speed);
   analogWrite(AIB, 0);
   analogWrite(BIA, 0);
   analogWrite(BIB, speed);
}
   
void right()
{
   analogWrite(AIA, 0);
   analogWrite(AIB, speed);
   analogWrite(BIA, speed);
   analogWrite(BIB, 0);
}

Добавлено (01.09.2014, 07:08)
---------------------------------------------
А в моем коде ни хрена не работает, кроме светодиода, не пойму почему, что я делаю не так?!



Код
#include <BTCA2A.h>
#include <Servo.h>  

btca2a btca2a; // создаем BTCA2A класс

int led = 13;

int N = 8; // Пин мотора направление (I - черный   
int M = 9; // Пин мотора ШИМ (IA)-белый  

byte speed = 255;  // change this (0-255) to control the speed of the motors  

void setup() {
     
   btca2a.SetupHardwareSerial(0, 115200); // Номер порта, Скорость
    
   pinMode(M, OUTPUT); // Инициализируем пин мотора ШИМ
   pinMode(N, OUTPUT); // Инициализируем пин мотора направление
    
}

void loop(){
    
   btca2a.ReadCommand(); // Обязательная часть для работы библиотеки. Считывает принятые данные и изменяет статус кнопок.

   if (btca2a.ButtonPressed(KEYCODE_BUTTON_START)){ //Светодиод КНОПКА СТАРТ Пин 13
     digitalWrite(led, HIGH);
   }
   else{
     digitalWrite(led, LOW);
   }
     
    // Движение вперед  
   if (btca2a.ButtonPressed(KEYCODE_DPAD_UP)){
     analogWrite(M, speed);
     analogWrite(N, 0);
   }
   else{
     analogWrite(M, 0);
     analogWrite(N, 0);
   }
    
    // Движение назад
   if (btca2a.ButtonPressed(KEYCODE_DPAD_DOWN)){
     analogWrite(M, 0);
     analogWrite(N, speed);
   }
   else{
     analogWrite(M, 0);
     analogWrite(N, 0);
   }
}

помогите пожалуйста, драйвер DC двигателя вот: L9110 H-bridge http://www.bajdi.com/l9110-h-bridge-module/
 
ZSeregaAДата: Вторник, 02.09.2014, 01:03 | Сообщение # 2
Лейтенант
Группа: Администраторы
Сообщений: 61
Репутация: 2
Статус: Offline
Цитата zaratustra ()
А в моем коде ни хрена не работает, кроме светодиода, не пойму почему, что я делаю не так?!
У вас не не правильно написано условие в коде. У вас в условии «Движение вперед», если не нажата кнопка вверх, тогда моторам поступает команда остановки. Тоже самое прописано в условии «Движение назад». Получается если нажата кнопка вверх то в условии «Движение назад» кнопка вниз не нажата, посылается команда остановки моторов. Ниже я выделил эти места красным.

// Движение вперед
if (btca2a.ButtonPressed(KEYCODE_DPAD_UP)){
analogWrite(M, speed);
analogWrite(N, 0);
}
else{
analogWrite(M, 0);
analogWrite(N, 0);
}


// Движение назад
if (btca2a.ButtonPressed(KEYCODE_DPAD_DOWN)){
analogWrite(M, 0);
analogWrite(N, speed);
}
else{
analogWrite(M, 0);
analogWrite(N, 0);
}


Нужно убрать эти else и добавить отдельное условие в котором если не нажаты кнопки управления, моторам подается команда стоп. А чтобы она не подовалась постоянно будем учитывать её статус в переменной StopMotor. Это выглядит вот так.

// СТОП
if (btca2a.ButtonReleased(KEYCODE_DPAD_UP) && btca2a.ButtonReleased(KEYCODE_DPAD_DOWN) && !StopMotor){
analogWrite(M, 0);
analogWrite(N, 0);
StopMotor = true; // записываем что моторы остановлены
}

А вот вам исправленный код (прикрепил к сообщению)
Код
#include <BTCA2A.h>    
#include <Servo.h>     

btca2a btca2a; // создаем BTCA2A класс    

int led = 13;    

int N = 8; // Пин мотора направление (I - черный      
int M = 9; // Пин мотора ШИМ (IA)-белый

boolean StopMotor = false; // для учета остановки моторов

byte speed = 255;  // скорость изменяйте от 0 до 255    

void setup() {    

     btca2a.SetupHardwareSerial(0, 115200); // Номер порта, Скорость    

     pinMode(M, OUTPUT); // Инициализируем пин мотора ШИМ    
     pinMode(N, OUTPUT); // Инициализируем пин мотора направление    

}    

void loop(){    

     btca2a.ReadCommand(); // Обязательная часть для работы библиотеки. Считывает принятые данные и изменяет статус кнопок.    

     if (btca2a.ButtonPressed(KEYCODE_BUTTON_START)){ //Светодиод КНОПКА СТАРТ Пин 13    
       digitalWrite(led, HIGH);    
     }    
     else{    
       digitalWrite(led, LOW);    
     }    

     // Движение вперед     
     if (btca2a.ButtonPressed(KEYCODE_DPAD_UP)){    
       StopMotor = false; // записываем что моторы расторможены
       analogWrite(M, speed);    
       analogWrite(N, 0);    
     }

     // Движение назад    
     if (btca2a.ButtonPressed(KEYCODE_DPAD_DOWN)){    
       StopMotor = false; // записываем что моторы расторможены
       analogWrite(M, 0);    
       analogWrite(N, speed);    
     }    

     // СТОП
     if (btca2a.ButtonReleased(KEYCODE_DPAD_UP) && btca2a.ButtonReleased(KEYCODE_DPAD_DOWN) && !StopMotor){    
       analogWrite(M, 0);    
       analogWrite(N, 0);    
       StopMotor = true; // записываем что моторы остановлены
     }
} // Конец loop
И ещё, кнопка старт у вас работает по тому же принципу что и моторы. При нажатии светодиод просто мигает? Если хотите чтобы машинка работала только после нажатия кнопки старт, могу помочь в написании кода, но советую попробовать самому. Пишите...
Прикрепления: bt_mashina_01.ino(2Kb)


DEV, BUILD, HACK, REPEAT;

Вконтакте YouTube Twitter facebook
 
zaratustraДата: Вторник, 02.09.2014, 16:23 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 12
Репутация: 0
Статус: Offline
Светодиод 13 пин - горит пока удерживаешь кнопку СТАРТ,  но это так для проверки и визуального контроля соединения, на этапе разработки smile   В последствии хотелось бы поворотники, аварийку, ближний дальний свет, задний ход.  а если это  еще и со звуком будет...   

Кажется дошло в чем я ошибался!  Спасибо!   

А как тут картинки добавлять?
 
ZSeregaAДата: Вторник, 02.09.2014, 23:28 | Сообщение # 4
Лейтенант
Группа: Администраторы
Сообщений: 61
Репутация: 2
Статус: Offline
Цитата zaratustra ()
В последствии хотелось бы поворотники, аварийку, ближний дальний свет, задний ход.  а если это  еще и со звуком будет...
Могу помочь с написанием кода, но я любитель.
Цитата zaratustra ()
А как тут картинки добавлять?
Если ссылкой то при написании сообщения на синюю иконку картинки. Можно ещё загрузить свое фото, прикрепляйте файл (фото) в самом низу над кнопками «Добавить ответ».


DEV, BUILD, HACK, REPEAT;

Вконтакте YouTube Twitter facebook
 
zaratustraДата: Вторник, 02.09.2014, 23:41 | Сообщение # 5
Рядовой
Группа: Пользователи
Сообщений: 12
Репутация: 0
Статус: Offline

Цитата
Если ссылкой то при написании сообщения на синюю иконку картинки.
 В том то и дело что нету ( есть кнопка добавить видео, а картинок нету, еще нету кнопки вложения допустим прикрепить .zip .rar или .exe

И еще это конечно придирки, но каптча довольно сложно распознается визуально, хотя конечно ее можно тыкнуть обновить 

Сейчас сижу ковыряю рулевой блок там стоял DC мотор я его выкинул и ставлю серву, встал вопрос: Ведь у меня же руль не на 180 гр поворачивается, ну и что бы серва не стояла не гудела, нужно найти крайние положения влево и вправо, пример с управлением сервой через потенциометр мне не подходит, так как серва почему то не совсем плавно двигается при повороте ручки потенциометра. 
Думаю нужно через команду Serial посылать на серву сигналы и тем самым я найду нужные мне цифры , значения
 
ZSeregaAДата: Среда, 03.09.2014, 00:31 | Сообщение # 6
Лейтенант
Группа: Администраторы
Сообщений: 61
Репутация: 2
Статус: Offline
Цитата zaratustra ()
В том то и дело что нету ( есть кнопка добавить видео, а картинок нету, еще нету кнопки вложения допустим прикрепить .zip .rar или .exe И еще это конечно придирки, но каптча довольно сложно распознается визуально, хотя конечно ее можно тыкнуть обновить
 Исправил!

По поводу рулевого управления, Если бы у вас было два мотора, по одному на каждое колесо, то можно было бы сделать что то на подобии дифференциала. При повороте, колесо по меньшему радиусу крутилось бы медленнее или бы вообще было в свободном движении. А колесо по внешнему радиусу было бы ведущим. 

А насчет углов серво нужно быть осторожным. Найдите те углы при которых рычаг сервы не упирается, иначе можно серву сломать.


DEV, BUILD, HACK, REPEAT;

Вконтакте YouTube Twitter facebook
 
zaratustraДата: Суббота, 06.09.2014, 14:52 | Сообщение # 7
Рядовой
Группа: Пользователи
Сообщений: 12
Репутация: 0
Статус: Offline
Вот я и говорю надо найти эти максимальные углы поворота хотя в принципе если на старте у меня угол 90гр (прямо) то скажем "налево"  нажать серва будет пытаться достичь 0гр пока мы удерживаем кнопку!

Еще думаю поворот должен быть плавным т.е.  едет машинка прямо, нажимаем "налево" и она поворачивает не сразу максимально "налево" а в течении скажем 1.5 сек что бы просто подрулить где то.

Управление сервой с ПК с помощью мышки, программа servo.exe прилагается


Код
#define MIN 600 // минимальное положение сервы    
#define MAX 2400 // максимальное положение сервы    
#define STEP_ADD 10 //шаг сервы на 1 градус    
#define SERVO_1 13 //управляющий выход для первой сервы    

int step_on = (MAX-MIN)/2+MIN; //среднее положение сервы    

void setup()     
{     
pinMode(SERVO_1, OUTPUT);     
Serial.begin(115200);    
}     

void loop()     
{     
     if (Serial.available() > 0)  step_on=(Serial.read())*10;                    
         servo(step_on, SERVO_1);    
}    

void servo(int stepe, int ServoPin)    
{    
     if(stepe > MAX)stepe = MAX;     
     if(stepe < MIN)stepe = MIN;     
       digitalWrite(ServoPin, HIGH);     
       delayMicroseconds(stepe);     
       digitalWrite(ServoPin, LOW);     
       delay(20-(stepe/1000));    
}

С помощью этого скретча измерил получилось что в обе стороны угол отклонения 22-24 градуса

Добавлено (05.09.2014, 07:37)
---------------------------------------------
Опять нужна помощь  wacko  не работают поворот руля как задумано.

Хотелось бы вот так:   пока нажата кнопка в "право"  колеса повернуты в право
                                      отпускаем кнопку колеса возвращаются в положение "прямо"

вот скретч который ни черта не работает, нажимаешь "в право" отпустил, колеса там и остаются (



Добавлено (06.09.2014, 14:52)
---------------------------------------------
Серега посмотри пожалуйста код выше под спойлером что не правильно с поворотами х_Х

Прикрепления: servo.exe(166Kb)


Сообщение отредактировал zaratustra - Четверг, 04.09.2014, 15:31
 
ZSeregaAДата: Суббота, 06.09.2014, 23:49 | Сообщение # 8
Лейтенант
Группа: Администраторы
Сообщений: 61
Репутация: 2
Статус: Offline
Цитата zaratustra ()
Серега посмотри пожалуйста код выше под спойлером что не правильно с поворотами х_Х
Посмотрел, вы просто неправильно функцию выбрали. Вместо ButtonPressed (кнопка нажата) нужно было указать ButtonReleased (кнопка отпущена).

У вас так (ошибка красным):

if (btca2a.ButtonPressed(KEYCODE_DPAD_LEFT) && btca2a.ButtonPressed(KEYCODE_DPAD_RIGHT) && !Vpered){
myservo.write(90);
Vpered = true;
}

Вот так должно быть (исправления зеленым):

if (btca2a.ButtonReleased(KEYCODE_DPAD_LEFT) && btca2a.ButtonReleased(KEYCODE_DPAD_RIGHT) && !Vpered){
myservo.write(90);
Vpered = true;
}

Исправьте в своем коде! Пишите если будут вопросы.


DEV, BUILD, HACK, REPEAT;

Вконтакте YouTube Twitter facebook
 
zaratustraДата: Воскресенье, 07.09.2014, 00:06 | Сообщение # 9
Рядовой
Группа: Пользователи
Сообщений: 12
Репутация: 0
Статус: Offline
Да пипец, сегодня был запуск, сгорел драйвер DC мотора моста - L9110, написано что он держит питание до 12 вольт, я подал 7.2 вольта (6 аккумуляторов 1.2в) 

В общем после того как машинка уперлась, колеса заблокировались, получается короткое замыкание, и эти микросхемы выгорают sad
Теперь надо искать новый драйвер моторов, думаю купить вот такой L298N


Или делать самому на транзисторах, так как посылку ждать довольно долго (
Прикрепления: 4182797.jpg(37Kb) · 9084227.png(407Kb)


Сообщение отредактировал zaratustra - Воскресенье, 07.09.2014, 00:08
 
ZSeregaAДата: Воскресенье, 07.09.2014, 18:07 | Сообщение # 10
Лейтенант
Группа: Администраторы
Сообщений: 61
Репутация: 2
Статус: Offline
Цитата zaratustra ()
Теперь надо искать новый драйвер моторов, думаю купить вот такой L298N
Я себе купил такой, использовал немного, проблем не заметил. Стоит не дорого, покупал на eBay пришел за 2 недели http://www.ebay.com/itm/170926726867


DEV, BUILD, HACK, REPEAT;

Вконтакте YouTube Twitter facebook
 
zaratustraДата: Вторник, 28.10.2014, 13:00 | Сообщение # 11
Рядовой
Группа: Пользователи
Сообщений: 12
Репутация: 0
Статус: Offline
Пришел долгожданный драйвер DC мотора (L298N) Картинка выше.  Возникла новая проблема,  не могу найти приложение для андроида bt controller на котором все строилось и на библиотеке

http://robocontroller.ru/news/2013-11-16-40
 , их
https://sites.google.com/site/droidbean/btcontroller/btcontrollerpchost

сайт   работает а вот приложения в плеймаркете нет.

Серега у тебя не осталось рабочего APK?   И с помощью каких приложений ты сейчас управляешь своими машинками - роботами

Почему я не могу вставлять нормальные ссылки? "Найдены запрещенные ББкоды ( [url или url])."


Сообщение отредактировал zaratustra - Вторник, 28.10.2014, 13:10
 
ZSeregaAДата: Вторник, 28.10.2014, 21:28 | Сообщение # 12
Лейтенант
Группа: Администраторы
Сообщений: 61
Репутация: 2
Статус: Offline
Цитата zaratustra ()
И с помощью каких приложений ты сейчас управляешь своими машинками - роботами

Вот могу посоветовать вот это http://remotexy.com/ru/ пользуюсь им.

Цитата zaratustra ()
Почему я не могу вставлять нормальные ссылки? "Найдены запрещенные ББкоды ( [url или url]).

Это было сделано для борьбы со спамом. Открою эту возможность.


DEV, BUILD, HACK, REPEAT;

Вконтакте YouTube Twitter facebook
 
ZSeregaAДата: Вторник, 28.10.2014, 21:35 | Сообщение # 13
Лейтенант
Группа: Администраторы
Сообщений: 61
Репутация: 2
Статус: Offline
Цитата zaratustra ()
Пришел долгожданный драйвер DC мотора (L298N)

Вот инструкция с картинками на русском, возможно пригодится http://zelectro.cc/Motor_shield_L298N_Arduino


DEV, BUILD, HACK, REPEAT;

Вконтакте YouTube Twitter facebook
 
zaratustraДата: Суббота, 01.11.2014, 19:04 | Сообщение # 14
Рядовой
Группа: Пользователи
Сообщений: 12
Репутация: 0
Статус: Offline




Скреч который используется в данный момент, но не последняя версия

Программа для андроида (apk) https://cloud.mail.ru/public/817fa2d54d83/btcontroller-1-5.apk

Используемые компоненты запчасти (с сайта DX):
Китайская РУ машинка (была в наличии),
Bluetooth беспроводной модульArduino, JY-MCU  - 270руб
Макетные провода для электронного конструирования 100руб
Nano V3.0 - 330руб
MG90S Металлический моторный микро сервомотор (на руль) - 240руб
Драйвер DC мотора (задний мост) L298N - 230руб
Итого = 1200руб

(Цены конечно завышены, если поискать то можно найти гораздо дешевле) 

Вот такой монстр получился, это первый опыт в машиностроении, прошу сильно не пинать

В дальнейшем планируется фары, повротники, стоп сигналы,   ну и переход на другую программу которую посоветовал Серега,   она поинтересней будет
Прикрепления: 2472484.jpg(63Kb) · 4752957.jpg(63Kb)


Сообщение отредактировал zaratustra - Суббота, 01.11.2014, 19:16
 
ZSeregaAДата: Суббота, 01.11.2014, 22:35 | Сообщение # 15
Лейтенант
Группа: Администраторы
Сообщений: 61
Репутация: 2
Статус: Offline
Цитата zaratustra ()
Вот такой монстр получился, это первый опыт в машиностроении, прошу сильно не пинать

Отличная работа! Если будет возможность, сделай видео.


DEV, BUILD, HACK, REPEAT;

Вконтакте YouTube Twitter facebook
 
Форум » Роботы » Нужна помощь? » Вопросы по програмированию Р/У машинки
Страница 1 из 11
Поиск:

Чтобы писать сообщения на форуме, авторизуйтесь используя социальную сеть!