This is an old revision of the document!
+-------------------+ USB Serial (ASCII, 9600 baud) +----------------------+
| ATmega328P | <-------------------------------------> | Platforma Web (PC) |
| Xplained Mini | | |
| | | Node.js / Express 5 |
| RvmController | | SQLite + Drizzle |
| (masina stari) | | React 19 + Vite |
| | | Socket.IO |
+-------------------+ +----------------------+
|
| GPIO / UART / PWM
|
+-------+-----------------------------------------------+
| SENZORI & ACTUATORI |
| E2100 Barcode Scanner (SoftwareSerial) |
| HC-SR04 x2 (diametru + inaltime) |
| Senzori fotoelectrici slot IR x2 (detectie sticla) |
| Servomotor MG995 (poarta accept/reject) |
| Motor DC cu reductor (conveyor belt) |
| Motor DC mic (crusher) |
+-------------------------------------------------------+
Flux de functionare:
| Componenta | Rol | Pret |
|---|---|---|
| ATmega328P Xplained Mini | Microcontroller principal (AVR 8-bit, 16 MHz, 2KB RAM, 32KB Flash) | existent in laborator |
| E2100 Barcode Scanner | Citire coduri de bare 1D/2D prin UART TTL (SoftwareSerial 9600 baud) | 59.90 RON |
| HC-SR04 ultrasonic (x2) | Masurare inaltime si diametru sticla (2-450 cm, 0.3 cm precizie) | 11.30 RON |
| Senzor fotoelectric slot IR (x2) | Detectie prezenta sticla la intrare (break-beam, iesire digitala) | 5.80 RON |
| Servomotor MG995 | Actionare poarta accept/reject (PWM 50 Hz, 0-90 grade) | 26.14 RON |
| Motor DC cu reductor 1:48 | Banda transportoare (conveyor) | 7.26 RON |
| Motor DC mic | Simulare crusher (strivire sticla) | 1.74 RON |
| Modul L9110S H-Bridge | Driver pentru motoarele DC | 8.17 RON |
| Modul IRF520 MOSFET | Control PWM motor crusher | 4.14 RON |
| Kit Breadboard 830p + sursa | Prototipare + alimentare 5V | 42.94 RON |
| Fire Dupont, rezistori, condensatori, diode | Interconectare si filtrare | ~27 RON |
| Total | ~201 RON + livrare |
Mapare pini ATmega328P Xplained Mini:
Pin Functie Modul conectat ------------------------------------------ PD0 UART0 RX mEDBG USB (serial la PC) PD1 UART0 TX mEDBG USB (serial la PC) PD2 SoftwareSerial RX E2100 TX PD3 SoftwareSerial TX E2100 RX PD4 GPIO input Senzor fotoelectric slot #1 PD5 PWM (Timer0) MG995 Servo PD6 PWM (Timer0) IRF520 MOSFET (crusher) PD7 GPIO output HC-SR04 #1 TRIG (diametru) PB0 GPIO input HC-SR04 #1 ECHO (diametru) PC0 GPIO output HC-SR04 #2 TRIG (inaltime) PC1 GPIO output L9110S IN1 (conveyor) PC2 GPIO output L9110S IN2 (conveyor) PC3 GPIO input HC-SR04 #2 ECHO (inaltime)
Schema de alimentare:
ATmega328P Xplained Mini este alimentat prin USB de la PC (5V). Motoarele, servo si senzorii activi sunt alimentati separat de pe o sina 5V a modulului de breadboard (incarcator 5V 2A), cu GND comun cu ATmega. Separarea previne varfurile de curent ale motoarelor sa destabilizeze microcontrollerul.
xplained_mini (hardware real) si xplained_mini_sim (simulare cu stubs)set_upload_port.py) pentru upload prin mEDBG (interfata USB HID, nu serial clasic)Arhitectura firmware (DDD pe ATmega):
Codul este structurat in patru straturi:
common/ — utilitare reutilizabile fara dependinte hardware: FixedString (string pe stack, fara alocare dinamica), RingBuffer, Timer (non-blocking, bazat pe millis())domain/ — interfete pure C++ si value types, zero dependinte Arduino. Contine: ICommChannel, IScanner, IBottleDetector, IHeightSensor, IDiameterSensor, ITransport, IServoGate, ICrusher, enum-uri si structuri de dateapplication/ — RvmController: masina de stari principala (IDLE→WAITING→SCANNING→MEASURING→TRANSPORTING/RETURNING→CRUSHING→IDLE), complet non-blocking. BottleValidator: functie pura de validare dimensiuniinfrastructure/ — drivere reale: UartProtocol, Gm65Scanner (E2100), IrBreakBeam, ServoGate, DcCrusher, drivere HC-SR04stubs/ — implementari false controlabile prin comenzi SIM: de pe PC, pentru simulare fara hardwareDecizii cheie firmware:
delay() in logica aplicatiei — toate operatiile sunt non-blocking cu tick()new, String, std::vector) — pe 2KB RAM fragmentarea heap-ului e fatala-fno-exceptions)Platforma web (Node.js + React):
Monorepo pnpm cu trei pachete:
shared — tipuri TypeScript comune (protocol serial, DTO-uri REST)server — Node.js 22, Express 5, SQLite + Drizzle ORM, serialport, Socket.IO 4, Zodclient — React 19, Vite, Tailwind CSS v4, shadcn/ui, RechartsPagini: Dashboard (status live, control START/STOP), Barcodes (CRUD), Transactions (istoric + filtrare), Statistics (grafice Recharts), Simulation (control stubs in timp real)
Protocol serial ASCII (ATmega ↔ PC):
PC → ATmega: CMD:START / CMD:STOP / CMD:RESET DIMS:220:65:10 (inaltime_mm:diametru_mm:toleranta_mm) DB:NOT_FOUND ATmega → PC: STATUS:IDLE / WAITING / SCANNING / MEASURING / TRANSPORTING / CRUSHING / RETURNING BARCODE:5941234567890 MEASURED:H=218:D=63 RESULT:ACCEPTED RESULT:REJECTED:oversized ERROR:JAM / ERROR:SCANNER_FAIL Protocol simulare (build xplained_mini_sim): SIM:BEAM:ON/OFF SIM:BARCODE:<val> SIM:HEIGHT:<mm> SIM:DIAM:<mm> SIM:JAM SIM:RESET_STUBS → ATmega raspunde cu SIM:ACK:<mesaj> sau SIM:ERR:<motiv>
Separarea clara intre domain si infrastructure s-a dovedit o necesitate practica, nu un lux: fara ea nu ar fi fost posibila testarea logicii masinii de stari inainte de sosirea hardware-ului. Frameworkul de simulare, implementat in cateva zile, va economisi saptamani de debugging ulterior.
Constrangerea de memorie (2KB RAM) a impus decizii concrete de design: FixedString in loc de String, alocare exclusiv statica, fara exceptii. Pe platforma web, SQLite + Drizzle a oferit zero configurare si schema TypeScript-first, portabila complet.
SmartRVM/
device/ -- firmware ATmega (PlatformIO)
platform/ -- platforma web (pnpm monorepo)
DOCUMENTATION.md
SHOPPING_LIST.md
Compilare si upload firmware:
cd device pio run -e xplained_mini # build productie pio run -e xplained_mini_sim -t upload # upload simulare
Pornire platforma web:
cd platform && pnpm install pnpm --filter server dev # port 3000 pnpm --filter client dev # port 5173
Resurse Software:
Cursuri PM relevante: