jeudi 6 juin 2019

Faire du bruit avec un ARDUINO





Faire du bruit avec un ARDUINO


Nous allons aborder ici les solutions matérielles permettant de générer des sons à partir d'un ARDUINO ou de tout autre processeur.

Tout d'abord il faut distinguer les différents types de transducteurs à notre disposition :
  • buzzer électromagnétique
  • buzzer piézo-électrique
  • haut-parleur
  • sirène
  • etc.
 Suivant l'utilisation, il va falloir orienter son choix de différentes manières :
  • alarme anti-effraction
  • alarme de signalisation
  • diffusion de musique
  • etc.

1. Alarme anti-effraction

Ces alarmes possèdent plus ou moins tous les éléments de sécurité nécessaires:
  • batterie de secours avec chargeur intégré
  • signalisation par flash
  • détection de coupure du câble
  • détection d'arrachement
  • détection d'ouverture du boîtier
Leur puissance sonore est importante, souvent au dessus de 100db à 1m. Elles sont en général équipées de leur propre processeur.
Les piloter à l'aide d'une carte ARDUINO peut s'avérer plus ou moins complexe.

Une sirène disposant d'une interface dédiée à une centrale d'alarme particulière proposera rarement une documentation précise permettant de la piloter à partir d'un ARDUINO.

2. Alarme de signalisation

Il ne s'agit plus d'alarme à caractère dissuasif mais de signalisation de défaut :
  • surveillance de température
  • surveillance de niveau d'eau
  • détection de proximité
  • etc.
Cette signalisation ne nécessite pas de volume sonore important ou des fonctions de sécurité élaborées.
Ici nous allons examiner différents transducteurs :
  • buzzer électromagnétique
  • buzzer piézoélectrique
  • haut-parleur
Le buzzer électromagnétique comporte un enroulement et un diaphragme permettant de générer un son.
Un buzzer électromagnétique peut avoir une impédance plus ou moins importante, et peut donc être alimenté avec des tensions très variables : 1.5V, 5V, ou 12V.
Il peut être équipé d'un oscillateur interne à fréquence fixe (buzzer actif).

Le buzzer piézoélectrique est constitué d'un diaphragme piézoélectrique.
Un buzzer piézoélectrique, même s'il est prévu pour fonctionner avec une tension nominale, accepte souvent une plage de tension importante : 3V à 20V par exemple.
Il peut également être équipé d'un oscillateur interne à fréquence fixe (buzzer actif).

Comment les distingue t-on ?
Sans une datasheet précise, c'est plus ou moins facile, car ils peuvent se présenter sous différentes formes :

Buzzer piézoélectrique

Buzzer piézoélectrique
Buzzer électromagnétique
Buzzer piézoélectrique
Buzzer électromagnétique

L'aspect ne suffit pas à dissiper le doute, spécialement en ce qui concerne les modèles cylindriques en diamètre 12mm.

Un fournisseur sérieux doit pouvoir préciser de quel type de transducteur il s'agit.
Souvent chez les revendeurs chinois seule la tension de service est précisée, et le type de produit : actif ou passif.

On possède parfois des buzzers dont on ne connaît pas les caractéristiques, par exemple des exemplaires récupérés sur de vieilles cartes mère de PC, qui sont souvent des buzzers électromagnétique passifs d'ailleurs.

Un moyen simple permet d'en déterminer le type : on peut brancher la borne marquée + sur une source de tension 5V et l'autre borne à la masse de l'alimentation.

Un buzzer actif produira un son, en général situé à environ 400Hz pour les gros modèles, 2KHz pour les petits modèles.

Un buzzer passif produira un simple click quand on le branche, et un autre click quand on le débranche, mais aucun son continu.

La mesure de la résistance à ses bornes peut indiquer également s'il s'agit d'un buzzer électromagnétique ou non. En général l'enroulement présente une résistance comprise entre 15Ω et 50Ω.
Les autres transducteurs, y compris électromagnétiques actifs ont une résistance beaucoup plus élevée.

2.1. Pilotage par un ARDUINO

Suivant le type de transducteur, le pilotage par l'ARDUINO sera différent :

La première chose à faire va être de savoir quel est le courant nécessaire pour l'alimentation.

2.1.1. Le buzzer
Un buzzer piézoélectrique consomme peu, aux alentour de 10mA. Il sera directement connectable sur une sortie digitale d'un ARDUINO.

Un buzzer électromagnétique, en fonction de l'impédance de sa bobine, va avoir besoin d'un courant plus ou moins important pour fonctionner, entre 30mA et plus de 100mA. Suivant le cas on pourra difficilement obtenir un volume sonore important en le connectant directement sur une sortie de l'ARDUINO, capable de sortir 40mA au grand maximum. On le commandera de préférence avec un transistor.

Les deux modes de commande sont représentés ci dessous :
L'utilité du transistor n'est pas liée au fait que le buzzer soit actif ou non. Cela dépend totalement du transducteur employé.

A noter : si l'on se contente d'un niveau sonore faible, il est parfaitement possible de brancher un buzzer électromagnétique passif directement sur une sortie de l'ARDUINO en intercalant une résistance adaptée, 100Ω par exemple.

Un buzzer électromagnétique passif n'a pas de polarité, même s'il a une borne marquée +. Tous les autres transducteurs sont polarisés.

2.1.2. Le haut-parleur
Un haut-parleur a une impédance faible, entre 4Ω et 16Ω. Il est bien entendu hors de question de la brancher en direct sur une sortie de microcontrôleur.

Si l'on se contente d'un niveau sonore faible, on peut le brancher en intercalant une résistance adaptée, comme pour un buzzer passif, 150Ω par exemple.

On peut aussi le brancher en utilisant le montage à transistor décrit précédemment. Le courant sera certainement beaucoup plus important qu'avec un buzzer passif. Choisir le transistor en conséquence. Un 2N2222 me semble être un minimum.

Enfin on peut aussi passer par un petit amplificateur fonctionnant en 5V (LM386, PAM8403, XPT8871 ou autre).

2.2. Pilotage logiciel

Suivant qu'il s'agit d'un buzzer actif ou non, le logiciel devra se comporter différemment :

Cas d'un buzzer actif. On se contente d'une simple commande en tout ou rien :

#define BUZZER 3

void setup(){
  pinMode(BUZZER, OUTPUT);
}

