Elevatie Meter

/*

Elevatie meting antenne mast.
Antenne mast verticaal = 0,0 graden,antenne mast voorwaarts maximaal = -90,0 graden en antenne mast achterwaarts maximaal = 90,0 graden..
Kalibratie nul punt met de variabele calibratie. ( begin waarde 70 )
Kalibratie 90 graden punt met de deelfactor in de regel met het kommentaar: correctie van de meetwaaarde ( begin waarde 180 )
De snelheid van de I2C bus verbinding is hier niet in te stellen!!
Weergave batterij spanning bij opstart gedurende 4 seconden.

16-4-2018 Werkende versie met display en calibratie
17-4-2018 Average berekening aangepast
21-4-2018 Graden teken samen gesteld..Programma delay naar 175 / Minimale batterij spanning kontrole.
26-4-2018 Versie melding bij opstart scherm.
27-8-2018 VVH versie: display 16.2 Minimaal spanning 4,60 volt

——– Hardware connections ——————-
LCD: DB7 pin 14 ==> Arduino D7
DB6 pin 13 ==> Arduino D8
DB5 pin 12 ==> Arduino D9
DB4 pin 11 ==> Arduino D10
E pin 6 ==> Arduino D11
RS pin 4 ==> Arduino D12

MPU 6050M connections:
SDA ==> A4
SCL ==> A5
INT ==> D2

*/

#include <LiquidCrystal.h> // include the library code:
#include<Wire.h>
const int MPU6050_addr=0x68;

int16_t AccX,AccY,AccZ,Temp,GyroX,GyroY,GyroZ;
int16_t Calibratie = 70; // Calibratie waarde (PE1MMP waarde = 70) (PA0VVH waarde = )

int PinWaardeVolt = A1; // Batterij spanning
int AkWaardeVolt = 0;
int Volt = 0 ;
int VoltUnits = 0;
int VoltDec = 0;

float Elevatie ;
float ElevAverage1 = 0; // Elevatie average 1
float ElevAverage2 = 0; // Elevatie average 2
float ElevAverage3 = 0; // Elevatie average 3
float ElevAverage4 = 0; // Elevatie average 4
float ElevAverage5 = 0; // Elevatie average 5
float ElevAverage6 = 0; // Elevatie average 6
float ElevAverage7 = 0; // Elevatie average 7
float ElevAverage8 = 0; // Elevatie average 8
float ElevAverage9 = 0; // Elevatie average 9
float ElevAverage10 = 0; // Elevatie average 10
float ElevOut = 0; // Elevatie average output

// Graden celsius teken samenstellen
byte Graden[8] =
{
B00111,
B00101,
B00111,
B00000,
B00000,
B00000,
B00000,
};

// Batterij teken samenstellen
byte Batterij[8] =
{
B01111,
B01001,
B01001,
B01001,
B01011,
B01111,
B00110,
};

// LiquidCrystal lcd(RS, E, D4, D5, D6, D7);
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);// initialize the library with the numbers of the interface pins

void setup(){
lcd.createChar(0,Graden);
lcd.createChar(1,Batterij);

Wire.begin();
Wire.beginTransmission(MPU6050_addr);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);
Serial.begin(9600);

lcd.begin(16,2); // set up the LCD’s number of columns and rows
DisplayVolt(); // Weergave batterij spanning bij opstart
lcd.setCursor (0,1); // positie 1 op Regel 2
lcd.print (“V 270818” );
delay(4000);

}

