Хочу передалать радио машинку на arduino, подбираю компоненты

LYNX
Offline
Зарегистрирован: 21.03.2014

jeka_tm пишет:

главное получилось. давай допиливай и видео выложи

Проблема не в том что микросхемка подпалилась?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

только raw. со стабилизатора на 5В не надо подавать

возможно изза ошибок подключения пины попортил

вообще все октлючи и просто подключи к usb через переходник. будет грется или нет

LYNX
Offline
Зарегистрирован: 21.03.2014

jeka_tm пишет:

только raw. со стабилизатора на 5В не надо подавать

возможно изза ошибок подключения пины попортил

вообще все октлючи и просто подключи к usb через переходник. будет грется или нет

Сейчас подключено только raw. Вопрос возник потому что диод на ардуино горит тускло. Если подать 5В то как обычно ярко. Напряжение еще не мерял (завтра только смогу)

По коду попробовал сменить пины, чтобы не подавать на 10-11 напряжение. Также горит тускло от аккумуляторов.

Проблема с самой ардуино?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

я тебе другое говорил сделать

LYNX
Offline
Зарегистрирован: 21.03.2014

От юсб не греется

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

определи при каких условиях начинает греться чип

LYNX
Offline
Зарегистрирован: 21.03.2014

Подключение по raw и юсб когда моторчик двигается.
Еще заметил. Подключаю raw начинает грется коденсатор рядом с raw. Остальные детали в норме

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

LYNX пишет:
Подключение по raw и юсб когда моторчик двигается

как это понимать? ты можешь писать конкретно? мы пытаемся выяснить почему греется. поэтому поэтапно нужно проверить, а ты даешь инфу что все сразу включено и греется. это и так было понятно. нужно понять изза чего именно

LYNX
Offline
Зарегистрирован: 21.03.2014

jeka_tm пишет:

LYNX пишет:
Подключение по raw и юсб когда моторчик двигается

как это понимать? ты можешь писать конкретно? мы пытаемся выяснить почему греется. поэтому поэтапно нужно проверить, а ты даешь инфу что все сразу включено и греется. это и так было понятно. нужно понять изза чего именно


Извиняюсь что непонятно пишу.
Подключено сейчас: только si9986 (впаяна)
Код загружен пустой
Питание от юсб или батарейки одинаково греется кондсатор около raw. При юсб пальцу горячо через 5 сек

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

фото тогда приложи. с указанием что греется. в панте выдели

а микроконтроллер греется при этом? или только конденсатор?

prepodavatel
Offline
Зарегистрирован: 07.02.2014

Я в свое время сделал что-то подобное. Машинка ездит вперед-назад, влево-вправо и бибикает. Управляется по блютуз со смартфона из приложения созданного в MIT AppInventor.

Во время испытаний столкнулся с такой проблемой: во время переключения направления движения двигателя, «взбешивался» сервопривод на переднем мосту машинки, хотя питания для Nano и коллекторного двигателя было раздельным. Для решения навешивал на коллекторный двигатель дроссели, но они помогли только на половину. Решил проблему программным плавным отключением двигателя, а затем только через незначительную паузу включая другое направление. 

Н-мост сделан на релюшках (весело щелкают) и на мощном транзисторе с радиатором на ШИМ-порту для регулировки скорости двигателя.

LYNX
Offline
Зарегистрирован: 21.03.2014

Заменил на другую ардуино, заработало. не стал мучатся)

В итоге пока решаю проблему со скоростью назад: не едет с регулировкой скорости

#define PWM 11
#define DIR 10

void setup(){
  pinMode(PWM, OUTPUT);
  pinMode(DIR, OUTPUT);
}
void loop(){
  for (int i=0;i<=255;i++){
    digitalWrite(DIR, 0); //вперед
    analogWrite(PWM, i);
    delay(50); 
  }
  for (int i=0;i<=255;i++){
    digitalWrite(DIR, 1); //вперед
    analogWrite(PWM, 255-i);
    delay(50); 
  }
}

Также пока не понятно почему по коду не едет вперед (команда F), но едете если направление вперед влево или вправо (команда G и I)

#include <Servo.h> //Библиотека сервы

//Классы
Servo Servo_Rotation; //Объект для рулевого серво

//ПИНЫ
#define dPin_Servo 5   //Цифровой пин для сервы
#define PWM 11 //Моторчик скорость
#define DIR 10 //Моторчик направление

//Углы сервы
#define Angle_Centr 99  //Центральное положение руля
#define Angle_Right 120 //Правое положение руля
#define Angle_Left 78   //Левое положение руля

//Пины лампочек
#define dPinLight1 4 //Передняя правая
#define dPinLight2 2 //Задняя правая
#define dPinLight3 7 //Передняя левая
#define dPinLight4 8 //Задняя левая

//Дополнительные
#define aPinNight A3 //Пин датчика освещенности

//Текущая скорость
int currentSpeed = 128; //Максимальная значение ШИМ

//////////////////////////////
//СОЗДАЕМ ПЕРЕМЕННЫЕ И КОНСТАНТЫ

//Предельные значения углов поворота
int Temp_Angle_UpDown = 0;

//Углы при повороте
int Temp_Angle_LeftRight = 0;

//Переменные для режима движения
boolean Emergency = false; //Аварийка
boolean Headlights = false; //Передние фары
boolean Backlights = false; //Передние фары
boolean TurnLeft = false; //Поворот на лево
boolean TurnRight = false; //Поворот на лево
boolean TurnBack = false; //Езда назад

//Состояние лампочек и последнее включение
int LedState1 = false; // 1 - этой переменной устанавливаем состояние светодиода
int LedState2 = false; // 2 - этой переменной устанавливаем состояние светодиода
int LedState3 = false; // 3 - этой переменной устанавливаем состояние светодиода
int LedState4 = false; // 4 - этой переменной устанавливаем состояние светодиода

boolean Night = false; //Освещенность снаружи
int ValueLight = 0;

//Интервал
long interval = 400;           // интервал между включение/выключением светодиода (1 секунда)
long previousMillis = 0;         // храним время последнего переключения светодиода

// Создаем переменную для команд Bluetooth
char vcmd;

//Режим отладки
boolean DebugOn = false;

//////////////////////////////

//настройки при нажатии кнопки сброс
void setup() {

  // Инициализация экрана
  Serial.begin(9600);

  // Включаем мотор
  pinMode(PWM, OUTPUT);
  pinMode(DIR, OUTPUT);

  //Инициализация пинов лампочек
  pinMode(dPinLight1, OUTPUT);
  pinMode(dPinLight2, OUTPUT);
  pinMode(dPinLight3, OUTPUT);
  pinMode(dPinLight4, OUTPUT);
  
  //Инициализация пина освещенности
  pinMode(aPinNight, INPUT);

  //Подключаем серву
  Servo_Rotation.attach(dPin_Servo);
  
  //Режим стоп
  Engine_FBS(3);

}

//Повторяющаяся функция
void loop() {

  //Проверка на освещенность
  ValueLight = analogRead(aPinNight);
  
  // Serial.println(ValueLight);
  if (ValueLight > 800)
  {
    Night = true;  
  }
  else
  {
    Night = false;
  }  
  
  // Если есть данные
  if (Serial.available())
  {
  
    //Считывание данных, получаем символы
    vcmd = Serial.read();

    //////////////////////////
    /////   РЕЖИМ ОТЛАДКИ   //
    //////////////////////////
    
    //Переключатель режима
    switch (vcmd) {
      case 'V': DebugOn = true;  break;
      case 'v': DebugOn = false; break;
    }
        
    //////////////////////////
    ///  ПАРАМЕТРЫ РУЛЯ    ///
    //////////////////////////
    //Измение центра и радиуса поворода руля
    if (DebugOn == true)
    {
      switch (vcmd) {
        case 'L': Temp_Angle_LeftRight = Temp_Angle_LeftRight - 1; break;
        case 'R': Temp_Angle_LeftRight = Temp_Angle_LeftRight + 1; break;
        case 'F': Temp_Angle_UpDown    = Temp_Angle_UpDown    + 1; break;
        case 'B': Temp_Angle_UpDown    = Temp_Angle_UpDown    - 1; break;
      }
      exit;
    }
    
    //////////////////////////
    ///    ПОВОРОТЫ РУЛЯ   ///
    //////////////////////////
    
    switch (vcmd) {
      case 'L': RotateServoToAngle(Angle_Left-Temp_Angle_LeftRight+Temp_Angle_UpDown); break;
      case 'H': RotateServoToAngle(Angle_Left-Temp_Angle_LeftRight+Temp_Angle_UpDown); break;
      case 'G': RotateServoToAngle(Angle_Left-Temp_Angle_LeftRight+Temp_Angle_UpDown); break;
      case 'R': RotateServoToAngle(Angle_Right+Temp_Angle_LeftRight+Temp_Angle_UpDown); break;
      case 'J': RotateServoToAngle(Angle_Right+Temp_Angle_LeftRight+Temp_Angle_UpDown); break;
      case 'I': RotateServoToAngle(Angle_Right+Temp_Angle_LeftRight+Temp_Angle_UpDown); break;
      case 'F': RotateServoToAngle(Angle_Centr+Temp_Angle_UpDown); break;
      case 'B': RotateServoToAngle(Angle_Centr+Temp_Angle_UpDown); break;
      case 'S': RotateServoToAngle(Angle_Centr+Temp_Angle_UpDown); break;
    }

    ///////////////////////////////
    ///    ИЗМЕНЕНИЕ СКОРОСТИ   ///
    ///////////////////////////////   

    switch (vcmd) {
      case '0': currentSpeed=0;   break;  
      case '1': currentSpeed=26;  break;
      case '2': currentSpeed=51;  break;
      case '3': currentSpeed=77;  break;
      case '4': currentSpeed=102; break;
      case '5': currentSpeed=128; break;
      case '6': currentSpeed=153; break;
      case '7': currentSpeed=179; break;
      case '8': currentSpeed=204; break;
      case '9': currentSpeed=230; break;
      case 'q': currentSpeed=255; break;
    }
    
    ///////////////////////////////
    ///  НАПРАВЛЕНИЕ МОТОРЧИКА  ///
    ///////////////////////////////
    
    switch (vcmd) {
      case 'F': Engine_FBS(1); break;
      case 'G': Engine_FBS(1); break;
      case 'I': Engine_FBS(1); break;
      case 'B': Engine_FBS(2); break;
      case 'H': Engine_FBS(2); break;
      case 'J': Engine_FBS(2); break;
      case 'S': Engine_FBS(3); break;
    }
    
    //////////////////////////
    //////////////////////////
    //Задние фонари

    //Ехать назад
    if (vcmd == 'B')
    {
      digitalWrite(dPinLight2, HIGH);
      digitalWrite(dPinLight4, HIGH);
    }

    //Остановка
    if (vcmd == 'S')
    {
      digitalWrite(dPinLight2, LOW);
      digitalWrite(dPinLight4, LOW);
    }

    //////////////////////////
    // НАПРАВЛЕНИЕ ДВИЖЕНИЯ //
    //////////////////////////

    //Последнее направление: лево, право, назад
    //Движения влево
    if (vcmd == 'L')// || vcmd == 'H' || vcmd == 'G')
    {
      TurnLeft = true;
      TurnRight = false;  
    }
    //Движения вправо
    else if (vcmd == 'R')// || vcmd == 'J' || vcmd == 'I') 
    {
      TurnLeft = false;
      TurnRight = true;  
    }
    //остановка
    else if (vcmd == 'S') 
    {
      TurnLeft = false;
      TurnRight = false;
      TurnBack = false;
      //Проверка на сигналку
      if (Emergency == false)
      {
        LedState1 = false;
        LedState2 = LedState1;
        LedState3 = LedState1;
        LedState4 = LedState1;
      }  
    }
    //Аварийка вкл
    else if (vcmd == 'X')
    {
      Emergency = true;
    }
    //Аварийка выкл
    else if (vcmd == 'x')
    {
      Emergency = false;

      if (Headlights == false && Night == false)
      {
        LedState1 = false;
        LedState3 = false;
      }
      if (Backlights == false && TurnBack == false)
      {
        LedState2 = false;
        LedState4 = false;
      }
    }
    //Фары вкл
    else if (vcmd == 'W')
    {
      Headlights = true;
    }
    //Фары выкл
    else if (vcmd == 'w')
    {
      Headlights = false;

      if (Emergency == false && Night == false)
      {
        LedState1 = false;
        LedState3 = false;
      }
    }
    //Едем назад
    else if (vcmd == 'B')
    {
      TurnBack = true;
    }
    //Задние фары
    else if (vcmd == 'U')
    {
      Backlights = true;
    }
    //Аварийка вкл
    else if (vcmd == 'u')
    {
      Backlights = false;

      if (Emergency == false)
      {
        LedState2 = false;
        LedState4 = false;
      }      
    } 
  }

  //Текущие милисекунды
  unsigned long currentMillis = millis(); 
  
  if (currentMillis - previousMillis >= interval) 
  {   

    //Мигание аварийкой
    if (Emergency == true) 
    {
      LedState1 = !LedState1;
      LedState2 = LedState1;
      LedState3 = LedState1;
      LedState4 = LedState1;
    }
    else if (TurnRight == true)
    {
      LedState1 = !LedState1;
      LedState2 = LedState1;
    }
    else if (TurnLeft == true)
    {
      LedState3 = !LedState3;
      LedState4 = LedState3;
    }
    previousMillis = currentMillis;

  }

  //Проверка на передние фары
  if ((Headlights == true || Night == true) && Emergency == false)
  {
    if (TurnLeft == false)
    {
      LedState3 = true;
    }
    if (TurnRight == false)
    {
      LedState1 = true;
    }
  }

  //Проверка на задние фары
  if ((Backlights == true || TurnBack == true) && Emergency == false)
  {
    if (TurnLeft == false)
    {
      LedState4 = true;
    }
    if (TurnRight == false)
    {
      LedState2 = true;
    }
  }

  //Проверка на лампочки отображение
  if (LedState1 == true)
  {
    digitalWrite(dPinLight1, HIGH);
  }
  else
  {
    digitalWrite(dPinLight1,LOW);
  }

  //Проверка на лампочки отображение
  if (LedState2 == true)
  {
    digitalWrite(dPinLight2, HIGH);
  }
  else
  {
    digitalWrite(dPinLight2,LOW);
  }

  //Проверка на лампочки отображение
  if (LedState3 == true)
  {
    digitalWrite(dPinLight3, HIGH);
  }
  else
  {
    digitalWrite(dPinLight3,LOW);
  }

  //Проверка на лампочки отображение
  if (LedState4 == true)
  {
    digitalWrite(dPinLight4, HIGH);
  }
  else
  {
    digitalWrite(dPinLight4,LOW);
  }


  //Дополнительные команды
  //V – звуковой сигнал включен
  //v – звуковой сигнал выключен

}

void RotateServoToAngle(int Angle)
{ 
  //Меняем угол
  Servo_Rotation.write(Angle);

}

//Управление направлением движения мотрчика
void Engine_FBS(int Select)
{
  switch (Select) {
  case 1: //вперед
    digitalWrite(DIR, 0);
    analogWrite(PWM, currentSpeed);
    break;
  case 2: //назад
    digitalWrite(DIR, 1);
    analogWrite(PWM, 255-currentSpeed);
    break;
  case 3: //стоп
    digitalWrite(DIR, 0);
    analogWrite(PWM, 0);
    break;
  }
}

 

LYNX
Offline
Зарегистрирован: 21.03.2014

Поигрался пока чуток.

блупуп шлеп непрерывно команды. Например рассмотреть 2: F (вперед) и G (вперед и вбок)

Открыв монитор порта и введя любую из цифр, заставляет двигаться вперед.

Но если через блупуп то только при команде G.

Прям странный игнор какой то. Через монитор явно видно что буква отсылается F

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а зачем изобретать если уже сделано?

искать в google play следующие программы:

bluebots

joy bt commander

еще что то там было вроде. но и этих достаточно. коды насколько помню для ардуины прилагались

попробуй. все равно у тебя уже все собрано. переделок не будет. так, код переписать

LYNX
Offline
Зарегистрирован: 21.03.2014

jeka_tm пишет:

а зачем изобретать если уже сделано?

искать в google play следующие программы:

bluebots

joy bt commander

еще что то там было вроде. но и этих достаточно. коды насколько помню для ардуины прилагались

попробуй. все равно у тебя уже все собрано. переделок не будет. так, код переписать

Сейчас использую Bluetooth RC controller. И сравниваю варианты посылка на блютус и через сериал. Данные как бы один но почему то F не распознает. хотя раньше было

 

Завтра еще попробую весь код вырезать. мож что лишнего и еще через и получается так. Хотя хз.

Далее планирую на ControlJoystick перейти, там попроще будет.

 

Но проблема с задним ходом пока есть. движется на максимался. Хотя скорость регулирвоаться должна

LYNX
Offline
Зарегистрирован: 21.03.2014

jeka_tm пишет:

а зачем изобретать если уже сделано?

искать в google play следующие программы:

bluebots

joy bt commander

еще что то там было вроде. но и этих достаточно. коды насколько помню для ардуины прилагались

попробуй. все равно у тебя уже все собрано. переделок не будет. так, код переписать

 

В продолжение опытов над сериал

void setup() {
  Serial.begin(9600);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
}

//Повторяющаяся функция
void loop() {
char vcmd;
  if (Serial.available())
  {
    vcmd = Serial.read();
    if (vcmd == 'F') {
      digitalWrite(10, 0);
      analogWrite(11, 128);
    }
    else if (vcmd == 'B') {
      digitalWrite(10, 1);
      analogWrite(11, 128);
    }
    else if (vcmd == 'S') {
      digitalWrite(10, 0);
      analogWrite(11, 0);
    };
    Serial.println(vcmd);
  }
}

Мониторя порт видно что с командами все верно, символы верные. Но без сервы теперь реакции 0.

Т.е. отправляя одни и те же данные работает по другому. Через монитор (в ардуине) все отлично, через блутус не работает.

 

Я так понимаю надо дополнительно сменить пин или 10 на 11 с pwr т.к. назад нет регулировки