kategorier: Hemmautomation, Mikrokontrollkretsar
Antal visningar: 17351
Kommentarer till artikeln: 0

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

 

Frågan om fjärrkontroll eller fjärrkontroll av elektrisk utrustning har alltid varit och kommer att vara relevant, oavsett om det finns automatiseringsverktyg i systemet eller inte. För organisationen av fjärrkontroll spelar det ingen roll om mikrokontroller, beror det allt på nödvändiga funktioner som tilldelats den hanterade enheten. I den här artikeln lär du dig allmän information om hur du fjärrkontrollerar en mikrokontroller.

Mikrokontroller fjärrkontroll

typer

Det finns två huvudtyper av fjärrkommunikation:


trådbunden. När styrningen av ställdon i ett rum (eller inte i rummet) utförs från kontrollpanelen eller från en knappstolpe som finns på en annan plats. I detta fall tillhandahålls en elektrisk trådanslutning av styrkretsar och ställdon (reläer, kontaktorer, som inkluderar mekanismer, såsom motorer eller system, till exempel belysning).


wi. I denna utföringsform krävs ingen elektrisk anslutning av styr- och körkretsarna. I trådlösa kretsar finns det två enheter: en sändare eller en fjärrkontroll (RC) och en mottagare, som är en del av den kontrollerade kretsen. Trådlös kontroll är i sin tur vanligt i två versioner:

  • Med optisk signal. Sådana system finns i alla hem, så du kontrollerar driften av TV: n, luftkonditionering och andra hushållsapparater.

  • Med radiosignal. Det finns redan ett antal alternativ: Bluetooth, ZigBee, Wi-Fi, 433 MHz sändarmottagare och andra variationer i detta ämne.

Det är värt att notera att med moderna tekniska medel kan du styra mikrokontrollern, både från fjärrkontrollen och via Internet i ett lokalt nätverk eller med åtkomst från var som helst i världen.



IR-fjärrkontroll

Vi börjar vår övervägande med den enklaste och mest klassiska versionen. Enhetskontroll genom att överföra en kod från flimmerföljden på IR-LED till den optiska mottagaren installerad på enheten. Det är värt att notera att det infraröda spektrumet inte är synligt för det mänskliga ögat, men de flesta foto- och videokameror ser det.

Eftersom de flesta kameror ser infraröd kan du kontrollera servicabilitet för fjärrkontroller. För att göra detta, helt enkelt peka på fjärrkontrollen så att sändaren tittar in i kameran och tryck på knapparna. Vanligtvis är en vit glöd med en lila nyans synlig på skärmen.

Den här kontrollen har en uppenbar nackdel - du måste peka fjärrkontrollen mot mottagaren. Och om batterierna i fjärrkontrollen är slut, måste du också sikta, eftersom operationerna blir mindre och mindre.

Fördelarna är enkelhet, hög underhållbarhet, både sändaren och mottagaren. Du kan hitta detaljerna genom att demontera trasiga fjärrkontroller och tv-apparater för att tillämpa detta i dina egna projekt.

En typisk sensor är som följer. Eftersom den optiska signalen tas emot är det nödvändigt att utesluta utlösning från främmande ljuskällor, såsom solen, belysningslamporna och andra. Det är också värt att notera att den infraröda signalen mottas huvudsakligen med en frekvens av 38 kHz.

IR-sensor

Här är specifikationerna för en av IR-sensorerna:

  • bärfrekvens: 38 kHz;

  • matningsspänning: 2,7 - 5,5 V;

  • strömförbrukning: 50 μA.

Och dess anslutningsdiagram:

IR-sensoranslutningsdiagram

Fjärrkontrollen kan användas av vem som helst med en liknande funktionsprincip, fjärrkontroller från:

  • tv;

  • DVD-spelare

  • radiobandspelare;

  • från moderna belysningsenheter, som smarta ljuskronor och LED-remsor och mer.

Kontrollpanelen

Här är ett exempel på att använda en sådan sensor med Arduino

Arduino IR-sensorexempel

För att mikrokontrollern, i vårt fall Arduin, ska förstå signalen från sensorn, måste du använda IRremote.h-biblioteket. För ett exempel på hur man läser en signal från en sensor, här är en kod för att känna igen dem genom att läsa den seriella porten för mikrokontrollern från Arduino IDE:

#include "IRremote.h" // anslut biblioteket så att det fungerar med IR-signalen.

IRrecv irrecv (2); // ange den utgång som mottagaren är ansluten till

decode_results results;

