vendredi 22 mai 2020

Variation de la vitesse d’un ventilateur par télécommande avec Arduino (1)

                                    

Dans ce mini projet, on va essayer de commander un ventilateur à distance avec n'importe quelle télécommande universelle. Ca permettra de faire la même chose que les boutons démarrer/arrêter et le faire marcher sur trois vitesse.

Avant d'aller plus loin, on va voir de quoi ça à l'air :

Composants utilisés :

  • 3 résistances 150Ω et une résistance de 390Ω

  • 3 relais

  • 1 Arduino Nano

  • 1 convertisseur AC-DC (220-9)v

  • 1 récepteur IR TSOP1736 

  • 2 plaque de prototypage epoxy

  • 4 LEDs

  • 1 interrupteurs

  • 1 domino électrique


Présentation du ventilateur :

Le ventilateur qu’on va modifier ce présente comme ceci, une hélice comme tous les ventilateurs 😅 et une commande manuelle composée de 4 boutons dont un pour l'arrêt/marche et les trois autres pour différentes vitesses.

Le circuit électronique du ventilateur :

Le circuit du ventilateur présenté sur le circuit suivant est composé d’un moteur qui est raccordé en série avec un diviseur de tension qui permet de modifier la puissance avec laquelle va fonctionner le ventilateur, donc la vitesse.



Construction du circuit électronique externe pour la commande à distance :

Avant de pouvoir commander à distance, il faut déjà commencer par trouver un moyen pour commander les interrupteurs électroniquement et pour ça rien de mieux que des relais, qu’on va placer en parallèle des 3 boutons qu’on va appeler : pow1, pow2 et pow3 ce qui nous donne l’avantage de commander le ventilateur manuellement et à distance tout en sécurité, car les relais permettent d’isoler la partie puissance de la partie commande.


On va placer des relais uniquement pour les 3 boutons de vitesse au lieu d’en placer 4 car il suffit d’ouvrir tous les relais pow_i pour ouvrir le circuit et donc éteindre le ventilateur.


J’ai ajouté 3 LEDs pour indiquer la commutation ou pas de chaque relais. En ce qui concerne la commande à distance, j’ai opté pour un récepteur IR TSOP1736 qui est très simple à utiliser que ça soit au niveau circuit ou au niveau code sous Arduino.

Pour ce qui est du microcontrôleur au niveau prix, nombre de broches et l'espace occupé il y a rien de mieux qu’un Arduino Nano version clone vendu sur internet -3€.

Pour alimenter tout ça, puisqu’on utilise déjà l’alimentation réseau 220v pour faire marcher le ventilateur alors rien de mieux que de l'utiliser pour alimenter aussi notre circuit de commande à l’aide d’un convertisseur buck AC/DC 220-9v qui va convertir la tension du réseau en tension continue suffisante pour faire marcher correctement notre Arduino. On verra le détails sur chaque module et composant électronique choisi sur la partie suivante.

Le circuit réalisé pour la commande :

Les 4 broches com, pow1, pow2, et pow3 qui sont reliés aux 3 relais du circuit qu’on a réalisé, sont des connexions qui seront relié aux branchements du diviseur de tension présent dans le boîtier du ventilateur qu’on peut voir ici :

Raccordement avec le câblage existant


* J’ai pris une photo sur Internet pour mieux présenter le câblage avant la modification, car je n'ai pas pris de photo de l'intérieur de mon ventilateur à l’état original. L’architecture est presque la même sauf la présence de câble terre sur celui-là que je n’ai pas sur le mien..

Ces fils qu'on vient de lier vont être raccordés aux relais en respectant le nom de chaque liaison.

Donc comme on peut sur cette photo, j’ai relié 4 fils sur les fils déjà présent dans le boîtier avant de les faire sortir du boîtier.

Il faut faire attention à respecter le même diamètre de câblage, car il y a une puissance qui peut atteindre 30 W qui y circule. Les fils habituels utilisés dans le prototypage électronique ne tiendront pas, il y a même un grand risque qu’ils s'enflamment !

Vue de l’ensemble du circuit (circuit du ventilateur + circuit réalisé) :

