005 - Level Indicator

Welcome back to the RoboRemo tutorial.
In this tutorial I present the level indicator. For the demo I use an Arduino Nano sending its battery voltage level.



// RoboRemo Tutorial 5 - Level Indicator
// www.roboremo.com

// Copyright 2020 roboremo.com
// 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
// The above copyright notice and disclaimer shall be included
// in all copies or substantial portions of the Software.

// Hardware setup:

// BATT+ ---[18k]--.      
//                 |--- A0
// GND -----[4k7]--'      
//                        
// 4.5V * 4.7 / (18 + 4.7) = 0.93V

// Bluetooth   Arduino
// GND ------- GND
// VCC ------- 5V
// TX-O ------ RX0
// RX-I ------ TX1

#define BAUDRATE 115200

void setup() {
  analogReference(INTERNAL); // 1.1V on UNO/NANO
  delay(500);
  Serial.begin(BAUDRATE);
}

void loop() {

  // average sampling to reduce noise:
  int val = 0;
  for(int i=0; i<20; i++) {
    val += analogRead(A0);
    delay(10);
  }
  val = val/20;
  float v = val;
  v /= 1024;
  v *= 1100;
  v /= 4.56; // R1 = 4.56k
  v *= (17.76 + 4.56); // R2 + R1
  int milliVolts = (int)v;
  
  String st = (String)"batt "
            + (milliVolts/1000)
            + "."
            + (milliVolts%1000)
            + "\n";
            
  Serial.print(st);
}