RC Car

Introducere

Acest proiect consta in crearea unei masinute teleghidate cu ajutorul unei comunicare seriala radio (HC-12).

Descriere generală

Controller-ul trimite comenzile sub forma de un sir de caractere care mai apoi dupa ce sunt primite de masina, sunt decodificate si se actioneaza asupra ele. Comenzile se trimit cu ajutorul bibliotecii SoftwareSerial care face conexiunea prin serial intre Arduino-uri. Pentru a controla am optat pentru un motor shield deoarece ce foloseam de obicei (L298N dual H-bridge) nu-mi ajunge pentru a controla 4 motoare si un servo. Carcasa masinii e printata 3d cu filament PLA (Daca o lasi in masina vara, nici ca o mai vezi).

In viitor poate adaug un ecran Nokia 5110 pe controller si senzori infrarosu (Un fel de radar pentru cand vizibilitatea e redusa).

Hardware Design

In imaginea de mai sus, modulul RF este in realitate modulul HC-12 dar nu puteam gasi componenta exacta in aplicatie (Data Reciever = RX, Data Transmitter = Tx). La driver-ul pentru motoare, nu puteam conecta la GND-ul bun asa ca le am conectat una langa alta. Bateria din litiu e conectata la shield la EXT_PWR. Joystick shield-ul este reprezentat de un buton si un joystick unde pinii de la joystick sunt pinii si in cod (la fel si pentru buton).

Lista de componente:

  • Arduino Uno x2
  • JoyStick Shield
  • Motor Control Shield
  • HC-12 x2
  • Motoare DC x4
  • External battery pack

Concepte folosite:

  • Digital I/O - Sunt folosite pentru directia motoarele controland punte H.
  • Întreruperi - Sunt folosite pentru toate apasariile de buton.
  • Serial Communication - HC-12 Wireless communication is used to send and recieve data between the arduino and the hc-12 transmitter.
  • ADC - Joystickurile de obicei dau output analog. Aceste semnale sunt preluate si transformate in digital pentru prelucrare.

Software Design

Descrierea codului aplicaţiei (firmware):

  • mediu de dezvoltare (if any) (ArduinoIDE)
  • librării (SoftwareSerial, AFMotor)

Definitia de pini pe masina
SoftwareSerial hc12(A3, A4); // TX and RX PIN
AF_DCMotor motorfl(1);
AF_DCMotor motorfr(2);
AF_DCMotor motorbl(3);
AF_DCMotor motorbr(4);

Aici am declarat modulul HC-12 de transmitere prin pinii A3 si A4 inloc de pinii RX si TX. Motoarele le am declarat cu 'f' ca fata, 'b' spate, 'l' stanga si 'r' dreapta.

Inceperea transmisiunii seriale
Serial.begin(9600);
hc12.begin(9600);
Loop joystick
void loop() {
    String in = comEnc(analogRead(PIN_ANALOG_X), analogRead(PIN_ANALOG_Y));
    hc12.print(in);
    Serial.println(in);
    delay(100);
}
 
String comEnc(int x, int y) {
  String cmd = "";
  if (y < 516) {
    cmd += "s";
  } else if (y > 521) {
    cmd += "w";
  }
  if (x < 513) {
    cmd += "a";
  } else if (x > 516) {
    cmd += "d";
  }
  cmd += '\n';
  return cmd;
}

Aici am citit valorile de pe joystick si in functia comEnc am transformat acele valori intr-un sir de caractere care vor fi trimise la masina pentru a o controla.

Loop masina
void loop() {
  // put your main code here, to run repeatedly:
  if (hc12.available()) {
    String input = hc12.readStringUntil('\n');
    Serial.println(input);
    if (input.indexOf('s') != -1) {
      motorfl.run(FORWARD);
      motorfr.run(FORWARD);
      motorbl.run(BACKWARD);
      motorbr.run(BACKWARD);
    } else if (input.indexOf('w') != -1){
      motorfl.run(BACKWARD);
      motorfr.run(BACKWARD);
      motorbl.run(FORWARD);
      motorbr.run(FORWARD);
    } else if (input.indexOf('a') != -1){
      motorfl.run(BACKWARD);
      motorfr.run(FORWARD);
      motorbl.run(FORWARD);
      motorbr.run(BACKWARD);
    } else if (input.indexOf('d') != -1){
      motorfl.run(FORWARD);
      motorfr.run(BACKWARD);
      motorbl.run(BACKWARD);
      motorbr.run(FORWARD);
    } else {
      motorfl.run(RELEASE);
      motorfr.run(RELEASE);
      motorbl.run(RELEASE);
      motorbr.run(RELEASE);
    }
  }
}

Aici masina primeste comenzile transmise in forma de string si efectueaza miscarile de motor. Viteza se poate modifica in setup cu motorX.setSpeed().

Rezultate Obţinute

Implementarea acestui proiect a fost facuta cu ajutoarul transmiterii radio seriale prin modulul HC-12 care este destul de usor de folosit. Am invatat cum se foloseste, am invatat cum se foloseste un driver de motor si mai multe.

Concluzii

Implementarea a implicat gestionarea intrarilor analogice cum ar fi joystick ul.

Download

O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).

Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2024/ccontasel/stan.chris.txt · Last modified: 2024/05/27 19:32 by stan.chris
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0