This shows you the differences between two versions of the page.
pm:prj2025:vstoica:florin.ionita3007 [2025/04/30 01:00] florin.ionita3007 [Descriere generală] |
pm:prj2025:vstoica:florin.ionita3007 [2025/05/26 13:49] (current) florin.ionita3007 [Jurnal] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Ionita Florin Teodor LineFollowing Robot ====== | + | ====== Ionita Florin Teodor - LineFollowing Robot ====== |
===== Introducere ===== | ===== Introducere ===== | ||
Proiectul ales de mine este un robot de tip line following, mai exact foloseste senzori si un motor pentru a urmari o linie neagra pe un fundal alb. | Proiectul ales de mine este un robot de tip line following, mai exact foloseste senzori si un motor pentru a urmari o linie neagra pe un fundal alb. | ||
- | Am ales fix acest proiect pentru ca mereu m-au atras robotii de genul acesta mai ales cand vedeam pe internet cat de micutzi si rapizi pot deveni si astfel am decis ca vreau si eu sa fac versiunea mea amatoriceasca de acest tip de robot. De asemenea, pe langa partea de navigare as dori sa implementez si un sistem sonor prin care pot fi puse ori melodii(tokyo drift clar), ori sa faca sunete in functie de ce miscari face. Daca nu devine foarte complicat ma gandesc sa-i implementez si un sistem de luminite sa-l faca mai dragut. | + | Am ales fix acest proiect pentru ca mereu m-au atras robotii de genul acesta mai ales cand vedeam pe internet cat de micutzi si rapizi pot deveni si astfel am decis ca vreau si eu sa fac versiunea mea amatoriceasca de acest tip de robot. De asemenea, pe langa partea de navigare as dori sa implementez si un sistem giroscopic pentru miscari mult mai smooth. Daca nu devine foarte complicat ma gandesc sa-i implementez si un sistem de luminite sa-l faca mai dragut. |
- | Consider ca este util intrucat o sa ma treaca prin conceptele studiate la laboratoare si la curs si pentru ca o sa am un proiect hardware pe care o sa-l pot pune in cv. | + | Consider ca este util intrucat o sa ma treaca prin conceptele studiate la laboratoare si la curs si pentru ca o sa am un proiect hardware pe care o sa-l pot pune in CV. |
===== Descriere generală ===== | ===== Descriere generală ===== | ||
Line 13: | Line 13: | ||
Arduino-ul o sa fie conectat si la un MPU6050 pentru a avea input legat de miscarile masinii si pentru a creea miscari mult mai smooth sau mai bune in functie de context. Arduino-ul o sa fie alimentat la baterie. | Arduino-ul o sa fie conectat si la un MPU6050 pentru a avea input legat de miscarile masinii si pentru a creea miscari mult mai smooth sau mai bune in functie de context. Arduino-ul o sa fie alimentat la baterie. | ||
- | Schema bloc | + | ==== Schema bloc: ==== |
+ | |||
+ | |||
+ | {{:pm:prj2025:vstoica:cd:florin.ionita3007:diagrama_blocv2.png?700|}} | ||
- | {{:pm:prj2025:vstoica:diagrama_bloc.png?700|}} | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
- | Listă de piese: | + | ==== Schema Hardware ==== |
- | * scheme electrice (TODO) | + | |
- | * MPU6050 - senzor giroscopic i2c | + | {{:pm:prj2025:vstoica:cd:florin.ionita3007:schema_line_followerv2.pdf|}} |
- | * Arduino UNO ATMEGA328P | + | |
- | * 2 x senzor IR | + | {{:pm:prj2025:vstoica:cd:florin.ionita3007:preview_schema.png?750|}} |
- | * 2 x motor reductor 3-6V | + | |
- | * bila pentru miscare | + | |
- | * fire | + | ==== Bill of Materials ==== |
- | * baterii | + | |
- | * breadboard | + | ^ Componenta ^ Protocol ^ Datasheet ^ De unde ^ |
+ | | Driver Motor L298N | PWM | [[https://www.alldatasheet.com/datasheetpdf/view/22440/STMICROELECTRONICS/L298N.html|Datasheet]] | [[https://www.optimusdigital.ro/en/brushed-motor-drivers/145-l298n-dual-motor-driver.html|Optimus Digital]] | | ||
+ | | Accelerometru cu 3 axe ADXL345 | I2C | [[https://www.alldatasheet.com/datasheet-pdf/view/254714/AD/ADXL345.html|Datasheet]] |[[https://www.optimusdigital.ro/en/inertial-sensors/97-adxl345-tripple-axis-accelerometer.html?gad_source=1&gad_campaignid=19615979487&gclid=Cj0KCQjwiqbBBhCAARIsAJSfZkZ3ybkmFhU-DYKB2Hxwh7CWmXYRM_rlvSro77Xld6HZoLPo71cQKysaAnbgEALw_wcB|Optimus Digital]]| | ||
+ | | Senzor IR Pololu QTR-MD-05A | ADC | [[https://www.pololu.com/product/4245/specs| Site]] | [[https://www.optimusdigital.ro/ro/senzori-senzori-optici/7240-senzor-infrarou-reflectiv-pololu-qtr-md-05a.html?srsltid=AfmBOoodxzHx3HC4pdossezDmrJMK1WyiWaIDl9FO5su6M7_Wnj2UuZw| Optimus Digital]] | | ||
+ | |Breadboard | | | tot Optimus| | ||
+ | |Fire | | | tot Optimus| | ||
+ | |Schelet robot | | | Unchiul meu| | ||
+ | |4 x 1,5v baterii| | | De prin casa| | ||
+ | |Arduino Uno r3| | [[https://docs.arduino.cc/resources/datasheets/A000066-datasheet.pdf | Arduino]]| Dintr-un set | | ||
+ | |2x motor reductor 3-6V| | [[https://media.digikey.com/pdf/Data%20Sheets/Adafruit%20PDFs/3777_Web.pdf |DataSheet]] | [[https://www.optimusdigital.ro/ro/motoare-altele/139-motor-cu-reductor-si-roata.html?gad_source=1&gad_campaignid=19615979487&gclid=Cj0KCQjwiqbBBhCAARIsAJSfZkbl5nGZRmgx9FJ0SIlhQVq_V4UIm64DeOojIgnQsp4zkLNigOwOGHEaAjpAEALw_wcB | Optimus Digital]] | | ||
+ | |||
+ | ==== Conexiuni pini ==== | ||
+ | |||
+ | ^ Componentă ^ Pin/Conexiune ^ Legătură/Interfață ^ Funcție/Descriere ^ | ||
+ | | Atmega324P | PC0 (ADC0) | Senzor linie 1 | Citire valoare analogică | | ||
+ | | Atmega324P | PC1 (ADC1) | Senzor linie 2 | Citire valoare analogică | | ||
+ | | Atmega324P | PC2 (ADC2) | Senzor linie 3 | Citire valoare analogică | | ||
+ | | Atmega324P | PC3 (ADC3) | Senzor linie 4 | Citire valoare analogică | | ||
+ | | Atmega324P | PC4 (ADC4/SDA) | ADXL345 (SDA) | Comunicație I2C – date | | ||
+ | | Atmega324P | PC5 (ADC5/SCL) | ADXL345 (SCL) | Comunicație I2C – ceas | | ||
+ | | Atmega324P | PD5 | ENA (L298N) | Semnal PWM motor stânga | | ||
+ | | Atmega324P | PD6 | ENB (L298N) | Semnal PWM motor dreapta | | ||
+ | | Atmega324P | PD2, PD3 | IN1, IN2 (L298N) | Control direcție motor stânga | | ||
+ | | Atmega324P | PD4, PD7 | IN3, IN4 (L298N) | Control direcție motor dreapta | | ||
+ | | L298N | OUT1, OUT2 | Motor A | Motor stânga – semnale de putere | | ||
+ | | L298N | OUT3, OUT4 | Motor B | Motor dreapta – semnale de putere | | ||
+ | | L298N | VS | Baterie 1 x 9V | Alimentare pentru motoare | | ||
+ | | L298N | VSS | +5V | Alimentare logică driver | | ||
+ | | Senzori IR (CNY70/QTR)| Semnal analogic | A0–A3 (sau ADC0–ADC3) | Reflectanță – detectare linie | | ||
+ | | ADXL345 | VDD_IO, VS | +3.3V sau +5V | Alimentare accelerometru | | ||
+ | | ADXL345 | GND | GND comun | Masă comună sistem | | ||
+ | | Senzori + L298N + MCU| GND | GND comun | Referință masă | | ||
+ | |||
+ | |||
+ | ==== Galerie ==== | ||
+ | |||
+ | |||
+ | {{:pm:prj2025:vstoica:cd:florin.ionita3007:din_profil.jpeg?600|}} | ||
+ | |||
+ | {{:pm:prj2025:vstoica:cd:florin.ionita3007:din_fata.jpeg?300|}} | ||
+ | {{:pm:prj2025:vstoica:cd:florin.ionita3007:de_jos.jpeg?300|}} | ||
+ | |||
+ | |||
Line 33: | Line 79: | ||
- | <note tip> | + | === Descrierea codului aplicatiei === |
- | Descrierea codului aplicaţiei (firmware): | + | |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | Codul aplicatiei controleaza un robot autonom capabil sa urmeze o linie folosind patru senzori IR analogici si un accelerometru ADXL345 pentru a ajusta viteza in functie de inclinarea terenului. Motorul stang si cel drept sunt controlate printr-un driver L298N conectat la pinii digitali ai microcontrolerului, folosind semnale PWM pentru ajustarea vitezei. |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | === Etapa 3: Surse si functii implementate === |
- | * (etapa 3) surse şi funcţii implementate | + | |
- | </note> | + | Fisierul principal al aplicatiei este '''main.c''', care contine codul firmware-ului pentru controlul robotului line follower. Toate functiile periferice sunt implementate direct, fara librarii externe, folosind registrele microcontrolerului ATmega328P. Programul este organizat modular, cu functii separate pentru fiecare componenta hardware: motoare, UART, I2C, ADC si accelerometru. |
+ | |||
+ | === Functiile implementate: === | ||
+ | |||
+ | pwm_init() | ||
+ | motor_forward() | ||
+ | motor_left() | ||
+ | motor_right() | ||
+ | motor_stop() | ||
+ | uart_init(ubrr) | ||
+ | uart_putchar() | ||
+ | i2c_init() | ||
+ | i2c_start(), i2c_stop(), i2c_write(), i2c_read_ack(), i2c_read_nack()4 | ||
+ | adxl345_write(reg, value) | ||
+ | adxl345_read_xyz(x, y, z) | ||
+ | adxl345_init() | ||
+ | adc_init() | ||
+ | read_adc(channel) | ||
+ | follow_line() | ||
+ | main() | ||
+ | |||
+ | |||
+ | === Mediu de dezvoltare === | ||
+ | |||
+ | Aplicatia a fost dezvoltata pe WSL si programul a fost incarcat prin sistem de operare Windows folosind toolchain-ul GNU AVR. Am utilizat un editor de text (VS Code) impreună cu urmatoarele unelte: | ||
+ | |||
+ | * '''Compilator''': avr-gcc | ||
+ | * '''Uploader''': avrdude | ||
+ | * '''Platforma hardware''': Arduino Uno R3 cu microcontroler ATmega328P | ||
+ | * '''Terminal serial pentru debugging''': Serial Monitor Arduino IDE | ||
+ | |||
+ | Compilarea si programarea s-au realizat prin urmatoarele comenzi: | ||
+ | |||
+ | <code> | ||
+ | avr-gcc -mmcu=atmega328p -DF_CPU=16000000UL -Os -o main.elf main.c -Wl,-u,vfprintf -lprintf_flt -lm | ||
+ | |||
+ | avr-objcopy -O ihex -R .eeprom main.elf main.hex | ||
+ | |||
+ | avrdude -c arduino -p m328p -P COM5 -b 115200 -U flash:w:C:\Users\40731\Desktop\main.hex:i | ||
+ | </code> | ||
+ | |||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
Line 50: | Line 137: | ||
===== Download ===== | ===== Download ===== | ||
+ | |||
+ | {{:pm:prj2025:vstoica:cd:florin.ionita3007:main.rar|}} | ||
<note warning> | <note warning> | ||
Line 59: | Line 148: | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
- | <note tip> | + | 4/30 ora 1:01 - am facut inceputurile |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | |
- | </note> | + | 4/30 15:48 - am schimbat diagrama cu senzorul si accelometru si am cumparat de ce mai aveam nevoie Jaja Bless -38 lei |
+ | |||
+ | 5/17 ora 3:00 - am sters schema din kicad si am refacut-o | ||
+ | |||
+ | 5/18 ora 15:00 - ultimele retusuri pe hardware | ||
+ | 5/26 ora 1:49 - am schimbat pinii pe schema hardware, adaugat software-ul, retusat facut putin mai dragut si adaugat codul in download | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||