|
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 (26-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
Adjunto el esquema y el codigo fuente, no tiene mucho secreto, el GPS y el modulo están comprado en dealextreme:
http://www.dealextreme.com/p/arduino...0-81877?item=2 http://www.dealextreme.com/p/em-411-...t-80037?item=2 En los adjuntos está el esquema y el codigo fuente del software para el AVR studio 5.1 Y unas fotos del invento. Editado por jiauka en 22-02-2015 a las 16:57. |
6 Cofrades agradecieron a jiauka este mensaje: | ||
arcanos (25-04-2016), duendevelas (30-06-2015), GORDON MCFERGUSO (10-05-2012), JMPUIG (19-07-2013), teteluis (25-09-2015), tragamillas (10-05-2012) |
#8
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Yo quiero uno ! Te mando un privado y me dices el precio, si me lo quieres hacer.
El final de las correderas con caracolillo ! |
#9
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Mandame el precio por MP
|
#10
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Muchas gracias Jiauka, está genial
¿Que utilizas como pantalla? |
#11
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Como pantalla, la que lleves en el barco, yo uso 1 SIMRAD IS12 combi, aunque lo he porbado en 1 NAVMAN 100 y en raymarine ST40 y ST60 y funciona en todos ellos.
Lo que hace mi "invento" es sustituir el SENSOR de la corredera, el típico que siempre está sucio y no funciona. |
Los siguientes cofrades agradecieron este mensaje a jiauka | ||
Alandris (17-11-2018) |
#12
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
El invento me parece muy interesante, me pregunto si los valores que da el gps y salen en pantalla cambian muy rapidamente, en nuestro caso tomamos datos de una antena gps y salen en la radio y en el pc a traves del opencn, resulta que los valores sog oscilan a toda marcha y no hay forma de quedarse con un resultado mas o menos estable de velocidad.
Salud |
#13
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Buen trabajo
__________________
Electrónica marina y accesorios náuticos, al mejor precio - info@islanautica.es - 956 941 222 - El tfno. no está disponible las 24h, el email si. |
#14
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Cita:
Y si usas opencpn, en "toolbox settings" tienes la opción de filtrar los datos del GPS para que no sean tan erráticos. fuente: http://opencpn.org/ocpn/toolbox "Filter NMEA Course and Speed Data: Providing a rolling average of COG/SOG, with configurable sampling period. This feature is useful, for example, if you find that course and speed from the gps is varying erratically due to the sea state. The Dashboard plugin is not affected by this setting - COG and SOG are updated about once per second." |
#15
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Hola Jiauka, ojala me fuera bien a mi este invento ...
Para la corredera no tengo problemas porque yo sí tengo agujero en el casco y sacandola cuando no navego la mantengo en buen estado. Mi problema es que mi lector de viento solo me da el aparente. Tengo un SIMRAD IS15 que para calcular el viento real necesita que le lleguen velocidad y rumbo en formato NMEA 0813. Yo había pensado sacar esos datos de la antena activa GPS que tengo para la DSC de la radio y conectado al IS15 vía cable ROBLINK de SIMRAD. ¿Tu crees que me puede funcionar? Te enviaría el manual del IS15 pero no puedo subir al foro ficheros pdf > 200 KB's. Unas |
#16
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Probado y va fabuloso. Se acabaron los agujeros en el casco (para esto) y el molinete de la corredera como biotopo de diversidad marina
|
Los siguientes cofrades agradecieron este mensaje a Akakus | ||
jiauka (14-05-2012) |
#17
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
No había visto este hilo.
Me parece una fantástica idea, además porque uso una placa Arduino para el sistema de telemetría de a bordo, así que con tu permiso, copio la idea y añado tu invento a mi sistema . ... Y la corredera cambiada por el tapón Salu2. Carmelo ( O L A J E )
__________________
Call Sign: EA7AZH & 23Oscar2 en REMER |
#18
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Cita:
Ya me contarás como te va cuando lo montes |
#19
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Muchas gracias Jiauka
Acabo de hacer el pedido en el dealextreme Estoy ansioso por probarlo, tengo una pantalla bidata, pero solo me funciona la sonda, la corredera no la tengo puesta, llevo el tapón, pero se que funciona. Bueno, cuando monte tu invento ya te comentaré |
Los siguientes cofrades agradecieron este mensaje a lidiana | ||
SERENO (04-05-2013) |
#20
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Hola Jiauka !
Me he bajado tu código, y el software de arduino para windows, y veo que no puedo cargar tu código. Luego he visto que el código que has subido es para el AVRStudio. Bueno me he bajado y instalado el AVRStudio en mi PC, ya he podido abrir tu proyecto y lo he compilado sin errores. Ahora vienen las dudas ¿Como se programa el Arduino? Todavía no tengo el arduino Nano, pero me han dejado un arduino mega adk, y quería probar como se programa el arduino. Pero conecto mi arduino Mega al USB, y parece que me falta el driver Supongo que en AVRStudio, en Tools-> Avr Programing debería de detectar que tengo un arduino conectado al USB para que me deje programarlo Quizas cuando me llegue el arduino nano y lo conecte al usb ya me lo detectará? ¿Como tendré que hacer para programar el arduino nano? Saludos y gracias por todo |
#21
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Cita:
Si cuando lo tienes no te va, enviame 1 priv. Ahora mismo no tengo ni 1 solo PC con Windows. |
#22
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
Cita:
Ok!! A ver lo que tardo en recibir el paquete del Dealextreme . La última vez me tardó mas de 3 semanas . Saludos y gracias por todo |
#23
|
||||
|
||||
Re: Simulador de corredera usando 1 GPS
jiauka , tienes un MP
|
#24
|
||||
|
||||
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!!! |
#25
|
||||
|
||||
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) |
Ver todos los foros en uno |
|
|