kategorier: Hjemmeautomatisering, Microcontroller kredsløb
Antal visninger: 17351
Kommentarer til artiklen: 0

Microcontroller Remote Control: IR Remote, Arduino, ESP8266, 433 MHz

 

Spørgsmålet om fjernbetjening eller fjernbetjening af elektrisk udstyr har altid været og vil være relevant, uanset om der er automatiseringsværktøjer i systemet eller ikke. For tilrettelæggelse af fjernbetjening er det overhovedet ikke vigtigt om mikrocontroller, alt afhænger af de nødvendige funktioner, der er tildelt til den administrerede enhed. I denne artikel lærer du generel information om, hvordan man fjernbetjener en mikrokontroller.

Microcontroller fjernbetjening

typer

Der er to hovedtyper af fjernkommunikation:


kablet. Når styring af aktuatorer placeret i et rum (eller ikke rummet) udføres fra kontrolpanelet eller fra en knapstolpe placeret et andet sted. I dette tilfælde tilvejebringes en elektrisk ledningsforbindelse af styrekredsløb og aktuatorer (relæer, kontaktorer, der inkluderer mekanismer, såsom motorer eller systemer, for eksempel belysning).


trådløs. I denne udførelsesform kræves ingen elektrisk forbindelse af kontrol- og udførelseskredsløb. I trådløse kredsløb er der to enheder: en sender eller en fjernbetjening (RC) og en modtager, som er en del af det kontrollerede kredsløb. Trådløs kontrol er til gengæld almindelig i to versioner:

  • Ved optisk signal. Sådanne systemer findes i ethvert hjem, så du kontrollerer betjeningen af ​​tv'et, aircondition og andre husholdningsapparater.

  • Med radiosignal. Der er allerede en række muligheder: Bluetooth, ZigBee, Wi-Fi, 433 MHz sender-modtagere og andre variationer om dette emne.

Det er værd at bemærke, at med moderne tekniske midler kan du styre mikrokontrolleren, både fra fjernbetjeningen og via Internettet på et lokalt netværk eller med adgang fra hvor som helst i verden.



IR fjernbetjening

Vi begynder vores overvejelse med den enkleste og mest klassiske version. Enhedskontrol ved at transmittere en kode fra flimersekvensen af ​​IR LED til en optisk modtager installeret på enheden. Det er værd at bemærke, at det infrarøde spektrum ikke er synligt for det menneskelige øje, men de fleste foto- og videokameraer ser det.

Da de fleste kameraer ser infrarød, kan du tjekke fjernbetjeningers brugbarhed. For at gøre dette skal du blot rette fjernbetjeningen, så emitteren kigger ind i kameraet og trykker på knapperne. Normalt er en hvid glød med en lilla farvetone synlig på skærmen.

Denne kontrol har en åbenlys ulempe - du skal pege fjernbetjeningen mod modtageren. Og hvis batterierne i fjernbetjeningen er løbet tør, er du også nødt til at sigte, da operationerne bliver mindre og mindre.

Fordelene er enkelhed, høj vedligeholdelighed, både transmitteren og modtageren. Du kan finde detaljerne ved at afmontere de ødelagte fjernbetjeninger og fjernsyn for at anvende dette i dine egne projekter.

En typisk sensor er som følger. Da det optiske signal modtages, er det nødvendigt at udelukke udløsning fra fremmede lyskilder, såsom solen, belysningslamper og andre. Det er også værd at bemærke, at det infrarøde signal hovedsageligt modtages med en frekvens på 38 kHz.

IR-sensor

Her er specifikationerne for en af ​​IR-sensorerne:

  • transportfrekvens: 38 kHz;

  • forsyningsspænding: 2,7 - 5,5 V;

  • strømforbrug: 50 μA.

Og dets forbindelsesdiagram:

IR-sensortilslutningsdiagram

Fjernbetjeningen kan bruges af alle med et lignende driftsprincip, fjernbetjeninger fra:

  • fjernsyn;

  • DVD-afspillere

  • radiobåndoptagere;

  • fra moderne belysningsenheder, såsom smarte lysekroner og LED-strimler og mere.

Kontrolpanel

Her er et eksempel på at bruge en sådan sensor med Arduino

Arduino IR-sensoreksempel

For at mikrokontrolleren, i vores tilfælde Arduin, skal forstå signalet fra sensoren, skal du bruge IRremote.h-biblioteket. For et eksempel på, hvordan man læser et signal fra en sensor, her er en kode til genkendelse af dem ved at læse den serielle port på mikrokontrolleren fra Arduino IDE:

#include "IRremote.h" // tilslut biblioteket til at arbejde med IR-signalet.

IRrecv irrecv (2); // angive det output, som modtageren er tilsluttet

dekode_resultater;

ugyldig opsætning () {

Serial.begin (9600); // indstil COM-portens hastighed

irrecv.enableIRIn (); // start modtagelse

}

void loop () {

if (irrecv.decode (& resultater)) {// hvis dataene kom

Serial.println (results.value, HEX); // udskriv data

irrecv.resume (); // accepter følgende kommando

  }

}

Som et resultat, når du blinker arduinoen og begynder at "skinne" ind i modtageren med fjernbetjeningen, vil vi se følgende billede på den serielle portmonitor:

Seriel portmonitor

Dette er koder, der sender knapper i hexadecimal form. Således kan du finde ud af, hvilken knap på fjernbetjeningen, som koden sender, så der ikke er nogen specifikke krav til den fjernbetjening, der bruges, fordi du kan genkende og tilknytte en hvilken som helst. I øvrigt er dette en idé til et projekt med en uddannet universal fjernbetjening, sådan blev solgt tidligere. Men nu i Internet-alderen falder mængden af ​​teknologi, der kontrolleres på denne måde, hvert år.

Og med denne kode kan du genkende signaler og styre belastningen:

#include "IRremote.h"

IRrecv irrecv (2); // angive det output, som modtageren er tilsluttet

dekode_resultater;

ugyldig opsætning () {

irrecv.enableIRIn (); // start modtagelse

}

void loop () {

if (irrecv.decode (& resultater)) {// hvis dataene kom

switch (results.value) {

sag 0xFFA857:

digitalWrite (13, HØJ);

break;

sag 0xFFE01F:

digitalWrite (13, LAV);

break;

    }   

irrecv.resume (); // accepter følgende kommando

  }

}

Det vigtigste i koden er genkendelse gennem switch-funktionen, nogle gange kaldes de en "switchcase". Det er en analog af hvis grene, men har en smukkere form for opfattelse. Sag - dette er indstillingerne, "hvis en sådan kode ankommer, så ..." Koden styrer 13 stifter for bestemte signaler. Lad mig minde dig om, at den indbyggede LED på ARDUINO-pladen er tilsluttet pin 13, dvs. forfatteren af ​​koden kontrollerede LED.

Du kan styre alt ved hjælp af en høj eller lav digital pin gennem en krafttransistor (som vi dækkede i to artikler tidligere her og her) med en jævnstrømbelastning, eller gennem en triac og en driver til den med en jævnstrømbelastning, kan du også bruge relæer og kontaktorer, generelt, et helt felt til fantasi.


Modtagelse og transmission af radiosignal

Til brug med mikrokontrollere er sendere med driftsfrekvenser på 433 MHz eller 315 MHz almindelige, der kan være andre frekvenser, afhængigt af det specifikke kort, men disse er de mest almindelige. Systemet består af to noder - en modtager og en sender, som er logisk.

Modtagelse og transmission af radiosignal

På billedet vises senderen øverst til højre og modtageren nederst til venstre. Deres navn på søgningen: 433MHz radiomodul, MX-05V / XD-RF-5V (modtager og sender).

