Cum sa realizăm localizarea obiectelor utilizând balize Bluetooth
Problema localizării unui obiect sau a unei persoane are soluții variate adaptate în funcție de domeniul de utilizare și de infrastructura tehnică pe care se bazează. Localizarea prin GPS este utilizată la ora actuală pe scară largă pentru localizare pe întreg cuprinsul globului. Această metodă este îmbunătățită prin implementarea unor mecanisme complementare precum aGPS ce îmbunătățesc precizia de localizare. Totuși, există cazuri în care localizarea prin GPS este dificilă dacă nu imposibilă, cel mai bun exemplu fiind localizarea în interiorul unei clădiri. În aceste cazuri se utilizează, cel mai adesea, metode de localizare bazate pe triangularizarea unui semnal radio. Semnalul radio poate fi bazat pe frecvențe și modulații speciale sau larg răspândite (precum semnalul WiFi). Ne propunem să explorăm această metodă utilizând cea mai simplă și ieftină soluție: localizarea bazată pe balize radio Bluetooth. În cadrul procesului de localizare vor fi implicate două tipuri de sisteme: balize radio Bluetooth și receptor radio bluetooth. Baliza radio Bluetooth are rolul de a emite un semnal radio la un interval de timp fix. Acest semnal radio va reprezenta elementul pe care se va realiza localizarea. Receptorul radio are rolul de a recepționa semnalul radio și, pe baza puterii acestuia, de a determina distanța aproximativă față de emițător (baliza radio). Având în vedere distanța maximă pe care poate să o acopere semnalul radio Bluetooth o astfel de metodă poate fi folosită pentru localizarea în incinte sau zone cu raza de câteva zeci de metri sau, în spații deschise, pâna la o sută de metri. Există două scenarii posibile de localizare: mai multe balize ce permit localizarea receptorului radio pe baza distanței față de fiecare baliză în parte sau mai multe sisteme de recepție ce permit localizarea unei balize pe baza distanței față de fiecare de fiecare sistem de recepție radio (în acest caz trebuie să existe o formă de comunicație între sistemele receptor pentru a realiza triangularizarea semnalului radio).
Algoritmul de triangularizare a poziției în funcție de distanțele dintre sisteme este în afara ariei de acoperire a acestui material. Soluția propusă acoperă doar partea de măsurare a puterii semnalului radio de către receptorul radio Bluetooth. Pentru mai multe informații puteți să consultați articolul: „DIY localization using radio frequency beacons”.
Pentru implementarea unei balize radio bluetooth se poate apela la orice sistem ce include un modul radio Bluetooth (de exemplu Bettle BLE sau Feather BLE) sau, o variantă mult mai ieftină și mai simplă, se poate utiliza un dispozitiv de urmărire de tip iTag.
Acest tip de dispozitiv este disponibil comercial cu prețuri pornind de la 2$ și este gândit pentru a fi folosit împreună cu telefonul mobil pentru a localiza diverse lucruri în imediata apropiere (chei sau chiar animale de companie). Telefonul mobil are rolul de receptor radio Bluetooth și va măsura distanța până la dispozitivul iTag (localizarea este bazată doar pe distanță și pe mișcarea telefonului mobil – ne depărtăm de obiectul căutat crește distanța, ne apropiem scade distanța). Dispozitivul iTag nu este altceva decât un dispozitiv Bluetooth programabil ce este produs în serie – are un preț foarte mic. Pentru a vedea ce conține un astfel de dispozitiv se poate parcurge articolul: „Cheap Ebay BLE Tag Teardown (iTag via iTracing app)”.
Pentru implementarea receptorului radio (în cazul în care dorim o soluție de localizare bazată pe un sistem personalizat sau nu dorim să fim dependenți de aplicația mobilă oferită de producătorii dispozitivului iTag) se poate utiliza orice placă de dezvoltare cu modul radio bluetooth încorporat și, foarte important, care permite măsurarea puterii semnalului recepționat. Una dintre variante este placa Raspberry Pi 3, se poate vedea și articolul „Beacon tracking with Node.js and Raspberry Pi”. O altă variantă, mai ieftină și care permite realizarea unor sisteme de recepție compacte, este utilizarea plăcilor de dezvoltare bazate pe microprocesorul ESP32 ce integrează un modul radio Bluetooth.
Grație bibliotecii ESP32 BLE Arduino se poate implementa orice tip de comunicație bluetooth cu ajutorul circuitului ESP32 și a mediului de dezvoltare Arduino IDE (toate celelalte bibloteci bluetooth sunt proprietar sau implică medii de dezvoltare scumpe).
Implementarea propusă pentru receptorul radio a fost testată pe o placă de dezvoltare Sparkfun ESP32 Thing utillizând Arduino IDE 1.8.5, Arduino core for ESP32 WiFi chip 0.0.1 și biblioteca ESP32 BLE 0.4.7.
#include <BLEDevice.h>
static BLEAddress *pServerAddress;
BLEScan* pBLEScan;
BLEClient* pClient;
bool deviceFound = false;
Sistemul va scana timp de 30 de secunde după dispozitive Bluetooth ce se găsesc în vecinătate. Pentru fiecare dispozitiv găsit se va afișa, în consola serială, textul emis ca identificator și puterea semnalului recepționat (RSSI).
int scanTime = 30;
class MyAdvertisedDeviceCallbacks: public
BLEAdvertisedDeviceCallbacks {
void onResult(BLEAdvertisedDevice advertisedDevice)
{
Serial.print(„BLE Advertised Device found: „);
Serial.println(advertisedDevice.toString().c_str());
pServerAddress = new
BLEAddress(advertisedDevice.getAddress());
Serial.print(„RSSI: „);
Serial.println(advertisedDevice.getRSSI());
}
};
void setup() {
Serial.begin(115200);
Serial.println(„Scanning…”);
BLEDevice::init(„”);
pClient = BLEDevice::createClient();
pBLEScan = BLEDevice::getScan();
pBLEScan->setAdvertisedDeviceCallbacks(new
MyAdvertisedDeviceCallbacks());
pBLEScan->setActiveScan(true);
}
Scanarea se va relua la fiecare 60 de secunde.
void loop() {
Serial.println();
Serial.println(„BLE Scan restarted…..”);
deviceFound = false;
BLEScanResults scanResults = pBLEScan->start(30);
delay(6000);
}
Programul dat ca exemplu poate fi un bun punct de plecare pentru triangularizarea poziției pe baza puterii semnalului emis de baliza radio Bluetooth.