Kütüphanesiz LoRa Kullanımı

Arkadaşlardan çokça soru gelen kütüphanesiz lora modülü kullanımı ile ilgili örnekleri bu sayfada toparlıyorum.

LoRa Başlangıç Seti

LoRa Başlangıç Seti (SX1278 E32-433T20D)

LoRa teknolojisi ile tanışmak isteyenler için 433 MHz bandında çalışan, SX1278 çipli modül ve anten içeren bir başlangıç setidir.

Ürün Sayfasına Git
LoRa Uzman Seti

LoRa Uzman Seti (E22-900T22D)

Kablosuz şifreli veri iletimi ve güvenli iletişim için tasarlanmış bu set, 900 MHz frekansında çalışır ve LoRa uygulamalarında güvenli veri iletimi sağlar.

Ürün Sayfasına Git

1 İnt Tipinde Büyük Sayıları Yollama ve Alma

Gönderici Kodu:

#include <SoftwareSerial.h>
SoftwareSerial FixSerial(3, 4); //PCB versiyon 4.3 den sonra bu şekilde olmalı

#define M0 7
#define M1 6

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

  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);

  FixSerial.begin(9600);
}

void loop() {
  FixSerial.write((byte)0x00); //Alıcı Adresi HIGH
  FixSerial.write(3);       //Alıcı Adresi LOW
  FixSerial.write(18);       //Alıcı Kanalı =0x17=23    (410M+23=433 MHz)

  intGonder(12345); // Bu Sayıyı Göndereceğiz ->
  delay(1000);
}

void intGonder(int sayi) {
  FixSerial.write(highByte (sayi));
  FixSerial.write(lowByte (sayi));
}

//GÖNDERİCİ LORA

Alıcı Taraf

#include <SoftwareSerial.h>
SoftwareSerial FixSerial(3, 4); //PCB versiyon 4.3 den sonra bu şekilde olmalı

#define M0 6
#define M1 7
byte upperByte, lowerByte;
int newInt=0;

void setup() {
  Serial.begin(115200);
  
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);
  
  FixSerial.begin(9600);
}

void loop() {
  if (FixSerial.available() > 1) {
    upperByte = FixSerial.read();
    lowerByte = FixSerial.read();

    newInt = (upperByte << 8) + lowerByte;
    Serial.print("Sayi= ");
    Serial.println(newInt);
  }
}

//ALICI LORA

2 String Yollama

Gönderici

#include <SoftwareSerial.h>
SoftwareSerial FixSerial(3, 4); //PCB versiyon 4.3 den sonra bu şekilde olmalı
byte i = 0;
#define M0 7
#define M1 6
void setup() {
  Serial.begin(115200);
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);
  FixSerial.begin(9600);
}
void loop() {
  FixSerial.write((byte)0x00); //Alıcı Adresi HIGH
  FixSerial.write(3);       //Alıcı Adresi LOW
  FixSerial.write(18);       //Alıcı Kanalı =0x17=23    (410M+23=433 MHz)
  
  FixSerial.println("Selam");
  delay(500);
}

Alıcı

#include <SoftwareSerial.h>

SoftwareSerial FixSerial(3, 4); //PCB versiyon 4.3 den sonra bu şekilde olmalı
char rc;

#define M0 6
#define M1 7


void setup() {
  Serial.begin(115200);
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);
  FixSerial.begin(9600);
}

void loop() {
  while (FixSerial.available()) {
    rc = FixSerial.read();
    Serial.print(rc);    
  }
}

3 Video

Youtube fixaj kanalımız üzerinden de kütüphanesiz lora kullanım videosunu izlemenizi tavsiye ederim.

Emre Konca ile GSM ve Lora Projesi

Emre Konca ile GSM ve Lora Projesi

Emre hocamız kendi ürettiği GSM shieldler ile bizim Lora modüllerini bu projede bir araya getirerek muhteşem bir proje gerçekleştirdi. Emre Konca ile GSM ve Lora Projesi ile ilgili yazımızın detayları birazdan.

Emre Hocanın detaylı videosu:

1 Gerekli Malzemeler

LoRa Uzman Seti

LoRa Uzman Seti (E22-900T22D)

Kablosuz şifreli veri iletimi ve güvenli iletişim için tasarlanmış bu set, 900 MHz frekansında çalışır ve LoRa uygulamalarında güvenli veri iletimi sağlar.

Ürün Sayfasına Git
LoRa Başlangıç Seti

LoRa Başlangıç Seti (SX1278 E32-433T20D)

LoRa teknolojisi ile tanışmak isteyenler için 433 MHz bandında çalışan, SX1278 çipli modül ve anten içeren bir başlangıç setidir.

Ürün Sayfasına Git

2 Kodlar

GSM Shield

#include "LoRa_E22.h"
LoRa_E22 E22(&Serial1, 2, 7, 6);

#define M0 7
#define M1 6

struct Signal {
  char type[15];
  int role;
} data;

#include <KapadokyaGSM.h>
KapadokyaGSM Kapadokya;
String smsMetni, smsNumarasi;
#define gonderilecekTelNumarasi  "+905551112233" // Numarayı değiştirmeyi unutmayın :) 


void setup() {
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);

  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);

  Serial.begin(9600);
  E22.begin();
  delay(500);

  Kapadokya.basla();
  delay(4000);
  Kapadokya.tumSmsSil();
  delay(4000);
  Serial.println("Sistem Basladi");
  Kapadokya.smsGonder(gonderilecekTelNumarasi, "Sistem acildi.");
}



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

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

    if (strcmp(data.type, "Fixaj.com") == 0) {
      Serial.println("şifre doğru");
      if (data.role == 11) {
        Serial.println("gaz kacagi basladi");
        Kapadokya.smsGonder(gonderilecekTelNumarasi, "gaz kacagi basladi");
        delay(1000);

      } else if (data.role == 10) {
        Serial.println("gaz kacagi durdu");
        Kapadokya.smsGonder(gonderilecekTelNumarasi, "gaz kacagi durdu");
        delay(1000);
      }
      else if (data.role == 21) {
        Serial.println("hareket algilandi");
        Kapadokya.smsGonder(gonderilecekTelNumarasi, "hareket algilandi");
        delay(1000);
      }
      else if (data.role == 20) {
        Serial.println("hareket durdu");
        Kapadokya.smsGonder(gonderilecekTelNumarasi, "hareket durdu");
        delay(1000);
      }
      else  {
        Serial.println("diger");
        delay(1000);
      }
    }

    rsc.close();
  }
}

GAZ

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

SoftwareSerial mySerial(10, 11);
LoRa_E22 E22(&mySerial);

struct Signal {
  char type[15] = "Fixaj.com";
  int sensor;
} data;

#define M0 7
#define M1 6

volatile bool roleDurumu = false;
volatile bool butonDurumu = false;

bool gaz, eGazDrm;

void setup() {
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);

  Serial.begin(9600);
  E22.begin();
  delay(500);
}

void loop() {
  // Serial.println(analogRead(A0));
  if (analogRead(A0) > 80) {
    gaz = true;
  }
  else {
    gaz = false;
  }

  if (eGazDrm != gaz) {
    if (gaz) {
      eGazDrm = gaz;
      data.sensor = 11;
      ResponseStatus rs = E22.sendFixedMessage(0, 1, 18, &data, sizeof(Signal));
      Serial.println(rs.getResponseDescription());
    } else {
      eGazDrm = gaz;
      data.sensor = 10;
      ResponseStatus rs = E22.sendFixedMessage(0, 1, 18, &data, sizeof(Signal));
      Serial.println(rs.getResponseDescription());
    }

    Serial.print("data.sensor: ");
    Serial.println(data.sensor);
  }
}

HAREKET SENSORU

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

SoftwareSerial mySerial(10, 11);
LoRa_E22 E22(&mySerial);

struct Signal {
  char type[15] = "Fixaj.com";
  int sensor;
} data;

#define M0 7
#define M1 6

volatile bool roleDurumu = false;
volatile bool butonDurumu = false;

bool hrkt, eHrktDrm;

void setup() {
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);

  Serial.begin(9600);
  E22.begin();
  delay(500);
}

void loop() {
  // Serial.println(analogRead(A0));
  if (digitalRead(A0)) {
    hrkt = true;
  }
  else {
    hrkt = false;
  }

  if (eHrktDrm != hrkt) {
    if (hrkt) {
      eHrktDrm = hrkt;
      data.sensor = 21;
      ResponseStatus rs = E22.sendFixedMessage(0, 1, 18, &data, sizeof(Signal));
      Serial.println(rs.getResponseDescription());
    } else {
      eHrktDrm = hrkt;
      data.sensor = 20;
      ResponseStatus rs = E22.sendFixedMessage(0, 1, 18, &data, sizeof(Signal));
      Serial.println(rs.getResponseDescription());
    }

    Serial.print("data.sensor: ");
    Serial.println(data.sensor);
  }
}

Uygulama Videosu

Kablosuz ve Adresli Yangın Alarm Sistemi

Kablosuz ve Adresli Yangın Alarm Sistemi

Merhaba, bugün sizlerle beraber endüstriyel çözümlerde LoRa modülünün nasıl kullanılacağını Kablosuz ve Adresli Yangın Alarm Sistemi sizlere anlatmaya çalışacağım. Özellikle bütün fabrikalarda olan ve kablolu olarak döşemesi tam bir baş belası olan yangın ikaz butonlarını nasıl kablosuz ve adresli hale getirebileceğimizi sizlere anlatmaya çalışacağım. Umarım faydalı bir yazı olur.

Piayasada eğer biraz araştırırsanız Yangın ikaz alarm sistemleri çok pahalı olduğunu göreceksiniz. 100 bin liranın üstü fiyatları görebilirsiniz. Ayrıca bu sistemler sadece adresli olanı yani kablosuz da değil. Bunun tabi ki sebebi 100% ithal olması ve yazılımın tamamen dışardan alınmasından kaynaklanmaktadır.

Photo by Nothing Ahead from Pexels

1 Gerekli Malzemeler

LoRa Uzman Seti

LoRa Uzman Seti (E22-900T22D)

Kablosuz şifreli veri iletimi ve güvenli iletişim için tasarlanmış bu set, 900 MHz frekansında çalışır ve LoRa uygulamalarında güvenli veri iletimi sağlar.

Ürün Sayfasına Git
ESP32 30-Pin ESP-WROOM-32 WiFi Bluetooth

ESP32 30-Pin ESP-WROOM-32 WiFi Bluetooth

Çift çekirdekli işlemciye sahip, WiFi ve Bluetooth özellikleri barındıran bu ESP32 modülü, çok çeşitli IoT projelerinde kullanılabilir.

Ürün Sayfasına Git
ESP32 30-Pin ESP-WROOM-32 WiFi Bluetooth

ESP32 30-Pin ESP-WROOM-32 WiFi Bluetooth

Çift çekirdekli işlemciye sahip, WiFi ve Bluetooth özellikleri barındıran bu ESP32 modülü, çok çeşitli IoT projelerinde kullanılabilir.

Ürün Sayfasına Git
50dB 868-900 MHz 4G LTE Anten

50dB 868-900 MHz 4G LTE Anten

Bu anten, geniş bant aralığında (698-960MHz ve 1710-2700MHz) veri iletimi sağlar ve 4G LTE, LoRa ve diğer iletişim protokolleri için uygundur.

Ürün Sayfasına Git
E22-900T22D 7km Menzilli 900MHz LoRa Modülü

E22-900T22D 7km Menzilli 900MHz LoRa Modülü

SX1262 çipli, 900 MHz bandında çalışan ve 7km’ye kadar menzil sunan bir LoRa modülüdür.

Ürün Sayfasına Git

LoRa Uzman Seti

LoRa Uzman Seti (E22-900T22D)

Kablosuz şifreli veri iletimi ve güvenli iletişim için tasarlanmış bu set, 900 MHz frekansında çalışır ve LoRa uygulamalarında güvenli veri iletimi sağlar.

Ürün Sayfasına Git

2 Projenin Çalışma Mantığı

Kablosuz ve Adresli Yangın Alarm Sistemi projemizde Arduino nun interrupt komutunu kullanacağız. İnterrupt size şöyle somutlaştırayım. Normal bir şekilde evde oturup televizyon izliyorsunuz, yaptığınız iş normal rutini sırasında giderken arka odadan bebeğinizin ağladığını duyuyorsunuz. Bu durumda “interrupt” devre giriyor ve TV izleme zevkiniz o anda duraklatılıyor ve bebekle ilgilenmek zorunda kalıyorsunuz. Bebeğin isteklerini yerine getirip susturduktan sonra geri gelip TV izlemeye devam ediyorsunuz.

Aynı yukarıda anlattığım şekil arduino loop() döngüsü içinde dönün dururken biz 2 numaralı pine bir buton takacağız ve butona her hangi bir anda basıldığında merkeze mesaj gönderteceğiz. Olay bu kadar basit. Donma kilitlenme sorunları hiç yaşamayacağız. Merkez noktada bekleme durumunda iken gelen bir mesaj olduğunda hemen mesajı çözümleyip kimden geldiğini bildirecek sonrada bunu bir I2C ekrana yazdıracağız.

3 İnterrupt Bağlantısı

Yukarıda ki görsel her ne kadar UNO için olsada bende NANO da 2 numaralı pine butonu bağladım bağlantı şekli aynı. Hatta şöyle ledli bir buton internnetten buldum onu kullandım. LED bağlantılarını 220R dirençle 9 numaralı pine bağladım.

