3-WAY CAR

Motrun Florin 334CA

Introducere

Inca de mic copil am fost fascinat de lumea teleghidarii, mereu cumparand “masini cu telecomanda”, urmand mai apoi sa le dezasamblez, asa ca m-am decis sa-mi construiesc chiar eu una.

Proiectul constă în dezvoltarea unei mașini controlate la distanță, prin joystick sau accelerometru, si capabilitatea de self-drive, in care evita obstacole. Un aspect important este afișarea a diferite date înregistrate de mașină pe un ecran OLED al telecomenzii. De asemenea, pe telecomandă vor fi butoane pentru diferite functionalitati.

Ideea mi-a venit pentru ca in liceu am incercat sa fac o masina self-drive, insa din cauza ca nu aveam destule cunostinte in domeniu nu am reusit.

Descriere generală

  • Masina va fi controlata cu o telecomanda.

  • Pe un ecran oled al telecomenzii se va afisa temperatura, umiditatea si intensitatea luminii prin I2C la apasare buton print, timp de 3 secunde in care masina se va opri; se va afisa tot timpul functionarii modul de condus, cel default fiind “Joystick mode”.

  • In self-drive se va afisa automat temperatura, umiditatea, intensitatea luminii (updatate la fiecare 3 secunde) sau distanta unui obstacol la intalnire (timp de 3 secunde;nu se mai afiseaza senzor data); luminile se vor aprinde/stinge automat in functie de lumina mediului.

  • Butoanele:
    • print: va afisa datele inregistrate;
    • lights: va aprinde/stinge luminile la apasare;
    • buzzer: cat timp este apasat masina va claxona;
    • joystick: va activa modul JOYSTICK;
    • gesture: va activa modul GESTURE(MPU6050);
    • self_drive: va activa modul de conducere automata al masinii(evitarea obstacolelor).

  • Butoanele print, lights si buzzer sunt folosite doar in modurile JOYSTICK sau GESTURE.

Diagrama bloc

Hardware Design

  1. Lista de piese telecomanda:
    1. Arduino Nano;
    2. Accelerometru și giroscop cu 3 axe MPU6050;
    3. Display OLED albastru de 0.91” (128×32 px);
    4. Modul Joystick biaxial negru cu 5 pini;
    5. Modul nRF24L01;
    6. Adaptor nRF24L01;
    7. 2 x mini-breadboard;
    8. 6 x rezistența 10k;
    9. 6 x buton push;
    10. Fire;
    11. Baterie 9V;
    12. Alimentare breadboard.

  2. Lista de piese masina:
    1. Arduino UNO;
    2. Modul cu Buzzer activ;
    3. Senzor temperatura si umiditate DHT11;
    4. Modul nRF24L01;
    5. Adaptor nRF24L01;
    6. Driver de motoare dual L298N;
    7. 2 x Motor cu reductor;
    8. Modul HC-SR04;
    9. Micro Servomotor SG90 90°;
    10. Mini-breadboard;
    11. Rezistenta 2.2k;
    12. Rezistenta 220;
    13. Photorezistor LDR;
    14. Tranzistor 2N2222;
    15. Regulator tensiune L7805;
    16. Condensatori de 10uF, 100 uF, 0.1uF (unul din fiecare);
    17. 2 x buton switch;
    18. Fire;
    19. Baterie 9V;
    20. 6 x baterie 1.5V (pentru amperaj mare pentru motoare)
    21. 4 x LED alb.
  • Condensatorii si regulatorul sunt folositi pentru a scoate 5V din bateria de 9V pentru a asigura un voltaj regulat pentru componente.
  • Rezistentele de 10K sunt folosite ca rezistente de pull-down pentru butoanele telecomenzii;
  • Rezistenta de 220(de pull-up) este folosita impreuna cu tranzistorul 2N2222 (in montaj emitor la masa), pentru led-uri (faruri);
  • Rezistenta de 2.2K este folosita impreuna cu photorezistorul.

SCHEME CIRCUIT

CIRCUIT FIZIC

TELECOMANDA

remote1.jpeg remote3.jpeg

MASINA

masina.jpeg

Software Design

  • Mediu de dezvoltare: Arduino IDE.

  • Librării folosite:
    • RF24.h: pentru comunicare radio dintre masina si telecomanda;

    • Telecomanda:
      • Wire.h - comunicare I2C;
      • MPU6050.h - accelerometru;
      • ezButton.h : pentru logica butoanelor;
      • Adafruit_GFX.h si Adafruit_SSD1306.h - oled.

    • Masina:
      • NewPing.h - sensor ultrasonic;
      • Servo.h - servomotor;
      • SimpleDHT.h - DHT11.

  • Algoritmi:
    • Deplasare:
      • Pentru controlarea motoarelor se schimba rapid starea pinilor driver-ului de motor (motoarele sunt pornite secvential, cand unul cand altul, insa insesizabil pentru miscarea masinii) pentru a realiza tranzitii line, influentand impulsul si puterea motoarelor:
        • Schimabrea rapida creeaza un efect de PWM: motorul primeste impulsuri scurte de tensiune pentru controlul lin al vitezei, aceasta fiind constanta;

        • Aceasta crestere graduala a vitezei prin PWM reduce socurile initiale sau miscarile bruste, prevenind stresul mecanic si instabilitatea sistemului;

        • Cu semnalul PWM se moduleaza eficient tensiunea medie furnizata (tensiune maxima cand e activ; tensiune 0 cand e inactiv); aceasta comutare ajuta la controlul puterii efective livrate, fara a fi nevoie de sursa de putere variabila; astfel curentul de varf este gestionat in perioadele active fara a supraincalzi sau deteriora driverul motor.

    • Lumina:
      • Se convertește valoarea analogică citită de la senzor într-o tensiune de ieșire; se scaleaza valoarea analogică în intervalul adecvat pentru tensiunea de ieșire măsurată de senzor prin impartire la 204.6, obtinadu-se tensiunea corespunzătoare măsurată de senzor;
      • Se calculează rezistența senzorului de lumină pe baza tensiunii de ieșire;
      • Se utilizează rezistența calculată pentru a determina intensitatea luminii în unități de lux, folosind o formulă empirică specifică pentru senzor: lux=(R / -0.8616) ^ (1 / -0.8616) x 10 ^ (5.118 / -0.8616) , unde:
        • R = rezistenta calculata a senzorului;
        • coeficienții -0.8616 și 5.118 sunt constante empirice derivate din calibrarea senzorului.

    • Distanta:
      • Pentru a calcula distanta folosind HC-SR04 va fi utilizata formula: Viteza = 331.4 + 0.6 x Temperatura + 0.0124 x Umiditate;
      • Se calculeaza viteza sunetului cu formula de mai sus, apoi aflam durata in care unda calatoreste in microsecunde (care apoi va fi transformata in secunde) si la final se calculeaza distanta de la obstacol la senzor in centimetri.

    • Evitare obstacole:
      • Pentru evitarea obstacolelor in self drive atunci cand se intalneste un obstacol frontal, masina se opreste, da cu spatele apoi servo-ul pe care se afla senzorul de proximitate se invarte la 90 de grade spre stanga si spre dreapta, timp in care se calculeaza distantele spre eventualele obstacole din acele directii, si se alege directia de deplasare spre obstacolul cel mai indepartat (daca exista, daca nu, tot spre acea directie se deplaseaza).

    • MPU6050 si ecranul OLED vor comunica cu placuta Nano prin I2C.

  • Funcţii implementate pentru modularizarea codului:
    • Telecomanda:
      • functii citire si trimitere coordonate pentru joystick si MPU6050: joystick() si accel();
      • functie afisare pe display: displayMode().

    • Masina:
      • functii pentru miscarea motoarelor: moveStop(), moveBackward(), moveForward(), turnLeft(), turnRight();

      • functii primire coordonate si executia logicii pentru JOYSTICK MODE si GESTURE MODE: joystick() si accel();

      • functii calculare date inregistrate de senzori: calculateLux() si getSensorData() (temperatura, umiditate, intensitate lumina);

      • functie ajutatoare folosita in logica de self-drive: calculateDistance();

        • calcularea distantei se face folosind unde si temperatura si umiditatea aerului;

      • functie pentru logica de self-drive: self_drive().

Rezultate Obţinute

  • Am inteles mult mai bine domeniul hardware;
  • Am reusit sa realizez tot ce mi-am promis la inceputul proiectului, functionarea fiind impecabila (“de necrezut” chiar pentru mine), chiar daca nu facusem un research amanuntit;
  • Mi-am creat o adevarata “jucarie” pe care intentionez sa o upgradez pe viitor.

Concluzii

  • A fost unul din cele mai interesante proiecte realizate pana acum in facultate;

  • Partea de creare hardware a fost destul de grea, insa in ciuda tuturor “blestemelor” (invocarea sfintilor), pot spune ca overall a fost chiar fun experienta;

  • Partea de software a fost in medie usoara, cu toate ca as fi vrut sa o fac mai “profi” (la nivel de registrii, programare serioasa, de la 0), insa timpul nu-mi ar fi permis; a fost mai mult o joaca cu functiile predefinite Arduino; mai am de lucrat la partea de software pentru a obtine un produs cu adevarat eficient;

  • Satisfactia de a termina un astfel de proiect asa cum mi-am dorit este imensa, atat hardware cat si software; deja m-am gandit la o multitudine de proiecte pentru a evolua in acest domeniu fascinant, pe care mi-am promis ca o sa le fac asa cum ar trebui un viitor inginer sa le realizeze.

Download

Hardware: schematics.zip

Software:

Jurnal

  5 mai: crearea paginii si descrierea generala a proiectului
  8 mai : am lipit pinii pentru OLED si MPU6050 si firele pentru motoare
  15 mai : am asamblat telecomanda
  16 mai : am terminat schemele pentru circuite
  17 mai : am asamblat masina
  24 mai : am facut ultimele modificari la cod

Bibliografie/Resurse

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

Export to PDF

pm/prj2024/amocanu/florin.motrun.txt · Last modified: 2024/05/29 19:32 by florin.motrun
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