Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Ratios between voltage dividers
- // R# = (R1+R2)/R2
- float R1 = 3.128;
- float R2 = 6.255;
- float R3 = 9.383;
- float R4 = 12.511;
- float R5 = 15.638;
- float R6 = 18.766;
- float R7 = 21.894;
- float R8 = 25.021;
- // % Variables
- int P8 = 0;
- int P7 = 0;
- int P6 = 0;
- int P5 = 0;
- int P4 = 0;
- int P3 = 0;
- int P2 = 0;
- int P1 = 0;
- long readVcc() {
- // Read 1.1V reference against AVcc
- // set the reference to Vcc and the measurement to the internal 1.1V reference
- #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
- ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
- #elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
- ADMUX = _BV(MUX5) | _BV(MUX0) ;
- #else
- ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
- #endif
- delay(2); // Wait for Vref to settle
- ADCSRA |= _BV(ADSC); // Start conversion
- while (bit_is_set(ADCSRA, ADSC)); // measuring
- uint8_t low = ADCL; // must read ADCL first - it then locks ADCH
- uint8_t high = ADCH; // unlocks both
- long result = (high << 8) | low;
- result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000
- return result; // Vcc in millivolts
- }
- void setup() {
- // initialize serial port
- Serial.begin(9600);
- }
- void loop() {
- //Battery Voltage
- float B1Voltage = 0;
- float B2Voltage = 0;
- float B3Voltage = 0;
- float B4Voltage = 0;
- float B5Voltage = 0;
- float B6Voltage = 0;
- float B7Voltage = 0;
- float B8Voltage = 0;
- //converted signal in 5v domain
- float RealBat1V = 0;
- float RealBat2V = 0;
- float RealBat3V = 0;
- float RealBat4V = 0;
- float RealBat5V = 0;
- float RealBat6V = 0;
- float RealBat7V = 0;
- float RealBat8V = 0;
- //Analog channel raw value
- float VolBat1 = 0;
- float VolBat2 = 0;
- float VolBat3 = 0;
- float VolBat4 = 0;
- float VolBat5 = 0;
- float VolBat6 = 0;
- float VolBat7 = 0;
- float VolBat8 = 0;
- float vccValue = readVcc() / 1000.0; //Arduino refence voltage
- // Reading battery voltages
- VolBat8 = analogRead(A8);
- VolBat7 = analogRead(A7);
- VolBat6 = analogRead(A6);
- VolBat5 = analogRead(A5);
- VolBat4 = analogRead(A4);
- VolBat3 = analogRead(A3);
- VolBat2 = analogRead(A2);
- VolBat1 = analogRead(A1);
- //Converting raw value in 5v domian
- RealBat1V = VolBat1 * vccValue / 1024.0;
- RealBat2V = VolBat2 * vccValue / 1024.0;
- RealBat3V = VolBat3 * vccValue / 1024.0;
- RealBat4V = VolBat4 * vccValue / 1024.0;
- RealBat5V = VolBat5 * vccValue / 1024.0;
- RealBat6V = VolBat6 * vccValue / 1024.0;
- RealBat7V = VolBat7 * vccValue / 1024.0;
- RealBat8V = VolBat8 * vccValue / 1024.0;
- //Calculating actual voltages
- B8Voltage = RealBat4V * R8;
- B7Voltage = RealBat3V * R7 - B8Voltage;
- B6Voltage = RealBat2V * R6 - B8Voltage - B7Voltage;
- B5Voltage = RealBat1V * R5 - B8Voltage - B7Voltage - B6Voltage;
- B4Voltage = RealBat4V * R4 - B8Voltage - B7Voltage - B6Voltage - B5Voltage;
- B3Voltage = RealBat3V * R3 - B8Voltage - B7Voltage - B6Voltage - B5Voltage - B4Voltage;
- B2Voltage = RealBat2V * R2 - B8Voltage - B7Voltage - B6Voltage - B5Voltage - B4Voltage - B3Voltage;
- B1Voltage = RealBat1V * R1 - B8Voltage - B7Voltage - B6Voltage - B5Voltage - B4Voltage - B3Voltage - B2Voltage;
- //Convert to %
- // map(value, fromLow, fromHigh, toLow, toHigh)
- P8 = map(B8Voltage, 0, 12, 0, 100);
- P7 = map(B7Voltage, 0, 12, 0, 100);
- P6 = map(B6Voltage, 0, 12, 0, 100);
- P5 = map(B5Voltage, 0, 12, 0, 100);
- P4 = map(B4Voltage, 0, 12, 0, 100);
- P3 = map(B3Voltage, 0, 12, 0, 100);
- P2 = map(B2Voltage, 0, 12, 0, 100);
- P1 = map(B1Voltage, 0, 12, 0, 100);
- //Print voltages on serial monitor
- Serial.print("Battery-1 Voltage=");
- Serial.println(B1Voltage);
- Serial.print("Battery-2 Voltage=");
- Serial.println(B2Voltage);
- Serial.print("Battery-3 Voltage=");
- Serial.println(B3Voltage);
- Serial.print("Battery-4 Voltage=");
- Serial.println(B4Voltage);
- Serial.print("Battery-5 Voltage=");
- Serial.println(B5Voltage);
- Serial.print("Battery-6 Voltage=");
- Serial.println(B6Voltage);
- Serial.print("Battery-7 Voltage=");
- Serial.println(B7Voltage);
- Serial.print("Battery-8 Voltage=");
- Serial.println(B8Voltage);
- delay(2000); //2 Seconds delay and then start again
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement