Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2021:apredescu:lightmeter [2021/06/04 14:42]
andrei.clicinschi [Hardware Design]
pm:prj2021:apredescu:lightmeter [2021/06/30 20:31] (current)
andrei.clicinschi
Line 25: Line 25:
 === Piese === === Piese ===
  
-Arduino Uno R3 ATmega328P : **0**\\ +Arduino Uno R3 ATmega328P : **0**\\ 
-Modul intensitate luminoasa (senzor BH1750) : **8**\\ +Modul intensitate luminoasa (senzor BH1750) : **8**\\ 
-Ecran Nokia 5110 84x48 (Philips PCD8544) : **6**\\ +Ecran Nokia 5110 84x48 (Philips PCD8544) : **6**\\ 
-Modul conversie nivel logic 3.3V - 5V bidirectional cu 8 canale : **7**\\ +Modul conversie nivel logic 3.3V - 5V bidirectional cu 8 canale : **7**\\ 
-Butoane simple : **1, 3**\\ +Butoane simple : **1, 3**\\ 
-Slider switch : **2**\\ +Slider switch : **2**\\ 
-Senzor capacitiv TTP223 : **4**\\ +Senzor capacitiv TTP223 : **4**\\ 
-Modul encoder rotativ KY-040 : **5**\\ +Modul encoder rotativ KY-040 : **5**\\ 
-Fire de legatura si breadboard+Fire de legatura si breadboard\\
  
 === Schema electrica === === Schema electrica ===
Line 44: Line 44:
  
 **1** : Set ISO button\\ **1** : Set ISO button\\
-- la prima apasare se activeaza modul de setare ISO +- la prima apasare se activeaza modul de setare ISO\\ 
-- la a doua apasare se seteaza ISO-ul+- la a doua apasare se seteaza ISO-ul\\
  
 **2** : Activate ND switch\\ **2** : Activate ND switch\\
-- in pozitia OFF exponometrul ignora campul ND +- in pozitia OFF exponometrul ignora campul ND\\ 
-- in pozitia ON exponometrul tine cont de campul ND si nu propune setari pana nu este introdusa valoarea+- in pozitia ON exponometrul tine cont de campul ND si nu propune setari pana nu este introdusa valoarea\\
  
 **3** : Set ND button\\ **3** : Set ND button\\
 - daca **2** este OFF, este ignorat\\ - daca **2** este OFF, este ignorat\\
 - daca **2** este ON:\\ - daca **2** este ON:\\
-    ​la prima apasare se activeaza modul de setare ND\\ +    ​la prima apasare se activeaza modul de setare ND\\ 
-    ​la a doua apasare se fixeaza valoarea filtrului ND\\+    ​la a doua apasare se fixeaza valoarea filtrului ND\\
  
 **4** : Measure button\\ **4** : Measure button\\
-- la apasare ​exponometrul masoara si afiseaza EV sau fluxul luminos+- la atingere ​exponometrul masoara si afiseaza EV sau fluxul luminos\\
  
 **5** : Rotary encoder\\ **5** : Rotary encoder\\
 +- Rotire\\ 
 +    * in modul de setare ISO, cicleaza printre valorile din vectorul ISO values\\ 
 +    * in modul de setare ND, cicleaza printre valorile din vectorul ND values\\ 
 +    * daca exista setari afisate, cicleaza printre combinatiile valide de setari corespunzatoare EV-ului masurat\\ 
 +- Apasare\\ 
 +    * comuta afisarea intre EV si fluxul luminos masurat in lux\\
 ===== Software Design ===== ===== Software Design =====
  
Line 78: Line 83:
 - dreapta jos -> valoarea shutter speed-ului, calculata de arduino\\ - dreapta jos -> valoarea shutter speed-ului, calculata de arduino\\
  
