Sistema
global de navegación por satélite (GNSS) Son sistemas
compuestos por satélites que transmiten señales utilizadas para el
posicionamiento y localización en cualquier parte del globo
terrestre. Estos permiten determinar las coordenadas geográficas,
altitu,+d y otros datos de un punto dado como resultado de la recepción
de señales provenientes de constelaciones de satélites artificiales
de la Tierra para fines de navegación, transporte, geodésicos,
militar, etc. Los más importantes son: GPS (EEUU), GLONASS (RUSIA),
GALILEO (EU), BeiDou (CHINA).
GNSS ( GPS / GLONASS )
En comparación con
usar únicamente GPS, activar múltiples sistemas GNSS generalmente
incrementa el número de satélites visibles, disminuye la dilución de precisión, reduce el tiempo de la
primera posición válida e incrementa la confiabilidad de los datos;
lo que también se traduce en precisión especialmente cuando se mueve
sobre ambientes urbanos o de densa Vegetación.
Satélites en Vista
El L76 (Quectel) es
un módulo GNSS ( GLONASS /GPS )
Este IC está
disponible en varias versiones para soportar GPS, GLONASS, BEIDOU y
GALILEO (Cuando esté disponible).
GPS (CDMA) / GLONASS (FDMA)
GPS L1 1575.42 MHz
C/A Code
GLONASS L1
1598.0625~1605.375 C/A Code
NMEA Input/output,
ASCII, 0183, 3.01
PMTK Input, MTK
proprietary protocol
El protocolo NMEA tiene la forma:
$
| Talker
ID
| MSG
ID
|
DATA
| *
|
CHECKSUM
| <CR><LF>
'$' Carácter de inicio. Toda trama inicia con el carácter '$' Talker ID identifica el origen de la trama: <GP> para el receptor GPS. <GN> para el receptor GPS + GLONASS , GPS + GALILEO. <BD> para el receptor GPS + BeiDou. <P> mensaje propietario. MSG ID identifica el tipo de trama. (RMC, GGA, GLL, etc.) DATA información entregada por la respectiva trama. '*' Carácter final campo de datos. CHECKSUM XOR de todos los caracteres de la trama entre <$><*> <CR><LF> todas las tramas finalizan con CR (0x0D), LF (0x0A).
Disculpen si no respondí antes, password: "sydbernard", "sydbernard1", "maniacmansion" ,"maniacmanison1". Alguno ha de servir.
Otras Pruebas realizadas usando módulos GPSPMB-688 y L10 (Quectel)
Este ejemplo básico consiste en enviar mediante GPRS del SIM900 datos a un sitio web para ser presentados adecuadamente, en nuestro caso los datos a enviar son: Latitud, Longitud, Fecha de adquisición, Hora de adquisición. Por lo tanto necesitamos de GMAPS para visualizar los datos correctamente.
Mediante la página web presentamos los datos de "geo-localización" los cuales son enviados por el SIM900 o cualquier otro módulo GPRS. La interfaz de visualización consiste en un sitio usando PHP, JavaScript/AJAX, Gmaps, MySQL, etc.
En el mapa del sitio se puede observar un marcador. Este marcador corresponde al último dato que ha recibido el servidor de parte del dispositivo AVL, es decir el último dato almacenado en la base de datos MySQL. Además el sitio nos permite ver la hora
y fecha de adquisición del último dato mostrado. Todo dato enviado por el SIM900 al servidor será automáticamente marcado en el mapa y podremos observar cómo se va marcando la trayectoria del dispositivo.
La actualización del mapa con el último dato en servidor se realiza mediante AJAX, con ayuda
de este preguntamos frecuentemente al servidor por el último dato recibido del dispositivo, y si
el dato es el mismo no lo marca más. En caso de que un nuevo dato ha sido recibido por el
servidor pero su valor corresponde al mismo punto marcado anteriormente entonces el sitio solo
actualiza la fecha y hora del dato.
Este es un ejemplo básico, obviamente sería necesario un formulario para validar usuarios, cookies, ademas de control y protección de los scripts, keys, etc.
Sistema
último dato en MySQL DB -> Gmaps
Conexión
-
GET, GPRS SIM900
MySQL database/table
CREATE TABLE gprs.samples (
sampleId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
sampleDate DATE NOT NULL,
sampleTime TIME NOT NULL,
sampleLat VARCHAR(20) NOT NULL,
sampleLon VARCHAR(20)NOT NULL
)default character set utf8;
INSERT INTO gprs.samples(sampleDate, sampleTime, sampleLat, sampleLon)
VALUES ("2016-02-02", "14:35:43", "12.1006", "-86.2435");
Insertar datos (GET):
localhost/site/scripts/update.php?date=2016-12-12&time=01:41:40&lat=12.1006&lon=-86.2435
GET /scripts/update.php?date=2016-12-12&time=01:41:40&lat=12.1006&lon=-86.2435 HTTP/1.0 [CR][LF]
Host: website.com
[CR][LF]
Connection: close [CR][LF] [CR][LF] [SUB]
Terminal:
Para este ejemplo he usado una simple terminal que he programado en QT5 framework C++, pero tu puedes usar cualquier terminal disponible Putty, TeraTerm, minicom, moserial, etc.
sydbernard terminal (QT5 C++)
Descargar Código fuente
Disculpen si no respondí antes, password: "sydbernard", "sydbernard1", "maniacmansion" ,"maniacmanison1". Alguno ha de servir.
Leer un archivo BMP
almacenado en una SDC mediante la librería ELM-Chan y posteriormente
presentar la imagen en un Display (320x240) TFT 2.8 (ILI9325) usando
una librería de SEEED studio. La librería incluye
funciones para dibujar círculos, cuadros, caracteres, strings, etc.
En el caso de la librería ElM-Chan está en capacidad de leer y escribir archivos en la SDC.
MPL3115A2 (Language C) Linux MySQL (Banana Pi/Raspberry Pi)
The MPL3115A2 is a compact piezoresistive absolute pressure sensor with an I2C interface. MPL3115A2 has a wide operating range of 20 kPa to 110 kPa, a range that covers all surface elevations on earth. The fully internally compensated MEMS in conjunction with an embedded high resolution 24-bit equivalent ADC provide accurate pressure (Pascals)/altitude (meters) and temperature (°C) data.(see DataSheet, AN4481, AN4519)
Simple test MPL3115A2 with a BananaPi. Using the I2C library functions (WiringPi), we communicate withthe sensor, then the data is stored in MySQL/postgreSQL database.
CREATE DATABASE sensor;
CREATE TABLE sensor.samples(
sampleId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
sampleDate DATE,
sampleTime TIME,
sampleTemperature DOUBLE,
sampleAltitude DOUBLE,
samplePressure DOUBLE) default character set utf8;
Simple driver (gcc) para un billetero JCM
UBA-10-SS usando el protocolo ID003.
Las
tramas del protocolo ID003 tienen la forma:
|
SYNC | Length | CMD | Data Fields | Checksum |
▪ SYNC
(1byte): 0xFC
▪ Length
(1byte): Longitud total del string (todos los bytes)
▪ CMD
(1byte) (instrucción,
tipo de orden)
▪
Data (variable)( datos, opcional)
▪
CRC (2byte)( CRC-Kermit)
Para
mayor comprensión del CRC-Kermit probar la librería de Lammert Bies, la cual se puede compilar en gcc. Las funciones para el
crc-kermit en este driver han salido de aquí.
----------------------------------------------------------------.
crc: tst_crc.o lib_crc.o
gcc -o crc tst_crc.o lib_crc.o
Aquí se ha usado de
la librería WiringPI los archivos wiringSerial.c, wiringSerial.h
ademas de la función Delay(), pero el código funciona en ambos
(Raspberry
Pi / Banana Pi/PC Linux).
En el caso de la
librería wiringSerial, esta debería trabajar para 7 bits de datos, 1
bit de paridad EVEN.
Por lo que se ha
modificado la función serialOpen ;
options.c_cflag
|= PARENB; // Paridad activada.
options.c_cflag
&= ~PARODD; // Paridad EVEN.
options.c_cflag
|= CS7; // 7 bits de datos.
Este simple driver
consta de 5 archivos; main.c, apex.c, apex.h, wiringSerial.c,
wiringSerial.h. Para compilarlos;
Para este ejemplo en
la función loop_apex se
indica que cuando haya un billete valido, este sea aceptado automáticamente, una vez almacenado el billete se envia el mensaje:
Accept bill: #billete
Ademas de los BYTE 0, BYTE1, BYTE2 enviados por el billetero.
Simple
driver Apex bill acceptor (Linux Mint, x86)
Raspberry Pi
Conexión Rpi - Apex (conector 18 pin)
conector 18 pin (verde-Tx, rojo/blanco-Rx)
Pyramid
Bill Acceptors Apex 5000/7000
Los
billeteros (Bill Acceptors) Pyramid APEX 5000/7000 :
Comunicación:
▪ Baud
rate- 9600
▪ 1
start and 1 stop bit
▪ 7
data bits (bit 0 = sent first (LSB))
▪ 1
parity bit ( even parity)
Inactive
Timing – Si el Bill Acceptor no detecta comunicación con el Host
dentro de un lapso de 5 segundos, iniciando desde la última
comunicación enviada por el host, el bill acceptor:
1 –
rechazara cualquier billete mantenido en escrow.
2 –
Dejará de aceptar billetes hasta que el master inicie la
comunicación nuevamente.
Formato
común para la transmisión:
|
STX | Length | MSG Type and Ack Number | Data Fields | ETX | Checksum
|
STX-
0x02 El inicio del mensaje es indicado por 1 byte.
Length-
Número de bytes en cada mensaje (binary), incluyendo STX, ETX y
Checksum.
Consiste en leer
archivos BMP RGB888 (24 bits) y convertirlos a RGB565 (16 bits) para
presentarlos en un Display TFT 240x320 (Raspberry PI 2.8 TFT Add-on)
con controlador ILI9323DS. El
Display se controla mediante los pines GPIO de la
BananaPi/RaspberryPi.
La
librería de Seeed technologies
inicialmente trabajaba para AVR/Arduino pero aqui fue modificada
para funcionar conjuntamente con WiringPi.
El proyecto consiste
de cuatro archivos tft.c, tft.h, font.h y main.c. El proyecto lo
compilamos con gcc:
FormatoBMP: Un archivo BMP es un archivo de mapa de bits, es decir, un
archivo de imagen de gráficos, con píxeles almacenados en forma de
tabla de puntos que administra los colores como colores reales o
usando una paleta indexada.
La estructura de un
mapa de bits es la siguiente:
Encabezado
del archivo
Encabezado
de información del mapa de bits (también llamado encabezado de
información).
Paleta
(opcional)
Cuerpo de la
imagen
Encabezado del
archivo
El encabezado del archivo proporciona información acerca del tipo de
archivo (mapa de bits) y su tamaño, así como también indica dónde comienza realmente la
información de la imagen.
El encabezado comprende cuatro campos:
La firma (en 2 bytes), que indica que se trata de un archivo BMP con
dos caracteres BM (42 4D en hexadecimal) que indica que se trata de un mapa de bits
de Windows
El tamaño total del archivo en bytes (codificado en 4 bytes)
Un campo reservado (en 4 bytes)
El desajuste de la imagen (en 4 bytes), es decir, la ubicación del
comienzo de la
información de la imagen en relación con el comienzo del archivo
Archivo .bmp visto en GHEX
Firma: BM
Tamaño: 0x38436
Reservado: 0
Inicio del campo de datos: 0x36
Encabezado de información del mapa de bits
proporciona información acerca de
la imagen, en especial las dimensiones y los colores.
El tamaño del encabezado de información del mapa de bits en bytes
(codificado en 4 bytes). Los siguientes valores hexadecimales son
posibles según el tipo de formato BMP: 28 para Windows 3.1x, 95, NT
El ancho de la imagen (en 4 bytes), es decir, el número de píxeles
contados de forma horizontal
La altura de la imagen (en 4 bytes), es decir, el número de píxeles
contados de forma vertical
El número de planos (en 2 bytes). Este valor es siempre 1
La profundidad del modelo de color (en 2 bytes), es decir, el número
de bits usados para codificar el color. Este valor puede ser equivalente a 1, 4, 8, 16,
24 ó 32
El método de compresión (en 4 bytes). Este valor es 0 cuando la
imagen no está
comprimida.
Encabezado: 0x28
Ancho: 0xF0 (240)
Largo:0x140 (320)
Planos: 0x01
Bits: 0x18 (24)
Compresión: 0x00
El tamaño total de la imagen en bytes (en 4 bytes).
La resolución horizontal (en 4 bytes), es decir, el número de
píxeles por metro contado de forma horizontal.
La resolución vertical (en 4 bytes), es decir, el número de píxeles
por metro contado de forma vertical.
El número de colores de la paleta (en 4 bytes).
Tamaño: 0x38400
Resolución H: 0x0B13
Resolución V: 0x0B13
Paleta: 0x0
El número de colores importantes de la paleta (en 4 bytes). Este
campo puede equivaler a 0 cuando todos los colores son importantes.