4 Kodlar

Yangın İkaz butonunun olduğu taraf kısmının kodları

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

SoftwareSerial mySerial(10, 11);

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

LoRa_E22 E22(&mySerial);

struct Signal {
  char type[15] = "Urfa63";
  byte role;
} data;

#define M0 7
#define M1 6
#define BTN 2
#define LED 9

bool ledAcKapa = false;
volatile bool ledDurum = false;
volatile bool butonDurumu = false;

//akıllı bekleme
unsigned long kanalBekleme_sure = 0;
int kanalBekleme_bekleme = 1000;

void setup() {
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);

  pinMode(BTN, INPUT_PULLUP);
  pinMode(LED, OUTPUT);
  digitalWrite(LED, LOW);

  Serial.begin(9600);
  E22.begin();
  //delay(500);
  attachInterrupt(digitalPinToInterrupt(BTN), butonOku, FALLING);
  //delay(500);
  
}

void loop() {

  if (butonDurumu) {
    butonDurumu = false;
    data.role = 1;
    ResponseStatus rs = E22.sendFixedMessage(0, 1, 25, &data, sizeof(Signal));
    Serial.println(rs.getResponseDescription());
    Serial.print("Yangın ikaz butona basıldı: ");
    Serial.println("2-Mutfak");
  }

  if (ledDurum) {
    if (millis() > kanalBekleme_sure + kanalBekleme_bekleme) {
      kanalBekleme_sure = millis();
      ledAcKapa = !ledAcKapa;
      digitalWrite(LED, ledAcKapa);
    }
  }else{
    digitalWrite(LED, LOW);
  }
}

void butonOku() {
  static unsigned long last_interrupt_time = 0;
  unsigned long interrupt_time = millis();
  if (interrupt_time - last_interrupt_time > 500)
  {
    ledDurum = !ledDurum;
    butonDurumu = true;
  }
  last_interrupt_time = interrupt_time;
}

Merkez noktasının olduğu tarafın kodları I2C 4 satırlık ekran için kullandığım kütüphaneyi şuradan indirebilirsiniz.

#include "LoRa_E22.h"
#include <SoftwareSerial.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 4);

SoftwareSerial mySerial(10, 11);

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

LoRa_E22 E22(&mySerial);

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

#define M0 7
#define M1 6


void setup() {
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);

  Serial.begin(9600);
  E22.begin();
  lcd.begin();
  lcd.clear();
  lcd.setCursor(3, 0);
  lcd.print("<<Fixaj.com>>");
}

void loop() {

  while (E22.available()  > 1) {

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

    if (strcmp(data.type, "Urfa63") == 0) {
      Serial.println("şifre doğru");
      if (data.role == 1) {

        Serial.println("DİKKAT!!! Mutfak'da Yangın başladı");
        lcd.clear();
        lcd.setCursor(3, 0);
        lcd.print("<<Fixaj.com>>");
        lcd.setCursor(0, 2);
        lcd.print("DiKKAT!!! YANGIN");
        lcd.setCursor(0, 3);
        lcd.print("Konum: 02 - MUTFAK");

      } else if (data.role == 2) {
        Serial.println("DİKKAT!!! Depo'da Yangın Başladı");
        lcd.clear();
        lcd.setCursor(3, 0);
        lcd.print("<<Fixaj.com>>");
        lcd.setCursor(0, 2);
        lcd.print("DiKKAT!!! YANGIN");
        lcd.setCursor(0, 3);
        lcd.print("Konum: 03 - DEPO");
      }
    }
    rsc.close();
  }
}

5 Lora Parametre Ayarları

Her zamanki gibi lora modüllerine parametre ayarlarını verebilmek için 3in1 PCB mizi kullanıyorum.

3in1 PCB
3in1 PCB

PCB ye takılı olan arduino nun içine şu kodu yükleyip E22 RF setting programını açıp dilediğiniz adreslemeyi yapabilirsiniz.

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

#define M0 7
#define M1 6

void setup() {
  Serial.begin(9600);
  mySerial.begin(9600);

  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, HIGH);
}

void loop() {
  if (Serial.available()) {
    mySerial.write(Serial.read());
  }

  if (mySerial.available()) {
    Serial.write(mySerial.read());
  }
}

Ben bu projede merkezin adresini 1, butonlarıda sırayla 2 ve 3 yaptım. bütün kanaları da25 yaptım. Burada Tran mode DİKKAT fixed hepsinde.

Sonuç

LoRa ile Uzaktan Kontaktör Start-Stop Devresi

LoRa ile Uzaktan Kontaktör Start-Stop Devresi

Bu yazımızda yüksek güçlü motor, dalgıç pompası ve projektör gibi güçlü cihazların LoRa ile Uzaktan Kontaktör Start-Stop Devresi nasıl yapılır öğreneceğiz.

Kontaktörler bütün panolarda bulunan ve güvenli bir şekilde devre elemanlarını açıp kapatma işine yarar. Bugün sizlerle beraber kontaktör, buton, interrrup ve LoRa modüllerinin birleşimi büyük bir proje yapacağız. Ticari olarak da satılabilir bir proje olacaktır bu yapacağımız proje.

Uygulama Videosu

1.1 Gerekli Malzemeler

40dBi SMA 433 MHz Anten

40dBi SMA 433 MHz Anten

Bu anten, 433 MHz frekansında yüksek kazançlı bir veri iletimi sağlar ve LoRa cihazlar için idealdir.

Ürün Sayfasına Git
10km Menzilli 433 MHz LoRa Modülü

10km Menzilli 433 MHz LoRa Modülü

SX1278 çipli, 1W çıkış gücüne sahip ve 10km menzilli veri iletişimi sunan bir LoRa modülüdür.

Ürün Sayfasına Git
LoRa Uzman Seti

LoRa Uzman Seti (E22-900T22D)

Kablosuz şifreli veri iletimi ve güvenli iletişim için tasarlanmış bu set, 900 MHz frekansında çalışır ve LoRa uygulamalarında güvenli veri iletimi sağlar.

Ürün Sayfasına Git
LoRa Başlangıç Seti

LoRa Başlangıç Seti (SX1278 E32-433T20D)

LoRa teknolojisi ile tanışmak isteyenler için 433 MHz bandında çalışan, SX1278 çipli modül ve anten içeren bir başlangıç setidir.

Ürün Sayfasına Git

2 Kontaktör-Röle Bağlantısı

Öncelikle kontraktörü neden ve nasıl kullanacağımız devre şeması üzerinden gösterelim.

Kontaktör Start-Stop Devresi

bağlantı şemasını internette burdan buldum https://silo.tips/download/kumanda-devreler-rnek-1-stop-ncelikli-start-stop-devresi-klasik-mhrleme-devresi

3 Pano Tarafı Kod Yapısı

Kontaktöre start stop verebileceğimiz kod yapısı şu şekildedir.

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

String sifre = "";
#define M0 7
#define M1 6
#define StartBtn 2
#define StopBtn 9


struct Signal {
  char type[15];
  bool role;
} data;

void setup() {
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  pinMode(StartBtn, OUTPUT);
  pinMode(StopBtn, OUTPUT);

  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);
  digitalWrite(StartBtn, LOW);
  digitalWrite(StopBtn, LOW);

  Serial.begin(9600);
  E22.begin();
  delay(500);
}



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

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

    if (strcmp(data.type, "Fixaj.com") == 0) {
      Serial.println("şifre doğru");
      if (data.role) {
        Serial.println("role start");
        digitalWrite(StartBtn, HIGH);
        delay(1000);
        digitalWrite(StartBtn, LOW);
        delay(1000);
        
      } else {
        Serial.println("role stop");
        digitalWrite(StopBtn, HIGH);
        delay(1000);
        digitalWrite(StopBtn, LOW);
        delay(1000);

      }
    }

    rsc.close();
  }
}

4 Buton İnterrupt

Kumanda devresinden gelecek start stop sinyalini arduino NANO nun 2 nolu pinine bağladık. Çünkü interrupt ile düğmenin basılıp basılmadığını kontrol edeceğiz.

Arduino internal pullup button

internall pullup ile ilgili yazıyı buradan okuyabilirsinz https://www.arduino.cc/en/Tutorial/DigitalInputPullup

Çalışma mantığı ve debounce

ilgili yazıya şuradan ulaşabilirsiniz https://elextutorial.com/learn-arduino/arduino-button-switch-interface-pull-up-resistor/

5 Kumanda Kod Yapısı

Butondan okuma yapıp ona göre kontaktöre start – stop sinyali verdiğimiz kod yapısı şu şekilde.

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

SoftwareSerial mySerial(10, 11);

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

LoRa_E22 E22(&mySerial);

struct Signal {
  char type[15] = "Fixaj.com";
  bool role;
} data;

#define M0 7
#define M1 6
#define BTN 2

volatile bool roleDurumu = false;
volatile bool butonDurumu = false;


void setup() {
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);

  pinMode(BTN, INPUT_PULLUP);

  Serial.begin(9600);
  E22.begin();
  delay(500);
  attachInterrupt(digitalPinToInterrupt(BTN), butonOku, FALLING);
}

void loop() {

  if (butonDurumu) {
    butonDurumu = false;
    if (roleDurumu) {
      data.role = 1;
      ResponseStatus rs = E22.sendFixedMessage(0, 44, 25, &data, sizeof(Signal));
      Serial.println(rs.getResponseDescription());
    } else {
      data.role = 0;
      ResponseStatus rs = E22.sendFixedMessage(0, 44, 25, &data, sizeof(Signal));
      Serial.println(rs.getResponseDescription());
    }

    Serial.print("data.role: ");
    Serial.println(data.role);
  }
  
}

void butonOku() {
  static unsigned long last_interrupt_time = 0;
  unsigned long interrupt_time = millis();
  if (interrupt_time - last_interrupt_time > 500)
  {
    roleDurumu = !roleDurumu;
    butonDurumu = true;
  }
  last_interrupt_time = interrupt_time;
}

6 LoRa Modüllerinin Parametre Ayarları

Lora Modüllerinie 3in1 PCB miz ile RF Setting programı ayarı verebilmemiz için öncelikle şu kodu arduinoya yüklüyoruz.

3in1 PCB
3in1 PCB
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

#define M0 7
#define M1 6

void setup() {
  Serial.begin(9600);
  mySerial.begin(9600);

  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, HIGH);
}

void loop() {
  if (Serial.available()) {
    mySerial.write(Serial.read());
  }

  if (mySerial.available()) {
    Serial.write(mySerial.read());
  }
}

Sonrasında RF settin E22 programını açıp portları seçtikten sonra şu ayarları girip set ediyoruz. RF settin E22 programına indirme sayfamızdan ulaşabilirsiniz.

PANO TARAFI LoRa Ayarları

Kumanda Tarafı LoRa ayarları

LoRa Başlangıç Seti

LoRa Başlangıç Seti

Merhaba, bugün sizlerle beraber lora başlangıç seti ürünümüzü inceleyeceğiz ve LoRa kablosuz haberleşme ekosistemine ilk adımı atacağız. Bu uygulamada sadece yazı üstünde kalmayacağız aynı zamanda bir uygulama yaparak sizlerde hayal ettiniz projeleri kendiniz yapabileceksiniz. Hazırsanız başlıyoruz..

1.1 LoRa Nedir?

Lora teknoloji 2018 de Fransız Semtech firmasının geliştirmiş olduğu çok uzak mesafelere (mesala Ay’a 🙂 ) düşük güç tüketimleri ile küçük paketlerde veri aktarmaya yarayan bir teknolojidir.

Normalde kablolu çalışan bir sisteminiz var ve kablodan kurtulmak istiyorsunuz LoRa burda hemen imdadınıza yetişiyor. LoRa teknoloji gelecek 10 yılın en çok kullanılacak kablosuz haberleşme teknolojisidir. kızılötesi, Bluetooth, wifi ve 4g alt yapılarının yanında kendine bir yer edinmiş ve git gide daha da yaygınlaşmaktadır. Bu anlatacağım uygulama ile sizde bu treni kaçırmadan tam zamanında yakalamış olacaksınız.

1.2 Gerekli Malzemeler

LoRa Parametre Ayarları İçin USB Stick

LoRa Parametre Ayarları İçin USB Stick

Bu USB stick, LoRa modülleri için parametre ayarlamayı kolaylaştırır ve hızlı veri iletimi sağlar.

Ürün Sayfasına Git
LoRa Başlangıç Seti

LoRa Başlangıç Seti (SX1278 E32-433T20D)

LoRa teknolojisi ile tanışmak isteyenler için 433 MHz bandında çalışan, SX1278 çipli modül ve anten içeren bir başlangıç setidir.

Ürün Sayfasına Git

1.3 LoRa Parametre Ayarları

Lora modüllerini ayarlamadan önce usb stick üzerindeki jumperları çıkartıyoruz üstünde sadece 3.3v olan jumper kalmalı diğer bütün jumperları çıkartın.

Sonuçta usb stick şu şekilde olmalı:

rx/tx, m1 ve m0 jubperlarını çıkartın.

Usb stick ile Lora modüllerini programlayabilmeniz için RF 4.0 programını indirmeniz gerekiyor.

Programın linki:

en üstteki RF setting programını indiriniz.

Merkez Noktamızın Parametre Ayarları

Uzak mesafedeki Lora modülünün parametre ayarları

Burada dikkat ederseniz 2 yeri sadece değiştirdik, fixed mode “enable” ve address değerlerini değiştirdik onun dışında varsayılan değerlerde bıraktık bir değişiklik yapmadık.

1.4 Arduino Programını Kurma

Biz bu uygulamada bir noktaya veri yollayıp sonra o noktadan cevap gelmesini bekleyeceğiz, gelen cevaba göre tekrar başka bir veri gönderebileceğimiz bir uygulama yapacağız.

Kod yapısına girmeden önce hangi kütüphaneyi kullancağımızı ve bu kütüphaneyi kendi Arduino ide mize nasıl kuracağımızı öğrenelim.

Öncelikle Arduino ide programını şu adresten indirip, bilgisayarınıza yüklemeniz gerekiyor.

https://www.arduino.cc/en/software

Açılan sayfada kendi bilgisayarınız sistemine göre seçim yapınız.

Açılan sayfadan ise “just download” butonuna basınız.

İndirdiğiniz dosyayı kurup artık arduino programlayabilirsiniz.

1.5 Hazır Kütüphaneyi indirip Kurma

Ben Xreef adında bir arkadaşın geliştirmiş olduğu Lora E32 kütüphanesi kullanıyorum sorunsuz bir şekilde çalışıyor. Şu ana kadarda bir sıkıntı yaşamadım sizlerede tavsiye ederim.

Bu kütüphaneyi kurabilmek için öncelikle github linkini açıp kütüphaneyi masaüstümüze indirmemiz gerekiyor. Ayrıca bu kütüphane üzerinde bir çok hazır örnekte bulunmakta. Ben neden bu kütüphaneyi seçtim derseniz, fixed mod gibi lora modülünün güzel özelliklerini aktif edebileceğim tek kütüphane bu olduğu için bu kütüphaneyi kullanıyorum.

Linke tıklayıp kütüphaneyi görseldeki gibi indirelim.

https://github.com/xreef/LoRa_E32_Series_Library

Şimdi gelelim kütüphaneyi nasıl kendi arduino programınıza kuracağımıza. Bu işlem oldukça basit sadece tek tıklama ile kütüphaneyi yüklemiş olacağız. Kurduğumuz arduino ide uygulamasına geri dönersek yukarıda araçlar kısmında görseldeki yolu izleyerek zip şeklinde indirdiğimiz kütüphaneyi kendi programınıza kurmuş olacağız.

1.6 Kodlar

Merkez noktasının Kodu:

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

uzak noktanın Kodları

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

Sonuç

Yazımızın sonuna geldik umarım LoRa ile gözünüzdeki o ilk korkuyu atmışızdır artık. Gördüğünüz üzeri her şey çok kolay sadece bir disiplin ile sabırlı bir şekilde sırayla gitmek gerekiyor. LoRa ile ilgili anlamadığınız bir konu olursa “Soru&Cevap” sayfasına sorularınızı bekliyorum.

Hayallerinizdeki projeleri yapmak dileği ile her şey gönlünüzce olsun.

İyi günler dilerim.

Emre Konca ile LoRa ve Röle Kontrolü

Emre Konca ile LoRa ve Röle Kontrolü

Merhaba arkadaşlar Emre Hocamızın hazırlamış olduğu projenin videosunu ve gerekli bilgileri sizinle paylaşacağım bu yazımızda.

Bu projede herkesin merak ettiği bir projeyi Emre hocamız sizler için yaptı. Lora ile büyük güçteki cihazların kontrol ve kumandası nasıl yapılır? Bu videoyu izledikten sonra sizlerde kendi kendinize uzaktan motor çalıştırma, aydınlatmaları aç-kapa gibi çeşitli güçlerdeki projeleri yapabileceksiniz.

Gerekli Malzemeler

LoRa Uzman Seti

LoRa Uzman Seti (E22-900T22D)

Kablosuz şifreli veri iletimi ve güvenli iletişim için tasarlanmış bu set, 900 MHz frekansında çalışır ve LoRa uygulamalarında güvenli veri iletimi sağlar.

Ürün Sayfasına Git
LoRa Başlangıç Seti

LoRa Başlangıç Seti (SX1278 E32-433T20D)

LoRa teknolojisi ile tanışmak isteyenler için 433 MHz bandında çalışan, SX1278 çipli modül ve anten içeren bir başlangıç setidir.

Ürün Sayfasına Git

Uygulama Videosu

Uygulama Kodları

C# ile Otomasyona Giriş

C#, Arduino ve LoRa ile Otomasyona Giriş

SCADA ve otomasyon projelerinin nasıl yapıldığını hatta daha da iyisi LoRa teknoloji ile kablosuz olarak nasıl yapıldığını bu yazımızda inceleyeceğiz.

Visual Studio programını bilgisayarımıza yüklemek ile işe başlayalım. Bir çok Visual Studio çeşidi olmasına karşın ben klasik olan “Visual Studio Community 2019” u kurdum.

indirme sayfası https://visualstudio.microsoft.com/tr/

uygulamayı indirim yükledikten sonra karşınıza şöyle bir sayfa gelecektir.

Kurulum bitince bazen hangi alt yapıları kurmanızı gösteren sayfada açılabilir. Buradan biz .NET framework seçmemiz gerekiyor.

Dosya boyutları biraz büyük olduğu için indirmeler uzun sürebilir. Kurulum ve montaj bittiğine göre artık masa üstü uygulaması yazabiliriz. Kurulum işlemleri bittiğine göre artık başlayabiliriz.

Yeni proje diyerek projemize başlayalım

Şimdide hangi alt yapı üstüne uygulama yazacağımız seçeceğiz. Tabiki .NET framework

Sonraki butonuna tıkladıktan sonra bu sayfada uygulamamızın adını ve nereye kaydedeciğimi belirledikten sonra Hangi alt yapının seçili olduğuna dikkat edelim burada .net core yazıyorsa yanlış yoldasınız demektir. geri gidip doğru alt yapıyı seçmelisiniz. Mümkün mertebe en son sürüm .net kullanmaya çalışın.

Bu işlemleri doğru bir şekilde yaptıysak şu şekil bir sayfa bizi karşılayacaktır.

Şimdi bu boş sayfayı nasıl şu hale getirdik onu size video üzerinde anlatayım.

Gerekli Malzemeler

LoRa Uzman Seti

LoRa Uzman Seti (E22-900T22D)

Kablosuz şifreli veri iletimi ve güvenli iletişim için tasarlanmış bu set, 900 MHz frekansında çalışır ve LoRa uygulamalarında güvenli veri iletimi sağlar.

Ürün Sayfasına Git
LoRa Başlangıç Seti

LoRa Başlangıç Seti (SX1278 E32-433T20D)

LoRa teknolojisi ile tanışmak isteyenler için 433 MHz bandında çalışan, SX1278 çipli modül ve anten içeren bir başlangıç setidir.

Ürün Sayfasına Git

Youtube

Uygulama ve Arayüz Dosyaları

C# uygulaması ve Arduino kodları ektedir

Meraklısına Daha Fazlası

izlemenizi tavsiye ettiğim diğer videolar

  • https://www.youtube.com/watch?v=I9hHjbzC2tg
  • https://www.youtube.com/watch?v=1Ij15zLZccs
  • https://www.youtube.com/watch?v=vtI6Wd7DogQ
  • https://www.youtube.com/watch?v=vHeG3Gt6STE

resimler http://www.scadasoftware.net/wp-content/uploads/2012/03/Scada_Symbolfactory.png

Lora Modülleri için en Doğru Anten Seçimi

Lora Modülleri için en Doğru Anten Seçimi

Merhaba Arkadaşlar bugün sizlerle beraber piyasada en çok satılan antenlerin karşılaştırmasını yapacağız. Mesafe olarak ve dış malzeme kalitesi olarak incelediğimiz antenleri bu sefer açık alanda değil, şehir merkezi ve fabrikalar bölgesinde deneyeceğiz. Daha gerçekçi sonuçları yakalayabilmek için bu şekilde bir seçim yaptık.

Bilindiği üzeri kablosuz haberleşmede anten can damarıdır. Sizin yazılımınızı ne kadar iyi olursa olsun, ne kadar güçlü LoRa modülleri kullanırsanız kullanın Anten seçimi doğru olmaz ise 25-30 metreyi kablosuz haberleşmede aşamazsınız. Bunların yanında eğer satış yapmayı düşünüyorsanız, otomasyon sistemi kurmak istiyorsanız işletmelere muhakkak dış görünüşe de önem vermelisiniz.

Sizin yaptığınız devre kapalı bir kutu içinde kalabilir ve gizleyebilirsiniz. Ancak anten sürekli dışarda kalacaktır. Antenin malzeme kalitesi kötü olursa zamanla aşınmaya ve korozyona maruz kalır. Ayrıca satış yaptığınız işletmede güven eksikliği oluşturabilirsiniz. O yüzden benim için anten seçiminde iletim gücü ne kadar önemli ise malzeme kalitesi ve dış görünüşe de o kadar önemlidir. Bu benim yılar içinde gördüğüm bir iş tecrübesidir. Alman, pahalı satar ama Türk malı satılmazın altında yatan gizli sebep sürekli bu dış görünüşe önem vermemizden kaynaklanıyor.

Piyasada en çok kullanılan ve arkadaşların bana sorduğu başlıca 4 anten

Ölçümleri şöyle yaptım basit bir devre kurdum Verici olarak 433T30D modülünü ve 4dbi uzun anteni evin balkonuna çıkartıp şehir merkezinde 2 km çapında bir daire çizerek dolaştım. Yaptığım devrede yeşil ışık yanıp sönüyorsa haberleşme var.

Işık sabit yanıyorsa haberleşme yok anlamına geliyordu. Sonuçlar şu şekilde:

Ölçümlerimi açık hava da yaptım. Şanlıurfa Karaköprü yoğun olarak binalar olduğu bir bölge olduğu için iletim yukarıda harita gösterilen mor alanlarda kaldı. Diğer yerlerde yoktu. Yani Yaklaşık 700m çapında bir çekim sağladı. Diğer kısa antenleri denedim ancak sağlıklı bir çekim alamadım. Hatta aynı ölçümü fabrikalar bölgesinde tekrarladım. Onunda videosunu ekleyeceğim youtube sinyal gücü diğer antende 30 metreyi geçmedi.

Antenleri bizim zamanımızda populer olan Pokemon karakterlerine göre kıyaslarsak 🙂

Piyasada bolca olan ve arkadaşların bana sorduğu şu sarı kaplamalı en sağ daki antenler roket takımı, gürültüsü çok ama çekim kuvveti işe yaramaz. Kırmızı halkalı olan 3dbi anten fena değil su ve suya dayanıklı olan ortamlar için uygun. Ancak en soldaki büyük anten tam bir kral. Hem mesafe olarak hem de malzeme kalitesi olarak işini tam layığı ile yapıyor. Birde bazı arkadaşlar bilir 5dbi lık bir antenimiz var yaklaşık yarım kilo o biraz profesyonel olduğu için burada incelemedim. Haftaya o da satışta olacak bilginiz olsun.

ikinci aşamada testlerimizi Şanlıurfa 1. Organize Sanayi Bölgesinde yaptık. Burada yüksek gerilim hatları, fabrikaların oluşturduğu parazitler ve fabrika binaların LoRa iletimine etkilerini incelediğimde şu sonuçlara vardım.

Burada şu yukarıda göstermiş olduğumuz sarı kaplamalı antenlerin birisini vericiye diğerini alıcıya taktığımda maksimum 37 metreye ulaşabildim. Aynı şekilde hem alıcıya hemde vericiye 4dbi anteni takınca yaklaşık 700 metre mesafeye ulaştım.

buradaki kıyaslamayı da Yüzüklerin Efendisi karakteri ile yaparsak.

Evet arkadaşlar benim anlatacaklarım bu kadar. Karşılaştırmaların detayını ve daha fazlasını Youtube videosunda bulabilirsiniz. Testlerini yaptığım antenlerin satış linklerini aşağıya bırakıyorum.

50dB 868-900 MHz 4G LTE Anten

50dB 868-900 MHz 4G LTE Anten

Bu anten, geniş bant aralığında (698-960MHz ve 1710-2700MHz) veri iletimi sağlar ve 4G LTE, LoRa ve diğer iletişim protokolleri için uygundur.

Ürün Sayfasına Git

40dBi SMA 433 MHz Anten

40dBi SMA 433 MHz Anten

Bu anten, 433 MHz frekansında yüksek kazançlı bir veri iletimi sağlar ve LoRa cihazlar için idealdir.

Ürün Sayfasına Git

LoRa dan Gelen Veriyi İnternete Gönderme

LoRa dan Gelen Veriyi İnternete Gönderme

LoRa dan Gelen Veriyi İnternete Gönderme yazımızda çok sıkı bir içerik sizlere hazırlıyor olmuş olacağız. Bu yazımızda HDC1080 Sıcaklık ve nem sensör kullanımını, Lora ile veri transferi, Ethernet shield kullanımı ve ThingSpeak alt yapısını kullanıp verileri internete göndermiş olacağız. Bence fixaj youtube kanalımızda ki en kapsamlı video bu olacak. Keyifle izleyip, işinize yarar bilgiler edinmeniz dileği ile..

