This shows you the differences between two versions of the page.
pm:prj2025:apredescu:cristian.deda [2025/05/07 00:55] cristian.deda |
pm:prj2025:apredescu:cristian.deda [2025/05/31 22:42] (current) cristian.deda [Rezultate Obţinute] |
||
---|---|---|---|
Line 2: | Line 2: | ||
===== Introducere ===== | ===== Introducere ===== | ||
- | **„Willy – the Buddy Chaser”** este o masinuta autonoma proiectata sa urmareasca un om in timp real, folosind senzori de detectie (cu infrarosu) si un microcontroler. Scopul principal al proiectului este dezvoltarea unui sistem hardware capabil sa identifice si sa urmareasca un obiect in miscare, integrand concepte esentiale din domeniul proiectarii cu microprocesoare. | + | **„Willy – the Buddy Chaser”** este o masinuta autonoma proiectata sa urmareasca un om in timp real, folosind senzori de detectie (cu infrarosu), un senzor ultrasonic si un microcontroler. Scopul principal al proiectului este dezvoltarea unui sistem hardware capabil sa identifice si sa urmareasca un obiect in miscare, integrand concepte esentiale din domeniul proiectarii cu microprocesoare. |
Ideea a pornit din dorinta de a combina elemente de robotica cu o componenta interactiva și prietenoasa. Pe langa aspectele tehnice, proiectul are si un scop distractiv – utilizatorul se poate juca efectiv cu masinuta, fiind urmarit de aceasta intr-un mod similar cu un //„animal de companie robotic”//. Aceasta latura face ca proiectul sa fie mai atractiv si accesibil inclusiv pentru publicul larg. | Ideea a pornit din dorinta de a combina elemente de robotica cu o componenta interactiva și prietenoasa. Pe langa aspectele tehnice, proiectul are si un scop distractiv – utilizatorul se poate juca efectiv cu masinuta, fiind urmarit de aceasta intr-un mod similar cu un //„animal de companie robotic”//. Aceasta latura face ca proiectul sa fie mai atractiv si accesibil inclusiv pentru publicul larg. | ||
Line 10: | Line 10: | ||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
- | <note tip> | + | ==== Schema bloc ==== |
- | 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 | + | |
- | </note> | + | |
+ | {{:pm:prj2025:apredescu:willy_scehma_bloc.png|}} | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
- | <note tip> | + | ==== Lista piese ==== |
- | Aici puneţi tot ce ţine de hardware design: | + | |
- | * listă de piese | + | ^ Denumire piesa ^ Link achizitionare ^ |
- | * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) | + | | Arduino UNO R3 | [[https://www.optimusdigital.ro/ro/placi-avr/4561-placa-de-dezvoltare-compatibila-cu-arduino-uno-r3-atmega328p-atmega16u2-cablu-50-cm.html?search_query=placa+arduino+uno&results=84|Optimus digital]] | |
- | * diagrame de semnal | + | | Motor Driver L298N | [[https://www.optimusdigital.ro/ro/drivere-de-motoare-cu-perii/145-driver-de-motoare-dual-l298n.html?search_query=0104110000001061&results=1|Optimus digital]] | |
- | * rezultatele simulării | + | | Senzor Infrarosu de Obstacole | [[https://www.optimusdigital.ro/ro/senzori-senzori-optici/4514-senzor-infrarosu-de-obstacole.html?search_query=0104110000000996&results=1|Optimus digital]] | |
- | </note> | + | | Senzor Ultrasonic de Distanta HC-SR04+ | [[https://www.optimusdigital.ro/ro/senzori-senzori-ultrasonici/2328-senzor-ultrasonic-de-distana-hc-sr04-compatibil-33-v-i-5-v.html?search_query=0104110000020994&results=1|Optimus digital]] | |
+ | | Motor cu reductor si roata | [[https://www.optimusdigital.ro/ro/motoare-altele/139-motor-cu-reductor-si-roata.html?search_query=0104210000001716&results=1|Optimus digital]] | | ||
+ | | Mini Breadboard Albastru | [[https://www.optimusdigital.ro/ro/prototipare-breadboard-uri/247-mini-breadboard-colorat.html?search_query=0104210000000221&results=1|Optimus digital]] | | ||
+ | | LCD 1602| [[https://www.optimusdigital.ro/ro/optoelectronice-lcd-uri/2894-lcd-cu-interfata-i2c-si-backlight-albastru.html?search_query=0104110000003584&results=1|Optimus digital]] | | ||
+ | | Buzzer | [[https://www.optimusdigital.ro/ro/audio-buzzere/12247-buzzer-pasiv-de-33v-sau-3v.html?search_query=0104210000081527&results=1|Optimus digital]] | | ||
+ | | Suport 6 baterii AA | [[https://www.optimusdigital.ro/ro/suporturi-de-baterii/12571-suport-pentru-6-baterii-aa-fara-capac.html?search_query=0104110000084644&results=1|Optimus digital]] | | ||
+ | | Comutator KCD10-101 | [[https://www.optimusdigital.ro/ro/butoane-i-comutatoare/7377-comutator-kcd10-101.html?search_query=0104110000047342&results=1|Optimus digital]] | | ||
+ | | Set Fire tata-tata | [[https://www.optimusdigital.ro/ro/fire-fire-mufate/12-set-de-cabluri-pentru-breadboard.html?search_query=0104210000001532&results=1|Optimus digital]] | | ||
+ | | Set fire mama-tata | [[https://www.optimusdigital.ro/ro/fire-fire-mufate/92-fire-colorate-mama-tata-40p.html?search_query=0104210000001792&results=1|Optimus digital]] | | ||
+ | |||
+ | |||
+ | ==== Schema Electrica ==== | ||
+ | |||
+ | |||
+ | {{:pm:prj2025:apredescu:cristian.deda_schema_electrica.png?700}} | ||
+ | |||
+ | |||
+ | ==== Schema Board ==== | ||
+ | |||
+ | |||
+ | {{:pm:prj2025:apredescu:willy_schema_breadboard.png?500}} | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | ===== Descrierea generala a aplicatiei (Firmware) ===== | ||
+ | |||
+ | Aceasta aplicatie controleaza un robot mobil autonom („Willy”), dotat cu: | ||
+ | * Senzori ultrasonici pentru detectia obstacolelor. | ||
+ | * Senzori infrarosu (IR) pentru urmarirea unui obiect (de exemplu, o mana). | ||
+ | * Motoare DC pentru miscare si manevrare. | ||
+ | * Buzzer pentru semnalizare sonora. | ||
+ | * Ecran LCD I2C 16x2 pentru afisarea starii robotului. | ||
+ | |||
+ | Robotul functioneaza in mod **follow-me**: detecteaza si urmareste un obiect apropiat. Se opreste sau se retrage cand identifica un obstacol. | ||
+ | |||
+ | ===== Mediu de dezvoltare ===== | ||
+ | |||
+ | * **Platforma hardware**: Arduino UNO (ATmega328P) | ||
+ | * **Mediu de dezvoltare**: Arduino IDE 2.x | ||
+ | * **Limbaj de programare**: C++ (Arduino Sketch) | ||
+ | * **Placa suport**: Arduino UNO R3 | ||
+ | |||
+ | ===== Librarii si surse 3rd-party utilizate ===== | ||
+ | |||
+ | ^ Biblioteca ^ Descriere ^ Link ^ | ||
+ | | `NewPing` | Permite masurarea precisa a distantei cu senzorul ultrasonic HC-SR04. | [[https://bitbucket.org/teckel12/arduino-new-ping/wiki/Home|NewPing Library]] | | ||
+ | | `Wire` | Protocol I2C pentru comunicatia cu ecranul LCD. | Inclusa in Arduino IDE | | ||
+ | | `LiquidCrystal_I2C` | Suport pentru afisaj LCD 16x2 cu interfata I2C. | [[https://github.com/johnrickman/LiquidCrystal_I2C|LiquidCrystal_I2C]] | | ||
+ | |||
+ | ===== Algoritmi si structuri implementate ===== | ||
+ | |||
+ | ==== Algoritmi principali ==== | ||
+ | * **Controlul miscarii robotului:** | ||
+ | * Functia `rotateMotor()` permite controlul diferential al motoarelor, in functie de detectiile senzorilor IR sau ultrasonic. | ||
+ | * Viteza ajustabila: `MAX_SPEED` + `ADJUST_SPEED` (forward) sau diferentiere la viraje (`+/-`). | ||
+ | |||
+ | * **Detectia obstacolului cu senzor ultrasonic:** | ||
+ | * Cu biblioteca `NewPing`, masuram distanta in centimetri. | ||
+ | * Daca distanta < 2 cm, se activeaza un semnal sonor (`buzzer`) si robotul se opreste, se retrage (da putin cu spatele), apoi se opreste complet. | ||
+ | |||
+ | * **Urmarirea obiectului cu senzori IR:** | ||
+ | * Daca ambii senzori IR detecteaza obiect (LOW), robotul merge inainte (`Chasing`). | ||
+ | * Daca doar un senzor detecteaza (LOW), robotul vireaza in directia respectiva (`Turning Left` / `Turning Right`). | ||
+ | * Daca nu detecteaza, se opreste (`Waiting...`). | ||
+ | |||
+ | * **Afisarea starii pe LCD:** | ||
+ | * Starea robotului (`Chasing`, `Turning`, `Obstacle`, `Waiting`) este afisata impreuna cu caractere customizate (emoji, sageti). | ||
+ | * Bara de progres (`distance bar`) arata distanta fata de obstacol (linie pe randul 2 al LCD). | ||
+ | |||
+ | ==== Structuri de date ==== | ||
+ | * Variabile globale pentru: | ||
+ | * Viteze motoare (`currentRightSpeed`, `currentLeftSpeed`). | ||
+ | * Stare obstacol (`check_close`). | ||
+ | * Ultimul caracter afisat pe ecran (`lastStatus` - optional pentru optimizare). | ||
+ | * Caractere custom (`byte SmileyFaceChar[]`, `byte StopChar[]`, `byte leftArrowChar[]`, `byte rightArrowChar[]`). | ||
+ | |||
+ | ===== Etapa 3: Surse si functii implementate ===== | ||
+ | |||
+ | ==== Fisiere sursa ==== | ||
+ | * `main.ino` – Codul principal (Arduino Sketch). | ||
+ | |||
+ | ==== Functii implementate ==== | ||
- | <note tip> | + | ^ Functie ^ Rol ^ |
- | Descrierea codului aplicaţiei (firmware): | + | | `setup()` | Initializeaza pinii, LCD-ul, motoarele, senzorii. | |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | | `loop()` | Logica principala a programului: detectie obstacole, urmarire IR, update LCD, buzzer. | |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | | `rotateMotor()` | Controleaza directia si viteza motoarelor in functie de parametrii. | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | | `displaySpeed()` (nefolosit) | Afiseaza viteza pe LCD (optional, comentat). | |
- | * (etapa 3) surse şi funcţii implementate | + | | `lcd.createChar()` | Definirea caracterelor custom pentru LCD (smiley, stop, sageti). | |
- | </note> | + | |
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | <note tip> | + | * In urma realizarii proiectului, am obtinut un sistem functional care controleaza o **masina autonoma** capabila sa efectueze urmatoarele actiuni: |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | * **Urmarire**: Masina detecteaza un obiect (mana) in fata senzorilor IR si incepe sa-l urmareasca, ajustandu-si directia in functie de pozitia obiectului. |
- | </note> | + | * **Afisare pe LCD**: Mesajele afisate pe ecranul LCD reflecta starea curenta a masinii, precum: |
+ | * ''Chasing'' (urmarire) | ||
+ | * ''Turning Left'' (viraj la stanga) | ||
+ | * ''Turning Right'' (viraj la dreapta) | ||
+ | * ''Waiting...'' (asteptare) | ||
+ | * ''OBSTACLE AHEAD!'' (obstacol detectat) | ||
+ | * **Evitarea obstacolelor**: | ||
+ | * Daca senzorul ultrasonic detecteaza un obstacol prea aproape (sub 2 cm), masina: | ||
+ | * Opreste motoarele. | ||
+ | * Afiseaza mesajul de avertizare pe LCD. | ||
+ | * Emite un **bip** de avertizare prin buzzer. | ||
+ | * Executa o miscare de **recul** (da putin cu spatele) pentru a se indeparta de obstacol. | ||
+ | * Sistemul integreaza mai multe concepte hardware si software: | ||
+ | * Controlul motoarelor cu semnale **PWM**. | ||
+ | * Senzori IR pentru detectarea obiectelor. | ||
+ | * Senzor ultrasonic pentru masurarea distantei. | ||
+ | * Buzzer pentru semnalizare sonora. | ||
+ | * Ecran LCD pentru afisare in timp real a starii. | ||
===== Concluzii ===== | ===== Concluzii ===== | ||