Modelism - RHC Forum: RC Receiver to Arduino UNO to DC Motor Driver Shield - Modelism - RHC Forum

Salt la continut

Pagina 1 din 1

RC Receiver to Arduino UNO to DC Motor Driver Shield

#1 Useril este offline   KryssMee 

  • Nou venit
  • Pip
  • Grup: Members
  • Postari: 7
  • Inregistrat: 13-August 16

Postat 15 August 2016 - 01:00 AM

Salutare.

De doua zile tot caut, tot incerc, si ... nu-i dau de cap. Asa ca ... am deschis un topic nou.
Are cineva idee cum pot comanda doua motoare DC (curent continuu, nu din cele fara perii) dintr-o radio comanda?

Pe scurt, am o imitatie de masinuta cu doua motoare 12V (stanga/dreapta) comandate din android via modul bluetooth. Din telefon transmit semnal catre Arduino UNO (via bluetooth) care la randul lui prin intermediu driverului de motoare stabileste sensul si turatia motoarelor. Din diverse motive, doresc sa inlocuiesc smartphone-ul cu o statie de radio comanda (evident si modulul bluetooth cu RC receiver-ul aferent).

Deci am: smartphone (android) ---> bluetooth module (hc-06) ---> Arduino UNO ---> driver motoare (L298N). Doresc sa trec la:
statie comanda radio (FlySky FS-i6) ---> FS-iA6 Receiver ---> Arduino UNO ---> driver motoare (L298N).


Problema este ca nu reusesc sa impac Arduino cu statia de comanda. A mai facut cineva ceva de genu'!? Aveti idee despre ce vorbesc? (Din arduino trebuie sa iasa doua semnale PWM (Pulse Width Modulation), nu folosesc ESC-uri sau servo. Cam aici intervine ... dificultatea. Imi pare ca toate metodele folosite pentru citirea valorilor din receiver nu-mi mai permite (in Arduino Uno) sa generez si sa transmit semanle PWM.)

(Prin diverse metode reusesc sa citesc miscarile stik-urilor de pe radiocomanda insa aceste valori nu reusesc sa le transmit ca iesiri.)

Va multumesc aticipat pentru orice sfat, idee sau sugestie.
0

#2 Useril este offline   renatoa 

  • Sky Sapiens
  • PipPipPipPipPipPipPip
  • Grup: Members
  • Postari: 19163
  • Inregistrat: 28-April 05
  • Gender:Male

Postat 15 August 2016 - 08:08 AM

Ai putea lasa smartphone-ul mai departe in ecuatie si sa legi statia la modul urmator:
statie, iesire trainer -> adaptor simulator usb -> cablu usb otg -> smartphone

In acest fel telefonul va vedea statia ca un joystick si banuiesc ca aplicatia se descurca cu asa ceva.

Daca insa vrei neaparat eliminare smartphone, pune sursele Arduino ca sa vedem unde te impotmolesti.
... cu picioarele pe pamant ...
0

#3 Useril este offline   KryssMee 

  • Nou venit
  • Pip
  • Grup: Members
  • Postari: 7
  • Inregistrat: 13-August 16

Postat 15 August 2016 - 10:06 AM

Mai jos este codul (nu scris de mine ci doar adaptat la ... ce cred io ca-mi trebuie):

Citeaza

#include <RCArduinoFastLib.h>
#include <PinChangeInt.h>

#define THROTTLE_IN_PIN 2
#define STEERING_IN_PIN 3

#define THROTTLE_OUT_PIN 10
#define STEERING_OUT_PIN 9

#define SERVO_THROTTLE 0
#define SERVO_STEERING 1

#define THROTTLE_FLAG 1
#define STEERING_FLAG 2

volatile uint8_t bUpdateFlagsShared;

volatile uint16_t unThrottleInShared;
volatile uint16_t unSteeringInShared;

uint16_t unThrottleInStart;
uint16_t unSteeringInStart;

uint32_t ulVariance = 0;
uint32_t ulGetNextSampleMillis = 0;
uint16_t unMaxDifference = 0;



