This is an old revision of the document!


Laser Turret

Introducere

  • Proiectul consta dintr-o “tureta” care se misca, atat vertical, cat si orizontal, aceasta putand fi controlata prin intermediul mouse-ului de la laptopul/calculatorul la care este conectata placa. De asemenea, tureta are si un laser in varful acesteia, cu care utilizatorul poate tinti obiectele din jurul sau.
  • Scopul acestui proiect este de pur divertisment, cu care utilizatorii pot juca diferite “minigame”-uri ce au legatura cu tintirea obiectelor (preferabil nu a oamenilor!!).
  • Ideea a pornit din doua surse: turetele din jocurile de tip MOBA/Tower Defense, care trag cu un proiectil la un anumit interval de timp, iar a doua este un laser obisnuit, de buzunar, folosit pentru a te juca impreuna cu animalele de companie (lucru care as vrea sa-l faci si eu cu pisica mea :)) ).
  • Utilitatea proiectului este, in principal, educationala. Faptul ca poti controla un “robot” fizic folosindu-te de controalele de la calculator, alegerea componentelor potrivite, calcularea si testarea consumului, cat si altele sunt lucruri cu care trebuie sa experimenteze orice inginer. :)

Descriere generală

Diagrama Hardware

Hardware Design

Aici puneţi tot ce ţine de hardware design:

Nume componentă Link Cantitate Preț unitar (lei) Preț final (lei)
Placuta compatibila Arduino Uno R3 Link 1 49.99 49.99
Breadboard HQ (400 Points) Link 1 4.56 4.56
Ecran LCD I2C 1602 Link 1 16.34 16.34
Servo SG90 Link 1 11.99 11.99
Servo ES08MA II Link 1 28.39 28.39
Baterii 1.5V Link 4 3.20 12.80
Suport baterii (4xAA) Link 1 4.86 4.86
Condensator 1000 μF Link 2 0.59 1.18
Modul Laser KY-008 Link 1 4.28 4.28
Fire Male to Male Link 15 0.28 4.20
Fire Female to Male Link 9 0.44 3.99
Preț total: 142.55 lei

Schema electrica:

Software Design

Descrierea codului aplicaţiei (firmware):

  • mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR)
  • 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 şi funcţii implementate

Din moment ce PC-ul trebuie sa comunice in permanenta cu placuta Arduino pentru a putea trimite controalele, trebuie sa existe cod care ruleaza pe ambele dispozitive.

PC:

  • O mica aplicatie scrisa in Python care deschide o fereastra in care utilizatorul poate misca mouse-ul pentru a controla tureta
  • Partea de GUI realizata folosind biblioteca Tkinter
  • Trimiterea coordonatelor Mouse-ului si verificarea daca utilizatorul a apasat Click se realizeaza folosind biblioteca Serial din Python

Placuta:

  • Scris in Arduino C/C++, astfel incat sa poata “handle-uisca” input-ul de la utilizator transmis prin Serial si sa faca modificarile necesare in Hardware, folosind bibliotecile LiquidCrystal_I2C, Wire si Servo.
  • Dupa ce primeste input-ul de la utilizator (coordonate/actiunea ca a dat click), se mapeaza coordonatele la sistemul de referinta al servo-urilor (unghiuri de la 0 la 180) si “muta” servo-urile.
  • Daca primeste “click”, verifica daca a trecut cooldown-ul de la ultima data cand utilizatorul a activat laserul (folosind Timer-ul 2 al placii), seteaza PIN-ul pe HIGH, in cazul in care cooldown-ul a trecut
  • Reseteaza Timer-ul in momentul in care utilizatorul nu mai tine click-ul apasat
  • Scrie pe ecranul LCD daca utilizatorul poate activa laser-ul / cat timp mai are pana cand poate face asta.

Notiuni din laboratoare folosite:

  • I2C
  • Timer
  • PWM
  • GPIO
  • USART
  • Intreruperi

Functii:

  • setup_timer() – Configureaza Timer2 pentru a genera o intrerupere la fiecare 1 ms.
  • ISR(TIMER2_COMPA_vect) – Incrementeaza contorul timerMs la fiecare 1 ms pentru a masura timpul.
  • setup() – Initializeaza servo-urile, laserul, LCD-ul, comunicatia seriala si porneste Timer2.
  • parseDataX(data) – Extrage si converteste valoarea X din sirul primit prin serial.
  • parseDataY(data) – Extrage si converteste valoarea Y din sirul primit prin serial.
  • loop() – Citeste datele seriale, controleaza servo-urile si laserul in functie de click si cooldown, si actualizeaza afisajul LCD.

IDE-uri folosite:

  • Visual Studio Code pentru partea de Python
  • Arduino IDE pentru codul de pe placuta

Rezultate Obţinute

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

Download

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.

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Resurse

Bibliografie

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2025/eradu/andrei.chirimeaca.1748541556.txt.gz · Last modified: 2025/05/29 20:59 by andrei.chirimeaca
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