LoRa ile Toprak Nemi Ölçme Projesi

Toprak Nemi Ölçme & Kablosuz Veri Gönderme Projesi

Merhaba Dostlar, bugün sizlerle beraber “LoRa ile Toprak Nemi Ölçme Projesi” yapacağız. Bu projede bir toprak nem ölçme sensörü ile bir saksının toprağının nemi ölçeceğiz ve sonrasında LoRa üzerinden uzaktaki merkez noktamıza toprak nemi ile ilgili bilgileri göndereceğiz. Özellikle bu yaz aylarına girdiğimizde tarımda sulama üretim artışında rekolte de önem arz etmektedir. Sulama yaparken de tarlanın her tarafına eşit bir şekilde sulama yapılmalıdır. Mevcut sulamada çoğu tarlada sulama sırasında tarlaya girmek zor olduğu için takip yapılamamaktadır. LoRa sayesinde tarlanın belirlemiş olduğumuz noktalarına dilediğimiz gibi kontrol yapabileceğiz.

1.1 Gerekli Malzemeler 2 Adet E32 433T20DC Satın almak için tıkla

PCB Başlanagıç seti Satın almak için Tıkla

1 adet toprak nem sensörü

1 adet USB programlayıcı Satın almak için tıklayın

1.2 Devre Şeması

Devre şemasında ben hazır pcb kullandığım için özel bir devre kurmadım. Toprak nem ölçerin A0 pinini arduino Nano üzerinden A1 pinine bağladım. D0 pinini boş bıraktım. Toprak nem sensörünün pinleri hakkında detaylı bilgiyi youtube videomuzda anlatacağım.

1.3 Kod Yapısı

Burada 2 noktamız var slave kısmımız toprağın nemini ölçecek ve Merkez noktamıza sürekli olarak toprak nemi için veri gönderecek.

Slave (toprak nemi ölçecek kısım)

#include "LoRa_E32.h"
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // Arduino RX <-- e32 TX, Arduino TX --> e32 RX
LoRa_E32 e32ttl(&mySerial);

const int analogInPin = A1;
int sensorValue = 0;

struct Signal {
  char type[15];
  byte Nem[4];
} data;

void setup() {
  Serial.begin(9600);
  e32ttl.begin();
  delay(500);
}

void loop() {

  sensorValue = analogRead(analogInPin);
  Serial.print("sensor = ");
  Serial.println(sensorValue);

  //Gönderilecek paket veri hazırlanıyor
  struct Signal  {
    char type[15] = "Pamuk Tarlası";
    byte Nem[4];
  } data2;

  *(int*)(data2.Nem) = sensorValue;


  ResponseStatus rs = e32ttl.sendFixedMessage(0, 63, 23, &data2, sizeof(Signal));
  Serial.println(rs.getResponseDescription());

  delay(500);

}

Master (Ölçümleri toplandığımız ve görüntülediğimiz merkez)

#include "LoRa_E32.h" 
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11);

/*
   Pinler     Arduino Nano    Lora E32 433T20d
                  11                3
                  10                4
*/

LoRa_E32 e32ttl(&mySerial);

struct Signal {
  char type[15] = "Fixaj.com";
  byte Nem[4];
} data;
 

void setup() {
  Serial.begin(9600);
  e32ttl.begin();
  delay(500); 
}

void loop() { 

  while (e32ttl.available()  > 1) {
    ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(Signal));
    struct Signal data = *(Signal*) rsc.data;
    Serial.print("Yer: ");
    Serial.println(data.type);
    Serial.print("Toprak Nemi: ");
    Serial.println(*(int*)(data.Nem));
    rsc.close();
  } 
}

Sonuç

Anlatacaklarım bu kadar. Elimden geldiğince konuyu basit anlatmaya çalıştım. İnşallah faydalı olur. Özellikle şu dönemde işinize çok yarayacak bir proje olduğunu düşünüyorum. Hazır okullar bitmiş müsahit iseniz ve biraz para kazanmak istiyorsunuz. bu proje ile tarlaları dolaşa bilir. Satışlar yapabilirsiniz.

Aklınıza bir soru takılırsa her zaman burdayız. Teknik konularla ilgili sorularınızı Soru&Cevap sayfamıza yazabilirsiniz. Yardımcı olmaya çalışırız.

Bu ürünleri ve daha fazlasını n11 mağazamızdan bulabilirsiniz. N11 mağazamızı incelemek için tıklayın.

N11 de olumlu yorumlarınızla bizleri desteklemeyi unutmayın

Herkese iyi günler.

RS485 ile Veriyi Okuyup LoRa ile Kablosuz Gönderme

Merhabalar Dostlar, bugün sizlerle beraber sahada çokça karşınıza çıkacak RS485 protokolü üzerine bir uygulama yapacağız. Elektrik sayaçlarında, güç analizörlerinde sıklıkla kullanılan bir haberleşme protokolüdür RS485. Biz bu yazımızda uzaktan sayaç okuma sistemlerinin bir demosunu yapacağız ve güç analizöründen veriyi okuyup LoRa üzerinden uzaktaki diğer arduino noktamıza veriyi kablosuz olarak atacağız.

Kullandığım güç analizörü ENTES marka “mpr 47s-d“.

ürünün adresler kağıdı şu linkten ulaşabilirsiniz.

Ürünü seçmemde özel bir sebep yok. RS485 ayarları

Boud : 9600

Slave: 1

Parity: No

RS485 üzerine bir seri olan yazımız, ilk yazımızın devamı niteliğindedir. Eğer ilk yazımızı okumadıysanız okumanızı tavsiye ederim.

Bağlantı şemasını kabaca şu şekilde düşünebilirsiniz.

Birebir bağlantı şemamız bu DEĞİLDİR. Sadece fikir vermesi adına ekledim. Mantık şu şekilde olacak, Arduino bir sorgu yapacak, Sorgu TTL to RS485 çevirici üzerinden analizöre gidecek. Analizörde sorguya bir cevap yazıp, aynı yoldan veriyi arduinoya yollayacak.

