Domotique

Alimentation 5V et 3.3V à partir d’un transformateur 12V

Lors de la conception d’un circuit, il arrive souvent que l’on ai besoin de plusieurs valeurs de tensions. Par exemple, l’Atmega 328 qui équipe l’Arduino nécessité du 5V, un émetteur 2.4GHz nRF24l01+ à besoin de 3.3V et un émetteur 433MHz à lui besoin de 12V pour bénéficier de sa portée maximale.
L’idéal est donc d’avoir ces trois tensions différentes disponibles sur notre circuit. Il existe pour cela des composants appelés régulateurs de tension qui ont pour but de réduire une tension d’entrée pour la transformer en une tension de sortie à la valeur voulue.

La logique du circuit

Pour notre exemple, on va avoir à alimenter un composant en 12V, un en 5V et un dernier en 3.3V.
L’alimentation générale du circuit sera faite à partir d’un transformateur 12V, qui pourra donc alimenter directement notre composant 12V. Pour les deux autres, on utilisera des régulateurs de tension.

De 12V à 5V

Pour passer de 12V a 5V, le composant le plus courant s’appelle le LM7805. Si on se réfère à la documentation constructeur, on peux l’alimenter de +7V a +35V, il convient donc pour notre utilisation. Sa tension de sortie est de 5V@1A, ce qui laisse de la marge en terme d’intensité.
Attention toutefois ce composant consomme 8mA pour lui même. Si vous voulez alimenter avec une pile, c’est à prendre en compte.
Dernière info, le 7805 fait partie de la famille des 78XX, ou les deux XX indiquent la tension de sortie. Si par exemple vous avez besoin de 6V, alors orientez vous vers un 7806 etc.

Photo 08-05-2014 17 45 51

A quoi servent les deux condensateurs ? Ce sont des condensateurs de découplage, ils servent à stabiliser la tension. Et comme ils sont recommandés par le constructeur, autant les mettre.

De 12V à 3.3V

Comme pour le 5V, il existe un composant courant pour faire du 3.3V. Ce composant c’est le LM1117. Il accepte une tension d’entrée comprise entre +5V et +15V. Sa tension de sortie est de 3.3V@800mA. Le composant consomme 10mA pour son propre fonctionnement, la remarque concernant le 7805 au sujet de alimentation par pile est donc valable.

Photo 08-05-2014 17 46 01

Comme on peut le voir, des condensateurs de découplage sont nécessaire également.

Réunissons le meilleur des deux mondes

En réunissant les deux circuits, voilà ce que ça donne :

Photo 08-05-2014 17 45 44

Vous noterez que les valeurs des condensateurs sont différentes par rapport aux deux précédents schémas, ceci dans le but d’harmoniser les valeurs et surtout de faire avec des valeurs courantes. Ne descendez jamais en dessous de 10uF pour le condensateur côté 12V, car c’est la valeur minimum conseillée pour le LM1117.

Reste à définir l’intensité maximale que devra délivrer notre transformateur 12V afin de pouvoir tirer meilleure partie de nos deux régulateurs.

Imax = I1max + I2max + Conso LM7805 + Conso LM1117
Imax = 0.8 + 1 + 0.008 + 0.01
Imax = 1.818A

Je conseille donc un transfo 12V@2A pour alimenter ce circuit pour utiliser les capacités maximales de nos deux régulateurs simultanément. Il restera cependant 200mA uniquement pour le rail 12V.

Piloter ses prises et éclairages OTIO avec l’Arduino

Le voilà mon premier article !

Trève de plaisanterie, je vais essayer de vous expliquer (c’est la première fois que je tiens un blog) comment piloter des prises et des modules d’éclairage de la marque OTIO à partir d’un Arduino.

Après pas mal de recherches sur le net, je n’ai pas réussi à trouver le protocole des appareils domotiques OTIO, surement parce que leur distribution à l’air de se faire au compte-gouttes. Je me suis donc tourné vers l’excellente librairie rc-switch (à télécharger ici) qui est extrêmement simple d’utilisation et surtout qui permet de lire les codes envoyés par une télécommande (à l’aide d’un récepteur 433MHz mais ce n’est pas le sujet ici puisque je vous ai mâché le travail…). Vous pouvez tout de même la télécharger puisque nous en auront besoin également pour la partie émission.

 Pour arriver à nos fins, il faudra donc :

  • Un arduino (ahem…)
  • La librairie rc-switch (à télécharger ici)
  • Un émetteur 433 MHz (trouvable sur eBay pour moins de €5)
  • Une breadboard
  • Des fils
  • Et c’est tout !

Petit détour rapide sur l’emetteur 433MHz pour ceux qui sont pas sur d’acheter le bon :

Image

Et oui c’est ce petit objet minuscule… Tel quel, sa portée est pas trop mal (je commande mes éclairages à travers deux pièces). Il est possible d’augmenter la portée de deux manières, la plus simple étant de lui souder une antenne de 17,3cm au niveau du percage noté ANT, et la seconde manière étant d’augmenter sa tension d’alimentation à 12V. Mais attention, dans ce cas, la sortie DATA qui ira vers l’arduino sera elle aussi en 12V, et il aimera pas trop… Il faudra alors penser à mettre un pont diviseur entre l’arduino et la sortie DATA.

Passons à la partie cablage, ultra simple :

  • GND du transmetteur -> GND de l’Arduino
  • VCC du transmetteur -> 5V de l’Arduino
  • DATA du transmetteur -> pin #10 de l’Arduino

Image

Plûtot simple comme cablage ! Maintenant, avant de passer à la partie code, on va s’intéresser vite fait à la télécommande.

Image

Comme on peut le voir sur l’image du dessus la commande permet de commander 4 appareils appartenant à 4 familles, ce qui donne 16 appareils pilotables et donc 32 codes à trouver (on/off pour chaque appareil). Et comme je suis gentil, je partage.

 

Mode: 32 bit
Protocol: 2

A1 ON  :  919844896
A1 OFF :  1054062624
A2 ON  :  248756256
A2 OFF :  30652448
A3 ON  :  651409440
A3 OFF :  785627168
A4 ON  :  382973984
A4 OFF :  517191712
B1 ON  :  970176544
B1 OFF :  903067680
B2 ON  :  97761312
B2 OFF :  231979040
B3 ON  :  701741088
B3 OFF :  634632224
B4 ON  :  433305632
B4 OFF :  366196768
C1 ON  :  819181600
C1 OFF :  953399328
C2 ON  :  148092960
C2 OFF :  80984096
C3 ON  :  550746144
C3 OFF :  684963872
C4 ON  :  282310688
C4 OFF :  416528416
D1 ON  :  1020508192
D1 OFF :  852736032
D2 ON  :  47429664
D2 OFF :  181647392
D3 ON  :  752072736
D3 OFF :  584300576
D4 ON  :  483637280
D4 OFF :  315865120

GROUPE ON  :  332642336
GROUPE OFF :  601077792  

Ces donc ces fameux codes qui constituent le protocole de communication d’OTIO. Et ce sont ces mêmes codes que nous allons faire manger à la libraire rc-switch qui pilotera notre émetteur.

On peut donc passer au programme:

/*
Codes commandes OTIO 433MHz Ref. 09HA02
Ces codes peuvent etre utilisés avec la libraire RC-Switch
http://code.google.com/p/rc-switch/
Contactez moi sur Twitter: @SpoonS2K
-----------------------------------------------

Mode: 32 bit
Protocol: 2

A1 ON  :  919844896
A1 OFF :  1054062624
A2 ON  :  248756256
A2 OFF :  30652448
A3 ON  :  651409440
A3 OFF :  785627168
A4 ON  :  382973984
A4 OFF :  517191712
B1 ON  :  970176544
B1 OFF :  903067680
B2 ON  :  97761312
B2 OFF :  231979040
B3 ON  :  701741088
B3 OFF :  634632224
B4 ON  :  433305632
B4 OFF :  366196768
C1 ON  :  819181600
C1 OFF :  953399328
C2 ON  :  148092960
C2 OFF :  80984096
C3 ON  :  550746144
C3 OFF :  684963872
C4 ON  :  282310688
C4 OFF :  416528416
D1 ON  :  1020508192
D1 OFF :  852736032
D2 ON  :  47429664
D2 OFF :  181647392
D3 ON  :  752072736
D3 OFF :  584300576
D4 ON  :  483637280
D4 OFF :  315865120

GROUPE ON  :  332642336
GROUPE OFF :  601077792
*/

#include <RCSwitch.h> // on inclus la bibliotheque RC-Switch

RCSwitch rf_cmd = RCSwitch(); // initialisation
const char rf_mode = 32; // mode 32 bits
const char rf_pin = 10; // l'emetteur est connecte au pin 10 de l'arduino
const char arduino_led =  13;  // led de la carte Arduino

void setup() {
 
  Serial.begin(9600);
  rf_cmd.enableTransmit(rf_pin); // emetteur sur la broche 10
  rf_cmd.setProtocol(2); // par defaut le protocole utilisé est le 1, mais les commandes OTIO utilisent le 2
  rf_cmd.setRepeatTransmit(15); // on repete la transmission 15 fois pour etre sur qu'elle arrive bien
  rf_cmd.setPulseLength(700); //
 
  pinMode(arduino_led, OUTPUT); // la broche de la led est configuree en sortie
  digitalWrite(arduino_led, LOW); // on la met à l'état bas
 
}

/* cette fonction va envoyer le code voulu via le transmetteur et faire flasher la led de la carte arduino a chaque commande*/
void rf_send(unsigned long rf_code) {
  digitalWrite(arduino_led, HIGH);
  rf_cmd.send(rf_code, rf_mode);
  digitalWrite(arduino_led, LOW);
}

void loop() {
 
  // cette fonction d'exemple allume et eteint tout les recepteurs grace au code de groupe toute les trois secondes
 
  rf_send(332642336);
  delay(3000);
 
  rf_send(601077792);
  delay(3000);
 
}

Je pense avoir assez commenté le code, mais n’hésitez pas au besoin. A vous d’intégrer ces petits bouts de code dans votre projet maintenant !

J’utilise ce montage chez moi avec des récepteurs OTIO 09HA07 sans soucis, la portée est d’environ un étage.