Description des différentes parties du circuit :

  • Relais :

Pour les relais, j’ai choisi d’utiliser des shields relais qui sont équipé du circuit complet pour le bon fonctionnement d'un relais (un circuit avec transistor et un optocoupleur pour la commande, une diode pour la décharge du courant de la bobine…).


Avec ces shield il reste plus qu’à envoyer un état Bas/Haut pour commuter ou pas respectivement le relais.

Avant d’aller plus loin il faut s’assurer que nos relais supporte la puissance consommée par notre ventilateur car on va pas oublier qu’on va commuter du 220 V ! 


Le ventilateur peut consommer jusqu’à 30W de puissance et le relais supporte bien 220V jusqu’à 10A comme c’est écrit sur son boîtier :



Ce relais est bien adapté à cette puissance, car si on prends le courant du ventilateur :

Iv= 220V/30W=7.33A est bien inférieur au courant supporté par le relais donc tout vas bien.


Remarque :j’ai utilisé un relais de type SPDT (Single Pole Double Throw) qui possède 3 contacts : un contact commun, un contact fermé et un ouvert qu’on peut fermer électriquement. Mais il est possible d'utiliser aussi un relais de type SPST (Single Pole Single Throw) qui a que 2 contacts, ce dont on a besoin et permet d’économiser un contact et de l’espace. j'ai utilisé le premier type, car c’est ce que j’ai en ma possession.


Relais de type SPST


Le branchement des relais :

Comme on peut le voir, le branchement est très simple, sur la partie puissance de chaque relais, on va relier le contact commun et le contact ouvert sur le bouton.

  • Récepteur IR TSOP1736 :

Pour la partie commande à distance, mon choix s’est porté sur le récepteur infrarouge TSOP1738 avec une télécommande compris dans le lot. Le branchement se fait très facilement, la broche Gn se raccorde à la masse, +5v sur l’alimentation et Op directement sur l’Arduino.

Le branchement du récepteur :

  • Convertisseur AC-DC Buck (220 - 5)v :

Pour pouvoir alimenter notre circuit directement avec l’alimentation secteur, pour nous éviter d’utiliser une batterie ou une alimentation externe, on va utiliser un convertisseur AC/DC buck 220v-9V qui permet de redresser la tension en continue et de la mettre en 9V pour pouvoir alimenter notre Arduino Nano via la broche Vin.


le branchement du convertisseur:

  • Dimensionnement des résistances pour les LEDs :

J’ai utilisé 4 LEDs de différentes couleurs : une verte, une bleu et une rouge pour l’activation des 3 vitesses du ventilateur et une de couleur jaune pour indiquer l’allumage du circuit.


Pour pouvoir calculer les résistances qu’on va mettre en série avec chaque LED, il faut faire le calcul pour avoir une résistance qui va limiter le courant délivré par les broches de l’Arduino.

Chaque LED supporte un courant I_led=20mA et possède une tension de seuil Vseuil qui diffère selon la couleur de cette dernière :

  • Led verte avec Vseuil=2.5V et Valim=5V → Rv = (5-2.5)/0.02 = 125 Ω

  • Led bleu avec Vseuil=2.8V et Valim=5V → Rb =(5-2.8)/0.02 = 110 Ω

  • Led rouge avec Vseuil=2V et Valim=5V → Rr = (5-2)/0.02 = 150 Ω

  • Led jaune avec Vseui=2.1V et Valim=9V → Rj=(9-2.1)/0.02 = 345 Ω


Maintenant qu’on sait la tension de seuil pour chaque LED, on peut calculer les résistances qu’il faut pour avoir 20 mA sur chaque LED sachant que la tension envoyé sur les LEDs bleu, rouge et vert est de 5v alors que celle envoyé sur la led jaune est de 9v.

Calcul des résistance en série avec les LEDs à l’aide de cette relation :

Rled = Valim- VseuilIled


Pour les résistances des 3 LEDs vert, bleu et rouge pour éviter de mettre plusieurs résistances en série alors autant prendre des valeurs de résistances normalisés que j’ai en ma possession. Dans ce cas, on prend la valeur 150 Ω qui n’est pas loin des 2 valeurs 110 et 125 Ω et pour la valeur 345 Ω calculé on peut prendre la valeur normalisé 390 Ω.

Voir les valeurs normalisés des résistances sur différentes séries existantes sur ce lien.

Réalisation et assemblement du circuit de commande avec le ventilateur :

Pour la réalisation du circuit électronique sur une plaque de prototypage epoxy j’ai décidé de séparer le circuit en 2 parties séparés sur deux plaques l’une pour la partie puissance et l’autre pour la partie commande. Ces 2 plaques sont imbriquées l’une sur l’autre.

  • La partie puissance :

La partie puissance du circuit comme son nom l’indique, concerne tout ce qui est relié directement au secteur donc 220v ou pas loin (raccordement des sorties du relais aux circuit intérieur du ventilateur). Elle est composé d’un domino accueillant les 2 fils du secteur, le convertisseur (220-9)v et 3 relais.

  • La partie commande :

La partie commande du circuit réalisé contient la partie numérique à savoir le microcontrôleur qui est l’Arduino, le récepteur IR TSOP, les 4 LEDS et un interrupteur entre la sortie du convertisseur AC/DC +9v et l’Arduino qui permet d’allumer/éteindre ce circuit de commande.


Les cartes imbriqués et raccordé donne le circuit complet :


Le code Arduino:


  •  les boutons utilisés.

  • Ensuite, on construit le programme principal qui va détecter les boutons appuyés pour exécuter la tâche demandé (on/off et les différentes vitesses) via les relais.

  • Enfin, on va ajouter un afficheur 4 digits pour visualiser l’état de marche (on/off) et la vitesse de fonctionnement du ventilateur.

1. Code pour décoder la donnée renvoyé par la télécommande

Pour commander la marche/arret et les 3 vitesses du ventilateur, on va utiliser 4 boutons sur la télécommande :
  • le bouton ‘1’ pour la vitesse 1

  • le bouton ‘2’ pour la vitesse 2

  • le bouton ‘3’ pour la vitesse 3

  • le bouton ‘OK’ pour allumer/éteindre


On va d'abord décoder la donnée envoyée par chaque bouton utilisé.

Pour le montage de cette partie, il suffit de brancher la sortie du récepteur IR sur la broche Arduino D3.

Le code suivant décode la donnée envoyée par chaque bouton sur lequel on va appuyer :


Résultat :

Pour que le code soit plus clair, on va nommer chaque code de bouton : 

vitesse1=0xFF6897

vitesse2=0xFF9867

vitesse3=0xFFB04F

arretMarche=0xFF02FD

2. Code principal pour faire marcher le ventilateur sous différentes vitesses avec la télécommande :

Maintenant qu'on a récupéré le code de chaque bouton utilisé sur la télécommande, on peut les mettre dans le code principal on faisant des tests sur le bouton appuyé.

Cahier des charges :

À l’état initial, tous les relais sont relâchés donc le ventilateur est en état d'arrêt.

Pour le faire marcher il y a 3 cas :

  • l’appui sur le bouton ‘1’ (vitesse 1) fait marcher le ventilateur avec la puissance 1 ;

  • l’appui sur le bouton ‘2’ (vitesse 2) fait marcher le ventilateur avec la puissance 2 ;

  • l’appui sur le bouton ‘3’ (vitesse 3) fait marcher le ventilateur avec la puissance 3 ;

Pour pouvoir l'arrêter, il suffit d’appuyer sur le bouton ‘OK’


Pour voir la façon d’écrire le code voici l’organigramme correspondant :


Les 4 conditions du code IR seront mis dans une fonction switch qui elle-même va être mise dans une fonction test_IR() afin d'alléger la fonction loop() sur le programme Arduino.


Code principale :

La librairie IRremote peut être téléchargé sur ce lien.

Quelques explication sur le code : 

  digitalWrite(relais1,HIGH);

  digitalWrite(relais2,HIGH);

  digitalWrite(relais3,HIGH);

