Brújula Digital Magnética
Brújula Digital Magnética
Brújula Digital Magnética
TESINA DE SEMINARIO
Presentado por:
GUAYAQUIL – ECUADOR
2010
DEDICATORIA
Al ING. CARLOS
VALDIVIESO y a todas
depositaron su esfuerzo y
su confianza en la
informe.
TRIBUNAL DE SUSTENTACIÓN
___________________________
___________________________
_______________________________
_______________________________
la superficie terrestre por medio de una aguja imantada que siempre señala
diferencia que puede aportar con una salida digital de la orientación con
entrada de orientación.
CAPITULO I
1.- Generalidades
1.2.- Antecedentes………………………………………………………………….2
CAPITULO II
2.2.- El Microcontrolador………………………………………………………….15
CAPITULO III
CAPITULO IV
CONCLUSIONES Y RECOMENDACIONES
ANEXO A
MANUAL DE USUARIO
1.- INTRODUCCIÓN
ANEXO B
BIBLIOGRAFÍA
ÍNDICE DE FIGURAS
CAPÍTULO 1
CAPÍTULO 2
CAPÍTULO 3
CAPÍTULO 4
LCD.
pantalla LCD.
1.2.- Antecedentes
que hasta ese entonces ha tenido para su orientación, tal es el caso del sol,
las estrellas y la luna, que aún siguen siendo iconos de ubicación geográfica,
estos aparatos a pesar de ser muy exactos, son muy caros y de difícil
3
vehículos robados.
de sistemas para saber hacia dónde se dirigen ya sea para el norte, sur o
que su precisión sea mayor comparándola con una brújula ordinaria. Es por
más precisa y exacta que una brújula ordinaria y, que el costo no sea tanto
dirección.
Esta brújula está montada sobre una pequeña tarjeta que permite la fácil
programa.
HM55B.
sincrónico.
hasta 3 axis.
magnéticos.
7
a campos magnéticos.
NOTA:
para una brújula electrónica, que es uno de los sensores que más se ocupan
proyecto.
proyecto, es ideal.
Para hallar “θ” (que es el ángulo de inclinación con la parte frontal del aparato
PIC y el sensor:
Pin 6 Pin 5
Pin 5 Pin 4
Pin 4 Pin 1
Pin 4 Pin 2
Set de
Comandos
Comando Significado
0000 Reset
0001 Start
Banderas de Estado:
Código Significado
Protocolo de comunicación:
funciona como un controlador. Está diseñado para servir como una interface
para una comunicación entre cualquier dispositivo electrónico que cuente con
comunicación serial.
USART.
2.2.1.- Características generales:
Por último, el cristal oscilador de 8 MHz para este proyecto cuenta con la
siguiente configuración:
2.3.- LCD
Estos módulos son la solución ideal en los casos donde se desea mostrar
normalizados, los tipos de señal manejados por ellos son casi estándar, por
lo que no hay casi diferencia entre cada uno de ellos. Puede variar uno que
refiere.
0V (Tierra)
1 Vss -
Selector de Dato/Instrucción*
4 RS E
Selector de Lectura/Escritura*
5 R/W* E
Habilitación del módulo
6 E E
7 DB0 E/S
8 DB1 E/S
9 DB2 E/S
BUS
10 DB3 E/S
DE
11 DB4 E/S
DATOS
12 DB5 E/S
13 DB6 E/S
14 DB7 E/S
Figura 2.11 Configuración LCD
De una manera muy corta y sencilla posible estableceremos los pasos para
proceso de compilado:
total:
nuestra es de 8 MHz.
c) Seleccionar el nombre y la ruta del proyecto, al cual se le asignará
clic en Finish.
compila:
ventana Messages.
magnética a través del módulo compas Hitachi. Estos datos serán tomados
así errores en las mediciones tomadas por el sensor. A medida que se toman
al microcontrolador.
- Datalogger, que nos servirá como un banco de datos para enviar y recibir
las muestras.
Hitachi HM55B. Este dispositivo tiene como objetivo medir las variaciones
recibir datos del pin dout); y otros momentos como salida (enviando datos al
pin din). El cambio de entrada a salida del pin ES se logra vía software desde
la memoria volátil del microcontrolador los valores que han sido tomados.
de almacenamiento USB.
mas adelante.
los datos en una base de datos (memoria USB) o el de extraer los datos de
la pantalla LCD.
del sensor.
como lo son:
E/S – es el pin 4 del microcontrolador que trabaja como salida y luego sirve
al sensor.
Habilitar
datos.
In
Out
Pulse
microcontrolador al sensor.
Reset_sensor
Medir
microcontrolador al sensor.
Reporte
Extractor
Get_axes
citados, tiene como finalidad hacer la lectura de los valores X y Y del sensor,
Mostrar LCD
del ángulo.
27
Almacenar
Cargar
Gráficos
proyecto del GLCD. Estos datos han sido procesados antes de ser enviados
Gráficos 2
el proyecto del GLCD. Estos datos han sido procesados antes de ser
Menú 1
Menú 4
Menú 3
Nota:
18F4431.
29
CAPÍTULO 4
la simulación en el software Proteus v7.5, así como las gráficas de los pulsos
todas las características del sensor, más bien sirve para entender cómo
microcontrolador 18F4431.
Señal E/S
Señal CLK
Señal EN
Las siguientes gráficas son los resultados de las mediciones hechas en las
Le sigue en color azul, la señal CLOCK que muestra los pulsos que se
sensor.
En este gráfico se observa el envío del comando reset 0000 (línea amarilla)
Señal E/S
Señal CLK
Señal EN
Señal E/S
Señal CLK
Señal EN
Podemos apreciar en este gráfico que se está enviando el dato estado 1100.
Señal E/S
Señal CLK
Señal EN
Nota:
Para esta simulación se usó un pequeño circuito, el mismo que está basado
TTL.
menú de Herramientas) del programa Microbasic Pro, que nos permite enviar
datalogger.
37
Para el desarrollo del proyecto propuesto se hizo uso de otra aplicación para
el diseño o prototipo de la placa donde van a ser soldados los componentes
electrónicos que van a participar en la implementación de nuestra brújula
digital. Tal aplicación la encontramos en el mismo programa proteus con el
nombre de Ares, el mismo que también cuenta con una serie de
herramientas para la elaboración completa de un trabajo profesional como el
presentado.
El PCB mostrado fue diseñado con la finalidad de que sea portable, de ahí su
tamaño pequeño de 10 cm². Está hecha a doble cara a fin de no presentar
demasiados puentes entre las diferentes pistas en lo referente a la parte
superior para su presentación.
39
pruebas que se tomaron entre las dos, se encuentra que la brújula digital
ligeramente, marcando a veces valores más bajos y otras veces más altos.
Dada la gran sensibilidad del sensor HM55B, y recordando que cuando una
lecturas tomadas.
contactos metálicos.
42
CONCLUSIONES
rango de error.
forma deseada.
43
RECOMENDACIONES
permanentemente.
45
ANEXO A
MANUAL DE USUARIO
1.- INTRODUCCIÓN
involucrados, como son Vcc y Gnd. Para este informe se tomó como base
3.1.- El circuito inicia a operar una vez que ha sido energizado. Se procede a
a) Sensar (Botón 1)
al Menú 1.
47
escoger:
b) Extraer datos (Botón 2).- Donde se podrá extraer los datos guardados
con anticipación.
program a1
ES as sbit at RA2_bit
EN as sbit at RA4_bit
EN = 1
delay_us(400)
EN = 0
end sub
ES_DIR = 1
end sub
end sub
delay_us(15)
RELOJ = 1
delay_us(14)
RELOJ = 0
delay_us(31)
end sub
out ()
ES = 0
pulse ()
ES = 0
pulse ()
ES = 0
pulse ()
ES = 0
pulse ()
end sub
out ()
ES = 1
pulse ()
ES = 0
pulse ()
ES = 0
pulse ()
ES = 0
pulse ()
end sub
out ()
ES = 1
pulse ()
ES = 1
pulse ()
ES = 0
pulse ()
ES = 0
pulse ()
end sub
in ()
delay_us(15)
RELOJ = 1
delay_us(14)
result = ES
RELOJ = 0
delay_us(31)
end sub
habilitar()
DELAY_US(800)
reset_sensor()
DELAY_US(400)
habilitar()
DELAY_US(800)
medir()
DELAY_US(800)
do
habilitar()
DELAY_US(800)
reporte()
DELAY_US(800)
estado[0] = extractor()
estado[1] = extractor()
estado[2] = extractor()
estado[3] = extractor()
DELAY_US(1200)
(estado[3] = 0))
for j = 0 to 10
x[10-j] = extractor()
next j
for j = 0 to 10
y[10-j] = extractor()
next j
EN = 1 'high en
x1 = 0
for j = 0 to 10
x1 = x1 + (n2[j]*x[j])
next j
y1 = 0
for j = 0 to 10
y1 = y1 + (n2[j]*y[j])
next j
if x[10] = 1 then
x1 = x1 or negmask
end if
if y[10] = 1 then
y1 = y1 or negmask
end if
'obtengo el angulo
if x1 = 0 then
if y[10] = 1 then
angle = 90
else
angle = -90
end if
else
angle = atan(-y1/x1)
angle = (angle*180)/3.1416
end if
end if
end if
end if
end sub
'procedimiento de lcd
Lcd_Cmd(_LCD_RETURN_HOME)
IntToStr(x1, txt)
Lcd_Out(1,1,txt)
txt = "X="
Lcd_Out(1,1,txt)
Lcd_Out(1,7,txt)
IntToStr(y1, txt)
Lcd_Out(2,1,txt)
txt = "Y="
Lcd_Out(2,1,txt)
Lcd_Out(2,7,txt)
angle2 = angle
WordToStr(angle2, txt)
'Palabra norte
Lcd_Out(2,10,txt)
Lcd_Out(2,10,txt2)
else
Lcd_Out(2,12,txt)
end if
'Palabra sur
Lcd_Out(2,10,txt)
else
Lcd_Out(2,12,txt)
end if
'Palabra este
if angle2 = 90 then
Lcd_Out(2,10,txt2)
else
Lcd_Out(2,12,txt)
end if
'Palabra oeste
Lcd_Out(2,10,txt)
else
Lcd_Out(2,12,txt)
end if
delay_ms(150)
end sub
Lcd_Cmd(_LCD_RETURN_HOME)
txt = "1.Sensar 2.GLCD"
Lcd_Out(1,1,txt)
Lcd_Out(2,1,txt)
end sub
Lcd_Cmd(_LCD_RETURN_HOME)
Lcd_Out(1,1,txt)
Lcd_Out(2,1,txt)
end sub
Lcd_Cmd(_LCD_RETURN_HOME)
Lcd_Out(1,1,txt)
Lcd_Out(2,1,txt)
end sub
Lcd_Out(1,1,txt)
Lcd_Out(2,1,txt)
end sub
Lcd_Cmd(_LCD_RETURN_HOME)
Lcd_Out(1,1,txt)
Lcd_Out(2,1,txt)
end sub
Lcd_Cmd(_LCD_RETURN_HOME)
Lcd_Out(1,1,txt)
Lcd_Out(2,1,txt)
end sub
sub procedure almacenar()
UART1_Write(13)
UART1_Write(13)
UART1_Write_Text("BRUJULA")
UART1_Write(13)
UART1_Write_Text("WRI")
UART1_Write(13)
delay_ms(100)
for j = 0 to 23
WordToStr(memoria[j], txt)
UART1_Write_Text(txt)
UART1_Write(13)
next j
UART1_Write_Text("END")
UART1_Write(13)
salir_menu2 = 1
end sub
'enviar datos
UART1_Write_Text("INI") ' sends back text
UART1_Write(13)
UART1_Write(13)
UART1_Write_Text("BRUJULA")
UART1_Write(13)
UART1_Write_Text("RD")
UART1_Write(13)
j=0
do
UART1_Read_Text(txt, enter, 10)
if strcmp(txt,"EF") = 0 then
salir_menu2 = 1
else
memoria[j] = StrToword(txt)
UART1_Write_Text("R")
UART1_Write(13)
end if
j=j+1
end sub
j=0
do
do
if (UART1_Data_Ready() = 1) then
uart_rd = UART1_Read()
end if
delay_ms (100)
como = memoria[(3*j)+2] - 90
angle = ((3.1416*como)/180)
como = 25*(cos(angle))
X1 = como
UART1_Write(X1)
delay_ms (100)
como = 25*(sin(angle))
Y1 = como
UART1_Write(Y1)
delay_ms(5000)
j=j+1
salir_menu2 = 1
end sub
j=0
do
do
if (UART1_Data_Ready() = 1) then
uart_rd = UART1_Read()
end if
UART1_Write(0x40)
delay_ms (100)
X1 = como
UART1_Write(X1)
delay_ms(5000)
j=j+1
salir_menu2 = 1
end sub
main:
ANSEL0 = 0
ANSEL1 = 0
OSCCON = 2
RELOJ_DIR = 0
EN_DIR = 0
BOTON1_DIR = 1
BOTON2_DIR = 1
BOTON3_DIR = 1
'inicializo variables
RELOJ = 0
EN = 0
ES = 0
enter[0] = 13
enter[1] = 0
'inicializo lcd
Lcd_Cmd(_LCD_CURSOR_OFF)
'inicializo uart
Delay_ms(100)
while(true)
salir_menu2 = 0
menu1()
for i = 0 to 7
get_axes()
mostrar_lcd()
memoria[3*i] = X1
memoria[(3*i)+1] = Y1
memoria[(3*i)+2] = angle
next i
else
delay_ms (500)
do
menu4()
graficando()
graficos ()
delay_ms(500)
else
graficando()
graficos2 ()
delay_ms(500)
end if
end if
loop until (salir_menu2 = 1)
else
delay_ms (500)
do
menu3()
guardando()
almacenar()
delay_ms(500)
else
cargando()
cargar()
delay_ms(500)
end if
end if
end if
end if
end if
wend
end.
program sensor
' Declaraciones
datos
18F4431
pots
micro
main:
analógicas
ANSELH = 0
while (true)
X = ADC_READ (0)
X = X/1023 'conversiones que pasan el rango de los valores
X1 = X
X = X/1023
X = X*100
X = X - 50
Y1 = X
do
do
valor
do
do
do
do
entrada[1] = DINDOUT
do
do
entrada[0] = DINDOUT
do
(entrada[0] = 0))
do
dindout = 1
do
do
dindout = 1
do
do
DINDOUT = 0
do
do
do
'comenzando por el pin msb de los 11 bits del dato X para despues
do
do
do
do
do
do
do
do
do
do
do
do
do
do
loop until RELOJ = 0
do
do
do
do
do
do
do
do
do
do
do
do
do
do
do
do
do
loop until RELOJ = 1
do
do
do
do
do
do
do
do
do
do
do
do
DINDOUT = 0
wend
end.
BIBLIOGRAFÍA