RF modul se skládá z vysílacího a přijímacího RF modulu 433 MHz. Jedná se o RF moduly typu ASK (Amplitude shift keying) nebo OOK (Of Hook Keying). Při vysílání logické nuly vysílač plně potlačuje nosnou frekvenci, a proto při provozu na baterie spotřebovává jen málo energie. Při vysílání logické jedničky je vysílač zapnutý a nosná frekvence je plně potlačena, a proto dojde k vysokému odběru energie, který se při napájení 3 V pohybuje v rozsahu přibližně 4,5 mA.

Vysílač a přijímač je třeba propojit s mikrokontroléry pro přenos dat. Data jsou vysílána sériově z vysílače a přijímána naladěným přijímačem. RF vysílač přijímá sériová data z mikrokontroléru a vysílá je do přijímače prostřednictvím antény připojené ke 4. pinu vysílače. Přijímač přijímá data přes anténu a předává je mikrokontroléru, který je k němu připojen.

Tyto RF moduly pracují na specifické frekvenci 433 MHz. RF signály se mohou šířit mezi vysílačem a přijímačem i v případě, že je na cestě překážka. Tyto moduly se používají pro simplexní komunikaci na krátkou vzdálenost s nízkým rozpočtem. Díky nízké spotřebě energie jsou ideální pro implementace založené na bateriích. Používají se v různých oblastech, jako je dálkové ovládání osvětlení, RFID s dlouhým dosahem, bezdrátové poplašné a bezpečnostní systémy atd. RF komunikace se používá v mobilní komunikaci a může mít dlouhý dosah, a proto jsou vhodné pro budování aplikací založených na IoT. Začínáme tedy úvodním článkem o RF modulech a o tom, jak lze RF moduly používat s Arduinem k odesílání a přijímání dat.

433 MHz RF vysílací modul

Tento malý modul je RF vysílač. Je velmi jednoduchý. Srdcem modulu je SAW rezonátor, který je naladěn pro provoz na frekvenci 433,xx MHz. Je na něm spínací tranzistor a několik pasivních součástek.

Když je jako vstup DATA zadán logický HIGH, oscilátor je zapnutý a produkuje konstantní výstupní RF nosnou vlnu na frekvenci 433,xx MHz, a když je na vstupu DATA logický LOW, oscilátor je vypnutý, takže se žádná nosná nevytváří. Tato technika se nazývá Amplitude Shift Keying (ASK).

Specifikace

  • Pracovní napětí: 3V – 12V
  • Pracovní proud: max. méně než 40mA a min. 9mA
  • Resonanční režim:
  • Pracovní frekvence: 433,92 MHz
  • Vysílací výkon: 25 mW
  • Chybný kmitočet:
  • Vysílací rychlost: méně než 10 Kb/s
  • Dosah vysílání: 90 m (ve volném prostoru)

Modul RF přijímače 433 MHz

Toto je modul RF přijímače. I když vypadá složitě, je stejně jednoduchý jako modul vysílače. Skládá se z obvodu VF tuneru, OP zesilovačů a PLL. Dvojice OP-zesilovačů slouží k zesílení nosné vlny přijaté z vysílače. Zesílený signál je pak přiveden do obvodu PLL (Phase Lock Loop), který umožňuje dekodéru „uzamknout“ proud digitálních bitů, což poskytuje lépe dekódovaný výstup a odolnost proti šumu.

Specifikace

  • Pracovní napětí: 5,0 VDC +0,5 V
  • Pracovní proud:≤5,5 mA max
  • Modulační režim:
  • Pracovní frekvence: 433.92MHz
  • Šířka pásma: 2MHz
  • Citlivost:

Potřebné komponenty

  • Arduino Nano (2)
  • Modul vysílače RF 433MHz
  • Modul přijímače RF 433MHz
  • Modul přijímače RF 433MHz
  • Potenciometr
  • LED (5)
  • Připojovací vodiče

Schéma zapojení

Schéma zapojení pro RF vysílač s použitím Arduino Nano je uvedeno níže. Zde je připojen potenciometr pro změnu hodnot, které mají být vysílány do přijímače pomocí RF vysílače.

Níže jsou uvedeny podrobnosti o zapojení pinů mezi RF vysílačem a Arduinem

  • Pin D12 Arduina – pin DATA RF vysílače
  • VCC Arduina – VCC RF vysílače
  • GND Arduina – GND RF vysílače
  • .

  • GND Arduina – první pin potenciometru
  • A2 pin Arduina – druhý pin potenciometru
  • VCC Arduina – třetí pin potenciometru

Schéma zapojení RF přijímače pomocí Arduino Nano je uvedeno níže. Máme zde řadu LED diod. LED diody se posouvají na základě hodnot potenciometru přijatých přijímačem.

Níže jsou uvedeny podrobnosti o zapojení pinů mezi RF přijímačem a Arduinem

  • Pin D11 Arduina – pin DATA RF přijímače.
  • VCC Arduina – VCC RF přijímače.
  • GND Arduina – GND RF přijímače.
  • Kladné vývody LED jsou připojeny k digitálním pinům D2, D3, D4, D5 a D6
  • Záporné vývody LED jsou uzemněny.

Vysvětlení kódování

Kompletní kód Arduina pro stranu RF vysílače i přijímače je uveden na konci tohoto návodu, zde vysvětlujeme kompletní program pro pochopení fungování projektu. Než však začneme s kódem, musíme nejprve nainstalovat jednu knihovnu do prostředí Arduino IDE.

Zde používáme knihovnu virtual wire. Stáhněte si knihovnu virtual wire z níže uvedeného odkazu

https://www.resistorpark.com/content/Arduino_Libraries/Arduino_Wireless_Communication_Libraries/VirtualWire.zip

VirtualWire je knihovna Arduino, která poskytuje funkce pro odesílání krátkých zpráv, bez adresování, potvrzování nebo opakovaného vysílání. Zprávy se posílají tak trochu jako UDP přes bezdrátovou síť pomocí ASK (amplitude shift keying). Tato knihovna podporuje řadu levných rádiových vysílačů a přijímačů.

Pro přidání knihovny v Arduino IDE přejděte do Sketch>>Include library>>Add .ZIP library a poté nahrajte knihovnu, kterou jste stáhli z výše uvedeného odkazu.

Po nahrání programu otevřete sériový monitor na obou stranách a uvidíte výstupy, jak je uvedeno níže.

Výstup v části RF vysílače ukazuje hodnoty potenciometru.

A výstup v části přijímače ukazuje přijatou hodnotu senzoru. LED diody jsou posunuty podle rozsahu hodnot snímače. Zde jsme uvedli rozsah 200 pro každou LED.

Takto lze Arduino použít v komunikaci na bázi RF, další projekty IoT na bázi Arduina najdete zde.

Kód

Kód pro sekci RF vysílače
#include <VirtualWire.h>
const int SensorPin = A2; // pin potenciometru
int SensorData;
char SensorCharMsg;
void setup()
{
pinMode(SensorPin,INPUT);
// pro ladění
Serial.begin(9600);
// VirtualWire setup
vw_setup(2000); // Bity za sekundu
}
void loop()
{
// Čtení a ukládání dat senzoru 1
SensorData = analogRead(SensorPin);
// Převedeme celočíselná data přímo na pole Char
itoa(SensorData,SensorCharMsg,10);
// DEBUG
Serial.print(„Sensor Integer: „);
Serial.print(SensorData); //vypište data senzoru
Serial.print(“ Sensor CharMsg: „);
Serial.print(SensorCharMsg); //vypište pole znaků
Serial.println(“ „);
delay(100);
// END DEBUG
vw_send((uint8_t *)SensorCharMsg, strlen(SensorCharMsg)); // odešle zprávu
vw_wait_tx(); // počká, až celá zpráva odejde
delay(200);
} // END void loop

Kód pro sekci RF přijímače
#include <VirtualWire.h>
int SensorData; // Sensors
char SensorCharMsg; // RF Transmission container
const int led1 = 2;
const int led2 = 3;
const int led3 = 4;
const int led4 = 5;
const int led5 = 6;
void setup()
{
Serial.begin(9600);
pinMode(led1, INPUT);
pinMode(led2, INPUT);
pinMode(led3, INPUT);
pinMode(led4, INPUT);
pinMode(led5, INPUT);
// VirtualWire
// Inicializace IO a ISR
// Vyžadováno pro DR3100
vw_set_ptt_inverted(true);
// Bits per sec
vw_setup(2000);
// Spuštění přijímače PLL v chodu
vw_rx_start();
} // END void setup

void loop()
{
uint8_t buf;
uint8_t buflen = VW_MAX_MESSAGE_LEN;
// Non-blocking
if (vw_get_message(buf, &buflen))
{
int i;
// Přijatá zpráva s dobrým kontrolním součtem, vyhoďte ji.
for (i = 0; i < buflen; i++)
{
// Naplňte pole znaků SensorCharMsg odpovídajícími
// znaky z bufferu.
SensorCharMsg = char(buf);
}
// Nulové ukončení pole znaků
// To je třeba udělat, jinak nastanou problémy
//, když příchozí zprávy budou mít méně číslic než ty předchozí
//.
SensorCharMsg = ‚\0‘;
// Převést pole znaků Sensor1CharMsg na celé číslo
SensorData = atoi(SensorCharMsg);
// DEBUG
Serial.print(„Sensor „);
Serial.println(SensorData);
// END DEBUG
}
if (SensorData <= 200)
{
digitalWrite(led1, HIGH);
}
else
digitalWrite(led1, LOW);
if ( SensorData > 200 && SensorData <= 400)
{
digitalWrite(led2, HIGH);
}
else
digitalWrite(led2, LOW);
if ( SensorData > 400 && SensorData <= 600)
{
digitalWrite(led3, HIGH);
}
else
digitalWrite(led3, LOW);
if ( SensorData > 600 && SensorData <= 800)
{
digitalWrite(led4, HIGH);
}
else
digitalWrite(led4, LOW);
if ( SensorData > 800 && SensorData <= 1023)
{
digitalWrite(led5, HIGH);
}
else
digitalWrite(led5, LOW);
}

Video

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.