KKM: 433MHZ ODAŠILJAČ I PRIJEMNIK

KKM: 433MHZ ODAŠILJAČ I PRIJEMNIK-Uncategorized

Početnik si s Dasduinom. Ili s elektronikom? Za oko ti je zapeo određeni modul, ali ne znaš kako ga koristiti? Bez brige, tu je KKM! Kako Koristiti Module (KKM) je serija blog tutorijala tvrtke soldered na kojoj ćeš pronaći sve što ti treba kako bi započeo rad sa svojim omiljenim modulom. Tutorijali obuhvaćaju: tehničke karakteristike, princip rada, upute kako povezati modul s Dasduinom te osnovni kod. Sve ostalo prepuštamo tebi na maštu.

UVOD

U današnjem tutorialu upoznati ćemo se s jednim zanimljivim modulom za radijsku komunikaciju koji odašilje na 433 MHz i koristi ASK (Amplitude Shift Keying) modulaciju, odnosno modulaciju amplitude. Kako funkcionira te kako primijeniti u nekom od naših projekata, vidjet ćemo u nastavku.

• Frekvencija: 433MHz
• Modulacija: ASK
• Izlaz na prijemniku: HIGH – 1/2 od VCC, LOW – 0.7V
• Napon na odašiljaču: 3V – 12V (veći napon = veći doseg)
• Domet: Max. 40m u zatvorenom prostoru, 100m na otvorenom prostoru (za bolji doseg koristiti antenu(zalemiti na mjesto ANT na pločicama) te veći napon na odašiljaču)

KAKO RADI

Ovi moduli su vrlo popularni među hobbistima i makerima, prvenstveno zbog vrlo pristupačne cijene i jednostavnosti korištenja. Koriste se uglavnom za komunikaciju na kraće udaljenosti, koja ovisi o naponu na odašiljaču, postojanju antene te RF šumu na frekvenciji od 433 MHz u vašoj okolini. Jedna super stvar kod ovih odašiljača je ta što prilikom odašiljanja logičke “0” transmitter ne troši dodatnu snagu (zbog ASK modulacije) pa je time smanjena i ukupna potrošnja energije, odlično za projekte koji koriste baterije.

ASK
U telekomunikacijama modulacije se dijele na analogne i digitalne. Cilj analognih modulacija je prenjeti analogni signal preko analognog komunikacijskog kanala, a digitalnih prenjeti niz digitalnih bitova preko analognog kanala. Jedna od tih digitalnih modulacija je i ASK modulacija koju koristi promatrani uređaj. ASK (engl. Amplitude-shift keying) je vrsta modulacije amplitude koja mijenja amplitudu prijenosnog signala ovisno o bitu kojeg želi prenjeti. Tako će na primjer za logičku “1” ASK imati neki iznos amplitude veći od nule, a za logičku “0” amplituda će biti nula.

 

Dizajniranje antene
Moduli sami po sebi će dovoljno dobro raditi, ali za kraće udaljenosti (nekoliko metara). Kako bismo dobili bolji prijem, odnosno veći domet, preporučeno je zalemiti antenu i na odašiljač i na prijemnik. Dizajniranje antene i prilagodnog sklopa u većini slučajeva je vrlo kompleksan i detaljan proces. Međutim, jednostavnost ovih modula omogućava nam i jednostavnost dizajniranja potrebne antene. Sve na što trebamo pripaziti je duljina same antene.
Najbolje je koristiti žicu od “jednog vlakna”, a ne onu koja se sastoji od više manjih žičica. Lakše je na engleskom pa ćemo ju nazvati sa solid wire.
Dakle, koristiti ćemo monopol antenu za koju trebamo odrediti kolika će biti duljina te žice (antene)… nije dovoljno samo zalemiti bilo koju žicu i očekivati da će to raditi, trebala bi se prvo odrediti valna duljina signala, zatim možemo koristiti polovinu ili četvrtinu te valne duljni kako bismo smanjili dimenzije antene. Valnu duljinu određujemo pomoću sljedeće formule:

gdje je: λ – valna duljina, c – brzina svjetlosti i f – frekvencija
Za našu antenu koja koristi frekvenciju 433 MHz, dobijemo da je valna duljina 0,69236 m. Bila bi to poprilično dugačka antena, pa je praktičnije koristiti samo četvrtinu valne duljine (ako vam nije jasno zašto, proučite detaljnije kako antene funkcioniraju, no to je za one koji žele znati više) tj. trebamo žicu duljine 17,31 cm.

KAKO SPOJITI

Ako ste napravili svoje antene zalemite ih na mjesta prikazana na slici. Ako želite samo isprobati kako radi i niste radili antene, preskočite ovaj dio.

Spojite transmitter (lijevo) i receiver (desno) sa Dasduinom prema slici, kao i potenciometar na strani transmittera.

 

ARDUINO KOD

Da bismo mogli lakše isprogramirati naš Dasduino koristiti ćemo već gotovu biblioteku za ove radio module. Biblioteku “RadioHead” preuzmite sa linka. Nakon što smo preuzeli biblioteku, otvorite vaš Arduino IDE…na alatnoj traci kliknite na “Sketch” > “Include Library” > “Add .ZIP Library…” > Ovdje pronađite folder u koji ste spremili biblioteku, odaberite “RadioHead-1.89.zip” i kliknite “OK”. Nakon što smo uspješno instalirali biblioteku, vrijeme je za programiranje.

U sljedećem primjeru kontrolirat ćemo ugrađenu LEDicu na pinu 13 Dasduina (na strani receivera) i to okretanjem potenciometra na strani transmittera. Uploadajte kod, posebno za transmitter, a posebno za receiver.

Transmitter

#include "RH_ASK.h"
#include "SPI.h"
// pin 12 for data
RH_ASK driver;  // kreiranje RH_ASK objekta
uint8_t buff[2];  // buffer
uint8_t bufflen = sizeof(buff); // veličina buffera u bajtovima
uint16_t value; // vrijednost u koju spremamo očitavanja adc-a
void setup() {
  Serial.begin(9600);
  if (!driver.init()) { // inicijalizacija
    Serial.println("init failed");
  }
}
void loop() {
  value = analogRead(0); // očitavanje vrijednosti potenciometra
  buff[0] = value; // spremanje prvih 8 bitova vrijednosti sa adc-a u prvi bajt buffera
  buff[1] = (value >> 8); // spremanje 9. i 10. bita vrijednosti adc-a u drugi bajt buffera
  driver.send(buff, &bufflen); // slanje podataka iz buffera
  driver.waitPacketSent(); // pričekaj dok se pošalje
  delay(200);
}

Receiver

#include "RH_ASK.h"
#include "SPI.h"
// pin 11 for data
RH_ASK driver;  // kreiranje RH_ASK objekta
uint8_t buff[2];  // buffer
uint8_t bufflen = sizeof(buff); // veličina buffera u bajtovima
uint16_t value; // varijabla u kojoj će biti rekonstruirana vrijednost sa adc-a
void setup() {
  Serial.begin(9600); // zapocni serijsku komunikaciju
  if (!driver.init()) { // ako receiver nije uspjesno inicijaliziran
    Serial.println("init failed");
  }
  pinMode(13, OUTPUT);  // ledica kao output
}
void loop() {
  if (driver.recv(buff, &bufflen) ) { // spremanje primljenih vrijednosti u buffer
    value = buff[0];  // spremanje prvih 8 bitova u vrijednost "value"
    value |= (buff[1] < 512) {
    digitalWrite(13, HIGH);
  }
  // inače, ugasi ledicu
  else {
    digitalWrite(13, LOW);
  }
}