MakerGram Logo

    MakerGram

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Popular
    • Tags
    • Users
    • Groups

    Customizable RF frequency Generator and receiver

    General Discussion
    2
    2
    534
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • kowshik1729
      kowshik1729 last edited by

      Hello guys,

      I would like to know how can we generate RF waves with customizable frequency. For example the generic RF modules which we get in the market operates at a frequency of 433MHz. But I wanna make a transmitter and receiver pair that can operate on freqeuncy that can be customized by me. How can I do it? Please guide me. Thanks in advance..!!

      1 Reply Last reply Reply Quote 0
      • salmanfaris
        salmanfaris last edited by salmanfaris

        Hi @kowshik1729,

        This is an interesting question, Traditionally we are using mixers, filters, amplifiers, modulators/demodulators, detectors, etc to build a radio communication system and it's tightly coupled with hardware. And there are many types of frequency modulation like FM, AM, FSK, LoRa etc.

        Capture.JPG

        (Source : https://en.wikipedia.org/wiki/Radio)

        To generate a different band we need to use a specific combination of mixers, filters, amplifiers, modulators/demodulator, also most of the scenario we only use a specific frequency to communicate in cost-efficient ways like 2.4 GHz for WiFi and Bluetooth but we use different modulations like GFSK in BT Classic and DSSS, FHSS in IEEE802.11 etc. And building many different combinations of mixers, filters, amplifiers are not cost-effective and economic.But using the SDR (Software Defines Radio ) we can achieve this,

        A basic SDR system may consist of a personal computer equipped with a sound card, or other analogue-to-digital converter, preceded by some form of RF front end. Significant amounts of signal processing are handed over to the general-purpose processor, rather than being done in special-purpose hardware (electronic circuits). Such a design produces a radio which can receive and transmit widely different radio protocols (sometimes referred to as waveforms) based solely on the software used. (Source: https://en.wikipedia.org/wiki/Software-defined_radio)

        So as an answer to your question, yes we can generate radio frequency but it's high cost and not economical, also with the help of the SDR system we can solve the issues.

        Resource :

        • https://en.wikipedia.org/wiki/Software-defined_radio
        • https://www.youtube.com/watch?v=xQVm-YTKR9s
        • https://www.youtube.com/watch?v=TZmHgIPBLDo

        You can also try SDR via online using https://eshail.batc.org.uk/nb/ , it was hosted at Goonhilly Earth Station in Cornwall, England.

        1 Reply Last reply Reply Quote 0
        • First post
          Last post

        Recent Posts

        • R

          I am trying to set up a janus webrtc to stream an RTSP to an HTML page.
          I have followed the getting-started steps by Janus-gateway official github repo.

          Since I am new to web development. I do not understand how to host the Webrtc server. can anyone guide me to set up an HTML page that can display a video stream from an RTSP server using janus webrtc?

          • read more
        • @zainmuhammed Can try capturing the GPS when the device is starting the loop instead after joining the LoRaWAN and see?

          You can put the GPS value on top of the loop or setup function.

          Also, what kind of gateway are you using? Is it configured okay, OTA is done?

          • read more
        • @salmanfaris Today I tried after connecting a 18650 cell,
          WhatsApp Image 2024-04-12 at 10.40.06_c7d1947e.jpg WhatsApp Image 2024-04-12 at 10.40.05_897b8bb6.jpg
          Data getting in console after integration of both lora and gps.
          3f45cfe7-0061-4328-8c55-ef0a73385203-image.png
          here you can see that GPS value is 0,0. also in my previous post you can see that GPS value is not reading.
          Also the status LED is active after it is connected to the satellite.

          • read more
        • Hi @zainmuhammed ,

          Can you share the GPS and LoRa output when it’s working?

          Also can try capturing the GPS when the device is starting the loop instead after joining the LoRaWAN and see?

          Also make sure the device provides have enough to modules. The GPS need more power when you cold start.

          • read more
        • @zainmuhammed
          this is the code

          #include <Arduino.h> #include <U8x8lib.h> #include <TinyGPS++.h> #include <SoftwareSerial.h> static const int RXPin = 1, TXPin = 2; static const uint32_t GPSBaud = 9600; // The TinyGPS++ object TinyGPSPlus gps; // The serial connection to the GPS device SoftwareSerial ss(RXPin, TXPin); U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/*reset=*/U8X8_PIN_NONE); // U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(/*clock=*/ SCL, /*data=*/ SDA, /*reset=*/ U8X8_PIN_NONE); // OLEDs without Reset of the Display static char recv_buf[512]; static bool is_exist = false; static bool is_join = false; static int led = 0; static int at_send_check_response(char *p_ack, int timeout_ms, char *p_cmd, ...) { int ch; int num = 0; int index = 0; int startMillis = 0; va_list args; char cmd_buffer[256]; // Adjust the buffer size as needed memset(recv_buf, 0, sizeof(recv_buf)); va_start(args, p_cmd); vsprintf(cmd_buffer, p_cmd, args); // Format the command string Serial1.print(cmd_buffer); Serial.print(cmd_buffer); va_end(args); delay(200); startMillis = millis(); if (p_ack == NULL) { return 0; } do { while (Serial1.available() > 0) { ch = Serial1.read(); recv_buf[index++] = ch; Serial.print((char)ch); delay(2); } if (strstr(recv_buf, p_ack) != NULL) { return 1; } } while (millis() - startMillis < timeout_ms); return 0; } static void recv_prase(char *p_msg) { if (p_msg == NULL) { return; } char *p_start = NULL; int data = 0; int rssi = 0; int snr = 0; p_start = strstr(p_msg, "RX"); if (p_start && (1 == sscanf(p_start, "RX: \"%d\"\r\n", &data))) { Serial.println(data); u8x8.setCursor(2, 4); u8x8.print("led :"); led = !!data; u8x8.print(led); if (led) { digitalWrite(LED_BUILTIN, LOW); } else { digitalWrite(LED_BUILTIN, HIGH); } } p_start = strstr(p_msg, "RSSI"); if (p_start && (1 == sscanf(p_start, "RSSI %d,", &rssi))) { u8x8.setCursor(0, 6); u8x8.print(" "); u8x8.setCursor(2, 6); u8x8.print("rssi:"); u8x8.print(rssi); } p_start = strstr(p_msg, "SNR"); if (p_start && (1 == sscanf(p_start, "SNR %d", &snr))) { u8x8.setCursor(0, 7); u8x8.print(" "); u8x8.setCursor(2, 7); u8x8.print("snr :"); u8x8.print(snr); } } void setup(void) { u8x8.begin(); u8x8.setFlipMode(1); u8x8.setFont(u8x8_font_chroma48medium8_r); ss.begin(GPSBaud); Serial.begin(GPSBaud); pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, HIGH); Serial1.begin(9600); Serial.print("E5 LORAWAN TEST\r\n"); u8x8.setCursor(0, 0); if (at_send_check_response("+AT: OK", 100, "AT\r\n")) { is_exist = true; at_send_check_response("+ID: DevEui", 1000, "AT+ID=DevEui,\"xxxxx\"\r\n"); // replace 'xxxxxxxxxxxxx' with your DevEui at_send_check_response("+ID: AppEui", 1000, "AT+ID=AppEui,\"xxxxxxx\"\r\n"); // replace 'xxxxxxxxxxxxx' with your AppEui at_send_check_response("+KEY: APPKEY", 1000, "AT+KEY=APPKEY,\"xxxxxxxxx\"\r\n"); // replace 'xxxxxxxxxxxxx' with your AppKey at_send_check_response("+ID: DevAddr", 1000, "AT+ID=DevAddr\r\n"); at_send_check_response("+ID: AppEui", 1000, "AT+ID\r\n"); at_send_check_response("+MODE: LWOTAA", 1000, "AT+MODE=LWOTAA\r\n"); at_send_check_response("+DR: IN865", 1000, "AT+DR=IN865\r\n"); // Change FREQ as per your location at_send_check_response("+CH: NUM", 1000, "AT+CH=NUM,0-2\r\n"); at_send_check_response("+CLASS: C", 1000, "AT+CLASS=A\r\n"); at_send_check_response("+PORT: 8", 1000, "AT+PORT=8\r\n"); delay(200); u8x8.setCursor(5, 0); u8x8.print("LoRaWAN"); is_join = true; } else { is_exist = false; Serial.print("No E5 module found.\r\n"); u8x8.setCursor(0, 1); u8x8.print("unfound E5 !"); } u8x8.setCursor(2, 4); u8x8.print("led :"); u8x8.print(led); } void loop(void) { if (is_exist) { int ret = 0; if (is_join) { ret = at_send_check_response("+JOIN: Network joined", 12000, "AT+JOIN\r\n"); if (ret) { is_join = false; } else { at_send_check_response("+ID: AppEui", 1000, "AT+ID\r\n"); Serial.print("JOIN failed!\r\n\r\n"); delay(5000); } } else { gps.encode(ss.read()); float a=gps.location.lat(); float b=gps.location.lng(); Serial.println(a); Serial.println(b); char cmd[128]; sprintf(cmd, "AT+CMSGHEX=\"%04X%04X\"\r\n", (float)a,(float)b); ret = at_send_check_response("Done", 5000, cmd); if (ret) { recv_prase(recv_buf); } else { Serial.print("Send failed!\r\n\r\n"); } delay(5000); } } else { delay(1000); } }

          9135d5d3-6277-4c60-81df-a2acac65c93d-image.png

          • read more
        By MakerGram | A XiStart Initiative | Built with ♥ NodeBB
        Copyright © 2023 MakerGram, All rights reserved.
        Privacy Policy | Terms & Conditions | Disclaimer | Code of Conduct