Vous êtes sur la page 1sur 4

Tutoriel lecture données et pilotage avec Arduino (Uno, méga,

Wemos..) et onduleur hybride type PIP de 1 à 5KVA

Marques Onduleurs et modèles compatibles


WKS onduleur hybride type PIP , 1 à 5KVA y compris EVO 1 et EVO 2 nouvelle génération
Voltronic Axpert , onduleur hybride type PIP , 1 à 5KVA
MPPSolar onduleur hybride type PIP , 1 à 5KVA
Mecer onduleur hybride type PIP , 1 à 5KVA
Giant Power onduleur hybride type PIP , 1 à 5KVA
Effekta onduleur hybride type PIP , 1 à 5KVA
Flinslim onduleur hybride type PIP , 1 à 5KVA
OPTI-Solar onduleur hybride type PIP , 1 à 5KVA
MAXIC onduleur hybride type PIP , 1 à 5KVA
Pro Power onduleur hybride type PIP , 1 à 5KVA
Proline Energy onduleur hybride type PIP , 1 à 5KVA
Inverex onduleur hybride type PIP , 1 à 5KVA
SOLARIX onduleur hybride type PIP , 1 à 5KVA
Voltex onduleur hybride type PIP , 1 à 5KVA
SolarPower24 onduleur hybride type PIP , 1 à 5KVA

Le matériel
• Onduleur compatible (voir liste au dessus)
• Microcontrôleur Arduino avec au moins un port série de disponible :
https://www.amazon.fr/gp/product/B07LCY1Q6Y/ref=ppx_yo_dt_b_asin_title_o07_s00
• Câble RJ45 (qui sera coupé par la suite) https://www.amazon.fr/MCL-FCC5EM-0-5M-C%C3%A2ble-r%C3%A9seau-RJ-
45/dp/B000FM7D0S
• Convertisseur bidirectionnel RS232/TTL (2 modèles possibles et testés)
https://www.amazon.fr/gp/product/B00K67XD7Y/ref=ppx_yo_dt_b_asin_title_o04_s00 ou
https://www.amazon.fr/gp/product/B01GKE3VUU/ref=ppx_yo_dt_b_asin_title_o00_s00
• Fils de câblage https://www.amazon.fr/gp/product/B07KCFG5YX/ref=ppx_yo_dt_b_asin_title_o08_s01
• Connecteur DB9 https://www.amazon.fr/gp/product/B00HUH9KFM/ref=ppx_yo_dt_b_asin_title_o05_s00 ou sans soudure
https://www.amazon.fr/Adaptateur-Broches-connecteur-Positions-Connector/dp/B071DS5GTW

Les liens proposés sont facultatifs, vous pourrez sans doute trouvez à meilleurs prix ailleurs
et en fonction de convertisseur rs232/TTL choisi vous aurez besoin ou non de connecteur
DB9 ou pas.

Le câblage et le matériel proposé par la suite est celui avec connecteur DB9 et l'interface
RS232/TTL. Cette solution est plus simple pour les personnes moins techniques, de même,
il est possible d'utiliser un db9 avec vis et sans soudure

Information sur le code arduino utilisé


Ce code montre comment récupérer toutes les 5 secondes les données et valeurs de l'onduleur par la ligne
de commande Serial2.print(QPIGS);
Cette commande envoie la chaîne de caractère hexadécimal QPIGS au port série qui est déclarée et contenue dans
String QPIGS = "\x51\x50\x49\x47\x53\xB7\xA9\x0D";

Vous pouvez utiliser les chaînes de caractère suivantes pour obtenir d'autre information, voir piloter
et régler votre onduleur via l'arduino.
String QPIWS = "\x51\x50\x49\x57\x53\xB4\xDA\x0D";
String QDI = "\x51\x44\x49\x71\x1B\x0D";
String QMOD = "\x51\x4D\x4F\x44\x49\xC1\x0D";
String QVFW = "\x51\x56\x46\x57\x62\x99\x0D";
String QVFW2 = "\x51\x56\x46\x57\x32\xC3\xF5\x0D";

String POP02 = "\x50\x4F\x50\x30\x32\xE2\x0B\x0D";


String POP01 = "\x50\x4F\x50\x30\x32\xE2\xD2\x69";
String POP00 = "\x50\x4F\x50\x30\x30\xC2\x48\x0D";
Pour avoir toutes les informations sur les commandes, fonctions, et protocole voici le lien vers le PDF :
https://drive.google.com/file/d/1cUoNNkBexVLlyr-iy53Ovl7N9JUP-eS5/view?usp=sharing

Le code pour arduino mega avec utilisation du port serie 2 pour le dialogue avec l'onduleur
Téléchargement : https://drive.google.com/file/d/139HpPuWth7btpYhhjbLF2ijHUXSH7x_N/view?usp=sharing )

