Professional Documents
Culture Documents
// by Alessandro Galavotti -
#include <Wire.h>
#include <Adafruit_ADS1015.h>
#include <LiquidCrystal_I2C.h>
// use debug=true to have continuous readings on serial monitor and calculate the scale factors
float ScaleV2 =0.5; // scale factor for V2 (Anode Current) Sense Resistor=2ohm -> 1/2=0.5
float Va,Ia,Vg,Vf;
float Va1,Ia1,Vg1;
float Va2,Ia2,Vg2;
float Va3,Ia3,Vg3;
float Mu,Gm,Rp;
int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
// Setup ******
void setup(void)
lcd.init();
Serial.begin(9600);
ads.begin();
pinMode(ledPin1, OUTPUT);
pinMode(buttonPin1, INPUT);
pinMode(ledPin2, OUTPUT);
pinMode(buttonPin2, INPUT);
pinMode(buttonPin3, INPUT);
// Do ADC conversion
DoADC();
lcd.setCursor(0, 0);
lcd.backlight();
lcd.print("Va");
lcd.print(Va);
if ( Voltage0 <100 ) { // per annullare una cifra che resta quando Va<100V
lcd.setCursor(7, 0);
lcd.print(" ");
lcd.setCursor(9, 0);
lcd.print("Ia");
lcd.print(Ia);
lcd.setCursor(15, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("Vg");
lcd.print(Vg);
lcd.setCursor(9, 1);
lcd.print("Vf");
lcd.print(Vf);
//
// Measure Point P0
buttonState1 = digitalRead(buttonPin1);
if (buttonState1 == LOW) {
digitalWrite(ledPin1, HIGH);
Ia1=Ia;
Va1=Va;
Vg1=Vg;
lcd.setCursor(0, 0);
lcd.print("P1=decr.Vg@VAfix");
lcd.setCursor(0, 1);
WaitSec(9);
clearscreen();
} else {
digitalWrite(ledPin1, LOW);
// Measure Point P2
buttonState2 = digitalRead(buttonPin2);
if (buttonState2 == LOW) {
digitalWrite(ledPin2, HIGH);
Ia2=Ia;
Va2=Va;
Vg2=Vg;
lcd.setCursor(0, 0);
lcd.print("P2=incr.VA@Vgfix");
lcd.setCursor(0, 1);
WaitSec(9);
clearscreen();
} else {
digitalWrite(ledPin2, LOW);
buttonState3 = digitalRead(buttonPin3);
if (buttonState3 == LOW) {
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin1, HIGH);
Ia3=Ia;
Va3=Va;
Vg3=Vg;
clearscreen();
Gm=(Ia2-Ia1)/(Vg2-Vg1);
Rp=(Va3-Va2)/(Ia3-Ia2);
Mu=Gm*Rp;
lcd.setCursor(0, 0);
lcd.print("Gm=");
lcd.print(Gm);
lcd.setCursor(7, 0);
lcd.print("Rp=");
lcd.print(Rp);
lcd.setCursor(0, 1);
lcd.print("Mu=");
lcd.print(Mu);
lcd.setCursor(10, 1);
lcd.print("#");
lcd.print(nMeasure);
Serial.print("-----------------------------------------");
Serial.println();
Serial.print("Measure#:");
Serial.print(nMeasure);
Serial.println();
Serial.print("Va:");
Serial.print("\t\tVg:");
Serial.print("\t\tIa:");
Serial.println();
Serial.print(Va1, 7);
Serial.print("\t");
Serial.print(Vg1, 7);
Serial.print("\t");
Serial.print(Ia1, 7);
Serial.println();
Serial.print(Va2, 7);
Serial.print("\t");
Serial.print(Vg2, 7);
Serial.print("\t");
Serial.print(Ia2, 7);
Serial.println();
Serial.print(Va3, 7);
Serial.print("\t");
Serial.print(Vg3, 7);
Serial.print("\t");
Serial.print(Ia3, 7);
Serial.println();
Serial.print("Gm:");
Serial.print("\t\tRp:");
Serial.print("\t\tMu:");
Serial.println();
Serial.print(Gm, 7);
Serial.print("\t");
Serial.print(Rp, 7);
Serial.print("\t");
Serial.print(Mu, 7);
Serial.println();
WaitSec(9);
clearscreen();
nMeasure=nMeasure+1;
} else {
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin1, LOW);
}
delay(200);
lcd.setCursor(c, r);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.setCursor(14, 1);
lcd.print(ii);
delay(1000);
void DoADC() {
int16_t adc0; // we read from the ADC, we have a sixteen bit integer as a result
int16_t adc1; // we read from the ADC, we have a sixteen bit integer as a result
int16_t adc2; // we read from the ADC, we have a sixteen bit integer as a result
int16_t adc3; // we read from the ADC, we have a sixteen bit integer as a result
Vam=0;
Iam=0;
Vgm=0;
Vfm=0;
adc0 = ads.readADC_SingleEnded(0);
adc1 = ads.readADC_SingleEnded(1);
if ( Voltage1 <0 ) {
Voltage1 =0 ;
adc2 = ads.readADC_SingleEnded(2);
if ( Voltage2 <0 ) {
Voltage2 =0 ;
Ia=Voltage2*ScaleV2*1000; // Ia in mA
// ADC3
adc3 = ads.readADC_SingleEnded(3);
Va=Va-Voltage2;
Vg=Vg+Voltage2;
Iam=Iam+Ia;
Vam=Vam+Va;
Vgm=Vgm+Vg;
Vfm=Vfm+Vf;
Ia=Iam/nSample;
Va=Vam/nSample;
Vg=Vgm/nSample;
Vf=Vfm/nSample;
// printing to serial moniotr data readed and converted (for debug and scale factor extimate)
Serial.print(Voltage0, 7);
Serial.print(Voltage1, 7);
Serial.print(Voltage2, 7);
Serial.print(Voltage3, 7);
Serial.println();
}
//if ( Debug = 100 ) { // for raw data
// Serial.print("AIN0: ");
// Serial.print(adc0, 7);
// Serial.print("AIN1: ");
// Serial.print(adc1, 7);
// Serial.print("AIN2: ");
// Serial.print(adc2, 7);
// Serial.print("AIN3: ");
// Serial.print(adc3, 7);
// }