void loop(){

  digitalWrite(BUZZER, HIGH);
  delay(2000);
  digitalWrite(BUZZER, LOW);
  delay(2000);
}


Cas d'un buzzer passif ou d'un haut-parleur. Un signal carré est employé, en précisant sa fréquence :

#define BUZZER 3

void setup(){
  pinMode(BUZZER, OUTPUT);
}

void loop(){

  tone(BUZZER, 1500);
  delay(2000);
  noTone(BUZZER);
  delay(2000);
}


Avec un buzzer passif ou un haut-parleur on pourra donc générer des sons de fréquence variable.

3. Diffusion de musique

S'il est parfaitement possible de générer une mélodie avec la fonction tone() de l'ARDUINO, on peut difficilement appeler ça de la musique.
S'il s'agit de diffuser des sons sous forme de signaux carrés, on emploiera un buzzer passif ou un petit haut-parleur (voir paragraphes précédents).

3.1. La source sonore

Nous allons distinguer deux sources possibles :
  • l'ARDUINO lui-même
  • un module externe
Dans le premier cas, les sons sont stockés dans la mémoire de l'ARDUINO et transmis au haut-parleur sans ajout de matériel, hormis l'amplification bien sûr.
Dans le deuxième cas, les sons sont stockés sur une carte SD et transmis au haut-parleur à l'aide d'un module capable de reproduire des morceaux WAV, MP3, etc.

3.1.1. La librairie PCM
Vous connaissez peut être cette librairie : https://github.com/damellis/PCM
Il vous suffit de brancher un haut parleur sur la pin 11 d'un ARDUINO et de charger l'exemple playback pour entendre "Arduino duemillanove".

Le morceau à jouer est stocké sous forme d'un tableau binaire directement dan sle code.
Avec un ARDUINO NANO ou UNO vous pourrez stocker une séquence sonore de quelques secondes, avec une MEGA, vous aurez plus de place.

Il faut pour cela convertir votre échantillon avec un logiciel comme Audacity par exemple :
  • sélectionner le morceau
  • cliquer sur "Fichier / Exporter l'audio sélectionné"
  • choisir "Autres formats non compressés"
  • choisir "RAW (header-less)"
  • choisir "Unsigned 8 bits PCM"
Choisir un nom pour votre fichier, sample.raw par exemple.

Ensuite j'ai trouvé un petit logiciel permettant de convertir ce fichier binaire en fichier header .h : https://github.com/dparnell/bin2h
Il vous faudra installer le langage ruby.
C'est un petit script qu'il suffit de lancer comme ceci :

./bin2h sample.raw sample.h

Il n'y a plus qu'à inclure ce fichier .h dans votre source et à appeler la fonction adéquate :

startPlayback(data, sizeof(data));

J'ai essayé avec un aboiement de chien. Sincèrement ce n'est pas avec un son de cette qualité que vous allez faire peur au facteur.

D'autres versions de bin2h existent sous forme d'exécutable Windows, y compris avec interface graphique. Ne possédant pas de machine Windows et n'envisageant pas d'en posséder une, je n'ai pas pu essayer.


3.1.2. Le DFPlayer (YX5200)

Le DFPlayer est un module MP3 monophonique muni d'une carte µSD. Il est relié à l'ARDUINO par une ligne série et reçoit ses ordres par celle-ci.
Le son qu'il est capable de produire est excellent. Il dispose d'un DAC 24bits et supporte des taux d'échantillonnage jusqu'à 48KHz.
Son ampli (8002a) intégré délivre 3W.

J'en ai déjà parlé ici : https://riton-duino.blogspot.com/2018/04/dfplayer-mini-et-bruit-de-fond.html

Cette librairie est nécessaire : https://github.com/DFRobot/DFRobotDFPlayerMini

Remarque : le DFPlayer est monophonique si l'on utilise sa sortie haut-parleur, mais il est stéréophonique si l'on utilise ses sorties DAC_R et DAC_L, mais dans ce cas il faudra lui adjoindre un amplificateur stéréo.

3.1.3. Le KT403A
Le KT403A est un module MP3 stéréo muni d'une carte µSD. Il est relié à l'ARDUINO par une ligne série comme le DFPLAYER.
Il dispose d'un DAC 24bits et supporte des taux d'échantillonnage jusqu'à 48KHz.
Certains modules intègrent un ampli (8002a) de 3W. Le Groove par exemple en est dépourvu.

3.1.4. Le YX5300

Le YX5300 dispose également d'une carte µSD et d'une prise JACK pour un écouteur. Il est également relié à l'ARDUINO par une ligne série.

 3.1.5. Le VS1053

Le VS1053 est stéréo. Il fonctionne sur un BUS SPI et possède un DAC 18 bits. Il permet également l'enregistrement.

Il est disponible sous forme de module ou de carte shield pour UNO.



3.1.6. Le WT5001

Le WT5001 est stéréo. Il fonctionne également sur un BUS SPI. J'ai peu de données à son sujet, en particulier la résolution de son DAC.

3.2. L'amplification

Un amplificateur est nécessaire lorsque la puissance du module player est insuffisante, ou qu'il est dépourvu de sorties haut-parleur.

On peut également exploiter les sorties lignes stéréo d'un DFPLAYER en raccordant ses sorties DAC_L et DAC_R aux entrées d'un amplificateur stéréo. 

Il est hors de question de brancher les entrées d'un ampli sur des sorties haut-parleur d'un player. Le niveau est trop élevé.

L'audition est logarithmique. Il faut doubler la puissance sonore (ajouter 3 dB) pour que l'oreille perçoive une différence.

Voici un tableau de l'échelle de bruit en décibels, en watts, et le ressenti auditif :

Différence de niveau sonore Différence de puissance Ressenti auditif
3 dB multiplié par 2 Légère différence
5 dB multiplié par 3 Nette différence
10 dB multiplié par 10 Sensation d'avoir doublé le niveau sonore
20 dB multiplié par 100 Sensation d'avoir quadruplé le niveau sonore
50 dB multiplié par 100000 Le bruit semble 30 fois plus fort

Les amateurs ignorent généralement que la puissance appliquée à un haut-parleur n'a rien à voir avec le niveau sonore qu'il produit.

Les haut-parleurs ont un rendement très variable exprimé en décibels/1W. Un haut-parleur ayant un rendement de 90dB/1W recevant 1W de puissance produira le même niveau sonore qu'un haut-parleur ayant un rendement de 80dB/1W recevant 10W de puissance. Avant tout, si l'on cherche à augmenter le niveau sonore, le haut-parleur est le maillon principal à étudier.

Le silence absolu n'existe pas. Le niveau sonore à l'intérieur d'une habitation en zone rurale est souvent proche de 38dB à 40dB. Lorsque l'on écoute de la musique sur une chaîne stéréo en milieu domestique, le niveau sonore est d'environ 80dB à 90dB, alors qu'en concert il peut dépasser 100dB. Le seuil de la douleur est de 120dB.

3.2.1. Notions de base

Tout d'abord il convient d’expliquer certaines notions.

La puissance d'un amplificateur dépend avant tout de sa tension d'alimentation, mais également de sa technologie (bridgé ou non).

Qu'est ce qu'un amplificateur bridgé ? Ce type d'amplificateur comporte deux étages d'amplification :

On remarque que les deux amplificateurs ont leurs entrées inversées. Quand le signal d'entrée de A1 et A2 sera positif, leur sorties seront inversées :

A1 produira un signal positif, A2 produira un signal négatif ayant la même amplitude. La tension de sortie sera donc doublée, ce qui quadruplera la puissance, puisque la puissance est proportionnelle au carré de la tension (P = U² / R).

Par exemple un amplificateur PAM8403 est capable de produire 3W sous 5V.

La tension de sortie d'un amplificateur classique alimenté sous 5V ne peut dépasser la moitié de cette tension, car il faut bien que l'amplificateur produise des alternances positives et des alternances négatives.

Or avec 2.5V on produira une tension efficace de 2.5V / √2 = 1.77V

La puissance sur un haut-parleur de 4Ω sera de P = U² / R = 1.77² / 4 = 0.8W

Si l'amplificateur est bridgé la puissance sera quadruplée : 3.2W, ce qui correspond bien à la puissance annoncée du PAM8403. Donc le PAM8403 est un amplificateur bridgé, même si cela n'est pas exprimé clairement dans sa datasheet.

Autre exemple TDA8932 est capable de produire 15W en étant alimenté sous 24V. 

Si l'on considère une tension de pic de 12V il produira une tension efficace de 12V / √2 = 8.5V

La puissance sur un haut-parleur de 4Ω sera de P = U² / R = 8.5² / 4 = 18W, une valeur très proche des 15W annoncés.

Donc, le TDA8932 n'est pas un amplificateur bridgé.

3.2.2. Le choix

Si une puissance de quelques watts ne suffit pas, vous pourrez augmenter celle-ci à l'aide d'un amplificateur, en classe D de préférence.

On peut également vouloir ajouter un amplificateur stéréo si le lecteur (MPLAYER par exemple) est équipé d'un amplificateur monophonique.

On peut se contenter d'un PAM8403 5V 2x3W sur 4Ω :



Si l'on désire plus de puissance, le choix est vaste :
TPA3110 mono
TDA8932 mono

TPA3118 mono
TPA3116 mono

Il existe une quantité pharamineuse d'amplificateurs en classe D, capables de délivrer entre 5W et 1000W.

Ces amplificateurs ont l'énorme avantage de pouvoir fonctionner avec une alimentation simple, contrairement aux amplificateurs en classe B qui nécessitent généralement un rail d'alimentation positif et un rail négatif.
Ils supportent des tensions d'alimentation variées et existent également en version stéréo ou mono bridgé.

Les datasheets permettent de déterminer la tension d'alimentation en fonction de l'impédance du haut-parleur et de la puissance voulue.

Par exemple un TDA8932 mono bridgé (BTL) :
  • 4W pour une alimentation de 12V et un HP de 4Ω
  • 30W pour une alimentation de 22V et un HP de 8Ω
Si l'amplificateur choisi ne dispose pas d'un potentiomètre de réglage de volume, il faudra en intercaler un entre la sortie du module MP3 et son entrée :


Comme je l'explique ici, le réglage de volume logiciel est assez pénalisant en terme de rapport signal / bruit.

En fonction de la puissance désirée il est nécessaire de choisir une alimentation ayant une tension et une puissance adaptée :




Bien entendu, le haut-parleur choisi devra supporter également la puissance efficace demandée.

4. Conclusion

Après ce petit tour dans le monde de l'audio pour ARDUINO, j'espère vous avoir donné envie de faire du bruit ...


Cordialement
Henri


lundi 13 mai 2019

MYSENSORS : présentation




MYSENSORS : présentation


Cela fait un moment que je vous ponds des articles sur des dispositifs MySensors, mais je m'aperçois que je n'ai pas précisé  de quoi il s'agissait. Comme si cela coulait de source.
Allons-y, cela ne peut pas faire de mal ...

1. Terminologie

Dans cet article j'emploie des termes dont voici la signification :
  • contrôleur, serveur : le serveur domotique 
  • objet connecté, dispositif : les différents capteur, actionneurs du système
  • passerelle, gateway : le module chargé de communiquer avec les objets connectés

2. MySensors

La librairie MySensors permet de créer des objets connectés à partir de plateformes du type ARDUINO ou ESP8266 :
  • des capteurs
    • température
    • humidité
    • lumière
    • pression atmosphérique
    • tension, courant, puissance consommée
    • etc.
  • des actionneurs
    • relais
    • lampe
    • gradateur
    • prise
    • arrosage automatique
    • etc.

2.1. Les modules radio

Ces objets peuvent communiquer avec un contrôleur (serveur domotique) à l'aide de modules de communications extrêmement répandus :
  • NRF24L01 - 2.4GHz
  • RFM69 - 433Mhz, 868Mhz
  • RFM95 - 868Mhz
Le 433MHz et 868MHz sera un meilleur choix si les distances entre les objets et la passerelle sont importantes ou si des murs épais doivent être traversés.

2.1.1. Le NRF24L01
Le NRF24L01 est un module radio SPI communiquant sur la bande de fréquence 2.4GHz. Il existe en deux versions :
NRF24L01 à antenne imprimée
NRF24L01 amplifié à antenne externe (connecteur SMA)
Pour la passerelle on choisira de préférence le modèle amplifié qui aura une portée supérieure.

Si l'on désire déporter l'antenne sur l'arrière d'un boîtier, on peut utiliser une petite rallonge avec un connecteur femelle à visser :
Le NRF24L01 est tolérant au 5V sur ses entrées logiques. Voir ici :
https://riton-duino.blogspot.com/2018/08/le-nrf24l01-avec-arduino-uno-nano-et.html
On pourra donc le relier à une carte ARDUINO NANO ou UNO directement, sans avoir à insérer de circuit adaptateur de niveaux logiques.

2.1.2. Le RFM69 ou RFM95
Le RFM69 est un module radio SPI communiquant sur les bandes de fréquences 433MHz ou 868MHz.
Le RFM95 communique sur les bandes de fréquences 868MHz ou 915MHz.

Sauf erreur de ma part il me semble qu'émettre sur la bande 915MHz est interdit en France.

L'antenne de ces modules pourra être réalisée à l'aide d'un simple morceau de fil droit ou en forme de ressort :
Antenne 433MHz
On peut facilement réaliser soi-même ce genre d'antenne avec un simple fil de la longueur voulue, enroulé ou pas :
  • 433MHz : 16.5cm
  • 868MHz : 8.2cm
Attention le RFM69 et le RFM95 ne sont pas tolérants au 5V sur leurs entrées logiques. Il faudra utiliser soit une carte ARDUINO 3.3V (PRO MINI 8MHz) soit insérer un circuit adaptateur de niveaux 5V / 3.3V entre le module et la carte ARDUINO 5V.

La solution la plus simple est bien entendu la PRO MINI 3.3V 8MHz. Elle nécessitera toutefois l'utilisation d'un convertisseur USB / série 3.3V :
  • chargement du code
  • liaison avec la RASPBERRY PI s'il s'agit d'une passerelle
Pour une solution 5V UNO ou NANO il existe des solutions toutes faites :
RFM69 shield pour ARDUINO UNO

Ce shield n'a pas de connecteur SMA.

Carte breakout AdaFruit
On voit sur cette carte AdaFruit un connecteur (à droite) sur lequel on peut souder une antenne filaire (broche du milieu) soit un connecteur SMA :
Connecteur SMA (montage bord de PCB)
Sur ce connecteur on pourra visser une antenne SMA :
Si l'on désire déporter l'antenne sur l'arrière d'un boîtier, on peut utiliser une petite rallonge avec un connecteur femelle à visser :

Comme on le voit les solutions ne manquent pas, et permettent un intégration mécanique impeccable.

2.2. La passerelle

Le contrôleur ne communique pas directement avec les objets, il le fait à l'aide d'une passerelle de communication reliée au contrôleur par USB ou Ethernet.

Cette passerelle est constituée généralement d'une carte ARDUINO de base (UNO, NANO, MINI) et possède le même module de communication que les objets connectés.

Il est possible de faire cohabiter plusieurs passerelles sur le même contrôleur :
  • passerelle 2.4GHz NRF24L01
  • passerelle 433MHz RFM69
  • passerelle RFLINK 433MHz
  • etc.
La RAPBERRY PI possède 4 connecteurs USB.

Le RFLINK est une passerelle permettant la communication avec des objets connectés 433MHz du commerce (Chacon, Blyss, etc.).

ATENTION : j'ai remarqué que le RFM69 443MHz n'aime pas trop la proximité avec le RFLINK. Il faut les éloigner l'un de l'autre. Dans mon cas, 20cm ont suffit à assurer un fonctionnement correct.

2.3. Le contrôleur

Beaucoup de serveurs domotique peuvent communiquer avec une passerelle MySensors :
Sur le volet de gauche de ces différentes pages, vous trouverez la liste complète de ces contrôleurs.

Certains contrôleurs peuvent s'interfacer avec une passerelle MySensors nativement (Domoticz) ou à l'aide d'un plugin. Certains plugins sont payants (Jeedom).

Le contrôleur est installé en général sur une plateforme du type RAPBERRY PI. On peut bien évidemment l'installer sur un PC, mais à quoi bon consommer plus de 30W en permanence alors qu'une RAPBERRY PI fait la même chose en consommant 1 à 2W ?

Je ne vais pas ici refaire ce que d'autres ont déjà fait, mais vous aiguiller pour que vous puissiez trouver la documentation que vous recherchez, et en français quand c'est possible.

A la fin de cet article vous trouverez quelques conseils personnels, ainsi qu'un petit tuto sur l'installation d'une passerelle et de dispositifs MySensors sur Domoticz.

2.4. Le répéteur

Si les distances ne permettent pas à un capteur de communiquer avec la passerelle il est possible d'installer un répéteur entre les deux.
Le répéteur est constitué de la même manière que la passerelle, d'une carte ARDUINO basique (UNO, NANO, MINI)et d'un module radio.

Un nœud capteur ou actionneur peut parfaitement jouer le rôle de répéteur, c'est une option :

// Enabled repeater feature for this node
#define MY_REPEATER_FEATURE


Cet ajout dans le code suffit. On peut difficilement faire plus simple.

3. Liens utiles

3.1. MySensors.org

Comment relier votre module radio à votre ARDUINO :https://www.mysensors.org/build/connect_radio

La librairie :
https://www.mysensors.org/about/arduino

Comment construire votre passerelle :
https://www.mysensors.org/build/serial_gateway

Le code de la passerelle est bien entendu fourni. Il tourne sur une carte NANO, UNO ou MINI.

Les exemples avec différents capteurs et actionneurs :
https://www.mysensors.org/build

3.2. Domoticz

Le WIKI :
https://www.domoticz.com/wiki/Main_Page

Tutoriel Mysensors :
https://www.domoticz.com/wiki/MySensors

3.3. EasyDomoticz

Tutoriel installation Domoticz :
https://easydomoticz.com/domotique-comment-debuter/installation-de-domoticz-sur-raspberrylinux-debian/

Tutoriel Domoticz / MySensors :
https://easydomoticz.com/domoticz-arduino-mysensors-org-partie-2-la-passerelle/

3.4. JeeDom

Tutoriel Mysensors très détaillé :
https://www.jeedom.com/forum/viewtopic.php?t=5381

3.5. Domadoo

La présentation :
https://blog.domadoo.fr/48220-mysensors-presentation-protocole-domotique-open-source-arduino/

JeeDom :
https://blog.domadoo.fr/guides/jeedom-guide-dutilisation-de-mysensors/
https://blog.domadoo.fr/solution_domotique/jeedom/

3.6. OpenDomotech

Créer des capteurs :
http://opendomotech.com/creer-capteurs-mysensors-exemples-de-multi-sensors/

3.7. Anderson69

Tutoriel Domoticz :
https://anderson69s.com/2017/03/18/domoticz-domotique-diy/3/

3.8. DomotiqueInfo

Tutoriel Domoticz :
https://www.domotique-info.fr/2014/05/domoticz-installation-premiers-pas/

3.9. Asgard Diy

Beaucoup de projets et de tutos ici :
https://projetasgarddiy.fr/accueil/

3.10. Mon blog

Certains d'entre vous connaissent déjà mes projets :

Thermomètre sur batterie
Thermomètre / hygromètre sur batterie
Thermometre pour freezer
Détecteur de mouvement sur batterie

4. Quelques conseils personnels

4.1. Nommez vos sketches correctement

Lorsque vous développez un objet MySensors donnez-lui un petit nom explicite afin de pouvoir distinguer vos dispositifs dans l'interface graphique du contrôleur.

  sendSketchInfo("DS18B20 Temperature Sensor", "1.0");

4.2. Pensez à vos objets sur batterie

Si l'objet fonctionne sur batterie, pensez à envoyer régulièrement au serveur la capacité restante en pourcent :

  sendBatteryLevel(batteryLevel);

Ensuite sur le contrôleur, il vous sera possible d'écrire un script pour récupérer les niveaux de batterie de tous vos capteurs pour les contrôler et vous avertir en cas de défaillance, avec un buzzer ou un écran TFT par exemple.
Vous trouverez un script faisant ce travail dans ce projet :
(voir  10. Téléchargements : checkDevices.py dans l'archive téléchargée).
https://riton-duino.blogspot.com/2019/05/un-afficheur-pour-domoticz-ou-jeedom.html

Je parle bien de capacité batterie et non de tension. Une batterie LITHIUM-ION produit une tension de 4.2V à pleine charge et est considérée comme vide à 3V.
3V représentent 71% de la tension à pleine charge, alors qu'en terme de capacité cette tension équivaut à une capacité restante de presque 0%.

Dans ce projet de thermomètre sur batterie, la capacité de la batterie est calculée par rapport à sa tension :
https://riton-duino.blogspot.com/2018/01/un-thermometre-mysensors-sur-batterie.html

4.3. Pensez aux ESP8266

Il est aussi possible avec certains contrôleurs - avec Domoticz c'est le cas - de construire ses dispositifs sur une base d'ESP8266, en WIFI donc et de les ajouter à Domoticz en tant que dispositif virtuel.

Voir le paragraphe "Ajout de votre Sonoff dans Domoticz" :
https://projetasgarddiy.fr/2018/06/14/interrupteur-sonoff-dans-domoticz/

De plus les ESP8266 sont parfaitement capables de fonctionner en basse consommation.

Dans mon système domotique j'ai quatre catégories de dispositifs :
  • des dispositifs MySensors
  • des dispositifs ESP8266
  • des dispositifs du commerce (passerelle RFLINIK)
  • une télécommande infrarouge


5. Quelques trucs et astuces

5.1. Ajouter une passerelle MySensors à Domoticz



Ouvrez la page Réglages / Matériel.
Choisissez "MySensors Gateway USB" dans la liste "Type".
Cliquez sur "Ajouter".

5.2. Ajouter un dispositif MySensors à Domoticz

Démarrez simplement votre montage ARDUINO. Celui-ci s'identifiera automatiquement auprès du serveur.
Ouvrez la page "Réglages/Dispositifs".


Cliquez sur la petite flèche verte en face de votre dispositif pour pouvoir l'utiliser. Profitez-en pour lui donner un petit nom reconnaissable (icône crayon).

Si votre dispositif est un thermomètre il apparaîtra dans l'onglet "Températures" :


Si votre dispositif est un interrupteur ou une prise commandée il apparaîtra dans l'onglet "Interrupteurs" :


On voit sur cette image les 8 boutons correspondant à une télécommande.

A l'aide du bouton "Edit" vous allez pouvoir associer des actions à chaque interrupteur. Voir plus loin : 5.3. Les actions.

Les scripts sont écrits en langage PYTHON et envoient des requêtes JSON au serveur. Pour un serveur différent de DOMOTICZ l'implémentation sera probablement différente. Pour DOMOTICZ la doc est ICI : https://www.domoticz.com/wiki/Domoticz_API/JSON_URL%27s

Depuis les onglets "Températures" ou "Interrupteurs" cliquez sur l'étoile pour intégrer le dispositif au tableau de bord (la page d'accueil).

Il n'est pas obligatoire d'intégrer tous les dispositifs au tableau de bord, au risque de l'encombrer.


5.3. Les actions

A partir de l'onglet interrupteurs, cliquez sur le bouton "Edit" du dispositif que vous souhaitez configurer :


L'action peut être simplement une URL comme ici :

http://192.168.1.11/?pin=1&action=PULSE&delay=100

Il s'agit d'un télérupteur WIFI à base d'ESP8266 que j'ai développé. L'adresse IP est celle de l'ESP8266.

On peut agir également en envoyant une requête JSON à Domoticz.

http://192.168.1.134:8080/json.htm?type=command&param=switchlight&idx=328&switchcmd=On
http://192.168.1.134:8080/json.htm?type=command&param=switchlight&idx=328&switchcmd=Off

Cette commande active le dispositif 60 (le home-cinema comme on peut le voir sur la page "Réglages/Dispositifs". L'adresse IP est celle du serveur Domoticz.

Pour commander un autre dispositif il suffit de remplacer cet identifiant par un autre :
  • 52 : lumière étage
  • 11 : lampe sur pied 
  • 51 : lampe niche
  • etc.
Comme vous le voyez c'est assez simple.

Cette documentation vous sera très utile : https://www.domoticz.com/wiki/Domoticz_API/JSON_URL%27s

Des scripts autonomes peuvent être également développés. Voir quelques exemples ici : https://riton-duino.blogspot.com/2019/05/un-afficheur-pour-domoticz-ou-jeedom.html
Voir :  2.2. Les scripts

6. Conclusion

J'espère que cette petite présentation vous sera utile et a été suffisamment claire.
Un dernier conseil : fouillez et explorez, soyez curieux.


Cordialement
Henri

7. Mises à jour

14/05/2019 : 5. Quelques trucs et astuces
29/06/2019 : 5.3. Les actions
25/02/2020 : 2.1.1. Le NRF24L01
                     2.1.2. Le RFM69 ou RFM95

Un thermomètre MYSENSORS pour freezer


Un thermomètre MYSENSORS pour freezer


Le but de cet article est d'expliquer pas à pas la réalisation d'un thermomètre pour congélateur à base d'ARDUINO NANO, relié par radio à un serveur DOMOTICZ, à l'aide d'un module NRF24L01 2.4GHZ.


Un serveur DOMOTICZ (ou autre supporté par MYSENSORS) est nécessaire. Ce serveur domotique peut être installé avantageusement sur une plateforme du type RASPBERRY PI.
On lui connectera une passerelle MYSENSORS. Cette passerelle peut être construite avec une carte ARDUINO UNO ou NANO et un deuxième module NRF24L01.

Les liens suivants vous seront utiles :
https://riton-duino.blogspot.com/2019/05/mysensors-presentation.html 
https://easydomoticz.com/domoticz-arduino-mysensors-org-partie-2-la-passerelle
 

1. Les fonctionnalités

Le montage proposé permet de remonter au serveur DOMOTICZ la température mesurée tous les 1/4 d'heure.
Le serveur se charge de contrôler cette température et de signaler toute anomalie. Voir ici : https://riton-duino.blogspot.com/2019/05/un-afficheur-pour-domoticz-ou-jeedom.html
3 LEDs (verte, orange, rouge) permettent également de visualiser la température du congélateur :
  • vert : température < -18°
  • orange : température < -12°
  • rouge : température > -12°

2. Le matériel

Pour réaliser ce thermomètre, il vous faudra réunir :
  • un ARDUINO PRO MINI 8Mhz 3.3V
  • un module radio NRF24L01
  • un capteur de température DS18B20
  • une résistance de 4.7 K
  • une alimentation MEANWELL IRM-01-5
Le thermomètre est placé à l'extérieur du congélateur, et le DS18B20 est un modèle isolé sous gaine inox :
Celui-ci est placé à l'intérieur du congélateur et le câble passe entre la porte et le coffre, à l'arrière. Pour un congélateur armoire, on peut envisager de percer un petit trou de 5mm à l'arrière de celui-ci, et d'étanchéifier le passage de câble.


3. Le schéma

Le schéma est réalisé à l'aide de KICAD.

Pour récupérer le projet voir plus bas :  8. Téléchargements.
 

4. IDE ARDUINO

Il vous faudra bien entendu installer les bibliothèques ARDUINO suivantes :
Librairie MYSENSORS : https://www.mysensors.org/download

Dans votre IDE (arduino-cc 1.8.9 par exemple), dans le menu "Outils/Type de Carte" choisir "Arduino Nano". Dans le menu "Outils/Processeur" choisir "ATmega328p" ou "ATmega328p (old bootloader)".

5. Le code

Pour récupérer le projet voir plus bas :  8. Téléchargements.
 

6. Chargement

Après chargement dans l'ARDUINO, vous verrez d'abord les 3 LEDs s'allumer. Cela permet de vérifier qu'elles fonctionnent. Ensuite après connexion au serveur, vous verrez s'allumer la LED verte.

7. DOMOTICZ

Reportez-vous à ce document :

8. Téléchargements

Pour télécharger le projet : https://bitbucket.org/henri_bachetti/mysensors-freezer-thermometer

Cette page vous donne toutes les informations nécessaires :
https://riton-duino.blogspot.com/p/migration-sous-bitbucket.html

9. Retour d'expérience

Mon congélateur m'a lâché en début de semaine, après 32 ans de bons et loyaux services. Le compresseur est mort. J'avais raison de me méfier ... Ce montage m'a permis de le remplacer à temps.


Cordialement
Henri

10. Mises à jour

06/06/2019 : 9. Retour d'expérience

Un thermomètre / hygromètre MYSENSORS sur batterie


 Un thermomètre / hygromètre MYSENSORS

sur batterie



Le but de cette page est d'expliquer pas à pas la réalisation d'un thermomètre / hygromètre basse consommation à base d'ARDUINO PRO MINI, relié par radio à un serveur DOMOTICZ (ou autre supporté par MYSENSORS), à l'aide d'un module NRF24L01 2.4GHZ.

Ce projet fait suite à cet autre projet de thermomètre sur batterie, dans lequel je donne toutes les explications nécessaires.

Ce thermomètre / hygromètre adopte les mêmes composants à l'exception du capteur DS18B20, remplacé par un SHT31D.

Les liens suivants vous seront utiles :
https://riton-duino.blogspot.com/2019/05/mysensors-presentation.html 
https://easydomoticz.com/domoticz-arduino-mysensors-org-partie-2-la-passerelle


1. Le matériel

Pour réaliser ce thermomètre / hygromètre il vous faudra réunir :
  • un ARDUINO PRO MINI 8Mhz 3.3V
  • un module radio NRF24L01
  • un capteur de température SHT31D
  • une résistance de 1M 1%
  • une résistance de 330K 1%
  • un régulateur LM2936-3.3
  • un condensateur 10µF 6.3V
  • un accumulateur 3.7V LITHIUM-ION au format 16340 250mAH minimum avec son support pour PCB
Le PCB est prévu pour une batterie 16340 sur support mais il est tout à fait possible d'utiliser une LIPO fixée au PCB par de l'adhésif double face ou de la colle. La place disponible pour la batterie est de 24x42mm, ou 31x36mm, ce qui autorise un vaste choix.

2. Le schéma


Pour récupérer le projet voir plus bas :  4. Téléchargements.

Le schéma est presque identique à celui du thermomètre. Seul le capteur diffère.

Le routage est semblable et le PCB est monté dans le même boîtier Kradex-Z-123 :


3. Le code

Pour récupérer le projet voir plus bas :  4. Téléchargements.

La valeur de VREF dans le sketch est à adapter en fonction de la mesure réelle de la tension de la batterie.
La tension mesurée par l'ARDUINO est affichée dans le terminal. A comparer donc avec la valeur affichée par un bon multimètre.

4. IDE ARDUINO

Il vous faudra bien entendu installer les bibliothèques ARDUINO suivantes :
Librairie MYSENSORS : https://www.mysensors.org/download

5. Téléchargements

Pour télécharger le projet :  https://bitbucket.org/henri_bachetti/mysensors-battery-thermometer-hygrometer

Cette page vous donne toutes les informations nécessaires :
https://riton-duino.blogspot.com/p/migration-sous-bitbucket.html

6. Le coût

Le prix de ce dispositif est d'environ 16.70€
  • ARDUINO PRO MINI 8Mhz 3.3V : 1.5€
  • NRF24L01 : 1€
  • SHT31D : 1.80€
  • résistance de 1M 1% : 0.01€
  • résistance de 330K 1% : 0.01€
  • régulateur LM2936-3.3 : 0.70
  • condensateur 10µF 6.3V : 1.20€
  • accumulateur 3.7V LITHIUM-ION au format 16340 250mAH minimum avec son support pour PCB : 8€
  • boîtier Kradex-Z-123 : 2.50€
Il est à noter que les composants proviennent de AliExpress, sauf la batterie (Gotronic).


Cordialement
Henri

6. Mises à jour

29/06/2019 : 3. Le code

dimanche 12 mai 2019

Un afficheur TFT pour DOMOTICZ ou JEEDOM



Un afficheur pour DOMOTICZ ou JEEDOM


Nous allons décrire dans cet article la réalisation d'un module d'affichage d'informations pour un serveur domotique.

Cet afficheur est placé dans mon salon, dans une niche  bien en vue, à un endroit de passage. Il se révèle bien plus pratique que de sortir le smartphone de la poche pour accéder à la page d'accueil de DOMOTICZ.
Les informations affichée sont celles que j'ai choisi et seulement celles-là. Il serait possible bien sûr de développer une application sur le smartphone pour faire la même chose, mais ce n'est pas mon choix.

Le serveur domotique peut être de n'importe quel type parmi la longue liste de contrôleurs supportés par la librairie MYSENSORS :
  • Domoticz
  • Freedomotic
  • HomeAssistant
  • HomeGenie
  • Jeedom
  • etc. 
Les liens suivants vous seront utiles :
https://riton-duino.blogspot.com/2019/05/mysensors-presentation.html 
https://easydomoticz.com/domoticz-arduino-mysensors-org-partie-2-la-passerelle

1. Les fonctionnalités

Les fonctionnalités de ce module sont multiples :
  • mesure de température
  • mesure d'humidité
  • affichage de la date
  • affichage de l'heure
  • affichage de 3 températures intérieures
  • affichage de l'humidité intérieure
  • affichage de la température extérieure
  • affichage de l'humidité extérieure
  • affichage de la température d'un congélateur
  • affichage de messages d'erreurs
  • surveillance de la température d'un congélateur
  • surveillance de la capacité des batteries
Le module est bien sûr relié par radio à un serveur DOMOTICZ ou autre, à l'aide d'un module NRF24L01 2.4GHZ.

La surveillance de la température du congélateur et de la capacité des batteries n'est pas directement assurée par le module mais par un script sur le contrôleur.

La signalisation d'un défaut de température du congélateur ou d'un défaut batterie est assurée par un buzzer. Celui-ci produit 4 beeps espacés de 400ms, répétés toutes les 10 secondes. La limite de température est fixée à -18°, la limite de capacité batterie à 20%.

La signalisation est également assurée par l'affichage d'un message afin de préciser d'où provient l'erreur. Si le message envoyé par le serveur commence par "Error: ", celui-ci est affiché en jaune sur fond rouge, sinon il est affiché en bleu sur fond gris.

Pour modifier les formats des informations affichées ou les paramètre de surveillance il n'est pas nécessaire de modifier le sketch de l'ARDUINO. Cela peut se faire directement sur le serveur, en modifiant quelques scripts PYTHON (voir plus bas :  2.2. Les scripts).

Seuls les emplacements des informations sur l'écran et leur couleur sont en dur dans le sketch ARDUINO.

Le sketch ARDUINO peut également se servir de la ligne d'affichage d'erreur pour afficher ses propres messages d'erreur, par exemple dans le cas d'un problème de communication avec la gateway.

Pour terminer le backlight de l'écran TFT peut être allumé automatiquement à l'approche d'une personne à l'aide d'un détecteur infrarouge. Il s'éteindra au bout de 20 secondes.
Cette possibilité est une option. Elle permet de consommer 50mA de moins.

Je ne pense pas qu'un écran TFT ait une durée de vie limitée. L'utilité du screen-saver est discutable.
Les 50mA économisés entraînent une économie de 25 centimes par an, c'est à dire pas grand chose.
C'est plus le côté fun qui m'a décidé à implémenter cette fonction.


2. L'architecture

Le schéma suivant représente l'architecture globale du système :



Il y a pas mal de capteurs, un dimmer, des prises connectées, y compris en 433MHz.
La partie qui nous intéresse se limite à :
  • la passerelle MYSENSORS (GATEWAY)
  • le module TFT + thermomètre / hygromètre au rez-de-chaussée
  • le thermomètre à l'étage
  • le thermomètre du garage
  • le thermomètre / hygromètre extérieur
  • le thermomètre du congélateur
La température et l'humidité du rez de chaussée sont fournies par le module d'affichage lui-même.
Les autres données sont fournies par d'autres modules reliés au serveur DOMOTICZ :
  • température à l'étage :
    • un ARDUINO PRO MINI
    • un module MCP9808 ou DS18B20
  • température du garage
    • un ARDUINO PRO MINI
    • un module DS18B20
  • température et humidité extérieures :
    • un ARDUINO PRO MINI
    • un module DHT31D
  • température du congélateur :
    • un ARDUINO NANO
    • un capteur DS18B20
Les différents modules sont décrits ici :
https://riton-duino.blogspot.com/2018/01/un-thermometre-mysensors-sur-batterie.html
https://riton-duino.blogspot.com/2019/05/un-thermometre-hygrometre-mysensors-sur.html
https://riton-duino.blogspot.com/2019/05/un-thermometre-mysensors-pour-freezer.html

Le module TFT demande au serveur les informations de date et heure et les affiche en haut de l'écran.

Comme il possède ses propres capteurs de température et humidité, ll affiche de lui-même ces informations, tout en les transmettant au serveur bien sûr.

Il affiche également 4 lignes d'information que des scripts sur le serveur se chargent de mettre à jour en continu.

2.1. Le serveur

Le serveur dans cet exemple est un contrôleur DOMOTICZ sur une RASPBERRY PI 2.
Chaque capteur s'identifie au démarrage auprès du contrôleur. Un capteur peut présenter au serveur plusieurs devices enfants :
  • le module TFT en présente 8 :
    • la température
    • l'humidité
    • la ligne d'information 1 (température à l'étage)
    • la ligne d'information 2 (température du garage)
    • la ligne d'information 3 (température et humidité extérieure)
    • la ligne d'information 4 (température du congélateur)
    • la ligne d'information 5 (erreurs)
    • le buzzer
  • le thermomètre extérieur en présente 2 :
    • la température
    • l'humidité
  • les autres capteurs en présentent un seul
    • la température

2.2. Les scripts

Sur le serveur un certain nombre de scripts sont lancés chaque minute par le daemon CRON :
  • un script de récupération de la température à l'étage
  • un script de récupération de la température du garage
  • un script de récupération de la température et humidité extérieure
  • un script de récupération de la température du congélateur
  • un script de surveillance de la température du congélateur et de la capacité des batteries
Les scripts sont écrits en langage PYTHON et envoient des requêtes JSON au serveur. Pour un serveur différent de DOMOTICZ l'implémentation sera probablement différente. Pour DOMOTICZ la doc est ICI : https://www.domoticz.com/wiki/Domoticz_API/JSON_URL%27s

Lorsque l'on développe on que l'on modifie un script pour DOMOTICZ, on peut parfaitement le tester sur son PC, avant de le transférer vers le serveur.

Chaque script de récupération de données se contente de mettre à jour les données du device dont il a la charge :
Le script de récupération de la température à l'étage met à jour la ligne d'information 1 du périphérique TFT.
Le script de récupération de la température du garage met à jour la ligne d'information 2 du périphérique TFT.
Le script de récupération de la température et de l'humidité extérieure met à jour la ligne d'information 3 du périphérique TFT.
Le script de récupération de la température du congélateur met à jour la ligne d'information 4 du périphérique TFT.
Le script de surveillance de la température du congélateur et de la limite de capacité des batteries met à jour le device buzzer (ON ou OFF) et la la ligne d'information 5 du périphérique TFT.

