Translate

Komunikasi Lora SX1278 (2 Transmitter & 1 Receiver) Monitoring Jarak Sensor VL53L1X TOF400C

Komunikasi Lora SX1278 (2 Transmitter & 1 Receiver) Monitoring Jarak Sensor VL53L1X TOF400C


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat mengukur jarak max 4 meter dengan menggunakan sensor VL53L1X TOF400C dan komunikasi menggunakan Lora SX1278. alat ini terdapat 2 buah transmitter dan 1 buah receiver sehingga ada 3 device yang digunakan.  


1. Program Arduino Transmitter 1

#include "Wire.h"
#include "Adafruit_GFX.h"
#include "OakOLED.h"
#include <SPI.h>
#include <LoRa.h>
#include <VL53L1X.h>

VL53L1X sensor;

/*
  Module SX1278 // Arduino UNO/NANO    
    GND         ->   GND
    Vcc         ->   3.3V
    MISO        ->   D12
    MOSI        ->   D11     
    SLCK        ->   D13
    Nss         ->   D10
    Di00        ->   D2
    RST         ->   D9      
 */
 
OakOLED oled;

int jarak;
char transmitterID = 'A'; 

void sensor_init(VL53L1X::DistanceMode range_mode, bool high_speed) {
  Wire.begin();
  sensor.setTimeout(500);
  sensor.init();
  sensor.setDistanceMode(range_mode);  
  int budget = high_speed ? 33000 : 140000;
  sensor.setMeasurementTimingBudget(budget);
}

void setup() {
   Serial.begin(115200);
   oled.begin();
   oled.display();    

   while (!Serial);  
  Serial.println("LoRa Sender");
  if (!LoRa.begin(433E6)) { // or 915E6, the MHz speed of yout module
    Serial.println("Starting LoRa failed!");
    while (1);
  }

  while (!Serial) {}
  Wire.begin();
  Wire.setClock(400000); // use 400 kHz I2C

  sensor.setTimeout(500);
  if (!sensor.init())
  {
    Serial.println("Failed to detect and initialize sensor!");
    while (1);
  }

  // Use long distance mode and allow up to 50000 us (50 ms) for a measurement.
  // You can change these settings to adjust the performance of the sensor, but
  // the minimum timing budget is 20 ms for short distance mode and 33 ms for
  // medium and long distance modes. See the VL53L1X datasheet for more
  // information on range and timing limits.
  sensor.setDistanceMode(VL53L1X::Long);
  sensor.setMeasurementTimingBudget(50000);

  // Start continuous readings at a rate of one measurement every 50 ms (the
  // inter-measurement period). This period should be at least as long as the
  // timing budget.
  sensor.startContinuous(50);

void loop() {
  
  jarak = sensor.read()/10;
  //Serial.println(jarak);
  
  oled.clearDisplay();
  oled.setTextSize(2);
  oled.setTextColor(1);
  oled.setCursor(0, 0);
  oled.print(jarak); 
  oled.display(); 
     
  LoRa.beginPacket();
  LoRa.print(transmitterID); // Send ID
  LoRa.print(",");
  LoRa.print(jarak);   // Send Data
  LoRa.endPacket();
  delay(50);
   
}


2. Program Arduino Transmitter 2

#include "Wire.h"
#include "Adafruit_GFX.h"
#include "OakOLED.h"
#include <SPI.h>
#include <LoRa.h>
#include <VL53L1X.h>

VL53L1X sensor;

/*
  Module SX1278 // Arduino UNO/NANO    
    GND         ->   GND
    Vcc         ->   3.3V
    MISO        ->   D12
    MOSI        ->   D11     
    SLCK        ->   D13
    Nss         ->   D10
    Di00        ->   D2
    RST         ->   D9      
 */
 
OakOLED oled;

int jarak;
char transmitterID = 'B'; 

void sensor_init(VL53L1X::DistanceMode range_mode, bool high_speed) {
  Wire.begin();
  sensor.setTimeout(500);
  sensor.init();
  sensor.setDistanceMode(range_mode);  
  int budget = high_speed ? 33000 : 140000;
  sensor.setMeasurementTimingBudget(budget);
}

void setup() {
   Serial.begin(115200);
   oled.begin();
   oled.display();    

   while (!Serial);  
  Serial.println("LoRa Sender");
  if (!LoRa.begin(433E6)) { // or 915E6, the MHz speed of yout module
    Serial.println("Starting LoRa failed!");
    while (1);
  }

  while (!Serial) {}
  Wire.begin();
  Wire.setClock(400000); // use 400 kHz I2C

  sensor.setTimeout(500);
  if (!sensor.init())
  {
    Serial.println("Failed to detect and initialize sensor!");
    while (1);
  }

  // Use long distance mode and allow up to 50000 us (50 ms) for a measurement.
  // You can change these settings to adjust the performance of the sensor, but
  // the minimum timing budget is 20 ms for short distance mode and 33 ms for
  // medium and long distance modes. See the VL53L1X datasheet for more
  // information on range and timing limits.
  sensor.setDistanceMode(VL53L1X::Long);
  sensor.setMeasurementTimingBudget(50000);

  // Start continuous readings at a rate of one measurement every 50 ms (the
  // inter-measurement period). This period should be at least as long as the
  // timing budget.
  sensor.startContinuous(50);

void loop() {
  
  jarak = sensor.read()/10;
  //Serial.println(jarak);
  
  oled.clearDisplay();
  oled.setTextSize(2);
  oled.setTextColor(1);
  oled.setCursor(0, 0);
  oled.print(jarak); 
  oled.display(); 
     
  LoRa.beginPacket();
  LoRa.print(transmitterID); // Send ID
  LoRa.print(",");
  LoRa.print(jarak);   // Send Data
  LoRa.endPacket();
  delay(50);
   
}


3. Program Arduino Receiver

#include <SPI.h>
#include <LoRa.h>   //Download here: http://electronoobs.com/eng_arduino_LoRa_SX1278.php.php
#include "Wire.h"
#include "Adafruit_GFX.h"
#include "OakOLED.h"

OakOLED oled;

String inString = "";    // string to hold input
int jarak1 = 0;
int jarak2 = 0;

String receivedData = "";
long lastChannelSwitchTime = 0;
long channelSwitchInterval = 3000; // Switch channels every 3 seconds

void setup() {
  Serial.begin(115200);
  oled.begin();
  oled.display(); 
   
  while (!Serial);
  Serial.println("LoRa Receiver");
  if (!LoRa.begin(433E6)) { // or 915E6
    Serial.println("Starting LoRa failed!");
    while (1);
  }
}

void loop() {
  
int packetSize = LoRa.parsePacket();
  if (packetSize) {
    String received = "";
    while (LoRa.available()) {
      received += (char)LoRa.read();
    }
    
    // Parse format: "ID,Value"
    int commaIndex = received.indexOf(',');
    if (commaIndex != -1) {
      String id = received.substring(0, commaIndex);
      String value = received.substring(commaIndex + 1);

      if(id == "A"){
        jarak1 = value.toInt();;
      }

      if(id == "B"){
        jarak2 = value.toInt();;
      }
         
      //Serial.print("From: ");
      //Serial.print(id);
      //Serial.print(" Value: ");
      //Serial.println(value);
    }
  }

  oled.clearDisplay();
  oled.setTextSize(2);
  oled.setTextColor(2);
  oled.setCursor(0, 0);
  oled.print("S1: ");
  oled.println(jarak1);

  oled.setTextSize(2);
  oled.setTextColor(2);
  oled.setCursor(0, 20);
  oled.print("S2: ");
  oled.println(jarak2);
  oled.display();        

}


4. VIDEO HASILNYA





No comments:

Post a Comment