Autorul poate fi contactat la adresa: Login pentru adresa
Ce face?
Măsoară temperatura, umiditatea, presiunea atmosferică relativă și nivelul de radiație UV.
Care este scopul lui?
Calculează temperatura resimțită la nivelul organismului uman în condițiile date.
Semnalează momentele în care nivelul de radiație UV a soarelui atinge praguri considerate periculoase pentru sănătatea pielii.
Care a fost ideea de la care ați pornit?
Ideea de bază a proiectului este inclusă într-un alt proiect personal care constă în construcția unui device IoT care să permită vizualizarea (prin intermediul unei aplicații web rulate în cloud a) parametrilor mai sus enumerați. Proiectul respectiv este aproape complet implementat (folosind o platformă de dezvoltare Arduino-like cu facilități extinse de comunicație către Internet).
Proiectul își propune să fie o alternativă accesibilă și cu un setup extrem de facil pentru stațiile meteo profesionale.
Momentan, mă voi rezuma la a afișarea datelor pe LCD, urmând ca atunci când timpul îmi va permite să încerc integrarea proiectului de la PM cu cel mai sus menționat pentru a obține dezvoltarea (cu cost mai mic a) unor array-uri de device-uri.
De ce credeţi că est util pentru alţii şi pentru voi?
În zilele toride de vară, foarte mulți oameni își pun sănătatea în pericol nereușind să-și planifice deplasările în aer liber în funcție de variațiile indicelui de confort termic.
În timpul micro-exploziilor solare spontane, nivelul de radiație UV din componența luminii solare poate fi deosebit de periculoasă pentru piele, iar prevenția apariției afecțiunilor asociate poate fi făcută foarte ușor (prin purtarea de haine care să acopere un procent cât mai mare din suprafața pielii), dacă se cunoaște care sunt aceste momente de mare risc.
Dispozitivul realizat va permite vizualizarea temperaturii resimțite la nivelul organismului uman și a indicelui de UV, permițând utilizatorului să aibă o mai bună cunoaștere a situațiilor de risc pentru sănătate referitoare la condițiile meteo.
De asemenea, acesta poate fi un device foarte interesant pentru pasionații de urmărirea evoluției vremii.
Senzorul BMP180 furnizează plăcuței temperatura și presiunea atmosferică.
Presiunea va fi măsurată prin intermediul senzorului DHT. Acesta este, de asemenea, capabil să măsoare temperatura, dar cu o precizie mai mică decât BMP180, motiv pentru care îl voi folosi, cel mult, pentru verificare.
Senzorul de UV furnizează o tensiune corespunzătoare nivelului de radiații UV.
Microcontrolerul va procesa datele de la senzori și va comanda afișarea datelor pe LCD.
În schema bloc, am avut în vedere fluxul informational, motiv pentru care am omis caracterul bi-directional al comunicației dintre microcontroler și senzorii digitali (BMP180 și DHT), respectiv dintre micro-controler și controlerul LCD-ului.
Bill of Materials poate fi consulat mai jos:
Schema de conectare a perifericelor este:
LCD SDA || BMP180 SDA → AVR SDA
LCD SCL || BMP180 SCL → AVR SCL
DHT11 SIG → AVR PD0
UV Sensor SIG → AVR PA0
La care se adaugă schema pentru componentele de bază:
Pentru conectarea celor 2 componente I2C este necesară conectarea a 2 rezistențe de pull-up de 4K7 (calculate pentru o frecvență a I2C clock de 100kHz).
Mediul de dezvoltare
Pentru dezvoltarea părții software am folosit WinAVR și editorul Sublime Text.
Librării și alte referințe
Pentru interfațarea dispozitivelor I2C am folosit o bibliotecă open-source scrisă de Peter Fleury pfleury@gmx.ch http://jump.to/fleury
Pentru Groove LCD RGB Backlight am plecat de la implementarea pentru Arduino a bibliotecii oferite de producător și am reușit destul de ușor să o leg cu biblioteca de I2C de mai sus.
Pentru BMP180, am folosit (cu mici modificări) biblioteca pentru BMP085 de aici aici.
Pentru citirea senzorului de UV, am folosit doar ca idee de principiu implementarea pentru Arduino, deoarece pentru implementarea pe AVR mi s-a părut mult mai de dorit o implementare care să facă citirea ADC-ului pe bază de întreruperi.
Structura software
Metodele pentru interfațarea fiecărui periferic sunt definite într-o clasă / fișier header separat, cu excepția implementării pentru senzorului UV pe care am preferat să o păstrez în main, deoarece conține și o funcție de întrerupere. Aceasta returnează valoarea citită (în mod continuu) prin variabila globală UV_ADC_mean_value.
Programul rulează în buclă operațiile de citire a datelor de pe senzori, respectiv afișare pe ecran.
În urma implementării proiectului am obținut exact ce mi-am propus - o stație meteo low-cost care afișează pe LCD datele de la senzori.
Vorbind cu mai mulți amici despre ce poate face proiectul, am aflat că pentru mulți oameni, faptul că altitudinea la care te afli poate fi determinată prin intermediul măsurătorilor de presiune și temperatură este o surpriză, așa că am preferat să înlocuiesc calculul de Real Feel cu cel de altitudine. :D
Deși este un proiect relativ simplu, poate deveni destul de interesant atunci când apar probleme și ești nevoit să înțelegi foarte bine cum se face interfațarea cu perifericele pentru a putea rezolva problema.
Ipoteza mea inițială, conform căreia uC ATmega ar putea fi opțiune validă pentru completarea proiectului inițial, de la care am preluat și idea s-a dovedit adevărată - consumul de energie pe ATmega este mult mai mic, iar interfațarea cu Spark Core (pe care intenționez să o implementez în curând) nu pare a fi una dificilă.
Eu sunt mulțumit (aș spune chiar bucuros) că proiectul funcționează și că am avut ocazia de a-mi clarifica anumite aspecte referitoare la AVR și interfațarea cu periferice prin I2C.
Cu siguranță voi păstra placa de bază și voi mai încerca să implementez și alte proiecte mai simple / mai complicate.