Wat gebeurt er? 433 Mhz modules

Hallo allemaal

Vandaag wil ik je de laatste bijdrage van de serie "What's sparks there?" Presenteren. stel je voor. We beginnen met een primitieve radioverbinding tussen twee VN. Wij gebruiken hiervoor een 433 Mhz ingesteld  uit onze online shop samen met twee controllers. U vindt het e-boek voor de radiomodules hier.Eerst sluiten we de modules eenvoudigweg aan op de Unos, zoals weergegeven in de afbeelding:

Over het algemeen is het niet raadzaam om de 433Mhz-modules op een breadboard te gebruiken, omdat het metaal dat erin zit het signaal verstrooit of stoort, maar we komen terug op het onderwerp interferentie.

Het idee achter de volgende schetsen is om een ​​eenvoudig hoog signaal te verzenden via de 433Mhz-modules van de verzendende naar de ontvangende VN. We beginnen met de code voor de zender:

int gegevens = 7;

nietig instellen(){
 Serie.beginnen(9600);
 pinMode(LED_BUILTIN, UITGANG);
 pinMode(5, UITGANG); 
 digitalWrite(5, LAAG); // Laten we gebruiken als GND
 pinMode(6, UITGANG);
 digitalWrite(6, HOOG); // Laten we gebruiken als VCC
 pinMode(gegevens, UITGANG); 
 digitalWrite(gegevens, LAAG);  // Voor de gegevens
}

nietig lus() {            digitalWrite(gegevens, LAAG);   digitalWrite(LED_BUILTIN, LAAG);   vertraging(1000);   digitalWrite(gegevens, HOOG);   digitalWrite(LED_BUILTIN, HOOG);   vertraging(1000);
}

In onze vorige berichten hebben we laten zien hoe je een DVB-T-stick instelt als SDR op de Raspberry en hoe je GQRX installeert. Nou, we zijn deze oplossing een beetje ontgroeid en gebruiken in dit voorbeeld SDR # in Windows.

Zoals we kunnen zien, werkt onze schets vrij goed en doet hij wat hij zou moeten. Nu zorgen we voor de code voor de ontvanger:

int gegevens = 5;

nietig instellen(){
 Serie.beginnen(9600);
 pinMode(LED_BUILTIN, UITGANG);
 pinMode(4, UITGANG); 
 digitalWrite(4, LAAG); // Laten we gebruiken als GND
 pinMode(gegevens, INGANG); 
 digitalWrite(gegevens, LAAG);  // Voor de gegevens
 pinMode(7, UITGANG);
 digitalWrite(7, HOOG); // Laten we gebruiken als VCC
}

nietig lus() {     // zet de LED op hoog wanneer het signaal wordt ontvangen   digitalWrite(LED_BUILTIN,digitaal lezen(gegevens));   vertraging(50);
}

Zodra de code is verzonden, moeten we registreren dat de interne LED van de ontvanger oplicht voor elk hoog signaal van de zender. Helaas werkt dit helemaal niet, zoals u wellicht zult ontdekken tijdens het bouwen van dit project.

Hier zijn veel redenen voor, maar ik wil niet in meer detail treden om niet buiten het bestek van dit artikel te gaan. Daarom zijn we op zoek naar een bibliotheek die foutcorrecties bevat en kunnen we betrouwbaar meer complexe gegevens verzenden dan een primitief hoog laag signaal. De oplossing voor dit probleem is de opvolger van VirtualWire Libary: RadioHead

U kunt deze bibliotheek daarna gebruiken Downloaden via de functie "* .zip library" in de IDE

We gebruiken een licht gewijzigde versie van ask_receiver en ask_transmitter voor ons voorbeeld.

Om de pinnen in RH_Ask.h niet te hoeven veranderen, bedraden we onze Unos opnieuw. De vooraf gedefinieerde pinnen in de Libary worden als volgt toegewezen:

433 module VN-ontvanger VN-zender
VCC 5V 5V
GND GND GND
DATA 11 12

 

De code voor de zender:

# opnemen <RH_ASK.h>
# opnemen <SPI.h> // Niet echt gebruikt maar nodig om te compileren

RH_ASK bestuurder;

nietig instellen()
{     Serie.beginnen(9600);     als (!bestuurder.init())          Serie.println("init mislukt");
}

nietig lus()
{     const char *msg = "Meetgegevens"; // te verzenden bericht.     bestuurder.verzenden((uint8_t *)msg, vegen(msg));     bestuurder.waitPacketSent();     vertraging(200);
}

 

De code voor de ontvanger:

# opnemen <RH_ASK.h>
# opnemen <SPI.h> // Niet echt gebruikt maar nodig om te compileren

RH_ASK bestuurder;

nietig instellen()
{     Serie.beginnen(9600); // alleen debuggen     als (!bestuurder.init())          Serie.println("init mislukt");
}

nietig lus()
{     uint8_t buf[9]; // Formaat van het te ontvangen bericht     uint8_t buflen = grootte van(Buf);     Als (Stuurprogramma.cv(Buf, &buflen)) Niet-blokkerend     {       Int I;       Bericht met een goede checksum ontvangen, dump het.       Seriële.Afdrukken("Bericht: ");       Seriële.println((Char*)Buf);              }
} Im seriellen Monitor des Empfängers sehen wir die Ausgabe:

Viel Spass beim Basteln & bis zum nächsten Mal :)

RadioamateurFür arduinoProjekte für anfänger

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert