Mạch định vị GPS sử dụng Arduino và LoRa Shield

0
379
Arduino LoRa GPS Tracker Hoạt động

Mạch định vị GPS sử dụng Arduino và LoRa Shield : Biết được nơi ở của một đối tượng / người cụ thể luôn là điều an ủi. Ngày nay, GPS đang được sử dụng rộng rãi trong các ứng dụng quản lý tài sản như Theo dõi phương tiện , Theo dõi đội xe , Giám sát tài sản, Theo dõi người, Theo dõi vật nuôi, v.v. Đối với bất kỳ thiết bị theo dõi nào, việc cân nhắc thiết kế chính sẽ là về tuổi thọ pin và phạm vi giám sát của nó. Xem xét cả hai, LoRa dường như là sự lựa chọn hoàn hảo vì nó có mức tiêu thụ điện năng rất thấp và có thể hoạt động trên quãng đường dài. Vì vậy, trong hướng dẫn này, chúng tôi sẽ xây dựng hệ thống theo dõi GPS bằng LoRa , hệ thống sẽ bao gồm một Bộ phát sẽ đọc thông tin vị trí từ mô-đun GPS NEO-6M và truyền nó không dây qua Lora. Bộ phận thu sẽ nhận thông tin và hiển thị trên màn hình LCD 16×2 . Nếu bạn chưa quen với LoRa, hãy tìm hiểu về Công nghệ LoRa và LoRaWAN cũng như cách nó có thể được giao tiếp với Arduino trước khi tiếp tục. 

Để giữ mọi thứ đơn giản và tiết kiệm chi phí cho dự án này, chúng tôi sẽ không sử dụng cổng LoRa. Thay vào đó sẽ thực hiện giao tiếp ngang hàng giữa bộ phát và bộ thu . Tuy nhiên, nếu bạn muốn có phạm vi toàn cầu, bạn có thể thay thế bộ thu bằng Cổng LoRa. Ngoài ra, vì tôi đến từ Ấn Độ, chúng tôi sẽ sử dụng mô-đun LoRa 433MHz , là băng tần ISM hợp pháp ở đây, do đó bạn có thể phải chọn một mô-đun dựa trên quốc gia của mình. Điều đó đang được nói, chúng ta hãy bắt đầu…

Linh kiện cần thiết Mạch Định vị GPS sử dụng Arduino và LoRa Shield 

  • Arduino Lora Shield – 2Nos (thiết kế PCB có sẵn để tải xuống)
  • Arduino Uno – 2Nos
  • Mô-đun LoRa SX1278 433MHz – 2
  • 433MHz Lora Antenna
  • Mô-đun GPS NEO-6M
  • Mô-đun màn hình LCD
  • Kết nối dây

Shield Arduino LoRa

Để giúp việc xây dựng mọi thứ với LoRa dễ dàng hơn, chúng tôi đã thiết kế một Lá chắn Arduino LoRa cho Dự án này. Shield này bao gồm SX1278 433MHz với bộ điều chỉnh 3.3V được thiết kế sử dụng bộ điều chỉnh Biến trở LM317. Shield sẽ trực tiếp nằm trên Arduino cung cấp khả năng LoRa cho nó. Lá chắn LoRa này sẽ hữu ích khi bạn phải triển khai các nút cảm biến LoRa hoặc để tạo mạng lưới LoRa. Sơ đồ mạch đầy đủ cho LoRa Arduino Shield được đưa ra bên dưới

Sơ đồ Mạch Định vị GPS sử dụng Arduino và LoRa Shield 

 Mạch định vị GPS sử dụng Arduino và LoRa Shield

 

Shield bao gồm một giắc cắm 12V khi được cấp nguồn sẽ được sử dụng để điều chỉnh 3.3V cho mô-đun LoRa sử dụng bộ điều chỉnh LM317 . Nó cũng sẽ được sử dụng để cấp nguồn cho Arduino UNO thông qua chân Vin và nguồn 5V được điều chỉnh từ Arduino được sử dụng để cấp nguồn cho màn hình LCD trên Shield. Điện áp đầu ra của LM317 được cố định là 3,3V bằng cách sử dụng điện trở R1 và R2 tương ứng, giá trị của các điện trở này có thể được tính bằng cách sử dụng Máy tính LM317 .

 

 Mạch định vị GPS sử dụng Arduino và LoRa Shield

Vì mô-đun LoRa tiêu thụ điện năng rất thấp, nó cũng có thể được cấp nguồn trực tiếp từ chân 3.3V của Arduino, nhưng chúng tôi đã sử dụng thiết kế bộ điều chỉnh bên ngoài vì LM317 đáng tin cậy hơn bộ điều chỉnh điện áp trên bo mạch. Shield cũng có một chiết áp có thể được sử dụng để điều chỉnh độ sáng của màn hình LCD. Kết nối của mô-đun LoRa với Arduino tương tự như những gì chúng tôi đã làm trong hướng dẫn trước đây về Giao diện Arduino với Lora .

Chế tạo PCB cho LoRa Shield

Bây giờ mạch của chúng ta đã sẵn sàng, chúng ta có thể tiến hành thiết kế PCB của mình. Tôi mở bằng phần mềm thiết kế PCB và bắt đầu hình thành các bản nhạc của mình. Khi thiết kế PCB hoàn thành, bảng của tôi trông giống như hình bên dưới

 Mạch định vị GPS sử dụng Arduino và LoRa Shield

Bạn cũng có thể tải xuống các tệp thiết kế ở định dạng GERBER và chế tạo nó để có được bảng của bạn. Liên kết tệp Gerber được cung cấp bên dưới

 

Tải xuống tệp Gerber cho Arduino LoRa Shield 

Bây giờ, Thiết kế của chúng tôi đã sẵn sàng, đã đến lúc chế tạo chúng. Để thực hiện PCB khá dễ dàng, chỉ cần làm theo các bước dưới đây

Bước 1:   Nhận được vào  www.pcbgogo.com , đăng ký nếu đây là lần đầu tiên của bạn. Sau đó, trong tab PCB Prototype, nhập kích thước của PCB của bạn, số lớp và số lượng PCB bạn yêu cầu. Giả sử PCB là 80cm × 80cm, bạn có thể đặt kích thước như hình dưới đây.

 Mạch định vị GPS sử dụng Arduino và LoRa Shield

Bước 2:  Tiến hành bằng cách nhấp vào nút  Trích dẫn ngay  . Bạn sẽ được đưa đến một trang nơi đặt một vài thông số bổ sung nếu cần thiết như vật liệu được sử dụng khoảng cách theo dõi, v.v. Nhưng hầu hết các giá trị mặc định sẽ hoạt động tốt. Điều duy nhất mà chúng ta phải xem xét ở đây là giá cả và thời gian. Như bạn có thể thấy Thời gian xây dựng chỉ là 2-3 ngày và nó chỉ tốn $ 5 cho PSB của chúng tôi. Sau đó, bạn có thể chọn một phương thức vận chuyển ưa thích dựa trên yêu cầu của bạn.

 Mạch định vị GPS sử dụng Arduino và LoRa Shield

Bước 3:  Bước cuối cùng bạn tải file Gerber lên   và tiến hành thanh toán. Để đảm bảo quá trình diễn ra suôn sẻ, PCBGOGO  xác minh xem tệp Gerber của bạn có hợp lệ hay không trước khi tiến hành thanh toán. Bằng cách này, bạn có thể chắc chắn rằng PCB của bạn được chế tạo thân thiện và sẽ đến tay bạn theo cam kết.

Lắp ráp PCB Mạch Định vị GPS sử dụng Arduino và LoRa Shield 

Sau khi bảng được đặt hàng, nó đã đến tay tôi sau một vài ngày mặc dù chuyển phát nhanh trong một hộp được đóng gói tốt được dán nhãn gọn gàng và như mọi khi chất lượng của PCB thật tuyệt vời.

 Mạch định vị GPS sử dụng Arduino và LoRa Shield

Tôi bật que hàn của mình và bắt đầu lắp ráp Bo mạch. Vì Dấu chân, miếng đệm, khung và tấm lụa hoàn toàn có hình dạng và kích thước phù hợp nên tôi không gặp vấn đề gì khi lắp ráp bảng. Sau khi quá trình hàn hoàn tất, bảng trông như thế này bên dưới, như bạn có thể thấy nó vừa khít với Bảng Arduino Uno của tôi.

 Mạch định vị GPS sử dụng Arduino và LoRa Shield

Vì dự án của chúng tôi có bộ phát Arduino LoRa và bộ thu Arduino LoRa, chúng tôi sẽ cần hai Shield một cho bộ thu và một cho bộ phát. Vì vậy, tôi đã tiến hành hàn một PCB khác, cả PCB với mô-đun LoRa và màn hình LCD được hiển thị bên dưới.