1.1 Gerekli Malzemeler

E32 433T20D2 adet E32 433T20D satın Almak için Tıklayın ->

1 adet TTL to RS485 çevirici

2 Adet hazır PCB satın almak için tıklayın ->

1.2 Bağlantı Şeması

TTL to RS485 Çevirici
Pin NamePin Description
VCC5V (Arduino 5v beslemesi)
AAnalizör RS485 A Klemensine
BAnalizör RS485 B klemensine
GNDGND (Arduino GND)

R0

Arduino (8 pinine)
REArduino 2 Nolu pin
DEArduino 2 Nolu pin
DIArduino (9 pinine)

Lora modülü PCB de 10 ve 11 numaralı pine bağlıdır.

1.3 Kodlar

Analizör Okuma Kısmı

#include <SoftwareSerial.h>
#include "LoRa_E32.h"
/*-----( Declare Constants and Pin Numbers )-----*/
#define SSerialRX       8  //Serial Receive pin
#define SSerialTX       9  //Serial Transmit pin

#define SSerialTxControl 2   //RS485 Direction control

#define RS485Transmit    HIGH
#define RS485Receive     LOW

#define Pin13LED         13

/*-----( Declare objects )-----*/
SoftwareSerial RS485Serial(SSerialRX, SSerialTX); // RX, TX

SoftwareSerial mySerial(10, 11);
LoRa_E32 e32ttl(&mySerial);
struct Signal {
  char type[15] = "Fixaj.com";
  byte gun[3];
} data;

/*-----( Declare Variables )-----*/
int byteReceived;
int a;
String ph_hexa, ph_hexa_hight_byte, ph_hexa_low_byte, ph_hexa_value;
byte request [] = {
  0x01,
  0x03,
  0x17,
  0x70,
  0x00,
  0x01,
  0x80,
  0x65
};

/*
   şimdi burda sorgu 01 03 17 70 00 01 65 80
   entes marka mpr47s-d modelinin register tablosunda en sonda ayın gününü hesaplama sorgusu
   yukarıda dikkat edersen herşey normal taki, crc değerine gelene kadar.
   CRC değerinin sırasını ters yazacan, önce 80 sonra 65 değerini yazmalısın

    0x01, slave adersi
    0x03, okuma fonksiyonunu çağır
    0x17, 1770 adres ayın gününü veren register
    0x70,
    0x00, okunacak veri boyutu biz sadece 1 tane istediğimiz için 0001, hıgh ve low gibi düşün
    0x01,
    0x80,  crc değeri normalde 6580 ama burada ters yazacan
    0x65
    crc değerini otomatik hesaplma https://www.lammertbies.nl/comm/info/crc-calculation
*/


void setup()   /****** SETUP: RUNS ONCE ******/
{
  // Start the built-in serial port, probably to Serial Monitor
  Serial.begin(9600);
  e32ttl.begin();
  delay(500);

  Serial.println("Fixaj.com");

  pinMode(Pin13LED, OUTPUT);
  pinMode(SSerialTxControl, OUTPUT);

  digitalWrite(SSerialTxControl, RS485Receive);  // Init Transceiver

  // Start the software serial port, to another device
  RS485Serial.begin(9600);   // set the data rate

}//--(end setup )---


void loop()   /****** LOOP: RUNS CONSTANTLY ******/
{

  RS485Serial.listen();
  if (RS485Serial.available())  //Look for data from other Arduino
  {
    Serial.print("Response: ");
    for (int i = 0; i <= 6; i++) {
      byteReceived = RS485Serial.read();    // Read received byte

      ph_hexa = String(byteReceived, HEX);

      // index 3 = high byte
      if (i == 3)
      {
        ph_hexa_hight_byte =   ph_hexa;
      }

      // index 4 = low byte
      if (i == 4)
      {
        ph_hexa_low_byte =   ph_hexa;

        ph_hexa_value = ph_hexa_hight_byte + ph_hexa_low_byte;

        a = StrToHex(ph_hexa_value.c_str());

        Serial.println(a);// Show on Serial Monitor

        mySerial.listen();

        struct Signal  {
          char type[15] = "entes";
          byte gun[3];
        } data2;

        *(int*)(data2.gun) = a;


        ResponseStatus rs = e32ttl.sendFixedMessage(0, 63, 23, &data2, sizeof(Signal));
        Serial.println(rs.getResponseDescription());
        
      }
      Serial.print(" ");
    }
    /*
      Serial.println(ph_hexa);
      ph_hexa = "";
    */
    Serial.println();
  }
  else
  {
    Serial.println();
    Serial.print("Request: ");
    digitalWrite(SSerialTxControl, RS485Transmit);  // Init Transceiver
    for (int i = 0; i < 8; i++) {
      Serial.print(request[i], HEX);
      RS485Serial.write((byte)request[i]);
    }
    Serial.println();
    digitalWrite(SSerialTxControl, RS485Receive);  // Init Transmit
  }
  delay(1000);

}

int StrToHex(char str[])
{
  return (int) strtol(str, 0, 16);
}

Uzaktaki Lora Merkezimizin Kodları

#include "LoRa_E32.h"
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11);

/*
   Pinler     Arduino Nano    Lora E32 433T20d
                  11                3
                  10                4
*/

LoRa_E32 e32ttl(&mySerial);

struct Signal {
  char type[15] = "Fixaj.com";
  byte gun[3];
} data;


void setup() {
  Serial.begin(9600);
  e32ttl.begin();
  delay(500);
}

void loop() {

  while (e32ttl.available()  > 1) {
    ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(Signal));
    struct Signal data = *(Signal*) rsc.data;
    Serial.print("Analizör Markası: ");
    Serial.println(data.type);
    Serial.print("Ayın Günü: ");
    Serial.println(*(int*)(data.gun));
    rsc.close();
  }
}

Yazımızın detaylarını youtube videomuzda anlatmış olacağım. Özellikle sorgu nasıl oluşturulur bunu videoda detaylı öğrenebilirsiniz.

Önemli bir yazı oldu sanırım. Sahada çokça kullanabilirsiniz. İş hayatının içine girdikçe RS485 haberleşme protokolünün kullanım alanlarına şaşıracaksınız. Şimdiden öğrenmeniz ve uygulamanız iş bulma süreçlerinde size kolaylıklar sağlayacaktır.

Şimdilik anlatacaklarımız bu kadar. N11 mağazamızdan satın aldıktan sonra yüksek puan vermeniz bizim için önemlidir. Lütfen unutmayın

İyi günler.

Güneş Paneli ile LoRa Kullanımı

Güneş Paneli ile LoRa Kullanımı

Merhaba sevgili dostlar, bugün sizlerle beraber Güneş Paneli ile LoRa yı nasıl besleyeceğimizi ve enerjiye bağlı kalmadan Lipo pil ve güneş paneli sayesinde kesintisiz bir çalışma sağlayacağız.

güneşten enerji

Bu projemizde 5v luk güneş paneli 2000 mAh bir lipo pil ve TP4056 entegreleri kullanılmıştır.

Lipo pil üzerinden gelen enerji 4V civarında olduğu için direk arduino ve LoRa modüllerini besleyebilmektedir.

Özellikle enerjinin bulunmasının zor olduğu tarımsal alanlarda, çatılarda bu sistem sayesinde projenizi bağımsız olarak besleyebilirsiz.

İyi bir enerji optimizasyonu ile çok uzun süreli kullanım sağmanız oldukça kolay olacaktır.

1. Gerekli Malzemeler

başlangıç setiSx1278

Güneş paneli 5v 3w

2000 mAh kendinden korumalı Lipo Pil

arduino nano 2 adet arduino nano

tp4056 entegresi

2 Bağlantı Şeması

Şu sitedeki bağlantı şemasını biraz modifiye ettim

Lithium pil yerine Lipo pil kullandım ve out +/- çıkışlarını direk arduinonun 5v pinine bağladım. En sağdaki mcp1700 entegresi 3v3 volt ile çalışan modeller için ben arduino nano kullandığım için bu kısmı kaldırdım.

3 Çalışma Mantığı

TP4056 entegresi

Şu sitede tp4056 ile ilgili çok detaylı bilgiler bulunmakta okumanızı tavsiye ederim

Tp4056 entegresi ve DW entegresinin bulunduğu şema yukardadır. Entegrenin çalışma mantığının detaylarını videoda anlatıyor olacağım.

Akımı sınırlama için kullanılan Rprog direnç değerlerine karşılık gelen akım değeri

Biz bu projemizde 5v luk panellerden kullandık maalesef yine Türkiye de uygun fiyatlı ve gerçekten 5w 10w üretebilen bir panel bulamadım. Hatta aldığım panellerde maalesef %100 çalışmıyordu. Termal kamera altında baktığım bazı ücrelerin hiç enerji üretmediklerini gözlemledim.

Belki termal kamera 100% doğrulukla çalışıp çalışmadığını göstermez ancak akım olarak maximum 450 mA görebildim. Normalde 1A yakın değerler görmem gerekirdi. Bu arada panellerim 5v ve hepsi birbirine paralel baağlıdır.

4 Kod Kısmı

Güneş sistemleri ile enerji sağlaayacaksanız 1. önceliğiniz düşük güç tüketimi olmalıdır. Bu konuda fazla seçeneğiniz yok Arduino Nano oldukça başarılı ve neredeyse alternatifide yoktur. Misal Arduino Mega ile enerji tasaruflu bir proje yapamazsınız. Nano 10ma çektiği yerde mega 50ma ile kesenin ağzını açmaktadır.

Arduino da enerji tasarrufu için şu kütüphaneyi kullanıyorum ve heralde gördüğüm en yüksek puana sahip kütüphanedir.

Şimdi algoritmayı şu şekilde kuracağım. Arduino normal rutin çalışmasını devam ederken ara ara A0 pini üzerinden analog read yaparak 5v pinine gelen gerilimi okuyacağım. pil değeri 3.9V altına düşünce arduinoyu uyku moduna getireceğim ve böylelikle çekilen akımı mikro amper seviyelerine düşüreceğim. Bu sayede pil Tp4056 nın kritik seviyesinin altına düşmeden sistemi durdurup enerji dolması için sistemi bekleteceğim. Böylece çok uzun süre kullanım sağlayacağız.

Kod yapısı şimdilik şu şekilde

#include <LowPower.h>
int bekleme = 5000;
unsigned long sure = 0;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {

  if (millis() > sure + bekleme) {
    sure = millis();
    
    int sensorValue = analogRead(A0);
    // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
    float voltage = sensorValue * (5.0 / 1023.0);
    // print out the value you read:
    Serial.println(voltage);

    if (voltage < 3.9) {
      Serial.print("hade ben uyumaya gidiyom");
      delay(100);
      for (int i = 0; i <= 5; i++)
      {
        LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
      }
      delay(1000);
      Serial.print("ahh yeni uyandım");
      delay(100);
    }
  }

  digitalWrite(LED_BUILTIN, HIGH);
  delay(100);
  digitalWrite(LED_BUILTIN, LOW);
  delay(100);

}

Geçenlerde yaptığımız alıcı verici uygulamasını da tekrar güneş paneli ile çalıştırdık ve sonuç başarılı.

Yinede aklınıza takılan bir konu olursa Soru&Cevap sayfımıza sizleri bekleriz. N11 üzerinden sipariş vermek için N11 mağazamızı ziyaret etmeyi unutmayın.

Lora Modülü ile Alıcı-Verici “transceiver” Yapımı

Merhaba Arkadaşlar bugün sizlerle beraber youtube de ve fixaj sitemizdeki soru&cevap kısmında çokça sorulan Lora Modülü ile Alıcı-Verici “transceiver” Yapımı uygulaması yapmaya çalışacağız.

Aslında benzer uygulamalar yaptık ancak bazı arkadaşlar sanırım bazı noktalarda takılmış. Birebir çalışan alıcı verici uygulaması illaki istediler. Aslında en güzel öğrenme deneme yanılma ile olandır. Biraz kurcalayarak belki ufak tefek kırma bozma ile iş öğrenilir.

Şimdi Uygulamaya geçelim. Bağlantı şemasını tekrar anlatmıyorum şu yazımızdan ulaşabilirsiniz. Ancak ben hazır pcb ile yaptım. Bu uygulama şöyle olacak bir MERKEZ bir noktamız var, birde BEBEK ODASI dediğimiz bize ortam sıcaklığını gönderen sensor noktamız olacak. Merkez bir sorgu yapacak, bebek odası gelen mesajı okuyup ortam sıcaklığını ve oda adını Merkez noktasına yollayacak.

Bebek odası sıcaklık ölçme uygulaması

1.1 Gerekli Malzemeler

2 Adet Lora E32 433 T20DC Satın almak için tıklayın

2 adet Hazır PCB Satın almak için tıklayın

arduino nano2 adet arduino NANO

1.2 Lora Parametre Ayarları

Merkez noktasının Lora Parametre ayarları

lora ile transreceiver

Bebek odası için kullanacağımız Lora modülünün parametre ayarları

1.3 Arduino kodları

Merkez noktanın kod yapısı

#include "LoRa_E32.h"
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11);

/*
   Pinler     Arduino Nano    Lora E32 433T20d
                  11                3
                  10                4
*/

LoRa_E32 e32ttl(&mySerial);

struct Signal {
  char type[15] = "Fixaj.com";
  byte temp[4];
} data;


void setup() {
  Serial.begin(9600);
  e32ttl.begin();
  delay(500);
}

void loop() {

  ResponseStatus rs = e32ttl.sendFixedMessage(0, 44, 23, &data, sizeof(Signal));
  Serial.println(rs.getResponseDescription());

  delay(2000);

  while (e32ttl.available()  > 1) {
    ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(Signal));
    struct Signal data = *(Signal*) rsc.data;
    Serial.print("Yer: ");
    Serial.println(data.type);
    Serial.print("Ortam Sıcaklığı: ");
    Serial.println(*(float*)(data.temp));
    rsc.close();
  }
}

Bebek odası kod yapısı

#include "LoRa_E32.h"
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // Arduino RX <-- e32 TX, Arduino TX --> e32 RX
LoRa_E32 e32ttl(&mySerial);

struct Signal {
  char type[15];
  byte temp[4];
} data;

void setup() {
  Serial.begin(9600);
  e32ttl.begin();
  delay(500);
}

void loop() {
  while (e32ttl.available()  > 1) {

    // Gelen mesaj okunuyor
    ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(Signal));
    struct Signal data = *(Signal*) rsc.data;
    Serial.print("Gelen Messaj: ");
    Serial.println(data.type);
    rsc.close();

    //Gönderilecek paket veri hazırlanıyor
    struct Signal  {
      char type[15] = "Bebek Odası";
      byte temp[4];
    } data2;

    *(float*)(data2.temp) = 19.2;


    ResponseStatus rs = e32ttl.sendFixedMessage(0, 63, 23, &data2, sizeof(Signal));
    Serial.println(rs.getResponseDescription());

  }

}

Lora Modülü ile Alıcı-Verici “transceiver” Yapımı yazımız buraya kadar. aklınıza takılan bir soru olursa yine fixaj.com Soru&Cevap kısmına bekleriz.

Lora Modülünün Temelleri

Bir çok video ve uygulama yaptık ve yavaş yavaş geniş kitlelere ulaşma imkanımız oldu. Daha geniş kesimlere hitap etme adına Lora modülünün temelleri başlıklı bir yazı hazırladım. Burada lora modüllerinden E32 433T20D ve E32 433T30D gibi modellerin bağlantı şemasını, 4 ve üzeri lora modülleri ile nasıl bir ağ oluşturabileceğimiz, veri gönderirken adresleme nasıl yapılmalı bu konular üzerine duracağız.

1.1 Lora Modülü Bağlantı Şeması

*Serhat arkadaşımızın dikkatinden kaçmamış bağlantı şemasında dirençlerin düzeltildi 19.03.2022

Bu şema çalışma durumundaki şemadır. Yani M1 ve M0 pinleri GND çekilmiştir. Burada dikkat edilmesi gereken 2 husus bulunmakta. Birincisi RX ve TX pinlerini neye göre arduino üzerinde 11. ve 10. pinlere bağladığımız gerçeği. Bunun sebebi siz kodu nasıl yazarsanız ona göre bağlantıyı yapmalısınız. Software serial kütüphanesini kullandığımız için arduino üzerindeki RX ve TX pinleri kullanmak zorunda değiliz. Kütüphanede biz nasıl tanımlarsak o pinleri kullanabiliyoruz. Yukarıdaki şemadaki arduino içindeki kod yapası şu şekilde başlamalıdır ki, arduino ve lora modülleri haberleşebilsin.

#include "LoRa_E32.h"
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); 

/*
 * Pinler     Arduino Nano    Lora E32 433T20d
 *                11                3
 *                10                4
 */
 
LoRa_E32 e32ttl(&mySerial);

Diğer dikkat edilmesi gereken konu ise neden gerilim bölücü koyduk. Sebep oldukça basit arduino TTL (transistor to transistor logic) seviyesi 0-5V mertebesinden ancak Lora modüllerinin ise 0-3.3V mertebesinde olmaktan kaynaklanıyor. Basit bir gerilim bölücü ile arduinodan gidecek verinin lora modülüne zarar vermemesi için gerilim seviyesini oranladık.

