Ovaj modul ima široku uporabu zbog odnosa cijene i dobivenog te je česta opcija u daljinskim upravljačima različite namjene.
Moduli odašiljača i prijemnika su različiti i podržavaju samo jednosmjernu komunikaciju (od odašiljača ka prijemniku).
ODAŠILJAČ
Karakterisitke:
- Napajanje : 3-12V
- Radna frekvencija: 433.92MHz
- Struja u mirovanju: 0mA
- Struja pri slanju :20-28mA
- Domet: 5-200m (ovisno o naponu i prostoru)
- Izlazna snaga: 16dBm (40mW)
- Brzina prijenosa: <10Kbps
- Modulatcija: OOK (Amplitudna Modulacija)
- Radna temperatura: -10 ℃ ~ +70 ℃
- Veličina: 19×19×8mm
PRIJEMNIK
Karakteristike:
- Radni napon: DC5V
- Potrošnja: 4mA
- Radna frekvencija: 433.92MHz
- Osjetljivost:-105DB
- Dimenzije:30x14x7mm
PRVI PRIMJER - SLANJE TEKSTUALNE PORUKE PREKO RF 433 MODULA
Za ovaj primjer nam trebaju dva mikrokontrolera, u našem primjeru će to biti Arduino Uno, odašiljački modul, prijemni modul i 6 spojnih žica (Dupont M/F).
Spajanje odašiljača:
Programski kod za odašiljač:
#include <VirtualWire.h> // Ukoliko nemate VirtualWire library preuzmite ga s http://rik-popovaca.hr/arduino/libraries/VirtualWire.zip void setup() { // Inicijalizacija vw_set_ptt_inverted(true); vw_setup(2000); // Brzina (Bitova u sekundi) } void loop() { const char *msg = "Poruka poslana"; // Poruka koju saljemo prijemniku digitalWrite(13, true); // LED na pinu D13 je ukljucen prilikom slanja vw_send((uint8_t *)msg, strlen(msg)); vw_wait_tx(); digitalWrite(13, false); delay(200); }
Spajanje prijemnika:
Programski kod za prijemnik:
#include <VirtualWire.h> // Ukoliko nemate VirtualWire library preuzmite ga s http://rik-popovaca.hr/arduino/libraries/VirtualWire.zip void setup() { Serial.begin(9600); Serial.println("setup"); // Inicijalizacija vw_set_ptt_inverted(true); vw_setup(2000); // Brzina (Bitova u sekundi) vw_rx_start(); // Pokreni prijemnik } void loop() { uint8_t buf[VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN; if (vw_get_message(buf, &buflen)) // Ukoliko smo primili poruku { int i; digitalWrite(13, true); // LED na pinu D13 je ukljucen prilikom prijema Serial.print("Primljeno: "); for (i = 0; i < buflen; i++) // Petlja za primanje poslanih podataka { char c = (buf[i]); Serial.print(c); // Ispis znak po znak } Serial.println(""); digitalWrite(13, false); } }
DRUGI PRIMJER - DALJINSKO PALJENJE LED
Spajanje odašiljača:
Programski kod za odašiljač:
#define NETWORK_SIG_SIZE 3 #define VAL_SIZE 2 #define CHECKSUM_SIZE 1 #define PACKET_SIZE (NETWORK_SIG_SIZE + VAL_SIZE + CHECKSUM_SIZE) #define NET_ADDR 5 #define CRVENA 5 #define ZUTA 6 #define ZELENA 7 const byte g_network_sig[NETWORK_SIG_SIZE] = {0x8F, 0xAA, NET_ADDR}; int broj; void setup(){ pinMode(CRVENA, INPUT_PULLUP); pinMode(ZUTA, INPUT_PULLUP); pinMode(ZELENA, INPUT_PULLUP); Serial.begin(1200); // Brzina 1200 bps } void loop(){ int cr = digitalRead(CRVENA); int zu = digitalRead(ZUTA); int ze = digitalRead(ZELENA); if (cr == LOW) broj = 5; if (zu == LOW) broj = 6; if (ze == LOW) broj = 7; writeUInt(broj); broj = 0; } void writeUInt(unsigned int val){ byte checksum = (val/256) ^ (val&0xFF); Serial.write(0xF0); Serial.write(g_network_sig, NETWORK_SIG_SIZE); Serial.write((byte*)&val, VAL_SIZE); Serial.write(checksum); //CHECKSUM_SIZE }
Spajanje prijemnika:
Programski kod za prijemnik:
#define NETWORK_SIG_SIZE 3 #define VAL_SIZE 2 #define CHECKSUM_SIZE 1 #define PACKET_SIZE (NETWORK_SIG_SIZE + VAL_SIZE + CHECKSUM_SIZE) #define NET_ADDR 5 #define CRVENA 5 #define ZUTA 6 #define ZELENA 7 const byte g_network_sig[NETWORK_SIG_SIZE] = {0x8F, 0xAA, NET_ADDR}; int broj; void setup(){ pinMode(CRVENA, OUTPUT); pinMode(ZUTA, OUTPUT); pinMode(ZELENA, OUTPUT); Serial.begin(1200); // Brzina 1200 bps } void loop(){ broj = readUInt(true); digitalWrite(CRVENA, (broj == 5)); digitalWrite(ZUTA, (broj == 6)); digitalWrite(ZELENA, (broj == 7)); } unsigned int readUInt(bool wait){ int pos = 0; unsigned int val; byte c = 0; if((Serial.available() < PACKET_SIZE) && (wait == false)){ return 0xFFFF; } while(pos < NETWORK_SIG_SIZE){ while(Serial.available() == 0); c = Serial.read(); if (c == g_network_sig[pos]){ if (pos == NETWORK_SIG_SIZE-1){ byte checksum; while(Serial.available() < VAL_SIZE + CHECKSUM_SIZE); val = Serial.read(); val += ((unsigned int)Serial.read())*256; checksum = Serial.read(); if (checksum != ((val/256) ^ (val&0xFF))){ // Checksum failed pos = -1; } } ++pos; } else if (c == g_network_sig[0]){ pos = 1; } else{ pos = 0; if (!wait){ return 0xFFFF; } } } return val; }
Facebook Social Comments