Delureanu Ana-Maria 333CB
Sistemul este alcătuit dintr-o placă Arduino UNO, un modul WiFi ESP8266, un servomotor MG90S, un display OLED și module LED pentru semnalizarea stării sistemului. Scopul proiectului este protejarea unui panou fotovoltaic prin acționarea automată a unei prelate rulante atunci când sunt detectate condiții meteorologice nefavorabile.
Arduino UNO reprezintă unitatea principală de control. Acesta primește date meteorologice prin intermediul modulului ESP8266 și decide extinderea sau retragerea mecanismului de protecție.
Pentru simularea condițiilor reale, sistemul utilizează un server meteo online simulat, inspirat de platformele utilizate de instituții precum ANM. Acesta furnizează informații precum probabilitatea de precipitații, viteza vântului sau alerte de furtună și grindină. Astfel, sistemul poate lua decizii preventive înainte de apariția efectivă a fenomenelor periculoase.
Mecanismul de protecție este acționat de servomotorul MG90S, care extinde sau retrage prelata de protecție deasupra panoului fotovoltaic. Starea sistemului este afișată pe display-ul OLED și semnalizată vizual prin LED-uri de stare.
Alimentarea sistemului se realizează printr-o sursă de 5V/3A cu conector Type-C, utilizată pentru alimentarea plăcii Arduino și a componentelor conectate.
În această etapă au fost stabilite componentele principale ale sistemului și modul în care acestea vor interacționa. Proiectul este format dintr-o unitate de control Arduino UNO, un modul WiFi ESP8266 pentru preluarea datelor meteo online, un display OLED pentru afișarea stării sistemului, un modul LED pentru semnalizare vizuală și un mecanism motorizat pentru acționarea prelatei rulante.
Partea mecanică a proiectului este în curs de realizare și include un suport fizic pentru panoul fotovoltaic, două ghidaje laterale din profil U și un ax pe care se va rula materialul de protecție. Mecanismul are rolul de a simula extinderea și retragerea automată a unei prelate în funcție de condițiile meteorologice primite de la serverul meteo simulat.
| Componentă | Pin componentă | Pin Arduino UNO | Explicație |
|---|---|---|---|
| ESP8266 ESP-01 | TX | D2 | Linie de recepție software serial pentru datele trimise de modulul WiFi. |
| ESP8266 ESP-01 | RX | D3 | Linie de transmitere software serial către modulul WiFi. |
| ESP8266 ESP-01 | VCC | 3.3V | Modulul ESP8266 funcționează la 3.3V. |
| ESP8266 ESP-01 | GND | GND | Masă comună cu Arduino. |
| OLED I2C | SDA | A4 | Linie de date pentru comunicația I2C. |
| OLED I2C | SCL | A5 | Linie de ceas pentru comunicația I2C. |
| OLED I2C | VCC | 5V / 3.3V | Alimentarea display-ului, în funcție de specificațiile modulului. |
| OLED I2C | GND | GND | Masă comună. |
| LED verde | IN/G | D8 | Indică funcționarea normală. |
| LED galben | IN/Y | D9 | Indică stare de avertizare. |
| LED roșu | IN/R | D10 | Indică protecție activată. |
| Motor rulare prelată | IN1 | D4 | Control motor / driver. |
| Motor rulare prelată | IN2 | D5 | Control motor / driver. |
| Motor rulare prelată | IN3 | D6 | Control motor / driver. |
| Motor rulare prelată | IN4 | D7 | Control motor / driver. |
| Driver motor | VCC | 5V | Alimentare motor/driver. |
| Driver motor | GND | GND | Masă comună cu Arduino. |
În cadrul proiectului a fost realizată implementarea completă a unui sistem embedded inteligent destinat protecției automate a panourilor fotovoltaice (și a culturilor agricole) împotriva fenomenelor meteorologice severe, precum grindina.
Sistemul este format din două componente software principale:
Firmware-ul embedded are rolul de:
Serverul software are rolul de:
Implementarea software este complet funcțională și are rolul unui proof-of-concept, scopul principal fiind demonstrarea fezabilității unei soluții embedded capabile să reacționeze automat la alerte meteorologice primite prin intermediul unei infrastructuri client-server.
Deși sistemul nu reprezintă, în forma actuală, o soluție industrială completă, dezvoltarea proiectului a urmărit valorificarea cât mai eficientă a cunoștințelor dobândite în cadrul laboratoarelor și cursurilor de microprocesoare, precum și utilizarea resurselor hardware disponibile, pentru a evidenția potențialul unei astfel de soluții în aplicații reale.
Dezvoltarea proiectului a presupus utilizarea unui mediu software atât pentru componenta embedded, cât și pentru componenta server-side. Pentru implementarea firmware-ului destinat microcontrolerului ATmega328P au fost utilizate instrumente specifice dezvoltării pe platforme AVR, iar pentru simularea serviciului meteorologic a fost utilizat un server HTTP implementat în Python.
| Componentă | Rol / Utilizare |
|---|---|
| Visual Studio Code | mediu principal de dezvoltare și organizare a proiectului |
| PlatformIO | compilarea, configurarea și încărcarea firmware-ului pe placa Arduino UNO |
| avr-gcc | compilator utilizat pentru generarea codului executabil destinat microcontrolerului |
| Python 3 | dezvoltarea componentei software de tip server |
| Flask | implementarea serverului HTTP și a interfeței web de simulare ANM |
| Serial Monitor | debugging și monitorizarea comunicației seriale |
Firmware-ul embedded a fost dezvoltat în limbajul C, utilizând biblioteci AVR standard și acces direct la registrele microcontrolerului pentru configurarea și controlul perifericelor hardware.
Componenta server-side a fost implementată în limbajul Python, utilizând framework-ul Flask pentru realizarea unei infrastructuri client-server capabile să transmită periodic stările meteorologice către sistemul embedded.
În cadrul proiectului au fost utilizate atât biblioteci standard specifice platformei AVR, necesare controlului direct al perifericelor hardware, cât și biblioteci externe utilizate pentru implementarea componentei server-side și a comunicației dintre sistem și infrastructura software.
| Bibliotecă | Rol / Utilizare |
|---|---|
| avr/io.h | acces direct la registrele microcontrolerului și configurarea perifericelor hardware |
| avr/interrupt.h | gestionarea întreruperilor hardware |
| stdio.h | debugging și afișare mesaje prin comunicația USART |
| string.h | prelucrarea și parsarea răspunsurilor HTTP primite de la server |
| util/delay.h | generarea întârzierilor scurte necesare anumitor secvențe hardware |
Utilizarea bibliotecilor AVR standard a permis dezvoltarea unei aplicații embedded eficiente, cu acces low-level la registrele microcontrolerului și control direct asupra perifericelor utilizate în cadrul proiectului.
| Bibliotecă | Rol / Utilizare |
|---|---|
| Flask | implementarea serverului HTTP și a infrastructurii client-server |
| jsonify | generarea și transmiterea răspunsurilor HTTP |
| render_template | implementarea interfeței web pentru simularea stărilor meteorologice |
Framework-ul Flask a fost ales datorită simplității și flexibilității sale, permițând dezvoltarea rapidă a unei interfețe web utilizate pentru simularea unui serviciu meteorologic de tip ANM și transmiterea alertelor către sistemul embedded.
Principala structură software utilizată în cadrul proiectului este o mașină de stări finite (Finite State Machine - FSM), responsabilă de gestionarea întregii logici de funcționare a sistemului.
Utilizarea unui FSM permite separarea clară a comportamentelor aplicației și gestionarea predictibilă a tranzițiilor dintre diferitele stări ale sistemului.
Stările implementate sunt:
| Stare | Rol |
|---|---|
| ST_INIT | inițializarea sistemului și configurarea perifericelor |
| ST_CONNECTING_WIFI | conectarea la rețeaua WiFi prin intermediul ESP8266 |
| ST_NORMAL | funcționarea normală a sistemului |
| ST_ALERTA_GRINDINA | activarea mecanismului de protecție împotriva grindinei |
| ST_ALERTA_SOARE | retragerea prelatei în condiții normale / însorite |
| ST_ERROR | tratarea erorilor de comunicație sau funcționare |
Implementarea FSM-ului oferă mai multe avantaje:
Firmware-ul utilizează un scheduler cooperativ non-blocant bazat pe execuția periodică a unor task-uri independente.
Fiecare funcționalitate importantă a sistemului este executată periodic:
Execuția periodică este realizată utilizând timestamp-uri generate prin intermediul modulului uptime, fără utilizarea delay-urilor blocante.
Această abordare permite funcționarea simultană și fluidă a tuturor componentelor sistemului și îmbunătățește timpul de răspuns al aplicației.
Comunicarea dintre sistemul embedded și serverul software este realizată prin interogări HTTP GET periodice efectuate de modulul ESP8266.
Serverul răspunde cu una dintre următoarele stări:
Răspunsurile primite sunt analizate folosind funcția strstr(), metodă aleasă pentru:
Proiectul a fost modularizat în mai multe fișiere sursă independente, fiecare responsabil pentru o anumită funcționalitate a sistemului.
| Fișier | Rol |
|---|---|
| main.c | inițializarea sistemului și gestionarea scheduler-ului |
| app_fsm.c | implementarea logicii FSM |
| esp8266.c | comunicație HTTP și control ESP8266 |
| esp_serial.cpp | comunicație serială cu modulul ESP8266 |
| motor.c | controlul servomotorului |
| led.c | controlul LED-urilor de stare |
| buzzer.c | controlul avertizării sonore |
| oled.c | controlul display-ului OLED |
| twi.c | implementarea comunicației I2C/TWI |
| usart.c | debugging și comunicație serială |
| uptime.c | gestionarea timpului și a task-urilor periodice |
| server.py | implementarea serverului ANM simulat |
Elementul principal de noutate al proiectului constă în integrarea unui sistem embedded cu o infrastructură software de tip client-server pentru realizarea unei soluții automate de protecție împotriva fenomenelor meteorologice severe. Sistemul combină comunicații WiFi, automatizări și control electromechanic, permițând detectarea alertelor meteorologice și reacția autonomă a mecanismului de protecție. Deși proiectul reprezintă un proof-of-concept realizat în context academic, arhitectura propusă evidențiază potențialul unei astfel de soluții pentru dezvoltări viitoare și integrarea cu servicii meteorologice reale.
Servomotorul utilizat pentru acționarea mecanismului de protecție este controlat folosind tehnici PWM studiate în cadrul laboratorului 3. Utilizarea PWM-ului permite controlul precis al sensului și duratei rotației servomotorului, fiind totodată o soluție eficientă din punct de vedere al resurselor hardware utilizate.
Timer-ele microcontrolerului sunt utilizate și pentru:
Display-ul OLED utilizează comunicație I2C/TWI, conform conceptelor studiate în laboratorul 6. În cadrul proiectului au fost utilizate:
Utilizarea protocolului I2C a permis conectarea eficientă a display-ului utilizând un număr redus de pini ai microcontrolerului.
Interfața USART este utilizată pentru:
Prin intermediul comunicației seriale au fost validate:
Conceptele de programare non-blocantă și scheduling periodic utilizate în proiect au la bază utilizarea timerelor și a mecanismelor de temporizare studiate în cadrul laboratoarelor.
Această abordare permite:
Arhitectura software a proiectului este modulară, fiecare componentă având un rol bine definit în funcționarea sistemului. Această organizare a permis dezvoltarea, testarea și depanarea separată a modulelor hardware și software.
Fluxul principal de funcționare este următorul:
Firmware-ul rulează într-o buclă infinită, în care sunt executate periodic task-uri independente. Această abordare permite funcționarea simultană a modulelor sistemului fără utilizarea unor delay-uri blocante.
Interacțiunea dintre componente este următoarea:
Funcționarea sistemului a fost validată incremental, prin testarea separată a fiecărei componente și apoi prin integrarea acestora în aplicația finală.
Au fost realizate următoarele teste:
Serverul Flask a permis simularea rapidă a diferitelor scenarii meteorologice, ceea ce a facilitat testarea comportamentului sistemului fără dependența de un serviciu meteorologic real.
În forma actuală, sistemul utilizează o „senzoristică software”, bazată pe informațiile meteorologice primite de la serverul care simulează un serviciu de tip ANM. Astfel, procesul de calibrare a constat în principal în ajustarea parametrilor software și a reacțiilor hardware ale sistemului.
Au fost calibrate:
Perioada de polling a fost stabilită la 5 secunde, valoare considerată optimă pentru:
De asemenea, au fost ajustați timpii de acționare ai servomotorului astfel încât mecanismul de protecție să execute corect operațiile de deschidere și închidere, iar semnalizarea sonoră a fost limitată la intervale scurte pentru a evita funcționarea continuă și disconfortul acustic.
Demo video: https://www.youtube.com/shorts/0mEXFdJo1yw
Repo GitHub: https://github.com/anadelureanu/Proiect_PM_Protectie_PanouriFotovoltaicee
Realizarea acestui proiect a reprezentat o experiență foarte interesantă și valoroasă, atât din punct de vedere tehnic, cât și personal. Pe parcursul dezvoltării au existat numeroase provocări și momente de incertitudine legate de funcționarea corectă a sistemului, însă satisfacția finală a fost cu atât mai mare în momentul în care toate componentele au funcționat împreună și proiectul a devenit un produs fizic complet funcțional.
Consider că unul dintre cele mai importante aspecte ale acestui proiect a fost posibilitatea de a aplica în practică noțiunile studiate în cadrul laboratoarelor și cursurilor de microprocesoare, observând direct modul în care conceptele teoretice se transformă într-un sistem real.
Îmi doresc ca pe viitor să dezvolt această idee în continuare, prin integrarea unor senzori reali și a unor servicii meteorologice oficiale, deoarece consider că o astfel de soluție are potențial pentru aplicații practice reale.
PS: multumiri speciale lui Gabiii, Stefi si Nelutu pentru prinderea cadrului cu bormasina si Ioanei pentru cele mai precise lipituri cu fludor 🫶