This is an old revision of the document!


Sistem de Monitorizare si Protectie Industriala

Introducere

Proiectul propune un sistem de monitorizare si protectie pentru o linie de productie industriala simulata. In centrul sistemului se va afla un motor stepper 28BYJ-48 care reprezinta echipamentul principal de productie - de exemplu o masa rotativa de asamblare sau un conveyor. In jurul lui vor fi dispusi mai multi senzori care detecteaza situatiile periculoase: prezenta personalului in zona de operare, apropierea unor obiecte, infiltratii de apa, zgomote anormale si conditii de mediu nepotrivite.

Punctul de plecare a fost o intrebare destul de concreta: cum opresti in siguranta un echipament industrial cand apare o anomalie? in aplicatiile reale, timpul de raspuns trebuie sa fie de ordinul milisecundelor, iar sistemul trebuie sa functioneze fiabil chiar si atunci cand o parte din componente cedeaza. Aceste cerinte motiveaza arhitectura propusa, cu doua microcontrollere avand roluri distincte.

Consider proiectul util din mai multe motive. In primul rand, abordeaza o problema reala - siguranta in mediile industriale automatizate. In al doilea rand, integreaza majoritatea conceptelor parcurse la curs: senzori analogici si digitali, comunicatie seriala intre microcontrollere, conectivitate WiFi, interfata cu utilizatorul. In al treilea rand, arhitectura dual-microcontroller cu separarea functiilor de siguranta hard real-time de cele de procesare si conectivitate este o abordare des intalnita in aplicatiile industriale serioase.

Descriere generala

Sistemul va avea doua microcontrollere care isi impart responsabilitatile:

  • Arduino MEGA 2560 va asigura functiile de siguranta hard real-time. Va citi senzorii la intervale scurte, va aplica logica de siguranta si va controla direct motorul si buzzer-ul. Obiectivul este un timp de raspuns sub 50 ms la conditii critice.
  • ESP32 WROOM-32D se va ocupa de procesarea avansata si conectivitate. Va primi datele de la Arduino prin UART, le va combina cu propriile masuratori de la DHT11, va calcula un scor de sanatate, va afisa informatii pe LCD si va transmite datele catre un server web prin WiFi.

Aceasta separare ofera doua avantaje importante. Primul este redundanta: daca ESP32 devine indisponibil (pierdere de WiFi, crash software, etc.), Arduino continua sa asigure siguranta echipamentului. Al doilea este performanta: fiecare microcontroller poate fi optimizat pentru rolul sau, fara compromisuri.

Fluxul de date planificat:

  1. Arduino citeste toti senzorii la fiecare 10 ms si isi actualizeaza starea interna
  2. Aplica logica de siguranta si controleaza direct motorul si buzzer-ul
  3. La fiecare 200 ms transmite un pachet de date catre ESP32 prin UART
  4. ESP32 valideaza pachetul, il combina cu datele DHT11 si calculeaza scorul de sanatate
  5. LCD-ul se actualizeaza la fiecare 500 ms cu informatii prioritizate pe stare
  6. La fiecare 300 ms ESP32 trimite datele complete catre server printr-un POST HTTP
  7. Dashboard-ul web se reimprospateaza la 500 ms

Logica de siguranta va fi organizata ca o cascada cu prioritati: EMERGENCY > SOUND SHUTDOWN > MAINTENANCE > WARNING > NORMAL. Starile cu prioritate mai mare le suprascriu pe cele inferioare, iar tranzitiile sunt deterministe.

Hardware Design

Lista de piese

# Componenta Cant. Link
1 Arduino MEGA 2560 R3 (clona, ATmega2560 + CH340) 1 Optimus Digital
2 Placa de dezvoltare ESP32 cu WiFi si Bluetooth (ESP-WROOM-32) 1 Optimus Digital
3 Modul senzor PIR HC-SR501 1 Optimus Digital
4 Senzor ultrasonic HC-SR04 1 Optimus Digital
5 Modul senzor de sunet (iesire A0 + D0) 1 Optimus Digital
6 Senzor de nivel al apei (analogic) 1 Optimus Digital
7 Modul senzor DHT11 (temperatura + umiditate) 1 Optimus Digital
8 Set motor pas cu pas 28BYJ-48 + driver ULN2003 1 Optimus Digital
9 LCD 1602 HD44780 cu backlight verde, 5 V (paralel, 16 pini) 1 Optimus Digital
10 Buzzer activ 5 V 1 Optimus Digital
11 Buton tactil 6x6x6 mm (emergency stop) 1 Optimus Digital
12 Mini potentiometru 10k (contrast LCD) 1 Optimus Digital
13 Set rezistoare 0.25 W (220 ohm pt. backlight + 1k si 2k pt. divizorul UART) 1 Optimus Digital
14 Breadboard HQ 830 puncte 2 Optimus Digital
15 Set fire tata-tata 40p / 20 cm 1 Optimus Digital
16 Set fire mama-tata 40p / 10 cm 1 Optimus Digital
17 Alimentator 9 V / 1 A cu mufa DC 1 Optimus Digital

Aproape toate componentele provin din acest kit AliExpress. Singura exceptie este placa ESP32 WROOM-32, achizitionata separat. Link-urile Optimus Digital de mai sus sunt echivalente individuale, pentru referinta.

Organizarea fizica propusa

Componentele vor fi distribuite pe doua breadboard-uri pentru a separa logic responsabilitatile sistemului si pentru a facilita mentenanta.

Breadboard principal (Arduino):

  • Arduino MEGA plasat langa
  • Senzorii de intrare legati prin pini de pe un cablu ribbon
  • Buzzer in partea dreapta
  • Distributia de alimentare (5V/GND) pe rail-urile superioare

Breadboard secundar (ESP32):

  • ESP32 pozitionat central
  • LCD1602 conectat prin 6 fire de control
  • DHT11 pentru monitorizarea ambientala
  • Conexiunile UART catre Arduino prin fire dedicate

Alimentarea va pleca de la adaptorul de 9V care intra in jack-ul DC al Arduino-ului. Regulatorul intern al placii furnizeaza 5V stabil, care va alimenta toti senzorii si ESP32-ul (prin pinul Vin). ESP32-ul are propriul regulator intern care coboara tensiunea la 3.3V pentru functionarea interna. Toate componentele vor imparti o masa comuna distribuita prin rail-urile negative ale celor doua breadboard-uri.

Schema electrica

Pinout planificat

Arduino MEGA:

Componenta Pini Arduino
PIR HC-SR501 OUT → D12, VCC → 5V, GND → GND
HC-SR04 Trig → D11, Echo → D10
Sound Sensor A0 → A0, D0 → D9, + → 5V, G → GND
Water Sensor S → A1, + → 5V, - → GND
Emergency Button D18 cu INPUT_PULLUP, celalalt capat → GND
Stepper ULN2003 IN1→D8, IN2→D7, IN3→D6, IN4→D5
Buzzer + → D4, - → GND
UART catre ESP32 TX2 (D16) → divizor 1k/2k → RX2 ESP; RX2 (D17) ← TX2 ESP direct

ESP32:

Componenta Pini ESP32
DHT11 GPIO32
LCD1602 RS→GPIO5, EN→GPIO18, D4→GPIO19, D5→GPIO21, D6→GPIO22, D7→GPIO23
UART catre Arduino RX2 (GPIO16), TX2 (GPIO17)

Compatibilitatea electrica

Principalul aspect electric care trebuie luat in considerare este interfatarea intre Arduino (logica 5V) si ESP32 (logica 3.3V). Conform datasheet-ului, pinii GPIO ai ESP32 sunt 5V tolerant pe input, ceea ce permite conectarea directa a liniei TX a Arduino-ului la RX-ul ESP32-ului fara level shifter. Pentru directia inversa (ESP32 TX 3.3V → Arduino RX 5V), tensiunea de 3.3V ar trebui interpretata ca HIGH, intrucat pragul de detectie al Arduino-ului este in jur de 3V.

LCD-ul este alimentat la 5V dar accepta semnale de control de 3.3V, deoarece pragul sau de HIGH este in jurul valorii de 2.5V.

Toti senzorii sunt compatibili cu alimentarea la 5V (verificat in datasheet-uri), iar curentul total estimat ar trebui sa se incadreze in capacitatea regulatorului intern al Arduino-ului.

Estimare consum energetic

Valorile de mai jos sunt estimate pe baza datasheet-urilor componentelor.

Componenta Curent (estimat) Putere
Arduino MEGA active 200 mA 1000 mW
ESP32 cu WiFi activ 240 mA 792 mW
PIR 50 mA 250 mW
HC-SR04 15 mA 75 mW
Sound sensor 4 mA 20 mW
Water sensor 5 mA 25 mW
DHT11 0.3 mA 1.5 mW
LCD1602 20 mA 100 mW
Stepper activ 300 mA 1500 mW
Buzzer activ 30 mA 150 mW

Consumul total maxim estimat este de aproximativ 840 mA (3.9 W), iar consumul tipic - cu stepper-ul in functiune intermitenta si buzzer-ul activat ocazional - ar trebui sa fie in jur de 550 mA (2.8 W).

Pentru o eventuala alimentare cu acumulatori NiMH de 1.2V / 2500 mAh, ar fi necesari 8 acumulatori in serie pentru a obtine 9.6V (compatibil cu intrarea Vin a Arduino-ului). Autonomia estimata ar fi de aproximativ 4.5 ore (2500 mAh / 550 mA).

Software Design

Mediu de dezvoltare

  • Arduino IDE pentru ambele microcontrollere, folosind board package-ul ESP32 oficial Espressif
  • Python 3 cu Flask pentru server-ul web
  • SQLite pentru persistenta datelor
  • HTML, CSS si JavaScript vanilla pentru dashboard

Librarii si surse 3rd-party planificate

Pe Arduino:

  • Stepper.h - control motor stepper (librarie standard)
  • Serial2 hardware pentru comunicatia cu ESP32

Pe ESP32:

  • WiFi.h - conectarea la retea
  • HTTPClient.h - cereri catre server-ul Flask
  • LiquidCrystal.h - controlul LCD-ului
  • DHT.h (Adafruit) - citirea senzorului DHT11
  • ArduinoJson.h - serializarea datelor pentru transmisia HTTP

Pe server:

  • Flask - framework web minimalist
  • sqlite3 (din biblioteca standard Python) - persistenta datelor
  • Chart.js (incarcat din CDN) - grafice pe dashboard

Algoritmi si structuri planificate

State machine pentru siguranta (Arduino)

Sistemul va functiona pe baza unei masini cu stari avand 5 niveluri de prioritate:

EMERGENCY      - buton apasat sau conditie critica detectata
SOUND_SHUTDOWN - 5 secunde de pauza dupa un spike de zgomot
MAINTENANCE    - 10 secunde dupa detectie PIR, cu queuing
WARNING        - operare continua, dar cu o anomalie semnalata
NORMAL         - functionare nominala, motor la 15 RPM

La fiecare iteratie a buclei principale, conditiile vor fi evaluate de la prioritatea cea mai mare catre cea mai mica. Prima conditie indeplinita va determina starea curenta.

Protocolul de comunicatie Arduino → ESP32

Pentru transmisia datelor intre microcontrollere am proiectat un protocol simplu:

  • header de start fix (0xAA 0x55) pentru sincronizare
  • payload cu valorile senzorilor si starea curenta
  • checksum XOR pentru validarea integritatii
  • mecanism ACK/NACK din partea ESP32, cu retransmisie la NACK
  • timeout de 500 ms pentru detectarea pierderii conexiunii

Validarea prin checksum este utila in special pentru rezilienta la interferentele electromagnetice generate de motorul stepper, care ar putea afecta liniile UART.

Calculul scorului de sanatate (ESP32)

Scorul va fi calculat pe o scara 0-100, ponderat in functie de mai multi parametri:

  • temperatura ambientala (penalizare la iesirea din intervalul 18-28°C)
  • umiditatea (penalizare la valori sub 30% sau peste 70%)
  • nivelul apei (penalizare semnificativa la depasirea pragului)
  • starea sistemului (Emergency = 0, Warning = -20, etc.)

Scorul va fi o varianta simplificata a ceea ce ar exista intr-o aplicatie industriala reala. Intr-un sistem complet ar fi utila includerea unor parametri suplimentari precum vibratiile (de exemplu prin MPU6050), curentul consumat de motor, presiunea sau calitatea aerului. Numarul redus de fire jumper disponibile este factorul limitativ in adaugarea altor senzori.

Watchdog timer

Pe Arduino voi activa watchdog-ul cu timeout de 4 secunde. Daca bucla principala se blocheaza din orice motiv (deadlock, ciclu infinit intr-o functie, etc.), microcontrollerul se va reseta automat. Este o protectie elementara, dar esentiala pentru un sistem care trebuie sa functioneze continuu.

Functii planificate

Pe Arduino:

  • readAllSensors() - citeste toti senzorii si actualizeaza un struct comun
  • evaluateSafetyState() - aplica logica state machine
  • controlMotor() - porneste, opreste sau seteaza viteza motorului
  • sendDataToESP32() - impacheteaza datele cu header si checksum si le transmite
  • triggerBuzzer(pattern) - genereaza diferite pattern-uri sonore in functie de stare

Pe ESP32:

  • receiveFromArduino() - parseaza pachetul UART si valideaza checksum-ul
  • calculateHealthScore() - calculeaza scorul de sanatate descris anterior
  • updateLCD() - roteste intre seturi de informatii la fiecare 3 secunde in modul normal
  • sendToServer() - construieste payload JSON si efectueaza POST HTTP
  • reconnectWiFi() - reconectare automata la pierderea retelei

Pe server (Flask):

  • endpoint /api/data (POST) - primeste datele de la ESP32 si le salveaza in SQLite
  • endpoint /api/history (GET) - returneaza ultimele N puncte pentru graficele dashboard-ului
  • endpoint / (GET) - serveste dashboard-ul HTML

Rezultate Obtinute

Sectiunea va fi completata dupa finalizarea implementarii.

Concluzii

Sectiunea va fi completata la finalul proiectului.

Download

Aici va fi incarcata arhiva cu sursele proiectului: codul Arduino, codul ESP32, server-ul Python, schemele electrice, un fisier README cu instructiuni de build si pinout, si un ChangeLog.

Jurnal

Sectiune ce va fi actualizata pe parcursul proiectului.

Bibliografie/Resurse

pm/prj2026/florin.stancu/andrei.bleortu.1779104545.txt.gz · Last modified: 2026/05/24 23:42 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0