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 03:09]
dragos.coticeru [Simulare (Wokwi sau Tinkercad)]
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
  
 +Arduino Uno: interpretează comenzile și controlează motoarele, LED-ul și buzzerul
 +
 +Shield L293D: primește semnalele de direcție și PWM pentru fiecare motor
 +
 +Motoare DC (x4): execută mișcarea (față, spate, stânga, dreapta, diagonale)
 +
 +LED + Buzzer: oferă feedback vizual și sonor în funcție de direcție
 +
 +Toate modulele comunică prin semnale digitale directe sau prin registre, fără delay-uri software, pentru un răspuns imediat la comenzi.
 +
 +{{ schema.png?​400x400 | Schema bloc cu modulele hardware și fluxul de comenzi }}
 </​note>​ </​note>​
 +
  
 ===== Hardware Design ===== ===== Hardware Design =====
  
-<note tip> Aici sunt prezentate toate elementele hardware utilizate în proiect: lista de componente, schema electrică, descrierea conexiunilor ​și rezultatele simulării. </​note>​+<note tip> Aici sunt prezentate toate elementele hardware utilizate în proiect: lista de componente, schema electrică, descrierea conexiunilor. </​note>​
 ==== Listă de componente ==== ==== Listă de componente ====
  
Line 42: Line 53:
 | LED (roșu) | Semnalizare vizuală a mișcării | A1 (PC1) | | LED (roșu) | Semnalizare vizuală a mișcării | A1 (PC1) |
 | Buzzer activ (5V) | Avertizare sonoră în timpul mișcării | A0 (PC0) | | Buzzer activ (5V) | Avertizare sonoră în timpul mișcării | A0 (PC0) |
-| Modul Bluetooth HC-05 | Transmitere comenzi de pe telefon via Bluetooth | TX → D0, RX → D1 (cu divizor de tensiune) | 
-| Display LCD 16x2 I2C | Afișează direcția curentă a mașinii | SDA → A4, SCL → A5 (pe pinii shield-ului,​ jos stânga) | 
 | Breadboard + jumperi | Conexiuni simple și fără lipire | — | | 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 | | 2x baterii 18650 (3.7V) | Alimentare portabilă pentru logică și motoare | Conectate la portul VIN de pe shield |
Line 54: Line 63:
 Buzzer-ul este conectat la pinul A0 (PC0) Buzzer-ul este conectat la pinul A0 (PC0)
  
-Modulul HC-05 este conectat ​la:+Motoarele sunt conectate ​la M1, M2, M3 și M4 direct pe shield
  
-TX → D0 (RX Arduino) – cu divizor de tensiune (2kΩ + 1kΩ)+==== Descriere functionarea Led/Buzzer ====
  
