Az RF modul egy 433 MHz-es RF adó és vevő modulokból áll. Ezek ASK (Amplitude shift keying) vagy OOK (Of Hook Keying) típusú RF modulok. A logikai nulla átvitele során az adó teljesen elnyomja a vivőfrekvenciát, ezért akkumulátoros üzemben csak kis teljesítményt fogyaszt. A logikai egyes átvitelekor az adó be van kapcsolva, és a vivőfrekvencia teljes, és ezért nagy áramellátás lesz, amely körülbelül 4,5mA tartományban van egy 3 V-os tápegységgel.

Az adót és a vevőt az adatátvitelhez mikrokontrollerekkel kell összekapcsolni. Az adatokat sorosan küldi az adó, és egy hangolt vevő fogadja. Az RF adó soros adatokat kap egy mikrokontrollertől, és az adó 4. csapjához csatlakoztatott antennán keresztül továbbítja a vevőnek. A vevő az adatokat egy antennán keresztül fogadja, és az adatokat a hozzá csatlakoztatott mikrokontrollerhez adja.

Ezek az RF modulok egy bizonyos 433MHz-es frekvencián működnek. Az RF jelek akkor is képesek az adó és a vevő között utazni, ha akadályok vannak. Ezeket a modulokat rövid hatótávolságú, alacsony költségvetésű, szimplex alapú kommunikációra használják. Az alacsony energiafogyasztás miatt ideálisak akkumulátoros megvalósításokhoz. Különböző területeken használják, például távoli világításvezérlés, nagy hatótávolságú RFID, vezeték nélküli riasztó- és biztonsági rendszerek stb. esetén. Az RF-kommunikációt a mobil kommunikációban használják, és hosszú hatótávolságú kommunikációval rendelkezhetnek, és ez teszi őket alkalmassá az IoT-alapú alkalmazások építésére. Tehát itt kezdünk egy bevezető cikket az RF modulokról és arról, hogy az RF modulok hogyan használhatók az Arduino-val az adatok küldésére és fogadására.

433 MHz-es RF adómodul

Ez a kis modul az RF adó. Nagyon egyszerű. A modul szíve a 433,xx MHz-es működésre hangolt SAW rezonátor. Van rajta egy kapcsoló tranzisztor és néhány passzív alkatrész.

Amikor a DATA bemenet logikai HIGH értéket kap, az oszcillátor be van kapcsolva, és állandó RF kimeneti vivőhullámot állít elő 433,xx MHz-en, és amikor a DATA bemenet logikai LOW értéket kap, az oszcillátor ki van kapcsolva, így nem keletkezik vivőhullám. Ezt a technikát Amplitude Shift Keying (ASK) technikának nevezik.

Specifikációk

  • Működési feszültség: 3V – 12V
  • Működési áram: max Kevesebb mint 40mA, és min 9mA
  • Rezonancia üzemmód: +150kHz (max)
  • Sugárzási sebesség: kevesebb, mint 10Kbps
  • Átviteli tartomány: 90m (nyílt térben)

433 MHz RF vevőmodul

Ez az RF vevőmodul. Bár összetettnek tűnik, ugyanolyan egyszerű, mint az adómodul. Egy RF tuner áramkörből, OP erősítőkből és egy PLL-ből áll. Néhány OP-erősítő az adóból kapott vivőhullám erősítésére szolgál. Az erősített jelet ezután egy PLL-be (Phase Lock Loop) táplálják, amely lehetővé teszi a dekóder számára, hogy “rögzítse” a digitális bitfolyamot, ami jobb dekódolt kimenetet és zajmentességet biztosít.

Specifikációk

  • Munkafeszültség: 5,0VDC +0,5V
  • Munkaáram: ≤5,5mA max
  • Modulációs mód: OOK/ASK
  • Működési frekvencia: 433. (50Ω)

Szükséges alkatrészek

  • Arduino Nano (2)
  • RF 433MHz adó modul
  • RF 433MHz vevő modul
  • RF 433MHz vevő modul
  • .

  • Potenciométer
  • LED (5)
  • Kötővezetékek csatlakoztatása

Áramköri rajz

Az alábbiakban az Arduino Nano segítségével működő RF adó áramköri rajzát adjuk meg. Itt egy potenciométer van csatlakoztatva az RF adóval a vevőnek küldendő értékek változtatásához.

Az alábbiakban az RF adó és az Arduino közötti pin csatlakozások részletei találhatók

  • D12 pin az Arduino – DATA pin az RF adó
  • VCC az Arduino – VCC az RF adó
  • GND az Arduino – GND az RF adó
  • GND az Arduino – a potenciométer első csapja
  • A2 csap az Arduino – a potenciométer második csapja
  • VCC az Arduino – a potenciométer harmadik csapja

Az alábbiakban látható az RF vevő áramköri diagramja az Arduino Nano használatával. Itt van egy sor LED-ünk. A LED-ek a vevő által kapott potenciométer-értékek alapján eltolódnak.

Az alábbiakban az RF vevő és az Arduino közötti pin-kapcsolatok részletei láthatók

  • Az Arduino D11 csapja – az RF vevő DATA csapja.
  • Az Arduino VCC – az RF vevő VCC.
  • Az Arduino GND – az RF vevő GND.
  • A LED-ek pozitív vezetékei a D2, D3, D4, D5 és D6 digitális csapokhoz vannak csatlakoztatva
  • A LED-ek negatív vezetékei földelve vannak.

Kódolás magyarázata

A teljes Arduino kódot mind az RF adó-, mind a vevőoldalon a bemutató végén adjuk meg, itt magyarázzuk a teljes programot, hogy megértsük a projekt működését. De mielőtt elkezdenénk a kódot, először telepítenünk kell egy könyvtárat az Arduino IDE-ben.

Itt a virtuális vezeték könyvtárat használjuk. Töltse le a virtuális huzal könyvtárat az alábbi linkről

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

A virtuális huzal egy Arduino könyvtár, amely rövid üzenetek küldéséhez nyújt funkciókat, címzés, nyugtázás vagy újraküldés nélkül. Az üzeneteket az UDP-hez hasonlóan vezeték nélküli kapcsolaton keresztül ASK (amplitude shift keying) használatával küldi. Ez a könyvtár számos olcsó rádiós adót és vevőt támogat.

A könyvtár hozzáadásához az Arduino IDE-ben menjen a Sketch>>Include library>>Add .ZIP library majd töltse fel a fenti linkről letöltött könyvtárat.

A program feltöltése után nyissa meg a soros monitort mindkét oldalon, és látni fogja a kimeneteket az alábbiak szerint.

Az RF adó szakasz kimenete mutatja a potenciométer értékeit.

És a vevő kimenete mutatja a fogadott érzékelő értékét. A LED-ek az érzékelőértékek tartományának megfelelően eltolódnak. Itt minden LED-hez 200-as tartományt adtunk meg.

Így tehát az Arduino használható az RF-alapú kommunikációban, további Arduino-alapú IoT-projekteket itt nézhet meg.

Kód

Kód az RF adó szakaszhoz
#include <VirtualWire.h>
>
const int SensorPin = A2; // potenciométer pin
int SensorData;
char SensorCharMsg;
void setup()
{
pinMode(SensorPin,INPUT);
// a hibakereséshez
Serial.begin(9600);
// VirtualWire setup
vw_setup(2000); // Bits per sec
}
void loop()
{
// Érzékelő 1 adatok beolvasása és tárolása
SensorData = analogRead(SensorPin);
// Az integer adatokat közvetlenül Char tömbbe konvertáljuk
itoa(SensorData,SensorCharMsg,10);
// DEBUG
Serial.print(“Sensor Integer: “);
Serial.print(SensorData); // kiírja az érzékelő adatait
Serial.print(” Sensor CharMsg: “);
Serial.print(SensorCharMsg); //kiírja a char tömböt
Serial.println(” “);
delay(100);
// END DEBUG
vw_send((uint8_t *)SensorCharMsg, strlen(SensorCharMsg)); // elküldi az üzenetet
vw_wait_tx(); // Várjon, amíg az egész üzenet el nem fogy
delay(200);
} // END void loop

Kód az RF vevő részhez
#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
// Az IO és az ISR inicializálása
// DR3100 esetén szükséges
vw_set_ptt_inverted(true);
// Bits per sec
vw_setup(2000);
// A vevő PLL futásának elindítása
vw_rx_start();
} // END void setup

void loop()
{
uint8_t buf;
uint8_t buflen = VW_MAX_MESSAGE_LEN;
// Nem blokkoló
if (vw_get_message(buf, &buflen))
{
int i;
// Jó ellenőrzőösszegű üzenet érkezett, dobjuk ki.
for (i = 0; i < buflen; i++)
{
// SensorCharMsg Char tömb feltöltése a megfelelő
// karakterekkel a pufferből.
SensorCharMsg = char(buf);
}
// Nullázzuk a char tömböt
// Ezt meg kell tenni, különben problémák lépnek fel
// amikor a beérkező üzenetek kevesebb számjegyet tartalmaznak, mint az előző
//.
SensorCharMsg = ‘\0’;
// Sensor1CharMsg Char tömb átalakítása egész számmá
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

.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.