Pages: 1 2 [3]   Go Down
Author Topic: creare un gps  (Read 4876 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Faraday Member
**
Karma: 46
Posts: 5834
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Napoli
Offline Offline
Full Member
***
Karma: 0
Posts: 200
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Logged

0
Offline Offline
Faraday Member
**
Karma: 46
Posts: 5834
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Offline Offline
Newbie
*
Karma: 1
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:

Code:
  #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


* Gps display_bb.jpg (65.29 KB, 938x1083 - viewed 43 times.)
Logged

Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

salve sono uno nuovo in questo sito vorrei capire cosa e quanto si può fare cn questa ottima skeda smiley-wink 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
Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Napoli
Offline Offline
Full Member
***
Karma: 0
Posts: 200
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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
Logged

0
Offline Offline
Faraday Member
**
Karma: 46
Posts: 5834
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7079
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:

Code:
  #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

Scusa.... dove trovo il comando:
Code:
  digitalWrite(ledPin, LOW);
nel codice non lo vedo...  smiley-sweat
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 1
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ....  smiley
 
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7079
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 1
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho aggiunto il comando al codice e adesso il led lampeggia ad ogni loop se trova il feedgps altrimenti rimane spento.
grazie x il consiglio
ciao
Logged

Pages: 1 2 [3]   Go Up
Jump to: