This shows you the differences between two versions of the page.
pm:prj2025:fstancu:alexandru.bologan [2025/05/24 00:01] alexandru.bologan [Utilizarea Funcționalităților din Laborator] |
pm:prj2025:fstancu:alexandru.bologan [2025/05/24 13:13] (current) alexandru.bologan [Bibliografie/Resurse] |
||
---|---|---|---|
Line 41: | Line 41: | ||
- Toate componentele sunt montate pe un breadboard, iar alimentarea este comună între componentele de 5V. | - Toate componentele sunt montate pe un breadboard, iar alimentarea este comună între componentele de 5V. | ||
+ | |||
+ | * poza proiect (fara carcasa) | ||
+ | {{ :pm:prj2025:fstancu:whatsapp_image_2025-05-24_at_12.28.21.jpeg?500 |}} | ||
===== Software Design ===== | ===== Software Design ===== | ||
Line 91: | Line 94: | ||
=== Arduino Libraries === | === Arduino Libraries === | ||
- | #include <avr/io.h> // Control direct registri AVR pentru performanță | + | #include <avr/io.h> // Control direct registri AVR pentru performanță |
- | #include <avr/interrupt.h> // Gestionare întreruperi hardware eficientă | + | #include <avr/interrupt.h> // Gestionare întreruperi hardware eficientă |
- | #include <util/delay.h> // Delay-uri precise pentru timing critic | + | #include <util/delay.h> // Delay-uri precise pentru timing critic |
Justificare: Am ales programarea directă a registrilor AVR pentru control precis al timer-elor și întreruperilor, esențial pentru măsurători de timp precise (microsecunde). | Justificare: Am ales programarea directă a registrilor AVR pentru control precis al timer-elor și întreruperilor, esențial pentru măsurători de timp precise (microsecunde). | ||
Line 99: | Line 102: | ||
=== ESP32-CAM Libraries === | === ESP32-CAM Libraries === | ||
- | #include "esp_camera.h" // API nativ ESP32 pentru control cameră | + | #include "esp_camera.h" // API nativ ESP32 pentru control cameră |
- | #include <WiFiClientSecure.h> // HTTPS sigur pentru upload cloud | + | #include <WiFiClientSecure.h> // HTTPS sigur pentru upload cloud |
- | #include <HTTPClient.h> // HTTP client optimizat pentru ESP32 | + | #include <HTTPClient.h> // HTTP client optimizat pentru ESP32 |
Justificare: Biblioteca esp_camera oferă control granular asupra parametrilor camerei (rezoluție, calitate JPEG, frame rate), în timp ce WiFiClientSecure asigură securitatea transmisiei. | Justificare: Biblioteca esp_camera oferă control granular asupra parametrilor camerei (rezoluție, calitate JPEG, frame rate), în timp ce WiFiClientSecure asigură securitatea transmisiei. | ||
Line 107: | Line 110: | ||
=== Server Libraries === | === Server Libraries === | ||
- | const multer = require('multer'); // Gestionare multipart/form-data | + | const multer = require('multer'); // Gestionare multipart/form-data |
- | const express = require('express'); // Framework web rapid și flexibil | + | const express = require('express'); // Framework web rapid și flexibil |
Justificare: Multer este specializat pentru upload-ul fișierelor și gestionează eficient memoria pentru imagini mari, în timp ce Express oferă routing și middleware pentru API RESTful. | Justificare: Multer este specializat pentru upload-ul fișierelor și gestionează eficient memoria pentru imagini mari, în timp ce Express oferă routing și middleware pentru API RESTful. | ||
Line 138: | Line 141: | ||
| Întreruperi (PCINT) | | | Întreruperi (PCINT) | | ||
- | ISR(PCINT2_vect) { | + | ISR(PCINT2_vect) { |
- | if (!(PIND & (1 << PD2)) && !first_sensor_triggered) { | + | if (!(PIND & (1 << PD2)) && !first_sensor_triggered) { |
- | start_ticks = micros(); | + | start_ticks = micros(); |
- | first_sensor_triggered = 1; | + | first_sensor_triggered = 1; |
- | } | + | |
- | else if (!(PIND & (1 << PD3)) && first_sensor_triggered) { | + | |
- | end_ticks = micros(); | + | |
- | measurement_ready = 1; | + | |
- | } | + | |
} | } | ||
+ | else if (!(PIND & (1 << PD3)) && first_sensor_triggered) { | ||
+ | end_ticks = micros(); | ||
+ | measurement_ready = 1; | ||
+ | } | ||
+ | } | ||
Utilizare: Întreruperile PCINT pe PD2 și PD3 detectează trecerea obiectului prin fața senzorilor IR. | Utilizare: Întreruperile PCINT pe PD2 și PD3 detectează trecerea obiectului prin fața senzorilor IR. | ||
| Timer/Counter | | | Timer/Counter | | ||
- | void timer1_init() { | + | void timer1_init() { |
- | ICR1 = 0xFFFF; | + | ICR1 = 0xFFFF; |
- | TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS11) | (1 << CS10); // Prescaler 64 | + | TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS11) | (1 << CS10); // Prescaler 64 |
- | } | + | } |
Utilizare: Timer1 în modul CTC pentru măsurători precise de timp. | Utilizare: Timer1 în modul CTC pentru măsurători precise de timp. | ||
Line 161: | Line 164: | ||
| I2C (LCD) | | | I2C (LCD) | | ||
- | lcd_set_cursor(0, 0); | + | lcd_set_cursor(0, 0); |
- | lcd_print("Viteza:"); | + | lcd_print("Viteza:"); |
- | lcd_set_cursor(1, 1); | + | lcd_set_cursor(1, 1); |
- | lcd_print(buf); | + | lcd_print(buf); |
Utilizare: Comunicație I2C pentru afișarea rezultatelor pe LCD. | Utilizare: Comunicație I2C pentru afișarea rezultatelor pe LCD. | ||
Line 170: | Line 173: | ||
| UART | | | UART | | ||
- | USART0_init(CALC_USART_UBRR(PM_BAUD)); | + | USART0_init(CALC_USART_UBRR(PM_BAUD)); |
- | printf("Speed: %.2f km/h\n", speed); | + | printf("Speed: %.2f km/h\n", speed); |
Utilizare: UART pentru debugging și monitorizare în timp real. | Utilizare: UART pentru debugging și monitorizare în timp real. | ||
Line 201: | Line 204: | ||
Rata succes upload: >95% | Rata succes upload: >95% | ||
- | ===== Rezultate Obţinute ===== | ||
- | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | ||
- | </note> | ||
- | |||
- | ===== Concluzii ===== | ||
===== Download ===== | ===== Download ===== | ||
- | <note warning> | + | O Arhiva ce contine 3 directoare: |
- | 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ă ;-). | + | * Arduino_nano_code |
+ | * Esp32-cam_code | ||
+ | * Photo_storage_server | ||
+ | {{:pm:prj2025:fstancu:proiect_pm.zip|}} | ||
- | 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 ===== | + | ===== Bibliografie/Resurse ===== |
- | <note tip> | + | Laboratoare folosite: |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | * [[pm:lab:lab0-2024|]] |
- | </note> | + | * [[pm:lab:lab1-2023|]] |
+ | * [[pm:lab:lab2-2023]] | ||
+ | * [[pm:lab:lab6-2023-2024]] | ||
- | ===== Bibliografie/Resurse ===== | + | Linkuri externe: |
+ | * [[https://www.instructables.com/Getting-Started-With-ESP32-CAM-Streaming-Video-Usi]] | ||
+ | * [[https://learn.microsoft.com/en-us/azure/app-service/quickstart-nodejs?tabs=linux&pivots=development-environment-vscode]] | ||
+ | |||
+ | Linkuri Hardware: | ||
+ | * [[https://www.optimusdigital.ro/ro/]] | ||
+ | * [[https://sigmanortec.ro/]] | ||
+ | * [[https://www.emag.ro/placa-esp32-cu-camera-wifi-esp32-cam-ble-4-2-programator-dedicat-negru-esp32-cam-mb/pd/DW8798MBM/#opensearch]] | ||
- | <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> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||