kategorier: Hjemmeautomatisering, Mikrokontrollkretser
Antall visninger: 17351
Kommentarer til artikkelen: 0

Mikrokontroller fjernkontroll: IR fjernkontroll, Arduino, ESP8266, 433 MHz

 

Spørsmålet om fjernkontroll eller fjernkontroll av elektrisk utstyr har alltid vært og vil være relevant, uavhengig av om det er automatiseringsverktøy i systemet eller ikke. For organisering av fjernkontroll spiller det ingen rolle om mikrokontroller, alt avhenger av de nødvendige funksjonene som er tilordnet den administrerte enheten. I denne artikkelen lærer du generell informasjon om hvordan du kan fjernstyre en mikrokontroller.

Fjernkontroll for mikrokontroller

typer

Det er to hovedtyper av ekstern kommunikasjon:


kablet. Når kontrollen av aktuatorer som er plassert i ett rom (eller ikke i rommet), utføres fra kontrollpanelet eller fra en knappstolpe plassert på et annet sted. I dette tilfellet tilveiebringes en elektrisk ledningstilkobling av kontrollkretsene og aktuatorene (reléer, kontaktorer, som inkluderer mekanismer, for eksempel motorer eller systemer, for eksempel belysning).


trådløs. I denne utførelsesformen er det ikke nødvendig med elektrisk tilkobling av kontroll- og utførelseskretsene. I trådløse kretser er det to enheter: en sender eller en fjernkontroll (RC) og en mottaker, som er en del av den kontrollerte kretsen. Trådløs kontroll er på sin side vanlig i to versjoner:

  • Ved optisk signal. Slike systemer er i hvert hjem, så du kontrollerer driften av TV, klimaanlegg og andre husholdningsapparater.

  • Med radiosignal. Det finnes allerede en rekke alternativer: Bluetooth, ZigBee, Wi-Fi, 433 MHz sender-mottakere og andre varianter om dette emnet.

Det er verdt å merke seg at med moderne tekniske midler kan du kontrollere mikrokontrolleren, både fra fjernkontrollen og via Internett i et lokalt nettverk eller med tilgang fra hvor som helst i verden.



IR fjernkontroll

Vi begynner vurderingen med den enkleste og mest klassiske versjonen. Enhetskontroll ved å overføre en kode fra flimmer-sekvensen til IR-LED til den optiske mottakeren som er installert på enheten. Det er verdt å merke seg at det infrarøde spekteret ikke er synlig for det menneskelige øyet, men de fleste foto- og videokameraer ser det.

Siden de fleste kameraer ser infrarød, kan du sjekke bruk av fjernkontroller. For å gjøre dette, peker du bare fjernkontrollen slik at senderen ser inn i kameraet og trykker på knappene. Vanligvis er en hvit glød med en lilla fargetone synlig på skjermen.

Denne kontrollen har en åpenbar ulempe - du må peke fjernkontrollen mot mottakeren. Og hvis batteriene i fjernkontrollen er tom, må du også ta sikte, siden operasjonene blir mindre og mindre.

Fordelene er enkelhet, høy vedlikeholdbarhet, både senderen og mottakeren. Du kan finne detaljene ved å demontere ødelagte fjernkontroller og fjernsyn for å bruke dette i dine egne prosjekter.

En typisk sensor er som følger. Siden det optiske signalet mottas, er det nødvendig å ekskludere utløsing fra fremmede lyskilder, for eksempel sol, lyslamper og andre. Det er også verdt å merke seg at det infrarøde signalet hovedsakelig mottas med en frekvens på 38 kHz.

IR-sensor

Her er spesifikasjonene til en av IR-sensorene:

  • transportfrekvens: 38 kHz;

  • forsyningsspenning: 2,7 - 5,5 V;

  • strømforbruk: 50 μA.

Og tilkoblingsskjemaet:

IR-tilkoblingsskjema

Fjernkontrollen kan brukes av alle som har et lignende prinsipp for drift, fjernkontroller fra:

  • TV;

  • DVD-spillere

  • radiobåndopptakere;

  • fra moderne lysenheter, for eksempel smarte lysekroner og LED-strips og mer.

Kontrollpanel

Her er et eksempel på bruk av en slik sensor med Arduino

Arduino IR-sensoreksempel

For at mikrokontrolleren, i vårt tilfelle Arduin, skal forstå signalet fra sensoren, må du bruke IRremote.h-biblioteket. For et eksempel på hvordan du kan lese et signal fra en sensor, vil vi gi en kode for å gjenkjenne dem ved å lese serieporten til mikrokontrolleren fra Arduino IDE:

