This shows you the differences between two versions of the page.
pm:prj2025:vradulescu:ana_maria.persenea [2025/05/18 22:28] ana_maria.persenea [Implementare concept hardware] |
pm:prj2025:vradulescu:ana_maria.persenea [2025/05/26 22:38] (current) ana_maria.persenea [Download] |
||
---|---|---|---|
Line 18: | Line 18: | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
- | {{ :pm:prj2025:vradulescu:circuit_amp.png?nolink&700 |}} | + | {{ :pm:prj2025:vradulescu:circuit_componente_amp.png?nolink&650 |}} |
{{ :pm:prj2025:vradulescu:cablaj_amp.png?nolink&700 |}} | {{ :pm:prj2025:vradulescu:cablaj_amp.png?nolink&700 |}} | ||
<html> | <html> | ||
Line 48: | Line 48: | ||
<td><a href="https://www.optimusdigital.ro/ro/senzori-senzori-ultrasonici/2328-senzor-ultrasonic-de-distana-hc-sr04-compatibil-33-v-i-5-v.html">Optimus Digital</a></td> | <td><a href="https://www.optimusdigital.ro/ro/senzori-senzori-ultrasonici/2328-senzor-ultrasonic-de-distana-hc-sr04-compatibil-33-v-i-5-v.html">Optimus Digital</a></td> | ||
<td><a href="https://www.handsontec.com/dataspecs/HC-SR04-Ultrasonic.pdf">Datasheet Senzor HC-SR04</a></td> | <td><a href="https://www.handsontec.com/dataspecs/HC-SR04-Ultrasonic.pdf">Datasheet Senzor HC-SR04</a></td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>Modul cu Driver de Motoare Dual L298N</td> | ||
+ | <td><a href="https://www.optimusdigital.ro/ro/drivere-de-motoare-cu-perii/145-driver-de-motoare-dual-l298n.html?search_query=modul+tensiune&results=660.html">Optimus Digital</a></td> | ||
+ | <td><a href="https://www.handsontec.com/dataspecs/L298N%20Motor%20Driver.pdf">Datasheet Modul L298N</a></td> | ||
</tr> | </tr> | ||
</table> | </table> | ||
Line 58: | Line 63: | ||
* Interfețe utilizate: digital (PWM), I2C | * Interfețe utilizate: digital (PWM), I2C | ||
* Pini utilizați: | * Pini utilizați: | ||
- | * D2 - TRIG senzor ultrasonic | + | * D13 -> TRIG senzor ultrasonic |
- | * D3 - ECHO senzor ultrasonic | + | * D12 -> ECHO senzor ultrasonic |
- | * D9 - Control Servo1 | + | * D9 -> Control Servo1 |
- | * D10 - Control Servo2 | + | * D10 -> Control Servo2 |
* A4 (SDA), A5 (SCL) - comunicare I2C cu LCD | * A4 (SDA), A5 (SCL) - comunicare I2C cu LCD | ||
* **Senzor ultrasonic (HC-SR04)** | * **Senzor ultrasonic (HC-SR04)** | ||
* Conectare: | * Conectare: | ||
- | * VCC → 5V | + | * VCC -> 5V |
- | * GND → GND | + | * GND -> GND |
- | * TRIG → D2 | + | * TRIG -> D13 |
- | * ECHO → D3 | + | * ECHO -> D12 |
* Funcție: detectare prezență pahar în zona destinată | * Funcție: detectare prezență pahar în zona destinată | ||
Line 75: | Line 80: | ||
* Model: MG995 | * Model: MG995 | ||
* Conectare: | * Conectare: | ||
- | * PWR → 5V | + | * PWR -> OUT1 (Servo1), OUT3 (Servo2) |
- | * GND → GND | + | * GND -> OUT2 (Servo1), OUT4 (Servo2) |
- | * SIG → D9 (Servo1), D10 (Servo2) | + | * SIG -> D9 (Servo1), D10 (Servo2) |
* Funcție: poziționare precisă (mișcări unghiulare), deschidere/inchidere robineți | * Funcție: poziționare precisă (mișcări unghiulare), deschidere/inchidere robineți | ||
* **Display LCD 16x2 cu interfață I2C** | * **Display LCD 16x2 cu interfață I2C** | ||
* Conectare: | * Conectare: | ||
- | * VCC → 5V | + | * VCC -> 5V |
- | * GND → GND | + | * GND -> GND |
- | * SDA → A4 | + | * SDA -> A4 |
- | * SCL → A5 | + | * SCL -> A5 |
* Funcție: afișare stare automat | * Funcție: afișare stare automat | ||
+ | |||
+ | * **Modul cu Driver de Motoare Dual L298N** | ||
+ | * Conectare: | ||
+ | * ENA, ENB -> VCC | ||
+ | * IN1 -> D7 | ||
+ | * IN2 -> D6 | ||
+ | * IN3 -> D5 | ||
+ | * IN4 -> D4 | ||
+ | * OUT1 -> VCC Servo1 | ||
+ | * OUT2 -> GND Servo1 | ||
+ | * OUT3 -> VCC Servo2 | ||
+ | * OUT4 -> GND Servo2 | ||
+ | * 9V -> V+ Mufă alimentare tată | ||
+ | * GND -> V- Mufă alimentare tată | ||
+ | * Funcție: Sursă alimentare servomotoare | ||
* **Baterie 9V** | * **Baterie 9V** | ||
* Sursă de alimentare pentru Arduino | * Sursă de alimentare pentru Arduino | ||
+ | |||
+ | * **Sursă de alimentare 9V cu stecher** | ||
+ | * Sursă de alimentare pentru motoare | ||
=== Comunicație între module === | === Comunicație între module === | ||
Line 95: | Line 118: | ||
* **PWM**: folosit pentru controlul celor două servomotoare (D9 și D10) | * **PWM**: folosit pentru controlul celor două servomotoare (D9 și D10) | ||
* **I2C**: utilizat pentru comunicarea cu LCD-ul (SDA → A4, SCL → A5) | * **I2C**: utilizat pentru comunicarea cu LCD-ul (SDA → A4, SCL → A5) | ||
- | * **Digital IO**: utilizat pentru senzorul ultrasonic (D2, D3) | + | * **Digital IO**: utilizat pentru senzorul ultrasonic (D12, D13) |
+ | |||
+ | === Implementare concept hardware === | ||
+ | |||
+ | ^ {{ :pm:prj2025:vradulescu:arduino_amp.jpg?nolink&300 |}} ^ {{ :pm:prj2025:vradulescu:motoare_amp.jpg?nolink&300 |}} ^ | ||
+ | == Conectare toate modulele simultan == | ||
+ | {{ :pm:prj2025:vradulescu:complet_amp.jpg?nolink&700 |}} | ||
- | === Implementare concept hardware=== | ||
- | * Conectare Arduino cu LCD și senzorul ultrasonic | ||
- | ^ {{ :pm:prj2025:vradulescu:test_senzor_1.jpg?nolink&300 |}} ^ {{ :pm:prj2025:vradulescu:test_senzor_2.png?nolink&300}} ^ | ||
- | * Conectare Arduino cu cele două servomotoare | ||
- | ^ {{ :pm:prj2025:vradulescu:test_motor_1.jpg?nolink&300 |}} ^ {{ :pm:prj2025:vradulescu:test_motor_1.2.jpg?nolink&300}} ^ | ||
- | * Conectare toate modulele simultan | ||
- | ^ {{ :pm:prj2025:vradulescu:test_complet_1.jpg?nolink&300 |}} ^ {{ :pm:prj2025:vradulescu:test_complet_2.jpg?nolink&300}} ^ | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | |||
+ | Implementarea software este complet funcțională și a fost testată cu succes pe circuitul hardware. Sistemul detectează prezența unui pahar folosind un senzor ultrasonic HC-SR04, declanșează o secvență automată de mișcare a două servomotoare pentru pornirea și oprirea robinetelor, afișează mesaje pe un ecran LCD pentru a înștiința utilizatorul în vederea procesului de preparare și revine în modul standby după finalizare. Logica este temporizată precis cu un timer hardware (Timer2) și un sistem de stare (servoState). | ||
+ | |||
+ | === Motivele alegerii bibliotecilor folosite === | ||
+ | * <Servo.h> - Folosită pentru controlul simplu și precis al servomotoarelor. Am aleas-o deoarece oferă o interfață rapidă și sigură pentru comenzi PWM pe pinii digitali ai Arduino-ului. | ||
+ | |||
+ | * <LiquidCrystal_I2C.h> - Utilizată pentru afișajul LCD 16x2 cu interfață I2C. Am utilizat-o pentru afișarea clară a mesajelor doritei. | ||
+ | |||
+ | * <Wire.h> - Necesară pentru comunicarea I2C între Arduino și ecranul LCD. | ||
+ | |||
+ | === Elemente de noutate al proiectului === | ||
+ | * Utilizarea unui sistem de stare (servoState) temporizat cu un timer hardware ISR, ceea ce oferă mai multă precizie și fiabilitate decât metodele bazate pe delay. | ||
+ | |||
+ | * Afișaj inteligent care reflectă starea sistemului în timp real, rămânând pe mesajul "Done" până când paharul este efectiv retras — asigurând un feedback natural pentru utilizator. | ||
+ | |||
+ | === Justificarea utilizării funcționalităților din laborator === | ||
+ | În cadrul implementării proiectului am folosit următoarele elemente studiate la laborator: | ||
+ | |||
+ | * Întreruperi, Timere (Laboratorul 2) - Am configurat Timer2 în modul CTC, generând întreruperi la fiecare 1 ms, ceea ce a permis controlul precis al secvenței de mișcare a servomotoarelor fără a bloca execuția principală a programului, eliminând complet utilizarea funcției delay() și asigurând un comportament eficient al sistemului. | ||
+ | |||
+ | * PWM (Laboratorul 3) - Am folosit un semnal PWM generat prin biblioteca Servo.h pentru a controla automat mișcarea servomotoarelor, implementând acțiuni precise în funcție de detecția senzorului. | ||
+ | |||
+ | * I2C (Laboratorul 6) - Am folosit comunicația I2C pentru a controla LCD-ul și a realiza o interfață clară om-mașină. | ||
+ | |||
+ | === Structura proiectului și interacțiunea funcționalităților === | ||
+ | Scheletul logic: | ||
+ | |||
+ | * loop() verifică constant distanța unui posibil obiect față de senzor. Dacă este detectat un pahar și sistemul este inactiv, setează: | ||
+ | * isRunningSequence = true | ||
+ | * servoState = 1 | ||
+ | |||
+ | * ISR-ul Timer2: | ||
+ | * Rulează la fiecare 1ms. | ||
+ | * Incrementă timerCounter. | ||
+ | * Controlează trecerile între stări (servo1 -> servo2 -> finalizare). | ||
+ | |||
+ | * LCD-ul afișează mesaje în funcție de starea sistemului: | ||
+ | * "Glass detected" când senzorul detectează prezența unui pahar. | ||
+ | * "Preparing…" când începe secvența și mișcarea servomotoarelor. | ||
+ | * "Done" când e finalizată prepararea. | ||
+ | * "Ready for use" după îndepărtarea paharului. | ||
+ | === Arhivă cod === | ||
+ | {{:pm:prj2025:vradulescu:mix_master_code.zip|}} | ||
- | <note tip> | ||
- | 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> | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
+ | |||
+ | ^ {{ :pm:prj2025:vradulescu:rez_4_amp.jpg?nolink&400 |}} ^ {{ :pm:prj2025:vradulescu:rez_6_amp.jpg?nolink&400 |}} ^ | ||
+ | ^ {{ :pm:prj2025:vradulescu:rez_1_amp.jpg?nolink&400 |}} ^ {{ :pm:prj2025:vradulescu:rez_3_amp.jpg?nolink&400 |}} ^ | ||
<note tip> | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Video Demo: https://youtube.com/shorts/NtXiDtzjC6U |
</note> | </note> | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | A fost un proiect interesant, care la început părea simplu, dar pe parcurs am descoperit că implică mai multe provocări decât anticipasem. Una dintre dificultățile întâmpinate a fost legată de controlul servomotoarelor: inițial am folosit modelul SG90, însă acesta s-a dovedit prea slab pentru a acționa robineții. Am fost nevoita să trec la modele MG995, mai puternice, ceea ce a implicat și adăugarea unui driver pentru motoare și a unei surse externe de alimentare, pentru a le face să funcționeze corect. De asemenea, montarea întregului ansamblu a fost o provocare, fiind un proiect voluminos, atât din cauza componentelor electronice, cât și a dimensiunii rezervoarelor de lichid. Per total, a fost o experiență foarte interesantă, cu seri mai bune și altele mai putin bune, dar din care am învățat multe. | ||
===== Download ===== | ===== Download ===== | ||
- | |||
- | <note warning> | ||
- | 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**. | ||
- | </note> | ||
- | |||
- | ===== Jurnal ===== | ||
<note tip> | <note tip> | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | Arhiva finala: {{:pm:prj2025:vradulescu:arhiva_finala_mixmaster.zip|}} |
</note> | </note> | ||
+ | |||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | **Resurse Software** |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | * https://projecthub.arduino.cc/dsanmart/smart-dispenser-6b125b |
- | </note> | + | * https://github.com/Labrahmi/water-dispenser-system |
+ | * https://circuitdigest.com/microcontroller-projects/arduino-automatic-water-dispenser | ||
+ | * https://www.tiktok.com/@arduinowithzen/video/7458840164228402439 | ||
+ | |||
+ | **Resurse Hardware** | ||
+ | * https://www.optimusdigital.ro/ro/placi-avr/4561-placa-de-dezvoltare-compatibila-cu-arduino-uno-r3-atmega328p-atmega16u2-cablu-50-cm.html?search_query=arduino+uno&results=129 | ||
+ | * https://docs.arduino.cc/resources/datasheets/A000066-datasheet.pdf | ||
+ | * https://www.emag.ro/motor-servo-mg995-11kg-180grade-ai209-s296/pd/DZSHBRBBM | ||
+ | * https://www.electronicoscaldas.com/datasheet/MG995_Tower-Pro.pdf | ||
+ | * https://www.optimusdigital.ro/ro/optoelectronice-lcd-uri/2894-lcd-cu-interfata-i2c-si-backlight-albastru.html | ||
+ | * https://www.handsontec.com/dataspecs/module/I2C_1602_LCD.pdf | ||
+ | * https://www.optimusdigital.ro/ro/senzori-senzori-ultrasonici/2328-senzor-ultrasonic-de-distana-hc-sr04-compatibil-33-v-i-5-v.html | ||
+ | * https://www.handsontec.com/dataspecs/HC-SR04-Ultrasonic.pdf | ||
+ | * https://www.optimusdigital.ro/ro/drivere-de-motoare-cu-perii/145-driver-de-motoare-dual-l298n.html?search_query=modul+tensiune&results=660.html | ||
+ | * https://www.handsontec.com/dataspecs/L298N%20Motor%20Driver.pdf | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||