User Tools

Site Tools


amc2022:grouph:link

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
amc2022:grouph:link [2022/09/09 22:42] gustavo001amc2022:grouph:link [2023/01/05 14:38] (current) – external edit 127.0.0.1
Line 1: Line 1:
 ===== Build ====== ===== Build ======
 {{ :amc2022:grouph:voltage_divider.jpeg?nolink&400 |}} {{ :amc2022:grouph:voltage_divider.jpeg?nolink&400 |}}
 +| //**figure 5.1**// Setup showing the connections for battery voltage reading on ESP32 | 
  
 ===== Schematics ===== ===== Schematics =====
  
 {{ :amc2022:grouph:batt_schematics.png?nolink&400 |}} {{ :amc2022:grouph:batt_schematics.png?nolink&400 |}}
 +| //**figure 5.2**// Schematic for battery voltage reading | 
  
 ===== Code & Description ====== ===== Code & Description ======
Line 10: Line 12:
 <code c++> <code c++>
  
-*//Reading of voltage +*//Reading of voltage is done by the Analog Pin reader. 
 +*//Because the max input voltage on the pins is 3.3 V we cant directly read the 9V battery voltage.
  
- int potPin = A0;      // Analog pin has to be ADC 1, because ADC 2 are used by wifi and wont work + int potPin = A0;         // Analog pin has to be ADC 1, because ADC 2 are used by wifi and wont work 
-int potValue;             // do not change+int potValue;            
 float voltage =0;         // float because its a decimal number not integer float voltage =0;         // float because its a decimal number not integer
 float battery_percent; float battery_percent;
Line 25: Line 28:
      
   potValue = analogRead(potPin);   potValue = analogRead(potPin);
-  float voltage = (3.3/4095.0) * potValue * 2.73;        //2.73 or 3 actual ratio is the calibration +  float voltage = (3.3/4095.0) * potValue * 2.73;        
      
      
 +  *//Resistors and other components can have a varying number of outputs, although they are usually minimal
 +  *//additional calibration has to be done in order to get accurate readings
 +  *//We have found that the use of a multimeter will help in determining the values that will provide best outcomes
 +  *//Because we have different boards, resistors and setups, the final code could have alterations in the calibrating numbers
      
-  Serial.print("potValue:");                //NOT NEEDED FOR FINAL CODE +  Serial.print("potValue:");                 
-  Serial.print(potValue);                   //NOT NEEDED +  Serial.print(potValue);                   
  
  
 +*//While the serial monitor output can be changed, we are more interested is in the overall result which is transmitted 
 +*//to Grafana for easy access
  
      
Line 39: Line 47:
   Serial.print(voltage);   Serial.print(voltage);
   Serial.println("V");     Serial.println("V");  
 +
  
  
Line 52: Line 61:
   }   }
  
 +*//For the conversion between the actual Analog reading to a percentage we use a mapFloat function 
 +*//It uses the input range from the analog sensor to produce another set of useful values 
 +*//float values will allows to get decimal numbers and a more accurate reading  
 +*//We use a the min voltage value, then max voltage value, and min percentage and max percentage 
 +*//Then we ask the program to give us the corresponding percentage value within the parameters
  
      
Line 62: Line 75:
  
                
-  if (voltage > 7.0 && voltage < 8.2) // THIS VALUES HAVE TO CHANGE ACCRODING TO SOURCE+  if (voltage > 7.0 && voltage < 8.2)            // THIS VALUES HAVE TO CHANGE ACCOrDING TO SOURCE
   {Serial.print("Low bat");                      // USE VOLTMETER TO FIND THE ACCURATE VOLTAGE   {Serial.print("Low bat");                      // USE VOLTMETER TO FIND THE ACCURATE VOLTAGE
   }   }
-  if (voltage <6.5)                //cut-off value is at 6V according to specification , we use 6.5V+  if (voltage <6.5)                              //cut-off value is at 5.4V according to specification , we use 6V
   {Serial.print("Replace Battery");   {Serial.print("Replace Battery");
   }   }
Line 71: Line 84:
  
    
 +*//We have included a notification that will tell us what is going on with the voltage and overall battery status
 +*//We include a parameter that will produce 2 warning signs: 
 +*// LOW BAT means that our battery is within 7 to 8.2V
 +*// REPLACE BATTERY means voltage has dropped below 6.5V, number obtained from data sheet
 +
 } }
 } }
Line 78: Line 96:
   return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;   return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
 } }
 +
 +*//here we include the parameters and equation that will serve as the backbone for the mapFloat function above.
 +
  
 void loop() void loop()
Line 85: Line 106:
  
  
-                                     // NO LOOP NEEDED,,, ONE VALUE WITH WARNING SHOULD BE DISPLAYED ON GRAFANA+*// NO LOOP NEEDED,,, ONE VALUE WITH WARNING SHOULD BE DISPLAYED ON GRAFANA
      
  
 </code> </code>
 +
 +
 +
 +===== Issues & Characteristics ======
 +
 +The actual voltage will not be 100% accurate because the ADC pins have a non-linear behavior. This means according to the Figure # down below that, above a certain threshold the reading will produce equal inputs, thus we consider that from 3 to 3.3V the battery is at a 100% charge. 
 +
 +Additionally we can see that the discharge behavior of the battery we are using, which is a model 6F22 is a curve that has a specific equation, we could find the curve's equation and use it to better represent the discharge values, however since we plan to upgrade our battery system we purposely used a simpler version in our code to achieve good enough results.  
 +
 +^ {{ :amc2022:grouph:9v_battery_.png?400&nolink }}  ^ {{ :amc2022:grouph:adc_behaviour.png?nolink&600 |}}  ^
 +|  //**figure 5.3**// Graph depicting battery discharge for battery model 6F22 9v Source:https://www.mega-piles.com/im/PANASONIC-6F22-9V-CARBONE-ZINC_550.pdf                                                 | //**figure 5.4**// Graph depicting ADC voltage VS reading behavior for ESP32 micro controller. Source:https://microcontrollerslab.com/adc-esp32-measuring-voltage-example/                                                     |
 +
 +
 +
  
  
amc2022/grouph/link.1662756123.txt.gz · Last modified: 2023/01/05 14:38 (external edit)