#include "IRremote.h" // koble biblioteket til å fungere med IR-signalet.

IRrecv irrecv (2); // angi utgangen som mottakeren er koblet til

dekode_resultater;

ugyldig oppsett () {

Serial.begin (9600); // angi hastigheten på COM-porten

irrecv.enableIRIn (); // starte mottakelsen

}

void loop () {

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

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

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

  }

}

Som et resultat, når du blinker arduinoen og begynner å "skinne" inn i mottakeren med fjernkontrollen, vil vi se følgende bilde på seriell portmonitor:

Seriell portmonitor

Dette er koder som sender knapper i heksadesimal form. Dermed kan du finne ut hvilken knapp på fjernkontrollen som koden sender, derfor er det ingen spesifikke krav til fjernkontrollen som brukes, fordi du kan gjenkjenne og knytte noen. Forresten, dette er en ide for et prosjekt med en trent universell fjernkontroll, slike ble solgt tidligere. Men nå i internettets alder, reduseres mengden teknologi som kontrolleres på denne måten hvert år.

Og med denne koden kan du gjenkjenne signaler og administrere belastningen:

#include "IRremote.h"

IRrecv irrecv (2); // angi utgangen som mottakeren er koblet til

dekode_resultater;

ugyldig oppsett () {

irrecv.enableIRIn (); // starte mottakelsen

}

void loop () {

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

bytte (results.value) {

sak 0xFFA857:

digitalWrite (13, HØY);

break;

sak 0xFFE01F:

digitalWrite (13, LAV);

break;

    }   

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

  }

}

Det viktigste i koden er gjenkjennelse gjennom Switch-funksjonen, noen ganger kalles de en “switchcase”. Det er en analog av hvis grener, men har en vakrere form for oppfatning. Sak - dette er alternativene, "hvis en slik kode ankommer, så ..." Koden kontrollerer 13 pinner for visse signaler. La meg minne deg om at den innebygde LED-en på ARDUINO-kortet er koblet til pinne 13, dvs. forfatteren av koden kontrollerte LED.

Du kan kontrollere hva som helst ved å bruke en høy eller lav digital pinne gjennom en krafttransistor (som vi dekket i to artikler tidligere her og her) med likestrømbelastning, eller gjennom en triac og en driver for den med likestrømbelastning, kan du også bruke reléer og kontaktorer, generelt sett et helt felt for fantasi.


Mottak og overføring av radiosignaler

For bruk med mikrokontrollere er sendere med driftsfrekvenser på 433 MHz eller 315 MHz vanlige, det kan være andre frekvenser, avhengig av det spesifikke kortet, men disse er de vanligste. Systemet består av to noder - en mottaker og en sender, som er logisk.

Mottak og overføring av radiosignaler

På bildet vises senderen øverst til høyre, og mottakeren nederst til venstre. Navnet deres på søket: 433MHz radiomodul, MX-05V / XD-RF-5V (mottaker og sender).

Utspenningen, som ofte er tilfelle i moduler, er malt på tavlen, som senderen:

Radiosender

Mottakeren er ikke så åpenbar, fordi data på kretskortet er skrevet over to pinner, faktisk brukes ikke en av dem.

Radiomottaker

For eksempel gir vi et diagram og en kode for å slå på LED fra ett Arduino-kort som er koblet til et annet lignende brett, uten ledninger. Mottakeren og senderen er koblet på samme måte til begge kortene:

Mottakeren og senderen på tavlene

enhet

modul

Arduino pinner

mottaker

VCC

GND

DATA

+ 5V

GND

2

senderen

VCC

GND

DATA

+ 5V

GND

2 

Deretter må du koble RCswitch.h-biblioteket til Arduino IDE

For å starte skriver vi senderprogrammet:

#include

RCSwitch mySwitch = RCSwitch(); // opprette et objekt for å jobbe med frontend

ugyldig oppsett () {

    mySwitch.enableTransmit(2); // fortelle programmet hvilken pinne informasjonskanalen er koblet til

}

void loop () {

mySwitch.send (B0100,4);

forsinkelse (1000);

mySwitch.send (B1000, 4);

    forsinkelse (1000);

} 

Senderen kan overføre binær kode, men verdiene kan skrives i desimalform.

mySwitch.send (B0100,4);

og

mySwitch.send (B1000, 4);

dette er overføringskommandoer, mySwitch er navnet på senderen som vi indikerte i begynnelsen av koden, og send er overføringskommandoen. Argumentene for denne funksjonen er:

Senderenavn.send (verdi, pakkestørrelse på pulser sendt til luften);

B1000 - symbolet B - betyr binært, det kan skrives som tallet 8, dvs. i desimalnotasjon. Et annet alternativ var å skrive “1000” som en streng (i anførselstegn).

Deretter skriver vi koden for mottakeren (den blinkes inn på tavlen som mottakeren er koblet til):

#include

RCSwitch mySwitch = RCSwitch ();

ugyldig oppsett () {

pinMode (3, UTGANG);

mySwitch.enableReceive (0);

}

void loop () {

if (mySwitch.available ()) {

int-verdi = mySwitch.getReceivedValue ();

if (verdi == B1000)

digitalWrite (3, HIGH);

annet hvis (verdi == B0100)

digitalWrite (3, LAV);

mySwitch.resetAvailable ();

    }

}

Her erklærer vi at den aksepterte verdien er lagret i Verdivariabelen i strengen mySwitch.getReceivedValue (). Og det faktum at mottakeren er koblet til den andre tappen, beskrives her av mySwiitch.enableReceive (0).

Ellers er koden elementær. Hvis signal 0100 mottas, settes pinne nummer 3 til høyt (log. Enhet), og hvis 1000, deretter til lavt (log. Null).

Jeg lurer på:

I linjen mySwitch.enableTransmit (0) forteller vi programmet at mottakeren er koblet til 2. pinne og mottaksmodus er slått på. De mest oppmerksomme merket at argumentet til denne metoden ikke er pin nummer “2”, men “0”, faktum er at enableTransmit metoden (nummer) ikke aksepterer pin nummeret, men avbryter nummeret, men i atmega328, som er satt på Arduino Uno, nano, promini og flere andre, på den andre pinnen (PortD pin PD2) henger et avbrudd med tallet null. Du kan se dette i Atmega pinout som gjelder Arduino-brettet, pin-tallene er skrevet i rosa bokser.

Atmega pinout

Denne metoden for overføring og mottakelse er veldig enkel og billig; et par mottakere og sendere koster omtrent $ 1,5 i skrivende stund.


Wi-Fi, Adruino og ESP8266

Til å begynne med, ESP8266 er en mikrokontroller med maskinvarestøtte for Wi-Fi, Det selges som en egen chip, og loddet til brettet, som en arduino. Den har en 32-biters kjerne, den er programmert gjennom en seriell port (UART).

Brettene har vanligvis to eller flere gratis GPIO-pinner, og det er alltid pinner for firmware. Dette må gjøres via en USB til seriell adapter. Administrert av AT-team, finner du en fullstendig liste over kommandoer på det offisielle ESP8266 nettstedet og på github.

ESP8266

Det er et mer interessant alternativ, NodeMCU-brett, de har muligheten til å blinke via USB, fordi En USB-UART-omformer er allerede på brettet, vanligvis laget på en CP2102-brikke. Node MCU er en firmware, noe som et operativsystem, et prosjekt basert på Lua-skriftspråk.

NodeMCU styre

Fastvaren kan utføre Lua-skript, enten ved å godta dem på en seriell port eller ved å reprodusere algoritmer lagret i Flash-minnet.

For øvrig har det sitt eget filsystem, selv om det ikke er kataloger i det, d.v.s. bare filer uten mapper. I minnet kan ikke bare skript lagres, men også forskjellige data, dvs. styret kan lagre informasjon registrert, for eksempel fra sensorer.

Styret jobber med grensesnitt:

  • 1-Wire;

  • I2C;

  • SPI;

  • UART.

Den har en rekke funksjoner:

  • krypteringsmodul;

  • oppgaveplanlegger;

  • sanntid klokke;

  • klokkesynkroniseringsprotokoll via internett SNTP;

  • tidtakere;

  • ADC-kanal (en);

  • spille av lydfiler;

  • generere ved utgangene et PWM-signal (opptil 6);

  • bruker stikkontakter, det er støtte for FatFS, dvs. at du kan koble til SD-kort og så videre.

ESP-12E

Og her er en kort liste over hva styret kan jobbe med:

  • akselerometre ADXL345;

  • HMC5883L magnetometre

  • gyroskop L3G4200D;

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

  • sensorer for temperatur, luftfuktighet, atmosfæretrykk BME280;

  • temperatur- og atmosfæriske trykksensorer BMP085;

  • mange skjermer som arbeider på I2C, SPI-busser. Med muligheten til å jobbe med forskjellige skrifter;

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

  • smarte lysdioder og LED-kontrollere - WS2812, tm1829, WS2801, WS2812.

I tillegg til å bruke Lua-språket, kan du programmere brettet fra under Arduino IDE.

ESP8266 kan brukes som en frittstående enhet eller som en modul for trådløs kommunikasjon med Arduino.

Modul for trådløs kommunikasjon med Arduino

Hensynet til alle funksjonene og funksjonene til dette brettet vil ta en hel serie artikler.

Så dette brettet er et flott alternativ for fjernkontroll via Wi-Fi. Omfanget er enormt, for eksempel å bruke en smarttelefon som et kontrollpanel for en provisorisk radiostyrt maskin eller quadrocopter, fjernbelysningskontroll, opp til å ordne nettverk for hele huset og administrere hvert stikkontakt, lampe osv. om det bare var nok pinner.

Den enkleste måten å jobbe med mikrokontrolleren er å bruke et enkelt ESP8266-kort. Nedenfor er et diagram av et enkelt wi-fi-uttak.

Ordningen med det enkleste wifi-uttaket

For å sette sammen denne kretsen trenger du en relémodul, eller et konvensjonelt relé koblet til en pinne gjennom en transistor. Først trenger du et program for en smarttelefon RoboRemoFree,. I den vil du konfigurere tilkoblingen til ESP og lage et grensesnitt for å kontrollere stikkontakten. For å beskrive hvordan du bruker den, må du skrive en egen artikkel, så la oss utelate dette materialet for nå.

I ESP laster vi følgende firmware, gjennom ESPlorer-programmet (program for å jobbe med brettet)

- Wi-Fi AP-oppgjør

wifi.setmode (wifi.STATIONAP)

cfg = {}

cfg.ssid = "ESPTEST"

cfg.pwd = "1234567890"

wifi.ap.config (jfr)

- Sett pin-modus

my_pin_nummber = 1

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

gpio.mode (my_pin_nummber, gpio.OPENDRAIN)

- Lag Server

sv = net.createServer (net.TCP)

funksjonsmottaker (sck, data)

if string.sub (data, 0, 1) == "1" da

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

gpio.write (my_pin_nummber, gpio.LOW)

annet

if string.sub (data, 0, 1) == "0" da

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

gpio.write (my_pin_nummber, gpio.HIGH)

end

end

print (data)

end

hvis sv da

sv: listen (333, function (conn)

conn: på ("motta", mottaker)

conn: send ("Hei!")

slutt)

end

- Lag HTTP-server

http = net.createServer (net.TCP)

funksjon mottar_http (sck, data)

print (data)

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

hvis forespørsel == 'GET / on HTTP / 1.1' da

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

gpio.write (my_pin_nummber, gpio.LOW)

end

hvis forespørsel == 'GET / off HTTP / 1.1' da

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

gpio.write (my_pin_nummber, gpio.HIGH)

end

sck: på ("sendt", funksjon (sck) sck: lukk () collectgarbage () slutt)

local response = "HTTP / 1.0 200 OK \ r \ n Server: NodeMCU på ESP8266 \ r \ nInnholdstype: text / html \ r \ n \ r \ n" ..

" NodeMCU på ESP8266 " ..

"

NodeMCU på ESP8266

" ..

"


" ..

" Av " ..

" "

sck: send (svar)

end

hvis http da

http: lytte (80, funksjon (conn)

conn: on ("motta", motta_http)

slutt)

end

print ("Startet.")

Nå kan du kontrollere programmet enten fra Roboremo-programmet, eller gjennom hvilken som helst nettleser, for dette må du skrive IP-adressen til tavlen i adressefeltet i wi-fi-modus, det 192.168.4.1.

Det er et kodebit i koden:

" NodeMCU på ESP8266 " ..

"

NodeMCU på ESP8266

" ..

"


" ..

" Av " ..

" "

Dette er en slags respons som blir gitt til nettleseren når du får tilgang til styret. Den inneholder HTML-kode, dvs. Den enkleste websiden, lik den du leser denne artikkelen på.

Siden i nettleseren til smarttelefonen som kjører Android OS

Her er denne siden, lansert i nettleseren til en smarttelefon som kjører Android OS. Ovennevnte er ikke en fullstendig instruksjon, siden det vil ta enormt mye hvis du er interessert i denne informasjonen - skriv kommentarer, og vi vil definitivt gjennomføre en anmeldelse og skrive en artikkel om å jobbe med den.

Se også på elektrohomepro.com:

  • Koble til og programmerer Arduino for nybegynnere
  • Metoder for å lese og administrere Arduino I / O-porter
  • Hva er Nextion-skjermer og hvordan du kan jobbe med dem?
  • Programmerbare mikrokontrollere i JavaScript: hvilken du skal velge, egenskaper ...
  • Typer og arrangement av AVR-mikrokontrollere

  •