Şemada ufak bir not ekledim. Ancak tekrarlamakta fayda var. Bazı arkadaşlarımızda 5v da devrenin istedikleri gibi çalışmadığı ancak 3.3V de daha iyi çalıştığını bildirdiler. Sizde aynı sorunu yaşıyorsanız gerilim mertebesini değiştirebilirsiniz. Çalışma aralığı 2.7-5.5v arasında olduğu için 2 volt seviyesinde de lora modülü zarar görmeyecektir.

Lora modülünün temelleri

1.2 Lora modülünde Adresleme konusunda kafası karışan arkadaşlar için

Adresleme ve kanal konusunda arkadaşlar çok fazla soru alıyorum. Şimdi konuyu baştan alırsak 2 temel haberleşme çeşidi bulunmakta Lora modüllerinde. Fixed yanı sadece adresi bilinen noktaya veri transferi, birde genel olarak yayın yapıldığı Broadcast modu. Ben genelde veri güvenliği için Fixed modu tercih ediyorum.

fixed mod haberleşme

Bu görselde nelere dikkat etmeliyiz. Birinci kural veri göndereceğimiz noktanın adresini ve kanalı tam olarak bilmeliyiz. Diğer nokta ise fixed modda veriyi gönderen noktanın adresi ve kanalı önemli değildir. Yani fixed modda dilediğiniz adrese ve kanala veri gönderebilirsiniz.

broadcast mod

Broadcast modda ise genel bir yayın yapımı vardır. Araba radyosu mantığı eğer kanalı biliyorsanız o noktaya veri gönderebilirsiniz. burada adres söz konusu değildir sadece kanala veri gönderebilirsiniz. o kanaldaki bütün noktalar veriyi alır. Karşı tarafın adresinin bir önemi yoktur. MQTT yapısını bilen arkadaşlar için abone mantığına benzer.

Şimdi gelelim kafanızı karıştığı noktaya. Usb programlayıcı ile programla yaptığınızda adres decimal yani 10 luk tabanda belirlenmektedir. Ancak Arduino da kullandığımız kütüphanede ise adresleme 16 lık tabanda belirlenmektedir.

Garip bir örnek ile konuyu anlatmaya çalışayım. Misal USB programlayıcıda “5555” adresini atayalım.

şimdi adresi 5555 yaptık peki arduino da adresi nasıl yazacaz çünkü kütüphanede high ve low olarak adresi 2 ye ayırmış.

Bu lora modülünün adresini arduino üzerinde şu şekilde yazmalıyız.

ResponseStatus rs = e32ttl.sendFixedMessage(21, 179, 7, &data, sizeof(Signal));
  

şimdi kafaların iyice karıştığına eminim 🙂 “21” ve “179” nereden geldi diye. Burada kafa karışıklığına sebep veren şey, kütüphanenin kullanmış olduğu şu metod.

ResponseStatus sendFixedMessage(byte ADDL, byte ADDH, byte CHAN, const void *message, const uint8_t size);

ResponseStatus sendBroadcastFixedMessage(byte CHAN, const void *message, const uint8_t size );

Şimdi burada kütüphane ile RF setting programı arasında bir sayısal dönüşüm yapmamız gerekiyor. Biz RF setting adresi 5555 yapınca görsel de kırmızı oklarla gösterdiğim gibi 5555 adresini 16 tabanda 2 ye ayırdı hıgh = 15, low=b3. Kullandığımız kütüphane ise 16 taban yerine 10 luk tabana çevirmemizi istiyor. Yani 16 lık tabanda 15, onluk tabanda 21’i, b3 ise 179’u temsil eder. Sanırım konu anlaşılır oldu.

başka bir örnek yapalım sizde misal şu adresleri Rf setting programı ile deneyin bakalım ne olacak 65535, 65536, 65537

adresi 65534 yapıyorum.

[*] Bu adres ve kanal değerini neden seçtiğimi düşünmenizi istiyorum

Sonuç olarak bu adres ve kanal değerinin arduino tarafındaki kod yapısı şu şekilde olmalıdır.

ResponseStatus rs = e32ttl.sendFixedMessage(255, 254, 31, &data, sizeof(Signal));

Sanırım adresleme konusu tam olarak oturdu.

Son bir hatırlatma yine yapayım USB programlayıcı ile parametre ayarlarını girerken USB stick üzerindeki jumper ları çıkartmanız lazım. Sadece 5v beslemeyi gösteren jumper kalmalıdır. RX ve TX pinleri de kısa devre olarak geldiği için o jumper i de unutmayınız. Örnek Görsel:

Usb programlayıcı sleep mode

1.3 Lora ile ağ yapısı oluşturma ve Ağa bir çok lora modülünü dahil etmek

Bazı arkadaşlardan şu soruyu alıyorum.

Kaç tane lora modülünü bir merkeze bağlayabiliriz?

Sanırım bu adresleme örneklerimiz bu soruya direk cevap olmuştur. Dikkat edilmesi gereken durum Lora modüllerinde internet wifi ağına bağlanmak gibi bağlılık söz konusu değil siz hangi adrese veri gönderirseniz o adrese veri gidecektir. Dolayısıyla kaç tane adrese gidebileceğini yukarıdaki örnekte de göstermiş olduk. Yani kaç tane lora modülünü bağlayabilir biraz da sizin becerinize kalmış oluyor. Ama bu şekilde yüzlerce binlerce lora modülünü ağınıza dahil edebilirsiniz.

Ben genelde tarama usulu kullanarak ağımdaki diğer Lora modülleri ile haberleşiyorum. Şöyle ki, bütün adreslerin kayıt ettiğim bir merkez var. Bunu bir array ile tanımlıyorum. Sonrasında bir for döngüsü ile sırayla bütün adreslere sırayla veriyi yolluyorum. Yaklaşık 3-5sn bekleme atyorum. Cevap gelirse gelen cevabı kayıt ediyorum. Cevap gelmez ise Timeout yapıp diğer modüle geçiyorum.

