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.

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.

Her er spesifikasjonene til en av IR-sensorene:
-
transportfrekvens: 38 kHz;
-
forsyningsspenning: 2,7 - 5,5 V;
-
strømforbruk: 50 μA.
Og tilkoblingsskjemaet:

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.

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

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:

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.

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:

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

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:

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.

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.

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.

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.

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.

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.

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

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: