This shows you the differences between two versions of the page.
|
pm:prj2026:florin.stancu:mihnea.popescu1811 [2026/05/06 15:33] mihnea.popescu1811 |
pm:prj2026:florin.stancu:mihnea.popescu1811 [2026/05/15 02:51] (current) mihnea.popescu1811 [Schematic] |
||
|---|---|---|---|
| Line 2: | Line 2: | ||
| ===== Introducere ===== | ===== Introducere ===== | ||
| - | <note tip> | + | Acest proiect consta in realizarea unui robot mobil autonom capabil sa navigheze printr-un labirint, mentinand o traiectorie stabila prin urmarirea peretilor (Wall-Following). |
| - | Prezentarea pe scurt a proiectului vostru: | + | |
| - | * ce face | + | * **Ce face:** Utilizeaza trei senzori ultrasonici (HC-SR04) pentru a masura distanta fata de obstacole. Pe baza datelor, un algoritm PID ajusteaza viteza motoarelor via PWM pentru a mentine robotul la o distanta fixa de perete. |
| - | * care este scopul lui | + | * **Scopul lui:** Realizarea unui sistem de navigare autonoma bazat pe reactii rapide la mediu prin bucle de feedback negativ, fara o harta predefinita. |
| - | * care a fost ideea de la care aţi pornit | + | * **Ideea de la care am pornit:** Explorarea roboticii mobile si implementarea unui algoritm de control clasic (PID) pentru a elimina mersul in "zig-zag". |
| - | * de ce credeţi că este util pentru alţii şi pentru voi | + | * **De ce este util:** Pentru echipa, este un exercitiu esential de procesare a semnalelor prin intreruperi si implementare a controlului automat bare-metal. Pentru ceilalti, exemplifica generarea unui comportament autonom complex printr-o logica de control simpla. |
| - | </note> | + | |
| ===== Descriere generală ===== | ===== Descriere generală ===== | ||
| - | <note tip> | + | Fluxul de date planificat si interactiunea modulelor: |
| - | O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează. | + | |
| - | Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html | + | - Citire ADC: Sistemul citeste potentiometrul pentru a stabili distanta dorita fata de perete (referinta). |
| - | </note> | + | - Preluare Date Senzori: La intervale regulate (ex. 50ms), MCU declanseaza senzorii ultrasonici si calculeaza distantele (Fata, Stanga, Dreapta) folosind Timere/Intreruperi. |
| + | - Calcul Eroare: Se calculeaza diferenta dintre distanta laterala curenta si referinta dorita. | ||
| + | - Procesare PID: Modulul central aplica algoritmul de control pe baza erorii pentru a calcula corectia necesara. | ||
| + | - Generare Semnal: MCU genereaza semnalele PWM ajustate si pinii de directie. | ||
| + | - Actionare: Driverul L298N primeste comenzile si modifica asimetric turatia celor doua motoare DC pentru a corecta traiectoria. | ||
| + | Logica de navigare foloseste o ierarhie stricta: EVITARE COLIZIUNE FRONTALA > URMARIRE PERETE LATERAL. Daca senzorul frontal scade sub un prag critic, robotul suprascrie bucla PID si executa o rotatie de urgenta. | ||
| + | |||
| + | {{:pm:prj2026:florin.stancu:diagramabunablock.png?800|}} | ||
| ===== Hardware Design ===== | ===== Hardware Design ===== | ||
| + | Design-ul fizic este conceput pentru a asigura stabilitatea robotului in timpul navigarii prin labirint, utilizand un sasiu alungit 2WD care permite montarea strategica a senzorilor. Elementul central il reprezinta sistemul de detectie format din trei senzori ultrasonici, dispusi pentru a acoperi zonele frontala, stanga si dreapta, oferind robotului o "viziune" completa asupra mediului inconjurator. | ||
| - | <note tip> | + | **Lista de piese:** |
| - | Aici puneţi tot ce ţine de hardware design: | + | |
| - | * listă de piese | + | |
| - | * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) | + | |
| - | * diagrame de semnal | + | |
| - | * rezultatele simulării | + | |
| - | </note> | + | |
| + | * 1 x Microcontroler ATmega324P (pe placa de dezvoltare) | ||
| + | * 1 x Kit Sasiu Masina 2WD (include 2 motoare DC, roti, roata caster si suport baterii) | ||
| + | * 1 x Modul Driver Motoare Dual L298N | ||
| + | * 3 x Senzori Ultrasonici HC-SR04 (pentru detectia peretilor pe 3 directii) | ||
| + | * 1 x Potentiometru 10 kΩ (pentru reglarea dinamica a parametrilor PID - Lab 4) | ||
| + | * 1 x Baterie 9V + Conector (alimentare logica microcontroler) | ||
| + | * 1 x Pachet 4 baterii AA (alimentare forta motoare) | ||
| + | * 1 x Breadboard 830 puncte | ||
| + | * Fire de conexiune Dupont (Tata-Tata pentru breadboard, Mama-Tata pentru senzori si driver) | ||
| + | |||
| + | ^ Board Pin ^ Function ^ Component ^ Direction ^ Description ^ | ||
| + | | Pin 4 | Digital Out | Driver L298N (IN1) | Output | Directie motor stang | | ||
| + | | Pin 5 | Digital Out | Driver L298N (IN2) | Output | Directie motor stang | | ||
| + | | Pin 6 | Digital Out | Driver L298N (IN3) | Output | Directie motor drept | | ||
| + | | Pin 7 | Digital Out | Driver L298N (IN4) | Output | Directie motor drept | | ||
| + | | Pin 10 | PWM Out | Driver L298N (ENA) | Output | Viteza motor stang | | ||
| + | | Pin 11 | PWM Out | Driver L298N (ENB) | Output | Viteza motor drept | | ||
| + | | Pin 2 | Digital Out | Senzor Fata (Trig) | Output | Trigger ultrasunete | | ||
| + | | Pin 3 | Digital In | Senzor Fata (Echo) | Input | Receptie ecou | | ||
| + | | Pin 8 | Digital Out | Senzor Stanga (Trig) | Output | Trigger ultrasunete | | ||
| + | | Pin 9 | Digital In | Senzor Stanga (Echo) | Input | Receptie ecou | | ||
| + | | Pin 12 | Digital Out | Senzor Dreapta (Trig) | Output | Trigger ultrasunete | | ||
| + | | Pin 13 | Digital In | Senzor Dreapta (Echo) | Input | Receptie ecou | | ||
| + | |||
| + | |||
| + | ===== Schematic ===== | ||
| + | |||
| + | {{:pm:prj2026:florin.stancu:schematicbun.png?800|}} | ||
| ===== Software Design ===== | ===== Software Design ===== | ||
| - | <note tip> | + | Dezvoltarea software-ului se realizeaza la nivel bare-metal, avand la baza o arhitectura orientata pe evenimente (intreruperi) si o bucla de control principala. |
| - | Descrierea codului aplicaţiei (firmware): | + | |
| - | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | * **Mediu de dezvoltare:** Codul este scris in C, folosind un mediu precum Visual Studio Code cu avr-gcc si Makefile (sau Atmel/Microchip Studio). |
| - | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | * **Librarii si surse 3rd-party:** Se vor folosi exclusiv bibliotecile standard AVR (`<avr/io.h>`, `<avr/interrupt.h>`, `<util/delay.h>`). Nu se folosesc biblioteci externe (cum ar fi cele de Arduino), tot codul interactionand direct cu registrii. |
| - | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | * **Algoritmi si structuri de date:** |
| - | * (etapa 3) surse şi funcţii implementate | + | * **Algoritm PID:** Calcul matematic folosit pentru a mentine distanta constanta fata de perete si a elimina oscilatiile (mersul in zig-zag). |
| - | </note> | + | * **Finite State Machine (FSM):** Masina de stari pentru controlul logicii de navigare (ex. stari: `FOLLOW_WALL`, `CORNER_TURN`, `AVOID_FRONT_OBSTACLE`). |
| + | * Structuri de tip `struct` pentru a grupa datele senzorilor si coeficientii PID (Kp, Ki, Kd, eroarea_anterioara). | ||
| + | * **Surse si functii implementate:** | ||
| + | * `init_timers_and_pwm()`: Configureaza registrele pentru generarea PWM-ului motoarelor si timerele pentru senzori. | ||
| + | * `read_ultrasonic(sensor_pin)`: Declanseaza senzorul si masoara durata semnalului Echo prin intreruperi pentru a calcula distanta. | ||
| + | * `compute_PID(current_dist, setpoint)`: Calculeaza eroarea si aplica formula Proportional-Integral-Derivativ. | ||
| + | * `drive_motors(speed_left, speed_right)`: Aplica rezultatul PID pe pinii de comanda ai driverului L298N. | ||
| ===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||