ogiltig installation () {

Serial.begin (9600); // Ställ in COM-portens hastighet

irrecv.enableIRIn (); // starta mottagningen

}

void loop () {

if (irrecv.decode (& results)) {// om data kom

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

irrecv.resume (); // acceptera följande kommando

  }

}

Som ett resultat, när du blinkar arduino och börjar "lysa" in i mottagaren med fjärrkontrollen, kommer vi att se följande bild på serielportmonitorn:

Seriell portmonitor

Det här är koder som skickar knappar i hexadecimal form. Således kan du ta reda på vilken knapp på fjärrkontrollen som koden skickar, så det finns inga specifika krav för den fjärrkontroll som används, eftersom du kan känna igen och associera någon. Förresten, detta är en idé för ett projekt med en utbildad universell fjärrkontroll, sådana såldes tidigare. Men nu i Internetåldern minskar mängden teknik som kontrolleras på detta sätt varje år.

Och med den här koden kan du känna igen signaler och hantera belastningen:

# inkludera "IRremote.h"

IRrecv irrecv (2); // ange den utgång som mottagaren är ansluten till

decode_results results;

ogiltig installation () {

irrecv.enableIRIn (); // starta mottagningen

}

void loop () {

if (irrecv.decode (& results)) {// om data kom

switch (results.value) {

fall 0xFFA857:

digitalWrite (13, HÖG);

break;

fall 0xFFE01F:

digitalWrite (13, LÅG);

break;

    }   

irrecv.resume (); // acceptera följande kommando

  }

}

Det viktigaste i koden är igenkänning genom switch-funktionen, ibland kallas de för en "switchcase". Det är en analog av if-grenarna, men har en vackrare form för uppfattning. Fall - det här är alternativen, "om en sådan kod anländer, då ..." Koden styr 13 stift för vissa signaler. Låt mig påminna er om att den inbyggda lysdioden på ARDUINO-kortet är ansluten till stift 13, dvs. kodens författare styrde lysdioden.

Du kan styra allt med hjälp av en hög eller låg digital stift genom en krafttransistor (som vi täckte i två artiklar tidigare här och här) med en likströmbelastning, eller genom en triac och en drivare för den med likströmslast, kan du också använda reläer och kontaktorer, i allmänhet, ett helt fält för fantasi.


Mottagning och överföring av radiosignaler

För användning med mikrokontroller är sändare med driftsfrekvenser på 433 MHz eller 315 MHz vanliga, det kan finnas andra frekvenser, beroende på det specifika kortet, men dessa är de vanligaste. Systemet består av två noder - en mottagare och en sändare, vilket är logiskt.

Mottagning och överföring av radiosignaler

På bilden visas sändaren längst upp till höger och mottagaren längst ner till vänster. Deras namn på sökningen: 433MHz radiomodul, MX-05V / XD-RF-5V (mottagare och sändare).

Utspänningen, som ofta är fallet i moduler, är målad på kortet, som sändaren:

Radiosändare

Mottagaren är inte så uppenbar, eftersom data på det tryckta kretskortet är skrivet över två stift, i själva verket används inte en av dem.

Radiomottagare

Till exempel ger vi ett diagram och en kod för att slå på lysdioden från ett Arduino-kort anslutet till ett annat liknande kort, utan kablar. Mottagaren och sändaren är anslutna på samma sätt till båda korten:

Mottagaren och sändaren på korten

anordning

modul

Arduino stift

mottagare

VCC

GND

DATA

+ 5V

GND

2

sändare

VCC

GND

DATA

+ 5V

GND

2 

Därefter måste du ansluta RCswitch.h-biblioteket till Arduino IDE

För att starta skriver vi sändarprogrammet:

#include

RCSwitch mySwitch = RCSwitch(); // skapa ett objekt som ska fungera med front-enden

ogiltig installation () {

    mySwitch.enableTransmit(2); // berätta för programmet vilket stift informationskanalen är ansluten till

}

void loop () {

mySwitch.send (B0100,4);

fördröjning (1000);

mySwitch.send (B1000, 4);

    fördröjning (1000);

} 

Sändaren kan överföra binär kod, men dess värden kan skrivas i decimalform.

mySwitch.send (B0100,4);

och

mySwitch.send (B1000, 4);

detta är överföringskommandon, mySwitch är namnet på sändaren som vi angav i början av koden, och skicka är överföringskommandot. Argumenten för denna funktion är:

Sändarens namn.sänd (värde, paketstorlek för pulser som skickas till luften);

B1000 - symbolen B - betyder binär, den kan skrivas som siffran 8, dvs i decimal notation. Ett annat alternativ var att skriva "1000" som en sträng (i citattecken).

Därefter skriver vi koden för mottagaren (den blinkar in på kortet som mottagaren är ansluten till):

#include

RCSwitch mySwitch = RCSwitch ();

ogiltig installation () {

pinMode (3, OUTPUT);

mySwitch.enableReceive (0);

}

void loop () {

if (mySwitch.available ()) {

int-värde = mySwitch.getReceivedValue ();

if (värde == B1000)

digitalWrite (3, HÖG);

annars om (värde == B0100)

digitalWrite (3, LÅG);

mySwitch.resetAvailable ();

    }

}

Här förklarar vi att det accepterade värdet lagras i värdevariabeln i strängen mySwitch.getReceivedValue (). Och att mottagaren är ansluten till den andra stiftet beskrivs här av mySwiitch.enableReceive (0).

Annars är koden elementär, om signal 0100 tas emot sätts stift nummer 3 på hög (log. Enhet), och om 1000, sedan till låg (log. Noll).

Jag undrar:

I raden mySwitch.enableTransmit (0) berättar vi för programmet att mottagaren är ansluten till den andra stiftet och mottagningsläget är på. De mest uppmärksamma märkte att argumentet för den här metoden inte är pin nummer "2", men "0", faktum är att metoden enableTransmit (nummer) inte accepterar pin nummer, utan avbrott nummer, men i atmega328, som är på Arduino Uno, nano, promini och flera andra, på den andra stiftet (PortD-stift PD2) hänger ett avbrott med siffran noll. Du kan se detta i Atmega pinout som är tillämpligt på Arduino-kortet, pin-numren är skrivna i rosa rutor.

Atmega pinout

Denna metod för att sända och ta emot är mycket enkel och billig; ett par mottagare och sändare kostar cirka $ 1,5 i skrivande stund.


Wi-Fi, Adruino och ESP8266

Till att börja med ESP8266 är en mikrokontroller med hårdvarustöd för Wi-Fi, Det säljs som ett separat chip och lödas till brädet, som en arduino. Den har en 32-bitars kärna, den är programmerad genom en seriell port (UART).

Brädorna har vanligtvis 2 eller fler gratis GPIO-stift och det finns alltid stift för firmware, detta måste göras via en USB till seriell adapter. Hanteras av AT-team kan en fullständig lista med kommandon hittas på den officiella ESP8266-webbplatsen och på github.

ESP8266

Det finns ett mer intressant alternativ, NodeMCU-kort, de har möjlighet att blinka via USB, för En USB-UART-omvandlare finns redan på kortet, vanligtvis tillverkat på ett CP2102-chip. Nod MCU är en firmware, något som ett operativsystem, ett projekt baserat på Lua skriptspråk.

NodeMCU styrelse

Firmware kan utföra Lua-skript, antingen genom att acceptera dem i en seriell port eller genom att reproducera algoritmer lagrade i Flash-minnet.

Förresten, det har sitt eget filsystem, även om det inte finns några kataloger i det, dvs endast filer utan mappar. I minnet kan inte bara skript lagras utan också olika data, d.v.s. styrelsen kan lagra information inspelad till exempel från sensorer.

Styrelsen arbetar med gränssnitt:

  • 1-Wire;

  • I2C;

  • SPI;

  • UART.

Den har en hel mängd funktioner:

  • krypteringsmodul;

  • uppgiftsschemaläggare;

  • realtidsklocka;

  • klocksynkroniseringsprotokoll via Internet SNTP;

  • timers;

  • ADC-kanal (en);

  • spela ljudfiler;

  • generera vid utgångarna en PWM-signal (upp till 6);

  • använda uttag, det finns stöd för FatFS, dvs. du kan ansluta SD-kort och så vidare.

ESP-12E

Och här är en kort lista över vad styrelsen kan arbeta med:

  • accelerometrar ADXL345;

  • HMC5883L magnetometrar

  • gyroskop L3G4200D;

  • temperatur- och fuktighetssensorer AM2320, DHT11, DHT21, DHT22, DHT33, DHT44;

  • sensorer för temperatur, luftfuktighet, atmosfärstryck BME280;

  • temperatur- och atmosfärstrycksensorer BMP085;

  • många skärmar som arbetar med I2C, SPI-bussar. Med förmågan att arbeta med olika teckensnitt;

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

  • smarta lysdioder och LED-kontroller - WS2812, tm1829, WS2801, WS2812.

Förutom att använda Lua-språket kan du programmera brädet under Arduino IDE.

