V.M.G. (Velocity made good) con arduino

Buonasera a tutti. Posseggo un’imbarcazione a vela di 4 metri (laser) e mi servirebbe un pò di strumentazione. Purtroppo =( tutto ciò che riguarda la nautica costa fior di quattrini. Vorrei costruirmi uno strumento che rilevi la velocità e calcoli la vmg (http://it.wikipedia.org/wiki/Velocity_Made_Good) La vmg si calcola con la formula {cos(?)v} dove ? è l'angolo di scostamento rispetto alla traiettoria diretta, e V è la velocità in quel momento. La mia domanda è: é possibile misurare la velocità mediante un sensore a magnete da bici che rileva i movimenti di una ruota a pale (log) e trasferirla ad un **arduino uno*? È possibile poi, che arduino calcoli la vmg (io gli inserisco i dati da una tastiera)? Come faccio a far si che mi appaia la vmg o la velocità su uno schermo lcd (mi pare a 10 entrate)

Non vi mettete a dare consigli sull'impermeabilizzazione, perchè quella non è un problema

Grazie

smanettone01: Purtroppo =( tutto ciò che riguarda la nautica costa fior di quattrini.

Vero, ho un pochino di esperienza lavorativa con la strumentazione nautica e in effetti ci vuole un sacco di soldi :)

Vorrei costruirmi uno strumento che rilevi la velocità e calcoli la vmg

A mio avviso fai prima con un buon ricevitore GPS, passi i dati di velocità e rotta ad Arduino e lui ti calcola la vmg, possibile aggiornare il dato fino a 10 volte al secondo spendendo non più di 60 Euro per il modulo GPS.

astrobeed:

smanettone01: Purtroppo =( tutto ciò che riguarda la nautica costa fior di quattrini.

Vero, ho un pochino di esperienza lavorativa con la strumentazione nautica e in effetti ci vuole un sacco di soldi :)

Vorrei costruirmi uno strumento che rilevi la velocità e calcoli la vmg

A mio avviso fai prima con un buon ricevitore GPS, passi i dati di velocità e rotta ad Arduino e lui ti calcola la vmg, possibile aggiornare il dato fino a 10 volte al secondo spendendo non più di 60 Euro per il modulo GPS.

rimane che c'è un calcolo da fare il che implica il problema che arduino non riesce a fare questi calcoli.

in pratica da quello che ricordo la VMG è la velocità derivata dal rapporto della distanza tra 2 boe e il tempo impiegato per girarle (infatti la barca non potendo andare controvento necessita di fare più bordi il che fa "perdere" vmg)

quindi si col gps risolveresti ogmi problema ma non puoi collegarla ad arduino uno ma due (il che pone una conoscenza almeno discreta dell'elettronica per non bruciare niente) inoltre ciò che mi preoccuperebbe non è il sistema di misura ma l'isolazione e il collocamento (io ho ancora una bottiglia mezza piena d'acqua che gira per li gavone del mio di laser =( )

superlol: quindi si col gps risolveresti ogmi problema ma non puoi collegarla ad arduino uno ma due (il che pone una conoscenza almeno discreta dell'elettronica per non bruciare niente)

Non sono d'accordo, almeno stando al calcolo indicato, il GPS ti fornisce velocità e rotta istantanea, sono valori trattabili con i float 32 bit, lo scostamento dalla rotta è dato dalla differenza tra il valore ideale per raggiungere la boa, che deve essere noto prima, e quello reale rilevato dal GPS, meglio ancora se si aggiunge una bussola elettronica compensata in pan e tilt, poi il calcolo è un banale coseno che non richiede certo i double come precisione. Va da se che utilizzando una DUE, non è vero che c'è tutta questa criticità elettronica, anzi è pure meglio perché i GPS lavorano a 3.3V, è possibile inserire direttamente le coordinate GPS delle varie boe da doppiare e avere tutto in automatico senza dover preventivamente calcolare ed introdurre manualmente la rotta ideale.

rimane che c'è un calcolo da fare il che implica il problema che arduino non riesce a fare questi calcoli.

Io ho trovato a questo link(http://arduino.cc/en/Reference/Cos) la spiegazione di come arduino può calcolare il coseno

(io ho ancora una bottiglia mezza piena d'acqua che gira per li gavone del mio di laser =( )

Perchè, cosa hai fatto?

A mio avviso fai prima con un buon ricevitore GPS, passi i dati di velocità e rotta ad Arduino e lui ti calcola la vmg, possibile aggiornare il dato fino a 10 volte al secondo spendendo non più di 60 Euro per il modulo GPS.

dovendo configurare il tutto in modo che arduino prenda i dati dal gps, la faccenda si complica.

Ps. Siamo sicuri che le entrate/uscite bastano per collegare un ricevitore gps in entrata, uno schermo lcd in uscita, un pulsante da premere per segnalare la posizione della boa, ed eventuali tasti di accensione/spegnimento?

Guardando in giro sarei più propenso ad usare un arduino nano, dato le piccole dimensioni che gli permetterebbero di essere inserito in un piccolo contenitore a tenuta stagna.

Comunque sai che devi mettere tutto in una scatola stagna. L' acqua salata distrugge tutto in poco tempo. Ciao Uwe

smanettone01: Guardando in giro sarei più propenso ad usare un arduino nano, dato le piccole dimensioni che gli permetterebbero di essere inserito in un piccolo contenitore a tenuta stagna.

Il GPS richiede solo un pin di Arduino, quello Rx, il display sei pin, il pulsante solo uno, totale otto pin, dire che te ne avanzano molti :) Va da se che prima di utilizzare il sistema devi memorizzare le varie rotte ideali per le boe altrimenti Arduino non può calcolarti la vmg senza questo dato.

astrobeed:

smanettone01: Guardando in giro sarei più propenso ad usare un arduino nano, dato le piccole dimensioni che gli permetterebbero di essere inserito in un piccolo contenitore a tenuta stagna.

Il GPS richiede solo un pin di Arduino, quello Rx, il display sei pin, il pulsante solo uno, totale otto pin, dire che te ne avanzano molti :) Va da se che prima di utilizzare il sistema devi memorizzare le varie rotte ideali per le boe altrimenti Arduino non può calcolarti la vmg senza questo dato.

In che senso le rotte ideali? Non basta dirgli le posizioni delle boe?

Ps. Considerando di usare il ricevitore gps, sarebbe possibile salvare la rotta eseguita in una memoria sd oppure la faccenda si complica troppo?

Ho gia un contenitore a tenuta stagna, che con piccole modifiche potrei adattare a questo scopo.

Be', dato che dubito che Arduino possa gestire mappe e cartografia grafica (:P), dovresti almeno fare un giro di "ricognizione" salvando la posizione consecutiva della partenza, traguardo e delle varie boe nello stesso ordine in cui le devi passare ... quello penso puoi farlo dicendogli con un pulsante di salvare la posizione del tuo punto ogni volta che ti trovi sulo start, e poi ad ogni boa, fino all'arrivo ...

smanettone01: In che senso le rotte ideali? Non basta dirgli le posizioni delle boe?

No, Arduino non è in grado di fare conti tra coordinate GPS, è una pura questione di limiti matematici, Arduino al massimo usa i float a 32 bit mentre per quel tipo di calcoli servono i double a 64 bit. Però adesso dovresti spiegarmi come pensavi di ricavare la VMG partendo da un semplice sistema, la ruota a pale, che ti fornisce solo la velocità attuale e non la rotta corrente e quella ideale.

Ps. Considerando di usare il ricevitore gps, sarebbe possibile salvare la rotta eseguita in una memoria sd oppure la faccenda si complica troppo?

Puoi facilmente fare un log delle sentenze NMEA del GPS che poi analizzi, con comodo, su un pc con opportuno software cartografico.

Però adesso dovresti spiegarmi come pensavi di ricavare la VMG partendo da un semplice sistema, la ruota a pale, che ti fornisce solo la velocità attuale e non la rotta corrente e quella ideale.

Io volevo ottenere la vmg moltiplicando il coseno dell'angolo di scostamento dalla rotta diretta per la velocità in quel momento.

Io avevo intenzione di inserire la rotta corrente (in gradi) e lui, facendo la sottrazione con quella diretta, facendone il coseno e moltiplicando il tutto per la velocità istantanea, troverebbe la VMG

smanettone01: Io avevo intenzione di inserire la rotta corrente (in gradi) e lui, facendo la sottrazione con quella diretta, facendone il coseno e moltiplicando il tutto per la velocità istantanea, troverebbe la VMG

Quindi inserimento manuale, il che richiede l'aggiunta di un tastierino numerico.

Quindi inserimento manuale, il che richiede l'aggiunta di un tastierino numerico.

Mi pare sia più semplice utilizzare un tastierino che dover interfacciare il tutto con il gps.

A questo punto arduino svolgerebbe solo la funzione di calcolatore

nel frattempo sono andato avanti per quanto riguarda la programmazione:

#include <LiquidCrystal.h>

#define TURN 6
#define ENCODER_MENO 7
#define ENCODER_PLUS 8
#define SELETTORE 9

const int DIAM=5;
int VMG=0;
const int RIGHE=4;
const int COLONNE=1;
int SPEED=0;
int WIND_ANGLE=0;
int WIND_ANGLE_DIG=0;
int TEMPO_RIV=0;
int WIND_ANGLE_TRUE=0;


LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  lcd.begin(RIGHE,COLONNE);
  pinMode(TURN,INPUT);
  pinMode(ENCODER_MENO,INPUT);
  pinMode(ENCODER_PLUS,INPUT);
  pinMode(SELETTORE,INPUT);
  
  }
void loop() {
  TEMPO_RIV=(pulseIn(TURN,LOW)+pulseIn(TURN,HIGH));
  SPEED=((((DIAM*3,14)/1000)*1,943844492)/TEMPO_RIV); //dichiara la velocità in nodi e tale valore viene assegnato alla variabile SPEED
  if(ENCODER_MENO,HIGH){ //se l'encoder diventa negativo...
    WIND_ANGLE=WIND_ANGLE-1; //...sottrai (uno) alla variabile WIND_ANGLE
  }
  else if(ENCODER_PLUS,HIGH){ //se l'encoder diventa positivo...
  WIND_ANGLE=WIND_ANGLE+1; //...aggiungi (uno) alla variabile WIND_ANGLE
  }
  if(WIND_ANGLE>359){ //se l'angolo è maggiore di 360...
    WIND_ANGLE=WIND_ANGLE-360; //...sottrai 360
  }
  else if(WIND_ANGLE<0){ //se l'angolo è minore di 1
    WIND_ANGLE=WIND_ANGLE+360; //...aggiungi 360
  }
  WIND_ANGLE=WIND_ANGLE_TRUE;
  
  if((WIND_ANGLE>180)and(WIND_ANGLE<=359)){ //se l'angolo è compreso tra 359 e 180 escluso...
    WIND_ANGLE=WIND_ANGLE_DIG; //rendi uguali le due variabili
    WIND_ANGLE_DIG=360-WIND_ANGLE_DIG; //sottrai l'angolo al vento a 360
  }
  
  
  VMG=(cos(WIND_ANGLE_DIG)*SPEED); //calcola la wmg
  
  if((WIND_ANGLE_TRUE>180)and(WIND_ANGLE_TRUE<=359)){
    WIND_ANGLE_TRUE=WIND_ANGLE_TRUE-360;}
  
  
  
  if((WIND_ANGLE_DIG>=90)and(SELETTORE,HIGH)){ //se l'angolo al vento è maggiore di 90
    lcd.print("max 90"); //dai un messaggio di errore
  }
  else if((WIND_ANGLE_DIG<90)and(SELETTORE,HIGH)){
  lcd.print(VMG); //altrimenti stampa a video la vmg
  }
 
  else if(SELETTORE,LOW){ //se il tasto non è premuto...
    lcd.print(SPEED);//stampa a video la velocità
    delay(1000);//aspetta un secondo
    lcd.print(WIND_ANGLE_TRUE); //stampa a video l'angolo al vento apparente
    delay(1000); //aspetta un secondo
  }

}

per semplificare ho pensato di calcolare la vmg secondo il vento e non secondo la rotta. userei una bandierina segnavento, che invia il segnale ad arduino mediante un encoder. il problema è che se la rotellina gira lenta, potrebbe dare l’impulso per più di un colpo di clock, ma se aggiungo un “delay()”, alcuni scatti potrebbero non essere considerati.
La cosa migliore sarebbe far si che arduino consideri l’impulso quando il segnale passa da HIGH a LOW
se ciò non fosse possibile, avrei pensato di collegare la bandierina non ad un encoder, ma ad un potenziometro, convertendo così l’impulso digitale, nel’angolo al vento (espresso in 360esimi)

Ciao, io sto facendo un sistema di telemetri per la tesi, tecnicamente per ora io faccio solo rilevazione (in regata non possiamo usare strumentazione) però poi dai dati che ho è un gioco da ragazzi calcolarsi le rotte, magari un po' approssimate ma ce la fai.

Come sensori ho il GPS e mi sto costruendo un segnavento e anemometro. Oltre a tanta altra roba che poi a te non servirà...se vuoi scrivimi che magari ci consigliamo a vicenda

ciao, Andrea