Le script de surveillance gère différents messages :
  • Everything is fine : tout va bien
  • Error: Freezer Temp : défaut de température du congélateur
  • Error: Up Therm Batt : batterie thermomètre de l'étage faible
  • Error: Out Therm Batt : batterie thermomètre extérieur faible
  • Error: Motion Batt : batterie du détecteur de présence faible
Les chaînes de caractères affichées peuvent être facilement modifiées dans les scripts.
Auparavant la température et l'humidité extérieures étaient affichées sur les lignes 2 et 3.
Dernièrement j'ai regroupé ces deux informations sur la ligne 3,  et ajouté la température du garage sur la ligne 2, sans modifier le code ARDUINO !

La limite de température pour le congélateur est fixée à -18°, facilement modifiable dans le script PYTHON (checkDevices.py).
La limite de capacité des batteries est fixée à 20%, facilement modifiable dans le script PYTHON (checkDevices.py).
C'est tout l'intérêt de la solution. Pour modifier les formats des informations affichées ou les paramètres de surveillance il n'est pas nécessaire de modifier le sketch de l'ARDUINO.
Pour récupérer ces scripts voir plus bas :  10. Téléchargements.

Ci dessous la ligne que vous ajouterez à votre fichier /etc/crontab :

* * * * *    root    /bin/bash /home/pi/update-display.sh

Les scripts PYTHON présents dans le répertoire domoticz de la repository doivent être installés sous /home/pi.
Voir :  10. Téléchargements

3. Le matériel

Pour réaliser ce module, il vous faudra réunir :
  • un ARDUINO NANO
  • un module radio NRF24L01
  • un afficheur 2.8 pouces ILI9341
  • un capteur de température DHT31D
  • 5 résistances de 10K
  • une alimentation 5V mini-USB
  • un buzzer 5V
  • un détecteur de mouvement MH-SR602
Le buzzer est un modèle 5V actif :


Il est commandé en tout ou rien par une sortie de l'ARDUINO, sans PWM.
On peut également utiliser un buzzer passif du genre de ceux que l'on trouve dans un PC, mais il faudra modifier légèrement le code (utilisation de tone() et noTone() :
Le détecteur de mouvement MH-SR602 est optionnel :
L'alimentation que j'ai utilisé est un petit chargeur 5V pourvu d'un connecteur miniUSB mais on peut bien évidemment alimenter la NANO par sa broche 5V et une alimentation de quelques watts.
Le montage complet consomme 100mA, et 50mA avec le backlight du TFT éteint.

4. Le schéma



Le schéma est réalisé à l'aide de KICAD.

Pour récupérer le projet voir plus bas :  10. Téléchargements.

Si l'option d'extinction automatique de l'écran TFT n'est pas utile, il suffit de ne pas mettre en place le transistor Q1 ainsi que les deux résistances R6 et R7, et de souder un fil entre les broches 2 et 3 du MOSFET (drain et source).
Le MH-SR602 dans ce cas est inutile.

6. IDE ARDUINO

Il vous faudra bien entendu installer les bibliothèques ARDUINO suivantes :
Librairie MYSENSORS : https://www.mysensors.org/download

Dans votre IDE (arduino-cc 1.8.9 par exemple), dans le menu "Outils/Type de Carte" choisir "Arduino Nano". Dans le menu "Outils/Processeur" choisir "ATmega328p" ou "ATmega328p (old bootloader)".
 

7. Le code

Pour récupérer le projet voir plus bas :  10. Téléchargements.

L'option d'extinction automatique de l'écran TFT est activable dans le sketch :

// uncomment to use motion detector
//#define SCREEN_SAVER

 

8. Chargement

Après chargement dans l'ARDUINO, vous verrez s'afficher la température et humidité. Ensuite après la connexion au serveur, l'heure s'affichera, ainsi que les autres informations.

9. DOMOTICZ

Reportez-vous à ce document :

10. Téléchargements

Pour télécharger le projet : https://bitbucket.org/henri_bachetti/mysensors-tft-temp-hum-sensor

Cette page vous donne toutes les informations nécessaires :
https://riton-duino.blogspot.com/p/migration-sous-bitbucket.html

 
Cordialement
Henri

11. Mises à jour

12/05/2019 : refactoring des scripts PYTHON DOMOTICZ
14/05/2019 : ajout script de test de la capacité des batteries
12/04/2020 : ajout température du garage (scripts PYTHON)
13/04/2020 : ajout extinction automatique du backlight TFT