|
VHF: Canal 77 |
|
#1
|
||||
|
||||
Simulador de corredera usando 1 GPS
Hola:
Hace días que tenía pendiente 1 pequeño brico para sustituir el típico sensor airmar analógico que llevan muchos veleros (el típico con el cable de masa, rojo y verde). Lo que hace es simular los impulsos en función de la velocidad GPS (SOG), ya sé que no es muy ortodoxo, ya que no tiene en cuenta la corriente, pero no tengo ningún agujero en el casco y no quiero hacerlo. He usado 1 placa de desarrollo arduino http://arduino.cc/en/Main/ArduinoBoardNano 1 sensor GPS NMEA0183 y 1 poco de programación en C algo cutre. Código:
#define F_CPU 16000000L #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> // including the avr delay lib #include "led.h" // Header file for led #include "usart.h" // Header for Serial communication #include "SoftwareSerial.h" #define MYDEBUG(x) // OBJECT CREATION LED led1(0x05,5); // Creates an object called led1 connected to PortB.5 (0x05 is the Special function register for PORTB) LED output(0x0b,4); //PPRTD, bit 4 SoftwareSerial mySerial(2, 3,false); #include <avr/io.h> #include <avr/interrupt.h> #define FOSC F_CPU // Clock Speed #define BAUD 115200 // Baud Rate #define MYUBRR (((((FOSC * 10) / (16L * BAUD)) + 5) / 10) - 1) // NMEA setences #define NMEA_DISABLE_CGA "PSRF103,00,00,00,01" #define NMEA_DISABLE_GLL "PSRF103,01,00,00,01" #define NMEA_DISABLE_GSA "PSRF103,02,00,00,01" #define NMEA_DISABLE_GSV "PSRF103,03,00,00,01" #define NMEA_DISABLE_RMC "PSRF103,04,00,00,01" #define NMEA_DISABLE_VTG "PSRF103,05,00,00,01" #define NMEA_ENABLE_VTG_1HZ "PSRF103,05,00,05,01" #define NMEA_QUERY_VTG "PSRF103,05,01,01,01" char nmea_data[128]; char setnyb(unsigned char c) { if(c<9) return c+'0'; else return c-10+'A'; } void send_nmea(const char *datagram) { int i; char *p=(char*)datagram; unsigned char checksum=0; i=0; nmea_data[i++]='$'; while(*p) { nmea_data[i]=*p++; checksum=checksum^nmea_data[i]; i++; } nmea_data[i++]='*'; nmea_data[i++]=setnyb((checksum >> 4) &0x0f); nmea_data[i++]=setnyb(checksum &0x0f); nmea_data[i]=0x00; mySerial.println((const String &)nmea_data); } #define STAT_NMEA_NONE 0 #define STAT_NMEA_HEADER 1 #define STAT_NMEA_DATA 2 // VTG-Course Over Ground and Ground Speed //$GPVTG,309.62,T,,M,0.13,N,0.2,K char nmea_header[5]; char nmea_field[32]; int knots=1450,dotpos,tknots=10; int int_counter = 0; volatile int second = 0; int oldSecond = 0; long starttime = 0; int on=0; /* Timer2 reload value, globally available */ unsigned int tcnt2; // Aruino runs at 16 Mhz, so we have 1000 Overflows per second... // 1/ ((16000000 / 64) / 256) = 1 / 1000 ISR(TIMER2_OVF_vect) { /* Reload the timer */ TCNT2 = tcnt2; int_counter++; if(tknots > 0 ) { if (int_counter >= tknots) { if(on) { led1.on(); output.on(); on=0; } else { led1.off(); output.off(); on=1; } int_counter = 0; } } }; void timer_setup() { TIMSK2 &= ~(1<<TOIE2); /* Configure timer2 in normal mode (pure counting, no PWM etc.) */ TCCR2A &= ~((1<<WGM21) | (1<<WGM20)); TCCR2B &= ~(1<<WGM22); /* Select clock source: internal I/O clock */ ASSR &= ~(1<<AS2); /* Disable Compare Match A interrupt enable (only want overflow) */ TIMSK2 &= ~(1<<OCIE2A); /* Now configure the prescaler to CPU clock divided by 128 */ TCCR2B |= (1<<CS22) | (1<<CS20); // Set bits TCCR2B &= ~(1<<CS21); // Clear bit /* We need to calculate a proper value to load the timer counter. * The following loads the value 131 into the Timer 2 counter register * The math behind this is: * (CPU frequency) / (prescaler value) = 125000 Hz = 8us. * (desired period) / 8us = 125. * MAX(uint8) + 1 - 125 = 131; */ /* Save value globally for later reload in ISR */ tcnt2 = 131; /* Finally load end enable the timer */ TCNT2 = tcnt2; TIMSK2 |= (1<<TOIE2); } int main(void) { char c,*p; unsigned char stat=STAT_NMEA_NONE; int i,head_counter,nmea_field_counter,nmea_field_data_counter; // INITIALIZATIONS DDRB = 0b00100000; //B5 output: board LED USART_Init(MYUBRR); // Initializes the serial communication mySerial.begin(4800); mySerial.listen(); tknots=10000/knots; timer_setup(); _delay_ms(1000); sei(); send_nmea(NMEA_DISABLE_CGA); send_nmea(NMEA_DISABLE_GLL); send_nmea(NMEA_DISABLE_GSA); send_nmea(NMEA_DISABLE_GSV); send_nmea(NMEA_DISABLE_RMC); send_nmea(NMEA_DISABLE_VTG); send_nmea(NMEA_ENABLE_VTG_1HZ); while(1) { sei(); if (mySerial.available()) { c=mySerial.read(); MYDEBUG(USART_Sendbyte(c)); if( c < 0x20) { stat=STAT_NMEA_NONE; } if( c == 0x0a) { _delay_ms(100); send_nmea(NMEA_QUERY_VTG); } switch (stat) { case STAT_NMEA_HEADER: if(head_counter < 5 ) { nmea_header[head_counter++] = c; if(head_counter==5) { if(strncmp(nmea_header,"GPVTG",5) ==0) { MYDEBUG(USART_Send_string("GPVTG\r\n")); stat=STAT_NMEA_DATA; nmea_field_counter=0; head_counter=0; } else { stat=STAT_NMEA_NONE; } } } else { stat=STAT_NMEA_NONE; } break; case STAT_NMEA_DATA: if(c == ',') { if(nmea_field_counter==5) { p=nmea_field; dotpos=0; knots=0; while(*p) { if(*p >= '0' && *p <= '9') { knots=knots*10+*p-'0'; } p++; } sprintf(nmea_field,"\r\nspeed=%d\n\r",knots); USART_Send_string(nmea_field); if(knots>0) tknots=10000/knots; else tknots=0; } nmea_field_counter++; nmea_field_data_counter=0; nmea_field[0]=0; } if(nmea_field_counter==5) { nmea_field[nmea_field_data_counter++]=c; nmea_field[nmea_field_data_counter]=0; } break; case STAT_NMEA_NONE: default: if(c=='$') { stat=STAT_NMEA_HEADER; head_counter=0; } break; } } } } |
41 Cofrades agradecieron a jiauka este mensaje: | ||
adri_cubs (31-05-2018), Akakus (14-05-2012), alarones (11-05-2012), alcapar (16-08-2019), Alux (16-09-2019), arcanos (25-04-2016), BlueMoon (14-05-2013), Camelot (03-07-2016), Capicua (05-04-2013), Capitanlanmar (27-01-2014), Chemaximus (14-09-2019), corsariomad (25-12-2014), duendevelas (10-08-2013), genoves (01-12-2014), Islanautica (14-05-2012), iven (27-07-2015), Jarcio (24-09-2014), jesmal (31-07-2018), JMPUIG (19-07-2013), Jony-- (07-08-2013), Juan de Nova (03-12-2017), Juanitu (09-10-2012), Mariñel (30-09-2014), Mescalino (10-10-2012), Nick (14-05-2012), nombrote (04-09-2018), olaje (09-10-2012), PANTU289 (25-05-2018), pato (09-10-2012), PEDRO >K (31-08-2016), Pipika (08-09-2019), RASTABAN (21-07-2013), Rebellin (20-08-2014), Rony (10-05-2012), Rotito (04-10-2016), Tabeirón Coruña (31-12-2021), tarifafun (07-04-2013), teteluis (25-09-2015), tio_ambeto (01-12-2017), topovespa (07-08-2013), Ventoleras (11-05-2012) |
#2
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Hola Jiauka, buen invento, ¿entonces con este receptor y el driver en C puedes simular la corredera y conectarlo al equipo de viento?
Yo tengo una aguja de viento a la que al no conectar corredera no tengo viento real. Llamé a Simrad para preguntarles si podía hacerlo con la salida NMEA del GPS y me dijeron no, tiene que ser con corredera, el problema técnico (no me lo explicaron en detalle), tenia que ver con velocidad de transferencia o sincronismo. Me ofrezco de conejillo de indias para probarlo. |
Los siguientes cofrades agradecieron este mensaje a Clapton | ||
Pasaba (05-10-2016) |
#3
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Si estás por barcelona, lo probamos
|
Los siguientes cofrades agradecieron este mensaje a jiauka | ||
Ventoleras (11-05-2012) |
#4
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
No he trabajado nunca a bajo nivel, (PLC's, EPROM's, etc), pero de rascar código de todo un poco llevo muchas horas de vuelo, (y me sigue gustando).
Se ve que ya tienes el engendro sino hecho casi hecho, la verdad es que no se de que te podría ayudar, curiosidad en cambio mucha. Te mando un MP Jaume, gracias. |
#5
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
El engendro está hecho y funcionando en tierra, falta probarlo en 1 barco, pero seguro que va.
|
#6
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Jiauka : Me parece muy interesante. A mi por lo menos me gustaría ver ese esquema. Y también saber dónde localizaste el sensor de Gps y cuanto te costo
Gracias |
#7
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Cita:
¿Y los Raymarine tragan esos datos tal cual, sin Seatalk de por medio? Gran invento, lo tengo que probar.
__________________
FSM, Ramén!!! |
#8
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Yo saqué numerito para la cola hace tiempo... a ver si lo encuentro en algún sitio
__________________
2010- Jouet 22 "Zakkai" 2011~ Furia 28 "Cocoliso" 2013 ~ Anbemar, la casa-barco más guay del mundo mundial!!! ~~~~~~~~~ |
Los siguientes cofrades agradecieron este mensaje a Nuba | ||
Thor_Valencia (31-05-2018) |
#9
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Por fin tengo el invento funcionando
Por si alguien se anima a intentarlo, os cuento mi experiencia. El primer problema fué que el arduino nano que venden en el deal extreme no trae programado el bootloader, por lo que no hay manera de programarlo. Me volví loco intentando programar el bootloader, pero al final desistí, menos mal que el cofrade Jiauka , me lo programó. Una vez programado seguía sin funcionar... Pues nada me instalé el software de atmel atmel studio 6, y compilé el programa. Conseguí un software para (avrprogram) para grabar el .hex y lo programé, pero seguía sin funcioanr . Entonces gracias al soporte del Jiauka, encontramos el problema. El esquema que puso Jiauka lusaba el gps EM406, pero el que se compra en el deal extream es el modelo EM411, y lleva un conexionado diferente. Total que del esquema que teneis hay que intercambiar los pines tx y rx del gps al arduino. En el GPS EM411 el Tx es el pin3 que va a la pata d2 del arduino y ya funciona!!! Conclussiones, si quereis montar este fabuloso invento os aconsejo: - Comprar el arduino nano oficial, que ya viene con el bootloader. - Intercambiar los pines d2 y d3 del arduino en el esquema Quiero agradecer a Jiauka la paciencia que ha tenido y la ayuda que me ha prestado ! Aquí os dejo un video de ayer con la corredera funcionando por fin |
Los siguientes cofrades agradecieron este mensaje a lidiana | ||
pil pil (12-11-2015) |
#10
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Nunca le agradeceré lo suficiente al Cofrade Jiauka su "invento" Funciona de maravilla y, yo personalmente, le saco mas partido a esta información (SOG) que a la de la corredera.
|
#11
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Me podies fabricar una ?
|
#12
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Cita:
¿Podeis detallar un poquito mejor eso del bootloader? Yo compré los chismes en DX e hice el montaje (revisaré los pines que mencionas), pero luego no fui capaz de programarlo (igual sería eso del bootloader entre otras cosas) y lo he dejado aparcado también en parte por falta de tiempo y porque ya estoy usando señal SOG del GPS de a bordo que la electronica la puede usar para el VMG, y no me es muy necesario, pero me vendría bien terminarlo. Unas |
#13
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Cita:
¿tienes instalado el driver de ftdi? ¿al conectar el arduino al pc te sale un puerto serie USB com3 o com5? |
#14
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
A mi me sigue gustando mas la corredera no solo para saber la velocidad ya que el GPS te la dice tambien y mas fiable. Ni por tener en el equipo de viento el real y el aparente..... La corredera sirve tambien para valorar mejor las corrientes y su influencia en la navegacion......mediante la comparacion entre Corredera y Gps podemos decidir que bordo tomar respecto a la corriente imperante. Corredera ..........SI GPS /PLOTER ......TAMBIEN
__________________
"Los barcos estan mas seguros en el puerto, Pero no es para esto que se construyeron los barcos" Paulo Coelho. |
#15
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Cita:
Cita:
A mi me encataría llevar 1 corredora ultrasónica puesta en popa, en el timón o algún lugar que no me obligue a poner 1 pasacascos, pero no la he encontrado ni tengo ganas de adaptar 1 carísima sonda ultrasónica de momento. |
#16
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Saludos cofrades.
La idea me parece magnifica. No si se lo tengo claro, este equipo lo que mide es la velocidad sobre el fondo . No la velocidad sobre el agua . Que en el fondo no sustituye a la corredera. O estoy equivocado. Triodo |
#17
|
||||
|
||||
Simulador de corredera usando 1 GPS
Cita:
Hola jiauka. Te he puesto un privado también, pero parece que no te llega o tienes la entrada llena. Me puedes orientar sobre esto: Buenas, estoy intentando programar el Arduino con el Atmel Studio 6.2 pero no hay manera de compilar el código, me devuelve un error tal que así: Código:
unrecognized command line option '-Wl' ¿Alguien sería tan amable de decirme que estoy haciendo mal? Muchas gracias y un saludo |
#18
|
||||
|
||||
Simulador de corredera usando 1 GPS
Este este esquema es válido para el st60 raymarine?
Enviado desde mi iPhone utilizando Tapatalk |
#19
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
creo que sí, pero si puedes envia la foto con más resolución, se ve muy pequeña.
|
#20
|
||||
|
||||
Simulador de corredera usando 1 GPS
Espero que se vea mejor Enviado desde mi iPad con Tapatalk |
#21
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Hola.
Este es el esquema que adjunté en el post #88 de este hilo (siento que esté hecho a lápiz, un poco cutre, la verdad, pero creo que se entiende bien ). Comentar que el módulo GPS EM-411 que tengo montado tiene esos colores, pero hay otra versión que tiene todos los cables grises excepto uno negro. Creo que el negro coincide en los dos modelos y orden es el mismo aunque sean todos grises. Salud y suerte con el tema |
#22
|
||||
|
||||
Simulador de corredera usando 1 GPS
Cita:
Exactamente, de ahí cogí el esquema. El módulo lo tengo pedido pero no me ha llegado, hasta que no lo tenga no sabré que versión de cables trae. Como llevas el proyecto, lo tienes ya funcionando? Enviado desde mi iPhone utilizando Tapatalk |
#23
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Cita:
Salud |
#24
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Buenas noches a todos
Por favor jiauka, podrias volver a subir los ficheros con el codigo, porque en el primer mensaje aparece el codigo, pero no se si esta completo. Si tu o alguien lo tiene migrado al arduino ide, pues mejor. Yo tengo algo escrito en el arduino ide que me saca la velocidad en nudos y lo que quiero, es saber como mandarle por un pin (9) la info a la corredera, y eso no me acaba de quedar claro en el codigo que hay publicado. En fin nose si alguien me puede arrojar luz, muchas gracias. |
Los siguientes cofrades agradecieron este mensaje a masivas | ||
ManelvallsVila (12-04-2016) |
#25
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
En www.arduino.org te bajas el programa, facil de utilizar, yo lo hice antes de verano y funciona ! Los drivers me volvieron loco...
Enviado desde mi SM-T311 mediante Tapatalk |
Los siguientes cofrades agradecieron este mensaje a wostem | ||
jibaro (04-10-2016) |
Ver todos los foros en uno |
|
|