Udspændingen, som ofte er tilfældet i moduler, males på brættet, ligesom senderen:

Radiosender

På modtageren er det ikke så indlysende, fordi data på printkortet er skrevet over to stifter, faktisk bruges ikke en af ​​dem.

Radiomodtager

For eksempel giver vi et diagram og en kode til at tænde LED fra et Arduino-kort, der er tilsluttet et andet lignende kort, uden ledninger. Modtageren og transmitteren er forbundet på samme måde til begge kort:

Modtageren og senderen på tavlerne

enhed

modul

Arduino-stifter

modtager

VCC

GND

DATA

+ 5V

GND

2

transmitter

VCC

GND

DATA

+ 5V

GND

2 

Dernæst skal du forbinde RCswitch.h-biblioteket til Arduino IDE

For at starte skriver vi senderprogrammet:

#include

RCSwitch mySwitch = RCSwitch(); // oprette et objekt til at arbejde med frontend

ugyldig opsætning () {

    mySwitch.enableTransmit(2); // fortæl programmet, hvilken pin informationskanalen er forbundet til

}

void loop () {

mySwitch.send (B0100,4);

forsinkelse (1000);

mySwitch.send (B1000, 4);

    forsinkelse (1000);

} 

Senderen kan transmittere binær kode, men dens værdier kan skrives i decimalform.

mySwitch.send (B0100,4);

og

mySwitch.send (B1000, 4);

dette er overførelseskommandoer, mySwitch er navnet på den sender, som vi angav i begyndelsen af ​​koden, og send er overførelseskommandoen. Argumenterne for denne funktion er:

Senderenavn.send (værdi, pakkestørrelse af pulser sendt til luften);

B1000 - symbolet B - betyder binært, det kunne skrives som tallet 8, dvs. i decimalnotation. En anden mulighed var at skrive “1000” som en streng (i anførselstegn).

Dernæst skriver vi koden til modtageren (den blinkes på det bord, som modtageren er tilsluttet):

#include

RCSwitch mySwitch = RCSwitch ();

ugyldig opsætning () {

pinMode (3, OUTPUT);

mySwitch.enableReceive (0);

}

void loop () {

if (mySwitch.available ()) {

int-værdi = mySwitch.getReceivedValue ();

if (værdi == B1000)

digitalWrite (3, HØJ);

ellers hvis (værdi == B0100)

digitalWrite (3, LAV);

mySwitch.resetAvailable ();

    }

}

Her erklærer vi, at den accepterede værdi er gemt i værdivariablen i strengen mySwitch.getReceivedValue (). Og det faktum, at modtageren er tilsluttet den 2. pin, beskrives her af mySwiitch.enableReceive (0).

Resten af ​​koden er elementær, hvis signal 0100 modtages, indstilles pin nummer 3 til høj (log. Enhed), og hvis 1000, derefter til lav (log. Nul).

Jeg undre:

I linjen mySwitch.enableTransmit (0) fortæller vi programmet, at modtageren er tilsluttet 2. pin, og modtagelsestilstand er tændt. De mest opmærksomme bemærkede, at argumentet om denne metode ikke er pin nummer “2”, men “0”, faktum er, at enableTransmit metoden (nummer) ikke accepterer pin nummeret, men interrupt nummeret, men i atmega328, som er sat på Arduino Uno, nano, promini og flere andre, hænger på den anden pin (PortD pin PD2) en afbrydelse med tallet nul. Du kan se dette i Atmega pinout, der gælder for Arduino-tavlen, pin-numrene er skrevet i lyserøde bokse.

Atmega pinout

Denne metode til transmission og modtagelse er meget enkel og billig; et par modtagere og sendere koster omkring $ 1,5 på dette tidspunkt.


Wi-Fi, Adruino og ESP8266

Til at begynde med, ESP8266 er en mikrocontroller med hardwarestøtte til Wi-Fi, Det sælges som en separat chip og loddes til brættet, ligesom en arduino. Den har en 32-bit kerne, den er programmeret gennem en seriel port (UART).

Brædderne har normalt 2 eller flere gratis GPIO-pins, og der er altid ben til firmware, dette skal gøres via en USB til seriel adapter. Administreret af AT-teams kan en komplet liste over kommandoer findes på det officielle ESP8266-websted og på github.

ESP8266

Der er en mere interessant mulighed, NodeMCU-kort, de har muligheden for at blinke via USB, fordi En USB-UART-konverter findes allerede på tavlen, normalt lavet på en CP2102-chip. Knude MCU er en firmware, noget som et operativsystem, et projekt baseret på Lua-scriptingsprog.

NodeMCU-bestyrelse

Firmwaren kan udføre Lua-scripts, enten ved at acceptere dem på en seriel port eller ved at gengive algoritmer, der er gemt i Flash-hukommelsen.

For øvrig har det sit eget filsystem, selvom der ikke er nogen mapper i det, dvs. kun filer uden mapper. I hukommelsen kan ikke kun scripts gemmes, men også forskellige data, dvs. brættet kan gemme oplysninger, der er optaget for eksempel fra sensorer.

Tavlen arbejder med grænseflader:

  • 1-Wire;

  • I2C;

  • SPI;

  • UART.

Det har en lang række funktioner:

  • krypteringsmodul;

  • opgaveplanlægning;

  • realtid ur;

  • ur-synkroniseringsprotokol via Internet SNTP;

  • timere;

  • ADC-kanal (en);

  • afspille lydfiler;

  • generere ved udgange et PWM-signal (op til 6);

  • Brug stik, der er support til FatFS, dvs. du kan tilslutte SD-kort og så videre.

ESP-12E

Og her er en kort liste over, hvad bestyrelsen kan arbejde med:

  • accelerometre ADXL345;

  • HMC5883L magnetometre

  • gyroskoper L3G4200D;

  • temperatur- og fugtighedsfølere AM2320, DHT11, DHT21, DHT22, DHT33, DHT44;

  • sensorer for temperatur, fugtighed, atmosfæretryk BME280;

  • temperatur- og atmosfæriske tryksensorer BMP085;

  • mange skærme, der arbejder på I2C, SPI-busser. Med evnen til at arbejde med forskellige skrifttyper;

  • TFT viser ILI9163, ILI9341, PCF8833, SEPS225, SSD1331, SSD1351, ST7735;

  • smarte LED'er og LED-controllere - WS2812, tm1829, WS2801, WS2812.

Ud over at bruge sproget Lua, kan du programmere brættet under Arduino IDE.

ESP8266 kan bruges som en enkeltstående enhed eller som et modul til trådløs kommunikation med Arduino.

Modul til trådløs kommunikation med Arduino

Overvejelse af alle funktioner og funktioner på dette bord tager en hel række artikler.

Så dette bord er en fantastisk mulighed for fjernbetjening via Wi-Fi. Omfanget er enormt, for eksempel at bruge en smartphone som kontrolpanel til en provisorisk radiostyret maskine eller quadrocopter, fjernbelysningskontrol, op til at arrangere netværk for hele huset og administrere hver stikkontakt, lampe osv. hvis der kun var nok stifter.

Den enkleste måde at arbejde med mikrokontrolleren er at bruge et enkelt ESP8266-kort. Nedenfor er et diagram over en simpel wi-fi-stikkontakt.

Ordningen med det enkleste wifi-stik

For at samle dette kredsløb har du brug for et relæmodul eller et konventionelt relæ, der er forbundet til en stift gennem en transistor. Først har du brug for et program til en smartphone RoboRemoFree ,. I det konfigurerer du forbindelsen til ESP og opretter en grænseflade til styring af stikkontakten. For at beskrive, hvordan du bruger det, skal du skrive en separat artikel, så lad os udelade dette materiale for nu.

