This is an old revision of the document!


Lego RC CAR

Introducere

Proiectul constă într-o mașinuță LEGO Technic Porsche 911 RSR controlată la distanță, prin Bluetooth, printr-o aplicație de telefon.

Scopul este ca mașina să se poată deplasa la fel ca una normală, înainte, înapoi, cât și să își schimbe direcția prin rotirea roților. Va dispune și de un set de leduri albe, galbene și roșii, pentru a imita farurile, stop-urile, avariile și semnalizarea unei mașini reale. De asemenea, aceasta va avea un senzor ultrasonic care va funcționa ca un senzor de parcare (va declanșa un buzzer dacă mașina este prea aproape de un obstacol, buzzer-ul va emite din ce în ce mai multe semnale pe masură ce distanța devine mai mică).

Ideea a pornit de la un prieten, care are mai multe astfel de mașinuțe și care îmi tot spunea că a văzut oameni pe net care au motorizat astfel de jucării. Mi-a spus că ar vrea și el să facă asta și am zis de ce nu.

Proiectul este util în primul rând pentru că ar acoperi o varietate de concepte studiate la această materie și în al doilea rând e un Porsche LEGO teleghidat, care ar putea (dacă iese bine) să facă drift-uri.

Descriere generală

Hardware Design

Listă piese

  • Arduino Nano ATmega328P
  • Modul Bluetooth JDY-18
  • Convertor nivel logic TXS0108E
  • Driver motoare L293D
  • Motor JGA25-370
  • Senzor ultrasonic HC-SR04
  • Fotorezistor
  • Buzzer
  • LED-uri albe, galbene și roșii
  • Rezistențe
  • 2x Baterii 9V

Schema electrică

Software Design

USART

  • Pentru codul mașinii am folosit PlatformIO și avr-libc, repo GitHub
  • Pentru codul aplicației de iOS am folosit Xcode, SwiftUI și CoreBluetooth, repo GitHub

Pentru comunicarea Bluetooth am folosit modulul USART0 al microcontrolerului, configurat să declanșeze o întrerupere la finalul fiecărei recepții, astfel încât să pună caracterele primite într-un buffer și să seteze un flag atunci când a detectat finalul unui mesaj (când a detectat newline).

void USART0_init(unsigned int ubrr)
{
    /* baud rate registers */
    UBRR0H = (unsigned char)(ubrr>>8);
    UBRR0L = (unsigned char)ubrr;

    /* enable TX and RX */
    UCSR0B = _BV(RXEN0) | _BV(TXEN0);
    // enable receive complete interrupt
    UCSR0B |= _BV(RXCIE0);

    /* frame format: 8 bits, 2 stop, no parity */
    UCSR0C = _BV(USBS0) | (3<<UCSZ00);
}

...

ISR(USART_RX_vect) {
    // read data register into buffer and increase its length
    uint8_t new_data = UDR0;
    usart_buffer[usart_buffer_len++] = new_data;

    // reset buffer length on overflow
    if (usart_buffer_len >= USART_BUFFER_MAX_LEN - 1) {
        usart_buffer_len = 0;
    }

    // set string received flag
    if (new_data == '\n') {
        string_received = true;
    }
}

Rezultate Obţinute

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

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/vstoica/alexandru.ciornei.1716762899.txt.gz · Last modified: 2024/05/27 01:34 by alexandru.ciornei
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