Advertisement
toffanetto_

VSSS_leitura_de_bateria

Nov 9th, 2020 (edited)
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.65 KB | None | 0 0
  1. #include <Arduino.h>
  2.  
  3. // Medidor de Bateria -- Constantes
  4. #define V_BAT 34 // Bateria
  5. #define LED_ONBOARD 2 // Led onboard indicador de bateria fraca
  6. #define AMOS_FILTRO 100 // Quantidade de amostras para o filtro de media do medidor de bateria
  7. #define BAT_MAX_READ 1500 // Leitura da bateria com tensao maxima || VALOR A SER LIDO COM TENSAO A 8.4V
  8. #define BAT_MIN_READ 1000 // Leitura da bateria com tensao minima || VALOR A SER LIDO COM TENSAO A 6V
  9. #define BAT_MIN 6 // Tensao minima
  10. #define BAT_MAX 8.4 // Tensao maxima
  11. #define LOW_BAT 6.4 // Tensao de bateria fraca
  12.  
  13. // Medidor de Bateria -- Variaveis
  14. double tensao_bateria = 0;     // armazena valor de tensao da bateria de BAT_MIN à BAT_MAX V.
  15. int soma_filtro = 0;        // variavel de soma do valor de tensao para o filtro de media
  16. int cont_filtro = 0;        // variavel contadora para o filtro de media
  17.  
  18.  
  19. /************Leitura da tensão da bateria************/
  20. /****************************************************/
  21.  
  22. double remap(int x, int in_min, int in_max, float out_min, float out_max)
  23. {
  24.     return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
  25. }
  26.  
  27.  
  28. bool medeBateria(bool exibir){
  29.     soma_filtro += analogRead(V_BAT);
  30.     cont_filtro++;
  31.  
  32.     if(cont_filtro>=AMOS_FILTRO){
  33.         soma_filtro/=cont_filtro;
  34.         tensao_bateria = remap(soma_filtro, BAT_MIN_READ, BAT_MAX_READ, BAT_MIN, BAT_MAX); // Faz a leitura da porta analogica com resolucao de 12 bits e converte para Volts. || VERIFICAR VALOR MAXIMO DE TENSAO
  35.        
  36.         if(exibir){
  37.             Serial.print("Bateria: ");
  38.             Serial.print(tensao_bateria);
  39.             Serial.print(" V        ||       Read: ");
  40.             Serial.println(soma_filtro);
  41.         }
  42.  
  43.         if(tensao_bateria<LOW_BAT && tensao_bateria!=0){
  44.             digitalWrite(LED_ONBOARD, HIGH);
  45.             return false;
  46.         }
  47.             else{
  48.                 digitalWrite(LED_ONBOARD, LOW);
  49.                 return true;
  50.             }
  51.         soma_filtro=0;
  52.         cont_filtro=0;
  53.     }
  54.     return false;
  55. }
  56.  
  57. /*********************************************************************/
  58. /*********************************************************************/
  59. /*********************************************************************/
  60.  
  61. void setup()
  62. {  
  63.  
  64.     Serial.begin(9600); // Serial de run no terminal do arduino
  65.  
  66.     pinMode(V_BAT, INPUT); // Pino de leitura da tensao da bateria
  67.     pinMode(LED_ONBOARD, OUTPUT); // Pino Led onboard
  68. /*
  69.     if(!medeBateria(false)){     // Impede a inicialização do robo caso a bateria esteja fraca
  70.         setup();
  71.     }
  72. */
  73.  
  74. }
  75.  
  76. void loop()
  77. {
  78.     medeBateria(false);
  79. }
  80.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement