o κωδικας για τον adruino ειναι ο παρακατω
Κώδικας:
// arduino Arduino-INA226-master library
#include <DS7505.h>
#include <LiquidCrystal.h>
#include <Wire.h>
#include <INA226.h>
#define Temp_CAL 0 // Temperature offset value
float DS_TEMP;
float DS_TEMP_1;
float Voltage = 0;
float Power = 0;
float Current = 0;
DS7505 ds7505;
INA226 ina;
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
void setup() {
Wire.begin();
ina.begin(); // Default INA226 address is 0x40
ina.configure(INA226_AVERAGES_16, INA226_BUS_CONV_TIME_1100US, INA226_SHUNT_CONV_TIME_1100US, INA226_MODE_SHUNT_BUS_CONT); // Configure INA226
//ina.configure(INA226_AVERAGES_16, INA226_BUS_CONV_TIME_332US, INA226_SHUNT_CONV_TIME_332US, INA226_MODE_SHUNT_BUS_CONT); // Configure INA226
ina.calibrate(0.00515, 15); // Calibrate INA226. Rshunt = 0.005 ohm, Max excepted current = 15A
ds7505.init(0, 0, 0, 12); // A0,A1,A2 I2C address, resolution
lcd.begin(16, 2);
Serial.begin(115200);
PrepareDisplay();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F(" Power Supply "));
lcd.setCursor(0, 1);
lcd.print(F(" 0-30V 0-10A "));
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F(" ReDesign "));
lcd.setCursor(0, 1);
lcd.print(F(" By MOUTOULOS "));
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("V: I: "));
lcd.setCursor(0, 1);
lcd.print(F("T: c W: "));
Serial.println(F("Initialize INA226"));
Serial.println(F("-----------------------------------------------"));
checkConfig(); // Display configuration
Serial.println(F("-----------------------------------------------"));
delay(2000);
}
void loop() {
Read_Temperature();
MeasINA();
PrintInfoSerial();
PrintInfoLCD_Temp();
delay(200);
}
void Read_Temperature()
{
DS_TEMP = ds7505.getTempC() + Temp_CAL;
}
void PrepareDisplay(void) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("V: I: "));
lcd.setCursor(0, 1);
lcd.print(F("T: c W: "));
}
void PrintInfoLCD_Temp(void) {
lcd.setCursor(2, 0);
lcd.print(Voltage, 2);
lcd.print(F(" "));
lcd.setCursor(10, 0);
lcd.print(Current, 2);
lcd.print(F(" "));
lcd.setCursor(10, 1);
lcd.print(Power, 2);
lcd.print(F(" "));
lcd.setCursor(2, 1);
lcd.print(DS_TEMP, 1);
}
void PrintInfoSerial(void) {
// Serial.write("\x1B[H"); // Cursor Home
// Serial.write("\x1B[2J"); // clear entire screen and delete all lines scrollback buffer
// Serial.write("\x1B[3J"); // clear entire screen and delete all lines scrollback buffer
Serial.println(F("-----------------------------------------------"));
Serial.print(F("Voltage:"));
Serial.print (F("\t"));
Serial.print(Voltage, 2);
Serial.print (F("\t"));
Serial.println (F("Volt "));
Serial.print(F("Current:"));
Serial.print (F("\t"));
Serial.print(Current, 2);
Serial.print (F("\t"));
Serial.println (F("Amps "));
Serial.print(F("Power: "));
Serial.print (F("\t"));
Serial.print(Power, 2);
Serial.print (F("\t"));
Serial.println (F("Watt "));
Serial.print(F("Temperature:"));
Serial.print (F("\t"));
Serial.print(DS_TEMP, 2);
Serial.print (F("\t"));
Serial.println (F("deg C "));
Serial.println(F("-----------------------------------------------"));
}
void checkConfig()
{
Serial.print(F("Max possible current: "));
Serial.print(ina.getMaxPossibleCurrent());
Serial.println(F(" A"));
Serial.print(F("Max current: "));
Serial.print(ina.getMaxCurrent());
Serial.println(F(" A"));
Serial.print(F("Max shunt voltage: "));
Serial.print(ina.getMaxShuntVoltage());
Serial.println(F(" V"));
Serial.print(F("Max power: "));
Serial.print(ina.getMaxPower());
Serial.println(F(" W"));
}
void MeasINA()
{
Voltage = ina.readBusVoltage();
Power = ina.readBusPower();
// Current = ina.readShuntCurrent() * 1000;
Current = ina.readShuntCurrent();
}
ολες οι βιβλιοθηκες που χρειαζονται ειναι στο παρακατω link
https://files.fm/u/w8tjbsmvg