Jump to content
gangsta777

Проблема с GPS и получением данных

Recommended Posts

Доброго времени суток!

Имеется Arduino UNO R3, к которой подключен GPS Bee через Arduino Wireless SD Shield. Также к ардуино подключен акселерометр GY-521. В ардуино залит следующий скетч:

#include <SoftwareSerial.h>
#include <TinyGPS.h>
#include <Wire.h>
 
TinyGPS gps;
SoftwareSerial gpsSerial(0, 1);
 
bool newdata = false;
unsigned long start;
static void smartdelay(unsigned long ms);
static void print_float(float val, float invalid, int len, int prec);
static void print_int(unsigned long val, int len);
static void print_date(TinyGPS &gps);
int16_t AcX,AcY,AcZ;
const int MPU_addr=0x68;
 
 
void setup()
{
  gpsSerial.begin(9600);
  Serial.begin(9600);
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x6B);  // PWR_MGMT_1 register
  Wire.write(0);     // set to zero (wakes up the MPU-6050)
  Wire.endTransmission(true);
  Serial.println("Waiting data of GPS...");
}
 
void loop()
{
  if (millis() - start > 500) //установка задержки в пол секунды между обновлением данных
  {
    newdata = readgps();
    if (newdata)
    {
      start = millis();
      float lat, lon;
      unsigned long date, time = 0;
 
      Wire.beginTransmission(MPU_addr);
      Wire.write(0x3B);  // starting with register 0x3B (ACCEL_XOUT_H)
      Wire.endTransmission(false);
      Wire.requestFrom(MPU_addr,14,true);  // request a total of 14 registers
      AcX=Wire.read()<<8|Wire.read();  // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)  
      AcY=Wire.read()<<8|Wire.read();  // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
      AcZ=Wire.read()<<8|Wire.read();  // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
      
      gps.f_get_position(&lat, &lon);
 
      print_float(lat, TinyGPS::GPS_INVALID_F_ANGLE, 10, 6);
      print_float(lon, TinyGPS::GPS_INVALID_F_ANGLE, 11, 6);
      print_date(gps);
      print_float(gps.f_speed_kmph(), TinyGPS::GPS_INVALID_F_SPEED, 6, 2);
      Serial.print("AcX = "); Serial.print(AcX);
      Serial.print(" | AcY = "); Serial.print(AcY);
      Serial.print(" | AcZ = "); Serial.print(AcZ);
      Serial.println();
 
    }
  }
}
 
// проверка наличия данных
 
bool readgps()
{
  while (gpsSerial.available())
  {
    int b = gpsSerial.read();
    //в библиотеке TinyGPS имеется ошибка: не обрабатываются данные с \r и \n
    if('\r' != b)
    {
      if (gps.encode(b))
       return true;
    }
  }
  return false;
}
 
static void smartdelay(unsigned long ms)
{
  unsigned long start = millis();
  do
  {
    while (gpsSerial.available())
      gps.encode(gpsSerial.read());
  } while (millis() - start < ms);
}
 
static void print_float(float val, float invalid, int len, int prec)
{
    Serial.print(val, prec);
    int vi = abs((int)val);
    int flen = prec + (val < 0.0 ? 2 : 1); // . and -
    flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
    for (int i=flen; i<len; ++i)
      Serial.print(' ');
    smartdelay(0);
}
 
static void print_date(TinyGPS &gps)
{
  int year;
  byte month, day, hour, minute, second, hundredths;
  gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths);
  char sz[32];
  sprintf(sz, "%02d/%02d/%02d %02d:%02d:%02d ",
      month, day, year, hour, minute, second);
  Serial.print(sz);
  smartdelay(0);
}
 
static void print_int(unsigned long val, int len)
{
  char sz[32];
  sprintf(sz, "%ld", val);
  sz[len] = 0;
  for (int i=strlen(sz); i<len; ++i)
    sz[i] = ' ';
  if (len > 0)
    sz[len-1] = ' ';
  Serial.print(sz);
  smartdelay(0);
}

При подключении Arduino к ПК примерно в течении 2-х минут я в мониторе порта могу увидеть данные, которые прилетают. Моим следующим шагом является подключение ардуино к Raspberry Pi 3 Model B для передачи этих данных в малину. Написал следующий скрипт на питоне для чтения порта USB:

import serial
ser = serial.Serial(&quot;/dev/ttyUSB0&quot;,9600)
while 1:
   ser.readline()

Я подключаю ардуино к малине по USB, запускаю скрипт и в терминале у меня выводится сообщение, прописанное в скетче в Setup и на этом все. Спустя 15 минут данных нет. Скрипт уже запускался и сообщения приходили где-то через 2-3 минуты +-, а теперь ничего.
pi@raspberrypi:~ $ python3 rx.py
b'Waiting data of GPS...\r\n'

В чем может быть проблема и как её решить?

Share this post


Link to post
Share on other sites

UPD: при подлючении Arduino к ПК данные начинают прилетать в течении 1-2 минут, проблем не наблюдается. Получается, что проблема в самой малине?

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Сфоткал на одном из заводов нашей необъятной.  
    • Снова мой родной город . Кота в наш зоопарк отдали. До тюрьмы оттуда далеко, не дойдёт. Хотя хрен его знает, не просто так ведь анекдот есть,  где мужик кота в лес увозил, потом заблудился, звонит жене, - кот дома?, передай ему трубку...   
    • Здесь нет гадальщиков, только измерильщики.
    • пришли запчасти наконец) - собрал иип для домашнего софтбокса-глаза мозолить достал) - поставил другой трансформатор- жадность- послабже - с али - проницаемость 2500 - пришлось играть с частотой и обмотками - вроде получилось - выше 55 градусов под нагрузкой - трансформатор не греется - запустился без проблем - частота 63 кГц. можно заниматься 3525)
    • Нашел схему распиновки гнезда, всё в норме. Пайка надёжная, оба канала замкнуты по схеме. Видимо проблема с процессором. Или попробовать перепрошить.
    • Всё зависит от измеряемого диапазона. Для 20-200 достаточно одного стерео микрофона а для 20-20000 групповому излучателю нужен групповой микрофон т.е каждому ширику свой. И опять же, измеряя АС в КдП имеем результирующую афчх ас+кдп. Если требуются параметры только ас, то проводить измерения следует вне кдп т.к паспортные данные всех промышленых ас и головок сняты в бэк, т.е без влияния пх кдп. Эдак можно приписать заслуги подъёма нч кдп любой доске с динамиками... ...и обвинять любую ас с линейной афчх в чрезмерном бубнении/гудении. И таки метод "движущегося микрофона" тут не катит т.к надо перемещать микрофон в пределах габаритов щита +30/45/60° шире. А делать это как должно делаться физически невозможно.
    • Три часа ночи. Муж с женой спят. Вдруг звонок в дверь. Муж, матерясь, идет открывать. На пороге стоит мужик, очевидно поддатый: - Друг, пойдем со мной, тут рядом, поможешь меня толкануть. - Ты, мужик, охренел, что ли? Три часа ночи. Иди кого-нибудь другого проси. Муж ложится опять в постель. Жена спрашивает, кто приходил. - Да, какой-то козел застрял, просил его толкнуть. Я его послал. - Ты просто зверюга какой-то. Помнишь, как у нас мотор заглох, да под дождем, и нас какой-то парень целый час толкал? Ты что, человека выручить не можешь? Муж, опять матерясь, вылезает из постели, одевается. Выходит во двор в полной темноте. Кричит: - Мужик! Ты где? Из темноты: - Здесь я! Иди сюда! - Да где здесь? - Ну здесь, на качелях!
  • Покупай!

×
×
  • Create New...