-RX → D1 (TX Arduino)+LED-ul clipește la 0.5 secunde ​(folosind Timer1 în modul CTCcând mașina merge înapoi
  
-Display LCD I2C conectat la:+Buzzer-ul este activ în toate direcțiile de mers (semnal logic HIGH)
  
-SDA → A4 (jos pe shield, spre margine)+{{ poza_completa.jpg?​400x400 | Vedere de sus a mașinii asamblate }}
  
-SCL → A5 (jos pe shield, lângă SDA)+{{ diagrama.png?​400x400 | Schema completă a conexiunilor în Tinkercad }} 
 +==== Software Design ====
  
-Motoarele sunt conectate ​la M1M2M3 și M4 direct pe shield+<note tip> **Mediu de dezvoltare**:​ Arduino IDE\\ **Microcontroler**:​ ATmega328P (Arduino Uno)\\ **Tehnici**:​ acces direct ​la registreîntreruperi hardwarePWM, UART, control motoare </​note>​ 
 +=== Structură generală ===
  
-==== Diagramă de semnal ====+Limbaj: C++
  
-LED-ul clipește la 0.5 secunde (folosind Timer1 în modul CTC) când mașina merge înapoi+IDE: Arduino IDE
  
-Buzzer-ul este activ în toate direcțiile de mers (semnal logic HIGH)+Tip fișier principal: .cpp
  
-LCD-ul afișează comenzile în timp real''​inainte'',​ ''​inapoi'',​ ''​dreapta''​ etc.+Împărțire logică pe secțiuni:
  
-{{ diagrama.png?​400x400 | Schema completă a conexiunilor în Tinkercad }} +Inițializare porturi GPIO (registre)
-===== 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>​ +Inițializare ​PWM pentru motoare
-Mediu de dezvoltare și structură generală:+
  
-Limbaj: C+Configurare UART pentru Bluetooth
  
-IDE: MPLAB X+Inițializare Timer1 pentru LED blink
  
-Compilator: XC8+Interpretare comenzi seriale și actualizare mișcare
  
-Microcontroler:​ PIC16F877A+=== Biblioteci și surse 3rd-party ===
  
-Programator/​debugger:​ PICkit 3+AFMotor.h — pentru control motoare cu shield L293D
  
-Aplicația este împărțită în mai multe module softwarefiecare responsabil pentru o funcționalitate specifică:+avr/io.havr/​interrupt.h — acces direct la registre și ISR
  
-Inițializare hardware (I/O, UART, temporizatoare)+Arduino.h, util/​delay.h — funcții de bază
  
-Control motoare (direcție și viteză cu PWM)+=== Funcții implementate ===
  
-Recepție comenzi Bluetooth prin UART+forward(), back(), left(), right() — controlează cele 4 motoare
  
-Comportament autonom: evitare obstacole+stop() — oprește mișcarea și semnalizarea
  
-Comutare mod funcționare prin întrerupere externă+startBlinkTimer() / stopBlinkTimer() — gestionează LED-ul pe Timer1
  
-Biblioteci și fișiere incluse:+ISR(TIMER1_COMPA_vect) — LED-ul clipeste automat în mers înapoi
  
-xc.h – acces la registrele microcontrolerului+ISR(USART_RX_vect) — citire caractere UART de la HC-05 (activare directă mișcare)
  
-Fișiere de configurare (fuses, frecvență oscilator)+=== Comenzi Bluetooth ===
  
-Toate funcțiile pentru ​UART, PWM și logica de control sunt scrise manual, folosind acces direct la registre.+Recepționate prin UART, în format ASCII:
  
-Utilizarea întreruperilor:​+'​F'​ – înainte
  
-INT0 – comutare între mod Bluetooth și mod autonom (prin apăsarea unui buton)+'​B' ​– înapoi
  
-USART Receive Interrupt ​– primește și interpretează comenzi Bluetooth (fără polling)+'​L' ​– stânga
  
-Controlul motoarelor și PWM:+'​R'​ – dreapta
  
-Direcție: controlată prin semnale digitale ​tre driverul L298N (IN1–IN4)+'​I',​ '​J',​ '​K',​ '​M'​ – mișri diagonale
  
-Viteză: ajustată cu PWM, folosind registrul TMR1+'​T'​ – stop
  
-CCPR1L – controlează factorul de umplere+=== Tehnici hardware și registre ===
  
-TMR1 și PR1 – configurează frecvența PWM+LED-ul (A1) și buzzerul (A0) controlați direct cu: 
 +DDRC |= (1 << PCx)\ 
 +PORTC |= (1 << PCx) / PORTC &= ~(1 << PCx)
  
-Mod Bluetooth ​(control manual):+UART: Serial.begin(9600+ citire cu Serial.available() sau ISR
  
-Comenzile sunt primite de la telefon via Bluetooth (HC-05)sub formă de caractere ASCII:+Timer1 configurat manual cu TCCR1BOCR1A, TIMSK1 pentru LED blink asincron
  
-'​F'​ – înainte+Motoarele: controlate cu AF_DCMotor + PWM (setSpeed())
  
-'​B'​ – înapoi+=== Algoritmi utilizați ===
  
-'​L'​ – stânga+Parser UART — interpretează caracterele primite de la telefon
  
-'​R'​ – dreapta+Control PWM — setează viteza fiecărui motor
  
-'​S'​ – stop+Blink asincron — LED care semnalizează mersul înapoi fără delay
  
-Comanda este procesată imediat în ISR-ul UART șdirecția motoarelor este actualizată+Mapare mișcări diagonale — combină ​direcții cu viteze diferite (e.g. I = stânga-față)
  
-Mod autonom (ocolire obstacole):+=== Considerații tehnice ===
  
-Senzori de obstacol frontal ​(ex: IR sau ultrasonictrimit semnale digitale către Arduino+Se evită delay() în loop(), pentru răspuns rapid la comenzi
  
-Mașinuța evaluează starea senzorilor în bucla principală:​+LED-ul ​și buzzerul sunt sincronizate cu mișcarea
  
-Dacă un obstacol este detectat: oprire ​și evitare laterală+Codul e modular ​și poate fi extins cu ușurință pentru alți senzori
  
-Dacă drumul este liber: continuă deplasarea înainte+=== Testare și integrare ===
  
-Logica este implementată cu FSM (Finite State Machine) cu stările:+Testarea a fost incrementală:
  
-MERGE_INAINTE+Test LED/buzzer separat
  
-EVITA_STANGA+Test comenzi de mișcare simple
  
-EVITA_DREAPTA+Test UART cu aplicație Android
  
-OPRIT+Test Timer1 LED blink
  
-Algoritmi implementați:​+Integrare completă Bluetooth + semnalizare + motoare
  
-FSM – pentru decizii logice în modul autonom 
  
-ISR (Interrupt Service Routines) – pentru UART și comutare mod+===== Concluzii =====
  
-Debouncing software – pentru stabilizarea butonului ​de mod+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 =====
  
-PWM control – ajustarea vitezei motoarelor+https://​github.com/​Dragos-Coticeru/​Arduino-Car
  
-Parser comenzi seriale – interpretarea rapidă a comenzilor Bluetooth 
  
-Alte considerente:​+===== Impedimente =====
  
-Variabilele partajate cu ISR-uri sunt declarate volatile+In decursul crearii acestui proiect am intampinat nenumarate impedimente,​ pe care le voi prezenta mai jos.
  
-Se evită delay-uri lungi în bucla principală pentru a nu bloca răspunsul la întreruperi+1. Arderea modului Bluetooth
  
-Codul este scris modularpermițând testarea și depanarea pe componente+La inceputam 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.
  
-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 +2. Functionarea Buzzerului
-===== Rezultate Obținute =====+
  
 +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.
  
-===== Concluzii =====+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.
  
-===== Cod sursa =====+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
  
-https://​github.com/​Dragos-Coticeru/​Arduino-Bluetooth-Car+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.1748563741.txt.gz · Last modified: 2025/05/30 03:09 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