-La inceputul programului sunt definite denumiri sugestive pentru utilizarile pinilor, apoi alias-uri pentru starile logice ale butoanelor si switch-ului. Urmeaza apoi variabile care retin starile elementelor hardware de input. Aceste stari (sau tranzitiile lor) determina schimbarea unor variabile de stare asociate exponometrului,​ nu sunt folosite direct in determinarea comportamentului aparatului. De exemplu, butonul 1, folosit pentru introducerea ISO-ului, are asociat pinul digital definit prin "#​define SET_ISO_BUTTON 2", starea "int SET_ISO_BUTTON_state",​ iar la tranzitia BUTTON_NOT_PRESSED to BUTTON_PRESSED,​ se face toggle la variabila de stare "bool input_ISO"​. Aceasta variabila de stare este false daca ISO-ul a fost deja selectat (sau inca nu a fost inceputa selectia) si true daca exponometrul asteapta ca utilizatorul sa introduca ISO-ul prin encoderul rotativ, afectand comportamentul programului. In mod similar am procedat si cu celelalte butoane hardware, care controleaza variabilele hardware, care la randul lor controleaza variabilele de stare ale exponometrului.+La inceputul programului sunt definite denumiri sugestive pentru utilizarile pinilor, apoi alias-uri pentru starile logice ale butoanelor si switch-ului. Urmeaza apoi variabile care retin starile elementelor hardware de input. Aceste stari (sau tranzitiile lor) determina schimbarea unor variabile de stare asociate exponometrului,​ nu sunt folosite direct in determinarea comportamentului aparatului. De exemplu, butonul 1, folosit pentru introducerea ISO-ului, are asociat pinul digital definit prin "#​define SET_ISO_BUTTON 2", starea "int SET_ISO_BUTTON_state",​ iar la tranzitia BUTTON_NOT_PRESSED to BUTTON_PRESSED,​ se face toggle la variabila de stare "bool input_ISO"​. Aceasta variabila de stare este "false" ​daca ISO-ul a fost deja selectat (sau inca nu a fost inceputa selectia) si "true" ​daca exponometrul asteapta ca utilizatorul sa introduca ISO-ul prin encoderul rotativ, afectand comportamentul programului. Pentru a detecta tranzitiile am folosit variabila "int SET_ISO_BUTTON_state_tmp"​. In mod similar am procedat si cu celelalte butoane hardware, care controleaza variabilele hardware, care la randul lor controleaza variabilele de stare ale exponometrului.
  
 Valorile pentru cele 4 variabile (ISO, ND filter, apertura, shutter speed) sunt memorate in niste vectori, programul avand memorat un index al valorii care trebuie afisata (sau -1 daca trebuie afisat '​-'​). O modificare a unuia dintre indecsi cu 1 corespunde unui stop de lumina, calculul setarilor fiind foarte usor. Se pleaca de la valoarea cunoscuta EV_100 = 0 (ISO = 100), pentru care apertura = F1 si shutter_speed = 1s, se scrie ecuatia liniara care modeleaza setarile, apoi se incearca pe rand indecsii din vectorul de aperturi si se calculeaza indexul de shutter speed corespunzator. Daca nu se gaseste nicio combinatie valida de indecsi, se afiseaza '​-'​ la ambele setari, altfel se afiseaza prima pereche gasita, corespondenta celei mai mari aperturi posibile si celui mai scurt timp de expunere corespunzator acelei aperturi. Valorile pentru cele 4 variabile (ISO, ND filter, apertura, shutter speed) sunt memorate in niste vectori, programul avand memorat un index al valorii care trebuie afisata (sau -1 daca trebuie afisat '​-'​). O modificare a unuia dintre indecsi cu 1 corespunde unui stop de lumina, calculul setarilor fiind foarte usor. Se pleaca de la valoarea cunoscuta EV_100 = 0 (ISO = 100), pentru care apertura = F1 si shutter_speed = 1s, se scrie ecuatia liniara care modeleaza setarile, apoi se incearca pe rand indecsii din vectorul de aperturi si se calculeaza indexul de shutter speed corespunzator. Daca nu se gaseste nicio combinatie valida de indecsi, se afiseaza '​-'​ la ambele setari, altfel se afiseaza prima pereche gasita, corespondenta celei mai mari aperturi posibile si celui mai scurt timp de expunere corespunzator acelei aperturi.
  
 Afisarea se face prima data in interiorul functiei setup(), apoi in loop() de fiecare data cand a fost detectat un input de la utilizator (pentru a optimiza putin consumul de resurse). Starile butoanelor sunt verificate secvential in functia loop(), aplicatia nefiind una de mare viteza nu am avut probleme cu viteza de refresh si nici nu a fost nevoie sa fac debouncing. Pentru modularizarea codului am impartit functia de afisare in partea constanta (layout-ul ecranului) si valorile parametrilor,​ in functie de indecsi. Afisarea se face prima data in interiorul functiei setup(), apoi in loop() de fiecare data cand a fost detectat un input de la utilizator (pentru a optimiza putin consumul de resurse). Starile butoanelor sunt verificate secvential in functia loop(), aplicatia nefiind una de mare viteza nu am avut probleme cu viteza de refresh si nici nu a fost nevoie sa fac debouncing. Pentru modularizarea codului am impartit functia de afisare in partea constanta (layout-ul ecranului) si valorile parametrilor,​ in functie de indecsi.
- 
-===== Demo ===== 
- 
-Demo-ul este disponibil pe [[https://​drive.google.com/​file/​d/​1I_gKK-2_kiL8-OvdUHfeHUZdSnjTsDNg/​view?​usp=sharing | Google Drive]] 
  
 ===== Poze ===== ===== Poze =====
pm/prj2021/apredescu/lightmeter.1622806957.txt.gz · Last modified: 2021/06/04 14:42 by andrei.clicinschi
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