Code exemple :
----------------------------------
String QPIGS = "\x51\x50\x49\x47\x53\xB7\xA9\x0D"; // (command for get data like voltage, frequency, power, etc ... from inverter)
/*
String QPIWS = "\x51\x50\x49\x57\x53\xB4\xDA\x0D";
String QDI = "\x51\x44\x49\x71\x1B\x0D";
String QMOD = "\x51\x4D\x4F\x44\x49\xC1\x0D";
String QVFW = "\x51\x56\x46\x57\x62\x99\x0D";
String QVFW2 = "\x51\x56\x46\x57\x32\xC3\xF5\x0D";

String POP02 = "\x50\x4F\x50\x30\x32\xE2\x0B\x0D"; //SBU priority


String POP01 = "\x50\x4F\x50\x30\x32\xE2\xD2\x69"; //solar first
String POP00 = "\x50\x4F\x50\x30\x30\xC2\x48\x0D"; //utility first
*/

float PIP_Grid_Voltage=0;
float PIP_Grid_frequence=0;
float PIP_output_Voltage=0;
float PIP_output_frequence=0;
int PIP_output_apparent_power=0;
int PIP_output_active_power=0;
int PIP_output_load_percent=0;
int PIP_BUS_voltage=0;
float PIP_Battery_voltage=0;
float PIP_battery_charge_current=0;
float PIP_battery_capacity=0;
float PIP_Inverter_heat_sink_temperature =0;
float PIP_PV_current=0;
float PIP_PV_voltage=0;
float PIP_Battery_voltage_from_SCC =0;
float PIP_battery_discharge_current=0;

unsigned long lastMillis=0;


long previousMillis = 0;
long interval = 5000;

void setup() {
Serial.begin(2400);
Serial2.begin(2400);
}

void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis > interval) {
Serial.println("ff");
previousMillis = currentMillis;
String inData;
Serial2.print(QPIGS);

if (Serial2.find("(")) {
Serial.println("fg");
PIP_Grid_Voltage=Serial2.parseFloat();
PIP_Grid_frequence=Serial2.parseFloat();
PIP_output_Voltage=Serial2.parseFloat();
PIP_output_frequence=Serial2.parseFloat();
PIP_output_apparent_power=Serial2.parseInt();
PIP_output_active_power=Serial2.parseInt();
PIP_output_load_percent=Serial2.parseInt();
PIP_BUS_voltage=Serial2.parseFloat();
PIP_Battery_voltage=Serial2.parseFloat();
PIP_battery_charge_current=Serial2.parseFloat();
PIP_battery_capacity=Serial2.parseInt();
PIP_Inverter_heat_sink_temperature =Serial2.parseInt();
PIP_PV_current=Serial2.parseFloat();
PIP_PV_voltage=Serial2.parseFloat();
PIP_Battery_voltage_from_SCC =Serial2.parseFloat();
PIP_battery_discharge_current=Serial2.parseFloat();

Serial.println("-----------------------------------------");
Serial.println("Grid voltage: " + String(PIP_Grid_Voltage)); //QPIGS.1 Grid voltage
Serial.println("Grid frequency: " + String(PIP_Grid_frequence)); //QPIGS.2 Grid frequency
Serial.println("Out voltage: " + String(PIP_output_Voltage)); //QPIGS.3 Out voltage
Serial.println("Out frequency: " + String(PIP_output_frequence)); //QPIGS.4 Out frequency
Serial.println("output apparent power: " + String(PIP_output_apparent_power)); //QPIGS.5 AC output apparent power
Serial.println("output active power: " + String(PIP_output_active_power)); //QPIGS.6 AC output active power
Serial.println("Output load percent: " + String(PIP_output_load_percent)); //QPIGS.7 Output load percent
Serial.println("PIP_BUS_voltage: " + String(PIP_BUS_voltage)); //skip
Serial.println("Battery voltage: " + String(PIP_Battery_voltage)); //QPIGS.9 Battery voltage
Serial.println("Battery charging current: " + String(PIP_battery_charge_current)); //QPIGS.10 Battery charging current
Serial.println("Battery capacity: " + String(PIP_battery_capacity)); //QPIGS.11 Battery capacity
Serial.println("PIP_Inverter_heat_sink_temperature: " + String(PIP_Inverter_heat_sink_temperature)); //skip
Serial.println("PIP_PV_current: " + String(PIP_PV_current)); //skip
Serial.println("PV Input voltage: " + String(PIP_PV_voltage)); //QPIGS.14 PV Input voltage
Serial.println("PIP_Battery_voltage_from_SCC: " + String(PIP_Battery_voltage_from_SCC)); //skip
Serial.println("Battery discharge current: " + String(PIP_battery_discharge_current)); //QPIGS.16 Battery discharge current

}
}
}
----------------------------------
Le câblage complet
Pour l'utilisation de l'autre carte sans connecteur DB9 , voici le principe de connexion sur
une arduino uno (j'ai testé donc c'est ok)