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.

Télécommande à 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.

Capteur IR

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:

Diagramme de connexion du capteur infrarouge

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.

Panneau de contrôle

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

Exemple de capteur infrarouge 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:

Moniteur de 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.

Réception et transmission de signaux radio

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:

Émetteur radio

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.

Récepteur radio

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:

Le récepteur et l'émetteur sur les 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.

Brochage Atmega

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.

ESP8266

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.

Carte NodeMCU

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.

ESP-12E

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.

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.

Schéma de la prise wifi la plus simple

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 " ..

"

NodeMCU sur ESP8266

" ..

"


" ..

" Activé Désactivé " ..

" "

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 " ..

"

NodeMCU sur ESP8266

" ..

"


" ..

" Activé Désactivé " ..

" "

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.

La page dans le navigateur du smartphone sous Android OS

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 e.imadeself.com:

  • Connecter et programmer Arduino pour les débutants
  • Méthodes de lecture et de gestion des ports d'E / S Arduino
  • Que sont les écrans Nextion et comment les utiliser?
  • Microcontrôleurs programmables en JavaScript: lequel choisir, caractéristiques ...
  • Types et disposition des microcontrôleurs AVR

  •