This shows you the differences between two versions of the page.
|
pm:prj2026:florin.stancu:denis.batman [2026/05/12 15:45] denis.batman created |
pm:prj2026:florin.stancu:denis.batman [2026/05/12 16:34] (current) denis.batman [Hardware Design] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Smart Pocket Calculator with Audio Feedback ====== | + | ====== Smart Pocket Calculator cu Feedback Audio ====== |
| - | ===== Introduction ===== | + | ===== Introducere ===== |
| - | What it does: The project is a functional, portable pocket calculator capable of evaluating basic arithmetic expressions (addition, subtraction, multiplication, and division). It takes input from a 4x4 matrix keypad, displays the operations and results on an LCD screen, and uses a passive buzzer to provide audio feedback for key presses and errors. | + | Proiectul constă într-un Calculator de Buzunar Smart cu Feedback Audio. Acesta rezolvă operații matematice de bază (+, -, *, /) și, spre deosebire de un calculator standard implementat pe breadboard, oferă o confirmare sonoră instantanee. |
| - | Its purpose: To create a reliable and user-friendly calculation tool while demonstrating the practical integration of multiple hardware peripherals and essential software concepts (such as debouncing, state machines, and I2C communication). | + | **Scopul proiectului** este de a crea un dispozitiv fiabil și interactiv, eliminând incertitudinea apăsărilor pe tastatură (fenomenul de ghosting sau taste neînregistrate). |
| + | **Ideea de la care am pornit** a fost necesitatea de a avea certitudinea preluării corecte a input-ului fizic fără a fi nevoie să privim constant ecranul, inspirată de interfețele de la casele de marcat sau bancomate. | ||
| + | **Utilitate:** Este un proiect extrem de util pentru consolidarea noțiunilor de debouncing, lucrul cu mașini de stări pentru parsarea input-ului și integrarea eficientă a mai multor periferice externe folosind protocoale diferite. | ||
| + | ===== Descriere generală ===== | ||
| - | The starting idea: Standard breadboard calculators or simple digital projects often lack tactile or audio feedback, leading to missed inputs or double-presses. We wanted to solve this by adding an auditory layer that confirms user actions, making the device feel more like a finished commercial product. | + | Sistemul utilizează microcontrolerul ca unitate centrală de procesare și integrează 3 periferice externe (cerință de regulament), folosind conceptele a cel puțin 3 laboratoare (GPIO, Timere/PWM, I2C). |
| - | Why it is useful: For us, it provides a great learning platform for handling matrix inputs, string parsing, and hardware timers on a microcontroller. For the user, the audio feedback drastically reduces input errors, making it more reliable than a silent keypad interface. | + | Sistemul este alcătuit din următoarele module: |
| + | * **Modul Input (Tastatură matricială 4x4):** Permite introducerea cifrelor și a operatorilor. Folosește pini GPIO pentru scanarea liniilor și coloanelor. | ||
| + | * **Modul Output Vizual (Ecran LCD 1602 cu I2C):** Afișează expresia introdusă și rezultatul. Utilizarea interfeței I2C minimizează numărul de conexiuni, crescând fiabilitatea hardware-ului. | ||
| + | * **Modul Output Audio (Buzzer Pasiv):** Generat folosind semnale PWM / Timere. Oferă un "beep" scurt la o apăsare corectă și un ton lung/diferit la o acțiune invalidă (ex. împărțire la zero). | ||
| - | ===== General Description ===== | + | **Interacțiunea modulelor:** |
| - | The system is built around a central microcontroller unit (MCU). The architecture consists of three main external modules interacting with the processing unit: | + | La apăsarea unei taste pe matricea 4x4, microcontrolerul execută o rutină de debouncing. Dacă acțiunea este validată, se declanșează un semnal PWM către buzzer pentru feedback sonor scurt și se actualizează datele pe LCD prin magistrala I2C. Logica internă (o mașină de stări software) memorează primul număr, operatorul și al doilea număr, executând calculul la apăsarea tastei ”=”. |
| - | + | ||
| - | Input Module (4x4 Keypad): Connected via GPIO pins. It sends raw row/column data to the microcontroller when a key is pressed. | + | |
| - | + | ||
| - | Visual Output Module (I2C LCD): Connected via the I2C bus (SDA/SCL pins). It receives parsed strings from the MCU to display the current operands, mathematical operators, and the final result. | + | |
| - | + | ||
| - | Audio Output Module (Passive Buzzer): Connected via a PWM-capable pin. The MCU uses timers to generate specific frequencies (tones) depending on the context: a short beep for a valid key press, and a longer, distinct tone for invalid operations (e.g., division by zero). | + | |
| - | + | ||
| - | [Insert Block Diagram Here] | + | |
| ===== Hardware Design ===== | ===== Hardware Design ===== | ||
| - | List of Components: | ||
| - | 1x Microcontroller Board (e.g., Arduino Nano / Uno or ATmega324A/328P) | + | Designul hardware a fost gândit pentru a fi simplu de implementat și robust, respectând cerința de a avea un cablaj curat și un aspect ordonat, fără fire redundante. |
| - | 1x 4x4 Matrix Keypad | + | **Listă de piese:** |
| + | * 1 x Microcontroler | ||
| + | * 1 x Tastatură matricială 4x4 | ||
| + | * 1 x Ecran LCD 1602 | ||
| + | * 1 x Modul adaptor I2C pentru LCD (PCF8574) | ||
| + | * 1 x Buzzer pasiv | ||
| + | * Fire de conexiune, breadboard / placă de test | ||
| - | 1x 1602 LCD Display with I2C Module adapter | + | **Conexiuni principale (Schemă bloc simplificată):** |
| + | * **Tastatura 4x4:** Conectată la un port GPIO (ex. Portul C) pentru a citi starea butoanelor. | ||
| + | * **LCD I2C:** Conectat la pinii SDA și SCL ai microcontrolerului, plus alimentare (VCC, GND). Tehnologia I2C ne scapă de cablarea paralelă complexă de 8 fire. | ||
| + | * **Buzzer:** Conectat la un pin cu capabilitate de PWM (ex. pin de output de la Timer) pentru a genera independent tonurile audio. | ||
| - | 1x Passive Buzzer | ||
| - | 1x Breadboard | + | ===== Software Design ===== |
| - | Jumper wires (Male-to-Male and Male-to-Female) | ||
| - | 1x Resistor (approx. 220Ω - 1kΩ) for the buzzer (optional) | + | <note tip> |
| - | + | ||
| - | Schematics and Signal Diagrams: | + | |
| - | [Insert Schematic Image Here] | + | |
| - | [Insert Picture of the Breadboard setup Here] | + | |
| - | + | ||
| - | ===== Software Design ===== | + | |
| Descrierea codului aplicaţiei (firmware): | 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 | ||
| + | </note> | ||
| - | mediu de dezvoltare (if any) (e.g. AVR Studio, PlatformIO) | + | ===== Rezultate Obţinute ===== |
| - | biblioteci şi surse 3rd-party folosite (e.g. Procyon AVRlib) | + | <note tip> |
| + | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | ||
| + | </note> | ||
| - | algoritmi şi structuri pe care plănuiţi să le implementaţi | + | ===== Concluzii ===== |
| - | (etapa 3) surse şi funcţii implementate | + | ===== Download ===== |
| - | ===== Rezultate Obţinute ===== | + | <note warning> |
| - | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | 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ă ;-). |
| - | ===== Concluzii ===== | + | 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> | ||
| - | ===== Cod sursă și alte resurse ce trebuie să existe pe GitHub ===== | + | ===== Jurnal ===== |
| - | Codul sursă trebuie urcat într-un repo public, recomandăm GitHub. | + | |
| - | Structurați-vă pagina de GitHub a proiectului pe mai multe directoare. De exemplu, creați un director numit src în care țineți tot codul sursă. Alt director hardware în care să țineți schemele și diagramele și alt director numit images în care să puneți toate fotografiile cu proiectul vostru, pe care le link-ați în README.md. Pagina de GitHub a proiectului vostru trebuie să conțină toate fișierele relevante pentru realizarea proiectului vostru. Dacă există resurse externe pe care le-ați folosit, vă rugăm să le link-ați în README.md. | + | |
| - | Sunteți încurajați să filmați un demo cu proiectul vostru și să îl încărcați pe YouTube. Faceți embed la video în README.md și în pagina de wiki OCW a proiectului vostru. | + | |
| - | ===== Jurnal ===== | + | <note tip> |
| Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | ||
| + | </note> | ||
| ===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
| - | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware. | + | |
| + | <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> | ||