creare un gps

Io voglio metterlo sulla moto, ma senza GPRS, ci metto un XTree se si chiamano così non mi ricordo, quella specie di xbee da 64 km e appena becco il tipo che mi ha rubato la moto paga ogni singolo minuto in cui il mio bolide non è stato in garage o in pista sotto il mio reale culetto ]:D

@lesto

Io non sto parlando di proteggere macchinoni dove vengono ladri attrezzati per rubartela, ma di normali macchine/motorini… Del resto se avessi un macchinone da 20 o 40 k lo proteggerei con un buon antifurto di certo non costruito da me XD
Come dici tu a volte rubano per farsi il giretto, e così penso sia successo al mio motorino (solo che non l’ho più ritrovato)!

legacy:

xelendilx: Come dici tu a volte rubano per farsi il giretto, e così penso sia successo al mio motorino (solo che non l'ho più ritrovato)!

si vede che si sono dimenticati dove l'hanno tirato su o e' finita la benza ed erano n-mila km da li e con le Superga ai piedi che sono scarpe fighe ma anche note per farti venire i mega calli se spingi un motorino (che non e' manco tuo) per Km eh, oh, porelli, l'avran mollato in qualche campo =P

anche a me han fregato il motorino un phantom 50 che faceva i 120Km/h con almeno 1000 euro di lavori tra cui il mega kit malossi (roba delle superiori, che bamba) eh li o si son divertiti in pista o si sono schiantati da qualche parte, quel mezzo era instabilissimo

ma mi han fatto un gran favore perche' quel coso sputava benzina dalla marmitta e faceva cosi' tanto baccano che mi stampava sempre la pula con mega predicozzi che manco i miei mi han mai fatto e me le cantavano sempre con la stessa canzone, come stare in televisione, non ne potevo piu'

poi ho preso la vespa, sempre un 50no, un rottame che ho sabbiato stuccato riverniciato e messo in targa ho sempre pensato che son meglio le marce del variatore

A me hanno rubato un sr 50 che avevo dall'inizio del liceo, e da allora solo metro =( =( =( =( =( =( =(

Tornando al topic forse questo potrebbe essere un modulo gps adatto…

Ho uno di quei moduli e funziona molto bene ! Occhio però.. me l'hanno fermato in dogana e mi hanno appioppato oltre al suo costo altri 14 euro

solo lui ho avevi preso altro ? non dovrebbero applicare dazi su cifre cosi' basse

Testato: solo lui ho avevi preso altro ? non dovrebbero applicare dazi su cifre cosi' basse

Solo lui... è stato il mio unico acquisto materiale in USA..

Questo fatto della dogana non ci voleva.. Se riuscite a trovare qualche alternativa più economica postate.

Intanto io ho scoperto che ci sono una caterva di sony ericson che possono essere utilizzati per inviare messaggi. Qui trovate la lista. Io possiedo un t68i, anche se non so se funziona ancora. Mi mancano però il caricabatteria ed il cavo dati (che tra l'altro non mi pare fosse incluso). Qui c'è il codice per usarlo e dice di usare un cavo dati che ha comprato per un paio di dollari, ma non fornisce ulteriori informazioni. Inoltre non ho idea sinceramente se debba essere usato qualche circuito tipo max232 (lui dice che nel suo caso tutta la circuiteria era inclusa...). Qualcuno ha avuto esperienze del genere?

di telefoni basta che abbiano il modem integrato, ce ne sono moltissimi, gli ericcson sono famosi perche’ furono fra i primi a sfruttare e pubblicizzare queste funzionalita’, ma anche moltissimi nokia vanno bene, cerca se ha il modem integrato o meno.
Ricordo anche che all’epoca iniziarono ad uscire soluzioni di modem sw per i tel che non ne erano provvisti ma non ho mai approfondito perche’ stavo bene attento a comprare sempre tel con modem.

per il cavo l’unica difficolta’ puo’ essere il connettore, trovato quello, o se riesci a saldare i cavetti direttamente al connettore, dovrai fare un adattatore usb seriale a 3,3v cerca notizie in tal senso e ne trverai a fiotte o gia’ fatti su ebay

In realtà penso di essere riuscito a trovare il cavo dati su ebay a 5 euro!

Dunque, correggimi se sbaglio, essendo un cavo dati usb mi dovrebbe bastare tagliarlo e pescare i cavi giusti...

metti il link e vediamo, cmq in linesa di massima si, devi controllare se e' a 3,3v ma se e' del modello esatto di telefono non devi tagliarlo, oppure intendi usarlo per altrop ? io ad esempio quando li trovo a meno, sui 1 - 1,5 euro, li compro per fare da seriale per arduino

http://www.ebay.it/itm/360473036679?ssPageName=STRK:MEWAX:IT&_trksid=p3984.m1423.l2649

Siccome usb è a 5V penso che se lo taglio dalla parte dell'usb posso comandarlo con segnali a 5V (quindi mediante arduino). Poi se il cellulare accetta 3.3V ci sarà una circuiteria dalla parte del connettore del cellulare, no?

Chissà se posso evitare di prendere anche il caricabatterie e lo carico con questo...

no, in tal senso non puo' essere usato, "per questo quello e quell'altro motivo" :)

arduino on ha una usb host, ed anche se ne prendi una host (la mega adk), ci sarebbero rpoblemi di driver, non so se e' mai stato provato un adattaore del genere via host, in teoria potrebbe funzionare, cmq non ha senso farlo.

Se vuoi restare sul cavo dati da comprare devi trovarne uno seriale, quello lo potrai attaccare alla seriasle di arduino, hw o sw

Ciao, visto che si parla di GPS volevo ritornare al topic…
insieme ad un mio amico abbiamo compilato un codice che con una antenna gps, un lcd, ed un bottone visualizza vari dati dando la possibilita’ di cambiare schermata:

  #include <TinyGPS.h>
  #include <LiquidCrystal.h>
  //#include <Servo.h>
  TinyGPS gps;
  
  // constants won't change. They're used here to 
  // set pin numbers:
  
  //Servo mymotor;

  
  LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
  const int buttonPin = 8;     // the number of the pushbutton pin
  const int ledPin =  13;      // the number of the LED pin
  int output = 0;             // the button starting state
  int lastButtonState = LOW;   // the previous reading from the input pin
  long lastDebounceTime = 0;  // the last time the output pin was toggled
  long debounceDelay = 300;    // the debounce time; increase if the output flickers
  unsigned long loopTime = millis(); // the time for loop screen change
  unsigned long delayLoopData = millis();
  int tempPin = 0;
  unsigned long age, date, time, chars,fix_age, course;
  int year, speed;
  float tempC;
  int reading;
  byte month, day, hour, minute, second, hundredths;
  long lat, lon;

  
  void setup()
  //Inizialize LCD, serial rate of your GPS Antenna, Button and Led
  {
   lcd.begin(16, 2);
  // mymotor.attach(6);
   Serial.begin(38400); 
   pinMode(buttonPin, INPUT);
   pinMode(ledPin, OUTPUT);
   analogReference(INTERNAL);  //used for LM35 temperature calculation
   
   //Print a message to the LCD / Serial.
   lcd.print("  Mao & GmB GPS");
   Serial.println(" Mao & GmB GPS");
   lcd.setCursor(0, 1);
   lcd.print("   Vers.: 0.1");
   Serial.println("Vers.: 0.1");
   delay(3000);
   lcd.clear();
    
    bool newdata = false;
   
   //Check for valid NMEA Sentence, if not print a message to LCD / serial
   { 
    if (newdata = false)
      lcd.setCursor(0, 0);
      lcd.print("Ricerca");
      Serial.println("Ricerca Satelliti...");
      lcd.setCursor(0, 1);
      lcd.print("Satelliti....    ");
   }
  }
  
  
  void loop()
  //Reading Button, Debounce noise, increment output up to 4 screen before reset output to 0
  {  
    int reading = digitalRead(buttonPin);
     if(reading==1) {
       if ((millis() - lastDebounceTime) > debounceDelay ){
           lastDebounceTime = millis();
           feedgps();
           if(output<4){
             output++;
           }else{
             output=0;
           }
       }
     }
     
    bool newdata = false;
    {
      if (feedgps()){
        newdata = true;
      }
    }
    
    if (newdata)
    {   
      if(millis() - loopTime > 1000){
        gpsdump(gps);
        loopTime=millis();
      }
    }
  } 
  
  //Format data Longitude and Latitude in Degree and add Ordinates
  String format_coords(long tmp,String label){
         String temporary_string=(String)tmp;
         if(tmp<1000000){
          temporary_string ="0"+temporary_string;
         }
         if(label.indexOf("Lat")>=0){
           if(tmp>0){
             temporary_string +=" N";
           }else{
             temporary_string +=" S";
           }
         }else{
           if(tmp>0){
             temporary_string +=" E";
           }else{
             temporary_string +=" W";
           }
         }
         return label + temporary_string.substring(0,2) + (char)223 + temporary_string.substring(2,4) + "." + temporary_string.substring(4);
  }
  
  //Format data Hours
  String format_time(int hour,int minute,int second){
  
     String separator=":";
     String h=(String)hour;
     if(h.length()<2) h="0"+h;
     String m=(String)minute;
     if(m.length()<2) m="0"+m;
     String s=(String)second;
     if(s.length()<2) s="0"+s;
     return "Time: " + h + separator + m + separator + s;    
  }
  
  //Format data Day Month and Year
  String format_date(int day, int month,int year){
     String separator="/";
     String d=(String)day;
     if(d.length()<2) d="0"+d;
     String m=(String)month;
     if(m.length()<2) m="0"+m;
     String y=(String)year;
     if(y.length()<4) y="20"+y;
     return "Date: " + d + separator + m + separator + y;
  }
  
  bool feedgps()
  {
    while (Serial.available())
    {
        if (gps.encode(Serial.read()))
          return true;
    }
    return false;
  }
  
  void gpsdump(TinyGPS &gps)
  {
    lcd.setCursor(0, 0);
    lcd.clear();
    feedgps();
    digitalWrite(ledPin, HIGH);
    
    
    //Define every Screen reading       
         if(output==0){
             Serial.println("RotatingScreen 1");      
             if (millis() - delayLoopData > 7000)
            {
              delayLoopData=millis();
             goto scheda_2;
           }else if (millis() - delayLoopData > 5000)
            {           
             goto scheda_3;
           }else if (millis() - delayLoopData > 3000)
            {
             goto scheda_4;
            }else if (millis() - delayLoopData > 1000)
            {
             goto scheda_5;
            }
         }
         
         if(output==1){
           feedgps();
           scheda_2:
           Serial.println("Screen 2");
           gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
           lcd.print(format_date(day,month,year));
           Serial.print(format_date(day,month,year));
           lcd.setCursor(0, 1);
           lcd.print(format_time(static_cast<int>(hour + 7),minute,second));
           Serial.print(format_time(static_cast<int>(hour + 7),minute,second));          
         } 
       
         if(output==2){
           scheda_3:
           Serial.println("Screen 3");    
           gps.get_position(&lat, &lon, &fix_age);
           lcd.print(format_coords(lat,"Lat: "));
           Serial.print(format_coords(lat,"Lat: "));
           lcd.setCursor(0, 1);
           lcd.print(format_coords(lon,"Lon: "));
           Serial.print(format_coords(lon,"Lon: "));
       
        } 
        if(output==3){
           scheda_4:
           Serial.println("Screen 4");
           lcd.print("Speed: "); 
           lcd.print(gps.f_speed_kmph()) + 1; lcd.print(" km/h");
           Serial.print("Speed: ");
           Serial.println(gps.f_speed_kmph());
           lcd.setCursor(0, 1);
           lcd.print("Dir: ");
           lcd.print(TinyGPS::cardinal(gps.f_course()));
           Serial.print("Dir: ");
           Serial.println(TinyGPS::cardinal(gps.f_course()));
        }
        
        if(output==4){
          scheda_5: 
          Serial.println("Screen 5");
           reading = analogRead(tempPin);
           tempC = reading / 9.31;
           lcd.print("Temp: ");lcd.print(tempC); lcd.print(char(223));lcd.print("C");
           Serial.print("Temperatura: ");
           Serial.println(tempC);
        }
  }

Attualmente il Led si accende non appena acquisito un FIX ma se poi tale fix viene perso il led rimane acceso ed il display fa vedere l’ultimo dato ricevuto.
Vorrei invece che il led si spenga (per poi riaccendersi nuovamente ricevuto il Fix) e che nel mentre il display visualizzi: “Lost Fix” + nella seconda riga la temperatura (dato sempre disponibile su A0).
ho fatto parecchie prove ma niente…
Spero in un vs aiuto
Mauro

salentino: salve sono uno nuovo in questo sito vorrei capire cosa e quanto si può fare cn questa ottima skeda ;) in poche parole vorrei sapere se si può creare un dispositivo gps ke si possa rintraccire via pc poi!

allora: questi sistemi in realta non funzionano, ci sono gia ma effettivamnte non funzionano,

il punto debole di questi sistemi e che si appoggiano su un cellulare mettere fuori uso un cell nel giro di 10-20 metri e la cosa piu semplice del mondo ci sono dispositivi in vendita chiamati cellular killer oltre a sistemi fatti aapposta per i ladri,

un ladro "degno di questo nome " prima di portarti via l'auto schiaccia un bottone su una scatoletta che ha in tasca e sia il cellulare che il gps vanno in "tilt" e l'auto viene sempre portata in giro con questi dispositivi in funzione fino a che non disattivano tutto se necessario, quindi come antifurto lascerei perdere,

molto meglio un antifurto "ritardato" tipo auto accesa 5 minuti e poi l'auto va in blocco

Testato:
no, in tal senso non puo’ essere usato, “per questo quello e quell’altro motivo” :slight_smile:

arduino on ha una usb host, ed anche se ne prendi una host (la mega adk), ci sarebbero rpoblemi di driver, non so se e’ mai stato provato un adattaore del genere via host, in teoria potrebbe funzionare, cmq non ha senso farlo.

Se vuoi restare sul cavo dati da comprare devi trovarne uno seriale, quello lo potrai attaccare alla seriasle di arduino, hw o sw

Nel link che ho postato sembra usi proprio un cavo dati normale e lo connetto all’arduino…

http://www.timzaman.nl/?p=47&lang=en

Fa una forzatura, i Tel non hanno seriali a 5v, ma possono essere 5vtolerant , sarebbe da controllare in base al Tel che prendi. Ora che ci penso sono andato fuori strada. Non ti serve adattatore rs232, anche perché avrebbe i segnali invertiti. A te serve il connettore, lo tagli da un adattatore qualsiasi, e poi metti una res da 2,2k in serie a tx arduino in modo da stare tranquillo verso il Tel

MauroHKT:
Ciao, visto che si parla di GPS volevo ritornare al topic…
insieme ad un mio amico abbiamo compilato un codice che con una antenna gps, un lcd, ed un bottone visualizza vari dati dando la possibilita’ di cambiare schermata:

  #include <TinyGPS.h>

#include <LiquidCrystal.h>
  //#include <Servo.h>
  TinyGPS gps;
 
  // constants won’t change. They’re used here to
  // set pin numbers:
 
  //Servo mymotor;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
  const int buttonPin = 8;     // the number of the pushbutton pin
  const int ledPin =  13;      // the number of the LED pin
  int output = 0;             // the button starting state
  int lastButtonState = LOW;   // the previous reading from the input pin
  long lastDebounceTime = 0;  // the last time the output pin was toggled
  long debounceDelay = 300;    // the debounce time; increase if the output flickers
  unsigned long loopTime = millis(); // the time for loop screen change
  unsigned long delayLoopData = millis();
  int tempPin = 0;
  unsigned long age, date, time, chars,fix_age, course;
  int year, speed;
  float tempC;
  int reading;
  byte month, day, hour, minute, second, hundredths;
  long lat, lon;

void setup()
  //Inizialize LCD, serial rate of your GPS Antenna, Button and Led
  {
   lcd.begin(16, 2);
  // mymotor.attach(6);
   Serial.begin(38400);
   pinMode(buttonPin, INPUT);
   pinMode(ledPin, OUTPUT);
   analogReference(INTERNAL);  //used for LM35 temperature calculation
   
   //Print a message to the LCD / Serial.
   lcd.print("  Mao & GmB GPS");
   Serial.println(" Mao & GmB GPS");
   lcd.setCursor(0, 1);
   lcd.print("   Vers.: 0.1");
   Serial.println(“Vers.: 0.1”);
   delay(3000);
   lcd.clear();
   
    bool newdata = false;
   
   //Check for valid NMEA Sentence, if not print a message to LCD / serial
   {
    if (newdata = false)
      lcd.setCursor(0, 0);
      lcd.print(“Ricerca”);
      Serial.println(“Ricerca Satelliti…”);
      lcd.setCursor(0, 1);
      lcd.print(“Satelliti…    “);
   }
  }
 
 
  void loop()
  //Reading Button, Debounce noise, increment output up to 4 screen before reset output to 0
  { 
    int reading = digitalRead(buttonPin);
     if(reading==1) {
       if ((millis() - lastDebounceTime) > debounceDelay ){
           lastDebounceTime = millis();
           feedgps();
           if(output<4){
             output++;
           }else{
             output=0;
           }
       }
     }
     
    bool newdata = false;
    {
      if (feedgps()){
        newdata = true;
      }
    }
   
    if (newdata)
    {   
      if(millis() - loopTime > 1000){
        gpsdump(gps);
        loopTime=millis();
      }
    }
  }
 
  //Format data Longitude and Latitude in Degree and add Ordinates
  String format_coords(long tmp,String label){
         String temporary_string=(String)tmp;
         if(tmp<1000000){
          temporary_string =“0”+temporary_string;
         }
         if(label.indexOf(“Lat”)>=0){
           if(tmp>0){
             temporary_string +=” N”;
           }else{
             temporary_string +=" S";
           }
         }else{
           if(tmp>0){
             temporary_string +=" E";
           }else{
             temporary_string +=" W";
           }
         }
         return label + temporary_string.substring(0,2) + (char)223 + temporary_string.substring(2,4) + “.” + temporary_string.substring(4);
  }
 
  //Format data Hours
  String format_time(int hour,int minute,int second){
 
     String separator=":";
     String h=(String)hour;
     if(h.length()<2) h=“0”+h;
     String m=(String)minute;
     if(m.length()<2) m=“0”+m;
     String s=(String)second;
     if(s.length()<2) s=“0”+s;
     return “Time: " + h + separator + m + separator + s;   
  }
 
  //Format data Day Month and Year
  String format_date(int day, int month,int year){
     String separator=”/";
     String d=(String)day;
     if(d.length()<2) d=“0”+d;
     String m=(String)month;
     if(m.length()<2) m=“0”+m;
     String y=(String)year;
     if(y.length()<4) y=“20”+y;
     return "Date: " + d + separator + m + separator + y;
  }
 
  bool feedgps()
  {
    while (Serial.available())
    {
        if (gps.encode(Serial.read()))
          return true;
    }
    return false;
  }
 
  void gpsdump(TinyGPS &gps)
  {
    lcd.setCursor(0, 0);
    lcd.clear();
    feedgps();
    digitalWrite(ledPin, HIGH);
   
   
    //Define every Screen reading       
         if(output==0){
             Serial.println(“RotatingScreen 1”);     
             if (millis() - delayLoopData > 7000)
            {
              delayLoopData=millis();
             goto scheda_2;
           }else if (millis() - delayLoopData > 5000)
            {           
             goto scheda_3;
           }else if (millis() - delayLoopData > 3000)
            {
             goto scheda_4;
            }else if (millis() - delayLoopData > 1000)
            {
             goto scheda_5;
            }
         }
         
         if(output==1){
           feedgps();
           scheda_2:
           Serial.println(“Screen 2”);
           gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
           lcd.print(format_date(day,month,year));
           Serial.print(format_date(day,month,year));
           lcd.setCursor(0, 1);
           lcd.print(format_time(static_cast(hour + 7),minute,second));
           Serial.print(format_time(static_cast(hour + 7),minute,second));         
         }
       
         if(output==2){
           scheda_3:
           Serial.println(“Screen 3”);   
           gps.get_position(&lat, &lon, &fix_age);
           lcd.print(format_coords(lat,"Lat: "));
           Serial.print(format_coords(lat,"Lat: "));
           lcd.setCursor(0, 1);
           lcd.print(format_coords(lon,"Lon: "));
           Serial.print(format_coords(lon,"Lon: "));
       
        }
        if(output==3){
           scheda_4:
           Serial.println(“Screen 4”);
           lcd.print(“Speed: “);
           lcd.print(gps.f_speed_kmph()) + 1; lcd.print(” km/h”);
           Serial.print("Speed: ");
           Serial.println(gps.f_speed_kmph());
           lcd.setCursor(0, 1);
           lcd.print("Dir: ");
           lcd.print(TinyGPS::cardinal(gps.f_course()));
           Serial.print("Dir: ");
           Serial.println(TinyGPS::cardinal(gps.f_course()));
        }
       
        if(output==4){
          scheda_5:
          Serial.println(“Screen 5”);
           reading = analogRead(tempPin);
           tempC = reading / 9.31;
           lcd.print("Temp: ");lcd.print(tempC); lcd.print(char(223));lcd.print(“C”);
           Serial.print("Temperatura: ");
           Serial.println(tempC);
        }
  }




Attualmente il Led si accende non appena acquisito un FIX ma se poi tale fix viene perso il led rimane acceso ed il display fa vedere l'ultimo dato ricevuto.
Vorrei invece che il led si spenga (per poi riaccendersi nuovamente ricevuto il Fix) e che nel mentre il display visualizzi: "Lost Fix" + nella seconda riga la temperatura (dato sempre disponibile su A0).
ho fatto parecchie prove ma niente..........
Spero in un vs aiuto
Mauro

Scusa… dove trovo il comando:

  digitalWrite(ledPin, LOW);

nel codice non lo vedo… :sweat_smile:

Ciao, effettivamente il cod: digitalWrite(ledPin, LOW); non c'e' da nessuna parte............ e' questa la causa ? adesso provo ad integrarlo anche se non mi e' proprio chiaro in che punto metterlo....

Come al solito piu' occhi su di una cosa e meglio la si vede .... :)

MauroHKT: e' questa la causa ?

Certo. Se non dici al Led di spegnersi lui rimane acceso finché: 1) Si brucia (MTBF = 100'000 ore) 2) Lo stacchi dal circuito 3) Togli l'alimentazione ad Arduino.