Như bạn có thể thấy chỉ có bộ thu LoRa shied (bên trái) có màn hình LCD kết nối với nó, phía bộ phát chỉ bao gồm mô-đun LoRa. Chúng tôi sẽ kết nối thêm mô-đun GPS với phía bộ phát như được thảo luận bên dưới.

Kết nối mô-đun GPS với bộ phát LoRa

Mô-đun GPS được sử dụng ở đây là mô-đun GPS NEO-6M, mô-đun có thể hoạt động với công suất rất thấp với hệ số hình thức nhỏ nên phù hợp cho các ứng dụng theo dõi. Tuy nhiên, có nhiều mô-đun GPS khác có sẵn mà chúng tôi đã sử dụng trước đây trong các loại ứng dụng dò tìm vị trí và theo dõi phương tiện khác nhau .

Mô-đun hoạt động ở nguồn 5V và giao tiếp bằng cách sử dụng giao tiếp Nối tiếp với tốc độ 9600 baud. Do đó, chúng tôi cấp nguồn cho mô-đun vào chân + 5V của Arduino và kết nối chân Rx và Tx với chân kỹ thuật số D4 và D3 tương ứng như hình dưới đây

 Mạch định vị GPS sử dụng Arduino và LoRa Shield

Các chân D4 và D3 sẽ được cấu hình như các chân nối tiếp phần mềm. Sau khi được cấp nguồn, mô-đun GPS NEO-6M sẽ tìm kiếm kết nối vệ tinh và sẽ tự động xuất tất cả thông tin theo thứ tự. Dữ liệu đầu ra này sẽ ở định dạng câu NMEA , viết tắt của Hiệp hội Điện tử Hàng hải Quốc gia và là định dạng tiêu chuẩn cho tất cả các thiết bị GPS. Để tìm hiểu thêm về cách sử dụng GPS với Arduino , hãy nhấp vào liên kết. Dữ liệu này sẽ lớn và hầu hết thời gian chúng ta phải phân loại nó theo cách thủ công để có được kết quả mong muốn. Thật may mắn cho chúng tôi là có một thư viện tên là TinyGPS ++ thực hiện tất cả các công việc nặng nhọc cho chúng tôi. Bạn cũng phải thêm thư viện LoRa nếu bạn chưa thực hiện. Vì vậy, chúng ta hãy tải xuống cả thư viện từ liên kết bên dưới

Tải xuống Thư viện Arduino TinyGPS ++ : https://github.com/mikalhart/TinyGPSPlus/archive/master.zip

Tải xuống Thư viện Arduino LoRa : https://github.com/sandeepmistry/arduino-LoRa

Liên kết sẽ tải xuống tệp ZIP sau đó có thể được thêm vào Arduino IDE bằng cách làm theo lệnh Sketch -> Include Library -> Add.ZIP . Khi bạn đã sẵn sàng với phần cứng và thư viện, chúng tôi có thể tiến hành Lập trình Arduino của mình.

Lập trình Arduino LoRa làm bộ phát tín hiệu GPS

Như chúng ta đã biết LoRa là một thiết bị thu phát, có nghĩa là nó có thể vừa gửi và nhận thông tin. Tuy nhiên, trong dự án theo dõi GPS này, chúng tôi sẽ sử dụng một mô-đun làm bộ phát để đọc thông tin phối hợp từ GPS và gửi nó, trong khi mô-đun còn lại làm bộ thu sẽ nhận các giá trị tọa độ GPS và in nó trên màn hình LCD. Các chương trình cho cả Transmitter và module Receiver có thể được tìm thấy ở dưới cùng của trang này . Đảm bảo rằng bạn đã cài đặt thư viện cho mô-đun GPS và mô-đun LoRa trước khi tiếp tục với mã. Trong phần này chúng ta sẽ xem xét mã bộ phát.

Giống như mọi khi, chúng tôi bắt đầu chương trình bằng cách thêm các thư viện và chân cần thiết. Ở đây, thư viện SPI và LoRa được sử dụng cho giao tiếp LoRa và thư viện TinyGPS ++ và SoftwareSerial được sử dụng cho giao tiếp GPS. Mô-đun GPS trong phần cứng của tôi được kết nối với chân 3 và 4 và do đó chúng tôi cũng xác định điều đó như sau

#include <SPI.h>
#include <LoRa.h>
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
// Choose two Arduino pins to use for software serial
int RXPin = 3;
int TXPin = 4;  

Bên trong chức năng cài đặt, chúng tôi khởi động màn hình nối tiếp và cũng khởi tạo chuỗi phần mềm dưới dạng “gpsSerial ” để giao tiếp với mô-đun GPS NEO-6M của chúng tôi. Cũng lưu ý rằng tôi đã sử dụng 433E6 (433 MHz) làm tần số hoạt động LoRa của mình, bạn có thể phải thay đổi tần số này dựa trên loại mô-đun bạn đang sử dụng.

void setup() {
  Serial.begin(9600);
   gpsSerial.begin(9600);
  while (!Serial);
  Serial.println("LoRa Sender");
  if (!LoRa.begin(433E6)) {
    Serial.println("Starting LoRa failed!");
    while (1);
  }
  LoRa.setTxPower(20);
}

Bên trong chức năng vòng lặp, chúng tôi kiểm tra xem mô-đun GPS có đưa ra một số dữ liệu hay không, nếu có thì chúng tôi đọc tất cả dữ liệu và diễn đạt bằng hàm gps.encode. Sau đó, chúng tôi kiểm tra xem chúng tôi đã nhận được dữ liệu vị trí hợp lệ hay chưa bằng cách sử dụng hàm gps.location.isValid () .

while (gpsSerial.available() > 0)
    if (gps.encode(gpsSerial.read()))
        if (gps.location.isValid())
  {

Nếu chúng tôi đã nhận được một vị trí hợp lệ thì chúng tôi có thể bắt đầu truyền các giá trị kinh độ và vĩ độ . Hàm gps.location.lat () cho tọa độ vĩ độ và hàm gps.location.lng () cho tọa độ kinh độ. Vì chúng tôi sẽ in chúng trên màn hình LCD 16 * 2 nên chúng tôi phải đề cập đến thời điểm chuyển sang dòng thứ hai, do đó chúng tôi sử dụng từ khóa “c” để thân thiết bộ thu để in thông tin sau trên dòng 2.

    LoRa.beginPacket();
    LoRa.print("Lat: ");
    LoRa.print(gps.location.lat(), 6);
    LoRa.print("c");
    LoRa.print("Long: ");
    LoRa.print(gps.location.lng(), 6);
    Serial.println("Sent via LoRa");
    LoRa.endPacket();

Lập trình Arduino LoRa làm bộ thu tin hiệu GPS

Code bộ phát đã gửi giá trị tọa độ vĩ độ và kinh độ, bây giờ bộ thu phải đọc các giá trị này và in trên màn hình LCD. Tương tự ở đây, chúng tôi thêm thư viện cho mô-đun LoRa và màn hình LCD và xác định các chân mà màn hình LCD được kết nối và cũng khởi tạo mô-đun LoRa như trước.

#include <SPI.h> //SPI Library
#include <LoRa.h> //LoRa Library
#include <LiquidCrystal.h> //Library for LCD

const int rs = 8, en = 7, d4 = 6, d5 = 5, d6 = 4, d7 = 3; //Mention the pin number for LCD connection
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);//Initialize LCD method

void setup() {
  Serial.begin(9600); //Serial for Debugging

  lcd.begin(16, 2); //Initialise 16*2 LCD
  lcd.print("Arduino LoRa"); //Intro Message line 1
  lcd.setCursor(0, 1);
  lcd.print("Receiver"); //Intro Message line 2
  delay(2000);

  if (!LoRa.begin(433E6)) { //Operate on 433MHz
    Serial.println("Starting LoRa failed!");
    lcd.print("LoRa Failed");
    while (1);
  }
}

Bên trong hàm vòng lặp, chúng ta lắng nghe các gói dữ liệu tạo thành mô-đun LoRa bộ truyền và kích thước của nó bằng cách sử dụng hàm LoRa.parsePacket () và lưu trữ nó trong biến “ packetSize ”. Nếu các gói được nhận thì chúng tôi tiến hành đọc chúng dưới dạng ký tự và in chúng trên màn hình LCD. Chương trình cũng kiểm tra xem mô-đun LoRa có gửi từ khóa “c” hay không, nếu có thì in thông tin còn lại trên dòng thứ hai.