Kod yapısı şöyle:

//Ağdaki diğer lora modüllerinin adresleri,

const byte Frekanslar[SensorSays] = {1, 2, 3, 4, 5, 6, 7};

void loop() {

  for (MevcutMakina = 0; MevcutMakina < SensorSays ; MevcutMakina++) {
    int deger1 = MevcutMakina + 1;
    String text1 = ". Sensörün değerleri alınıyor...";
    String sum1 =  deger1 + text1;
    Serial.println(sum1);
    Durt(MevcutMakina);
}

Bu kod sayesinde mevcut sensor sayısı (yani ağımdaki Lora sayısı) kadar bir for döngüsü sürekli kendini yenileyip. Durt metodu ile bir tane adrese mesaj gönderip gelen cevabı işleyecek. Durt metodu da şu şekilde:

 void Durt(byte i) {
    ResponseStatus rs = e32ttl.sendFixedMessage(0, Frekanslar[i], 4, &kalibre, sizeof(Kalibre));
    Serial.println(rs.getResponseDescription());
    mesajgeldi = true;
    sure = millis();

    while (mesajgeldi) {

      if (millis() > sure + bekleme) {
        sure = millis();
        int deger1 = i + 1;
        String text1 = ". Sensor için Süre Doldu";
        String sum1 =  deger1 + text1;
        Serial.println(sum1);
        mesajgeldi = false;

      } else {

        while (e32ttl.available()  > 1) {
          ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(Kalibre));
.... 
//şeklinde mesaj gelirse onu artık nasıl işleyeceğiniz size kalmış

Evet arkadaşlar benim Lora modülünün temelleri yazımda anlatacaklarım bu kadar yine aklınıza takılan bir şey olursa sitemizdeki Soru&Cevap kısmından bize ulaşabilirsiniz. Bir sonraki videonun konusunu belirlemekte yardımcıda olmuş olursunuz.

N11 üzerinden alış veriş yapmak ve yeni ürünlerimizi görmek için dükkanımızı ziyaret etmeyi unutmayın. Olumlu yorumlarınızı bekliyorum.

Saygılarımla

Arduino ile RS485 modbus üzerinden PC ile haberleşme

Merhaba arkadaşlar, bu yazımızda youtube da çokça sorulan “elektrik sayacı gibi RS485 modbus haberleşme protokolleri ile çalışan sistemleri Arduino ve Lora modülleri ile nasıl haberleştireceğiz” üzerine bir uygulama yapacağız.

Bu uygulamamız aslında 2 seri şeklinde olacak ilk kısımda yanı bu yazımızda sadece Arduino ile PC yi RS485 Modbus üzerinden haberleştireceğiz. Diğer uygulamada ise arduinoya bir lora modulu ilave edip karşıdan da başla bir arduino lora ikilisi üzerinden veriyi yollayıp bilgisayardan takibini sağlayacağız.

Kullanacağımız ekipmanlar

USB RS485 dönüştürücü

RS485-TTL Seri Dönüştürücü

arduino nanoArduino nano

Öncelikle devre şemasını kuralım. Şu site de hazır ir şema vardı biraz sadeleştirip kendim kurdum.

Burada Ekran var ve Arduino uno var ben onları kullanmadım sadece Arduino nano ile çalışmamı yaptım

Benim kurduğum devre şeması

Gördüğünüz üzeri oldukça basit bir devre kurdum. Burada sadece arduino daki veriyi RS485 üzerinden PC ye aktaracağız.

bağlantı şemaları:

Pin NamePin Description
VCC5V (Arduino 5v beslemesi)
AÇıkış USB nin A pinine (rs485 A) (Klemens de olur)
BÇıkış USB nin B pinine (rs485 B) (klemens de olur)
GNDGND (Arduino GND)

R0

Arduino (RX pin)
REArduino 2 Nolu pin
DEArduino 3 Nolu pin
DIArduino (TX pin)

Yazmaya gerek yok ama emin olmak için yine de yazalım

MAX-485 TTL to RS-485 Converter ModuleUSB to RS-485 Module Connected with PC
AA
BB

Şimdi gelelim kütüphaneye ModbusMaster kütüphanesini kullanacağım. Yıldız ve fork sayıları oldukça yüksek diye. Ayrıca şu kütüphaneden esinlenilerek yazılmış.

Arduino üzerine örnek projeyi modifiye ettiğim kod şu şekilde.

Uygulamanın mantığı çok basit. Bir “i” değişkeni var her defasında bir artıyor ve bunun katlarını modbus üzerinden 40000,40001 ve 40002 adreslerine yazdıracağız.

USB dönüştürücümüz CH43x driverini kurmamız gerekiyor ürünü altığım sitede altta driveri indirip kurdum. https://www.robolinkmarket.com/rs485-usb-cevirici-kart

Şimdi gelelim PC ye kuracağımız Modbus programına

https://www.modbustools.com/download.html

Bu sayfaya gelip Modbus Slave programını indiriyoruz. Neden bu programı seçtim tek sebebi trial versiyonun olması yani ücretsiz deneme yapıyor olmasıdır. Normalda RS485 üzerinden sayaç okuma vs işleri yaparsanız burada firmaların kendi programları olacaktır. Ancak çalışma mantığı tümünde aynıdır. Önemli olan mantığı anlamak.

Programı kurup açınca lisans soruyor, “Register later” yapıyoruz. 30 gün deneme süresi tanıyor.

Şimdi gelelim yazdığımız kod yapısına göre bağlantı ayarlarını tanımlamaya. üstte Connection kısmına gelelim.

Yazdığımız koda göre ayarları şu şekilde yapıyorum

Yine koda göre bu sefer slave tanımlamamız gerekiyor.

Bu koda göre slave tanımlaması şu şekilde olacak.

Evet artık yapacağımız işlemleri tamamladık. Arduino ile RS485 modbus protokolü ile bilgisayarı haberleştirdik. Bu uygulamayı 2 yönlüde düşünebilirsiniz. Nasıl ki, bilgisayara veri gönderdik aynı şekilde bir elektrik veya su sayacına bilgi gönderip gelen verileri okutabiliriz. İkinci kısımda da RS485 okuması yapıp, Lora üzerinden kablosuz haberleştirip tekrar PC ye aktaracağız.

Sonuç veriler gelmeye başladı:

Faydalı olduğunu umuyorum iyi günler dilerim.

Lora Modülü ile GPS kullanımı. İrtifa bilgilerinin okunup gönderilmesi

Merhaba arkadaşlar, youtube da yayınlamaya başladığımız Lora modülü ile kablosuz haberleşme eğitim serisine kullanıcılardan gelen yorumlara göre yeni videolar ekliyoruz. Bu aralar sanırım Teknofoest Roket ve aviyonik yarışmalarında kullanılacak olan GPS konum takibi uygulaması talebi çokça gelmekte.

Bugün sizlerle GPS takip uygulaması yapacağız.

Bir lora modülümüzü Roket, diğerini ise kumanda devresi olarak düşünelim. Roket GPS modülü üzerinden aldığı irtifa bilgilerini kumanda merkezine gönderecektir.

Bu Projede kullanacağım devre elemanları

2 adet LoRa Modülü e32 433T20D satın alma linki ->

2 adet Lora ve Arduino için Hazır PCB satın alma linki->

4db 433 MHZ anten2 Adet 433MHz anten Satın alma linki->

1 Adet GPS modülü GY-NEO6MV2 APM2.5 GPS Modül

2 adet Arduino Nano

Şimdi öncelikli olrak kullandığımız GPS modülünün bilgi kağıdını inceleyelim.

Kullandığımız GPS modülünde 4 adet çıkış pini bulunmakta bunlardan 2 tanesi besleme GND ve 3.3 Volt şeklinde. Diğer iki pin ise RX ve TX pinleri. Bağlantı şemasını dikkatli yapmaya çalışın.

Ben bu uygulamada GPS modülünün RX pinin arduino nano da 3 numaralı pine, TX pinini de 4 numaralı pine taktım.

Lora modülünü ise bir önceki yazımızdaki “baştan sona lora modülü” gibi bıraktım.

GPS modülünü kullanmak için TinyGPS++ kütüphanesini kullandım.

github üzerinden zip halinde indirip

Arduino ide üzerinden programınıza bu kütüphaneyi ekleyebilirsiniz.

Roket için kullandığım kod

Kumanda devresinin kod yapısı

Evet arkadaşlar benim anlatacaklarım buraya kadardı. Daha detaylı anlatım için video yu izlemeyi unutmayın.

Herkese selamlar.

LoRa ile Drone Kumandası Yapımı

LoRa ile Drone Kumandası Yapımı

Merhabalar Arkadaşlar bugün sizlerle beraber LoRa ile Drone Kumandası Yapımı işine gireceğiz. Bunun için Sx1278 entegresini kullanan 2 adet E32 433T20d modülü ve 2 adet arduino Nano kullanacağız. Yapacağımız örnekte RC uçak ve planör kumandalarında bulunan joystik ile yönlendirme bilgilerini alıp diğer Arduino nano ya kablosuz bir şekilde lora modülleri yardımıyla göndermeye çalışacağız. Burada bir Arduino bizim uzaktan kumandamızı diğer Arduino ise bizim uçağımızı temsil edecek.

LoRa ile Drone Kumandası Yapımı

Photo by Anamitra Dasgupta from Pexels

Bu proje kullandığım parçalar ve satın alma linkleri

e32 433T20d Başlangıç seti satın alma linki ->

Hazır PCB devresini ve diğer malzemeleri aldıktan sonra PCB üzerine Arduino nano’yu ve besleme kısmını lehimledim. adaptör ile 9 volt besleyeceğim için Arduino UNO üzerindeki devreyi koruma elemanlarını kendi PCB de kopyaladım. Lora modülü TTL seviyesi 3.3 volt ve Arduino nano’nun pinleri 5 volt olduğu için Tx kısmana basit bir 20k/10k gerilim bölücü ekledim. PCB de hem yerleri hem de değerleri yazdığı için bir karışıklık yaşamazsınız.

Sonuç olarak PCB şu şekil bir şey oldu:

Dilerseniz sök tak kolay olsun diye soketli bir yapıda yapabilirsiniz siz. Henüz Lora modülüne parametre ayarlarını girmediğim için lehim yapmadım. Lora modülüne parametre ayarlarını girdikten sonra lehim yapacağım. Şimdi Lora modülüne yani E32 433T20D modülüne parametre ayarlarını girelim:

Lora modülünde parametre ayarlarını değiştirebilmek için ben usb stick kullanıyorum. Arduino üzerindende yapılabiliyor ama zor ve meşakketli bir iş ayrıca modülün yazdığınız parametre değerlerini alıp almadığını kontrol edemiyorsunuz. USB stick programlayıcısını kullanmanızı tavsiye ederim.

USB e15 t2 modülü satın almak için tıklayın

İndirme sayfamızdan indireceğiniz RF programını açınız. Karşınıza şöyle bir sayfa gelecektir.

öncelikle sağ üst köşeden dili ingilizce yapalım, sonrada usb stick parçasındaki jumperleri şu şekle getirip bilgisayara takalım.

bilgisayara şu şekilde bağladıktan sonra parametre ayarlarını girelim.

ben parametre ayarlarını şu şekilde girdim. Video da izlerseniz daha detaylı anlatıyorum bu kısımları.

Bu parametre ayarları kumanda kısmındaki LoRa modülünün ayarları, adres ve kanala dikkat edin. Çünkü bu kısımları biraz sonra kod kısmında kullanacağız.

Aşağıdaki ayarlarda karşı taraf bu örnekte uçağımızın içindeki LoRA modülü olarak düşünelim. Adres dışındaki bütün değerler aynı.

Şimdi kod kısmına geçmeden önce kuracağımız algoritmayı düşünelim. Kumanda üzerindeki joystick üzerinden bir analog read yapılarak joystick deki değişimleri alacağız. sonra da bu veriyi bir paket haline getirip uçağımızın içindeki lora modülüne göndereceğiz.

Neden AirRate 0.3 Kbps?

FEC nedir?

Fixed Mode nedir?

Bu soruları videoda daha detaylı anlatıyor olacağım.

Kumanda kısmının kod yapısı

Uçak kısmının kodu

Evet arkadaşlar benim anlatacaklarım bu kadar. anlaşılmayan veya sormak istediğiniz bir konu olursa youtubede yorumlar kısmına yazabilirsiniz.

İyi günler dilerim.

N11 mağazamızdan güncel Lora ürünlerini görmek için Tıklayınız->

Lora 433T20D Nasıl Programlanır?

Sx1278 modülü kullanmış olduğumuz entegre yapısı gereği UART üzerinden haberleşmeyi sağlamaktadır. Lora 433T20D Nasıl Programlanır? Dolayısıyla bu çipi programlarken bizde aynı yolu kullanacağız. Bu yazımızda 433T20D molünün nasıl programlandığını göreceğiz

E15-USB-T2 modülü ile Lora modüllerimizin parametre değerlerini değiştireceğiz. Yukarıdaki video da uygulamalı örneğini anlatmaya çalıştım. Video da anlaşılmayan bir konu olursa bana sormaktan çekinmeyin.

Kullandığımız USB stick şu şekildedir.

Lora 433T20D Nasıl Programlanır?

Maalesef bu ürünü Türkiye’de satan bir yer bulamadım. Bende Çin’den sipariş verdim. Dileyen arkadaşlar olursa N11 sitesi üzerinden satış yapıyorum.

N11 Satış linki:

USB UART CP2102 E15-USB-T2 CDSENET UART USB TTL 3.3V 5V kablosu https://urun.n11.com/arduino-urunleri-ve-setleri/usb-uart-cp2102-e15-usb-t2-cdsenet-uart-usb-ttl-33v-5v-kablosu-P471705819

Bu ürünü USB bağladıktan sonra bilgisayar üzerinden RF Setting programını çalıştırmamız gerekiyor. RF setting uygulamasının ara yüzü şu şekildedir:

Lora 433T20D Nasıl Programlanır?

Programın nasıl kullanılacağını video da detaylı anlatmaya çalıştım ancak Lora modellerini 433T20D ve 433T30D programlama yaparken karşılaştığınız sorunlarda buraya yazabilirsiniz. Yardımcı olmaya çalışırım.

Programın son sürümü 3.5 indirme sayfası:

https://www.ebyte.com/en/pdf-down.aspx?id=1250

Uygulamanın Bilgi kağıdı:

https://www.ebyte.com/en/pdf-down.aspx?id=761

Lora 433T20D Nasıl Programlanır? Sorusuna cevap bulmaya çalıştığımız bu yazıda anlaşılmayan noktalar olursa bize instagram veya youtube sayfalarımızdan ulaşabilirsiniz.

N11 sayfamızdaki diğer Ürünler:

Lora 433T20D Nasıl Programlanır?

Lora 433T20D, SX1278 / SX 1276

https://urun.n11.com/arduino-urunleri-ve-setleri/lora-sx1278-433-mhz-kablosuz-rf-modulu-e32-433t20dt-P469196578

Lora 433T30D, SX1278 / SX 1276

https://urun.n11.com/arduino-urunleri-ve-setleri/e32-433t30d-lora-sx1278-sx1276-P471710056

Selamlar.

Lora için hangi kütüphaneyi kullanalım? Github

Bir Önceki yazımızda yüzeysel olarak Lora teknolojisi hakkında bilgiler vermiştik. Bu yazımızda ise yazılım kısmı hakkında detaylı bilgi vermeye çalışacağız. İlk yazı biraz daha giriş seviyesi denilebilirdi. Yine de aklınıza takılan soruları bize sormaktan çekinmeyin.

Lora kablosuz haberleşme cihazını hızlıcana kullanabilmek için hazır ve denenmiş kütüphaneleri kullanmak gerekir. Yaptığım araştırmalarda ve kütüphanelerin özelliklerini kıyasladığımda, en başarılı kütüphane olarak LoRa_E32_Series_Library kütüphanesini gördüm. Yaklaşık 1 yıldırda kullanıyorum ve bir sıkıntı yaşamadım.

Neden bu kütüphaneyi seçtim derseniz?

Öncelikli olarak ben biraz güvenliğe önem veriyorum. Ticari satışlarda da müşterilerin ilk sorduğu soru güvenlik. Lora o konuda çok fazla zaafı olan bir teknoloji. Çünkü verileri gönderirken bir şifreleme yapmıyor. Bunu sizin yapmanız gerekiyor. FIXED denilen bir mod seçeniği bulunmakta lora cihazlarında. Fixed mode ile sadece noktadan noktaya haberleşme yapabiliyorsunuz. Bu ne anlama geliyor, birisi size güvenlik zaafı yaşatmak istiyorsa öncelikle sizin hangi kanalda çalıştığını bilmek zorunda ve HIGH ve LOW denilen 2 frekans seçeneği var. Bunları da bilmek zorunda ki bayağı zor bir durum. Diğer kütüphanelerde bu özelliği aktif kullanamadığım için bu kütüphaneyi seçtim.

Ayrıca bu kütüphane lora modülünü programlama imkanı da veriyor. Bu sayede loranın bütün parametrelerini değiştirebilirsiniz.

Kütüphaneyi kullanmadan önce Lora modülümüzü ayarlamamız lazım. Kütüphane örneklerine şuradan ulaşabilirsiniz.