Catégories: Domotique, Circuits microcontrôleurs
Nombre de fois vus: 17351
Commentaires sur l'article: 0
Télécommande du microcontrôleur: télécommande IR, Arduino, ESP8266, 433 MHz
La question de la télécommande ou de la télécommande des équipements électriques a toujours été et restera pertinente, qu'il y ait ou non des outils d'automatisation dans le système. Pour l'organisation de la télécommande, peu importe si microcontrôleur, tout dépend des fonctions nécessaires affectées au périphérique géré. Dans cet article, vous apprendrez des informations générales sur les méthodes de contrôle à distance d'un microcontrôleur.

Espèce
Il existe deux principaux types de communication à distance:
Filaire. Lorsque la commande des actionneurs situés dans une pièce (ou non la pièce) est effectuée à partir du panneau de commande ou d'un poste de bouton situé à un autre endroit. Dans ce cas, une connexion par fil électrique des circuits de commande et des actionneurs (relais, contacteurs, qui comprennent des mécanismes, tels que des moteurs ou des systèmes, par exemple, l'éclairage) est fournie.
Sans fil. Dans ce mode de réalisation, aucune connexion électrique des circuits de commande et de direction n'est requise. Dans les circuits sans fil, il y a deux appareils: un émetteur ou une télécommande (RC) et un récepteur, qui fait partie du circuit contrôlé. Le contrôle sans fil, à son tour, est courant dans deux versions:
-
Par signal optique. De tels systèmes se trouvent dans chaque maison, vous contrôlez donc le fonctionnement du téléviseur, de la climatisation et d'autres appareils ménagers.
-
Par signal radio. Il existe déjà un certain nombre d'options: Bluetooth, ZigBee, Wi-Fi, émetteurs-récepteurs 433 MHz et d'autres variantes à ce sujet.
Il convient de noter qu'avec des moyens techniques modernes, vous pouvez contrôler le microcontrôleur, à la fois depuis la télécommande et via Internet sur un réseau local ou avec un accès de n'importe où dans le monde.
Télécommande infrarouge
Nous commençons notre réflexion par la version la plus simple et la plus classique. Contrôle de l'appareil en transmettant un code de la séquence de scintillement de la LED IR au récepteur optique installé sur l'appareil. Il convient de noter que le spectre infrarouge n'est pas visible à l'œil humain, mais la plupart des caméras photo et vidéo le voient.
Comme la plupart des caméras voient l'infrarouge, vous pouvez vérifier facilité d'entretien des télécommandes. Pour ce faire, pointez simplement la télécommande de sorte que l'émetteur regarde dans l'appareil photo et appuyez sur les boutons. Habituellement, une lueur blanche avec une teinte violette est visible à l'écran.
Cette commande a un inconvénient évident - vous devez pointer la télécommande vers le récepteur. Et si les piles de la télécommande sont épuisées, vous devez également viser, car les opérations deviennent de moins en moins.
Les avantages sont la simplicité, une maintenabilité élevée, à la fois l'émetteur et le récepteur. Vous pouvez trouver les détails en démontant les télécommandes et téléviseurs cassés afin de les appliquer dans vos propres projets.
Un capteur typique est le suivant. Étant donné que le signal optique est reçu, il est nécessaire d'exclure le déclenchement de sources de lumière étrangères, telles que le soleil, les lampes d'éclairage et autres. Il convient également de noter que le signal infrarouge est reçu principalement à une fréquence de 38 kHz.

Voici les spécifications de l'un des capteurs IR:
-
fréquence porteuse: 38 kHz;
-
tension d'alimentation: 2,7 - 5,5 V;
-
consommation de courant: 50 μA.
Et son schéma de connexion:

La télécommande peut être utilisée par toute personne ayant un principe de fonctionnement similaire, les télécommandes de:
-
Téléviseurs
-
Lecteurs DVD
-
magnétophones radio;
-
des appareils d'éclairage modernes, tels que les lustres intelligents et les bandes LED et plus encore.

Voici un exemple d'utilisation d'un tel capteur avec Arduino:

Pour que le microcontrôleur, dans notre cas Arduin, comprenne le signal du capteur, vous devez utiliser la bibliothèque IRremote.h. Pour un exemple de lecture d'un signal provenant d'un capteur, nous donnerons un code pour les reconnaître en lisant le port série du microcontrôleur depuis l'IDE Arduino:
#include "IRremote.h" // connecte la bibliothèque pour travailler avec le signal IR.
IRrecv irrecv (2); // indique la sortie à laquelle le récepteur est connecté
résultats decode_results;
void setup () {
Serial.begin (9600); // définir la vitesse du port COM
irrecv.enableIRIn (); // démarrer la réception
}
boucle vide () {
if (irrecv.decode (& results)) {// si les données sont venues
Serial.println (results.value, HEX); // imprimer les données
irrecv.resume (); // accepte la commande suivante
}
}
Par conséquent, lorsque vous flashez l'arduino et commencez à "briller" dans le récepteur avec la télécommande, nous verrons l'image suivante sur le moniteur du port série:

Ce sont des codes qui envoient des boutons sous forme hexadécimale. Ainsi, vous pouvez savoir quel bouton de la télécommande envoie le code, il n'y a donc pas d'exigences spécifiques pour la télécommande utilisée, car vous pouvez en reconnaître et en associer. Soit dit en passant, c'est une idée pour un projet de télécommande universelle entraînée, telles qu'elles ont été vendues plus tôt. Mais maintenant, à l'ère d'Internet, la quantité de technologie contrôlée de cette manière diminue chaque année.
Et avec ce code, vous pouvez reconnaître les signaux et gérer la charge:
#include "IRremote.h"
IRrecv irrecv (2); // indique la sortie à laquelle le récepteur est connecté
résultats decode_results;
void setup () {
irrecv.enableIRIn (); // démarrer la réception
}
boucle vide () {
if (irrecv.decode (& results)) {// si les données sont venues
switch (results.value) {
cas 0xFFA857:
digitalWrite (13, HIGH);
casser;
cas 0xFFE01F:
digitalWrite (13, LOW);
casser;
} irrecv.resume (); // accepte la commande suivante } }
L'essentiel dans le code est la reconnaissance via la fonction Switch, parfois ils sont appelés «switchcase». C'est un analogue des branches if, mais il a une forme de perception plus belle. Cas - ce sont les options, "si un tel code arrive, alors ..." Le code contrôle 13 broches pour certains signaux. Permettez-moi de vous rappeler que la LED intégrée sur la carte ARDUINO est connectée à la broche 13, c'est-à-dire l'auteur du code contrôlait la LED.
Vous pouvez contrôler n'importe quoi en utilisant une broche numérique haute ou basse via un transistor de puissance (que nous avons couvert dans deux articles plus tôt ici et ici) avec une charge en courant continu, ou via un triac et un pilote pour celui-ci avec une charge en courant continu, vous pouvez également utiliser des relais et des contacteurs, en général, tout un champ d'imagination.
Réception et transmission de signaux radio
Pour une utilisation avec des microcontrôleurs, les émetteurs avec des fréquences de fonctionnement de 433 MHz ou 315 MHz sont communs, il peut y avoir d'autres fréquences, selon la carte spécifique, mais ce sont les plus courantes. Le système se compose de deux nœuds - un récepteur et un émetteur, ce qui est logique.

Dans l'image, l'émetteur est montré en haut à droite et le récepteur en bas à gauche. Leur nom pour la recherche: Module radio 433 MHz, MX-05V / XD-RF-5V (récepteur et émetteur).
Le brochage, comme c'est souvent le cas dans les modules, est peint sur la carte, comme l'émetteur:

Le récepteur n'est pas si évident, car les données sur la carte de circuit imprimé sont écrites sur deux broches, en fait l'une d'entre elles n'est pas utilisée.

Par exemple, nous donnons un schéma et un code pour allumer la LED d'une carte Arduino connectée à une autre carte similaire, sans fils. Le récepteur et l'émetteur sont connectés de la même manière aux deux cartes:

Périphérique
Module
Broches Arduino
Récepteur
Vcc
GND
DONNÉES
+ 5V
GND
2
Émetteur
Vcc
GND
DONNÉES
+ 5V
GND
2
Ensuite, vous devez connecter la bibliothèque RCswitch.h à l'IDE Arduino
Pour commencer, nous écrivons le programme de l'émetteur:
#include
RCSwitch mySwitch = RCSwitch(); // crée un objet pour travailler avec le front-end
void setup () {
mySwitch.enableTransmit(2); // indique au programme à quelle broche le canal d'information est connecté
}
boucle vide () {
mySwitch.send (B0100,4);
retard (1000);
mySwitch.send (B1000, 4);
retard (1000);
}
L'émetteur peut transmettre du code binaire, mais ses valeurs peuvent être écrites sous forme décimale.
mySwitch.send (B0100,4);
et
mySwitch.send (B1000, 4);
ce sont les commandes de transfert, mySwitch est le nom de l'émetteur que nous avons indiqué au début du code, et send est la commande de transfert. Les arguments pour cette fonction sont:
Nom de l'émetteur.envoyer (valeur, taille du paquet d'impulsions envoyées à l'air);
B1000 - le symbole B - signifie binaire, il pourrait être écrit comme le nombre 8, c'est-à-dire en notation décimale. Une autre option était d'écrire «1000» sous forme de chaîne (entre guillemets).
Ensuite, nous écrivons le code du récepteur (il est flashé sur la carte à laquelle le récepteur est connecté):
#include
RCSwitch mySwitch = RCSwitch ();
void setup () {
pinMode (3, SORTIE);
mySwitch.enableReceive (0);
}
boucle vide () {
if (mySwitch.available ()) {
int value = mySwitch.getReceivedValue ();
si (valeur == B1000)
digitalWrite (3, HIGH);
sinon si (valeur == B0100)
digitalWrite (3, LOW);
mySwitch.resetAvailable ();
}
}
Ici, nous déclarons que la valeur acceptée est stockée dans la variable Value dans la chaîne mySwitch.getReceivedValue (). Et le fait que le récepteur est connecté à la 2ème broche est décrit ici par mySwiitch.enableReceive (0).
Le reste du code est élémentaire, si le signal 0100 est reçu, alors la broche numéro 3 est réglée sur haut (log. Unité), et si 1000, puis sur bas (log. Zéro).
Intéressant:
Dans la ligne mySwitch.enableTransmit (0), nous indiquons au programme que le récepteur est connecté à la 2ème broche et que le mode de réception est activé. Les plus attentifs ont remarqué que l'argument de cette méthode n'est pas la broche numéro "2", mais "0", le fait est que la méthode enableTransmit (numéro) n'accepte pas le numéro de broche, mais le numéro d'interruption, mais dans atmega328, qui est mis sur Arduino Uno, nano, promini et plusieurs autres, sur la deuxième broche (broche PortD PD2) se bloque une interruption avec le numéro zéro. Vous pouvez le voir dans le brochage Atmega applicable à la carte Arduino, les numéros de broche sont écrits dans des cases roses.

Cette méthode de transmission et de réception est très simple et bon marché; une paire de récepteur et d'émetteur coûte environ 1,5 $ au moment de la rédaction.
Wi-Fi, Adruino et ESP8266
Pour commencer, ESP8266 est un microcontrôleur avec prise en charge matérielle du Wi-Fi, Il est vendu comme une puce séparée et soudé à la carte, comme un Arduino. Il a un noyau 32 bits, il est programmé via un port série (UART).
Les cartes ont généralement 2 broches GPIO libres ou plus et il y a toujours des broches pour le firmware, cela doit être fait via un adaptateur USB vers série. Géré par les équipes AT, une liste complète des commandes peut être trouvée sur le site officiel ESP8266 et sur github.

Il existe une option plus intéressante, les cartes NodeMCU, elles ont la capacité de flasher via USB, car Un convertisseur USB-UART est déjà sur la carte, généralement fabriqué sur une puce CP2102. Node MCU est un firmware, quelque chose comme un système d'exploitation, un projet basé sur le langage de script Lua.

Le firmware peut exécuter des scripts Lua, soit en les acceptant sur un port série, soit en reproduisant des algorithmes stockés dans la mémoire Flash.
Soit dit en passant, il a son propre système de fichiers, bien qu'il n'y ait pas de répertoires, c'est-à-dire seuls les fichiers sans dossiers. En mémoire, non seulement les scripts peuvent être stockés, mais aussi diverses données, c'est-à-dire la carte peut stocker des informations enregistrées, par exemple, à partir de capteurs.
La carte fonctionne avec des interfaces:
-
1 fil;
-
I2C;
-
SPI
-
UART.
Il a une multitude de fonctions:
-
module de cryptage;
-
planificateur de tâches;
-
horloge en temps réel;
-
protocole de synchronisation d'horloge via Internet SNTP;
-
minuteries;
-
Canal ADC (un);
-
lire des fichiers audio;
-
générer aux sorties un signal PWM (jusqu'à 6);
-
utilisez des sockets, FatFS est pris en charge, c'est-à-dire que vous pouvez connecter des cartes SD, etc.

Et voici une courte liste de ce avec quoi le conseil peut travailler:
-
accéléromètres ADXL345;
-
Magnétomètres HMC5883L
-
gyroscopes L3G4200D;
-
capteurs de température et d'humidité AM2320, DHT11, DHT21, DHT22, DHT33, DHT44;
-
capteurs de température, humidité, pression atmosphérique BME280;
-
capteurs de température et de pression atmosphérique BMP085;
-
de nombreux écrans fonctionnant sur les bus I2C, SPI. Avec la possibilité de travailler avec différentes polices;
-
Les écrans TFT ILI9163, ILI9341, PCF8833, SEPS225, SSD1331, SSD1351, ST7735;
-
LED intelligentes et contrôleurs LED - WS2812, tm1829, WS2801, WS2812.
En plus d'utiliser le langage Lua, vous pouvez programmer la carte à partir de l'IDE Arduino.
L'ESP8266 peut être utilisé comme appareil autonome ou comme module de communication sans fil avec Arduino.

L'examen de toutes les fonctions et caractéristiques de cette carte prendra toute une série d'articles.
Cette carte est donc une excellente option pour le contrôle à distance via le Wi-Fi. Les possibilités sont énormes, par exemple, pour utiliser un smartphone comme panneau de commande pour une machine radiocommandée ou un quadricoptère de fortune, contrôle d'éclairage à distance, jusqu'à organiser des réseaux pour toute la maison et gérer chaque prise, lampe, etc. si seulement il y avait assez de broches.
La façon la plus simple de travailler avec le microcontrôleur est d'utiliser une seule carte ESP8266. Voici un schéma d'une simple prise wi-fi.

Pour assembler ce circuit, vous avez besoin d'un module relais ou d'un relais conventionnel connecté à une broche via un transistor. Vous avez d'abord besoin d'un programme pour un smartphone RoboRemoFree ,. Dans ce document, vous allez configurer la connexion à l'ESP et créer une interface pour contrôler la prise. Pour décrire comment l'utiliser, vous devez écrire un article séparé, alors omettons ce matériel pour l'instant.
Dans ESP, nous chargeons le firmware suivant, via le programme ESPlorer (programme pour travailler avec la carte)
--Wifi AP Settup
wifi.setmode (wifi.STATIONAP)
cfg = {}
cfg.ssid = "ESPTEST"
cfg.pwd = "1234567890"
wifi.ap.config (cfg)
- Définir le mode Pin
my_pin_nummber = 1
--gpio.mode (my_pin_nummber, gpio.OUTPUT)
gpio.mode (my_pin_nummber, gpio.OPENDRAIN)
--Créer un serveur
sv = net.createServer (net.TCP)
récepteur de fonction (sck, data)
si string.sub (data, 0, 1) == "1" then
--gpio.write (my_pin_nummber, gpio.HIGH)
gpio.write (my_pin_nummber, gpio.LOW)
d'autre si string.sub (data, 0, 1) == "0" alors --gpio.write (my_pin_nummber, gpio.LOW) gpio.write (my_pin_nummber, gpio.HIGH) fin fin imprimer (données) fin si sv alors sv: écouter (333, fonction (conn) conn: on ("recevoir", récepteur) conn: send ("Bonjour!") fin) fin --Créer un serveur HTTP http = net.createServer (net.TCP) fonction receive_http (sck, data) imprimer (données) requête locale = string.match (données, "([^ \ r, \ n] *) [\ r, \ n]", 1) si request == 'GET / on HTTP / 1.1' alors --gpio.write (my_pin_nummber, gpio.HIGH) gpio.write (my_pin_nummber, gpio.LOW) fin si request == 'GET / off HTTP / 1.1' alors --gpio.write (my_pin_nummber, gpio.LOW) gpio.write (my_pin_nummber, gpio.HIGH) fin sck: on ("envoyé", fonction (sck) sck: close () collectgarbage () end) réponse locale = "HTTP / 1.0 200 OK \ r \ nServeur: NodeMCU sur ESP8266 \ r \ nContenu-Type: texte / html \ r \ n \ r \ n" .. "
"
NodeMCU sur ESP8266
" .."
" ..
" "
sck: envoyer (réponse)
fin
si http alors
http: écouter (80, fonction (conn)
conn: on ("recevoir", recevoir_http)
fin)
fin
imprimer ("Démarré".)
Vous pouvez maintenant contrôler le programme soit à partir du programme Roboremo, soit via n'importe quel navigateur Web, pour cela, vous devez taper l'adresse IP de la carte dans la barre d'adresse en mode Wi-Fi, il 192.168.4.1.
Il y a un extrait dans le code:
"
"
NodeMCU sur ESP8266
" ..
"
" ..
" "
Il s'agit d'une sorte de réponse envoyée au navigateur lors de l'accès au forum. Il contient du code HTML, c'est-à-dire La page Web la plus simple, similaire à celle sur laquelle vous lisez cet article.

Voici cette page, lancée dans le navigateur d'un smartphone sous Android OS. Ce qui précède n'est pas une instruction complète, car cela prendrait une énorme quantité, si vous êtes intéressé par ces informations - écrivez des commentaires et nous effectuerons certainement un examen et rédigerons un article sur l'utilisation de ces informations.
Voir aussi sur electro-fr.tomathouse.com
: