Wat is daar aan de hand? 433 MHz modules – AZ-Delivery
Wat is daar aan de hand? 433 MHz modules
AmateurfunkMoritz Spranger aug. 23, 2018
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;
pinMode(4, UITGANG);
digitalWrite(4, LAAG); // Laten we gebruiken als GND
pinMode(gegevens, INGANG);
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
De code voor de zender:
# opnemen <RH_ASK.h>
# opnemen <SPI.h> // Niet echt gebruikt maar nodig om te compileren
RH_ASK bestuurder;
{     Serie.beginnen(9600);     als (!bestuurder.init())          Serie.println("init mislukt");
{     const char *msg = "Meetgegevens"; // te verzenden bericht.     bestuurder.verzenden((uint8_t *)msg, vegen(msg));     bestuurder.waitPacketSent();     vertraging(200);
De code voor de ontvanger:
{     Serie.beginnen(9600); // alleen debuggen     als (!bestuurder.init())          Serie.println("init mislukt");
{     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);              }