Prog Shield RF-Receiver

Fra Holstebro HTX Wiki
Skift til: navigering, søgning
RX modulet der kan sættes på Prog-shieldet som vist nederst på siden

RX modulet er et lille modul, der lytter efter en 433 MHz bærebølge og giver et højt signal mår det modtages. Ved at skifte mellem høj og lav et er bestemt mønster fra senderen kan man modtage digital information fra RF-Transmitter, 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.

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_rx kan bygge en modtager, der kan modtage pakker med 3 bytes data fra en sender 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.

#include "RF_link.h"

// constants won't change. They're used here to 
// set pin numbers:
// const int RF_linkTxPin = 3;      // the number of the transmitter pin
const byte RF_linkRxPin = 2;     // the number of the Receiver pin
const byte adresse = 33;
#define pakkeSize 3

byte rxPakke[pakkeSize];

Inde i setup() skal der sættes gang i objektet ved hjælp af rx_begin-metoden som vist her:

void setup() {
  LINK.rx_begin(adresse, 0, pakkeSize);
  Serial.begin(9600);
  Serial.println("Seriel Modtage Test");
  Serial.println("-------------------");
  Serial.println("");
}

Den serielle port anvendes blot til at viser resultatet af det modtagne i serial Monitor.

I loop() tjekkes om der er modtaget en pakke, og hvis der er det så placeres i et array ved hjælp af read()-metoden, herefter udskrives indholdet af arrayet.

void loop() {
  if (LINK.available()) {
    LINK.read(rxPakke);
    for (int n = 0; n < pakkeSize; n++) {
      Serial.print(rxPakke[n]);
      Serial.print(" ");
    }
    Serial.println();
  }
  delay(10);
}

Yderligere muligheder i softwaren

Der ligger yderligere muligheder i klassen man kan anvende, primært er det sender-funktionerne, men man kan også anvende modulet, så man kun modtager 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 vil IKKE fungere ordenligt, hvis det blot placeres i stikket på programmerings-shieldet.

Man er nødt til at forlænge det ud af shieldet med nogle forlænger-kabler.

Test

Ved at kigge i Serial Monitor kan man se hvad programmet modtager. Det kunne f.x. se ud som følger:

47 0 14 
47 0 16 
47 0 17 
47 1 18 
47 1 19 
47 0 21 
47 0 22 
47 1 23 
47 1 24 
47 1 25 
47 0 28 
47 0 29 
47 0 30 

Hver pakke der modtages svarer til en linje. Tallet 47 er bare et konstant tal der sendes med i pakken - det kan ikke skifte. Det næste tal et status på en knap, og som det kan ses skifter den og der er trykket på knappen på sender-siden.

Det sidste tal angiver et nummer på pakken, og som det kan ses, så er det ikke alle pakker der modtages.

Grunden til det er at alle pakker sendes med en adresse og en check-sum (sammentælling af alle bytes i pakken), samt at alle bytes sendes både som ægte værdi og som inverteret. Alle de ekstra informationer kontrolleres når der modtages en pakke, og hvis bare EN ting går galt, så kasseres pakken.

Vi kan altså være meget sikker på at hvis vi har modtaget en pakke, så er indholdet korrekt, men det betyder til gengæld at vi mister en del pakker.

Layout

RX-Link modulets placering på programmerings-shieldet kan ses her:
Layout-RX-Link.png
Placering af RX-Link modulet

Læg mærke til at modulet skal forlænges ud af shieldet for at det kan modtage ordentligt

Referencer