V članku vam bomo predstavili, kako uporabiti male VF sprejemnike in oddajnike za izdelavo daljinskega krmiljenja.
Za pravilno delovanje programa boste potrebovali knjižnico RadioHead library, ki jo snamete na spletnem mestu [1] in [2], glej sliko 1. Razzipajte datoteko in jo kopirajte v Arduino mapo s knjižnicami, glej sliko 2. Zdaj bi že lahko odprli RadioHead primer programa, glej sliko 3. Oddajni modul vidimo na sliki 4.
Na sliki 4 vidite, da je za anteno uporabljen kar kos žičke. Najbolje je, da za anteno uporabite žičko, ki je dolga ¼ valovne dolžine radijskega signala. V našem primeru oddajamo na frekvenci 433 MHz, kar pomeni, da je valovna dolžina radijskega signala 0,692m (300.000 km/s/433 MHz). Dolžina antene naj bo ¼ valovne dolžine, kar znese 17 cm. Na voljo imate tudi spletni kalkulator, ki ga najdete na spletnem naslovu [3]. Uporabite enako dolžino žičke tako za oddajnik kot tudi za sprejemnik.
Sprejemni modul
Testno vezje Arduino ploščice in oddajnika vidite na sliki 6.
Testni program za oddajnik, glej program 1.
Vezje sprejemnika
Testni program sprejemnika, glej program 2.
In rezultat
Kot rezultat si lahko ogledate video posnetek na strani avtorja. V kolikor boste želeli spremeniti kodo programa tako, da oddajnik vašega kolega ne bi odpiral vaših vrat, si v spremenljivki “message” v oddajnem in sprejemnem programu zamislite drugačno kodo. Zdaj je ta koda nastavljena enostavno na črko a.
Želimo vam uspešno programiranje v Arduino okolju.
Vir:
- http://www.airspayce.com/mikem/arduino/RadioHead/index.html – (1)
- http://www.airspayce.com/mikem/arduino/RadioHead/RadioHead-1.81.zip – (2)
- http://www.onlineconversion.com/frequency_wavelength.htm – (3)
- https://trgovina.svet-el.si/wp-content/uploads/2019/11/TLP434A_TX.pdf – (4)
- https://trgovina.svet-el.si/wp-content/uploads/2019/11/RLP434A_Data.pdf – (5)
- https://www.hackster.io/taunoerik/radio-frequency-transmitter-receiver-module-with-arduino-af01e4
Hackster Inc.
Avtor: Tauno Erik
2019_280_35
www.hackster.io
program 1
#include <RH_ASK.h> #include <SPI.h> constchar *message = »«; int button = 2; RH_ASK driver; voidsetup(){ Serial.begin(9600); // Debugging only if (!driver.init()){ Serial.println(»init of receiver failed«); } pinMode(button,INPUT); } voidloop(){ if (digitalRead(button) == HIGH){ message=«a«; driver.send((uint8_t *)message, strlen(message)); // send the message driver.waitPacketSent(); // Wait until the whole message is gone Serial.println(message); Serial.println(strlen(message)); delay(2000); } else{ //Serial.println(»Low«); } }
program 2
#include <RH_ASK.h> #include <SPI.h> RH_ASK driver; //pin 12 // RH_ASK driver(2000, 2, 4, 5); // ESP8266: do not use pin 11 int ledPassive = 5; //standby light int ledActive = 7; //green LED's voidsetup() { pinMode(ledPassive,OUTPUT); pinMode(ledActive,OUTPUT); Serial.begin(9600); // Debugging only if (!driver.init()) Serial.println(»init of receiver failed«); } voidloop() { digitalWrite(ledPassive,HIGH); noTone(8); digitalWrite(ledActive,LOW); uint8_t buf[RH_ASK_MAX_MESSAGE_LEN]; uint8_t buflen = sizeof(buf); if (driver.recv(buf, &buflen)) { // if message received for(int i=0;i<sizeof(buf);i++){ Serial.print(char(buf[i])); //test display output } if(buf[0]=='a'){ // and if the first letter in message array is X digitalWrite(ledPassive,LOW); for(int i=0;i<10;i++){ // loop alternates between LED and buzzer digitalWrite(ledActive,HIGH); tone(8, 262); //pin 8 delay(100); } } elseif(buf[0]!='a'){ digitalWrite(ledPassive,HIGH); noTone(8); } } }