Monitoring Jarak Max 10 Meter Sensor Gy-TOF10M via Wireless Lora SX1278 433Mhz
Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat mengukur jarak max 10 meter dengan wireless Lora SX1278. alat ini terdiri dari 2 device yaitu transmitter dan receiver, data yang dikirim hanya data jarak saja kemudian ditampilkan ke LCD Oled mini untuk interfacenya. untuk lebih jelasnya berikut adalah koding dan komponennya.
1. Komponen
2. Program Arduino IDE Transmitter
#include <SoftwareSerial.h>
#include "Wire.h"
#include "Adafruit_GFX.h"
#include "OakOLED.h"
#include <SPI.h>
#include <LoRa.h>
/*
Module SX1278 // Arduino UNO/NANO
GND -> GND
Vcc -> 3.3V
MISO -> D12
MOSI -> D11
SLCK -> D13
Nss -> D10
Di00 -> D2
RST -> D9
*/
OakOLED oled;
typedef struct
{
float distance;
uint16_t amp;
int8_t temp;
} gytof;
SoftwareSerial mySerial(3, 4); // pin sensor gy-tof10m RX, TX
byte add=0xa4;
byte len=0,start_reg=0;
unsigned char Re_buf[30],counter=0;
unsigned char sign=0;
gytof my_tof;
int jarak;
void setup() {
Serial.begin(115200);
mySerial.begin(9600);
mySerial.listen();
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);
}
}
void loop() {
unsigned char i=0,sum=0;
while (mySerial.available()) {
Re_buf[counter]=(unsigned char)mySerial.read();
switch(counter)
{
case 0:
if(Re_buf[0]!=add)
return;
break;
case 1:
if(Re_buf[1]!=0x03)
{
counter=0;
return;
}
break;
case 2:
if(Re_buf[2]<16)
start_reg=Re_buf[2];
else
{
counter=0;
return;
}
break;
case 3:
if((start_reg+Re_buf[3])<16)
len=Re_buf[3];
else
{
counter=0;
return;
}
break;
default:
if(len+5==counter)
{
sign=1;
}
break;
}
if(sign)
{
sign=0;
for(i=0;i<counter-1;i++)
sum+=Re_buf[i];
counter=0;
if(sum==Re_buf[i] ) //检查帧头,帧尾
{
if(start_reg==0x08)
{
my_tof.distance=(Re_buf[4]<<8)|Re_buf[5];
my_tof.amp=(Re_buf[6]<<8)|Re_buf[7];
my_tof.temp=Re_buf[8];
}
/*
Serial.print("distance:");
Serial.print((float)my_tof.distance/10);
Serial.print("cm,amp:");
Serial.print(my_tof.amp);
Serial.print(",temp:");
Serial.println(my_tof.temp);
*/
}
// else
// {
// Serial.print(" sum ");
// Serial.println(sum);
// }
}
else
counter++;
// Serial.print("cont:");
// Serial.println(counter);
}
jarak = my_tof.distance/10;
oled.clearDisplay();
oled.setTextSize(2);
oled.setTextColor(1);
oled.setCursor(0, 0);
oled.print(jarak);
oled.display();
LoRa.beginPacket();
LoRa.print(jarak);
LoRa.endPacket();
delay(50);
}
#include "Wire.h"
#include "Adafruit_GFX.h"
#include "OakOLED.h"
#include <SPI.h>
#include <LoRa.h>
/*
Module SX1278 // Arduino UNO/NANO
GND -> GND
Vcc -> 3.3V
MISO -> D12
MOSI -> D11
SLCK -> D13
Nss -> D10
Di00 -> D2
RST -> D9
*/
OakOLED oled;
typedef struct
{
float distance;
uint16_t amp;
int8_t temp;
} gytof;
SoftwareSerial mySerial(3, 4); // pin sensor gy-tof10m RX, TX
byte add=0xa4;
byte len=0,start_reg=0;
unsigned char Re_buf[30],counter=0;
unsigned char sign=0;
gytof my_tof;
int jarak;
void setup() {
Serial.begin(115200);
mySerial.begin(9600);
mySerial.listen();
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);
}
}
void loop() {
unsigned char i=0,sum=0;
while (mySerial.available()) {
Re_buf[counter]=(unsigned char)mySerial.read();
switch(counter)
{
case 0:
if(Re_buf[0]!=add)
return;
break;
case 1:
if(Re_buf[1]!=0x03)
{
counter=0;
return;
}
break;
case 2:
if(Re_buf[2]<16)
start_reg=Re_buf[2];
else
{
counter=0;
return;
}
break;
case 3:
if((start_reg+Re_buf[3])<16)
len=Re_buf[3];
else
{
counter=0;
return;
}
break;
default:
if(len+5==counter)
{
sign=1;
}
break;
}
if(sign)
{
sign=0;
for(i=0;i<counter-1;i++)
sum+=Re_buf[i];
counter=0;
if(sum==Re_buf[i] ) //检查帧头,帧尾
{
if(start_reg==0x08)
{
my_tof.distance=(Re_buf[4]<<8)|Re_buf[5];
my_tof.amp=(Re_buf[6]<<8)|Re_buf[7];
my_tof.temp=Re_buf[8];
}
/*
Serial.print("distance:");
Serial.print((float)my_tof.distance/10);
Serial.print("cm,amp:");
Serial.print(my_tof.amp);
Serial.print(",temp:");
Serial.println(my_tof.temp);
*/
}
// else
// {
// Serial.print(" sum ");
// Serial.println(sum);
// }
}
else
counter++;
// Serial.print("cont:");
// Serial.println(counter);
}
jarak = my_tof.distance/10;
oled.clearDisplay();
oled.setTextSize(2);
oled.setTextColor(1);
oled.setCursor(0, 0);
oled.print(jarak);
oled.display();
LoRa.beginPacket();
LoRa.print(jarak);
LoRa.endPacket();
delay(50);
}
3. Program Arduino IDE 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 jarak = 0;
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() {
// try to parse packet
int packetSize = LoRa.parsePacket();
if (packetSize) {
// read packet
while (LoRa.available())
{
int inChar = LoRa.read();
inString += (char)inChar;
jarak = inString.toInt();
}
inString = "";
LoRa.packetRssi();
}
//Serial.println(jarak);
oled.clearDisplay();
oled.setTextSize(2);
oled.setTextColor(1);
oled.setCursor(0, 0);
oled.print(jarak);
oled.display();
}
#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 jarak = 0;
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() {
// try to parse packet
int packetSize = LoRa.parsePacket();
if (packetSize) {
// read packet
while (LoRa.available())
{
int inChar = LoRa.read();
inString += (char)inChar;
jarak = inString.toInt();
}
inString = "";
LoRa.packetRssi();
}
//Serial.println(jarak);
oled.clearDisplay();
oled.setTextSize(2);
oled.setTextColor(1);
oled.setCursor(0, 0);
oled.print(jarak);
oled.display();
}
4. VIDEO HASILNYA


No comments:
Post a Comment