Prog Shield RF-Transmitter
TX modulet er et lille modul, der sender 433 MHz bærebølge når det får et højt signal. Ved at skifte mellem høj og lav et er bestemt mønster kan man sende digital information til RF-Receiveren, så man på den måde kan kommunikere mellem to Arduinoer.
Modulet kan købes i Kina ved f.x. miniinthebox[1].
Det kan være svært at finde specifikationer på modulet, men noget kan læses på dette website[2]
Software
Softwaren er bygget op omkring et bibliotek, der ligger i denne ZIP-fil. Biblioteket downloades og installeres som beskrevet under Arduinos biblioteker.
Biblioteket indeholder kode til både transmitter og receiver, så det kommer an på hvad man trækker ud af objekter til at kommunikere med, om den bliver sender eller modtager.
Softwaren garanterer slet ikke at alle pakker kommer igennem, da det er opbygget som én-vejs kommunikation, så der er ikke mulighed for at retransmittere pakker der mistes. Man er altså nødt til at basere sin kommunikation på, at der faktisk MISTES pakker. Så informationer der skal over vil man typisk blive ved med at sende, og det må ikke betyde noget om de modtages flere gange.
Anvendelsen af softwaren
Her skitseres hvordan man ud fra eksemplet i test_tx kan bygge en sender, der kan sende 3 bytes data over til en modtager med samme adresse.
Som alle andre biblioteker skal der sættes de grundlæggende ting op for at kontakte biblioteket og definere benforbindelser, og her skal også defineres hvilken adresse man sender til, da det er en del af pakken, så hvis modtageren ikke har samme adresse, så vil den smide pakkerne væk. Denne teknik gør at flere apparater kan bruge den samme protokol, uden at de forstyrrer hinanden, andet end hvis de sender pakkerne samtidigt.
Der er også defineret variabler og konstanter der anvendes til at opbygge indholdet i pakken, nemlig en tællevariabel og en trykknap.
#include "RF_link.h"
// constants won't change. They're used here to
// set pin numbers:
// const int RF_linkRxPin = 2;
const byte RF_linkTxPin = 3;
const byte Button = 8;
const byte adresse = 33; // Same address as the RX-part
#define pakkeSize 3
byte txPakke[pakkeSize];
byte test = 0;
byte knap = 0;
Inde i setup() skal der sættes gang i objektet ved hjælp af tx_begin-metoden som vist her:
void setup() {
LINK.tx_begin(RF_linkTxPin, pakkeSize);
Serial.begin(9600);
}
Den serielle port anvendes blot til test-udskift på seriel monitor.
I loop() bygges indholdet af pakken, og det placeres i et array, der så kan sendes med send()-metoden.
void loop() {
if (digitalRead(Button)){
knap = 1;
} else {
knap = 0;
}
txPakke[0] = 47;
txPakke[1] = knap;
txPakke[2] = test++;
LINK.send(adresse, txPakke);
delay(100);
Serial.print("Send: ");
Serial.print(knap);
Serial.print(" - ");
Serial.print(test);
Serial.println();
}
Den resterende del af koden er et delay, så andre også kan kommunikere på 433 MHz, samt test-udskrift.
Yderligere muligheder i softwaren
Der ligger yderligere muligheder i klassen man kan anvende, primært er det modtager-funktionerne, men man kan også anvende modulet, så man kun sender en enkelt byte, og ikke en pakke med flere bytes:
static bool available();
static void read(byte buf[]);
static byte readByte();
static void send(byte adr, byte buf[]);
static void sendByte(byte adr, byte data);
static bool rx_begin(byte address, byte intNumber, byte bytesToReceive);
static void tx_begin(byte outputPin, byte bytesToTransmit);
Hardware
Modulet placeres blot på programmerings-shieldet.
Test
Ved en test kan det ses på Serial Monitor hvad programmet sender. Det kan se ud som følger:
Send: 0 - 14 Send: 0 - 15 Send: 0 - 16 Send: 0 - 17 Send: 1 - 18 Send: 1 - 19 Send: 0 - 20 Send: 0 - 21 Send: 0 - 22 Send: 1 - 23 Send: 1 - 24 Send: 1 - 25 Send: 1 - 26 Send: 1 - 27 Send: 0 - 28 Send: 0 - 29 Send: 0 - 30
Layout
TX-Link modulets placering på programmerings-shieldet kan ses her:
Placering af TX-Link modulet