Autorul poate fi contactat la adresa: Login pentru adresa
Proiectul este format dintr-un sistem care determină temperatura și umiditatea din aer, afișându-le în timp real pe un display cu 7 segmente ( cu 4 cifre ).
Componentele folosite pentru proiect:
→ senzor temperatura
→ senzor umiditate
→ display 7 segmente
Se dorește ca la finalul proiectului, acest sistem să aibă o utilitate practică, fiind folosit în diferite situații ( exemplu : testarea temperaturii camerei în diverse condiții sau pentru statistici în diferite anotimpuri ).
Primirea datelor de la senzorii de temperatura si umiditate + prelucrare si afisare pe display-ul cu 7 segmente
Nota: senzorul folosit este SYH-2Rs(imagine jos), iar cel din imaginea de sus este SHT11
→ placuta cu gaurele cuprate [1]
→ senzor temperatura LM35 - [2]
→ senzor umiditate SYH-2Rs - [3]
→ display 7 segmente cu 4 cifre - [4]
→ led-uri verzi
→ fire mama-mama - [5]
→ bareta pini tata
Implementarea schemei am facut-o in programul Eagle, versiunea 7.5.0, 30 Trial Edition. Componentele conectate la microcontroller: senzor de temperatura LM35D, senzor umiditate cu 3 pini, display cu 7 segmente si 3 LED-uri conectate in serie cu rezistente de 470 ohmi.
Port-uri pentru pini
Display cu 7 segmente
A, B, C si D: PD0,1,4 si 5
E si F: PB4 si PB5
G - PC3
D1,2,3,4 : PB0,1,2,3
Senzor temperatura + umiditate
Vout: PA0 si PA1
LED-URI
LED_TEMP, LED_HUMID si LED_7SD: PD3,7 si 2
Schema in Eagle ( updated: 26.05.2015 ):
Pini de conectare Quadruple Digit Displays (display 7 segmente cu 4 cifre):
Programmer's Notepad
Compilare folosind AVRwin
Biblioteci: → avr/io.h, /interrupt.h, /delay.h si util/delay_basic.h
Dupa ce se face citirea valorii de la portul ADC0 (A0), se determina valoarea temperaturii (integer):
temp_celsius = (adc_value)/2
Calcul temperatura in grade Celsius - Arduino:
temp_celsius = (voltage_value/1024)*500
Calcul temperatura in grade Fahrenheit:
temp_fahrenheit = (temp_celsius*9)/5 + 32
Calcul umiditate:
humidity = [51*(5-adc_value)/adc_value]/1000 (unde adc_value reprezinta valoarea in Volti - transformare din mV in V)
Pentru scrierea programului care face cele doua citiri ale valorilor senzorilor si afisarea lor pe display, am folosit laboratorul 0 si laboratorul 5. Din cadrul primului laborator, am folosit notiunile legate de setarea directiei pinilor si a valorilor din registrele de date (nota: segmentele si digit-ii display cu 7 segmente sunt activi pe 1). Initial, am dorit ca schimbarea valorilor acestora sa se faca folosind intreruperile ( laborator 2 - putin dificil ), dar am considerat ca este mai usor sa lucrez intr-o bucla infinita in care se aprind digit-ii pe rand, avand un delay de 80 de ms intre aprinderi si stingeri. Din cadrul laboratorului 5, am folosit notiunile de citire a valorilor ADC-ului, acestea facandu-se in functie de valoarea canalului. In concluzie, folosind cele 2 laboratoare, am putut scrie intregul cod pentru a putea face determinarile valorilor celor senzori si a afisarii lor.
Surse: statie_meteo.c si caractere.c
Functii: citirea valori port-uri ADC, afisare valori pe display cu 7 segmente
Proiectul functioneaza la fel cum mi-am dorit la inceput.Consider ca este foarte util in momentele in care doresc sa aflu temperatura camerei si nu am la indemana un termometru de camera. De asemenea, il pot folosi si pentru determinarea temperaturii din exterior, in diverse zile, pentru a efectua cateva statistici cu privire la fluctuatiile acestora si cat de aproape de adevar sunt ele.
De asemenea, mi-a placut foarte mult sa lucrez la el ( partea de hardware + software ). Am facut teste pe o placuta Arduino Uno, la inceput, apoi am lipit pe placuta de test , iar in final am scris codul pentru acesta.
Mai jos pot fi descaracte fisierele cu cod scris in C, makefile-ul, schema in Eagle ( versiunea updat-a ) si un fisier de README. statie_meteo_horiastoenescu333cb_pm2016.zip
Milestone 1: Am terminat descrierea proiectului si am incarcat schema bloc a acestuia (22.04.2016).
23.04.2016: Am cumparat senzorul de temperatura si display-ul cu 7 segmente ( 4 cifre ).
Milestone 3: Am scris documentul care contine lista de piese folosite pentru proiect - placuta statiei meteo + placa de baza (29.04.2016)
Milestone 2: Am terminat de lipit componentele placii de baza PM2016 + incarcare bootloader (06.05.2016)
Milestone 4: Am implementat schema electrica in Eagle (06.05.2016)
12.04.2016: Am cumparat toate componentele necesare proiectului.
24.05.2016: Am lipit toate componentele pe placuta de test.
26.05.2016: Am terminat partea de software a proiectului si astfel am finalizat intreg proiectul
[1]: http://saimonelectronics.ro/produs.htm?prod=H25PRO75
[2]: http://www.conexelectronic.ro/produs.php?id=48282
[3]: http://www.tme.eu/ro/details/syh-2rs/senzori-de-umiditate
[4]: http://www.conexelectronic.ro/produs.php?id=134839
[5]: https://www.robofun.ro/bricks/fire-conexiune-mama-mama-140mm
Resurse hardware
http://www.ti.com/lit/ds/symlink/lm35.pdf - folosire senzor LM35
http://www.tme.eu/ro/Document/3ddc6522bfbd710d4e0a8886ec758cee/SYH-2Rs.pdf - senzor umiditate SYH-2RS
http://www.changpuak.ch/electronics/quickhacktoolsandsmallprojects/DVM-ATMEGA/elf511sygwa-s530-e2_eng_tds.pdf - display 7 segmente 4 digits
Resurse software
Arduino ( am testat componentele de mai sus mai intai pe Arduino Uno V3 )
http://www.hobbytronics.co.uk/arduino-4digit-7segment - 7-segment display
http://www.instructables.com/id/ARDUINO-TEMPERATURE-SENSOR-LM35/ - citire temperatura Arduino
http://diyelectronix.blogspot.ro/2013/07/arduinolabview-siasistem-de-irigare.html - folosire senzor umiditate Arduino
http://www.instructables.com/id/Arduino-4-digit-7-segment-display/ - 7 segmente display Arduino
AVR
http://www.embedds.com/sensing-temperature-using-avr - citire temperatura AVR