Prezentarea pe scurt a proiectului:
Aici puneţi tot ce ţine de hardware design:
Nr. crt. | Componentă | Specificații | Cantitate |
---|---|---|---|
1 | Arduino Nano | ATmega328P, 16MHz, 5V | 1 |
2 | Senzor IR | Digital, reflexiv, 3.3–5V | 2 |
3 | ESP32-CAM | Modul cu cameră OV2640, WiFi, 5V | 1 |
4 | LCD 16×2 cu I2C | Interfață I2C, compatibil Arduino | 1 |
5 | Modul FTDI | Conversie USB–Serial pentru ESP32 | 1 |
7 | Breadboard | Dimensiune standard, pentru prototip | 1 |
8 | Rezistor | 1KΩ | 1 |
9 | Rezistor | 2KΩ | 1 |
10 | Cabluri jumper | M-M, F-M, F-F | 10+ |
Descriere scurtă a schemei electrice: Această imagine reprezintă schema electrică a unui proiect cu ESP32-CAM, un modul Arduino Nano, doi senzori digitali și un ecran LCD cu interfață I2C.
- ESP32-CAM este conectat la un modul FTDI pentru programare și alimentare. Pinul IO13 este folosit ca intrare pentru declanșarea unei capturi foto.
- Arduino Nano este conectat la doi senzori digitali (de exemplu, senzori IR) care trimit semnale către acesta.
- LCD-ul 16×2 este conectat prin interfață I2C la Arduino, pentru afișarea informațiilor.
- Rezistențele de pe breadboard sunt folosite pentru a reduce tensiunea de la 5V la 3.3V.
- Toate componentele sunt montate pe un breadboard, iar alimentarea este comună între componentele de 5V.
Sistemul de măsurare a vitezei este complet implementat și funcțional, constând din trei componente principale:
Status: Complet implementat și testat
Funcționalități active:
Detectare obiect prin 2 senzori IR cu întreruperi PCINT
Calcul viteză bazat pe timp de trecere între senzori (13.8 cm distanță)
Afișare rezultate pe LCD I2C
Trimite un semnal pe pinul PD4 daca viteza detectata > 5 km/h
Comunicare UART pentru debugging și monitorizare
Status: Complet implementat și testat
Funcționalități active:
Captură automată imagini la detectarea trigger-ului
Upload imagini prin HTTPS către server cloud
Configurare cameră optimizată (VGA 640x480, JPEG quality 10) Conectivitate WiFi stabilă
Status: Deploiat pe Azure Cloud
Funcționalități active:
Recepție și stocare imagini prin multipart/form-data
Galerie web pentru vizualizare imagini cu timestamp
Funcționalitate delete pentru management imagini
Gestionare errori și logging complet
#include <avr/io.h> // Control direct registri AVR pentru performanță #include <avr/interrupt.h> // Gestionare întreruperi hardware eficientă #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).
#include "esp_camera.h" // API nativ ESP32 pentru control cameră #include <WiFiClientSecure.h> // HTTPS sigur pentru upload cloud #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.
const multer = require('multer'); // Gestionare multipart/form-data 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.
Proiectul combină în mod inovator:
Măsurare fizică precisă (Arduino cu senzori IR)
Captură video automată (ESP32-CAM cu trigger hardware)
Storage cloud în timp real (Server Node.js pe Azure)
Aspecte Inovatoare:
Trigger hardware direct: ESP32-CAM primește semnal direct de la Arduino prin GPIO
Upload HTTPS automat: Imaginile sunt încărcate instant în cloud fără intervenție umană
Sincronizare precisă: Captura foto se face exact în momentul detectării vitezei
Management cloud: Galerie web cu funcții CRUD pentru imagini
Întreruperi (PCINT) |
ISR(PCINT2_vect) { if (!(PIND & (1 << PD2)) && !first_sensor_triggered) { start_ticks = micros(); first_sensor_triggered = 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.
Timer/Counter |
void timer1_init() { ICR1 = 0xFFFF; TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS11) | (1 << CS10); // Prescaler 64 }
Utilizare: Timer1 în modul CTC pentru măsurători precise de timp.
I2C (LCD) |
lcd_set_cursor(0, 0); lcd_print("Viteza:"); lcd_set_cursor(1, 1); lcd_print(buf);
Utilizare: Comunicație I2C pentru afișarea rezultatelor pe LCD.
UART |
USART0_init(CALC_USART_UBRR(PM_BAUD)); printf("Speed: %.2f km/h\n", speed);
Utilizare: UART pentru debugging și monitorizare în timp real.
GPIO |
// IR sensors on PD2 (PCINT18) and PD3 (PCINT19) DDRD &= ~((1 << PD2) | (1 << PD3)); PORTD |= (1 << PD2) | (1 << PD3);
DDRD |= (1 << PD4); PORTD &= ~(1 << PD4);
// Enable PCINT for PD2 and PD3 (PCINT18 & PCINT19) PCICR |= (1 << PCIE2); PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);
Utilizare: Setarea pinilor pentru utilizare
Precizie măsurare viteză: ±0.1 km/h
Timp răspuns trigger: <50ms
Timp upload imagine: 2-3 secunde
Rezoluție optimă: 640x480 pixels
Rata succes upload: >95%
O Arhiva ce contine 3 directoare:
Laboratoare folosite:
Linkuri externe:
Linkuri Hardware: