Measuring DC Volts with Android Phone - Voltmeter
Measuring DC Volts with Android Phone - Voltmeter
Measuring DC Volts with Android Phone - Voltmeter

Measuring DC Volts with Android Phone - Voltmeter

In this application, we will examine how to measure volt information and send it to Android phone via bluetooth module.


The resistors R1 and R2 seen in the circuit diagram divide the voltage to be measured. A lower voltage is generated on R2. The zener diode connected in parallel to the R2 resistor provides overvoltage protection. For example, if 100 volts is applied to the measuring input, the voltage across R2 will exceed 20 volts. In this case, without the zener diode, this voltage would damage the microcontroller system. The 20 volt voltage is kept at 5 volts with the help of a 5.1 volt zener and a protection resistor.

You can watch our Youtube video about the application.


Below are the Flutter-Dart codes in the project:

import 'dart:async';
import 'dart:convert';
//import 'dart:convert';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bluetooth_serial/flutter_bluetooth_serial.dart';

void main() => runApp(const MyApp());

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  // ignore: library_private_types_in_public_api
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  List<BluetoothDevice> _devices = [];
  late BluetoothConnection connection;
  String adr = "00:21:07:00:50:69"; // my bluetooth device MAC Adres
  String recData = "0 Volt";

  late Timer _timer;
  String _timeString = "";

  @override
  void initState() {
    // _startTimer();  automatic
    super.initState();
    _loadDevices();
  }


  Future<void> _loadDevices() async {
    List<BluetoothDevice> devices = await FlutterBluetoothSerial.instance
        .getBondedDevices();

    setState(() {
      _devices = devices;
    });
  }


  //----------------------------
  Future<void> sendData(String data) async {
    data = data.trim();
    try {
      List<int> list = data.codeUnits;
      Uint8List bytes = Uint8List.fromList(list);
      connection.output.add(bytes);
      await connection.output.allSent;
      if (kDebugMode) {
        // print('Data sent successfully');
      }
    } catch (e) {
      //print(e.toString());
    }
  }

  // data RECEIVED --------------

  Future<void> receiveData() async {
    connection.input!.listen((Uint8List data) {
      //Data entry point
      setState(() {
        recData=ascii.decode(data);
        //var n1 = int.parse('-42');
      });
    });
  }
  //--------------------------------------

// TIMER START-----------
  void _startTimer() {
    _timer = Timer.periodic(Duration(milliseconds: 500), (timer) {
      receiveData();

    });
  }

  // TIMER STOP--------------------------------------
  Future<void> _stopTimer() async {
    setState(() {
    });
    _timer.cancel();
  }

//---------------------------------------------
  @override
  void dispose() {
    _timer.cancel();
    super.dispose();
  }


  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
          appBar: AppBar(
            title: const Text("----VOLTMETER with BlueTooth-----"),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                const Text("MAC Adress: 00:21:07:00:50:69"),

                ElevatedButton(child: Text("Connect"), onPressed: () {
                  connect(adr);
                },),

                const SizedBox(height: 30.0,),

                const Text("VOLTMeter: ",style: TextStyle(fontSize: 55.0),),
                Text(recData,style: TextStyle(fontSize: 60.0),),

                const SizedBox(height: 10.0,),
                // Text(_timeString),
                const SizedBox(height: 10.0,),

                ElevatedButton(child: Text("Stop timer"), onPressed: () {
                  _stopTimer();
                },),
                const SizedBox(height: 10.0,),

                ElevatedButton(child: Text("Start timer"), onPressed: () {
                  _startTimer();
                },),

              ],
            ),
          ),

        )

    );
  }

  Future connect(String address) async {
    try {
      connection = await BluetoothConnection.toAddress(address);
      // sendData('111');
      //durum="Connected to the device";

    } catch (exception) {
      // durum="Cannot connect, exception occured";
    }
  }

  @override
  void debugFillProperties(DiagnosticPropertiesBuilder properties) {
    super.debugFillProperties(properties);
  }

// --------------**************data gonder
//Future send(Uint8List data) async {
//connection.output.add(data);
// await connection.output.allSent;
// }

}
//------------*********** data gonder end

 

Below are the microcontroller codes used in the project:

#include <SoftwareSerial.h>

 

SoftwareSerial mySerial(10, 11); // RX, TX

 

char Buf[50]; //  to bluetooth device<------

String volt_string="0 Volt";

 

void setup() { 

 // hc-05 bluetooth module volt meter-----------------------------

 

  // Open serial communications and wait for port to open:

  Serial.begin(9600);

  mySerial.begin(9600);

 }

 

void loop() {

    float volt_in = analogRead(A0);// Vin INPUT

    float  deg=(volt_in/1023)*60; // for max. 55 volt

     

     volt_string=String(deg);

     volt_string= volt_string+" Volt";

     volt_string.toCharArray(Buf, 50);

     mySerial.write(Buf);

     delay(200);

 

}