1.1 Projenin Kapsamı

Bu projede HDC1080 sıcaklık ve nem sensörümüz ile sıcaklık ve nemi ölçüp, LoRa ile uzaktaki merkez alıcıya göndereceğiz oradan de verileri Thingspeak alt yapısını kullanarak internet ortamında saklayacağız. Ardında gelen anlık verilerin cep telefonu ve internet üzerinden raporlamasını birlikte yapacağız. Basit bir gateaway yapısı kurmuş olacağız.

1.2 Gerekli Malzemeler

HDC1080 Sıcaklık ve Nem Sensörü

HDC1080 Sıcaklık ve Nem Sensörü

Yüksek nemde mükemmel doğruluk sağlayan bu sıcaklık ve nem sensörü, hassas ölçümler için idealdir.

Ürün Sayfasına Git
E22-900T22D 7km Menzilli 900MHz LoRa Modülü

E22-900T22D 7km Menzilli 900MHz LoRa Modülü

SX1262 çipli, 900 MHz bandında çalışan ve 7km’ye kadar menzil sunan bir LoRa modülüdür.

Ürün Sayfasına Git
LoRa Başlangıç Seti

LoRa Başlangıç Seti (SX1278 E32-433T20D)

LoRa teknolojisi ile tanışmak isteyenler için 433 MHz bandında çalışan, SX1278 çipli modül ve anten içeren bir başlangıç setidir.

Ürün Sayfasına Git

Arduino Mega

Arduino Nano

Ethernet Shield

1.3 Devre Bağlantı Şeması

bu yazımızda bildiğiniz üzeri önceki yazımızın devamı olduğu için devre şemalarında değişiklik yapmadım sadece ethernet shield i Arduino Meganın üstüne taktım.

Burası Bizim Merkez noktamız internete buradan çıkış vereceğiz
Sıcaklık ve nemi ölçtüğümüz Uç noktamız. burada bir değişiklik yapmadım.

Burada dikkat etmemiz gereken 2 konu var. Birinci ethernet shield, diğeri Sinter malzeme. Bu konuyu video da detaylı anlatacağım.

1.4 Kodlar

Kullandığımız koda geçmeden biraz thingspeak kütüphanesini tanıyalım. Thingspeak matlab altyapısı üzerine kurulmuş. iot, internet of Things ürünlerinizi bağlayabileceğiniz Amazon AWS altyapısını kullanan, kullanımı kolay bir server hizmetidir.

Thinspeak için kullanacağımız kütüphaneye de şuradan ulaşabilirsiniz.

Kod olarak bir önceki videomuzda yayınladığımız koda ilave olarak thingspeak kütüphanesini ekliyoruz.

Verici Kodu

#include <Wire.h>
#include "ClosedCube_HDC1080.h"

ClosedCube_HDC1080 hdc1080;

#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] = "Fixaj.com";
  byte temp[4];
  byte nem[4];
} data;


void setup()
{
  Serial.begin(9600);
  Serial.println("Fixaj.com Arduino Test");

  // Default settings:
  //  - Heater off
  //  - 14 bit Temperature and Humidity Measurement Resolutions
  hdc1080.begin(0x40);

  Serial.print("Manufacturer ID=0x");
  Serial.println(hdc1080.readManufacturerId(), HEX); // 0x5449 ID of Texas Instruments
  Serial.print("Device ID=0x");
  Serial.println(hdc1080.readDeviceId(), HEX); // 0x1050 ID of the device
  e32ttl.begin();
  delay(500);
}

void loop()
{
  delay(3000);

  *(float*)(data.temp) = hdc1080.readTemperature();
  *(float*)(data.nem) = hdc1080.readHumidity();

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

  Serial.println(*(float*)(data.temp));
  Serial.println(*(float*)(data.nem));
  
}

Merkez Noktamız İnternete veri göndereceğim yer. Basit Gateaway

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

SoftwareSerial mySerial(A8, A9);

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

#include <Ethernet.h>
#include "secrets.h"
#include <SPI.h>
#include "ThingSpeak.h" // always include thingspeak header file after other header files and custom macros

byte mac[] = SECRET_MAC;

// Set the static IP address to use if the DHCP fails to assign
IPAddress ip(192, 168, 44, 177);
IPAddress myDns(192, 168, 0, 1);

EthernetClient client;

unsigned long myChannelNumber = SECRET_CH_ID;
const char * myWriteAPIKey = SECRET_WRITE_APIKEY;

float sicaklik = 0;
float nem = 0;

LoRa_E32 e32ttl(&mySerial);
struct Signal {
  char type[15] = "Fixaj.com";
  byte temp[4];
  byte nem[4];
} data;

void setup() {

  Serial.begin(9600);
  delay(500);

  e32ttl.begin();
  delay(500);

  pinMode(4, OUTPUT);
  digitalWrite(4, HIGH);
  
  Ethernet.init(10);
  Serial.println("Initialize Ethernet with DHCP:");
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // Check for Ethernet hardware present
    if (Ethernet.hardwareStatus() == EthernetNoHardware) {
      Serial.println("Ethernet shield was not found.  Sorry, can't run without hardware. :(");
      while (true) {
        delay(1); // do nothing, no point running without Ethernet hardware
      }
    }
    if (Ethernet.linkStatus() == LinkOFF) {
      Serial.println("Ethernet cable is not connected.");
    }
    // try to congifure using IP address instead of DHCP:
    Ethernet.begin(mac, ip, myDns);
  } else {
    Serial.print("  DHCP assigned IP ");
    Serial.println(Ethernet.localIP());
  }
  // give the Ethernet shield a second to initialize:
  delay(1000);

  ThingSpeak.begin(client);  // Initialize ThingSpeak

}

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("Ortam Sıcaklığı: ");
    Serial.println(*(float*)(data.temp));
    Serial.print("Ortam Nemi: ");
    Serial.println(*(float*)(data.nem));
    rsc.close();

    sicaklik = *(float*)(data.temp);
    nem = *(float*)(data.nem);

    //UÇMAYA BAŞLIYORUZ..
    ThingSpeak.setField(1, sicaklik);
    ThingSpeak.setField(2, nem);

    // write to the ThingSpeak channel
    int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
    if (x == 200) {
      Serial.println("Channel update successful.");
    }
    else {
      Serial.println("Problem updating channel. HTTP error code " + String(x));
    }

    delay(20000);
  }
}

1.5 Sonuç

ThinkSpeak verilerin grafik hali

HDC1080 ile Sıcaklık ve Nem Ölçüp Lora ile gönderme

HDC1080 ile Sıcaklık ve Nem Ölçüp Lora ile gönderme (1/2)

