kopia lustrzana https://github.com/Aircoookie/WLED
				
				
				
			added voltage multiplier to gui and set defaults
							rodzic
							
								
									8b61b9ebfe
								
							
						
					
					
						commit
						ec08432f92
					
				|  | @ -26,6 +26,15 @@ | |||
|   #endif | ||||
| #endif | ||||
| 
 | ||||
| //the default ratio for the voltage divider
 | ||||
| #ifndef USERMOD_BATTERY_VOLTAGE_MULTIPLIER | ||||
|   #ifdef ARDUINO_ARCH_ESP32 | ||||
|     #define USERMOD_BATTERY_VOLTAGE_MULTIPLIER 2.0f | ||||
|   #else //ESP8266 boards
 | ||||
|     #define USERMOD_BATTERY_VOLTAGE_MULTIPLIER 4.2f | ||||
|   #endif | ||||
| #endif | ||||
| 
 | ||||
| #ifndef USERMOD_BATTERY_MAX_VOLTAGE | ||||
|   #define USERMOD_BATTERY_MAX_VOLTAGE 4.2f | ||||
| #endif | ||||
|  |  | |||
|  | @ -31,8 +31,8 @@ class UsermodBattery : public Usermod | |||
|     float voltage = maxBatteryVoltage; | ||||
|     // between 0 and 1, to control strength of voltage smoothing filter
 | ||||
|     float alpha = 0.05f; | ||||
|     // multiplyer for the voltage divider that is in place between ADC pin and battery, default will be 2 but might be adapted to readout voltages over ~5v ESP32 or ~6.6v ESP8266
 | ||||
|     float voltageMultiplyer = 2.0f; | ||||
|     // multiplier for the voltage divider that is in place between ADC pin and battery, default will be 2 but might be adapted to readout voltages over ~5v ESP32 or ~6.6v ESP8266
 | ||||
|     float voltageMultiplier = USERMOD_BATTERY_VOLTAGE_MULTIPLIER; | ||||
|     // mapped battery level based on voltage
 | ||||
|     int8_t batteryLevel = 100; | ||||
|     // offset or calibration value to fine tune the calculated voltage
 | ||||
|  | @ -130,8 +130,8 @@ class UsermodBattery : public Usermod | |||
|           if (pinManager.allocatePin(batteryPin, false, PinOwner::UM_Battery)) { | ||||
|             DEBUG_PRINTLN(F("Battery pin allocation succeeded.")); | ||||
|             success = true; | ||||
|             //use calibrated millivolts analogread on esp32 (150 mV ~ 2450 mV default) and divide by 1000 to get from milivolts to volts and multiply by voltage divider and apply calibration value
 | ||||
|             voltage = (analogReadMilliVolts(batteryPin) / 1000.0f) * voltageMultiplyer  + calibration; | ||||
|             //use calibrated millivolts analogread on esp32 (150 mV ~ 2450 mV default) and divide by 1000 to get from milivolts to volts and multiply by voltage divider ratio and apply calibration value
 | ||||
|             voltage = (analogReadMilliVolts(batteryPin) / 1000.0f) * voltageMultiplier  + calibration; | ||||
|           } | ||||
| 
 | ||||
|         if (!success) { | ||||
|  | @ -142,8 +142,8 @@ class UsermodBattery : public Usermod | |||
|         } | ||||
|       #else //ESP8266 boards have only one analog input pin A0
 | ||||
|         pinMode(batteryPin, INPUT); | ||||
|         //use analog read on esp8266 ( 150 mV ~ 3000mV no attenuation options) and divide by ADC precision 1023 and multiply by 3v ADC max voltage and apply calibration value
 | ||||
|         voltage = (analogRead(batteryPin) / 1023.0f) * 3.3f * voltageMultiplyer + calibration; | ||||
|         //use analog read on esp8266 ( 150 mV ~ 3000mV no attenuation options) and divide by ADC precision 1023 and multiply by voltage divider ratio and apply calibration value
 | ||||
|         voltage = (analogRead(batteryPin) / 1023.0f) * voltageMultiplier + calibration; | ||||
|       #endif | ||||
| 
 | ||||
|       nextReadTime = millis() + readingInterval; | ||||
|  | @ -185,12 +185,12 @@ class UsermodBattery : public Usermod | |||
| 
 | ||||
| #ifdef ARDUINO_ARCH_ESP32 | ||||
|       // use calibrated millivolts analogread on esp32 (150 mV ~ 2450 mV default) and divide by 1000 to get from milivolts to volts and multiply by voltage divider and apply calibration value
 | ||||
|       rawValue = (analogReadMilliVolts(batteryPin) / 1000.0f) * voltageMultiplyer + calibration; | ||||
|       rawValue = (analogReadMilliVolts(batteryPin) / 1000.0f) * voltageMultiplier + calibration; | ||||
|       // filter with exponential smoothing because ADC in esp32 is fluctuating too much for a good single readout
 | ||||
|       voltage = voltage + alpha * (rawValue - voltage); | ||||
| #else | ||||
|       // use analog read on esp8266 ( 150 mV ~ 3000mV no attenuation options) and divide by ADC precision 1023 and multiply by 3v ADC max voltage and apply calibration value
 | ||||
|       rawValue = (analogRead(batteryPin) / 1023.0f) * 3.0f * voltageMultiplyer + calibration; | ||||
|       rawValue = (analogRead(batteryPin) / 1023.0f) * voltageMultiplier + calibration; | ||||
|       // filter with exponential smoothing 
 | ||||
|       voltage = voltage + alpha * (rawValue - voltage); | ||||
| #endif | ||||
|  | @ -367,6 +367,7 @@ class UsermodBattery : public Usermod | |||
|       battery[F("max-voltage")] = maxBatteryVoltage; | ||||
|       battery[F("capacity")] = totalBatteryCapacity; | ||||
|       battery[F("calibration")] = calibration; | ||||
|       battery[F("voltage-multiplier")] = voltageMultiplier; | ||||
|       battery[FPSTR(_readInterval)] = readingInterval; | ||||
|        | ||||
|       JsonObject ao = battery.createNestedObject(F("auto-off"));               // auto off section
 | ||||
|  | @ -443,6 +444,7 @@ class UsermodBattery : public Usermod | |||
|       setMaxBatteryVoltage(battery[F("max-voltage")] | maxBatteryVoltage); | ||||
|       setTotalBatteryCapacity(battery[F("capacity")] | totalBatteryCapacity); | ||||
|       setCalibration(battery[F("calibration")] | calibration); | ||||
|       setVoltageMultiplier(battery[F("voltage-multiplier")] | voltageMultiplier); | ||||
|       setReadingInterval(battery[FPSTR(_readInterval)] | readingInterval); | ||||
| 
 | ||||
|       JsonObject ao = battery[F("auto-off")]; | ||||
|  | @ -637,6 +639,23 @@ class UsermodBattery : public Usermod | |||
|       calibration = offset; | ||||
|     } | ||||
| 
 | ||||
|     /*
 | ||||
|      * Set the voltage multiplier value | ||||
|      * A multiplier that may need adjusting for different voltage divider setups | ||||
|      */ | ||||
|     void setVoltageMultiplier(float multiplier) | ||||
|     { | ||||
|       voltageMultiplier = multiplier; | ||||
|     } | ||||
| 
 | ||||
|     /*
 | ||||
|      * Get the voltage multiplier value | ||||
|      * A multiplier that may need adjusting for different voltage divider setups | ||||
|      */ | ||||
|     float getVoltageMultiplier() | ||||
|     { | ||||
|       return voltageMultiplier; | ||||
|     } | ||||
| 
 | ||||
|     /*
 | ||||
|      * Get auto-off feature enabled status | ||||
|  |  | |||
		Ładowanie…
	
		Reference in New Issue
	
	 Erwin Repolust
						Erwin Repolust