Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2025:mdinica:dragos.coticeru [2025/05/30 02:56]
dragos.coticeru [Hardware Design]
pm:prj2025:mdinica:dragos.coticeru [2025/05/30 04:04] (current)
dragos.coticeru [Software Design]
Line 13: Line 13:
 ===== Descriere generală ===== ===== Descriere generală =====
  
-<note tip> ​ +<note tip> ​Mașinuța este controlată exclusiv prin **Bluetooth**,​ folosind un **Arduino Uno** și un **shield L293D** pentru controlul a 4 motoare DC. Utilizatorul transmite comenzi dintr-o aplicație mobilă către un modul **HC-05**, conectat ​la Arduino prin **UART (USART)**. 
-Arduino Uno este unitatea de control care citește datele de la senzorul ultrasonic.+Comenzile primite sunt interpretate direct și transformate în semnale logice către pinii de control ai motoarelor.
  
-În funcție de distanța față de obstacolArduino comandă motoarele să se oprească sau să vireze.+Pentru feedbacksistemul include:
  
-Dacă se apropie de un obstacol, se activează un buzzer și un LED.   +un LED care se aprinde ​în timpul mișcărilor laterale și înapoi
-* LED-ul ​se aprinde ​când mașina schimbă direcția. ​  +
-* Buzzer-ul variază frecvența sunetului în funcție de distanță.+
  
-În **modul automat**, mașina navighează singură, evitând obstacolele ​cu ajutorul senzorului de distanță.+un buzzer activ care se aprinde sincron ​cu LED-ul în mers înapoi
  
-În **modul Bluetooth**,​ utilizatorul controlează manual mașina printr-o aplicație de pe telefontrimițând comenzi către Arduino printr-un modul de comunicație serială.+Controlul direcției ​și al vitezei motoarelor este realizat cu semnale digitale și PWMiar gestionarea LED-ului și buzzerului se face cu acces direct la registre și un timer hardware pentru clipire asincronă.
  
-{{ schema.png?​400x400 | Schema bloc }}+Interacțiunea modulelor este următoarea:​
  
 +Modul Bluetooth (HC-05): transmite comenzile către Arduino prin UART
  
-</​note>​+Arduino Uno: interpretează comenzile și controlează motoarele, LED-ul și buzzerul
  
-===== Hardware Design =====+Shield L293D: primește semnalele de direcție și PWM pentru fiecare motor
  