ESP8266 kan användas som en fristående enhet eller som en modul för trådlös kommunikation med Arduino.

Modul för trådlös kommunikation med Arduino

Övervägandet av alla funktioner och funktioner på detta bräde kommer att ta en hel serie artiklar.

Så detta kort är ett utmärkt alternativ för fjärrkontroll via Wi-Fi. Omfånget är enormt, till exempel att använda en smartphone som en kontrollpanel för en provisorisk radiostyrd maskin eller quadrocopter, fjärrbelysningskontroll, upp till att ordna nätverk för hela huset och hantera varje uttag, lampa etc. om det bara fanns tillräckligt med stift.

Det enklaste sättet att arbeta med mikrokontrollern är att använda ett enda ESP8266-kort. Nedan visas ett diagram över ett enkelt wi-fi-uttag.

Schema för det enklaste wifi-uttaget

För att montera denna krets behöver du en relämodul eller ett konventionellt relä anslutet till en stift genom en transistor. Först behöver du ett program för en smartphone RoboRemoFree ,. I den konfigurerar du anslutningen till ESP och gör ett gränssnitt för att kontrollera uttaget. För att beskriva hur du använder det måste du skriva en separat artikel, så låt oss utelämna detta material för nu.

I ESP laddar vi följande firmware, via ESPlorer-programmet (program för att arbeta med kortet)

- Wi-Fi AP-uppställning

wifi.setmode (wifi.STATIONAP)

cfg = {}

cfg.ssid = "ESPTEST"

cfg.pwd = "1234567890"

wifi.ap.config (jfr)

- Ställ in pin-läge

my_pin_nummber = 1

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

gpio.mode (my_pin_nummber, gpio.OPENDRAIN)

- Skapa server

sv = net.createServer (net.TCP)

funktionsmottagare (sck, data)

om string.sub (data, 0, 1) == "1" då

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

gpio.write (my_pin_nummber, gpio.LOW)

annars

om string.sub (data, 0, 1) == "0" då

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

gpio.write (my_pin_nummber, gpio.HIGH)

änden

änden

tryck (data)

änden

om sv då

sv: lyssna (333, funktion (conn)

conn: on ("motta", mottagare)

conn: skicka ("Hej!")

änden)

änden

- Skapa HTTP-server

http = net.createServer (net.TCP)

funktion mottag_http (sck, data)

tryck (data)

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

om begäran == 'GET / on HTTP / 1.1' då

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

gpio.write (my_pin_nummber, gpio.LOW)

änden

om begäran == 'GET / off HTTP / 1.1' då

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

gpio.write (my_pin_nummber, gpio.HIGH)

änden

sck: on ("skickat", funktion (sck) sck: nära () collectgarbage () slut)

lokalt svar = "HTTP / 1.0 200 OK \ r \ n Server: NodeMCU på ESP8266 \ r \ nInnehåll-typ: text / html \ r \ n \ r \ n" ..

" NodeMCU på ESP8266 " ..

"

NodeMCU på ESP8266

" ..

"


" ..

" Av " ..

" "

sck: skicka (svar)

änden

om http då

http: lyssna (80, funktion (conn)

conn: on ("mottag", mottag_http)

änden)

änden

print ("Startade.")

Nu kan du styra programmet antingen från Roboremo-programmet, eller genom valfri webbläsare, för detta måste du skriva IP-adressen på kortet i adressfältet i wi-fi-läget, det 192.168.4.1.

Det finns ett kodavsnitt i koden:

" NodeMCU på ESP8266 " ..

"

NodeMCU på ESP8266

" ..

"


" ..

" Av " ..

" "

Detta är ett slags svar som ges till webbläsaren vid åtkomst till kortet. Den innehåller HTML-kod, dvs. Den enklaste webbsidan, liknande den du läser den här artikeln på.

Sidan i webbläsaren på smarttelefonen som kör Android OS

Här är den här sidan, lanserad i webbläsaren på en smartphone som kör Android OS. Ovanstående är inte en fullständig instruktion, eftersom det skulle ta enormt mycket om du är intresserad av denna information - skriv kommentarer så kommer vi definitivt att göra en granskning och skriva en artikel om att arbeta med den.

Se även på elektrohomepro.com:

  • Ansluta och programmera Arduino för nybörjare
  • Metoder för att läsa och hantera Arduino I / O-portar
  • Vad är Nextion-skärmar och hur man arbetar med dem?
  • Programmerbara mikrokontroller i JavaScript: vilken man ska välja, egenskaper ...
  • Typer och arrangemang av AVR-mikrokontroller

  •