This shows you the differences between two versions of the page.
pm:prj2025:avaduva:andrei_vlad.iancu [2025/05/25 22:32] andrei_vlad.iancu |
pm:prj2025:avaduva:andrei_vlad.iancu [2025/05/25 23:31] (current) andrei_vlad.iancu |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | |||
====== Smart Thermometer System ====== | ====== Smart Thermometer System ====== | ||
Line 5: | Line 6: | ||
<note tip> | <note tip> | ||
* Proiectul constă într-un sistem embedded ce măsoară temperatura ambientală folosind senzorul analogic LM35 și afișează valoarea citită pe un LCD 16x2. | * Proiectul constă într-un sistem embedded ce măsoară temperatura ambientală folosind senzorul analogic LM35 și afișează valoarea citită pe un LCD 16x2. | ||
- | * Scopul este dezvoltarea unui sistem embedded complet funcțional, cu integrare hardware și software, folosind periferice standard ale microcontrollerului STM32F103CBTx. | + | * Scopul este dezvoltarea unui sistem embedded complet funcțional, cu integrare hardware și software, folosind periferice standard ale unui microcontroller Arduino Uno. |
* Ideea proiectului a plecat de la necesitatea unui instrument simplu și eficient de măsurare a temperaturii ambientale, integrabil ușor în aplicații casnice sau industriale. | * Ideea proiectului a plecat de la necesitatea unui instrument simplu și eficient de măsurare a temperaturii ambientale, integrabil ușor în aplicații casnice sau industriale. | ||
- | * Este un proiect util atât educațional cât și practic, exersând concepte embedded precum GPIO, ADC, LCD, UART, întreruperi, temporizatoare și PWM. | + | * Este un proiect util atât educațional cât și practic, exersând concepte embedded precum GPIO, ADC, LCD, PWM, UART și întreruperi externe. |
</note> | </note> | ||
Line 18: | Line 19: | ||
{{ :pm:prj2025:avaduva:bloc.png |Schema bloc a proiectului}} | {{ :pm:prj2025:avaduva:bloc.png |Schema bloc a proiectului}} | ||
- | * LM35 convertește temperatura în semnal analogic | + | * LM35 convertește temperatura în semnal analogic |
- | * ADC0804 convertor analog-digital legat la PA0–PA7 | + | * ADC0804 convertește semnalul analogic în date digitale pe 8 biți |
- | * STM32F103 procesează valorile convertite | + | * Arduino Uno citește datele digitale, le interpretează și decide acțiunile |
- | * LCD 16x2 conectat prin GPIO controlează afișarea | + | * LCD 16x2 afișează temperatura |
- | * PWM controlează un buzzer de semnalizare termică | + | * Buzzer-ul este activat prin PWM când temperatura depășește un prag critic |
- | * UART trimite temperatura la PC pentru logging | + | * Ventilatorul este acționat de un motor controlat de Arduino când temperatura e prea mare |
- | * Butonul generează întreruperi pentru calibrare/reset | + | * Butonul permite resetarea sistemului sau calibrare |
+ | * UART trimite date seriale către un PC pentru logging | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
Line 36: | Line 38: | ||
**Bill of Materials (BOM)** | **Bill of Materials (BOM)** | ||
- | ^ Componentă ^ Model ^ Interfață ^ Link / Datasheet ^ | + | ^ Componentă ^ Model ^ Interfață ^ Link / Datasheet ^ |
- | | Microcontroller | STM32F103CBTx | GPIO, UART, ADC, PWM | [STM32F103CBT6 datasheet](https://www.st.com/resource/en/datasheet/stm32f103c8.pdf) | | + | | Microcontroller | Arduino Uno | GPIO, UART, ADC, PWM | [Arduino Uno](https://store.arduino.cc/products/arduino-uno-rev3) | |
- | | Senzor temperatură | LM35DZ | Analog | [LM35 Datasheet](https://www.ti.com/lit/ds/symlink/lm35.pdf) | | + | | Senzor temperatură | LM35DZ | Analog | [LM35 Datasheet](https://www.ti.com/lit/ds/symlink/lm35.pdf) | |
- | | Convertor ADC | ADC0804 | Paralel (8b) | [ADC0804 Datasheet](https://www.ti.com/lit/ds/symlink/adc0804.pdf) | | + | | Convertor ADC | ADC0804 | Paralel (8b) | [ADC0804 Datasheet](https://www.ti.com/lit/ds/symlink/adc0804-n.pdf) | |
- | | Afișaj LCD | LCD 16x2 | GPIO 4-bit | [HD44780 LCD](https://www.sparkfun.com/datasheets/LCD/HD44780.pdf) | | + | | Afișaj LCD | LCD 16x2 | GPIO 4-bit | [HD44780 LCD](https://www.sparkfun.com/datasheets/LCD/HD44780.pdf) | |
- | | Buzzer pasiv | - | PWM | - | | + | | Buzzer pasiv | - | PWM | - | |
- | | Buton calibrate | - | GPIO (EXTI) | - | | + | | Motor cu ventilator| DC 5V Motor + Propeller | GPIO cu tranzistor driver | - | |
+ | | Buton calibrate | - | GPIO (INT0) | - | | ||
**Pini utilizați:** | **Pini utilizați:** | ||
- | | Componentă | Pin STM32 | Funcție | | + | | Componentă | Pin Arduino | Funcție | |
- | |------------|-----------|---------| | + | |--------------------|-------------|---------| |
- | | LCD 16x2 | PB0–PB7 | GPIO (D4–D7 + RS, E) | | + | | LCD 16x2 | D2–D7 | GPIO (D4–D7 + RS, E) | |
- | | ADC0804 | PA0–PA7 | GPIO input | | + | | ADC0804 | D8–D13 | GPIO input | |
- | | LM35 | ADC0804 IN | Analog | | + | | LM35 | ADC0804 IN | Analog | |
- | | UART TX | PA9 | Serial out | | + | | UART TX | D1 | Serial out | |
- | | UART RX | PA10 | Serial in | | + | | UART RX | D0 | Serial in | |
- | | PWM out | PA8 | Semnal buzzer | | + | | PWM buzzer | D9 | Semnal PWM | |
- | | Buton | PC13 | EXTI13 | | + | | Motor ventilator | D10 | Control motor (cu tranzistor) | |
+ | | Buton | D3 (INT1) | Întrerupere externă | | ||
===== Software Design ===== | ===== Software Design ===== | ||
<note tip> | <note tip> | ||
- | * PlatformIO (STM32 + libopencm3) | + | * PlatformIO (Arduino Uno) |
* Biblioteci proprii pentru LCD | * Biblioteci proprii pentru LCD | ||
- | * Algoritmi: citire periodică ADC, afișare LCD, transmitere UART, PWM alert, EXTI reset | + | * Algoritmi: citire periodică ADC, afișare LCD, transmitere UART, PWM alert, control motor, întrerupere reset |
</note> | </note> | ||
* IDE: Visual Studio Code + PlatformIO | * IDE: Visual Studio Code + PlatformIO | ||
- | * Framework: STM32 + libopencm3 | + | * Framework: Arduino (C++) |
* Funcționalități: | * Funcționalități: | ||
- | * Inițializare GPIO, ADC, UART, EXTI, PWM | + | * Inițializare GPIO, UART, PWM, ADC software |
* Loop de citire periodică temperatură + afișare pe LCD | * Loop de citire periodică temperatură + afișare pe LCD | ||
* Trimitere serială a valorii măsurate | * Trimitere serială a valorii măsurate | ||
- | * Pornire buzzer dacă temperatura depășește un prag | + | * Activare buzzer și ventilator dacă temperatura e prea mare |
- | * Întrerupere buton pentru reset | + | * Întrerupere buton pentru reset sau calibrare |
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
Line 82: | Line 86: | ||
Proiectul este în stadiu de dezvoltare. Toate funcționalitățile software au fost scrise și urmează integrarea fizică a componentelor pentru testare și validare. | Proiectul este în stadiu de dezvoltare. Toate funcționalitățile software au fost scrise și urmează integrarea fizică a componentelor pentru testare și validare. | ||
- | |||
- | ===== Download ===== | ||
- | |||
- | <note warning> | ||
- | Repo: [[https://github.com/<username>/pm-smart-thermometer|GitHub - PM Smart Thermometer]] | ||
Codul sursă include: | Codul sursă include: | ||
- | * main.c | + | * main.cpp |
* lcd.c/.h | * lcd.c/.h | ||
* uart.c/.h | * uart.c/.h | ||
* adc.c/.h | * adc.c/.h | ||
- | * timer_pwm.c/.h | + | * pwm.c/.h |
- | * Makefile / platformio.ini | + | * delay.c/.h |
- | </note> | + | * gpio.c/.h |
- | + | * platformio.ini | |
- | ===== Bibliografie/Resurse ===== | + | |
- | + | ||
- | **Resurse Software** | + | |
- | * [Libopencm3](https://github.com/libopencm3/libopencm3) | + | |
- | * [PlatformIO STM32 setup](https://docs.platformio.org/en/latest/boards/ststm32/genericSTM32F103CB.html) | + | |
- | **Resurse Hardware** | + | GIT - https://github.com/WhyNotZebra/smart-thermometer |
- | * [LM35 Datasheet](https://www.ti.com/lit/ds/symlink/lm35.pdf) | + | |
- | * [ADC0804 Datasheet](https://www.ti.com/lit/ds/symlink/adc0804.pdf) | + | |
- | * [HD44780 LCD](https://www.sparkfun.com/datasheets/LCD/HD44780.pdf) | + | |