Differences

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

Link to this comparison view

pm:prj2026:florin.stancu:mihnea.popescu1811 [2026/05/06 15:22]
mihnea.popescu1811 created
pm:prj2026:florin.stancu:mihnea.popescu1811 [2026/05/15 02:51] (current)
mihnea.popescu1811 [Schematic]
Line 1: Line 1:
 ====== Maze-Runner:​ Robot Autonom Wall-Follower ====== ====== Maze-Runner:​ Robot Autonom Wall-Follower ======
 +===== Introducere =====
 +
 +Acest proiect consta in realizarea unui robot mobil autonom capabil sa navigheze printr-un labirint, mentinand o traiectorie stabila prin urmarirea peretilor (Wall-Following).
 +
 +  * **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.
 +  * **Scopul lui:** Realizarea unui sistem de navigare autonoma bazat pe reactii rapide la mediu prin bucle de feedback negativ, fara o harta predefinita.
 +  * **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 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.
 +===== Descriere generală =====
 +
 +Fluxul de date planificat si interactiunea modulelor:
 +
 +  - Citire ADC: Sistemul citeste potentiometrul pentru a stabili distanta dorita fata de perete (referinta).
 +  - 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 =====
 +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.
 +
 +**Lista de piese:**
 +
 +  * 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 =====
 +
 +
 +Dezvoltarea software-ului se realizeaza la nivel bare-metal, avand la baza o arhitectura orientata pe evenimente (intreruperi) si o bucla de control principala.
 +
 +  * **Mediu de dezvoltare:​** Codul este scris in C, folosind un mediu precum Visual Studio Code cu avr-gcc si Makefile (sau Atmel/​Microchip Studio).
 +  * **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 si structuri de date:**
 +    * **Algoritm PID:** Calcul matematic folosit pentru a mentine distanta constanta fata de perete si a elimina oscilatiile (mersul in zig-zag).
 +    * **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 =====
 +
 +<note tip>
 +Care au fost rezultatele obţinute în urma realizării proiectului vostru.
 +</​note>​
 +
 +===== Concluzii =====
 +
 +===== Download =====
 +
 +<note warning>
 +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**.
 +</​note>​
 +
 +===== Jurnal =====
 +
 +<note tip>
 +Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.
 +</​note>​
 +
 +===== Bibliografie/​Resurse =====
 +
 +<​note>​
 +Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**.
 +</​note>​
 +
 +<​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
 +
 +
pm/prj2026/florin.stancu/mihnea.popescu1811.1778070145.txt.gz · Last modified: 2026/05/06 15:22 by mihnea.popescu1811
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