Translate

Monitoring Jarak Max 10 Meter Sensor Gy-TOF10M via Wireless Lora SX1278 433Mhz

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);
   
}
 
 
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();  

}
 
 
4. VIDEO HASILNYA