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

  • Сообщения

    • Да, если он находится в "правильном" зале, да ещё и заполненном зрителями. Читал о каком-то концертном зале, где установлены специальные кресла, поглощение/отражение звука которых не зависит от того, сидит в нём человек или нет. P. S. А пианино в голом школьном спортзале звучит ужасно...
    • 50в*10А= 500вт. БП 2-х полярный, итого 100в*10А= 1квт. Может вам сварочный тр-р применить типа "Москит" ? Ещё ведь КПД тр-ра учесть надо.
    • как же нет? на приведенной тобой принципиальной схеме тоже А1 и А2 соединены с граундом. все твои изменения в схеме - полная чепуха. никаких внешних ОУ перед усилителями ошибки НЕ ДОЛЖНО БЫТЬ вообще. мне твое желание иметь индикацию по фигу. не надо рабочую схему превращать в нерабочую. более того, в моей схеме и в прошивке уже предусмотрена индикация стабилизации тока. ничего дополнительно внешними цепями делать не надо. и что это за "комбинация" из ЦАПов и переменных резисторов? и что это за делитель такой из резисторов R60 и R62 между граундами? что он должен делить между точками с равным потенциалом? решил делать измеритель - делай, а не калечь схему моего БП.
    • Замерьте осциллограммы на вторичной обмотке при работе от сети. Под нагрузкой и без. Там уже видно будет.
    • Ты что докопался,платил налоги исправно,не одного штрафа у меня нет и не было.за 25 лет работы к тому же.да и какие налоги если УСН и ЕНВД,раз в месяц и итоговые  квартальные,что за бред у тебя в голове Ну в 90 е начинал,а во время революции,а считаю что перестройкой назвали революцию и захват власти .вот пока был переход от комунык к камиталистам ,ушлые у власти пр ватезировали нефтегаз и промпредприятия.собрали инвестфонды ваучеры в обмен на бумажкис виртуальной выгодой,потом эти фотды прекратили своё существование, но возвращать то что взяли у народа забыли и простили.так у нас в 90 е мешками собирали и перепродавали эти чеки и везли всё в московию.теперь понимаете кто и что на эти чеки законно вроде всё приватизировал?
    • Обычно ЗУ для телефонов выполнены по схеме обратноходового преобразователя, который принципиально не боится перегрузки. Просто уменьшается выходное напряжение и время заряда увеличивается. Но имеет место быть вопрос качества и "запаса прочности" у применённых в ЗУ деталей. Т.е. некоторые зарядники даже и своих паспортных значений выдать не в состоянии.
    • Проблема решена. Причина была в  пробитом q409. Выражаю огромную благодарность Dima323 за грамотную и развернутую помощь!
×
×
  • Create New...