I ESP indlæser vi følgende firmware gennem ESPlorer-programmet (program til arbejde med brættet)

- WiFi AP-afregning

wifi.setmode (wifi.STATIONAP)

cfg = {}

cfg.ssid = "ESPTEST"

cfg.pwd = "1234567890"

wifi.ap.config (jfr)

- Indstil pin-tilstand

my_pin_nummber = 1

--gpio.mode (my_pin_nummber, gpio.OUTPUT)

gpio.mode (min_pin_nummer, gpio.OPENDRAIN)

- Opret server

sv = net.createServer (net.TCP)

funktionsmodtager (sck, data)

hvis string.sub (data, 0, 1) == "1" derefter

--gpio.write (my_pin_nummber, gpio.HIGH)

gpio.write (my_pin_nummber, gpio.LOW)

andet

hvis string.sub (data, 0, 1) == "0" derefter

--gpio.write (my_pin_nummber, gpio.LOW)

gpio.write (my_pin_nummber, gpio.HIGH)

ende

ende

print (data)

ende

hvis sv derefter

sv: lyt (333, funktion (conn)

conn: on ("modtage", modtager)

conn: send ("Hej!")

ende)

ende

- Opret HTTP-server

http = net.createServer (net.TCP)

funktion modtage_http (sck, data)

print (data)

lokal anmodning = string.match (data, "([^ \ r, \ n] *) [\ r, \ n]", 1)

hvis anmodning == 'GET / on HTTP / 1.1', så

--gpio.write (my_pin_nummber, gpio.HIGH)

gpio.write (my_pin_nummber, gpio.LOW)

ende

hvis anmodning == 'GET / off HTTP / 1.1', så

--gpio.write (my_pin_nummber, gpio.LOW)

gpio.write (my_pin_nummber, gpio.HIGH)

ende

sck: on ("sendt", funktion (sck) sck: close () collectgarbage () ende)

lokalt svar = "HTTP / 1.0 200 OK \ r \ n Server: NodeMCU på ESP8266 \ r \ nIndholdstype: tekst / html \ r \ n \ r \ n" ..

" NodeMCU på ESP8266 " ..

"

NodeMCU på ESP8266

" ..

"


" ..

" Til Fra " ..

" "

sck: send (svar)

ende

hvis http derefter

http: lyt (80, funktion (conn)

conn: on ("modtage", modtage_http)

ende)

ende

print ("Startet.")

Nu kan du styre programmet enten fra Roboremo-programmet eller gennem en hvilken som helst webbrowser, for dette skal du indtaste IP-adressen på tavlen i adresselinjen i wi-fi-tilstand, det 192.168.4.1.

Der er et uddrag i koden:

" NodeMCU på ESP8266 " ..

"

NodeMCU på ESP8266

" ..

"


" ..

" Til Fra " ..

" "

Dette er en slags svar, der udstedes til browseren, når du får adgang til tavlen. Den indeholder HTML-kode, dvs. Den enkleste webside, der ligner den, du læser denne artikel.

Side i browseren på en smartphone, der kører Android OS

Her er denne side, der er lanceret i browseren på en smartphone, der kører Android OS. Ovenstående er ikke en komplet instruktion, da det vil tage en enorm mængde, hvis du er interesseret i disse oplysninger - skriv kommentarer, og vi vil helt sikkert gennemføre en anmeldelse og skrive en artikel om at arbejde med dem.

Se også på elektrohomepro.com:

  • Tilslutning og programmering af Arduino til begyndere
  • Metoder til læsning og styring af Arduino I / O-porte
  • Hvad er Nextion-skærme, og hvordan man arbejder med dem?
  • Programmerbare mikrokontrollere i JavaScript: hvilken man skal vælge, egenskaber ...
  • Typer og arrangement af AVR-mikrokontrollere

  •