if (packetSize) {     // If packet received
    Serial.print("Received packet '");
    lcd.clear();

    while (LoRa.available()) {
      char incoming = (char)LoRa.read();
      if (incoming == 'c')
      {
        lcd.setCursor(0, 1);
      }
      else
      {
        lcd.print(incoming);
      }
    }

Arduino LoRa GPS Tracker Hoạt động

Khi phần cứng và chương trình đã sẵn sàng, chúng tôi có thể tải lên cả hai mã trong các mô-đun Arduino tương ứng và cấp nguồn cho chúng bằng bộ chuyển đổi 12V hoặc cáp USB. Khi Bộ phát được cấp nguồn, bạn có thể nhận thấy đèn LED màu xanh lam trên mô-đun GPS nhấp nháy, điều này cho thấy rằng mô-đun đang tìm kiếm kết nối vệ tinh để có được sự phối hợp. Trong khi đó, mô-đun Bộ thu sẽ bật nguồn và hiển thị thông báo chào mừng trên màn hình LCD. Sau khi bộ phát gửi thông tin, mô-đun bộ thu sẽ hiển thị thông tin đó trên màn hình LCD của nó như hình dưới đây

 Mạch định vị GPS sử dụng Arduino và LoRa Shield

Bây giờ bạn có thể di chuyển xung quanh với mô-đun GPS của bộ phát và bạn sẽ thấy bộ thu đang cập nhật vị trí của nó. Để biết chính xác vị trí của mô-đun Bộ phát, bạn có thể đọc các giá trị vĩ độ và kinh độ hiển thị trên màn hình LCD và nhập nó vào bản đồ Google để có được vị trí trên bản đồ như hình dưới đây.

 Mạch định vị GPS sử dụng Arduino và LoRa Shield

 

Code bên gửi Lora

Lora Sender Code

#include <SPI.h>
#include <LoRa.h>
#include <TinyGPS++.h>
#include <SoftwareSerial.h>

// Choose two Arduino pins to use for software serial
int RXPin = 3;
int TXPin = 4;   

// Create a TinyGPS++ object
TinyGPSPlus gps;

SoftwareSerial gpsSerial(RXPin, TXPin);

void setup() {
  Serial.begin(9600);
   gpsSerial.begin(9600);
  while (!Serial);

  Serial.println(“LoRa Sender”);

  if (!LoRa.begin(433E6)) {
    Serial.println(“Starting LoRa failed!”);
    while (1);
  }

  LoRa.setTxPower(20);

}

void loop() {

 while (gpsSerial.available() > 0)
    if (gps.encode(gpsSerial.read()))

        if (gps.location.isValid())
  {
    Serial.println(“Sending to LoRa”);
    LoRa.beginPacket();
    LoRa.print(“Lat: “);
    LoRa.print(gps.location.lat(), 6);
    LoRa.print(“c”);
    LoRa.print(“Long: “);
    LoRa.print(gps.location.lng(), 6);
    Serial.println(“Sent via LoRa”);
    LoRa.endPacket();
  }

}

Lora Receiver Code

/*Program to receive the value of temperature and Humidity via LoRa and prin on LCD
 *Dated: 24-06-2019  
 *For: mobitool.net
 */

#include <SPI.h> //SPI Library 
#include <LoRa.h> //LoRa Library 
#include <LiquidCrystal.h> //Library for LCD

const int rs = 8, en = 7, d4 = 6, d5 = 5, d6 = 4, d7 = 3; //Mention the pin number for LCD connection
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);//Initialize LCD method

void setup() {
  Serial.begin(9600); //Serial for Debugging 

  lcd.begin(16, 2); //Initialise 16*2 LCD
  lcd.print(“Arduino LoRa”); //Intro Message line 1
  lcd.setCursor(0, 1);
  lcd.print(“Receiver”); //Intro Message line 2
  delay(2000);

  if (!LoRa.begin(433E6)) { //Operate on 433MHz
    Serial.println(“Starting LoRa failed!”);
    lcd.print(“LoRa Failed”);
    while (1);
  }
}

void loop() {

  int packetSize = LoRa.parsePacket();

  if (packetSize) {     // If packet received
    Serial.print(“Received packet ‘”);
    lcd.clear();

    while (LoRa.available()) {
      char incoming = (char)LoRa.read();
      if (incoming == ‘c’)
      {
        lcd.setCursor(0, 1);
      }
      else
      {
        lcd.print(incoming);
      }

    }

  }
}

LEAVE A REPLY

Please enter your comment!
Please enter your name here