Skip to content

Commit

Permalink
Some doc
Browse files Browse the repository at this point in the history
  • Loading branch information
FredM67 committed Mar 5, 2024
1 parent fcf91d3 commit d3bedad
Show file tree
Hide file tree
Showing 6 changed files with 146 additions and 35 deletions.
131 changes: 103 additions & 28 deletions Mk2_3phase_RFdatalog_temp/Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,15 @@

Ce programme doit être utilisé avec l’IDE Arduino et/ou d’autres IDE de développement comme VSCode + PlatformIO.

- [Utilisation avec Arduino IDE](#utilisation-avec-arduino-ide)
- [Utilisation avec Visual Studio Code](#utilisation-avec-visual-studio-code)
- [Aperçu rapide des fichiers](#aperçu-rapide-des-fichiers)
- [Étalonnage du routeur](#étalonnage-du-routeur)
- [Configuration du programme](#configuration-du-programme)
- [Configuration des sorties TRIAC](#configuration-des-sorties-triac)
- [Configuration des sorties relais tout-ou-rien](#configuration-des-sorties-relais-tout-ou-rien)
- [Principe de fonctionnement](#principe-de-fonctionnement)

# Utilisation avec Arduino IDE

Vous devrez télécharger et installer la version la plus récente de l'[Arduino IDE](https://www.arduino.cc/en/software).
Expand All @@ -15,7 +24,7 @@ Veuillez rechercher le fichier '**platform.txt**' situé dans le chemin d’inst

Pour **Windows**, typiquement, vous trouverez le fichier dans '**C:\Program Files (x86)\Arduino\hardware\arduino\avr**' et/ou dans '**%LOCALAPPDATA%\Arduino15\packages\arduino\hardware\avr\x.y.z**' où 'x.y.z' est la version du package **Arduino AVR Boards**.

Vous pouvez aussi taper cette commande dans un Powershell : `Get-Childitem –Path C:\ -Include platform.txt -Recurse -ErrorAction SilentlyContinue`. Cela peut prendre quelques secondes/minutes jusqu’à ce que le fichier soit trouvé.
Vous pouvez aussi taper cette commande dans un Powershell : `Get-Childitem –Path C:\ -Include platform.txt -Recurse -ErrorAction SilentlyContinue`. Cela peut prendre quelques secondes/minutes jusqu’à ce que le fichier soit trouvé.

Pour **Linux**, si vous utilisez le paquet AppImage, vous trouverez ce fichier dans '**~/.arduino15/packages/arduino/hardware/avr/1.8.6**'.
Vous pouvez exécuter `find / -name platform.txt 2>/dev/null` au cas où l’emplacement aurait été modifié.
Expand All @@ -26,33 +35,99 @@ Si votre IDE Arduino a été ouvert, veuillez fermer toutes les instances et l

# Utilisation avec Visual Studio Code

Vous devrez installer des extensions supplémentaires. Les extensions les plus populaires et les plus utilisées pour ce travail sont '*Arduino*' et '*Platform IO*'.
Vous devrez installer des extensions supplémentaires.
Les extensions les plus populaires et les plus utilisées pour ce travail sont '*Arduino*' et '*Platform IO*'.

# Aperçu rapide des fichiers

- **Mk2_3phase_RFdatalog_temp.ino** : Ce fichier est nécessaire pour l’IDE Arduino
- **calibration.h** : contient les paramètres d’étalonnage
- **config.h** : les préférences de l’utilisateur sont stockées ici (affectation des broches, fonctionnalités, ...)
- **config_system.h** : constantes système rarement modifiées
- **constants.h** : quelques constantes - *ne pas modifier*
- **debug.h** : Quelques macros pour la sortie série et le débogage
- **dualtariff.h** : définitions de la fonction double tarif
- **main.cpp** : code source principal
- **main.h** : prototypes de fonctions
- **movingAvg.h** : code source pour la moyenne glissante
- **processing.cpp** : code source du moteur de traitement
- **processing.h** : prototypes de fonctions du moteur de traitement
- **Readme.fr.md** : ce fichier
- **types.h** : définitions des types, ...
- **type_traits.h** : quelques trucs STL qui ne sont pas encore disponibles dans le paquet avr
- **type_traits** : contient des patrons STL manquants
- **utils_relay.h** : code source de la fonctionnalité *diversion par relais*
- **utils_rf.h** : code source de la fonction *RF*
- **utils_temp.h** : code source de la fonctionnalité *Température*
- **utils.h** : fonctions d’aide et trucs divers
- **validation.h** : validation des paramètres, ce code n’est exécuté qu’au moment de la compilation !
- **platformio.ini** : paramètres PlatformIO
- **inject_sketch_name.py** : script d'aide pour PlatformIO
- **Doxyfile** : paramètre pour Doxygen (documentation du code)

L’utilisateur final ne doit éditer QUE les fichiers **calibration.h** et **config.h**.
- **Mk2_3phase_RFdatalog_temp.ino** : Ce fichier est nécessaire pour l’IDE Arduino
- **calibration.h** : contient les paramètres d’étalonnage
- **config.h** : les préférences de l’utilisateur sont stockées ici (affectation des broches, fonctionnalités, …)
- **config_system.h** : constantes système rarement modifiées
- **constants.h** : quelques constantes - *ne pas modifier*
- **debug.h** : Quelques macros pour la sortie série et le débogage
- **dualtariff.h** : définitions de la fonction double tarif
- **main.cpp** : code source principal
- **main.h** : prototypes de fonctions
- **movingAvg.h** : code source pour la moyenne glissante
- **processing.cpp** : code source du moteur de traitement
- **processing.h** : prototypes de fonctions du moteur de traitement
- **Readme.fr.md** : ce fichier
- **types.h** : définitions des types, …
- **type_traits.h** : quelques trucs STL qui ne sont pas encore disponibles dans le paquet avr
- **type_traits** : contient des patrons STL manquants
- **utils_relay.h** : code source de la fonctionnalité *diversion par relais*
- **utils_rf.h** : code source de la fonction *RF*
- **utils_temp.h** : code source de la fonctionnalité *Température*
- **utils.h** : fonctions d’aide et trucs divers
- **validation.h** : validation des paramètres, ce code n’est exécuté qu’au moment de la compilation !
- **platformio.ini** : paramètres PlatformIO
- **inject_sketch_name.py** : script d'aide pour PlatformIO
- **Doxyfile** : paramètre pour Doxygen (documentation du code)

L’utilisateur final ne doit éditer QUE les fichiers **calibration.h** et **config.h**.

# Étalonnage du routeur
Les valeurs d'étalonnage se trouvent dans le fichier **calibration.h**.
Il s'agit de la ligne :
```cpp
inline constexpr float f_powerCal[NO_OF_PHASES]{ 0.05000F, 0.05000F, 0.05000F };
```
Ces valeurs par défaut doivent être déterminées pour assurer un fonctionnement optimal du routeur.
# Configuration du programme
D'une manière générale, la configuration d'une fonctionnalité nécessite 2 changements au moins :
- activation de la fonctionnalité en question
- configuration de la fonctionnalité en question
La pertinence de l'ensemble est validée lors de la compilation. Ainsi, si par mégarde, une *pin* est allouée 2 fois par exemple, le compilateur émettra une erreur.
## Configuration des sorties TRIAC
Il faudra dans un 1<sup>er</sup> temps définir le nombre de sortie TRIAC.
```cpp
inline constexpr uint8_t NO_OF_DUMPLOADS{ 2 };
```

Ensuite, il faudra assigner les *pins* correspondantes ainsi que l'ordre des priorités au démarrage.
```cpp
inline constexpr uint8_t physicalLoadPin[NO_OF_DUMPLOADS]{ 5, 7 };
inline constexpr uint8_t loadPrioritiesAtStartup[NO_OF_DUMPLOADS]{ 0, 1 };
```
## Configuration des sorties relais tout-ou-rien
Les sorties relais tout-ou-rien permettent d'alimenter des appareils qui contiennent de l'électronique (pompe à chaleur, …).
Pour chaque relais, il faut définir 5 paramètres :
- numéro de pin sur laquelle est branché le relais
- seuil de surplus avant mise en route (par défaut **1000 W**)
- seuil d'import avant arrêt (par défaut **200 W**)
- durée de fonctionnement minimale en minutes (par défaut **5 mn**)
- durée d'arrêt minimale en minutes (par défaut **5 mn**).
```cpp
inline constexpr RelayEngine relays{ { { 4, 1000, 200, 10, 10 } } };
```
Cette ligne définit ainsi un relais câblé sur la pin **4**, qui se déclenchera à partir de **1000 W**, et qui s'arrêtera à partir de **200 W** d'import et donc le temps de fonctionnement mais aussi d'arrêt sera de **10 mn**.

Si plusieurs relais sont présents, on listera tout simplement les configurations de chaque relais de cette façon :
```cpp
inline constexpr RelayEngine relays{ { { 4, 1000, 200, 10, 10 },
{ 3, 1500, 250, 5, 15 } } };
```
### Principe de fonctionnement
Les valeurs de surplus ainsi que d'import sont calculées selon une moyenne mobile pondérée exponentiellement (EWMA pour Exponentially Weighted Moving Average).
Par défaut, cette moyenne prend en compte une fenêtre d'environ 10 mn.
Il est possible de la rallonger mais aussi de la raccourcir.
Pour des raisons de performances de l'Arduino, la durée choisie sera arrondie à une durée proche qui permettra de faire les calculs sans impacter les performances du routeur.
Si l'utilisateur souhaite plutôt une fenêtre de 15 mn, il suffira d'écrire :
```cpp
inline constexpr RelayEngine relays{ 15_i, { { 3, 1000, 200, 1, 1 } } };
```
**_Note_**
Attention au suffixe '**_i**' !

*doc non finie*
4 changes: 2 additions & 2 deletions Mk2_3phase_RFdatalog_temp/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ inline constexpr bool OVERRIDE_PIN_PRESENT{ false }; /**< set
#endif

inline constexpr bool WATCHDOG_PIN_PRESENT{ false }; /**< set it to 'true' if there's a watch led */
inline constexpr bool RELAY_DIVERSION{ false }; /**< set it to 'true' if a relay is used for diversion */
inline constexpr bool RELAY_DIVERSION{ true }; /**< set it to 'true' if a relay is used for diversion */
inline constexpr bool DUAL_TARIFF{ false }; /**< set it to 'true' if there's a dual tariff each day AND the router is connected to the billing meter */

// ----------- Pinout assignments -----------
Expand Down Expand Up @@ -84,7 +84,7 @@ inline constexpr uint8_t watchDogPin{ 0xff }; /**< watch dog LED */

inline constexpr uint8_t tempSensorPin{ 0xff }; /**< for 3-phase PCB, sensor pin */

inline constexpr RelayEngine relays{ { { 0xff, 1000, 200, 1, 1 } } }; /**< config for relay diversion, see class definition for defaults and advanced options */
inline constexpr RelayEngine relays{ 15_i, { { 3, 1000, 200, 1, 1 } } }; /**< config for relay diversion, see class definition for defaults and advanced options */

//static_assert(myRelayArray.get_relay< 0 >().get_pin() == 2);
//static_assert(myRelayArray.get_relay< 1 >().get_pin() == 4);
Expand Down
14 changes: 12 additions & 2 deletions Mk2_3phase_RFdatalog_temp/type_traits/integral_constant.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,18 @@
template< typename T, T v >
struct integral_constant
{
static const T value = v;
static constexpr T value = v;
using value_type = T;
using type = integral_constant; // using injected-class-name
constexpr operator value_type() const noexcept
{
return value;
}
constexpr value_type operator()() const noexcept
{
return value;
} // since c++14
};

typedef integral_constant< bool, true > true_type;
typedef integral_constant< bool, false > false_type;
typedef integral_constant< bool, false > false_type;
19 changes: 19 additions & 0 deletions Mk2_3phase_RFdatalog_temp/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -88,4 +88,23 @@ template< typename _Tp > constexpr size_t size(const _Tp (& /*__array*/)[0]) noe
return 0;
}

template< class... Ts >
constexpr uint8_t ival(Ts... Vs)
{
char vals[sizeof...(Vs)] = { Vs... };
uint8_t result = 0;
for (uint8_t i = 0; i < sizeof...(Vs); i++)
{
result *= 10;
result += vals[i] - '0';
}
return result;
}

template< char... Vs >
constexpr integral_constant< uint8_t, ival(Vs...) > operator""_i()
{
return {};
}

#endif // _TYPES_H
10 changes: 8 additions & 2 deletions Mk2_3phase_RFdatalog_temp/utils_relay.h
Original file line number Diff line number Diff line change
Expand Up @@ -241,8 +241,8 @@ class relayOutput
/**
* @brief This class implements the relay management engine
*
* @tparam N The number of relays to be used
* @tparam D The duration in minutes of the sliding average
* @tparam N The number of relays to be used
*/
template< uint8_t N, uint8_t D = 10 >
class RelayEngine
Expand All @@ -257,6 +257,12 @@ class RelayEngine
{
}

constexpr RelayEngine(integral_constant< uint8_t, D > ic, const relayOutput (&ref)[N])
: relay(ref)
{
}


constexpr auto get_size() const
{
return N;
Expand Down Expand Up @@ -377,7 +383,7 @@ template< uint8_t N, uint8_t D > void RelayEngine< N, D >::inc_duration() const
relay[--idx].inc_duration();
} while (idx);

if (settle_change > 0)
if (settle_change)
{
--settle_change;
}
Expand Down
3 changes: 2 additions & 1 deletion PVRouter-3-phase.code-workspace
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@
],
"settings": {
"files.associations": {
"xtr1common": "cpp"
"xtr1common": "cpp",
"new": "cpp"
}
}
}

0 comments on commit d3bedad

Please sign in to comment.