Está en la página 1de 5

PROTOTIPO DE SISTEMA DE POSICIONAMIENTO UTILIZANDO ARDUINO

INTRODUCCIÓN

Este informe muestra el desarrollo que se le dio al transmisor RF433 con la finalidad de
transmitir información de posicionamiento, utilizando un módulo gps (skylab SKM53) y Arduino
para implementar la comunicación entre ambos dispositivos.

La finalidad de este proyecto es la de transmitir información de posicionamiento de un globo


aerostático, saber la localización del globo cada cierto tiempo y tener una locación aproximada
de su aterrizaje.

COMPONENTES

- Arduino Uno
- Arduino Nano
- Modulo gps skylab SKM53
- Transmisor y receptor RF433MHz para Arduino
- Fuente de alimentación
- Modulo LCD

PROCEDIMIENTO

Una vez lograda la comunicación entre ambos módulos de comunicación RF433, se le adapto
un módulo gps al trasmisor, de este modo la información enviada seria información de
localización (latitud y longitud).

Luego de realizar el acople del módulo gps se desarrolló un código para, lograr enviar la
información obtenida del gps a través del transmisor RF433.
Para la parte del receptor se utilizó un Arduino nano en donde también fue acoplado el
modulo receptor RF433, y para mostrar la información de posicionamiento se le puso también
un módulo LCD.

RESULTADOS

Se logro captar la información de posicionamiento del módulo GPS, la información que se


capta es la longitud y la latitud, esta información es procesada por el Arduino y es enviada por
el Transmisor RF433 en una modulación ASK, el receptor de igual forma capta esta
información, demodula y lo muestra en el LCD.

Imagen: Funcionamiento del Receptor RF433.

CONCLUSIONES

Se logra desarrollar el módulo de comunicación para el globo de manera satisfactoria pero la


comunicación es algo lenta se podría mejorar optimizando el código y utilizando módulos de
mejor calidad.

Utilizando un LCD con tecnología SPI se podría mejorar y reducir el cableado en el prototipo.

La impresión en el LCD se muestra de vez en cuando de forma desfazada, esto por el tipo de
impresión que de desarrolla en el Arduino nano.
ANEXOS

CÓDIGO TRANSMISOR
#include <TinyGPS.h> // Libreria de manejo del GPS

#include <SoftwareSerial.h> // Libreria de manejo de comunicacion serial alterna

#include <RH_ASK.h> // incluye libreria RadioHead.h

#include <SPI.h> // incluye libreria SPI necesaria por RadioHead.h

RH_ASK rf_driver; // crea objeto para modulacion por ASK

long lat, lon; // Variables auxiliares para lectura de longitud y latitud

float LAT, LON;

float LAT1, LON1;// Variables auxiliares para latitud y longitud con punto decimal

char charLAT [15];

char charLON [15];

char buf1[16];

char buf2[16];

SoftwareSerial ss(2,3); // Pines usados para comunicacion con el GPS (RXD = 2, TXD = 3)

TinyGPS GPS; // Declaracion de cabecera para la funcion GPS

void setup(){

ss.begin(9600); // Velocidad de comunicacion del GPS (Segun hoja de datos)

Serial.begin(9600); // Velocidad de comunicacion con la computadora

rf_driver.init(); // inicializa objeto con valores por defecto

void loop(){

lectura_serial(); // Lectura de la informacion del GPS

conversion();

rf_driver.send((uint8_t*)charLAT, strlen(charLAT));// funcion para envio del mensaje

delay(2000);

rf_driver.send((uint8_t*)charLON, strlen(charLON));// funcion para envio del mensaje

rf_driver.waitPacketSent(); // espera al envio correcto

delay(3000); // demora de 1 segundo entre envios

void conversion(){

LAT1 = LAT/1000000; // Latitud en grados con diez decimales

LON1 = LON/1000000; // Longitud en grados con diez decimales

dtostrf(LAT1,13, 6, buf1);

Serial.println(buf1);

dtostrf(LON1,13, 6, buf2);

Serial.println(buf2);

String strLAT;

String strLON;

strLAT += buf1;

strLON += buf2;

Serial.println(strLAT);
Serial.println(strLON);

strLAT.toCharArray(charLAT, 14);

strLON.toCharArray(charLON, 14);

Serial.println(charLAT);

Serial.println(charLON);

void lectura_GPS(){

bool newdata = false; // Variable auxiliar para ingreso de datos

unsigned long start = millis(); // Variable auxiliar para refresh y update datos

while (millis() - start < 1000){ // Update de lectura cada segundo

if (feedgps ()){newdata = true;} // Validacion de datos en la pila

if (newdata){informacion_gps(GPS);} // Ingreso de datos

bool feedgps(){

while (ss.available()){ // Mientras exista informacion en la pila de datos

if (GPS.encode(ss.read())) // Validacion de existencia de datos en la pila de datos

return true;

return 0;

void informacion_gps(TinyGPS &GPS)

GPS.get_position(&lat, &lon); // Byte de datos de latitud y longitud

LAT = lat; // Adquicion de datos en decimales

LON = lon; // Adquicion de datos en decimales

feedgps(); // Sin esta funcion, puede causarse un error de suma

void lectura_serial(){

GPS.get_position(&lat, &lon); // Adquicion de datos de latitud y longitud

lectura_GPS(); // Funcion de rutina de lectura del GPS

Serial.print("Latitud : ");

Serial.print(LAT/1000000,10); // Latitud en grados con diez decimales

Serial.print(" :: Longitud : ");

Serial.println(LON/1000000,10); // Longitud en grados con diez decimales

}
CÓDIGO RECEPTOR

#include <RH_ASK.h> // incluye libreria RadioHead.h

#include <SPI.h> // incluye libreria SPI necesaria por RadioHead.h

#include <LiquidCrystal.h>

RH_ASK rf_driver; // crea objeto para modulacion por ASK

LiquidCrystal lcd (13,12,10,9,8,7);

void setup(){

rf_driver.init(); // inicializa objeto con valores por defecto

Serial.begin(9600); // inicializa monitor serie a 9600 bps

lcd.begin(16,2);

lcd.setCursor(1 ,0);

lcd.print("LAT= ");

lcd.setCursor(1,1);

lcd.print("LON= ");

void loop(){

uint8_t buf[13]; // espacio para almacenar mensaje recibido

uint8_t buflen = sizeof(buf); // longitud del buffer de mensaje

if (rf_driver.recv(buf, &buflen)) // si existen datos correctos recibidos

Serial.print("MENSAJE DE RECEPCION: "); // imprime Mensaje:

Serial.println((char*)buf); // imprime buffer de mensaje

for (int i=0;i<=1;i++){

lcd.setCursor(5,i);

lcd.print((char*)buf);

delay(1000);

También podría gustarte