void loop(){
Wire.beginTransmission(MPU6050_addr);
Wire.write(0x3B);
Wire.endTransmission(false);
Wire.requestFrom(MPU6050_addr,14,true);
AccX=Wire.read()<<8|Wire.read();
AccY=Wire.read()<<8|Wire.read();
AccZ=Wire.read()<<8|Wire.read();
Temp=Wire.read()<<8|Wire.read();
GyroX=Wire.read()<<8|Wire.read();
GyroY=Wire.read()<<8|Wire.read();
GyroZ=Wire.read()<<8|Wire.read();

// Serial.print(“AccX = “); Serial.print(AccX);
// Serial.print(” || AccY = “); Serial.print(AccY);
// Serial.print(” || AccZ = “); Serial.print(AccZ);
// Serial.print(” || Temp = “); Serial.print(Temp/340.00+36.53);
// Serial.print(” || GyroX = “); Serial.print(GyroX);
// Serial.print(” || GyroY = “); Serial.print(GyroY);
// Serial.print(” || GyroZ = “); Serial.println(GyroZ);

Serial.print(” Elev=”); Serial.print(Elevatie);
Serial.print(” ElevOu=t”); Serial.print(ElevOut);
Serial.print(” El 1 = “); Serial.print(ElevAverage1);
Serial.print(” El 2 = “); Serial.print(ElevAverage2);
Serial.print(” El 3 = “); Serial.print(ElevAverage3);
Serial.print(” El 4 = “); Serial.print(ElevAverage4);
Serial.print(” El 5 = “); Serial.print(ElevAverage5);
Serial.print(” El 6 = “); Serial.print(ElevAverage6);
Serial.print(” El 7 = “); Serial.print(ElevAverage7);
Serial.print(” El 8 = “); Serial.print(ElevAverage8);
Serial.print(” El 9 = “); Serial.print(ElevAverage9);
Serial.print(” El 10 = “); Serial.println(ElevAverage10);

Elevatie = ((AccY + Calibratie) / 181 ) ; // verschaal en correctie de meetwaarde naar 0,0 en 90,9 graden
Average();
Datadisplay();
BatterMin();

delay(175);
}

void Datadisplay ()
{
lcd.setCursor (0,0); // Regel 1
lcd.print (“Elevatie”);
lcd.setCursor (0,1); // positie 1 op Regel 2
lcd.print (” “);
lcd.setCursor (0,1); // positie 1 op Regel 2
lcd.print ( ElevOut,1);
lcd.write(byte(0)); // display graden celsius teken
lcd.print (” “);

}

void Average () { // Schuif register 10 elevatie waarden

ElevAverage1 = ElevAverage2;
ElevAverage2 = ElevAverage3;
ElevAverage3 = ElevAverage4;
ElevAverage4 = ElevAverage5;
ElevAverage5 = ElevAverage6;
ElevAverage6 = ElevAverage7;
ElevAverage7 = ElevAverage8;
ElevAverage8 = ElevAverage9;
ElevAverage9 = ElevAverage10;
ElevAverage10 = Elevatie;
ElevOut = (( ElevAverage1 + ElevAverage2 + ElevAverage3 + ElevAverage4 + ElevAverage5 +
ElevAverage6 + ElevAverage7 + ElevAverage8 + ElevAverage9 + ElevAverage10) / 10);
}

void DisplayVolt()
{

// ———-Laad de ingang voor de spanning meting ——————-

AkWaardeVolt = analogRead(PinWaardeVolt );// Haal waarde analoge ingang op
Volt = ( AkWaardeVolt * 31 / 68 * 3); // 1024 eenheden naar 15,00 volt

// ———-Bepaal spanning waarden voor en achter de komma
VoltUnits = Volt / 100;
VoltDec = Volt % 100;

lcd.setCursor (0,0); // Regel 1
char buffer [17];
if (VoltDec < 10 ) // extra nul toevoegen achter de komma ?
{sprintf (buffer, “U= %2d,0%1d”,VoltUnits ,VoltDec );}
else
{sprintf (buffer, “U= %2d,%2d”,VoltUnits ,VoltDec );}
lcd.print (buffer);

}

void BatterMin()
{
AkWaardeVolt = analogRead(PinWaardeVolt );// Haal waarde analoge ingang op
Volt = ( AkWaardeVolt * 31 / 68 * 3); // 1024 eenheden naar 15,00 volt
if (Volt < 460) // 4,60 Volt minimaal spanning
{
lcd.setCursor (7,1); // positie 8 op regel 2
lcd.write(byte(1)); // display graden celsius teken}
}
}