-<note tip> * listă de componente * schema electrică (realizată digitaldesenată sau simulată* descrierea rolului fiecărei componente, cu detalii despre conexiunile către Arduino </​note>​ +Motoare DC (x4): execută mișcarea ​(față, spate, stânga, dreapta, diagonale)
-Componente utilizate și rolul acestora:+
  
-Platformă acrilică – suport mecanic pentru toate componentele;​ asigură stabilitate ​și montare ușoară.+LED + Buzzer: oferă feedback vizual ​și sonor în funcție de direcție
  
-Arduino Uno – unitatea centrală de control; primește comenzi Bluetooth și controlează motoareleLED-ul și buzzerul.+Toate modulele comunică prin semnale digitale directe sau prin registrefără delay-uri software, pentru un răspuns imediat la comenzi.
  
-Shield motoare L293D – montat direct peste Arduino; permite controlul a până la 4 motoare DC prin semnale digitale.+{{ schema.png?400x400 | Schema bloc cu modulele hardware și fluxul de comenzi }} 
 +</​note>​
  
-Controlul direcției și vitezei motoarelor se face intern prin pini dedicați ai shield-ului (gestionați de biblioteca AFMotor). 
  
-4x Motoare DC 3–6V + 4 roți – asigură deplasarea vehiculului în toate direcțiile (înainte, înapoi, stânga, dreapta, diagonală).+===== Hardware Design =====
  
-LED (pe pinul A1 / PC1) – semnalizează vizual mișcarea; rămâne aprins sau clipește ​în funcție ​de direcția vehiculului.+<note tip> Aici sunt prezentate toate elementele hardware utilizate ​în proiect: lista de componente, schema electrică, descrierea conexiunilor</​note>​ 
 +==== Listă de componente ====
  
-Buzzer activ (pe pinul A0 / PC0) – semnalizează sonor mișcarea; pornește când vehiculul este în mișcare.+^ Componentă ^ Rol în sistem ^ Conectare la Arduino ​(prin Shield
 +| Arduino Uno | Controler principal | — | 
 +| Shield motoare L293D | Controlează 4 motoare DC | Se montează direct peste placa Arduino Uno | 
 +| 4x Motoare DC + roți | Permite deplasarea vehiculului | Conectate la porturile M1M4 de pe shield | 
 +| LED (roșu) | Semnalizare vizuală mișcării | A1 (PC1) | 
 +| Buzzer activ (5V) | Avertizare sonoră ​în timpul ​mișcării | A0 (PC0) | 
 +| Breadboard + jumperi | Conexiuni simple și fără lipire | — | 
 +| 2x baterii 18650 (3.7V) | Alimentare portabilă pentru logică și motoare | Conectate la portul VIN de pe shield | 
 +| Suport baterii 2x18650 | Fixare fizică a bateriilor | — |
  
-Modul Bluetooth HC-05 – permite controlul vehiculului prin comenzi transmise de pe un telefon mobil.+==== Schema electrică ====
  
-Pini utilizați:+LED-ul este conectat la pinul A1 (PC1) cu rezistor de 220Ω în serie
  
-TX al modulului → RX (D0) al Arduino – prin divizor de tensiune (pentru a coborî 5V la 3.3V)+Buzzer-ul este conectat la pinul A0 (PC0)
  
-RX al modulului ← TX (D1) al Arduino+Motoarele sunt conectate la M1, M2, M3 și M4 direct pe shield
  
-Breadboard + fire jumper – folosite pentru conectarea buzzerului, LED-ului și modulului Bluetooth la pinii corespunzători.+==== Descriere functionarea Led/Buzzer ====
  
-Baterii Li-Ion 18650 (3.7V) – alimentează atât partea de putere ​(motoare), cât și logica (Arduino + periferice).+LED-ul clipește la 0.5 secunde ​(folosind Timer1 în modul CTCcând mașina merge înapoi
  
-Suport baterii, șuruburi, piulițe – asigură fixarea sigură a componentelor pe platformă.+Buzzer-ul este activ în toate direcțiile de mers (semnal logic HIGH)
  
 {{ poza_completa.jpg?​400x400 | Vedere de sus a mașinii asamblate }} {{ poza_completa.jpg?​400x400 | Vedere de sus a mașinii asamblate }}
  
 {{ diagrama.png?​400x400 | Schema completă a conexiunilor în Tinkercad }} {{ diagrama.png?​400x400 | Schema completă a conexiunilor în Tinkercad }}
-===== Software Design ​=====+==== Software Design ====
  
-<note tip> * mediu de dezvoltare * acces direct la registre ​și întreruperi ​* control ​PWM, UART, senzor obstacol * algoritmi: FSM, ISR, filtrare, interpretare comenzi ​</​note>​ +<note tip> **Mediu ​de dezvoltare**: Arduino IDE\\ **Microcontroler**:​ ATmega328P (Arduino Uno)\\ **Tehnici**: ​acces direct la registreîntreruperi ​hardware, ​PWM, UART, control motoare ​</​note>​ 
-Mediu de dezvoltare și structură generală:+=== Structură generală ​===
  
-Limbaj: C+Limbaj: C++
  
-IDE: MPLAB X+IDE: Arduino IDE
  
-CompilatorXC8+Tip fișier principal.cpp
  
-MicrocontrolerPIC16F877A+Împărțire logică pe secțiuni:
  
-Programator/​debugger:​ PICkit 3+Inițializare porturi GPIO (registre)
  
-Aplicația este împărțită în mai multe module software, fiecare responsabil ​pentru ​o funcționalitate specifică:+Inițializare PWM pentru ​motoare
  
-Inițializare hardware (I/O, UART, temporizatoare)+Configurare ​UART pentru Bluetooth
  
-Control motoare (direcție și viteză cu PWM)+Inițializare Timer1 pentru LED blink
  
-Recepție ​comenzi ​Bluetooth prin UART+Interpretare ​comenzi ​seriale și actualizare mișcare
  
-Comportament autonom: evitare obstacole+=== Biblioteci și surse 3rd-party ===
  
-Comutare mod funcționare prin întrerupere externă+AFMotor.h — pentru control motoare cu shield L293D
  
-Biblioteci ​și fișiere incluse:+avr/io.h, avr/​interrupt.h — acces direct la registre ​și ISR
  
-xc.h – acces la registrele microcontrolerului+Arduino.h, util/​delay.h — funcții de bază
  
-Fișiere de configurare (fuses, frecvență oscilator)+=== Funcții implementate ===
  
-Toate funcțiile pentru UARTPWM și logica de control sunt scrise manualfolosind acces direct la registre.+forward()back()left(), right() — controlează cele 4 motoare
  
-Utilizarea întreruperilor:​+stop() — oprește mișcarea și semnalizarea
  
-INT0 – comutare între mod Bluetooth și mod autonom ​(prin apăsarea unui buton)+startBlinkTimer() / stopBlinkTimer() — gestionează LED-ul pe Timer1
  
-USART Receive Interrupt – primește și interpretează comenzi Bluetooth ​(fără polling)+ISR(TIMER1_COMPA_vect— LED-ul clipeste automat în mers înapoi
  
-Controlul motoarelor ​și PWM:+ISR(USART_RX_vect) — citire caractere UART de la HC-05 (activare directă mișcare)
  
-Direcție: controlată prin semnale digitale către driverul L298N (IN1–IN4)+=== Comenzi Bluetooth ===
  
-Viteză: ajustată cu PWM, folosind registrul TMR1 +Recepționate prin UARTîn format ​ASCII:
- +
-CCPR1L – controlează factorul de umplere +
- +
-TMR1 și PR1 – configurează frecvența PWM +
- +
-Mod Bluetooth (control manual): +
- +
-Comenzile sunt primite de la telefon via Bluetooth (HC-05)sub formă de caractere ​ASCII:+
  
 '​F'​ – înainte '​F'​ – înainte
Line 130: Line 129:
 '​R'​ – dreapta '​R'​ – dreapta
  
-'S' – stop+'I', '​J',​ '​K',​ 'M' – mișcări diagonale
  
-Comanda este procesată imediat în ISR-ul UART și direcția motoarelor este actualizată+'​T'​ – stop
  
-Mod autonom (ocolire obstacole):+=== Tehnici hardware și registre ===
  
-Senzori de obstacol frontal ​(exIR sau ultrasonictrimit semnale digitale către Arduino+LED-ul ​(A1) și buzzerul (A0) controlați direct cu: 
 +DDRC |= (1 << PCx)\ 
 +PORTC |= (1 << PCx) / PORTC &= ~(1 << PCx)
  
-Mașinuța evaluează starea senzorilor în bucla principală:+UARTSerial.begin(9600) + citire cu Serial.available() sau ISR
  
-Dacă un obstacol este detectat: oprire și evitare laterală+Timer1 configurat manual cu TCCR1B, OCR1A, TIMSK1 pentru LED blink asincron
  
-Dacă drumul este libercontinuă deplasarea înainte+Motoarelecontrolate cu AF_DCMotor + PWM (setSpeed())
  
-Logica este implementată cu FSM (Finite State Machine) cu stările:+=== Algoritmi utilizați ===
  
-MERGE_INAINTE+Parser UART — interpretează caracterele primite de la telefon
  
-EVITA_STANGA+Control PWM — setează viteza fiecărui motor
  
-EVITA_DREAPTA+Blink asincron — LED care semnalizează mersul înapoi fără delay
  
-OPRIT+Mapare mișcări diagonale — combină direcții cu viteze diferite (e.g. I = stânga-față)
  
-Algoritmi implementați:+=== Considerații tehnice ===
  
-FSM – pentru decizii logice ​în modul autonom+Se evită delay() ​în loop(), pentru răspuns rapid la comenzi
  
-ISR (Interrupt Service Routines) – pentru UART și comutare mod+LED-ul ​și buzzerul sunt sincronizate cu mișcarea
  
-Debouncing software – pentru ​stabilizarea butonului de mod+Codul e modular și poate fi extins cu ușurință ​pentru ​alți senzori
  
-PWM control – ajustarea vitezei motoarelor+=== Testare și integrare ===
  
-Parser comenzi seriale – interpretarea rapidă ​comenzilor Bluetooth+Testarea ​fost incrementală:​
  
-Alte considerente:​+Test LED/buzzer separat
  
-Variabilele partajate cu ISR-uri sunt declarate volatile+Test comenzi de mișcare simple
  
-Se evită delay-uri lungi în bucla principală pentru a nu bloca răspunsul la întreruperi+Test UART cu aplicație Android
  
-Codul este scris modular, permițând testarea și depanarea pe componente+Test Timer1 LED blink
  
-Testarea aplicației s-a realizat incremental:​ s-au verificat individual comanda motoarelor, recepția UART, funcționarea PWM și senzorii, urmate de integrarea ​completă ​în sistemul dual +Integrare ​completă ​Bluetooth + semnalizare + motoare
-===== Rezultate Obținute =====+
  
  
 ===== Concluzii ===== ===== Concluzii =====
  
 +Proiectul este functional si poate fi folosit in diverse domenii, atat in scop de divertisment,​ cat si scopuri mai practice, cum ar fi transportul de obiecte.
 ===== Cod sursa ===== ===== Cod sursa =====
  
-https://​github.com/​Dragos-Coticeru/​Arduino-Bluetooth-Car+https://​github.com/​Dragos-Coticeru/​Arduino-Car 
 + 
 + 
 +===== Impedimente ===== 
 + 
 +In decursul crearii acestui proiect am intampinat nenumarate impedimente,​ pe care le voi prezenta mai jos. 
 + 
 +1. Arderea modului ​Bluetooth 
 + 
 +La inceput, am observat ca motoarele se misca foarte repede, si in dorinta de a le incetini, am pus mai putina putere la motoare, fapt care insa nu a fost prea fericit. Am simtit miros de ars si am oprit alimentarea,​ constatand ca o parte din modulul Bluetooth s-a ars. 
 + 
 +2. Functionarea Buzzerului 
 + 
 +Buzzerul fiind pasiv, acesta functioneaza prin pulsatie. In momentul in care i se ofera input de tip HIGH, acesta scoate un sunet slab. Am schimbat logica, folosind pulsatie tone(), iar buzzerul funtiona cum trebuie. In schimb, fara absolut nicio aparenta directa legatura, 2 dintre motoare nu mai functionau cand faceam aceasta modificare in cod. 
 + 
 +3. Arderea ledului 
 + 
 +Initial cand am cuplat ledul, am folosit o rezistenta mult prea mare, fapt care a facut ledul sa nu se mai aprinda. Crezand ca ledul este stricat, am deconectat rezistenta si am conectat ledul direct, fapt care evident a produs arderea ledului. Nu ledul ar fi problema, dar tinand cont de numarul mare de componente care au suferit degradari, performanta proiectului devine usor imprevizibila. 
 + 
 +4. Conectarea ecranului LCD 
 + 
 +Am dorit sa conectez un ecran LCD pentru a afisa mesaje precum "​inainte"​ in momentul in care masina se deplasa in directia inainte. In schimb, am observat ca pinii de pe Shield ce ar fi trebuit conectati la SDA si SCL nu functioneaza (probabil tot din cauza unor arderi precedente). Ecranul se aprindea in schimb, dar din dorinta de a pastra puterea acumulatorilor (neavand altii de schimb), am renuntat la ideea ecranului. 
 + 
 +5. Arderea placutei Arduino 
 + 
 +Din neatentie la montarea shieldului, am produs un scurt ce a ars condensatorul de pe placuta arduino, cum este prezentat mai jos.
  
-Codul va avea modificari, inca nu este complet+{{ condensator_ars.jpg?​400x400 | Condensator Ars }}
pm/prj2025/mdinica/dragos.coticeru.1748563014.txt.gz · Last modified: 2025/05/30 02:56 by dragos.coticeru
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