Merhaba arkadaşlar yine harika bir seriye başlıyoruz. Öncelikle HDC1080 ile sıcaklık ve nem değerlerini ölçüp Lora ile uzak mesafedeki merkezimize verileri yollayacağız. Diğer serimizde ise yepyeni bir konuya gireceğiz, “veriyi internete gönderme“. Gelen veriyi “ThingsSpeak” alt yapısını kullanarak internete göndereceğiz.

Fabrikaların, Seraların aklınıza gelecek bütün işletmelerde raporlama oldukça önemlidir. Özellikle işletmenin durumunu anlık ve elektronik olarak ölçümlemek daha önemlidir. Gelen verinin doğruluğu nispetinde raporlarınız doğru olur ve raporlar neticesinde alınacak kararlarda o nebze isabetli olur. Dilerseniz HDC1080, Arduino Mega ve Lora müdllerimiz ile dolu yazımıza başlayalım.

1.1 Gerekli Malzemeler:

LoRa Başlangıç Seti

LoRa Başlangıç Seti (SX1278 E32-433T20D)

LoRa teknolojisi ile tanışmak isteyenler için 433 MHz bandında çalışan, SX1278 çipli modül ve anten içeren bir başlangıç setidir.

Ürün Sayfasına Git
40dBi SMA 433 MHz Anten

40dBi SMA 433 MHz Anten

Bu anten, 433 MHz frekansında yüksek kazançlı bir veri iletimi sağlar ve LoRa cihazlar için idealdir.

Ürün Sayfasına Git
HDC1080 Sıcaklık ve Nem Sensörü

HDC1080 Sıcaklık ve Nem Sensörü

Yüksek nemde mükemmel doğruluk sağlayan bu sıcaklık ve nem sensörü, hassas ölçümler için idealdir.

Ürün Sayfasına Git
E32-433T20D LoRa Modülü

E32-433T20D LoRa Modülü

433 MHz frekansında çalışan, SX1278 çipli uzun mesafe veri iletişimi için ideal bir LoRa modülüdür.

Ürün Sayfasına Git

1.2 Devre Şeması

Devre Şeması olarak hazır pcb kullandığım için özel bir bağlantı şeması yapmadım. Sadece HDC1080 için PCB üzerindeki I2C klemenslerine bağlantıları yaptım. Devra şeması şu şekilde oldu:

PCB nin üst kısmındaki klemenslerden SDA ve SCL pinlerini HDC1080 modelinin aynı pinlerine taktım. beslemeyi bu sefer 3.3v üzerinden yaptım.

Dikkat ederseniz HDC1080 sıcaklık ve nem sensörünü Sinter malzemenin içine taktım. 3/8 inch tam uyuyor. Bu sayede tozlu ortamlarda da rahatlıkla nem sensörü çalışacaktır.

Merkez noktasında ise bu sefer farklı bir şey denedim. Bu video serisi başta da söylediğim gibi 2 seri şeklinde olacaktı. Şimdi sıcaklık ve nemi ölçtüğümüz yerde Arduino Nano yeterli oluyordu. Ancak internete veri gönderirken yüksek SRAM değerlerine ihtiyaç duyduğumuz için merkez noktasında Arduino Mega kullandım. Devre Şeması şu şekilde oldu:

Bağlantılara daha yakından bakarsak,

Dikkat ederseniz Lora modülü ile arduino Mega arasındaki RX/TX bağlantısını Arduino mega üzerindeki A8 ve A9 pinleri ile yaptık. 5v ve GND ise standart bağlantı şekli. PCB üzerine Arduino Nano yerine Arduino MEGA yerleştirmiş olduk.

Peki neden bu şekilde bir bağlantı seçtik? Çünkü diğer videoda Mega nın ön tarafına ETHERNET SHIELD takacağız. ethernet shield de arduino üzerindeki 10,11,12 ve 13 numaralı pinleri kullanacağı için serial haberleşme için A8 ve A9 u kullandık.

1.3 Kullandığımız Kod

Merkez Noktası:

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

SoftwareSerial mySerial(A8, A9);

/*
   Pinler     Arduino MEGA Lora E32 433T20d
                  A8                3
                  A9                4
*/

LoRa_E32 e32ttl(&mySerial);
struct Signal {
  char type[15] = "Fixaj.com";
  byte temp[4];
  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("Ortam Sıcaklığı: ");
    Serial.println(*(float*)(data.temp));
    Serial.print("Ortam Nemi: ");
    Serial.println(*(float*)(data.nem));
    rsc.close();
  }
}

Sıcaklık ve Nem sensörü olduğu noktamız

#include <Wire.h>
#include "ClosedCube_HDC1080.h"

ClosedCube_HDC1080 hdc1080;

#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] = "Fixaj.com";
  byte temp[4];
  byte nem[4];
} data;


void setup()
{
  Serial.begin(9600);
  Serial.println("Fixaj.com Arduino Test");

  // Default settings:
  //  - Heater off
  //  - 14 bit Temperature and Humidity Measurement Resolutions
  hdc1080.begin(0x40);

  Serial.print("Manufacturer ID=0x");
  Serial.println(hdc1080.readManufacturerId(), HEX); // 0x5449 ID of Texas Instruments
  Serial.print("Device ID=0x");
  Serial.println(hdc1080.readDeviceId(), HEX); // 0x1050 ID of the device
  e32ttl.begin();
  delay(500);
}

void loop()
{
  delay(3000);

  *(float*)(data.temp) = hdc1080.readTemperature();
  *(float*)(data.nem) = hdc1080.readHumidity();

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

  Serial.println(*(float*)(data.temp));
  Serial.println(*(float*)(data.nem));
  
}

Sonuç

Evet arkadaşlar yazımızın sonuna geldik, çok yakında 2. videomuzu çekip youtube da yayınlayacağım. 2. video daha eğlenceli olacak. Çünkü verileri internete nasıl atacağımızı farklı platformlar üzerinden raporlama yapmayı öğreneceğiz. Tabiki raporlamanın değeri içindeki verilerin doğruluğuna bağlıdır. HDC1080 ile sıcaklık ve nem değerleriniz mümkün olan en doğru şekilde ölçümlenecektir. Ben eski çalıştığım yerlerde 300 – 400 avro luk sensörler yerine HDC1080 kullandım yaklaşık 2 yıldır da sensörlerden yana bir şikayet duymadım. Müşterilerim 2 sensörün arasındaki fiyat farkının bu kadar olmasına bir türlü anlayamıyorlardı. Tamamen dışa bağlı kalırsak, işte gelin kurun gidin kafasında olursa maalesef yabancılar hiç affetmiyor. O yüzden meraklı olup işin ucundan tutup biraz kurcalamakta fayda var 🙂

Aklınıza takılan sorular için Soru&Cevap sayfamızı ziyaret etmeyi unutmayın.

ekler

Photo by ThisIsEngineering from Pexels