void setup()
{
  Serial.begin(9600);

  CRCArduinoFastServos::attach(SERVO_THROTTLE,THROTTLE_OUT_PIN);
  CRCArduinoFastServos::attach(SERVO_STEERING,STEERING_OUT_PIN);

  CRCArduinoFastServos::begin();
 
  PCintPort::attachInterrupt(THROTTLE_IN_PIN, calcThrottle,CHANGE);
  PCintPort::attachInterrupt(STEERING_IN_PIN, calcSteering,CHANGE);
  
}

void loop()
{

  static uint16_t unThrottleIn;
  static uint16_t unSteeringIn;
 
  static uint8_t bUpdateFlags;

  if(bUpdateFlagsShared)
  {
    noInterrupts();
    bUpdateFlags = bUpdateFlagsShared;
  
    if(bUpdateFlags & THROTTLE_FLAG)
    {
      unThrottleIn = unThrottleInShared;
    }
    if(bUpdateFlags & STEERING_FLAG)
    {
      unSteeringIn = unSteeringInShared;
    }
  
    bUpdateFlagsShared = 0;
  
    interrupts();
  }

  if(bUpdateFlags & THROTTLE_FLAG)
  {
    CRCArduinoFastServos::writeMicroseconds(SERVO_THROTTLE,unThrottleIn);
  }

  if(bUpdateFlags & STEERING_FLAG)
  {
    CRCArduinoFastServos::writeMicroseconds(SERVO_STEERING,unSteeringIn);
  }

 
  bUpdateFlags = 0;
    

  Serial.print (unThrottleIn);
  Serial.print (" ");
  Serial.println (unSteeringIn);
}


void calcThrottle()
{
  if(PCintPort::pinState)
  {
    unThrottleInStart = TCNT1;
  }
  else
  {
    unThrottleInShared = (TCNT1 - unThrottleInStart)>>1;
    bUpdateFlagsShared |= THROTTLE_FLAG;
  }
}

void calcSteering()
{
  if(PCintPort::pinState)
  {
    unSteeringInStart = TCNT1;
  }
  else
  {
    unSteeringInShared = (TCNT1 - unSteeringInStart)>>1;

    bUpdateFlagsShared |= STEERING_FLAG;
  }
}




Merge acceptabil daca pe pinii 9 si 10 conectez doua servomotoare, dar nu asta vreau io. DOAR 2 servomotoare (mici) le pot lega direct la receiver si nu-mi mai trebuie nimic. Io intentionez ca pe pinii 9 si 10 sa scot semnal PWM (intre 0 si 255) pentru a-l trimite driver-ului de motoare.

Aceasta postare a fost editata de KryssMee: 15 August 2016 - 10:08 AM

0

#4 Useril este offline   renatoa 

  • Sky Sapiens
  • PipPipPipPipPipPipPip
  • Grup: Members
  • Postari: 19163
  • Inregistrat: 28-April 05
  • Gender:Male

Postat 15 August 2016 - 10:13 AM

Atunci trebuie modificat in biblioteca RCArduinoFastLib, in sectiunea de cod care produce semnalul PWM de servo.

In loc sa produca un impuls in plaja 1-2 ms cu pauza de pana la 18-22 ms sau cat o fi acolo, il faci sa produca PWM-ul cu parametrii doriti de tine.
... cu picioarele pe pamant ...
0

#5 Useril este offline   KryssMee 

  • Nou venit
  • Pip
  • Grup: Members
  • Postari: 7
  • Inregistrat: 13-August 16

Postat 15 August 2016 - 11:04 AM

Numa' in librariile de Arduino nu intrasem ...

Oricum imi pare o idee buna, multumesc.
O sa imi bag nasu' in libraria aia sa vad daca pricep ceva.
Inca o data:
Multumesc.
0

#6 Useril este offline   renatoa 

  • Sky Sapiens
  • PipPipPipPipPipPipPip
  • Grup: Members
  • Postari: 19163
  • Inregistrat: 28-April 05
  • Gender:Male

Postat 15 August 2016 - 11:07 AM

Daca acolo se genereaza impulsul... ce sa facem... :unsure:
... cu picioarele pe pamant ...
0

Arata acest topic


Pagina 1 din 1

1 useri citesc topicul
0 membri, 1 vizitatori, 0 utilizatori anonimi

913Creative.ro