Pour la partie hardware, mon but est de trouver des ventilateurs qui peuvent être contrôlés via signal PWM, qui ne coûtent pas trop cher et qui peuvent être interfacés avec ma carte Arduino Uno. Après avoir jeté un coup d’œil sur différentes options, je me suis décidé pour les ventilateurs Noctua NF-A14 PWM qui sont alimentés en tension 12V et peuvent être contrôlés par PWM 5V. Cela les rend parfaitement compatibles avec mon Arduino. J’ai également acheté une embase DC Jack pour alimenter le tout. Un détail cependant, les ventilateurs choisis pourraient ne pas être adaptés au projet car ils sont conçus pour être silencieux et simplement laisser passer une filet d’air pour le refroidissement dans un ordinateur. Le projet pourrait donc nécessiter des ventilateurs plus puissants pour une meilleure expérience d’immersion, mais j’attends de voir les premiers tests en situation.
J’ai effectué le branchement des ventilateurs sur une breadboard avec des broches mâles pour les brancher facilement. Les signaux Alimentation 12V et Commande PWM 5V ont été redirigés vers une embase femelle DC jack et les sorties PWM de l’Arduino, respectivement.
Firmware
Le micro-programme de la carte de contrôle a été développé avec Visual Studio Code et PlatformIO en utilisant les fonctions de la bibliothèque Arduino. Des fonctions permettent de gérer la puissance de chaque ventilateur. J’ai développé le firmware de façon à ce que la carte soit un esclave répondant uniquement aux consignes envoyées depuis le PC. Le protocole de communication est simple, et est compréhensible par un humain pour pouvoir tester facilement les différentes fonctions.
bool FanAEnable(bool on_off, typeSTATUS* STS) {
if (on_off == true) {
STS->FANA_enable = 1;
analogWrite(PIN_FAN_A, STS->FANA_PWM);
return true;
} else if (on_off == false) {
STS->FANA_enable = 0;
analogWrite(PIN_FAN_A, 0);
return true;
} else {
return false;
}
}
bool FanAPower(uint8_t value, typeSTATUS* STS) {
STS->FANA_PWM = value;
analogWrite(PIN_FAN_A, STS->FANA_PWM);
return true;
}
Le code précédent montre les deux fonctions permettant de contrôler un des deux ventilateurs. La structure STS
agit comme une mémoire générale permettant de maintenir en mémoire toutes les informations en cas de besoin de lecture par l’ordinateur. Ces fonctions sont appelées par le firmware à la réception du message envoyé par le PC, correspondant à l’une ou l’autre fonction.
Grâce au protocole mis en place, je peux gérer la puissance de chacun des deux ventilateurs. Les commandes ‘=AE1
‘ et ‘=BE1
‘ permettent d’activer les signaux de contrôle, et les commandes ‘=APXX
‘ et ‘=BPXX
‘ permettent d’envoyer la consigne de vitesse, où ‘=AP00
‘ et ‘=BP00
‘ donnent une consigne de vitesse nulle et ‘=APFF
‘ et ‘=BPFF
‘ donnent une consigne de vitesse maximale.
On peut dès maintenant imaginer des améliorations : la recherche de ventilateurs plus adaptés mise de côté, on peut imaginer la création d’un PCB pour la carte de contrôle ou une extension de la carte Arduino pour une intégration électronique plus propre, ainsi que la création d’un boîtier pour toute la partie électronique. De plus, l’intégration et la positionnement mécanique des ventilateurs n’a pas du tout été réfléchi.
Le prochain article sur le sujet sera dédié à la partie software, c’est-à-dire comment récupérer les informations du jeu, calculer la puissance des ventilateurs à appliquer et on parlera également des premiers tests en condition de course !
Les différents liens du projet :
– le dépôt Github
– la page du projet
Ping : AssettoCorsaWindSim - Software et premier test ! - Paul Chanvin