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
.jpeg)
No comments:
Post a Comment