Бульдозер XL + Arduino + RC Spektrum

Обсуждаем модели и конструкции, построенные своими руками
serg
Сообщения: 17
Зарегистрирован: 27 мар 2013, 16:18

Бульдозер XL + Arduino + RC Spektrum

Сообщение serg »

Собрали с сыном радиоуправляемый бульдозер Fischertechnik. Он - бульдозер, я - радиоуправление.
Использовали наборы Fischertechnik XL Bulldozer (и два мотора XM), Arduino, Spektrum 2.4.
Вот что получилось:


Для управления использовались
Arduino Uno R3 + Arduino Motor Shield. (китайский аналог http://www.ladyada.net/make/mshield/ батарейки сажал сразу)
Все скетчи с подробным описанием нашлись на SparkFun Electronics.
https://www.sparkfun.com/tutorials/348

Код: Выделить всё

/*
 RC PulseIn Joystick Servo Control
 By: Nick Poole
 SparkFun Electronics
 Date: 5
 License: CC-BY SA 3.0 - Creative commons share-alike 3.0
 use this code however you'd like, just keep this license and
 attribute. Let me know if you make hugely, awesome, great changes.
 */
int ch1; // Here's where we'll keep our channel values
int ch2;

int move; // Forward/Back speed
int turn; // Turning Factor

int pwm_a = 3;  //PWM control for motor outputs
int pwm_b = 11;  //PWM control for motor outputs
int dir_a = 12;  //direction control for motor outputs
int dir_b = 13;  //direction control for motor outputs

void setup() {

pinMode(5, INPUT); // Set our input pins as such
pinMode(6, INPUT);

  pinMode(pwm_a, OUTPUT);  //Set control pins to be outputs
  pinMode(pwm_b, OUTPUT);
  pinMode(dir_a, OUTPUT);
  pinMode(dir_b, OUTPUT);

  analogWrite(pwm_a, 0);  
  analogWrite(pwm_b, 0);
}

void loop() {
  
  ch1 = pulseIn(5, HIGH, 25000); // Read the pulse width of  
  ch2 = pulseIn(6, HIGH, 25000); // each channel

move = map(ch2, 1100,1900, -500, 500); //center over zero
move = constrain(move, -255, 255); //only pass values whose absolutes are
                                   //valid pwm values

/*What we're doing here is determining whether we want to move
forward or backward*/
if(move>0){digitalWrite(dir_a, 1);digitalWrite(dir_b, 1);};
if(move<0){digitalWrite(dir_a, 0);digitalWrite(dir_b, 0); move=abs(move);};

/*Here we're determining whether a left or a right turn is being 
executed*/
turn = map(ch1,1100,1900,-500,500);
turn = constrain(turn, -255, 255);

/*This is where we do some mixing, by subtracting our "turn" 
variable from the appropriate motor's speed we can execute
a turn in either direction*/

if(turn>0){analogWrite(pwm_b, move-turn); analogWrite(pwm_a, move);};
if(turn<0){turn=abs(turn); analogWrite(pwm_a, move-turn); analogWrite(pwm_b, move);};

}
В исходном коде были небольшие ошибки плюс надо было откалибровать крайние значения джойстика
Вот фото соединений проводов (питание и два канала)
foto.jpg
А вот - общее фото бульдозера
foto1.jpg
Аккумулятор 800 мАч - от RC моделей. Шесть батареек АА проработали час и разрядились.

В дальнейших планах - управление отвалом бульдозера и добавление звука.
Последний раз редактировалось serg 30 мар 2013, 01:09, всего редактировалось 2 раза.
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1020
Зарегистрирован: 22 окт 2010, 23:57

Re: Бульдозер XL + Arduino + RC Spektrum

Сообщение Mr.Kubikus »

Класс! А у нас тоже есть зверушки с дистанционным управлением.

Сначала были такие:


А потом их стало трое и они выросли:
robot-actor-05-448.jpg
robot-actor-05-448.jpg (80.83 КБ) 33549 просмотров
С уважением, Григорий
GitHub FB ВК
serg
Сообщения: 17
Зарегистрирован: 27 мар 2013, 16:18

Re: Бульдозер XL + Arduino + RC Spektrum

Сообщение serg »

Добавил сервомашинку для управления отвалом. Пришлось установить третью плату над Arduino. Что то надо делать с проводами..
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1020
Зарегистрирован: 22 окт 2010, 23:57

Re: Бульдозер XL + Arduino + RC Spektrum

Сообщение Mr.Kubikus »

А зачем еще одна плата?
С уважением, Григорий
GitHub FB ВК
serg
Сообщения: 17
Зарегистрирован: 27 мар 2013, 16:18

Re: Бульдозер XL + Arduino + RC Spektrum

Сообщение serg »

Третья плата потребовалась для подключения питания сервомашинки. Вот и prototyping shield пригодился! Фото прилагаю.
На плате motor shield множество разъемов tinker kit-можно ли было оттуда запитаться?
Вложения
foto2.jpg
foto2.jpg (110.48 КБ) 33530 просмотров
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1020
Зарегистрирован: 22 окт 2010, 23:57

Re: Бульдозер XL + Arduino + RC Spektrum

Сообщение Mr.Kubikus »

В принципе можно было бы подключиться и к разъему на MotorShield. К трем контактам: GND, +5V и еще сигнал управления на тот пин, который вы в программе используете.
С уважением, Григорий
GitHub FB ВК
serg
Сообщения: 17
Зарегистрирован: 27 мар 2013, 16:18

Re: Бульдозер XL + Arduino + RC Spektrum

Сообщение serg »

Но свободные разъемы кончились 5V и GND. А паять не хотелось. Оставались только разъемы OUT 5 OUT 6 IN 3 IN 2 трехпиновые. И четырехпиновые TWI in и TWI out.
serg
Сообщения: 17
Зарегистрирован: 27 мар 2013, 16:18

Re: Бульдозер XL + Arduino + RC Spektrum

Сообщение serg »

Перевел управление бульдозером на Bluetooth. Ребенок берет клавиатуру (беспроводную) и запускает HyperTerminal на компьютере. Дальность позволяет ходить по всей квартире.

Код: Выделить всё

#include <Servo.h>
Servo servo1;
int pwm_a = 3;  
int pwm_b = 11;  
int dir_a = 12;  
int dir_b = 13;  
int val;        

void setup()
{
  servo1.attach(9);  
  Serial.begin(9600);              
  pinMode(pwm_a, OUTPUT);         
  pinMode(pwm_b, OUTPUT);
  pinMode(dir_a, OUTPUT);
  pinMode(dir_b, OUTPUT);

  analogWrite(pwm_a, 0);  
  analogWrite(pwm_b, 0);
}

void loop()
{
  if (Serial.available()) 
  {       
    val = Serial.read();  
    
    if (val == '8') {digitalWrite(dir_a, 0);digitalWrite(dir_b, 0);
     analogWrite(pwm_a, 255);analogWrite(pwm_b, 255); Serial.println("FORWARD");};
    
    if (val == '2') {digitalWrite(dir_a, 1);digitalWrite(dir_b, 1);
    analogWrite(pwm_a, 255);analogWrite(pwm_b, 255); Serial.println("REAWARD"); };
    
    if (val == '5') {analogWrite(pwm_a, 0);analogWrite(pwm_b, 0); Serial.println("STOP");};
    
    if(val == '4') { analogWrite(pwm_a, 255);analogWrite(pwm_b, 0);Serial.println("LEFT"); };
    
    if(val == '6'){ analogWrite(pwm_a, 0);analogWrite(pwm_b, 255);Serial.println("RIGHT");};
    
   if(val == '0'){ servo1.write(90);}     

   if (val== '.'){servo1.write(0);}
  }
}
Вложения
foto3.jpg
foto3.jpg (116.27 КБ) 33492 просмотра
Последний раз редактировалось serg 07 апр 2013, 20:17, всего редактировалось 1 раз.
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1020
Зарегистрирован: 22 окт 2010, 23:57

Re: Бульдозер XL + Arduino + RC Spektrum

Сообщение Mr.Kubikus »

Поздравляю! Прогресс налицо.

Срочно нужен видос где бульдозер сгребает детальки конструктора в кучу. Так скзать, агрегат в естественной среде обитания.
С уважением, Григорий
GitHub FB ВК
serg
Сообщения: 17
Зарегистрирован: 27 мар 2013, 16:18

Re: Бульдозер XL + Arduino + RC Spektrum

Сообщение serg »

Видео работы

Немного поправил код - добавил управление отвалом. Удачно, что питание bluetooth 3.3 В! Остался свободный пин 5В как раз для сервомашинки.
Ответить