From 0d2cbe50bb939c1a353cbd156c9559719a498ce2 Mon Sep 17 00:00:00 2001 From: Fisch Date: Sun, 15 Apr 2018 12:13:08 +0200 Subject: [PATCH] change ev calculation and calibration to log(analog reading) and add digital timetable and ev calculation bugfix --- calibration/20180413_calibration.ods | Bin 25844 -> 25875 bytes .../20180413_high_log_5coeffs_greater2.png | Bin 0 -> 14962 bytes .../20180413_low_log_4coeffs_less2.7.png | Bin 0 -> 28189 bytes calibration/calibration.py | 32 +++-- lightmeter.ino | 129 ++++++++++++++---- 5 files changed, 126 insertions(+), 35 deletions(-) create mode 100644 calibration/20180413_high_log_5coeffs_greater2.png create mode 100644 calibration/20180413_low_log_4coeffs_less2.7.png diff --git a/calibration/20180413_calibration.ods b/calibration/20180413_calibration.ods index a20c9639f50ba5135d31ded9947619317645161c..5b008366fe1ef0116c2e1742b2e44e194a892e16 100644 GIT binary patch delta 3998 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 UmsZzb7BPCshL_-h diff --git a/calibration/20180413_high_log_5coeffs_greater2.png b/calibration/20180413_high_log_5coeffs_greater2.png new file mode 100644 index 0000000000000000000000000000000000000000..8f31bb87915e2838c8cdaf5b8b77e23342f8c37f GIT binary patch literal 14962 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 L-3!I%uipJ{oiLO) literal 0 HcmV?d00001 diff --git a/calibration/20180413_low_log_4coeffs_less2.7.png b/calibration/20180413_low_log_4coeffs_less2.7.png new file mode 100644 index 0000000000000000000000000000000000000000..e4dca0ba7183c9a5fc5f0350f08cc7061683fc4f GIT binary patch literal 28189 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 literal 0 HcmV?d00001 diff --git a/calibration/calibration.py b/calibration/calibration.py index cc2b06b..85e43e9 100644 --- a/calibration/calibration.py +++ b/calibration/calibration.py @@ -2,10 +2,15 @@ import numpy as np import csv import matplotlib.pyplot as plt +import math xcolumn=0 #column with readings ycolumn=4 #column with calibration data -ncoefs=3 #number of coefficients +ncoefs=4 #number of coefficients + +#mit log +#low (0), coeffs=4,, <2.7, ab <=2.3 benutzbar +#high (1), coeffs=5, >2 ab >=1 knapp benutzbar, ab 2 besser xvalues=[] yvalues=[] @@ -17,9 +22,9 @@ with open('20180413_calibration.csv', 'r') as csvfile: xvalue=row[xcolumn] yvalue=row[ycolumn] if len(xvalue)>0 and len(yvalue)>0 and not firstrow: - xvalue=float(xvalue) + xvalue=math.log(float(xvalue)) yvalue=float(yvalue) - if yvalue<=4: + if yvalue<2.7: #print(""+str(xvalue)+" - "+str(yvalue)) xvalues.append(xvalue) yvalues.append(yvalue) @@ -28,17 +33,26 @@ with open('20180413_calibration.csv', 'r') as csvfile: coefs=np.polyfit(xvalues,yvalues,ncoefs) #fit polynomial curve print(coefs) #coef 0 is the one with highest polynomial - xtest=np.arange(max(xvalues)) #x values for test visualization + xtest=np.arange(max(xvalues),step=0.001) #x values for test visualization ytest=np.polyval(coefs, xtest) #calculate y values with polynomial function #ytest=[coefs[3]+coefs[2]*pow(x,1)+coefs[1]*pow(x,2)+coefs[0]*pow(x,3) for x in xtest] - for i in range(200,4000,10): - yv=np.polyval(coefs, i) - print(str(i)+";"+str(yv)) - exit() + #for i in range(200,4000,10): + # yv=np.polyval(coefs, i) + # print(str(i)+";"+str(yv)) + #exit() - plt.scatter(xvalues,yvalues,s=0.25,c='g') #plot sample data + plt.scatter(xvalues,yvalues,s=0.7,c='g') #plot sample data plt.plot(xtest,ytest,c='r') #plot approximated curve plt.xlabel('LDR Value') plt.ylabel('Ev') + + #plt.xlim(0,4096) #ldr + plt.ylim(-3,20) #ev + + #limits with lux + #plt.xlim(0,4096) #ldr + #plt.xlim(0,500) #ldr + #plt.ylim(0,1280000) #ev + #plt.ylim(0,220) #ev plt.show() diff --git a/lightmeter.ino b/lightmeter.ino index 44606f8..4e97fd8 100644 --- a/lightmeter.ino +++ b/lightmeter.ino @@ -6,7 +6,7 @@ //Letters 5x7 at Size 1 - +#include //#include #include #include @@ -54,8 +54,10 @@ BH1750 lightMeter; //float shuttertimes1[]={1,1.0/2, 1.0/4, 1.0/8, 1.0/15, 1.0/30, 1.0/60, 1.0/125, 1.0/250, 1.0/500, 1.0/1000, 1.0/2000, 1.0/4000, 1.0/8000}; float shuttertimes1[]={64,32,16,8,4,2,1,1.0/2, 1.0/4, 1.0/8, 1.0/15, 1.0/30, 1.0/60, 1.0/125, 1.0/250, 1.0/500, 1.0/1000, 1.0/2000, 1.0/4000, 1.0/8000}; #define SHUTTERTIMES1_MAXINDEX 19 -String settingsnameShutterSelectionMode[]={"Analog"}; //names for tables -#define MAXIMUM_SHUTTERSELECTIONMODES 1 +float shuttertimes2[]={30,25,20,15,13,10,8,6,5,4,3.2,2.5,2,1.6,1.3,1,0.8,0.6,0.5,0.4,0.3,1.0/4,1.0/5,1.0/6,1.0/8,1.0/10,1.0/13,1.0/15,1.0/20,1.0/25,1.0/30,1.0/40,1.0/50,1.0/60,1.0/80,1.0/100,1.0/125,1.0/160,1.0/200,1.0/250,1.0/320,1.0/400,1.0/500,1.0/640,1.0/800,1.0/1000,1.0/1250,1.0/1600,1.0/2000,1.0/2500,1.0/3200,1.0/4000}; +#define SHUTTERTIMES2_MAXINDEX 51 +String settingsnameShutterSelectionMode[]={"Analog","Digital"}; //names for tables +#define MAXIMUM_SHUTTERSELECTIONMODES 2 float aperaturesFull[]={1,1.4, 2, 2.8, 4, 5.6, 8, 11, 16, 22, 32}; #define APERATURESFULL_MAXINDEX 10 @@ -99,7 +101,7 @@ boolean button_hold_left=false; boolean button_hold_center=false; boolean button_hold_right=false; -float vbat=0; +float vbat=100; struct Settings { uint8_t minimumAperatureIndex; //see corresponding aperatures table @@ -233,6 +235,8 @@ void setup() { } + + } @@ -427,7 +431,10 @@ void handleInputs() */ //Voltage - vbat=map(analogRead(PIN_VBAT), 0,3560,0,8200)/1000.0; //180k and 300k voltage divider. 8,4V -> 3,15V=3910 + float _vbat=map(analogRead(PIN_VBAT), 0,3560,0,8200)/1000.0; //180k and 300k voltage divider. 8,4V -> 3,15V=3910 + if (_vbat "); - Serial.print(roundShutter(i,1),6); + Serial.print(roundShutter(i,2),6); Serial.print(" -- "); - Serial.println(reciprocFloat(roundShutter(i,1))); + Serial.println(reciprocFloat(roundShutter(i,2))); + } } + - Serial.println("calculateShutter at iso 100 f8"); - for (int8_t i=-2;i<18;i++){ + Serial.println("calculateShutter at iso 100 f2.8"); + for (float i=-2;i<18;i+=0.25){ Serial.print(i); Serial.print(" -> "); - Serial.println(calculateShutter(i, (uint16_t)100, 8.0),6); + float test_calcshutter=calculateShutter(i, (uint16_t)100, 2.8); + //Serial.println(test_calcshutter,6); + + float test_showShutter=roundShutter(test_calcshutter,2); + Serial.print("rounded Shutter from "); Serial.print(test_calcshutter,6); Serial.print(" to "); Serial.println(test_showShutter,6); //asdf + if (test_showShutter>0.25) //check shuttertime + { //show full seconds + Serial.print("int="); + Serial.print(int(test_showShutter)); + if (test_showShutter-int(test_showShutter)>0){ //has decimals + Serial.print(" ,"); + Serial.print((int)round( (test_showShutter-int(test_showShutter))*10)); //show one decimal + } + Serial.println(""); + }else{ //show fraction of a second + Serial.print("frac= 1/"); + int _frac_showShutter = (int) ( (1.0f/( (int)(test_showShutter*1000000) ) )*1000000 ); + Serial.print( _frac_showShutter ); + Serial.println(""); + } } - Serial.println("calculateAperature at iso 100 1/125s"); - for (int8_t i=-2;i<18;i++){ + Serial.println("calculateAperature at iso 100 1/250s"); + for (float i=-2;i<18;i+=0.25){ Serial.print(i); Serial.print(" -> "); - Serial.println(calculateAperature(i, (uint16_t)100, 1.0/125),6); + Serial.println(calculateAperature(i, (uint16_t)100, 1.0/250),6); } - } - */ + }*/ + switch(displaymode){ @@ -625,6 +653,7 @@ void handleInputs_Lightmeter() void handleInputs_Settings() { if ( button_hold_center ) { //Go to Lightmeter + settings_itemActive=false; //deselect item displaymode=lightmeter; } @@ -733,19 +762,49 @@ float getEV(){ //double lowev=-0.763427709 + 0.0138031137*analog_low + -0.00000576990095*pow(analog_low,2) + 0.000000000871611285*pow(analog_low,3); //calibration 20180413 - double highev=4.76455098 + 0.00961533698*analog_high - 0.00000399325586*pow(analog_high,2) + 0.000000000654378697 *pow(analog_high,3); - double lowev=-38.9534785 + 0.310426970*analog_low - 0.000769939297*pow(analog_low,2) + 0.000000639458491*pow(analog_low,3); + //polynomial only + //double highev=4.76455098 + 0.00961533698*analog_high - 0.00000399325586*pow(analog_high,2) + 0.000000000654378697 *pow(analog_high,3); + //double lowev=-38.9534785 + 0.310426970*analog_low - 0.000769939297*pow(analog_low,2) + 0.000000639458491*pow(analog_low,3); + + + double log_low=log(analog_low); + //[-2.47999992e+02 5.59942657e+03 -4.74076773e+04 1.78389539e+05 -2.51728845e+05] + double lowev=-251728.845 + 178389.539*log_low - 47407.6773*pow(log_low,2) + 5599.42657*pow(log_low,3) - 247.999992*pow(log_low,4); + + double log_high=log(analog_high); + //[7.27310051e-02 -2.02919373e+00 2.23823220e+01 -1.22121768e+02 3.32574527e+02 -3.60445720e+02] + double highev=-360.445720 + 332.574527*log_high - 122.121768*pow(log_high,2) + 22.3823220*pow(log_high,3) - 2.02919373*pow(log_high,4) + 0.0727310051*pow(log_high,5); + + /*Serial.print("analog_low="); //asdf + Serial.print(analog_low); + Serial.print(" log_low="); + Serial.print(log_low); + Serial.print(" lowev="); + Serial.println(lowev); + + Serial.print("analog_high="); + Serial.print(analog_high); + Serial.print(" log_high="); + Serial.print(log_high); + Serial.print(" highev="); + Serial.println(highev);*/ - if (lowev>6){ + if (highev>2){ _ev=highev; - }else if(lowev<4){ + Serial.println("using high ev"); + }else if(lowev<1){ _ev=lowev; + Serial.println("using low ev"); }else{ //mix of both - float mix=min(1.0, max(0.0,(lowev-4)/(6-4))); //0 to 1, 0-> use only lowev, 1-> use only highev + float mix=min(1.0, max(0.0,(lowev-1)/(2-1))); //0 to 1, 0-> use only lowev, 1-> use only highev _ev=lowev*(1-mix)+highev*mix; + Serial.print("mixing mix="); + Serial.println(mix); } + Serial.print("EV="); + Serial.println(_ev); }else if (meteringmode == METERINGMODE_INCIDENT){ //### INCIDENT _ev = luxToEv(incident*INCIDENT_CORRECTION_FACTOR); } @@ -781,7 +840,7 @@ double luxToEv(uint16_t lux){ return log (lux/2.5) / log (2); } -float calculateShutter(float pEv, uint16_t pIso, uint16_t pAperature) //returns calculated Shutter speed given Ev, ISO and Aperature +float calculateShutter(float pEv, uint16_t pIso, float pAperature) //returns calculated Shutter speed given Ev, ISO and Aperature { //EV = log2 ( 100* Aperature^2 / (ISO * Time )) //100* Aperature^2 / (2^EV * ISO) = Time @@ -802,6 +861,9 @@ float roundShutter(float pShutter, uint8_t pMethod) //round shutter to typical v case 1: // return shuttertimes1[_index]; break; + case 2: // + return shuttertimes2[_index]; + break; } } @@ -915,6 +977,9 @@ void changeShutter(int8_t pchange){ //pchange>0 means more light exposure (brigh case 1: _maximumShutterIndex=sizeof(shuttertimes1)/sizeof(float); break; + case 2: + _maximumShutterIndex=sizeof(shuttertimes2)/sizeof(float); + break; } if (!( -pchange<0 && _newShutterIndex==0)){ //changed value would not yield negative index @@ -927,6 +992,9 @@ void changeShutter(int8_t pchange){ //pchange>0 means more light exposure (brigh case 1: // setShutter=shuttertimes1[_newShutterIndex]; break; + case 2: // + setShutter=shuttertimes2[_newShutterIndex]; + break; } } uint8_t findShutterIndex(float pShutter,uint8_t pMethod) //find index of closest aperature from given aperature tables (pMethod @@ -940,6 +1008,9 @@ uint8_t findShutterIndex(float pShutter,uint8_t pMethod) //find index of closest case 1: _maxindexpossible=SHUTTERTIMES1_MAXINDEX; break; + case 2: + _maxindexpossible=SHUTTERTIMES2_MAXINDEX; + break; } @@ -955,6 +1026,9 @@ uint8_t findShutterIndex(float pShutter,uint8_t pMethod) //find index of closest case 1: _minDistance=abs(pShutter - shuttertimes1[_index]); break; + case 2: + _minDistance=abs(pShutter - shuttertimes2[_index]); + break; } _index++; //next } @@ -1081,7 +1155,7 @@ void updateDisplay_Lightmeter() //Lightmeter display display.setCursor(xpos_shutter,ypos_shutter); float _showShutter=roundShutter(showShutter,userSettings.shutterSelectionMode); //Serial.print("rounded Shutter from "); Serial.print(showShutter); Serial.print(" to "); Serial.println(_showShutter); //asdf - if (_showShutter>=1) //check time + if (_showShutter>0.25) //check shuttertime { //show full seconds display.print(int(_showShutter)); if (_showShutter-int(_showShutter)>0){ //has decimals @@ -1118,7 +1192,10 @@ void updateDisplay_Lightmeter() //Lightmeter display //EV Scale - uint8_t _startev=2; //first ev to display, 13 ev values can fit on screen + int8_t _startev=-5; //first ev to display, 13 ev values can fit on screen + if (ev>2){ + _startev=2; + } if (ev>13){ _startev=5+ev-13; } @@ -1134,7 +1211,7 @@ void updateDisplay_Lightmeter() //Lightmeter display display.drawLine(THIRDEVLINEDISTANCE,0,THIRDEVLINEDISTANCE,0,WHITE); //first third line display.drawLine(THIRDEVLINEDISTANCE+THIRDEVLINEDISTANCE,0,THIRDEVLINEDISTANCE+THIRDEVLINEDISTANCE,0,WHITE); //second third line for (uint8_t _fullevline=1;_fullevline<=13;_fullevline++){ - uint8_t _current_evvalue = _fullevline+_startev; + int8_t _current_evvalue = _fullevline+_startev; uint8_t _xpos_center_evtext = _fullevline*FULLEVLINEDISTANCE; //center of current ev line x pos display.drawLine(_xpos_center_evtext,0,_xpos_center_evtext,2,WHITE); display.drawLine(_xpos_center_evtext+THIRDEVLINEDISTANCE,0,_xpos_center_evtext+THIRDEVLINEDISTANCE,0,WHITE); @@ -1182,9 +1259,9 @@ void updateDisplay_Lightmeter() //Lightmeter display //DEBUG Message display.setTextSize(1); display.setCursor(xpos_debug,ypos_debug); - /*display.print(vbat); + display.print(vbat,2); display.print("V "); - display.print("Ev="); + /*display.print("Ev="); display.print(ev); display.print(" |"); display.print(incident);*/