Bu makale Lora-Nano Geliştirme kitinin birinci versiyonuna (V1) göre hazırlanmıştır.
Lora Nedir?
LoRa (Long Range), uzun menzilli kablosuz iletişim teknolojisidir. Uzun menzilli iletişim için düşük frekans bandını (genellikle 868 MHz veya 915 MHz) kullanır ve düşük veri hızlarına odaklanır. Özellikle IoT uygulamalarında kullanılır. Avantajları arasında düşük güç tüketimi, uzun pil ömrü, geniş kapsama alanı, düşük maliyet ve esneklik bulunur. Tarım, endüstriyel otomasyon, akıllı şehirler ve akıllı ev cihazları gibi birçok alanda kullanılır.
Alev Algılama Sensörü Nedir?
Alev algılama sensörünün üzerinde 4 adet pin bulunmakta. Bu pinler A0 yani analog pin, D0 yani dijital pin, besleme ve toprak pinleridir. Ateşimiz az miktarda kızılötesi ışık yayar ve bu ışık modüldeki fotodiyot tarafından alınır. Algılama mesafesi kart üzerindeki potansiyometreden değiştirilebilir. Genelde yangın söndüren robotlarda ateş algılama sensörü olarak kullanılmakla beraber bir çok projede rahatlıkla kullanabileceğiniz bir karttır.
Alev Algılama Sensörü
Kullanacağımız malzemelerimiz:
-2 adet Lora E22900T22D
-2 adet Arduino Nano ve USB kablo
-2 adet (Arkış) Lora Nano Geliştirme Kiti
-2 adet 868 Mhz Anten
-1 adet 2×16 LCD ekran(I2C modüllü)
-1 adet buzzer
-1 adet Alev algılayıcı sensör
-10 adet jumper
-1 adet mini breadboard
Lora-Nano Geliştirme Kiti ile Devre Bağlantısını Oluşturma
Alıcı
Lora ve Nanonun bağlantısı için, geliştirme kitindeki soketleri kullanıyoruz. LCD ekranın ve buzzerın bağlantısı için aşağıda bulunan görselde ki nottan yararlanabilirsiniz.
Verici
Lora ve Nanonun bağlantısı için, geliştirme kitindeki soketleri kullanıyoruz. Alev algılama sensörünün bağlantısı için aşağıdaki nottan yararlanabilirsiniz.
Konfigürasyon
Geliştirme kitimiz ile konfigürasyon da yapabilirsiniz. Kart, kullanım ve konfigürasyon imkanını birlikte sağlamaktadır.
Verici modülümü bilgisayarıma takıp konfigürasyon kodumu yüklüyorum. Ardından Ebyte firması tarafından geliştirilen RFSettings uygulamasını açıyorum. Verici için adres satırına 1 Kanal satırına 18 yazıyorum. Tran modu fixed seçip , ayarları kaydedip çıkıyorum. Aynı işlemleri alıcı modül içinde yapıyorum. Alıcı için adres satırına 2 kanal satırına 18 yazıyoruz. Tran modu fixed seçip kaydedip çıkıyoruz. Frekans aralığını değiştirme gereği duymuyorsak her bir lora modülü için konfigürasyonu bir kez yapmak yeterlidir.
Konfigürasyon Kodu
#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());
}
}
RF Settings Nasıl İndirilir?
Aşağıdaki linke tıklayarak Lora E22-900T22D için RF Setting programını indirebilirsiniz.
RF Setting İndirme Linki: https://arkis.com.tr/dosyalar/lora/RF_SettingE22-E90SLV2.0.zip
Kodlar
Verici
Verici kısmın kodunu inceleyelim. İlk olarak kütüphaneleri dahil ediyoruz.“mySerial” isimli bir SoftwareSerial nesnesi oluşturuyoruz. Bu, LoRa_E22 modülü ile haberleşmek için kullanılacaktır. 10 ve 11 parametreleri, RX ve TX pinlerinin bağlandığı pin numaralarını belirtir.E22 isimli bir LoRa_E22 nesnesi oluşturuyoruz ve mySerial nesnesini kullanarak LoRa_E22 modülüne bağlanmasını sağlıyoruz.M0 sabitini Nanonun D7 pinine M1 sabitini nanonun D6 pinine tanımlıyoruz. Bu pinler, E22 modülünün çalışma modunu seçmek için kullanılacaktır.
Alev Algılama sensörümüz dijital ve analog değer okuyabilir. Uygulamamızda dijital pinden okunan değeri referans alacağız. Digitaldeger adında bir değişken tanımlayıp Nanonun D3 pinine bağlıyoruz. Analog pinden okunan değeri referans almak isteyenler için gerekli kodlar yorum olarak belirtildi. Deger adında 15 karakterlik bir dizi tanımlıyoruz.M0 ve M1 pinlerini çıkış için ayarladık ve çıkış gerilimlerini 0 Volt yaptık.Digitalread ile D3 nolu pinden okunan değeri, digitaldeger değişkenine atıyoruz.İf komutu ile alev tespit edilmesi halinde, alıcı tarafta bulunan LCD ekrana “Alev Algilandi” yazmasını sağlıyoruz.E22.sendFixedMessage a gelip, ilk satıra 0, ikinci satıra alıcının adresini, 3.satıra ise kanal adresini yazıyoruz.getResponseDescription ise Gönderim durumunu seri port üzerinden yazdırır.
////VERİCİ////
#include <LoRa_E22.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);
LoRa_E22 E22(&mySerial);
#define M0 7
#define M1 6
int digitalPin = 3; // dijital pin
//int analogPin = A0; // analog pin
int digital_deger; // dijital okunan değer
//int analog_deger; //analog okunan değer
struct veriler {
char deger[15]; //deger adında maksimum 15 karakterlik bir dizi tanımladık
} data;
void setup() {
pinMode(digitalPin, INPUT);
pinMode(M0, OUTPUT);
pinMode(M1, OUTPUT);
digitalWrite(M0, LOW);
digitalWrite(M1, LOW);
Serial.begin(9600);
E22.begin();
delay(500);
}
void loop() {
digital_deger = digitalRead(digitalPin);
if(digital_deger == HIGH) // Eğer Alev tespit edilirse
{
sprintf(data.deger,"Alev Algilandi");
ResponseStatus rs = E22.sendFixedMessage(0, 2, 18, &data, sizeof(veriler));
Serial.println(rs.getResponseDescription());
delay(2000);
}
else
{
}
//analog_deger = analogRead(analogPin);
}
Alıcı
Alıcı kısmın kodunu inceleyelimAlıcı taraftada kütüphanelerimizi dahil edip, verici kısımda yaptığımız gerekli tanımlamaların aynısını yapıyoruz. LCD ekran ile ilgili olan kodların açıklamalarına yanlarında yer verildi. Buzzer adında değişken tanımlayıp nanonun D2 pinine takıyoruz. Alıcı modülümüz Alev algilandi verisini alacak, ekranına yazdıracak ve buzzerı çalıştıracaktır.Kodları nanolarımıza yükleyip gözlemleyelim.
/////ALICI////
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); ///LCD ekranınız çalışmadı ise 0x27 yerine 0x3f değerini girin
#include "LoRa_E22.h"
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);
LoRa_E22 E22(&mySerial);
#define M0 7
#define M1 6
int buzzer=2;
struct veriler {
char deger[15]; //deger adında maximum 15 karakterlik dizi tanımladık
} data;
void setup() {
lcd.init(); //LCD'yi başlatır
lcd.backlight(); //LCD arka plan ışıklarını açar.
pinMode(buzzer,OUTPUT);
pinMode(M0, OUTPUT);
pinMode(M1, OUTPUT);
digitalWrite(M0, LOW);
digitalWrite(M1, LOW);
Serial.begin(9600);
E22.begin();
delay(500);
}
void loop() {
while (E22.available() > 1) {
ResponseStructContainer rsc = E22.receiveMessage(sizeof(veriler));
struct veriler data = *(veriler*) rsc.data;
if(lcd.print(data.deger)){ //LCD ekrana yazı için kullanılır.
digitalWrite(buzzer,HIGH); //Buzzer'a güç göndererek ses çıkarmasını sağladık.
}
delay(1000); //1 saniyelik bekleme ekler.
lcd.clear(); //LCD'de görüntülenen metni siler.
digitalWrite(buzzer,LOW); //Buzzer'ın gücünü kestik
Serial.println(data.deger); // Gelen değeri Arduino seri ekranda okumaya imkan sağlar.
rsc.close();
}
}