This shows you the differences between two versions of the page.
pm:prj2025:vstoica:florin.ionita3007 [2025/04/30 01:10] 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 ===== | ||
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_bloc.png?700|}} | + | |
+ | |||
+ | {{:pm:prj2025:vstoica:cd:florin.ionita3007:diagrama_blocv2.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 34: | 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 51: | Line 137: | ||
===== Download ===== | ===== Download ===== | ||
+ | |||
+ | {{:pm:prj2025:vstoica:cd:florin.ionita3007:main.rar|}} | ||
<note warning> | <note warning> | ||
Line 62: | Line 150: | ||
4/30 ora 1:01 - am facut inceputurile | 4/30 ora 1:01 - am facut inceputurile | ||
+ | 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 ===== | ||