Rispondi 
Costruzione pilota automatico per barca a vela
Autore Messaggio
pepilene Offline
Senior utente

Messaggi: 2.562
Registrato: Jun 2012 Online
Messaggio: #12
RE: Costruzione pilota automatico per barca a vela
Risolto il problema della rotta.
Adesso l'angolo deve flottare a 5 gradi della rotta "senza nessuna azione dell'attuatore " scostamenti ".



#include <LiquidCrystal.h>
              #include <Wire.h>  //i2c library for the Digital Compass
   
          
               
               LiquidCrystal lcd( 12, 11, 7, 8, 9, 10 );
               const int hmc5883Address = 0x1E; //0011110b, I2C 7bit address for compass
               const byte hmc5883ModeRegister = 0x02;
               const byte hmcContinuousMode = 0x00;
               const byte hmcDataOutputXMSBAddress = 0x03;
               
int rotta=0;         
int tressessanta=360;
int zero=0;   
      void setup()
      {
                // set up the LCD's number of columns and rows:
                lcd.begin(16, 2);
                lcd.clear();  //make sure screen is clear.
                lcd.print("pepilene ");
                delay(4000);
                Wire.begin(); // Start the i2c communication
                Wire.beginTransmission(hmc5883Address);  //Begin communication with compass
                Wire.write(hmc5883ModeRegister);  //select the mode register
                Wire.write(hmcContinuousMode); //continuous measurement mode
                Wire.endTransmission();


  
pinMode(2, OUTPUT);//LED FUTURO RELAIS MOTORE A SINISTRA
pinMode(3, OUTPUT);//LED IN FUTURO RELAIS MOTORE A DRITTA
pinMode(4, OUTPUT);//LED PILOTA ON /OFF


pinMode(1, INPUT);//INTERRUTTORE ON OFF PILOTA
pinMode(5, INPUT);//PULSANTE MEMORIZZA ROTTA NUOVA DALL'ANGOLO ATTUALE
pinMode(13, INPUT);//PULSANTE + DIECI GRADI A DRITTA
pinMode(6, INPUT);//PULSANTE - DIECI GRADI A SINISTRA


  
       }





void loop()
            {
 
                int x,y,z; 
                Wire.beginTransmission(hmc5883Address);
                Wire.write(hmcDataOutputXMSBAddress);  //Select register 3, X MSB register
                Wire.endTransmission();
                Wire.requestFrom(hmc5883Address,6);
                if(6<=Wire.available())
                {
                  x = Wire.read()<<8; //X msb
                  x |= Wire.read();   //X lsb
                  z = Wire.read()<<8; //Z msb
                  z |= Wire.read();   //Z lsb
                  y = Wire.read()<<8; //Y msb
                  y |= Wire.read();   //Y lsb   
                }
                         
              int angle = atan2(-y,x)/M_PI*180; // setta angolo SEMPRE POSITIVO
              if (angle < 0) // 360 gradi
      
              {
                angle = angle +360;  // 360 gradi
              }


//IL DISPLAY VISUALIZZA STATO ON OPPURE OFF E POI ROTTA E ANGOLO , NON PIù X,Y,Z CHE MI PARE SERVANO A POCO
 
                lcd.clear();  //make sure screen is clear again.
lcd.setCursor(0,0); 
if (digitalRead(1) == HIGH) {lcd.print("ON:");} else {lcd.print("OFF:");}
                lcd.setCursor(4,0); 
                lcd.print("rotta:");
                lcd.setCursor(0,1); 
                lcd.print("gradi:");              
                lcd.setCursor(11,0);
                lcd.print(rotta);                
                lcd.setCursor(11,1);
                lcd.print(angle);              
                delay(500);
                
//PRIMA VA IMPOSTATA LA ROTA PREMENDO IL BOTTONE 5 
if (digitalRead(5) == HIGH) {rotta = angle;}


//POI VA AVVIATO IL PILOTA CON L'INTERRUTTORE 1         
if (digitalRead(1) == HIGH) {digitalWrite(4, HIGH);
  
//PILOTA ADESSO AVVIATO FUNZIONANO I TASTI PER CAMBIARE ROTTA


            // AUMENTA L'ANGOLO DI ROTTAThumbsupsmileyanim
if (digitalRead(6) == HIGH) 
             {
              rotta = rotta + 10;


             // ORA RIPORTA I VALORI DENTRO I 360 GRADIThumbsupsmileyanim
             if (rotta > tressessanta) { rotta = rotta - tressessanta;}
             delay(30);
            }
            
              // DIMINUISCI L'ANGLO DI ROTTA
if (digitalRead(13) == HIGH) 
             {
              rotta = rotta - 10;


              // ORA RIPORTA I VALORI DENTRO I 360 GRADIThumbsupsmileyanim
              if (rotta < zero) {rotta = rotta + tressessanta;}
              delay (30);
             }  
   // PILOTA AUTOMATICAMENTE AUTONOMO      Smiley30    
if (rotta < angle){digitalWrite(3, HIGH); delay(100);digitalWrite(3, LOW); delay(100);}
else {digitalWrite(2, HIGH);delay(100);digitalWrite(2, LOW);delay(100);}
    }
else
  {digitalWrite(3, LOW);}
}

Il destino mescola le carte, ma siamo noi a giocarle.


(Questo messaggio è stato modificato l'ultima volta il: 16-02-2016 07:36 da pepilene.)
16-02-2016 07:26
Trova tutti i messaggi di questo utente Cita questo messaggio nella tua risposta
Rispondi 


Messaggi in questa discussione
RE: Costruzione pilota automatico per barca a vela - pepilene - 16-02-2016 07:26

Discussioni simili
Discussione: Autore Risposte: Letto: Ultimo messaggio
  Strumento di controllo del pilota mod Raymarine ST6001 - compatibilità? crocchidù 1 493 27-11-2023 07:38
Ultimo messaggio: pepe1395
  Pilota st4000 impazzito Francescobissotwo 4 542 15-10-2023 20:53
Ultimo messaggio: Francescobissotwo
  Pilota ST6000...'NO LINK' ???? Madinina II 32 7.587 14-09-2023 16:22
Ultimo messaggio: Poliorcete
  Problemi pilota st 4000 CUCUDRIL 0 449 12-09-2023 11:14
Ultimo messaggio: CUCUDRIL
  Pilota automatico a ruota che resta agganciato torcido 14 982 29-07-2023 12:34
Ultimo messaggio: torcido
  Consiglio pilota automatico giorgio8596 15 1.287 13-07-2023 17:09
Ultimo messaggio: giorgio8596
  St70 - Pilota automatico vaimo 4 720 05-07-2023 16:39
Ultimo messaggio: vaimo
  Pilota automatico blocca la ruota Masmau 30 3.139 24-04-2023 08:41
Ultimo messaggio: Masmau
  Comandare il pilota automatico con apple watch (o simile) sema23 1 523 21-04-2023 21:19
Ultimo messaggio: Antaniiii
  Rumore pilota automatico Raymarine Ev 100 Francodepoi 6 1.434 14-11-2022 01:12
Ultimo messaggio: Francodepoi

Vai al forum:


Utente(i) che stanno guardando questa discussione: 16 Ospite(i)