J’ai ajouté ces lignes de code dans la fonction setup() pour pouvoir ouvrir tous les relais et ils resteront dans cet état tant qu’aucun bouton est appuyé sur la télécommande. Sans ces lignes, il se peut qu’un des relais se ferme, j’ai pu observer ça sans mettre ces 3 lignes de code.


const long vitesse1=0xFF6897;

const long vitesse2=0xFF9867;

const long vitesse3=0xFFB04F;

const long arretMarche=0xFF02FD;

Les 4 variables vitesse1, vitesse2, vitesse3 et arretMArche sont déclaré comme étant des variables de type “const” et “long”, car la fonction switch accepte uniquement des variables de type constantes. Le type long est choisi, car la donnée envoyé par la télécommande est de taille supérieure à 2 octets donc il faut le mettre sur un type de variable de plus grande taille de 4 octets.

3. Code pour affichage de l’état du ventilateur ainsi que la vitesse activé :

Dans cette partie, on va ajouter un afficheur 4 digits qui va nous permettre de savoir sur quel état se trouve le ventilateur à temps réel, allumé sur une des 3 vitesses ou éteint.

Pour se faire au niveau circuit, on  va ajouter un afficheur 4 digits SPI qui est facile à brancher et à programmer.


Test de l’afficheur :

Dans un premier temps, on va commencer par afficher les 4 messages qu’on devrait afficher sur le code complet avec un intervalle d’une seconde entre chaque message :

Le programme pour l’affichage:


Pour le programme principal de cette partie, on gardé le même algorithme vu précédemment, il suffit uniquement d’ajouter la visualisation sur l’afficheur de l’état présent du ventilateur :

  • Afficher “OFF ” si le ventilateur est éteint

  • Afficher “On 1” si le ventilateur est mis sur la vitesse 1

  • Afficher “On 2” si le ventilateur est mis sur la vitesse 2

  • Afficher “On 3” si le ventilateur est mis sur la vitesse 3

Nouveau cahier des charges :


À l’état initial, tous les relais sont relâchés donc le ventilateur est en état d'arrêt et on écrit “OFF” sur l’afficheur.

Pour le faire marcher il y a 3 cas :

  • l’appui sur le bouton ‘1’ (vitesse 1) fait marcher le ventilateur avec la puissance 1 et affiche “On 1” ;

  • l’appui sur le bouton ‘2’ (vitesse 2) fait marcher le ventilateur avec la puissance 2  et affiche “On 2” ;

  • l’appui sur le bouton ‘3’ (vitesse 3) fait marcher le ventilateur avec la puissance 3  et affiche “On 3” ;

Pour pouvoir l'arrêter, il suffit d’appuyer sur le bouton ‘OK’

Organigramme correspondant :

  • Programme principal :

Cet organigramme (programme principal) englobe le code de test présent sur les 2 fonctions setup() et loop().

On commence par tout éteindre et afficher l’état actuel du ventilateur : OFF à l’aide de la fonction afficheur_4digits(). Après ça, on va tester constamment la réception d’un code envoyé par la télécommande s’il y a appui pour appeler la fonction test_IR().


  • Les fonctions affcheur_4digits() et test_IR() :

La fonction test_IR() reçois le code IR et attribue une tâche parmis les 4 cités dans le cahier des charges et fait appel à la fonction d’affichage afficheur_4digits().

La fonction afficheur_4digits() reçois un caractère (appelé etat ) de la fonction test_IR et exécute une des 4 commandes en fonction de ce qui est demandé via la télécommande :
  • si           etat = ‘O’ → afficher “OFF

  • sinon si etat = ‘1’ → afficher “On 1

  • sinon si etat = ‘2’ → afficher “On 2

  • sinon si etat = ‘3’ → afficher “On 3

Le programme principal :


Déroulement du projet en image :






Prochainement :

Très prochainement, on va voir la suite de ce petit projet avec quelques options supplémentaire pour améliorer le confort de l’utilisation de ce ventilateur avec possibilité de temporiser l’état de marche, la possibilité de modifier la durée de fonctionnement et l’affichage du temps restant sur un afficheur.



Aucun commentaire:

Enregistrer un commentaire